diff options
Diffstat (limited to 'arch/arm/plat-omap/include')
22 files changed, 524 insertions, 188 deletions
diff --git a/arch/arm/plat-omap/include/plat/clkdev.h b/arch/arm/plat-omap/include/plat/clkdev.h deleted file mode 100644 index 730c49d1ebd..00000000000 --- a/arch/arm/plat-omap/include/plat/clkdev.h +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | #ifndef __MACH_CLKDEV_H | ||
2 | #define __MACH_CLKDEV_H | ||
3 | |||
4 | static inline int __clk_get(struct clk *clk) | ||
5 | { | ||
6 | return 1; | ||
7 | } | ||
8 | |||
9 | static inline void __clk_put(struct clk *clk) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | #endif | ||
diff --git a/arch/arm/plat-omap/include/plat/clkdev_omap.h b/arch/arm/plat-omap/include/plat/clkdev_omap.h index f1899a3e417..387a9638991 100644 --- a/arch/arm/plat-omap/include/plat/clkdev_omap.h +++ b/arch/arm/plat-omap/include/plat/clkdev_omap.h | |||
@@ -39,6 +39,7 @@ struct omap_clk { | |||
39 | #define CK_36XX (1 << 10) /* 36xx/37xx-specific clocks */ | 39 | #define CK_36XX (1 << 10) /* 36xx/37xx-specific clocks */ |
40 | #define CK_443X (1 << 11) | 40 | #define CK_443X (1 << 11) |
41 | #define CK_TI816X (1 << 12) | 41 | #define CK_TI816X (1 << 12) |
42 | #define CK_446X (1 << 13) | ||
42 | 43 | ||
43 | 44 | ||
44 | #define CK_34XX (CK_3430ES1 | CK_3430ES2PLUS) | 45 | #define CK_34XX (CK_3430ES1 | CK_3430ES2PLUS) |
diff --git a/arch/arm/plat-omap/include/plat/clock.h b/arch/arm/plat-omap/include/plat/clock.h index 006e599c661..df4b9683f17 100644 --- a/arch/arm/plat-omap/include/plat/clock.h +++ b/arch/arm/plat-omap/include/plat/clock.h | |||
@@ -58,10 +58,12 @@ struct clkops { | |||
58 | #define RATE_IN_36XX (1 << 4) | 58 | #define RATE_IN_36XX (1 << 4) |
59 | #define RATE_IN_4430 (1 << 5) | 59 | #define RATE_IN_4430 (1 << 5) |
60 | #define RATE_IN_TI816X (1 << 6) | 60 | #define RATE_IN_TI816X (1 << 6) |
61 | #define RATE_IN_4460 (1 << 7) | ||
61 | 62 | ||
62 | #define RATE_IN_24XX (RATE_IN_242X | RATE_IN_243X) | 63 | #define RATE_IN_24XX (RATE_IN_242X | RATE_IN_243X) |
63 | #define RATE_IN_34XX (RATE_IN_3430ES1 | RATE_IN_3430ES2PLUS) | 64 | #define RATE_IN_34XX (RATE_IN_3430ES1 | RATE_IN_3430ES2PLUS) |
64 | #define RATE_IN_3XXX (RATE_IN_34XX | RATE_IN_36XX) | 65 | #define RATE_IN_3XXX (RATE_IN_34XX | RATE_IN_36XX) |
66 | #define RATE_IN_44XX (RATE_IN_4430 | RATE_IN_4460) | ||
65 | 67 | ||
66 | /* RATE_IN_3430ES2PLUS_36XX includes 34xx/35xx with ES >=2, and all 36xx/37xx */ | 68 | /* RATE_IN_3430ES2PLUS_36XX includes 34xx/35xx with ES >=2, and all 36xx/37xx */ |
67 | #define RATE_IN_3430ES2PLUS_36XX (RATE_IN_3430ES2PLUS | RATE_IN_36XX) | 69 | #define RATE_IN_3430ES2PLUS_36XX (RATE_IN_3430ES2PLUS | RATE_IN_36XX) |
@@ -152,7 +154,7 @@ struct dpll_data { | |||
152 | u16 max_multiplier; | 154 | u16 max_multiplier; |
153 | u8 last_rounded_n; | 155 | u8 last_rounded_n; |
154 | u8 min_divider; | 156 | u8 min_divider; |
155 | u8 max_divider; | 157 | u16 max_divider; |
156 | u8 modes; | 158 | u8 modes; |
157 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | 159 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) |
158 | void __iomem *autoidle_reg; | 160 | void __iomem *autoidle_reg; |
diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h index 5288130be96..4564cc697d7 100644 --- a/arch/arm/plat-omap/include/plat/common.h +++ b/arch/arm/plat-omap/include/plat/common.h | |||
@@ -34,7 +34,11 @@ | |||
34 | struct sys_timer; | 34 | struct sys_timer; |
35 | 35 | ||
36 | extern void omap_map_common_io(void); | 36 | extern void omap_map_common_io(void); |
37 | extern struct sys_timer omap_timer; | 37 | extern struct sys_timer omap1_timer; |
38 | extern struct sys_timer omap2_timer; | ||
39 | extern struct sys_timer omap3_timer; | ||
40 | extern struct sys_timer omap3_secure_timer; | ||
41 | extern struct sys_timer omap4_timer; | ||
38 | extern bool omap_32k_timer_init(void); | 42 | extern bool omap_32k_timer_init(void); |
39 | extern int __init omap_init_clocksource_32k(void); | 43 | extern int __init omap_init_clocksource_32k(void); |
40 | extern unsigned long long notrace omap_32k_sched_clock(void); | 44 | extern unsigned long long notrace omap_32k_sched_clock(void); |
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index 8198bb6cdb5..67b3d75884c 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h | |||
@@ -88,6 +88,7 @@ unsigned int omap_rev(void); | |||
88 | * cpu_is_omap243x(): True for OMAP2430 | 88 | * cpu_is_omap243x(): True for OMAP2430 |
89 | * cpu_is_omap343x(): True for OMAP3430 | 89 | * cpu_is_omap343x(): True for OMAP3430 |
90 | * cpu_is_omap443x(): True for OMAP4430 | 90 | * cpu_is_omap443x(): True for OMAP4430 |
91 | * cpu_is_omap446x(): True for OMAP4460 | ||
91 | */ | 92 | */ |
92 | #define GET_OMAP_CLASS (omap_rev() & 0xff) | 93 | #define GET_OMAP_CLASS (omap_rev() & 0xff) |
93 | 94 | ||
@@ -123,6 +124,7 @@ IS_OMAP_SUBCLASS(243x, 0x243) | |||
123 | IS_OMAP_SUBCLASS(343x, 0x343) | 124 | IS_OMAP_SUBCLASS(343x, 0x343) |
124 | IS_OMAP_SUBCLASS(363x, 0x363) | 125 | IS_OMAP_SUBCLASS(363x, 0x363) |
125 | IS_OMAP_SUBCLASS(443x, 0x443) | 126 | IS_OMAP_SUBCLASS(443x, 0x443) |
127 | IS_OMAP_SUBCLASS(446x, 0x446) | ||
126 | 128 | ||
127 | IS_TI_SUBCLASS(816x, 0x816) | 129 | IS_TI_SUBCLASS(816x, 0x816) |
128 | 130 | ||
@@ -137,6 +139,7 @@ IS_TI_SUBCLASS(816x, 0x816) | |||
137 | #define cpu_is_ti816x() 0 | 139 | #define cpu_is_ti816x() 0 |
138 | #define cpu_is_omap44xx() 0 | 140 | #define cpu_is_omap44xx() 0 |
139 | #define cpu_is_omap443x() 0 | 141 | #define cpu_is_omap443x() 0 |
142 | #define cpu_is_omap446x() 0 | ||
140 | 143 | ||
141 | #if defined(MULTI_OMAP1) | 144 | #if defined(MULTI_OMAP1) |
142 | # if defined(CONFIG_ARCH_OMAP730) | 145 | # if defined(CONFIG_ARCH_OMAP730) |
@@ -361,8 +364,10 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
361 | # if defined(CONFIG_ARCH_OMAP4) | 364 | # if defined(CONFIG_ARCH_OMAP4) |
362 | # undef cpu_is_omap44xx | 365 | # undef cpu_is_omap44xx |
363 | # undef cpu_is_omap443x | 366 | # undef cpu_is_omap443x |
367 | # undef cpu_is_omap446x | ||
364 | # define cpu_is_omap44xx() is_omap44xx() | 368 | # define cpu_is_omap44xx() is_omap44xx() |
365 | # define cpu_is_omap443x() is_omap443x() | 369 | # define cpu_is_omap443x() is_omap443x() |
370 | # define cpu_is_omap446x() is_omap446x() | ||
366 | # endif | 371 | # endif |
367 | 372 | ||
368 | /* Macros to detect if we have OMAP1 or OMAP2 */ | 373 | /* Macros to detect if we have OMAP1 or OMAP2 */ |
@@ -410,6 +415,9 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
410 | #define OMAP4430_REV_ES2_1 (OMAP443X_CLASS | (0x21 << 8)) | 415 | #define OMAP4430_REV_ES2_1 (OMAP443X_CLASS | (0x21 << 8)) |
411 | #define OMAP4430_REV_ES2_2 (OMAP443X_CLASS | (0x22 << 8)) | 416 | #define OMAP4430_REV_ES2_2 (OMAP443X_CLASS | (0x22 << 8)) |
412 | 417 | ||
418 | #define OMAP446X_CLASS 0x44600044 | ||
419 | #define OMAP4460_REV_ES1_0 (OMAP446X_CLASS | (0x10 << 8)) | ||
420 | |||
413 | /* | 421 | /* |
414 | * omap_chip bits | 422 | * omap_chip bits |
415 | * | 423 | * |
@@ -439,13 +447,15 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
439 | #define CHIP_IS_OMAP4430ES2_1 (1 << 12) | 447 | #define CHIP_IS_OMAP4430ES2_1 (1 << 12) |
440 | #define CHIP_IS_OMAP4430ES2_2 (1 << 13) | 448 | #define CHIP_IS_OMAP4430ES2_2 (1 << 13) |
441 | #define CHIP_IS_TI816X (1 << 14) | 449 | #define CHIP_IS_TI816X (1 << 14) |
450 | #define CHIP_IS_OMAP4460ES1_0 (1 << 15) | ||
442 | 451 | ||
443 | #define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430) | 452 | #define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430) |
444 | 453 | ||
445 | #define CHIP_IS_OMAP4430 (CHIP_IS_OMAP4430ES1 | \ | 454 | #define CHIP_IS_OMAP4430 (CHIP_IS_OMAP4430ES1 | \ |
446 | CHIP_IS_OMAP4430ES2 | \ | 455 | CHIP_IS_OMAP4430ES2 | \ |
447 | CHIP_IS_OMAP4430ES2_1 | \ | 456 | CHIP_IS_OMAP4430ES2_1 | \ |
448 | CHIP_IS_OMAP4430ES2_2) | 457 | CHIP_IS_OMAP4430ES2_2 | \ |
458 | CHIP_IS_OMAP4460ES1_0) | ||
449 | 459 | ||
450 | /* | 460 | /* |
451 | * "GE" here represents "greater than or equal to" in terms of ES | 461 | * "GE" here represents "greater than or equal to" in terms of ES |
@@ -468,7 +478,7 @@ void omap2_check_revision(void); | |||
468 | /* | 478 | /* |
469 | * Runtime detection of OMAP3 features | 479 | * Runtime detection of OMAP3 features |
470 | */ | 480 | */ |
471 | extern u32 omap3_features; | 481 | extern u32 omap_features; |
472 | 482 | ||
473 | #define OMAP3_HAS_L2CACHE BIT(0) | 483 | #define OMAP3_HAS_L2CACHE BIT(0) |
474 | #define OMAP3_HAS_IVA BIT(1) | 484 | #define OMAP3_HAS_IVA BIT(1) |
@@ -478,11 +488,15 @@ extern u32 omap3_features; | |||
478 | #define OMAP3_HAS_192MHZ_CLK BIT(5) | 488 | #define OMAP3_HAS_192MHZ_CLK BIT(5) |
479 | #define OMAP3_HAS_IO_WAKEUP BIT(6) | 489 | #define OMAP3_HAS_IO_WAKEUP BIT(6) |
480 | #define OMAP3_HAS_SDRC BIT(7) | 490 | #define OMAP3_HAS_SDRC BIT(7) |
491 | #define OMAP4_HAS_MPU_1GHZ BIT(8) | ||
492 | #define OMAP4_HAS_MPU_1_2GHZ BIT(9) | ||
493 | #define OMAP4_HAS_MPU_1_5GHZ BIT(10) | ||
494 | |||
481 | 495 | ||
482 | #define OMAP3_HAS_FEATURE(feat,flag) \ | 496 | #define OMAP3_HAS_FEATURE(feat,flag) \ |
483 | static inline unsigned int omap3_has_ ##feat(void) \ | 497 | static inline unsigned int omap3_has_ ##feat(void) \ |
484 | { \ | 498 | { \ |
485 | return (omap3_features & OMAP3_HAS_ ##flag); \ | 499 | return omap_features & OMAP3_HAS_ ##flag; \ |
486 | } \ | 500 | } \ |
487 | 501 | ||
488 | OMAP3_HAS_FEATURE(l2cache, L2CACHE) | 502 | OMAP3_HAS_FEATURE(l2cache, L2CACHE) |
@@ -494,4 +508,19 @@ OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK) | |||
494 | OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP) | 508 | OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP) |
495 | OMAP3_HAS_FEATURE(sdrc, SDRC) | 509 | OMAP3_HAS_FEATURE(sdrc, SDRC) |
496 | 510 | ||
511 | /* | ||
512 | * Runtime detection of OMAP4 features | ||
513 | */ | ||
514 | extern u32 omap_features; | ||
515 | |||
516 | #define OMAP4_HAS_FEATURE(feat, flag) \ | ||
517 | static inline unsigned int omap4_has_ ##feat(void) \ | ||
518 | { \ | ||
519 | return omap_features & OMAP4_HAS_ ##flag; \ | ||
520 | } \ | ||
521 | |||
522 | OMAP4_HAS_FEATURE(mpu_1ghz, MPU_1GHZ) | ||
523 | OMAP4_HAS_FEATURE(mpu_1_2ghz, MPU_1_2GHZ) | ||
524 | OMAP4_HAS_FEATURE(mpu_1_5ghz, MPU_1_5GHZ) | ||
525 | |||
497 | #endif | 526 | #endif |
diff --git a/arch/arm/plat-omap/include/plat/dma.h b/arch/arm/plat-omap/include/plat/dma.h index d1c916fcf77..dc562a5c0a8 100644 --- a/arch/arm/plat-omap/include/plat/dma.h +++ b/arch/arm/plat-omap/include/plat/dma.h | |||
@@ -195,6 +195,11 @@ | |||
195 | 195 | ||
196 | #define OMAP36XX_DMA_UART4_TX 81 /* S_DMA_80 */ | 196 | #define OMAP36XX_DMA_UART4_TX 81 /* S_DMA_80 */ |
197 | #define OMAP36XX_DMA_UART4_RX 82 /* S_DMA_81 */ | 197 | #define OMAP36XX_DMA_UART4_RX 82 /* S_DMA_81 */ |
198 | |||
199 | /* Only for AM35xx */ | ||
200 | #define AM35XX_DMA_UART4_TX 54 | ||
201 | #define AM35XX_DMA_UART4_RX 55 | ||
202 | |||
198 | /*----------------------------------------------------------------------------*/ | 203 | /*----------------------------------------------------------------------------*/ |
199 | 204 | ||
200 | #define OMAP1_DMA_TOUT_IRQ (1 << 0) | 205 | #define OMAP1_DMA_TOUT_IRQ (1 << 0) |
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index d6c70d2f403..eb5d16c60cd 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h | |||
@@ -32,6 +32,10 @@ | |||
32 | * 675 Mass Ave, Cambridge, MA 02139, USA. | 32 | * 675 Mass Ave, Cambridge, MA 02139, USA. |
33 | */ | 33 | */ |
34 | 34 | ||
35 | #include <linux/clk.h> | ||
36 | #include <linux/delay.h> | ||
37 | #include <linux/io.h> | ||
38 | |||
35 | #ifndef __ASM_ARCH_DMTIMER_H | 39 | #ifndef __ASM_ARCH_DMTIMER_H |
36 | #define __ASM_ARCH_DMTIMER_H | 40 | #define __ASM_ARCH_DMTIMER_H |
37 | 41 | ||
@@ -56,12 +60,8 @@ | |||
56 | */ | 60 | */ |
57 | #define OMAP_TIMER_IP_VERSION_1 0x1 | 61 | #define OMAP_TIMER_IP_VERSION_1 0x1 |
58 | struct omap_dm_timer; | 62 | struct omap_dm_timer; |
59 | extern struct omap_dm_timer *gptimer_wakeup; | ||
60 | extern struct sys_timer omap_timer; | ||
61 | struct clk; | 63 | struct clk; |
62 | 64 | ||
63 | int omap_dm_timer_init(void); | ||
64 | |||
65 | struct omap_dm_timer *omap_dm_timer_request(void); | 65 | struct omap_dm_timer *omap_dm_timer_request(void); |
66 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); | 66 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); |
67 | void omap_dm_timer_free(struct omap_dm_timer *timer); | 67 | void omap_dm_timer_free(struct omap_dm_timer *timer); |
@@ -93,5 +93,248 @@ void omap_dm_timer_write_counter(struct omap_dm_timer *timer, unsigned int value | |||
93 | 93 | ||
94 | int omap_dm_timers_active(void); | 94 | int omap_dm_timers_active(void); |
95 | 95 | ||
96 | /* | ||
97 | * Do not use the defines below, they are not needed. They should be only | ||
98 | * used by dmtimer.c and sys_timer related code. | ||
99 | */ | ||
100 | |||
101 | /* register offsets */ | ||
102 | #define _OMAP_TIMER_ID_OFFSET 0x00 | ||
103 | #define _OMAP_TIMER_OCP_CFG_OFFSET 0x10 | ||
104 | #define _OMAP_TIMER_SYS_STAT_OFFSET 0x14 | ||
105 | #define _OMAP_TIMER_STAT_OFFSET 0x18 | ||
106 | #define _OMAP_TIMER_INT_EN_OFFSET 0x1c | ||
107 | #define _OMAP_TIMER_WAKEUP_EN_OFFSET 0x20 | ||
108 | #define _OMAP_TIMER_CTRL_OFFSET 0x24 | ||
109 | #define OMAP_TIMER_CTRL_GPOCFG (1 << 14) | ||
110 | #define OMAP_TIMER_CTRL_CAPTMODE (1 << 13) | ||
111 | #define OMAP_TIMER_CTRL_PT (1 << 12) | ||
112 | #define OMAP_TIMER_CTRL_TCM_LOWTOHIGH (0x1 << 8) | ||
113 | #define OMAP_TIMER_CTRL_TCM_HIGHTOLOW (0x2 << 8) | ||
114 | #define OMAP_TIMER_CTRL_TCM_BOTHEDGES (0x3 << 8) | ||
115 | #define OMAP_TIMER_CTRL_SCPWM (1 << 7) | ||
116 | #define OMAP_TIMER_CTRL_CE (1 << 6) /* compare enable */ | ||
117 | #define OMAP_TIMER_CTRL_PRE (1 << 5) /* prescaler enable */ | ||
118 | #define OMAP_TIMER_CTRL_PTV_SHIFT 2 /* prescaler value shift */ | ||
119 | #define OMAP_TIMER_CTRL_POSTED (1 << 2) | ||
120 | #define OMAP_TIMER_CTRL_AR (1 << 1) /* auto-reload enable */ | ||
121 | #define OMAP_TIMER_CTRL_ST (1 << 0) /* start timer */ | ||
122 | #define _OMAP_TIMER_COUNTER_OFFSET 0x28 | ||
123 | #define _OMAP_TIMER_LOAD_OFFSET 0x2c | ||
124 | #define _OMAP_TIMER_TRIGGER_OFFSET 0x30 | ||
125 | #define _OMAP_TIMER_WRITE_PEND_OFFSET 0x34 | ||
126 | #define WP_NONE 0 /* no write pending bit */ | ||
127 | #define WP_TCLR (1 << 0) | ||
128 | #define WP_TCRR (1 << 1) | ||
129 | #define WP_TLDR (1 << 2) | ||
130 | #define WP_TTGR (1 << 3) | ||
131 | #define WP_TMAR (1 << 4) | ||
132 | #define WP_TPIR (1 << 5) | ||
133 | #define WP_TNIR (1 << 6) | ||
134 | #define WP_TCVR (1 << 7) | ||
135 | #define WP_TOCR (1 << 8) | ||
136 | #define WP_TOWR (1 << 9) | ||
137 | #define _OMAP_TIMER_MATCH_OFFSET 0x38 | ||
138 | #define _OMAP_TIMER_CAPTURE_OFFSET 0x3c | ||
139 | #define _OMAP_TIMER_IF_CTRL_OFFSET 0x40 | ||
140 | #define _OMAP_TIMER_CAPTURE2_OFFSET 0x44 /* TCAR2, 34xx only */ | ||
141 | #define _OMAP_TIMER_TICK_POS_OFFSET 0x48 /* TPIR, 34xx only */ | ||
142 | #define _OMAP_TIMER_TICK_NEG_OFFSET 0x4c /* TNIR, 34xx only */ | ||
143 | #define _OMAP_TIMER_TICK_COUNT_OFFSET 0x50 /* TCVR, 34xx only */ | ||
144 | #define _OMAP_TIMER_TICK_INT_MASK_SET_OFFSET 0x54 /* TOCR, 34xx only */ | ||
145 | #define _OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET 0x58 /* TOWR, 34xx only */ | ||
146 | |||
147 | /* register offsets with the write pending bit encoded */ | ||
148 | #define WPSHIFT 16 | ||
149 | |||
150 | #define OMAP_TIMER_ID_REG (_OMAP_TIMER_ID_OFFSET \ | ||
151 | | (WP_NONE << WPSHIFT)) | ||
152 | |||
153 | #define OMAP_TIMER_OCP_CFG_REG (_OMAP_TIMER_OCP_CFG_OFFSET \ | ||
154 | | (WP_NONE << WPSHIFT)) | ||
155 | |||
156 | #define OMAP_TIMER_SYS_STAT_REG (_OMAP_TIMER_SYS_STAT_OFFSET \ | ||
157 | | (WP_NONE << WPSHIFT)) | ||
158 | |||
159 | #define OMAP_TIMER_STAT_REG (_OMAP_TIMER_STAT_OFFSET \ | ||
160 | | (WP_NONE << WPSHIFT)) | ||
161 | |||
162 | #define OMAP_TIMER_INT_EN_REG (_OMAP_TIMER_INT_EN_OFFSET \ | ||
163 | | (WP_NONE << WPSHIFT)) | ||
164 | |||
165 | #define OMAP_TIMER_WAKEUP_EN_REG (_OMAP_TIMER_WAKEUP_EN_OFFSET \ | ||
166 | | (WP_NONE << WPSHIFT)) | ||
167 | |||
168 | #define OMAP_TIMER_CTRL_REG (_OMAP_TIMER_CTRL_OFFSET \ | ||
169 | | (WP_TCLR << WPSHIFT)) | ||
170 | |||
171 | #define OMAP_TIMER_COUNTER_REG (_OMAP_TIMER_COUNTER_OFFSET \ | ||
172 | | (WP_TCRR << WPSHIFT)) | ||
173 | |||
174 | #define OMAP_TIMER_LOAD_REG (_OMAP_TIMER_LOAD_OFFSET \ | ||
175 | | (WP_TLDR << WPSHIFT)) | ||
176 | |||
177 | #define OMAP_TIMER_TRIGGER_REG (_OMAP_TIMER_TRIGGER_OFFSET \ | ||
178 | | (WP_TTGR << WPSHIFT)) | ||
179 | |||
180 | #define OMAP_TIMER_WRITE_PEND_REG (_OMAP_TIMER_WRITE_PEND_OFFSET \ | ||
181 | | (WP_NONE << WPSHIFT)) | ||
182 | |||
183 | #define OMAP_TIMER_MATCH_REG (_OMAP_TIMER_MATCH_OFFSET \ | ||
184 | | (WP_TMAR << WPSHIFT)) | ||
185 | |||
186 | #define OMAP_TIMER_CAPTURE_REG (_OMAP_TIMER_CAPTURE_OFFSET \ | ||
187 | | (WP_NONE << WPSHIFT)) | ||
188 | |||
189 | #define OMAP_TIMER_IF_CTRL_REG (_OMAP_TIMER_IF_CTRL_OFFSET \ | ||
190 | | (WP_NONE << WPSHIFT)) | ||
191 | |||
192 | #define OMAP_TIMER_CAPTURE2_REG (_OMAP_TIMER_CAPTURE2_OFFSET \ | ||
193 | | (WP_NONE << WPSHIFT)) | ||
194 | |||
195 | #define OMAP_TIMER_TICK_POS_REG (_OMAP_TIMER_TICK_POS_OFFSET \ | ||
196 | | (WP_TPIR << WPSHIFT)) | ||
197 | |||
198 | #define OMAP_TIMER_TICK_NEG_REG (_OMAP_TIMER_TICK_NEG_OFFSET \ | ||
199 | | (WP_TNIR << WPSHIFT)) | ||
200 | |||
201 | #define OMAP_TIMER_TICK_COUNT_REG (_OMAP_TIMER_TICK_COUNT_OFFSET \ | ||
202 | | (WP_TCVR << WPSHIFT)) | ||
203 | |||
204 | #define OMAP_TIMER_TICK_INT_MASK_SET_REG \ | ||
205 | (_OMAP_TIMER_TICK_INT_MASK_SET_OFFSET | (WP_TOCR << WPSHIFT)) | ||
206 | |||
207 | #define OMAP_TIMER_TICK_INT_MASK_COUNT_REG \ | ||
208 | (_OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET | (WP_TOWR << WPSHIFT)) | ||
209 | |||
210 | struct omap_dm_timer { | ||
211 | unsigned long phys_base; | ||
212 | int irq; | ||
213 | #ifdef CONFIG_ARCH_OMAP2PLUS | ||
214 | struct clk *iclk, *fclk; | ||
215 | #endif | ||
216 | void __iomem *io_base; | ||
217 | unsigned long rate; | ||
218 | unsigned reserved:1; | ||
219 | unsigned enabled:1; | ||
220 | unsigned posted:1; | ||
221 | }; | ||
222 | |||
223 | extern u32 sys_timer_reserved; | ||
224 | void omap_dm_timer_prepare(struct omap_dm_timer *timer); | ||
225 | |||
226 | static inline u32 __omap_dm_timer_read(void __iomem *base, u32 reg, | ||
227 | int posted) | ||
228 | { | ||
229 | if (posted) | ||
230 | while (__raw_readl(base + (OMAP_TIMER_WRITE_PEND_REG & 0xff)) | ||
231 | & (reg >> WPSHIFT)) | ||
232 | cpu_relax(); | ||
233 | |||
234 | return __raw_readl(base + (reg & 0xff)); | ||
235 | } | ||
236 | |||
237 | static inline void __omap_dm_timer_write(void __iomem *base, u32 reg, u32 val, | ||
238 | int posted) | ||
239 | { | ||
240 | if (posted) | ||
241 | while (__raw_readl(base + (OMAP_TIMER_WRITE_PEND_REG & 0xff)) | ||
242 | & (reg >> WPSHIFT)) | ||
243 | cpu_relax(); | ||
244 | |||
245 | __raw_writel(val, base + (reg & 0xff)); | ||
246 | } | ||
247 | |||
248 | /* Assumes the source clock has been set by caller */ | ||
249 | static inline void __omap_dm_timer_reset(void __iomem *base, int autoidle, | ||
250 | int wakeup) | ||
251 | { | ||
252 | u32 l; | ||
253 | |||
254 | l = __omap_dm_timer_read(base, OMAP_TIMER_OCP_CFG_REG, 0); | ||
255 | l |= 0x02 << 3; /* Set to smart-idle mode */ | ||
256 | l |= 0x2 << 8; /* Set clock activity to perserve f-clock on idle */ | ||
257 | |||
258 | if (autoidle) | ||
259 | l |= 0x1 << 0; | ||
260 | |||
261 | if (wakeup) | ||
262 | l |= 1 << 2; | ||
263 | |||
264 | __omap_dm_timer_write(base, OMAP_TIMER_OCP_CFG_REG, l, 0); | ||
265 | |||
266 | /* Match hardware reset default of posted mode */ | ||
267 | __omap_dm_timer_write(base, OMAP_TIMER_IF_CTRL_REG, | ||
268 | OMAP_TIMER_CTRL_POSTED, 0); | ||
269 | } | ||
270 | |||
271 | static inline int __omap_dm_timer_set_source(struct clk *timer_fck, | ||
272 | struct clk *parent) | ||
273 | { | ||
274 | int ret; | ||
275 | |||
276 | clk_disable(timer_fck); | ||
277 | ret = clk_set_parent(timer_fck, parent); | ||
278 | clk_enable(timer_fck); | ||
279 | |||
280 | /* | ||
281 | * When the functional clock disappears, too quick writes seem | ||
282 | * to cause an abort. XXX Is this still necessary? | ||
283 | */ | ||
284 | __delay(300000); | ||
285 | |||
286 | return ret; | ||
287 | } | ||
288 | |||
289 | static inline void __omap_dm_timer_stop(void __iomem *base, int posted, | ||
290 | unsigned long rate) | ||
291 | { | ||
292 | u32 l; | ||
293 | |||
294 | l = __omap_dm_timer_read(base, OMAP_TIMER_CTRL_REG, posted); | ||
295 | if (l & OMAP_TIMER_CTRL_ST) { | ||
296 | l &= ~0x1; | ||
297 | __omap_dm_timer_write(base, OMAP_TIMER_CTRL_REG, l, posted); | ||
298 | #ifdef CONFIG_ARCH_OMAP2PLUS | ||
299 | /* Readback to make sure write has completed */ | ||
300 | __omap_dm_timer_read(base, OMAP_TIMER_CTRL_REG, posted); | ||
301 | /* | ||
302 | * Wait for functional clock period x 3.5 to make sure that | ||
303 | * timer is stopped | ||
304 | */ | ||
305 | udelay(3500000 / rate + 1); | ||
306 | #endif | ||
307 | } | ||
308 | |||
309 | /* Ack possibly pending interrupt */ | ||
310 | __omap_dm_timer_write(base, OMAP_TIMER_STAT_REG, | ||
311 | OMAP_TIMER_INT_OVERFLOW, 0); | ||
312 | } | ||
313 | |||
314 | static inline void __omap_dm_timer_load_start(void __iomem *base, u32 ctrl, | ||
315 | unsigned int load, int posted) | ||
316 | { | ||
317 | __omap_dm_timer_write(base, OMAP_TIMER_COUNTER_REG, load, posted); | ||
318 | __omap_dm_timer_write(base, OMAP_TIMER_CTRL_REG, ctrl, posted); | ||
319 | } | ||
320 | |||
321 | static inline void __omap_dm_timer_int_enable(void __iomem *base, | ||
322 | unsigned int value) | ||
323 | { | ||
324 | __omap_dm_timer_write(base, OMAP_TIMER_INT_EN_REG, value, 0); | ||
325 | __omap_dm_timer_write(base, OMAP_TIMER_WAKEUP_EN_REG, value, 0); | ||
326 | } | ||
327 | |||
328 | static inline unsigned int __omap_dm_timer_read_counter(void __iomem *base, | ||
329 | int posted) | ||
330 | { | ||
331 | return __omap_dm_timer_read(base, OMAP_TIMER_COUNTER_REG, posted); | ||
332 | } | ||
333 | |||
334 | static inline void __omap_dm_timer_write_status(void __iomem *base, | ||
335 | unsigned int value) | ||
336 | { | ||
337 | __omap_dm_timer_write(base, OMAP_TIMER_STAT_REG, value, 0); | ||
338 | } | ||
96 | 339 | ||
97 | #endif /* __ASM_ARCH_DMTIMER_H */ | 340 | #endif /* __ASM_ARCH_DMTIMER_H */ |
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h index ec97e00cb58..91e8de3db08 100644 --- a/arch/arm/plat-omap/include/plat/gpio.h +++ b/arch/arm/plat-omap/include/plat/gpio.h | |||
@@ -174,12 +174,32 @@ struct omap_gpio_dev_attr { | |||
174 | bool dbck_flag; /* dbck required or not - True for OMAP3&4 */ | 174 | bool dbck_flag; /* dbck required or not - True for OMAP3&4 */ |
175 | }; | 175 | }; |
176 | 176 | ||
177 | struct omap_gpio_reg_offs { | ||
178 | u16 revision; | ||
179 | u16 direction; | ||
180 | u16 datain; | ||
181 | u16 dataout; | ||
182 | u16 set_dataout; | ||
183 | u16 clr_dataout; | ||
184 | u16 irqstatus; | ||
185 | u16 irqstatus2; | ||
186 | u16 irqenable; | ||
187 | u16 set_irqenable; | ||
188 | u16 clr_irqenable; | ||
189 | u16 debounce; | ||
190 | u16 debounce_en; | ||
191 | |||
192 | bool irqenable_inv; | ||
193 | }; | ||
194 | |||
177 | struct omap_gpio_platform_data { | 195 | struct omap_gpio_platform_data { |
178 | u16 virtual_irq_start; | 196 | u16 virtual_irq_start; |
179 | int bank_type; | 197 | int bank_type; |
180 | int bank_width; /* GPIO bank width */ | 198 | int bank_width; /* GPIO bank width */ |
181 | int bank_stride; /* Only needed for omap1 MPUIO */ | 199 | int bank_stride; /* Only needed for omap1 MPUIO */ |
182 | bool dbck_flag; /* dbck required or not - True for OMAP3&4 */ | 200 | bool dbck_flag; /* dbck required or not - True for OMAP3&4 */ |
201 | |||
202 | struct omap_gpio_reg_offs *regs; | ||
183 | }; | 203 | }; |
184 | 204 | ||
185 | /* TODO: Analyze removing gpio_bank_count usage from driver code */ | 205 | /* TODO: Analyze removing gpio_bank_count usage from driver code */ |
diff --git a/arch/arm/plat-omap/include/plat/i2c.h b/arch/arm/plat-omap/include/plat/i2c.h index 878d632c409..7c22b9e10dc 100644 --- a/arch/arm/plat-omap/include/plat/i2c.h +++ b/arch/arm/plat-omap/include/plat/i2c.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #define __ASM__ARCH_OMAP_I2C_H | 22 | #define __ASM__ARCH_OMAP_I2C_H |
23 | 23 | ||
24 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
25 | #include <linux/i2c-omap.h> | ||
25 | 26 | ||
26 | #if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE) | 27 | #if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE) |
27 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, | 28 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, |
@@ -46,10 +47,13 @@ static inline int omap_register_i2c_bus(int bus_id, u32 clkrate, | |||
46 | */ | 47 | */ |
47 | struct omap_i2c_dev_attr { | 48 | struct omap_i2c_dev_attr { |
48 | u8 fifo_depth; | 49 | u8 fifo_depth; |
49 | u8 flags; | 50 | u32 flags; |
50 | }; | 51 | }; |
51 | 52 | ||
52 | void __init omap1_i2c_mux_pins(int bus_id); | 53 | void __init omap1_i2c_mux_pins(int bus_id); |
53 | void __init omap2_i2c_mux_pins(int bus_id); | 54 | void __init omap2_i2c_mux_pins(int bus_id); |
54 | 55 | ||
56 | struct omap_hwmod; | ||
57 | int omap_i2c_reset(struct omap_hwmod *oh); | ||
58 | |||
55 | #endif /* __ASM__ARCH_OMAP_I2C_H */ | 59 | #endif /* __ASM__ARCH_OMAP_I2C_H */ |
diff --git a/arch/arm/plat-omap/include/plat/iommu.h b/arch/arm/plat-omap/include/plat/iommu.h index 174f1b9c8c0..7a6ec98a08e 100644 --- a/arch/arm/plat-omap/include/plat/iommu.h +++ b/arch/arm/plat-omap/include/plat/iommu.h | |||
@@ -25,16 +25,17 @@ struct iotlb_entry { | |||
25 | }; | 25 | }; |
26 | }; | 26 | }; |
27 | 27 | ||
28 | struct iommu { | 28 | struct omap_iommu { |
29 | const char *name; | 29 | const char *name; |
30 | struct module *owner; | 30 | struct module *owner; |
31 | struct clk *clk; | 31 | struct clk *clk; |
32 | void __iomem *regbase; | 32 | void __iomem *regbase; |
33 | struct device *dev; | 33 | struct device *dev; |
34 | void *isr_priv; | 34 | void *isr_priv; |
35 | struct iommu_domain *domain; | ||
35 | 36 | ||
36 | unsigned int refcount; | 37 | unsigned int refcount; |
37 | struct mutex iommu_lock; /* global for this whole object */ | 38 | spinlock_t iommu_lock; /* global for this whole object */ |
38 | 39 | ||
39 | /* | 40 | /* |
40 | * We don't change iopgd for a situation like pgd for a task, | 41 | * We don't change iopgd for a situation like pgd for a task, |
@@ -48,8 +49,6 @@ struct iommu { | |||
48 | struct list_head mmap; | 49 | struct list_head mmap; |
49 | struct mutex mmap_lock; /* protect mmap */ | 50 | struct mutex mmap_lock; /* protect mmap */ |
50 | 51 | ||
51 | int (*isr)(struct iommu *obj, u32 da, u32 iommu_errs, void *priv); | ||
52 | |||
53 | void *ctx; /* iommu context: registres saved area */ | 52 | void *ctx; /* iommu context: registres saved area */ |
54 | u32 da_start; | 53 | u32 da_start; |
55 | u32 da_end; | 54 | u32 da_end; |
@@ -81,25 +80,27 @@ struct iotlb_lock { | |||
81 | struct iommu_functions { | 80 | struct iommu_functions { |
82 | unsigned long version; | 81 | unsigned long version; |
83 | 82 | ||
84 | int (*enable)(struct iommu *obj); | 83 | int (*enable)(struct omap_iommu *obj); |
85 | void (*disable)(struct iommu *obj); | 84 | void (*disable)(struct omap_iommu *obj); |
86 | void (*set_twl)(struct iommu *obj, bool on); | 85 | void (*set_twl)(struct omap_iommu *obj, bool on); |
87 | u32 (*fault_isr)(struct iommu *obj, u32 *ra); | 86 | u32 (*fault_isr)(struct omap_iommu *obj, u32 *ra); |
88 | 87 | ||
89 | void (*tlb_read_cr)(struct iommu *obj, struct cr_regs *cr); | 88 | void (*tlb_read_cr)(struct omap_iommu *obj, struct cr_regs *cr); |
90 | void (*tlb_load_cr)(struct iommu *obj, struct cr_regs *cr); | 89 | void (*tlb_load_cr)(struct omap_iommu *obj, struct cr_regs *cr); |
91 | 90 | ||
92 | struct cr_regs *(*alloc_cr)(struct iommu *obj, struct iotlb_entry *e); | 91 | struct cr_regs *(*alloc_cr)(struct omap_iommu *obj, |
92 | struct iotlb_entry *e); | ||
93 | int (*cr_valid)(struct cr_regs *cr); | 93 | int (*cr_valid)(struct cr_regs *cr); |
94 | u32 (*cr_to_virt)(struct cr_regs *cr); | 94 | u32 (*cr_to_virt)(struct cr_regs *cr); |
95 | void (*cr_to_e)(struct cr_regs *cr, struct iotlb_entry *e); | 95 | void (*cr_to_e)(struct cr_regs *cr, struct iotlb_entry *e); |
96 | ssize_t (*dump_cr)(struct iommu *obj, struct cr_regs *cr, char *buf); | 96 | ssize_t (*dump_cr)(struct omap_iommu *obj, struct cr_regs *cr, |
97 | char *buf); | ||
97 | 98 | ||
98 | u32 (*get_pte_attr)(struct iotlb_entry *e); | 99 | u32 (*get_pte_attr)(struct iotlb_entry *e); |
99 | 100 | ||
100 | void (*save_ctx)(struct iommu *obj); | 101 | void (*save_ctx)(struct omap_iommu *obj); |
101 | void (*restore_ctx)(struct iommu *obj); | 102 | void (*restore_ctx)(struct omap_iommu *obj); |
102 | ssize_t (*dump_ctx)(struct iommu *obj, char *buf, ssize_t len); | 103 | ssize_t (*dump_ctx)(struct omap_iommu *obj, char *buf, ssize_t len); |
103 | }; | 104 | }; |
104 | 105 | ||
105 | struct iommu_platform_data { | 106 | struct iommu_platform_data { |
@@ -150,40 +151,30 @@ struct iommu_platform_data { | |||
150 | /* | 151 | /* |
151 | * global functions | 152 | * global functions |
152 | */ | 153 | */ |
153 | extern u32 iommu_arch_version(void); | 154 | extern u32 omap_iommu_arch_version(void); |
154 | 155 | ||
155 | extern void iotlb_cr_to_e(struct cr_regs *cr, struct iotlb_entry *e); | 156 | extern void omap_iotlb_cr_to_e(struct cr_regs *cr, struct iotlb_entry *e); |
156 | extern u32 iotlb_cr_to_virt(struct cr_regs *cr); | 157 | |
157 | 158 | extern int | |
158 | extern int load_iotlb_entry(struct iommu *obj, struct iotlb_entry *e); | 159 | omap_iopgtable_store_entry(struct omap_iommu *obj, struct iotlb_entry *e); |
159 | extern void iommu_set_twl(struct iommu *obj, bool on); | 160 | |
160 | extern void flush_iotlb_page(struct iommu *obj, u32 da); | 161 | extern int omap_iommu_set_isr(const char *name, |
161 | extern void flush_iotlb_range(struct iommu *obj, u32 start, u32 end); | 162 | int (*isr)(struct omap_iommu *obj, u32 da, u32 iommu_errs, |
162 | extern void flush_iotlb_all(struct iommu *obj); | ||
163 | |||
164 | extern int iopgtable_store_entry(struct iommu *obj, struct iotlb_entry *e); | ||
165 | extern void iopgtable_lookup_entry(struct iommu *obj, u32 da, u32 **ppgd, | ||
166 | u32 **ppte); | ||
167 | extern size_t iopgtable_clear_entry(struct iommu *obj, u32 iova); | ||
168 | |||
169 | extern int iommu_set_da_range(struct iommu *obj, u32 start, u32 end); | ||
170 | extern struct iommu *iommu_get(const char *name); | ||
171 | extern void iommu_put(struct iommu *obj); | ||
172 | extern int iommu_set_isr(const char *name, | ||
173 | int (*isr)(struct iommu *obj, u32 da, u32 iommu_errs, | ||
174 | void *priv), | 163 | void *priv), |
175 | void *isr_priv); | 164 | void *isr_priv); |
176 | 165 | ||
177 | extern void iommu_save_ctx(struct iommu *obj); | 166 | extern void omap_iommu_save_ctx(struct device *dev); |
178 | extern void iommu_restore_ctx(struct iommu *obj); | 167 | extern void omap_iommu_restore_ctx(struct device *dev); |
179 | 168 | ||
180 | extern int install_iommu_arch(const struct iommu_functions *ops); | 169 | extern int omap_install_iommu_arch(const struct iommu_functions *ops); |
181 | extern void uninstall_iommu_arch(const struct iommu_functions *ops); | 170 | extern void omap_uninstall_iommu_arch(const struct iommu_functions *ops); |
182 | 171 | ||
183 | extern int foreach_iommu_device(void *data, | 172 | extern int omap_foreach_iommu_device(void *data, |
184 | int (*fn)(struct device *, void *)); | 173 | int (*fn)(struct device *, void *)); |
185 | 174 | ||
186 | extern ssize_t iommu_dump_ctx(struct iommu *obj, char *buf, ssize_t len); | 175 | extern ssize_t |
187 | extern size_t dump_tlb_entries(struct iommu *obj, char *buf, ssize_t len); | 176 | omap_iommu_dump_ctx(struct omap_iommu *obj, char *buf, ssize_t len); |
177 | extern size_t | ||
178 | omap_dump_tlb_entries(struct omap_iommu *obj, char *buf, ssize_t len); | ||
188 | 179 | ||
189 | #endif /* __MACH_IOMMU_H */ | 180 | #endif /* __MACH_IOMMU_H */ |
diff --git a/arch/arm/plat-omap/include/plat/iommu2.h b/arch/arm/plat-omap/include/plat/iommu2.h index 10ad05f410e..d4116b595e4 100644 --- a/arch/arm/plat-omap/include/plat/iommu2.h +++ b/arch/arm/plat-omap/include/plat/iommu2.h | |||
@@ -83,12 +83,12 @@ | |||
83 | /* | 83 | /* |
84 | * register accessors | 84 | * register accessors |
85 | */ | 85 | */ |
86 | static inline u32 iommu_read_reg(struct iommu *obj, size_t offs) | 86 | static inline u32 iommu_read_reg(struct omap_iommu *obj, size_t offs) |
87 | { | 87 | { |
88 | return __raw_readl(obj->regbase + offs); | 88 | return __raw_readl(obj->regbase + offs); |
89 | } | 89 | } |
90 | 90 | ||
91 | static inline void iommu_write_reg(struct iommu *obj, u32 val, size_t offs) | 91 | static inline void iommu_write_reg(struct omap_iommu *obj, u32 val, size_t offs) |
92 | { | 92 | { |
93 | __raw_writel(val, obj->regbase + offs); | 93 | __raw_writel(val, obj->regbase + offs); |
94 | } | 94 | } |
diff --git a/arch/arm/plat-omap/include/plat/iopgtable.h b/arch/arm/plat-omap/include/plat/iopgtable.h new file mode 100644 index 00000000000..e0c56aafc2e --- /dev/null +++ b/arch/arm/plat-omap/include/plat/iopgtable.h | |||
@@ -0,0 +1,102 @@ | |||
1 | /* | ||
2 | * omap iommu: pagetable definitions | ||
3 | * | ||
4 | * Copyright (C) 2008-2010 Nokia Corporation | ||
5 | * | ||
6 | * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __PLAT_OMAP_IOMMU_H | ||
14 | #define __PLAT_OMAP_IOMMU_H | ||
15 | |||
16 | /* | ||
17 | * "L2 table" address mask and size definitions. | ||
18 | */ | ||
19 | #define IOPGD_SHIFT 20 | ||
20 | #define IOPGD_SIZE (1UL << IOPGD_SHIFT) | ||
21 | #define IOPGD_MASK (~(IOPGD_SIZE - 1)) | ||
22 | |||
23 | /* | ||
24 | * "section" address mask and size definitions. | ||
25 | */ | ||
26 | #define IOSECTION_SHIFT 20 | ||
27 | #define IOSECTION_SIZE (1UL << IOSECTION_SHIFT) | ||
28 | #define IOSECTION_MASK (~(IOSECTION_SIZE - 1)) | ||
29 | |||
30 | /* | ||
31 | * "supersection" address mask and size definitions. | ||
32 | */ | ||
33 | #define IOSUPER_SHIFT 24 | ||
34 | #define IOSUPER_SIZE (1UL << IOSUPER_SHIFT) | ||
35 | #define IOSUPER_MASK (~(IOSUPER_SIZE - 1)) | ||
36 | |||
37 | #define PTRS_PER_IOPGD (1UL << (32 - IOPGD_SHIFT)) | ||
38 | #define IOPGD_TABLE_SIZE (PTRS_PER_IOPGD * sizeof(u32)) | ||
39 | |||
40 | /* | ||
41 | * "small page" address mask and size definitions. | ||
42 | */ | ||
43 | #define IOPTE_SHIFT 12 | ||
44 | #define IOPTE_SIZE (1UL << IOPTE_SHIFT) | ||
45 | #define IOPTE_MASK (~(IOPTE_SIZE - 1)) | ||
46 | |||
47 | /* | ||
48 | * "large page" address mask and size definitions. | ||
49 | */ | ||
50 | #define IOLARGE_SHIFT 16 | ||
51 | #define IOLARGE_SIZE (1UL << IOLARGE_SHIFT) | ||
52 | #define IOLARGE_MASK (~(IOLARGE_SIZE - 1)) | ||
53 | |||
54 | #define PTRS_PER_IOPTE (1UL << (IOPGD_SHIFT - IOPTE_SHIFT)) | ||
55 | #define IOPTE_TABLE_SIZE (PTRS_PER_IOPTE * sizeof(u32)) | ||
56 | |||
57 | #define IOPAGE_MASK IOPTE_MASK | ||
58 | |||
59 | /* | ||
60 | * some descriptor attributes. | ||
61 | */ | ||
62 | #define IOPGD_TABLE (1 << 0) | ||
63 | #define IOPGD_SECTION (2 << 0) | ||
64 | #define IOPGD_SUPER (1 << 18 | 2 << 0) | ||
65 | |||
66 | #define iopgd_is_table(x) (((x) & 3) == IOPGD_TABLE) | ||
67 | |||
68 | #define IOPTE_SMALL (2 << 0) | ||
69 | #define IOPTE_LARGE (1 << 0) | ||
70 | |||
71 | /* to find an entry in a page-table-directory */ | ||
72 | #define iopgd_index(da) (((da) >> IOPGD_SHIFT) & (PTRS_PER_IOPGD - 1)) | ||
73 | #define iopgd_offset(obj, da) ((obj)->iopgd + iopgd_index(da)) | ||
74 | |||
75 | #define iopgd_page_paddr(iopgd) (*iopgd & ~((1 << 10) - 1)) | ||
76 | #define iopgd_page_vaddr(iopgd) ((u32 *)phys_to_virt(iopgd_page_paddr(iopgd))) | ||
77 | |||
78 | /* to find an entry in the second-level page table. */ | ||
79 | #define iopte_index(da) (((da) >> IOPTE_SHIFT) & (PTRS_PER_IOPTE - 1)) | ||
80 | #define iopte_offset(iopgd, da) (iopgd_page_vaddr(iopgd) + iopte_index(da)) | ||
81 | |||
82 | static inline u32 iotlb_init_entry(struct iotlb_entry *e, u32 da, u32 pa, | ||
83 | u32 flags) | ||
84 | { | ||
85 | memset(e, 0, sizeof(*e)); | ||
86 | |||
87 | e->da = da; | ||
88 | e->pa = pa; | ||
89 | e->valid = 1; | ||
90 | /* FIXME: add OMAP1 support */ | ||
91 | e->pgsz = flags & MMU_CAM_PGSZ_MASK; | ||
92 | e->endian = flags & MMU_RAM_ENDIAN_MASK; | ||
93 | e->elsz = flags & MMU_RAM_ELSZ_MASK; | ||
94 | e->mixed = flags & MMU_RAM_MIXED_MASK; | ||
95 | |||
96 | return iopgsz_to_bytes(e->pgsz); | ||
97 | } | ||
98 | |||
99 | #define to_iommu(dev) \ | ||
100 | (struct omap_iommu *)platform_get_drvdata(to_platform_device(dev)) | ||
101 | |||
102 | #endif /* __PLAT_OMAP_IOMMU_H */ | ||
diff --git a/arch/arm/plat-omap/include/plat/iovmm.h b/arch/arm/plat-omap/include/plat/iovmm.h index e992b9655fb..498e57cda6c 100644 --- a/arch/arm/plat-omap/include/plat/iovmm.h +++ b/arch/arm/plat-omap/include/plat/iovmm.h | |||
@@ -13,8 +13,10 @@ | |||
13 | #ifndef __IOMMU_MMAP_H | 13 | #ifndef __IOMMU_MMAP_H |
14 | #define __IOMMU_MMAP_H | 14 | #define __IOMMU_MMAP_H |
15 | 15 | ||
16 | #include <linux/iommu.h> | ||
17 | |||
16 | struct iovm_struct { | 18 | struct iovm_struct { |
17 | struct iommu *iommu; /* iommu object which this belongs to */ | 19 | struct omap_iommu *iommu; /* iommu object which this belongs to */ |
18 | u32 da_start; /* area definition */ | 20 | u32 da_start; /* area definition */ |
19 | u32 da_end; | 21 | u32 da_end; |
20 | u32 flags; /* IOVMF_: see below */ | 22 | u32 flags; /* IOVMF_: see below */ |
@@ -70,20 +72,18 @@ struct iovm_struct { | |||
70 | #define IOVMF_DA_FIXED (1 << (4 + IOVMF_SW_SHIFT)) | 72 | #define IOVMF_DA_FIXED (1 << (4 + IOVMF_SW_SHIFT)) |
71 | 73 | ||
72 | 74 | ||
73 | extern struct iovm_struct *find_iovm_area(struct iommu *obj, u32 da); | 75 | extern struct iovm_struct *omap_find_iovm_area(struct device *dev, u32 da); |
74 | extern u32 iommu_vmap(struct iommu *obj, u32 da, | 76 | extern u32 |
77 | omap_iommu_vmap(struct iommu_domain *domain, struct device *dev, u32 da, | ||
75 | const struct sg_table *sgt, u32 flags); | 78 | const struct sg_table *sgt, u32 flags); |
76 | extern struct sg_table *iommu_vunmap(struct iommu *obj, u32 da); | 79 | extern struct sg_table *omap_iommu_vunmap(struct iommu_domain *domain, |
77 | extern u32 iommu_vmalloc(struct iommu *obj, u32 da, size_t bytes, | 80 | struct device *dev, u32 da); |
78 | u32 flags); | 81 | extern u32 |
79 | extern void iommu_vfree(struct iommu *obj, const u32 da); | 82 | omap_iommu_vmalloc(struct iommu_domain *domain, struct device *dev, |
80 | extern u32 iommu_kmap(struct iommu *obj, u32 da, u32 pa, size_t bytes, | 83 | u32 da, size_t bytes, u32 flags); |
81 | u32 flags); | 84 | extern void |
82 | extern void iommu_kunmap(struct iommu *obj, u32 da); | 85 | omap_iommu_vfree(struct iommu_domain *domain, struct device *dev, |
83 | extern u32 iommu_kmalloc(struct iommu *obj, u32 da, size_t bytes, | 86 | const u32 da); |
84 | u32 flags); | 87 | extern void *omap_da_to_va(struct device *dev, u32 da); |
85 | extern void iommu_kfree(struct iommu *obj, u32 da); | ||
86 | |||
87 | extern void *da_to_va(struct iommu *obj, u32 da); | ||
88 | 88 | ||
89 | #endif /* __IOMMU_MMAP_H */ | 89 | #endif /* __IOMMU_MMAP_H */ |
diff --git a/arch/arm/plat-omap/include/plat/irqs.h b/arch/arm/plat-omap/include/plat/irqs.h index 5a25098ea7e..30e10719b77 100644 --- a/arch/arm/plat-omap/include/plat/irqs.h +++ b/arch/arm/plat-omap/include/plat/irqs.h | |||
@@ -357,6 +357,7 @@ | |||
357 | #define INT_35XX_EMAC_C0_TX_PULSE_IRQ 69 | 357 | #define INT_35XX_EMAC_C0_TX_PULSE_IRQ 69 |
358 | #define INT_35XX_EMAC_C0_MISC_PULSE_IRQ 70 | 358 | #define INT_35XX_EMAC_C0_MISC_PULSE_IRQ 70 |
359 | #define INT_35XX_USBOTG_IRQ 71 | 359 | #define INT_35XX_USBOTG_IRQ 71 |
360 | #define INT_35XX_UART4 84 | ||
360 | #define INT_35XX_CCDC_VD0_IRQ 88 | 361 | #define INT_35XX_CCDC_VD0_IRQ 88 |
361 | #define INT_35XX_CCDC_VD1_IRQ 92 | 362 | #define INT_35XX_CCDC_VD1_IRQ 92 |
362 | #define INT_35XX_CCDC_VD2_IRQ 93 | 363 | #define INT_35XX_CCDC_VD2_IRQ 93 |
@@ -407,11 +408,19 @@ | |||
407 | #endif | 408 | #endif |
408 | #define TWL6030_IRQ_END (TWL6030_IRQ_BASE + TWL6030_BASE_NR_IRQS) | 409 | #define TWL6030_IRQ_END (TWL6030_IRQ_BASE + TWL6030_BASE_NR_IRQS) |
409 | 410 | ||
411 | #define TWL6040_CODEC_IRQ_BASE TWL6030_IRQ_END | ||
412 | #ifdef CONFIG_TWL6040_CODEC | ||
413 | #define TWL6040_CODEC_NR_IRQS 6 | ||
414 | #else | ||
415 | #define TWL6040_CODEC_NR_IRQS 0 | ||
416 | #endif | ||
417 | #define TWL6040_CODEC_IRQ_END (TWL6040_CODEC_IRQ_BASE + TWL6040_CODEC_NR_IRQS) | ||
418 | |||
410 | /* Total number of interrupts depends on the enabled blocks above */ | 419 | /* Total number of interrupts depends on the enabled blocks above */ |
411 | #if (TWL4030_GPIO_IRQ_END > TWL6030_IRQ_END) | 420 | #if (TWL4030_GPIO_IRQ_END > TWL6040_CODEC_IRQ_END) |
412 | #define TWL_IRQ_END TWL4030_GPIO_IRQ_END | 421 | #define TWL_IRQ_END TWL4030_GPIO_IRQ_END |
413 | #else | 422 | #else |
414 | #define TWL_IRQ_END TWL6030_IRQ_END | 423 | #define TWL_IRQ_END TWL6040_CODEC_IRQ_END |
415 | #endif | 424 | #endif |
416 | 425 | ||
417 | /* GPMC related */ | 426 | /* GPMC related */ |
@@ -428,7 +437,11 @@ | |||
428 | #define INTCPS_NR_IRQS 96 | 437 | #define INTCPS_NR_IRQS 96 |
429 | 438 | ||
430 | #ifndef __ASSEMBLY__ | 439 | #ifndef __ASSEMBLY__ |
431 | extern void omap_init_irq(void); | 440 | extern void __iomem *omap_irq_base; |
441 | void omap1_init_irq(void); | ||
442 | void omap2_init_irq(void); | ||
443 | void omap3_init_irq(void); | ||
444 | void ti816x_init_irq(void); | ||
432 | extern int omap_irq_pending(void); | 445 | extern int omap_irq_pending(void); |
433 | void omap_intc_save_context(void); | 446 | void omap_intc_save_context(void); |
434 | void omap_intc_restore_context(void); | 447 | void omap_intc_restore_context(void); |
diff --git a/arch/arm/plat-omap/include/plat/mcbsp.h b/arch/arm/plat-omap/include/plat/mcbsp.h index f8f690ab299..9882c657b2d 100644 --- a/arch/arm/plat-omap/include/plat/mcbsp.h +++ b/arch/arm/plat-omap/include/plat/mcbsp.h | |||
@@ -24,7 +24,6 @@ | |||
24 | #ifndef __ASM_ARCH_OMAP_MCBSP_H | 24 | #ifndef __ASM_ARCH_OMAP_MCBSP_H |
25 | #define __ASM_ARCH_OMAP_MCBSP_H | 25 | #define __ASM_ARCH_OMAP_MCBSP_H |
26 | 26 | ||
27 | #include <linux/completion.h> | ||
28 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
29 | 28 | ||
30 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
@@ -34,7 +33,7 @@ | |||
34 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ | 33 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ |
35 | static struct platform_device omap_mcbsp##port_nr = { \ | 34 | static struct platform_device omap_mcbsp##port_nr = { \ |
36 | .name = "omap-mcbsp-dai", \ | 35 | .name = "omap-mcbsp-dai", \ |
37 | .id = OMAP_MCBSP##port_nr, \ | 36 | .id = port_nr - 1, \ |
38 | } | 37 | } |
39 | 38 | ||
40 | #define MCBSP_CONFIG_TYPE2 0x2 | 39 | #define MCBSP_CONFIG_TYPE2 0x2 |
@@ -333,18 +332,6 @@ struct omap_mcbsp_reg_cfg { | |||
333 | }; | 332 | }; |
334 | 333 | ||
335 | typedef enum { | 334 | typedef enum { |
336 | OMAP_MCBSP1 = 0, | ||
337 | OMAP_MCBSP2, | ||
338 | OMAP_MCBSP3, | ||
339 | OMAP_MCBSP4, | ||
340 | OMAP_MCBSP5 | ||
341 | } omap_mcbsp_id; | ||
342 | |||
343 | typedef int __bitwise omap_mcbsp_io_type_t; | ||
344 | #define OMAP_MCBSP_IRQ_IO ((__force omap_mcbsp_io_type_t) 1) | ||
345 | #define OMAP_MCBSP_POLL_IO ((__force omap_mcbsp_io_type_t) 2) | ||
346 | |||
347 | typedef enum { | ||
348 | OMAP_MCBSP_WORD_8 = 0, | 335 | OMAP_MCBSP_WORD_8 = 0, |
349 | OMAP_MCBSP_WORD_12, | 336 | OMAP_MCBSP_WORD_12, |
350 | OMAP_MCBSP_WORD_16, | 337 | OMAP_MCBSP_WORD_16, |
@@ -353,38 +340,6 @@ typedef enum { | |||
353 | OMAP_MCBSP_WORD_32, | 340 | OMAP_MCBSP_WORD_32, |
354 | } omap_mcbsp_word_length; | 341 | } omap_mcbsp_word_length; |
355 | 342 | ||
356 | typedef enum { | ||
357 | OMAP_MCBSP_CLK_RISING = 0, | ||
358 | OMAP_MCBSP_CLK_FALLING, | ||
359 | } omap_mcbsp_clk_polarity; | ||
360 | |||
361 | typedef enum { | ||
362 | OMAP_MCBSP_FS_ACTIVE_HIGH = 0, | ||
363 | OMAP_MCBSP_FS_ACTIVE_LOW, | ||
364 | } omap_mcbsp_fs_polarity; | ||
365 | |||
366 | typedef enum { | ||
367 | OMAP_MCBSP_CLK_STP_MODE_NO_DELAY = 0, | ||
368 | OMAP_MCBSP_CLK_STP_MODE_DELAY, | ||
369 | } omap_mcbsp_clk_stp_mode; | ||
370 | |||
371 | |||
372 | /******* SPI specific mode **********/ | ||
373 | typedef enum { | ||
374 | OMAP_MCBSP_SPI_MASTER = 0, | ||
375 | OMAP_MCBSP_SPI_SLAVE, | ||
376 | } omap_mcbsp_spi_mode; | ||
377 | |||
378 | struct omap_mcbsp_spi_cfg { | ||
379 | omap_mcbsp_spi_mode spi_mode; | ||
380 | omap_mcbsp_clk_polarity rx_clock_polarity; | ||
381 | omap_mcbsp_clk_polarity tx_clock_polarity; | ||
382 | omap_mcbsp_fs_polarity fsx_polarity; | ||
383 | u8 clk_div; | ||
384 | omap_mcbsp_clk_stp_mode clk_stp_mode; | ||
385 | omap_mcbsp_word_length word_length; | ||
386 | }; | ||
387 | |||
388 | /* Platform specific configuration */ | 343 | /* Platform specific configuration */ |
389 | struct omap_mcbsp_ops { | 344 | struct omap_mcbsp_ops { |
390 | void (*request)(unsigned int); | 345 | void (*request)(unsigned int); |
@@ -422,25 +377,13 @@ struct omap_mcbsp { | |||
422 | void __iomem *io_base; | 377 | void __iomem *io_base; |
423 | u8 id; | 378 | u8 id; |
424 | u8 free; | 379 | u8 free; |
425 | omap_mcbsp_word_length rx_word_length; | ||
426 | omap_mcbsp_word_length tx_word_length; | ||
427 | 380 | ||
428 | omap_mcbsp_io_type_t io_type; /* IRQ or poll */ | ||
429 | /* IRQ based TX/RX */ | ||
430 | int rx_irq; | 381 | int rx_irq; |
431 | int tx_irq; | 382 | int tx_irq; |
432 | 383 | ||
433 | /* DMA stuff */ | 384 | /* DMA stuff */ |
434 | u8 dma_rx_sync; | 385 | u8 dma_rx_sync; |
435 | short dma_rx_lch; | ||
436 | u8 dma_tx_sync; | 386 | u8 dma_tx_sync; |
437 | short dma_tx_lch; | ||
438 | |||
439 | /* Completion queues */ | ||
440 | struct completion tx_irq_completion; | ||
441 | struct completion rx_irq_completion; | ||
442 | struct completion tx_dma_completion; | ||
443 | struct completion rx_dma_completion; | ||
444 | 387 | ||
445 | /* Protect the field .free, while checking if the mcbsp is in use */ | 388 | /* Protect the field .free, while checking if the mcbsp is in use */ |
446 | spinlock_t lock; | 389 | spinlock_t lock; |
@@ -499,24 +442,9 @@ int omap_mcbsp_request(unsigned int id); | |||
499 | void omap_mcbsp_free(unsigned int id); | 442 | void omap_mcbsp_free(unsigned int id); |
500 | void omap_mcbsp_start(unsigned int id, int tx, int rx); | 443 | void omap_mcbsp_start(unsigned int id, int tx, int rx); |
501 | void omap_mcbsp_stop(unsigned int id, int tx, int rx); | 444 | void omap_mcbsp_stop(unsigned int id, int tx, int rx); |
502 | void omap_mcbsp_xmit_word(unsigned int id, u32 word); | ||
503 | u32 omap_mcbsp_recv_word(unsigned int id); | ||
504 | |||
505 | int omap_mcbsp_xmit_buffer(unsigned int id, dma_addr_t buffer, unsigned int length); | ||
506 | int omap_mcbsp_recv_buffer(unsigned int id, dma_addr_t buffer, unsigned int length); | ||
507 | int omap_mcbsp_spi_master_xmit_word_poll(unsigned int id, u32 word); | ||
508 | int omap_mcbsp_spi_master_recv_word_poll(unsigned int id, u32 * word); | ||
509 | |||
510 | 445 | ||
511 | /* McBSP functional clock source changing function */ | 446 | /* McBSP functional clock source changing function */ |
512 | extern int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id); | 447 | extern int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id); |
513 | /* SPI specific API */ | ||
514 | void omap_mcbsp_set_spi_mode(unsigned int id, const struct omap_mcbsp_spi_cfg * spi_cfg); | ||
515 | |||
516 | /* Polled read/write functions */ | ||
517 | int omap_mcbsp_pollread(unsigned int id, u16 * buf); | ||
518 | int omap_mcbsp_pollwrite(unsigned int id, u16 buf); | ||
519 | int omap_mcbsp_set_io_type(unsigned int id, omap_mcbsp_io_type_t io_type); | ||
520 | 448 | ||
521 | /* McBSP signal muxing API */ | 449 | /* McBSP signal muxing API */ |
522 | void omap2_mcbsp1_mux_clkr_src(u8 mux); | 450 | void omap2_mcbsp1_mux_clkr_src(u8 mux); |
diff --git a/arch/arm/plat-omap/include/plat/nand.h b/arch/arm/plat-omap/include/plat/nand.h index d86d1ecf006..67fc5060183 100644 --- a/arch/arm/plat-omap/include/plat/nand.h +++ b/arch/arm/plat-omap/include/plat/nand.h | |||
@@ -19,15 +19,11 @@ enum nand_io { | |||
19 | }; | 19 | }; |
20 | 20 | ||
21 | struct omap_nand_platform_data { | 21 | struct omap_nand_platform_data { |
22 | unsigned int options; | ||
23 | int cs; | 22 | int cs; |
24 | int gpio_irq; | ||
25 | struct mtd_partition *parts; | 23 | struct mtd_partition *parts; |
26 | struct gpmc_timings *gpmc_t; | 24 | struct gpmc_timings *gpmc_t; |
27 | int nr_parts; | 25 | int nr_parts; |
28 | int (*nand_setup)(void); | 26 | bool dev_ready; |
29 | int (*dev_ready)(struct omap_nand_platform_data *); | ||
30 | int dma_channel; | ||
31 | int gpmc_irq; | 27 | int gpmc_irq; |
32 | enum nand_io xfer_type; | 28 | enum nand_io xfer_type; |
33 | unsigned long phys_base; | 29 | unsigned long phys_base; |
diff --git a/arch/arm/plat-omap/include/plat/omap-pm.h b/arch/arm/plat-omap/include/plat/omap-pm.h index c0a75205303..0840df813f4 100644 --- a/arch/arm/plat-omap/include/plat/omap-pm.h +++ b/arch/arm/plat-omap/include/plat/omap-pm.h | |||
@@ -40,11 +40,7 @@ | |||
40 | * framework starts. The "_if_" is to avoid name collisions with the | 40 | * framework starts. The "_if_" is to avoid name collisions with the |
41 | * PM idle-loop code. | 41 | * PM idle-loop code. |
42 | */ | 42 | */ |
43 | #ifdef CONFIG_OMAP_PM_NONE | ||
44 | #define omap_pm_if_early_init() 0 | ||
45 | #else | ||
46 | int __init omap_pm_if_early_init(void); | 43 | int __init omap_pm_if_early_init(void); |
47 | #endif | ||
48 | 44 | ||
49 | /** | 45 | /** |
50 | * omap_pm_if_init - OMAP PM init code called after clock fw init | 46 | * omap_pm_if_init - OMAP PM init code called after clock fw init |
@@ -52,11 +48,7 @@ int __init omap_pm_if_early_init(void); | |||
52 | * The main initialization code. OPP tables are passed in here. The | 48 | * The main initialization code. OPP tables are passed in here. The |
53 | * "_if_" is to avoid name collisions with the PM idle-loop code. | 49 | * "_if_" is to avoid name collisions with the PM idle-loop code. |
54 | */ | 50 | */ |
55 | #ifdef CONFIG_OMAP_PM_NONE | ||
56 | #define omap_pm_if_init() 0 | ||
57 | #else | ||
58 | int __init omap_pm_if_init(void); | 51 | int __init omap_pm_if_init(void); |
59 | #endif | ||
60 | 52 | ||
61 | /** | 53 | /** |
62 | * omap_pm_if_exit - OMAP PM exit code | 54 | * omap_pm_if_exit - OMAP PM exit code |
diff --git a/arch/arm/plat-omap/include/plat/omap4-keypad.h b/arch/arm/plat-omap/include/plat/omap4-keypad.h index 2b1d9bc1eeb..9fe6c878323 100644 --- a/arch/arm/plat-omap/include/plat/omap4-keypad.h +++ b/arch/arm/plat-omap/include/plat/omap4-keypad.h | |||
@@ -10,5 +10,6 @@ struct omap4_keypad_platform_data { | |||
10 | u8 cols; | 10 | u8 cols; |
11 | }; | 11 | }; |
12 | 12 | ||
13 | extern int omap4_keyboard_init(struct omap4_keypad_platform_data *); | 13 | extern int omap4_keyboard_init(struct omap4_keypad_platform_data *, |
14 | struct omap_board_data *); | ||
14 | #endif | 15 | #endif |
diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h index e4c349ff9fd..ee405b36df4 100644 --- a/arch/arm/plat-omap/include/plat/omap_device.h +++ b/arch/arm/plat-omap/include/plat/omap_device.h | |||
@@ -44,6 +44,10 @@ extern struct device omap_device_parent; | |||
44 | #define OMAP_DEVICE_STATE_IDLE 2 | 44 | #define OMAP_DEVICE_STATE_IDLE 2 |
45 | #define OMAP_DEVICE_STATE_SHUTDOWN 3 | 45 | #define OMAP_DEVICE_STATE_SHUTDOWN 3 |
46 | 46 | ||
47 | /* omap_device.flags values */ | ||
48 | #define OMAP_DEVICE_SUSPENDED BIT(0) | ||
49 | #define OMAP_DEVICE_NO_IDLE_ON_SUSPEND BIT(1) | ||
50 | |||
47 | /** | 51 | /** |
48 | * struct omap_device - omap_device wrapper for platform_devices | 52 | * struct omap_device - omap_device wrapper for platform_devices |
49 | * @pdev: platform_device | 53 | * @pdev: platform_device |
@@ -73,6 +77,7 @@ struct omap_device { | |||
73 | s8 pm_lat_level; | 77 | s8 pm_lat_level; |
74 | u8 hwmods_cnt; | 78 | u8 hwmods_cnt; |
75 | u8 _state; | 79 | u8 _state; |
80 | u8 flags; | ||
76 | }; | 81 | }; |
77 | 82 | ||
78 | /* Device driver interface (call via platform_data fn ptrs) */ | 83 | /* Device driver interface (call via platform_data fn ptrs) */ |
@@ -117,6 +122,10 @@ int omap_device_enable_hwmods(struct omap_device *od); | |||
117 | int omap_device_disable_clocks(struct omap_device *od); | 122 | int omap_device_disable_clocks(struct omap_device *od); |
118 | int omap_device_enable_clocks(struct omap_device *od); | 123 | int omap_device_enable_clocks(struct omap_device *od); |
119 | 124 | ||
125 | static inline void omap_device_disable_idle_on_suspend(struct omap_device *od) | ||
126 | { | ||
127 | od->flags |= OMAP_DEVICE_NO_IDLE_ON_SUSPEND; | ||
128 | } | ||
120 | 129 | ||
121 | /* | 130 | /* |
122 | * Entries should be kept in latency order ascending | 131 | * Entries should be kept in latency order ascending |
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index 1adea9c6298..0e329ca88a7 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h | |||
@@ -2,6 +2,7 @@ | |||
2 | * omap_hwmod macros, structures | 2 | * omap_hwmod macros, structures |
3 | * | 3 | * |
4 | * Copyright (C) 2009-2011 Nokia Corporation | 4 | * Copyright (C) 2009-2011 Nokia Corporation |
5 | * Copyright (C) 2011 Texas Instruments, Inc. | ||
5 | * Paul Walmsley | 6 | * Paul Walmsley |
6 | * | 7 | * |
7 | * Created in collaboration with (alphabetical order): Benoît Cousson, | 8 | * Created in collaboration with (alphabetical order): Benoît Cousson, |
@@ -77,9 +78,13 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2; | |||
77 | #define HWMOD_IDLEMODE_FORCE (1 << 0) | 78 | #define HWMOD_IDLEMODE_FORCE (1 << 0) |
78 | #define HWMOD_IDLEMODE_NO (1 << 1) | 79 | #define HWMOD_IDLEMODE_NO (1 << 1) |
79 | #define HWMOD_IDLEMODE_SMART (1 << 2) | 80 | #define HWMOD_IDLEMODE_SMART (1 << 2) |
80 | /* Slave idle mode flag only */ | ||
81 | #define HWMOD_IDLEMODE_SMART_WKUP (1 << 3) | 81 | #define HWMOD_IDLEMODE_SMART_WKUP (1 << 3) |
82 | 82 | ||
83 | /* modulemode control type (SW or HW) */ | ||
84 | #define MODULEMODE_HWCTRL 1 | ||
85 | #define MODULEMODE_SWCTRL 2 | ||
86 | |||
87 | |||
83 | /** | 88 | /** |
84 | * struct omap_hwmod_mux_info - hwmod specific mux configuration | 89 | * struct omap_hwmod_mux_info - hwmod specific mux configuration |
85 | * @pads: array of omap_device_pad entries | 90 | * @pads: array of omap_device_pad entries |
@@ -98,7 +103,7 @@ struct omap_hwmod_mux_info { | |||
98 | /** | 103 | /** |
99 | * struct omap_hwmod_irq_info - MPU IRQs used by the hwmod | 104 | * struct omap_hwmod_irq_info - MPU IRQs used by the hwmod |
100 | * @name: name of the IRQ channel (module local name) | 105 | * @name: name of the IRQ channel (module local name) |
101 | * @irq_ch: IRQ channel ID | 106 | * @irq: IRQ channel ID (should be non-negative except -1 = terminator) |
102 | * | 107 | * |
103 | * @name should be something short, e.g., "tx" or "rx". It is for use | 108 | * @name should be something short, e.g., "tx" or "rx". It is for use |
104 | * by platform_get_resource_byname(). It is defined locally to the | 109 | * by platform_get_resource_byname(). It is defined locally to the |
@@ -106,13 +111,13 @@ struct omap_hwmod_mux_info { | |||
106 | */ | 111 | */ |
107 | struct omap_hwmod_irq_info { | 112 | struct omap_hwmod_irq_info { |
108 | const char *name; | 113 | const char *name; |
109 | u16 irq; | 114 | s16 irq; |
110 | }; | 115 | }; |
111 | 116 | ||
112 | /** | 117 | /** |
113 | * struct omap_hwmod_dma_info - DMA channels used by the hwmod | 118 | * struct omap_hwmod_dma_info - DMA channels used by the hwmod |
114 | * @name: name of the DMA channel (module local name) | 119 | * @name: name of the DMA channel (module local name) |
115 | * @dma_req: DMA request ID | 120 | * @dma_req: DMA request ID (should be non-negative except -1 = terminator) |
116 | * | 121 | * |
117 | * @name should be something short, e.g., "tx" or "rx". It is for use | 122 | * @name should be something short, e.g., "tx" or "rx". It is for use |
118 | * by platform_get_resource_byname(). It is defined locally to the | 123 | * by platform_get_resource_byname(). It is defined locally to the |
@@ -120,7 +125,7 @@ struct omap_hwmod_irq_info { | |||
120 | */ | 125 | */ |
121 | struct omap_hwmod_dma_info { | 126 | struct omap_hwmod_dma_info { |
122 | const char *name; | 127 | const char *name; |
123 | u16 dma_req; | 128 | s16 dma_req; |
124 | }; | 129 | }; |
125 | 130 | ||
126 | /** | 131 | /** |
@@ -220,7 +225,6 @@ struct omap_hwmod_addr_space { | |||
220 | * @clk: interface clock: OMAP clock name | 225 | * @clk: interface clock: OMAP clock name |
221 | * @_clk: pointer to the interface struct clk (filled in at runtime) | 226 | * @_clk: pointer to the interface struct clk (filled in at runtime) |
222 | * @fw: interface firewall data | 227 | * @fw: interface firewall data |
223 | * @addr_cnt: ARRAY_SIZE(@addr) | ||
224 | * @width: OCP data width | 228 | * @width: OCP data width |
225 | * @user: initiators using this interface (see OCP_USER_* macros above) | 229 | * @user: initiators using this interface (see OCP_USER_* macros above) |
226 | * @flags: OCP interface flags (see OCPIF_* macros above) | 230 | * @flags: OCP interface flags (see OCPIF_* macros above) |
@@ -239,7 +243,6 @@ struct omap_hwmod_ocp_if { | |||
239 | union { | 243 | union { |
240 | struct omap_hwmod_omap2_firewall omap2; | 244 | struct omap_hwmod_omap2_firewall omap2; |
241 | } fw; | 245 | } fw; |
242 | u8 addr_cnt; | ||
243 | u8 width; | 246 | u8 width; |
244 | u8 user; | 247 | u8 user; |
245 | u8 flags; | 248 | u8 flags; |
@@ -258,6 +261,7 @@ struct omap_hwmod_ocp_if { | |||
258 | #define MSTANDBY_FORCE (HWMOD_IDLEMODE_FORCE << MASTER_STANDBY_SHIFT) | 261 | #define MSTANDBY_FORCE (HWMOD_IDLEMODE_FORCE << MASTER_STANDBY_SHIFT) |
259 | #define MSTANDBY_NO (HWMOD_IDLEMODE_NO << MASTER_STANDBY_SHIFT) | 262 | #define MSTANDBY_NO (HWMOD_IDLEMODE_NO << MASTER_STANDBY_SHIFT) |
260 | #define MSTANDBY_SMART (HWMOD_IDLEMODE_SMART << MASTER_STANDBY_SHIFT) | 263 | #define MSTANDBY_SMART (HWMOD_IDLEMODE_SMART << MASTER_STANDBY_SHIFT) |
264 | #define MSTANDBY_SMART_WKUP (HWMOD_IDLEMODE_SMART_WKUP << MASTER_STANDBY_SHIFT) | ||
261 | 265 | ||
262 | /* omap_hwmod_sysconfig.sysc_flags capability flags */ | 266 | /* omap_hwmod_sysconfig.sysc_flags capability flags */ |
263 | #define SYSC_HAS_AUTOIDLE (1 << 0) | 267 | #define SYSC_HAS_AUTOIDLE (1 << 0) |
@@ -362,9 +366,11 @@ struct omap_hwmod_omap2_prcm { | |||
362 | * @submodule_wkdep_bit: bit shift of the WKDEP range | 366 | * @submodule_wkdep_bit: bit shift of the WKDEP range |
363 | */ | 367 | */ |
364 | struct omap_hwmod_omap4_prcm { | 368 | struct omap_hwmod_omap4_prcm { |
365 | void __iomem *clkctrl_reg; | 369 | u16 clkctrl_offs; |
366 | void __iomem *rstctrl_reg; | 370 | u16 rstctrl_offs; |
371 | u16 context_offs; | ||
367 | u8 submodule_wkdep_bit; | 372 | u8 submodule_wkdep_bit; |
373 | u8 modulemode; | ||
368 | }; | 374 | }; |
369 | 375 | ||
370 | 376 | ||
@@ -468,8 +474,8 @@ struct omap_hwmod_class { | |||
468 | * @name: name of the hwmod | 474 | * @name: name of the hwmod |
469 | * @class: struct omap_hwmod_class * to the class of this hwmod | 475 | * @class: struct omap_hwmod_class * to the class of this hwmod |
470 | * @od: struct omap_device currently associated with this hwmod (internal use) | 476 | * @od: struct omap_device currently associated with this hwmod (internal use) |
471 | * @mpu_irqs: ptr to an array of MPU IRQs (see also mpu_irqs_cnt) | 477 | * @mpu_irqs: ptr to an array of MPU IRQs |
472 | * @sdma_reqs: ptr to an array of System DMA request IDs (see sdma_reqs_cnt) | 478 | * @sdma_reqs: ptr to an array of System DMA request IDs |
473 | * @prcm: PRCM data pertaining to this hwmod | 479 | * @prcm: PRCM data pertaining to this hwmod |
474 | * @main_clk: main clock: OMAP clock name | 480 | * @main_clk: main clock: OMAP clock name |
475 | * @_clk: pointer to the main struct clk (filled in at runtime) | 481 | * @_clk: pointer to the main struct clk (filled in at runtime) |
@@ -482,8 +488,6 @@ struct omap_hwmod_class { | |||
482 | * @_sysc_cache: internal-use hwmod flags | 488 | * @_sysc_cache: internal-use hwmod flags |
483 | * @_mpu_rt_va: cached register target start address (internal use) | 489 | * @_mpu_rt_va: cached register target start address (internal use) |
484 | * @_mpu_port_index: cached MPU register target slave ID (internal use) | 490 | * @_mpu_port_index: cached MPU register target slave ID (internal use) |
485 | * @mpu_irqs_cnt: number of @mpu_irqs | ||
486 | * @sdma_reqs_cnt: number of @sdma_reqs | ||
487 | * @opt_clks_cnt: number of @opt_clks | 491 | * @opt_clks_cnt: number of @opt_clks |
488 | * @master_cnt: number of @master entries | 492 | * @master_cnt: number of @master entries |
489 | * @slaves_cnt: number of @slave entries | 493 | * @slaves_cnt: number of @slave entries |
@@ -519,6 +523,8 @@ struct omap_hwmod { | |||
519 | const char *main_clk; | 523 | const char *main_clk; |
520 | struct clk *_clk; | 524 | struct clk *_clk; |
521 | struct omap_hwmod_opt_clk *opt_clks; | 525 | struct omap_hwmod_opt_clk *opt_clks; |
526 | char *clkdm_name; | ||
527 | struct clockdomain *clkdm; | ||
522 | char *vdd_name; | 528 | char *vdd_name; |
523 | struct voltagedomain *voltdm; | 529 | struct voltagedomain *voltdm; |
524 | struct omap_hwmod_ocp_if **masters; /* connect to *_IA */ | 530 | struct omap_hwmod_ocp_if **masters; /* connect to *_IA */ |
@@ -531,8 +537,6 @@ struct omap_hwmod { | |||
531 | u16 flags; | 537 | u16 flags; |
532 | u8 _mpu_port_index; | 538 | u8 _mpu_port_index; |
533 | u8 response_lat; | 539 | u8 response_lat; |
534 | u8 mpu_irqs_cnt; | ||
535 | u8 sdma_reqs_cnt; | ||
536 | u8 rst_lines_cnt; | 540 | u8 rst_lines_cnt; |
537 | u8 opt_clks_cnt; | 541 | u8 opt_clks_cnt; |
538 | u8 masters_cnt; | 542 | u8 masters_cnt; |
@@ -572,6 +576,7 @@ void omap_hwmod_ocp_barrier(struct omap_hwmod *oh); | |||
572 | 576 | ||
573 | void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs); | 577 | void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs); |
574 | u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs); | 578 | u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs); |
579 | int omap_hwmod_softreset(struct omap_hwmod *oh); | ||
575 | 580 | ||
576 | int omap_hwmod_count_resources(struct omap_hwmod *oh); | 581 | int omap_hwmod_count_resources(struct omap_hwmod *oh); |
577 | int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res); | 582 | int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res); |
diff --git a/arch/arm/plat-omap/include/plat/serial.h b/arch/arm/plat-omap/include/plat/serial.h index 2723f9166ea..de3b10c1812 100644 --- a/arch/arm/plat-omap/include/plat/serial.h +++ b/arch/arm/plat-omap/include/plat/serial.h | |||
@@ -56,6 +56,9 @@ | |||
56 | #define TI816X_UART2_BASE 0x48022000 | 56 | #define TI816X_UART2_BASE 0x48022000 |
57 | #define TI816X_UART3_BASE 0x48024000 | 57 | #define TI816X_UART3_BASE 0x48024000 |
58 | 58 | ||
59 | /* AM3505/3517 UART4 */ | ||
60 | #define AM35XX_UART4_BASE 0x4809E000 /* Only on AM3505/3517 */ | ||
61 | |||
59 | /* External port on Zoom2/3 */ | 62 | /* External port on Zoom2/3 */ |
60 | #define ZOOM_UART_BASE 0x10000000 | 63 | #define ZOOM_UART_BASE 0x10000000 |
61 | #define ZOOM_UART_VIRT 0xfa400000 | 64 | #define ZOOM_UART_VIRT 0xfa400000 |
diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h index ac4b60d9aa2..a067484cc4a 100644 --- a/arch/arm/plat-omap/include/plat/uncompress.h +++ b/arch/arm/plat-omap/include/plat/uncompress.h | |||
@@ -148,6 +148,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id) | |||
148 | /* omap3 based boards using UART3 */ | 148 | /* omap3 based boards using UART3 */ |
149 | DEBUG_LL_OMAP3(3, cm_t35); | 149 | DEBUG_LL_OMAP3(3, cm_t35); |
150 | DEBUG_LL_OMAP3(3, cm_t3517); | 150 | DEBUG_LL_OMAP3(3, cm_t3517); |
151 | DEBUG_LL_OMAP3(3, cm_t3730); | ||
151 | DEBUG_LL_OMAP3(3, craneboard); | 152 | DEBUG_LL_OMAP3(3, craneboard); |
152 | DEBUG_LL_OMAP3(3, devkit8000); | 153 | DEBUG_LL_OMAP3(3, devkit8000); |
153 | DEBUG_LL_OMAP3(3, igep0020); | 154 | DEBUG_LL_OMAP3(3, igep0020); |