aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/Kconfig112
-rw-r--r--arch/arm/mach-omap2/Makefile164
-rw-r--r--arch/arm/mach-omap2/board-2430sdp.c76
-rw-r--r--arch/arm/mach-omap2/board-3430sdp.c404
-rw-r--r--arch/arm/mach-omap2/board-3630sdp.c39
-rw-r--r--arch/arm/mach-omap2/board-4430sdp.c494
-rw-r--r--arch/arm/mach-omap2/board-am3517crane.c110
-rw-r--r--arch/arm/mach-omap2/board-am3517evm.c199
-rw-r--r--arch/arm/mach-omap2/board-apollon.c57
-rw-r--r--arch/arm/mach-omap2/board-cm-t35.c336
-rw-r--r--arch/arm/mach-omap2/board-cm-t3517.c310
-rw-r--r--arch/arm/mach-omap2/board-devkit8000.c260
-rw-r--r--arch/arm/mach-omap2/board-flash.c37
-rw-r--r--arch/arm/mach-omap2/board-flash.h (renamed from arch/arm/mach-omap2/include/mach/board-flash.h)4
-rw-r--r--arch/arm/mach-omap2/board-generic.c33
-rw-r--r--arch/arm/mach-omap2/board-h4.c89
-rw-r--r--arch/arm/mach-omap2/board-igep0020.c695
-rw-r--r--arch/arm/mach-omap2/board-ldp.c191
-rw-r--r--arch/arm/mach-omap2/board-n8x0.c192
-rw-r--r--arch/arm/mach-omap2/board-omap3beagle.c333
-rw-r--r--arch/arm/mach-omap2/board-omap3evm.c475
-rw-r--r--arch/arm/mach-omap2/board-omap3logic.c230
-rw-r--r--arch/arm/mach-omap2/board-omap3pandora.c229
-rw-r--r--arch/arm/mach-omap2/board-omap3stalker.c220
-rw-r--r--arch/arm/mach-omap2/board-omap3touchbook.c168
-rw-r--r--arch/arm/mach-omap2/board-omap4panda.c554
-rw-r--r--arch/arm/mach-omap2/board-overo.c575
-rw-r--r--arch/arm/mach-omap2/board-rm680.c169
-rw-r--r--arch/arm/mach-omap2/board-rx51-peripherals.c231
-rw-r--r--arch/arm/mach-omap2/board-rx51-video.c33
-rw-r--r--arch/arm/mach-omap2/board-rx51.c51
-rw-r--r--arch/arm/mach-omap2/board-ti8168evm.c62
-rw-r--r--arch/arm/mach-omap2/board-zoom-debugboard.c67
-rw-r--r--arch/arm/mach-omap2/board-zoom-display.c140
-rw-r--r--arch/arm/mach-omap2/board-zoom-peripherals.c150
-rw-r--r--arch/arm/mach-omap2/board-zoom.c (renamed from arch/arm/mach-omap2/board-zoom3.c)121
-rw-r--r--arch/arm/mach-omap2/board-zoom2.c152
-rw-r--r--arch/arm/mach-omap2/clkt2xxx_apll.c36
-rw-r--r--arch/arm/mach-omap2/clkt2xxx_dpll.c63
-rw-r--r--arch/arm/mach-omap2/clkt2xxx_dpllcore.c10
-rw-r--r--arch/arm/mach-omap2/clkt2xxx_osc.c16
-rw-r--r--arch/arm/mach-omap2/clkt2xxx_sys.c2
-rw-r--r--arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c14
-rw-r--r--arch/arm/mach-omap2/clkt34xx_dpll3m2.c1
-rw-r--r--arch/arm/mach-omap2/clkt_clksel.c2
-rw-r--r--arch/arm/mach-omap2/clkt_dpll.c94
-rw-r--r--arch/arm/mach-omap2/clkt_iclk.c82
-rw-r--r--arch/arm/mach-omap2/clock.c45
-rw-r--r--arch/arm/mach-omap2/clock.h22
-rw-r--r--arch/arm/mach-omap2/clock2420_data.c287
-rw-r--r--arch/arm/mach-omap2/clock2430.c2
-rw-r--r--arch/arm/mach-omap2/clock2430_data.c334
-rw-r--r--arch/arm/mach-omap2/clock2xxx.h8
-rw-r--r--arch/arm/mach-omap2/clock34xx.c31
-rw-r--r--arch/arm/mach-omap2/clock34xx.h5
-rw-r--r--arch/arm/mach-omap2/clock3517.c6
-rw-r--r--arch/arm/mach-omap2/clock3xxx.c9
-rw-r--r--arch/arm/mach-omap2/clock3xxx_data.c470
-rw-r--r--arch/arm/mach-omap2/clock44xx_data.c1939
-rw-r--r--arch/arm/mach-omap2/clock_common_data.c6
-rw-r--r--arch/arm/mach-omap2/clockdomain.c489
-rw-r--r--arch/arm/mach-omap2/clockdomain.h197
-rw-r--r--arch/arm/mach-omap2/clockdomain2xxx_3xxx.c274
-rw-r--r--arch/arm/mach-omap2/clockdomain44xx.c137
-rw-r--r--arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c (renamed from arch/arm/mach-omap2/clockdomains.h)129
-rw-r--r--arch/arm/mach-omap2/clockdomains44xx.h250
-rw-r--r--arch/arm/mach-omap2/clockdomains44xx_data.c689
-rw-r--r--arch/arm/mach-omap2/cm-regbits-24xx.h14
-rw-r--r--arch/arm/mach-omap2/cm-regbits-34xx.h15
-rw-r--r--arch/arm/mach-omap2/cm-regbits-44xx.h1290
-rw-r--r--arch/arm/mach-omap2/cm.c68
-rw-r--r--arch/arm/mach-omap2/cm.h137
-rw-r--r--arch/arm/mach-omap2/cm1_44xx.h261
-rw-r--r--arch/arm/mach-omap2/cm2_44xx.h508
-rw-r--r--arch/arm/mach-omap2/cm2xxx_3xxx.c557
-rw-r--r--arch/arm/mach-omap2/cm2xxx_3xxx.h155
-rw-r--r--arch/arm/mach-omap2/cm44xx.c52
-rw-r--r--arch/arm/mach-omap2/cm44xx.h583
-rw-r--r--arch/arm/mach-omap2/cm4xxx.c61
-rw-r--r--arch/arm/mach-omap2/cminst44xx.c235
-rw-r--r--arch/arm/mach-omap2/cminst44xx.h37
-rw-r--r--arch/arm/mach-omap2/common-board-devices.c163
-rw-r--r--arch/arm/mach-omap2/common-board-devices.h37
-rw-r--r--arch/arm/mach-omap2/common.c142
-rw-r--r--arch/arm/mach-omap2/control.c172
-rw-r--r--arch/arm/mach-omap2/control.h412
-rw-r--r--arch/arm/mach-omap2/cpuidle34xx.c439
-rw-r--r--arch/arm/mach-omap2/devices.c856
-rw-r--r--arch/arm/mach-omap2/devices.h19
-rw-r--r--arch/arm/mach-omap2/display.c148
-rw-r--r--arch/arm/mach-omap2/dma.c297
-rw-r--r--arch/arm/mach-omap2/dpll3xxx.c59
-rw-r--r--arch/arm/mach-omap2/dpll44xx.c84
-rw-r--r--arch/arm/mach-omap2/dsp.c92
-rw-r--r--arch/arm/mach-omap2/gpio.c104
-rw-r--r--arch/arm/mach-omap2/gpmc-nand.c9
-rw-r--r--arch/arm/mach-omap2/gpmc-onenand.c130
-rw-r--r--arch/arm/mach-omap2/gpmc-smc91x.c11
-rw-r--r--arch/arm/mach-omap2/gpmc-smsc911x.c107
-rw-r--r--arch/arm/mach-omap2/gpmc.c71
-rw-r--r--arch/arm/mach-omap2/hsmmc.c469
-rw-r--r--arch/arm/mach-omap2/hsmmc.h6
-rw-r--r--arch/arm/mach-omap2/hwspinlock.c63
-rw-r--r--arch/arm/mach-omap2/id.c172
-rw-r--r--arch/arm/mach-omap2/include/mach/board-rx51.h11
-rw-r--r--arch/arm/mach-omap2/include/mach/board-zoom.h7
-rw-r--r--arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h391
-rw-r--r--arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h1409
-rw-r--r--arch/arm/mach-omap2/include/mach/ctrl_module_pad_wkup_44xx.h236
-rw-r--r--arch/arm/mach-omap2/include/mach/ctrl_module_wkup_44xx.h92
-rw-r--r--arch/arm/mach-omap2/include/mach/debug-macro.S142
-rw-r--r--arch/arm/mach-omap2/include/mach/entry-macro.S142
-rw-r--r--arch/arm/mach-omap2/include/mach/omap4-common.h12
-rw-r--r--arch/arm/mach-omap2/include/mach/vmalloc.h2
-rw-r--r--arch/arm/mach-omap2/io.c177
-rw-r--r--arch/arm/mach-omap2/io.h7
-rw-r--r--arch/arm/mach-omap2/iommu2.c33
-rw-r--r--arch/arm/mach-omap2/irq.c115
-rw-r--r--arch/arm/mach-omap2/mailbox.c111
-rw-r--r--arch/arm/mach-omap2/mcbsp.c330
-rw-r--r--arch/arm/mach-omap2/mux.c605
-rw-r--r--arch/arm/mach-omap2/mux.h163
-rw-r--r--arch/arm/mach-omap2/mux2420.c12
-rw-r--r--arch/arm/mach-omap2/mux2430.c12
-rw-r--r--arch/arm/mach-omap2/mux2430.h2
-rw-r--r--arch/arm/mach-omap2/mux34xx.c25
-rw-r--r--arch/arm/mach-omap2/mux44xx.c1356
-rw-r--r--arch/arm/mach-omap2/mux44xx.h298
-rw-r--r--arch/arm/mach-omap2/omap-headsmp.S2
-rw-r--r--arch/arm/mach-omap2/omap-hotplug.c14
-rw-r--r--arch/arm/mach-omap2/omap-iommu.c10
-rw-r--r--arch/arm/mach-omap2/omap-smp.c71
-rw-r--r--arch/arm/mach-omap2/omap4-common.c59
-rw-r--r--arch/arm/mach-omap2/omap44xx-smc.S8
-rw-r--r--arch/arm/mach-omap2/omap_hwmod.c1193
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_2420_data.c2025
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_2430_data.c2565
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_3xxx_data.c3498
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_44xx_data.c5183
-rw-r--r--arch/arm/mach-omap2/omap_l3_noc.c248
-rw-r--r--arch/arm/mach-omap2/omap_l3_noc.h132
-rw-r--r--arch/arm/mach-omap2/omap_l3_smx.c299
-rw-r--r--arch/arm/mach-omap2/omap_l3_smx.h338
-rw-r--r--arch/arm/mach-omap2/omap_opp_data.h96
-rw-r--r--arch/arm/mach-omap2/omap_phy_internal.c262
-rw-r--r--arch/arm/mach-omap2/omap_twl.c339
-rw-r--r--arch/arm/mach-omap2/opp.c93
-rw-r--r--arch/arm/mach-omap2/opp2xxx.h2
-rw-r--r--arch/arm/mach-omap2/opp3xxx_data.c172
-rw-r--r--arch/arm/mach-omap2/opp4xxx_data.c105
-rw-r--r--arch/arm/mach-omap2/pm-debug.c75
-rw-r--r--arch/arm/mach-omap2/pm.c200
-rw-r--r--arch/arm/mach-omap2/pm.h86
-rw-r--r--arch/arm/mach-omap2/pm24xx.c212
-rw-r--r--arch/arm/mach-omap2/pm34xx.c487
-rw-r--r--arch/arm/mach-omap2/pm44xx.c22
-rw-r--r--arch/arm/mach-omap2/powerdomain-common.c110
-rw-r--r--arch/arm/mach-omap2/powerdomain.c506
-rw-r--r--arch/arm/mach-omap2/powerdomain.h230
-rw-r--r--arch/arm/mach-omap2/powerdomain2xxx_3xxx.c241
-rw-r--r--arch/arm/mach-omap2/powerdomain44xx.c225
-rw-r--r--arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.c (renamed from arch/arm/mach-omap2/powerdomains.h)91
-rw-r--r--arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.h22
-rw-r--r--arch/arm/mach-omap2/powerdomains2xxx_data.c (renamed from arch/arm/mach-omap2/powerdomains24xx.h)68
-rw-r--r--arch/arm/mach-omap2/powerdomains3xxx_data.c (renamed from arch/arm/mach-omap2/powerdomains34xx.h)96
-rw-r--r--arch/arm/mach-omap2/powerdomains44xx_data.c (renamed from arch/arm/mach-omap2/powerdomains44xx.h)182
-rw-r--r--arch/arm/mach-omap2/prcm-common.h109
-rw-r--r--arch/arm/mach-omap2/prcm.c538
-rw-r--r--arch/arm/mach-omap2/prcm44xx.h42
-rw-r--r--arch/arm/mach-omap2/prcm_mpu44xx.c45
-rw-r--r--arch/arm/mach-omap2/prcm_mpu44xx.h104
-rw-r--r--arch/arm/mach-omap2/prm-regbits-24xx.h2
-rw-r--r--arch/arm/mach-omap2/prm-regbits-34xx.h12
-rw-r--r--arch/arm/mach-omap2/prm-regbits-44xx.h1316
-rw-r--r--arch/arm/mach-omap2/prm.h355
-rw-r--r--arch/arm/mach-omap2/prm2xxx_3xxx.c158
-rw-r--r--arch/arm/mach-omap2/prm2xxx_3xxx.h429
-rw-r--r--arch/arm/mach-omap2/prm44xx.c195
-rw-r--r--arch/arm/mach-omap2/prm44xx.h770
-rw-r--r--arch/arm/mach-omap2/prminst44xx.c66
-rw-r--r--arch/arm/mach-omap2/prminst44xx.h25
-rw-r--r--arch/arm/mach-omap2/scrm44xx.h175
-rw-r--r--arch/arm/mach-omap2/sdram-nokia.c (renamed from arch/arm/mach-omap2/board-rx51-sdram.c)102
-rw-r--r--arch/arm/mach-omap2/sdram-nokia.h12
-rw-r--r--arch/arm/mach-omap2/sdrc.c2
-rw-r--r--arch/arm/mach-omap2/sdrc.h1
-rw-r--r--arch/arm/mach-omap2/sdrc2xxx.c6
-rw-r--r--arch/arm/mach-omap2/serial.c619
-rw-r--r--arch/arm/mach-omap2/sleep24xx.S2
-rw-r--r--arch/arm/mach-omap2/sleep34xx.S938
-rw-r--r--arch/arm/mach-omap2/smartreflex-class3.c59
-rw-r--r--arch/arm/mach-omap2/smartreflex.c1043
-rw-r--r--arch/arm/mach-omap2/smartreflex.h246
-rw-r--r--arch/arm/mach-omap2/sr_device.c147
-rw-r--r--arch/arm/mach-omap2/sram242x.S13
-rw-r--r--arch/arm/mach-omap2/sram243x.S13
-rw-r--r--arch/arm/mach-omap2/sram34xx.S51
-rw-r--r--arch/arm/mach-omap2/timer-gp.c44
-rw-r--r--arch/arm/mach-omap2/timer-gp.h16
-rw-r--r--arch/arm/mach-omap2/timer-mpu.c7
-rw-r--r--arch/arm/mach-omap2/usb-ehci.c394
-rw-r--r--arch/arm/mach-omap2/usb-fs.c6
-rw-r--r--arch/arm/mach-omap2/usb-host.c574
-rw-r--r--arch/arm/mach-omap2/usb-musb.c138
-rw-r--r--arch/arm/mach-omap2/usb-tusb6010.c10
-rw-r--r--arch/arm/mach-omap2/vc.h83
-rw-r--r--arch/arm/mach-omap2/vc3xxx_data.c63
-rw-r--r--arch/arm/mach-omap2/vc44xx_data.c75
-rw-r--r--arch/arm/mach-omap2/voltage.c1106
-rw-r--r--arch/arm/mach-omap2/voltage.h184
-rw-r--r--arch/arm/mach-omap2/voltagedomains3xxx_data.c95
-rw-r--r--arch/arm/mach-omap2/voltagedomains44xx_data.c102
-rw-r--r--arch/arm/mach-omap2/vp.h143
-rw-r--r--arch/arm/mach-omap2/vp3xxx_data.c82
-rw-r--r--arch/arm/mach-omap2/vp44xx_data.c100
-rw-r--r--arch/arm/mach-omap2/wd_timer.c56
-rw-r--r--arch/arm/mach-omap2/wd_timer.h17
217 files changed, 44894 insertions, 12699 deletions
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index b48bacf0a7aa..19d5891c48e3 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -11,12 +11,11 @@ config ARCH_OMAP2PLUS_TYPICAL
11 select PM_RUNTIME 11 select PM_RUNTIME
12 select VFP 12 select VFP
13 select NEON if ARCH_OMAP3 || ARCH_OMAP4 13 select NEON if ARCH_OMAP3 || ARCH_OMAP4
14 select SERIAL_8250 14 select SERIAL_OMAP
15 select SERIAL_CORE_CONSOLE 15 select SERIAL_OMAP_CONSOLE
16 select SERIAL_8250_CONSOLE
17 select I2C 16 select I2C
18 select I2C_OMAP 17 select I2C_OMAP
19 select MFD 18 select MFD_SUPPORT
20 select MENELAUS if ARCH_OMAP2 19 select MENELAUS if ARCH_OMAP2
21 select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4 20 select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4
22 select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4 21 select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4
@@ -35,7 +34,9 @@ config ARCH_OMAP3
35 default y 34 default y
36 select CPU_V7 35 select CPU_V7
37 select USB_ARCH_HAS_EHCI 36 select USB_ARCH_HAS_EHCI
38 select ARM_L1_CACHE_SHIFT_6 37 select ARM_L1_CACHE_SHIFT_6 if !ARCH_OMAP4
38 select ARCH_HAS_OPP
39 select PM_OPP if PM
39 40
40config ARCH_OMAP4 41config ARCH_OMAP4
41 bool "TI OMAP4" 42 bool "TI OMAP4"
@@ -43,29 +44,41 @@ config ARCH_OMAP4
43 depends on ARCH_OMAP2PLUS 44 depends on ARCH_OMAP2PLUS
44 select CPU_V7 45 select CPU_V7
45 select ARM_GIC 46 select ARM_GIC
47 select LOCAL_TIMERS if SMP
48 select PL310_ERRATA_588369
49 select PL310_ERRATA_727915
50 select ARM_ERRATA_720789
51 select ARCH_HAS_OPP
52 select PM_OPP if PM
53 select USB_ARCH_HAS_EHCI
46 54
47comment "OMAP Core Type" 55comment "OMAP Core Type"
48 depends on ARCH_OMAP2 56 depends on ARCH_OMAP2
49 57
50config ARCH_OMAP2420 58config SOC_OMAP2420
51 bool "OMAP2420 support" 59 bool "OMAP2420 support"
52 depends on ARCH_OMAP2 60 depends on ARCH_OMAP2
53 default y 61 default y
54 select OMAP_DM_TIMER 62 select OMAP_DM_TIMER
55 select ARCH_OMAP_OTG 63 select ARCH_OMAP_OTG
56 64
57config ARCH_OMAP2430 65config SOC_OMAP2430
58 bool "OMAP2430 support" 66 bool "OMAP2430 support"
59 depends on ARCH_OMAP2 67 depends on ARCH_OMAP2
60 default y 68 default y
61 select ARCH_OMAP_OTG 69 select ARCH_OMAP_OTG
62 70
63config ARCH_OMAP3430 71config SOC_OMAP3430
64 bool "OMAP3430 support" 72 bool "OMAP3430 support"
65 depends on ARCH_OMAP3 73 depends on ARCH_OMAP3
66 default y 74 default y
67 select ARCH_OMAP_OTG 75 select ARCH_OMAP_OTG
68 76
77config SOC_OMAPTI816X
78 bool "TI816X support"
79 depends on ARCH_OMAP3
80 default y
81
69config OMAP_PACKAGE_ZAF 82config OMAP_PACKAGE_ZAF
70 bool 83 bool
71 84
@@ -84,6 +97,12 @@ config OMAP_PACKAGE_CUS
84config OMAP_PACKAGE_CBP 97config OMAP_PACKAGE_CBP
85 bool 98 bool
86 99
100config OMAP_PACKAGE_CBL
101 bool
102
103config OMAP_PACKAGE_CBS
104 bool
105
87comment "OMAP Board Type" 106comment "OMAP Board Type"
88 depends on ARCH_OMAP2PLUS 107 depends on ARCH_OMAP2PLUS
89 108
@@ -94,25 +113,25 @@ config MACH_OMAP_GENERIC
94 113
95config MACH_OMAP2_TUSB6010 114config MACH_OMAP2_TUSB6010
96 bool 115 bool
97 depends on ARCH_OMAP2 && ARCH_OMAP2420 116 depends on ARCH_OMAP2 && SOC_OMAP2420
98 default y if MACH_NOKIA_N8X0 117 default y if MACH_NOKIA_N8X0
99 118
100config MACH_OMAP_H4 119config MACH_OMAP_H4
101 bool "OMAP 2420 H4 board" 120 bool "OMAP 2420 H4 board"
102 depends on ARCH_OMAP2 121 depends on SOC_OMAP2420
103 default y 122 default y
104 select OMAP_PACKAGE_ZAF 123 select OMAP_PACKAGE_ZAF
105 select OMAP_DEBUG_DEVICES 124 select OMAP_DEBUG_DEVICES
106 125
107config MACH_OMAP_APOLLON 126config MACH_OMAP_APOLLON
108 bool "OMAP 2420 Apollon board" 127 bool "OMAP 2420 Apollon board"
109 depends on ARCH_OMAP2 128 depends on SOC_OMAP2420
110 default y 129 default y
111 select OMAP_PACKAGE_ZAC 130 select OMAP_PACKAGE_ZAC
112 131
113config MACH_OMAP_2430SDP 132config MACH_OMAP_2430SDP
114 bool "OMAP 2430 SDP board" 133 bool "OMAP 2430 SDP board"
115 depends on ARCH_OMAP2 134 depends on SOC_OMAP2430
116 default y 135 default y
117 select OMAP_PACKAGE_ZAC 136 select OMAP_PACKAGE_ZAC
118 137
@@ -127,7 +146,6 @@ config MACH_DEVKIT8000
127 depends on ARCH_OMAP3 146 depends on ARCH_OMAP3
128 default y 147 default y
129 select OMAP_PACKAGE_CUS 148 select OMAP_PACKAGE_CUS
130 select OMAP_MUX
131 149
132config MACH_OMAP_LDP 150config MACH_OMAP_LDP
133 bool "OMAP3 LDP board" 151 bool "OMAP3 LDP board"
@@ -135,6 +153,26 @@ config MACH_OMAP_LDP
135 default y 153 default y
136 select OMAP_PACKAGE_CBB 154 select OMAP_PACKAGE_CBB
137 155
156config MACH_OMAP3530_LV_SOM
157 bool "OMAP3 Logic 3530 LV SOM board"
158 depends on ARCH_OMAP3
159 select OMAP_PACKAGE_CBB
160 default y
161 help
162 Support for the LogicPD OMAP3530 SOM Development kit
163 for full description please see the products webpage at
164 http://www.logicpd.com/products/development-kits/texas-instruments-zoom%E2%84%A2-omap35x-development-kit
165
166config MACH_OMAP3_TORPEDO
167 bool "OMAP3 Logic 35x Torpedo board"
168 depends on ARCH_OMAP3
169 select OMAP_PACKAGE_CBB
170 default y
171 help
172 Support for the LogicPD OMAP35x Torpedo Development kit
173 for full description please see the products webpage at
174 http://www.logicpd.com/products/development-kits/zoom-omap35x-torpedo-development-kit
175
138config MACH_OVERO 176config MACH_OVERO
139 bool "Gumstix Overo board" 177 bool "Gumstix Overo board"
140 depends on ARCH_OMAP3 178 depends on ARCH_OMAP3
@@ -153,11 +191,17 @@ config MACH_OMAP3517EVM
153 default y 191 default y
154 select OMAP_PACKAGE_CBB 192 select OMAP_PACKAGE_CBB
155 193
194config MACH_CRANEBOARD
195 bool "AM3517/05 CRANE board"
196 depends on ARCH_OMAP3
197 select OMAP_PACKAGE_CBB
198
156config MACH_OMAP3_PANDORA 199config MACH_OMAP3_PANDORA
157 bool "OMAP3 Pandora" 200 bool "OMAP3 Pandora"
158 depends on ARCH_OMAP3 201 depends on ARCH_OMAP3
159 default y 202 default y
160 select OMAP_PACKAGE_CBB 203 select OMAP_PACKAGE_CBB
204 select REGULATOR_FIXED_VOLTAGE
161 205
162config MACH_OMAP3_TOUCHBOOK 206config MACH_OMAP3_TOUCHBOOK
163 bool "OMAP3 Touch Book" 207 bool "OMAP3 Touch Book"
@@ -182,13 +226,19 @@ config MACH_NOKIA_N810_WIMAX
182 226
183config MACH_NOKIA_N8X0 227config MACH_NOKIA_N8X0
184 bool "Nokia N800/N810" 228 bool "Nokia N800/N810"
185 depends on ARCH_OMAP2420 229 depends on SOC_OMAP2420
186 default y 230 default y
187 select OMAP_PACKAGE_ZAC 231 select OMAP_PACKAGE_ZAC
188 select MACH_NOKIA_N800 232 select MACH_NOKIA_N800
189 select MACH_NOKIA_N810 233 select MACH_NOKIA_N810
190 select MACH_NOKIA_N810_WIMAX 234 select MACH_NOKIA_N810_WIMAX
191 235
236config MACH_NOKIA_RM680
237 bool "Nokia RM-680 board"
238 depends on ARCH_OMAP3
239 default y
240 select OMAP_PACKAGE_CBB
241
192config MACH_NOKIA_RX51 242config MACH_NOKIA_RX51
193 bool "Nokia RX-51 board" 243 bool "Nokia RX-51 board"
194 depends on ARCH_OMAP3 244 depends on ARCH_OMAP3
@@ -200,19 +250,32 @@ config MACH_OMAP_ZOOM2
200 depends on ARCH_OMAP3 250 depends on ARCH_OMAP3
201 default y 251 default y
202 select OMAP_PACKAGE_CBB 252 select OMAP_PACKAGE_CBB
253 select SERIAL_8250
254 select SERIAL_CORE_CONSOLE
255 select SERIAL_8250_CONSOLE
256 select REGULATOR_FIXED_VOLTAGE
203 257
204config MACH_OMAP_ZOOM3 258config MACH_OMAP_ZOOM3
205 bool "OMAP3630 Zoom3 board" 259 bool "OMAP3630 Zoom3 board"
206 depends on ARCH_OMAP3 260 depends on ARCH_OMAP3
207 default y 261 default y
208 select OMAP_PACKAGE_CBP 262 select OMAP_PACKAGE_CBP
263 select SERIAL_8250
264 select SERIAL_CORE_CONSOLE
265 select SERIAL_8250_CONSOLE
266 select REGULATOR_FIXED_VOLTAGE
209 267
210config MACH_CM_T35 268config MACH_CM_T35
211 bool "CompuLab CM-T35 module" 269 bool "CompuLab CM-T35 module"
212 depends on ARCH_OMAP3 270 depends on ARCH_OMAP3
213 default y 271 default y
214 select OMAP_PACKAGE_CUS 272 select OMAP_PACKAGE_CUS
215 select OMAP_MUX 273
274config MACH_CM_T3517
275 bool "CompuLab CM-T3517 module"
276 depends on ARCH_OMAP3
277 default y
278 select OMAP_PACKAGE_CBB
216 279
217config MACH_IGEP0020 280config MACH_IGEP0020
218 bool "IGEP v2 board" 281 bool "IGEP v2 board"
@@ -220,12 +283,18 @@ config MACH_IGEP0020
220 default y 283 default y
221 select OMAP_PACKAGE_CBB 284 select OMAP_PACKAGE_CBB
222 285
286config MACH_IGEP0030
287 bool "IGEP OMAP3 module"
288 depends on ARCH_OMAP3
289 default y
290 select OMAP_PACKAGE_CBB
291 select MACH_IGEP0020
292
223config MACH_SBC3530 293config MACH_SBC3530
224 bool "OMAP3 SBC STALKER board" 294 bool "OMAP3 SBC STALKER board"
225 depends on ARCH_OMAP3 295 depends on ARCH_OMAP3
226 default y 296 default y
227 select OMAP_PACKAGE_CUS 297 select OMAP_PACKAGE_CUS
228 select OMAP_MUX
229 298
230config MACH_OMAP_3630SDP 299config MACH_OMAP_3630SDP
231 bool "OMAP3630 SDP board" 300 bool "OMAP3630 SDP board"
@@ -233,15 +302,26 @@ config MACH_OMAP_3630SDP
233 default y 302 default y
234 select OMAP_PACKAGE_CBP 303 select OMAP_PACKAGE_CBP
235 304
305config MACH_TI8168EVM
306 bool "TI8168 Evaluation Module"
307 depends on SOC_OMAPTI816X
308 default y
309
236config MACH_OMAP_4430SDP 310config MACH_OMAP_4430SDP
237 bool "OMAP 4430 SDP board" 311 bool "OMAP 4430 SDP board"
238 default y 312 default y
239 depends on ARCH_OMAP4 313 depends on ARCH_OMAP4
314 select OMAP_PACKAGE_CBL
315 select OMAP_PACKAGE_CBS
316 select REGULATOR_FIXED_VOLTAGE
240 317
241config MACH_OMAP4_PANDA 318config MACH_OMAP4_PANDA
242 bool "OMAP4 Panda Board" 319 bool "OMAP4 Panda Board"
243 default y 320 default y
244 depends on ARCH_OMAP4 321 depends on ARCH_OMAP4
322 select OMAP_PACKAGE_CBL
323 select OMAP_PACKAGE_CBS
324 select REGULATOR_FIXED_VOLTAGE
245 325
246config OMAP3_EMU 326config OMAP3_EMU
247 bool "OMAP3 debugging peripherals" 327 bool "OMAP3 debugging peripherals"
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 88d3a1e920f5..b14807794401 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -3,34 +3,36 @@
3# 3#
4 4
5# Common support 5# Common support
6obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o pm.o 6obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o pm.o \
7 common.o gpio.o dma.o wd_timer.o
7 8
8omap-2-3-common = irq.o sdrc.o 9omap-2-3-common = irq.o sdrc.o
9hwmod-common = omap_hwmod.o \ 10hwmod-common = omap_hwmod.o \
10 omap_hwmod_common_data.o 11 omap_hwmod_common_data.o
11prcm-common = prcm.o powerdomain.o
12clock-common = clock.o clock_common_data.o \ 12clock-common = clock.o clock_common_data.o \
13 clockdomain.o clkt_dpll.o \ 13 clkt_dpll.o clkt_clksel.o
14 clkt_clksel.o
15 14
16obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(prcm-common) $(hwmod-common) 15obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common)
17obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(prcm-common) $(hwmod-common) 16obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common)
18obj-$(CONFIG_ARCH_OMAP4) += $(prcm-common) $(hwmod-common) 17obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common)
19 18
20obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o 19obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
21 20
21obj-$(CONFIG_TWL4030_CORE) += omap_twl.o
22
22# SMP support ONLY available for OMAP4 23# SMP support ONLY available for OMAP4
23obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o 24obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o
24obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o 25obj-$(CONFIG_LOCAL_TIMERS) += timer-mpu.o
25obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o 26obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o
26obj-$(CONFIG_ARCH_OMAP4) += omap44xx-smc.o omap4-common.o 27obj-$(CONFIG_ARCH_OMAP4) += omap44xx-smc.o omap4-common.o
27 28
28AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a 29plus_sec := $(call as-instr,.arch_extension sec,+sec)
29AFLAGS_omap44xx-smc.o :=-Wa,-march=armv7-a 30AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec)
31AFLAGS_omap44xx-smc.o :=-Wa,-march=armv7-a$(plus_sec)
30 32
31# Functions loaded to SRAM 33# Functions loaded to SRAM
32obj-$(CONFIG_ARCH_OMAP2420) += sram242x.o 34obj-$(CONFIG_SOC_OMAP2420) += sram242x.o
33obj-$(CONFIG_ARCH_OMAP2430) += sram243x.o 35obj-$(CONFIG_SOC_OMAP2430) += sram243x.o
34obj-$(CONFIG_ARCH_OMAP3) += sram34xx.o 36obj-$(CONFIG_ARCH_OMAP3) += sram34xx.o
35 37
36AFLAGS_sram242x.o :=-Wa,-march=armv6 38AFLAGS_sram242x.o :=-Wa,-march=armv6
@@ -38,59 +40,123 @@ AFLAGS_sram243x.o :=-Wa,-march=armv6
38AFLAGS_sram34xx.o :=-Wa,-march=armv7-a 40AFLAGS_sram34xx.o :=-Wa,-march=armv7-a
39 41
40# Pin multiplexing 42# Pin multiplexing
41obj-$(CONFIG_ARCH_OMAP2420) += mux2420.o 43obj-$(CONFIG_SOC_OMAP2420) += mux2420.o
42obj-$(CONFIG_ARCH_OMAP2430) += mux2430.o 44obj-$(CONFIG_SOC_OMAP2430) += mux2430.o
43obj-$(CONFIG_ARCH_OMAP3) += mux34xx.o 45obj-$(CONFIG_ARCH_OMAP3) += mux34xx.o
46obj-$(CONFIG_ARCH_OMAP4) += mux44xx.o
44 47
45# SMS/SDRC 48# SMS/SDRC
46obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o 49obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o
47# obj-$(CONFIG_ARCH_OMAP3) += sdrc3xxx.o 50# obj-$(CONFIG_ARCH_OMAP3) += sdrc3xxx.o
48 51
52# OPP table initialization
53ifeq ($(CONFIG_PM_OPP),y)
54obj-y += opp.o
55obj-$(CONFIG_ARCH_OMAP3) += opp3xxx_data.o
56obj-$(CONFIG_ARCH_OMAP4) += opp4xxx_data.o
57endif
58
49# Power Management 59# Power Management
50ifeq ($(CONFIG_PM),y) 60ifeq ($(CONFIG_PM),y)
51obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o 61obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o
52obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o 62obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o
53obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o cpuidle34xx.o 63obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o \
64 cpuidle34xx.o
54obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o 65obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o
55obj-$(CONFIG_PM_DEBUG) += pm-debug.o 66obj-$(CONFIG_PM_DEBUG) += pm-debug.o
67obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o
68obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o
56 69
57AFLAGS_sleep24xx.o :=-Wa,-march=armv6 70AFLAGS_sleep24xx.o :=-Wa,-march=armv6
58AFLAGS_sleep34xx.o :=-Wa,-march=armv7-a 71AFLAGS_sleep34xx.o :=-Wa,-march=armv7-a$(plus_sec)
72
73ifeq ($(CONFIG_PM_VERBOSE),y)
74CFLAGS_pm_bus.o += -DDEBUG
75endif
59 76
60endif 77endif
61 78
62# PRCM 79# PRCM
63obj-$(CONFIG_ARCH_OMAP2) += cm.o 80obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o
64obj-$(CONFIG_ARCH_OMAP3) += cm.o 81obj-$(CONFIG_ARCH_OMAP3) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o \
65obj-$(CONFIG_ARCH_OMAP4) += cm4xxx.o 82 vc3xxx_data.o vp3xxx_data.o
83# XXX The presence of cm2xxx_3xxx.o on the line below is temporary and
84# will be removed once the OMAP4 part of the codebase is converted to
85# use OMAP4-specific PRCM functions.
86obj-$(CONFIG_ARCH_OMAP4) += prcm.o cm2xxx_3xxx.o cminst44xx.o \
87 cm44xx.o prcm_mpu44xx.o \
88 prminst44xx.o vc44xx_data.o \
89 vp44xx_data.o
90
91# OMAP voltage domains
92ifeq ($(CONFIG_PM),y)
93voltagedomain-common := voltage.o
94obj-$(CONFIG_ARCH_OMAP2) += $(voltagedomain-common)
95obj-$(CONFIG_ARCH_OMAP3) += $(voltagedomain-common) \
96 voltagedomains3xxx_data.o
97obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common) \
98 voltagedomains44xx_data.o
99endif
100
101# OMAP powerdomain framework
102powerdomain-common += powerdomain.o powerdomain-common.o
103obj-$(CONFIG_ARCH_OMAP2) += $(powerdomain-common) \
104 powerdomain2xxx_3xxx.o \
105 powerdomains2xxx_data.o \
106 powerdomains2xxx_3xxx_data.o
107obj-$(CONFIG_ARCH_OMAP3) += $(powerdomain-common) \
108 powerdomain2xxx_3xxx.o \
109 powerdomains3xxx_data.o \
110 powerdomains2xxx_3xxx_data.o
111obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \
112 powerdomain44xx.o \
113 powerdomains44xx_data.o
114
115# PRCM clockdomain control
116obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \
117 clockdomain2xxx_3xxx.o \
118 clockdomains2xxx_3xxx_data.o
119obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \
120 clockdomain2xxx_3xxx.o \
121 clockdomains2xxx_3xxx_data.o
122obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \
123 clockdomain44xx.o \
124 clockdomains44xx_data.o
66 125
67# Clock framework 126# Clock framework
68obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o \ 127obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o \
69 clkt2xxx_sys.o \ 128 clkt2xxx_sys.o \
70 clkt2xxx_dpllcore.o \ 129 clkt2xxx_dpllcore.o \
71 clkt2xxx_virt_prcm_set.o \ 130 clkt2xxx_virt_prcm_set.o \
72 clkt2xxx_apll.o clkt2xxx_osc.o 131 clkt2xxx_apll.o clkt2xxx_osc.o \
73obj-$(CONFIG_ARCH_OMAP2420) += clock2420_data.o 132 clkt2xxx_dpll.o clkt_iclk.o
74obj-$(CONFIG_ARCH_OMAP2430) += clock2430.o clock2430_data.o 133obj-$(CONFIG_SOC_OMAP2420) += clock2420_data.o
134obj-$(CONFIG_SOC_OMAP2430) += clock2430.o clock2430_data.o
75obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o \ 135obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) clock3xxx.o \
76 clock34xx.o clkt34xx_dpll3m2.o \ 136 clock34xx.o clkt34xx_dpll3m2.o \
77 clock3517.o clock36xx.o \ 137 clock3517.o clock36xx.o \
78 dpll3xxx.o clock3xxx_data.o 138 dpll3xxx.o clock3xxx_data.o \
139 clkt_iclk.o
79obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o \ 140obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o \
80 dpll3xxx.o 141 dpll3xxx.o dpll44xx.o
81 142
82# OMAP2 clock rate set data (old "OPP" data) 143# OMAP2 clock rate set data (old "OPP" data)
83obj-$(CONFIG_ARCH_OMAP2420) += opp2420_data.o 144obj-$(CONFIG_SOC_OMAP2420) += opp2420_data.o
84obj-$(CONFIG_ARCH_OMAP2430) += opp2430_data.o 145obj-$(CONFIG_SOC_OMAP2430) += opp2430_data.o
85 146
86# hwmod data 147# hwmod data
87obj-$(CONFIG_ARCH_OMAP2420) += omap_hwmod_2420_data.o 148obj-$(CONFIG_SOC_OMAP2420) += omap_hwmod_2420_data.o
88obj-$(CONFIG_ARCH_OMAP2430) += omap_hwmod_2430_data.o 149obj-$(CONFIG_SOC_OMAP2430) += omap_hwmod_2430_data.o
89obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o 150obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o
151obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o
90 152
91# EMU peripherals 153# EMU peripherals
92obj-$(CONFIG_OMAP3_EMU) += emu.o 154obj-$(CONFIG_OMAP3_EMU) += emu.o
93 155
156# L3 interconnect
157obj-$(CONFIG_ARCH_OMAP3) += omap_l3_smx.o
158obj-$(CONFIG_ARCH_OMAP4) += omap_l3_noc.o
159
94obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o 160obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o
95mailbox_mach-objs := mailbox.o 161mailbox_mach-objs := mailbox.o
96 162
@@ -102,6 +168,10 @@ obj-y += $(iommu-m) $(iommu-y)
102i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o 168i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
103obj-y += $(i2c-omap-m) $(i2c-omap-y) 169obj-y += $(i2c-omap-m) $(i2c-omap-y)
104 170
171ifneq ($(CONFIG_TIDSPBRIDGE),)
172obj-y += dsp.o
173endif
174
105# Specific board support 175# Specific board support
106obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o 176obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o
107obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o 177obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o
@@ -115,6 +185,10 @@ obj-$(CONFIG_MACH_DEVKIT8000) += board-devkit8000.o \
115obj-$(CONFIG_MACH_OMAP_LDP) += board-ldp.o \ 185obj-$(CONFIG_MACH_OMAP_LDP) += board-ldp.o \
116 board-flash.o \ 186 board-flash.o \
117 hsmmc.o 187 hsmmc.o
188obj-$(CONFIG_MACH_OMAP3530_LV_SOM) += board-omap3logic.o \
189 hsmmc.o
190obj-$(CONFIG_MACH_OMAP3_TORPEDO) += board-omap3logic.o \
191 hsmmc.o
118obj-$(CONFIG_MACH_OVERO) += board-overo.o \ 192obj-$(CONFIG_MACH_OVERO) += board-overo.o \
119 hsmmc.o 193 hsmmc.o
120obj-$(CONFIG_MACH_OMAP3EVM) += board-omap3evm.o \ 194obj-$(CONFIG_MACH_OMAP3EVM) += board-omap3evm.o \
@@ -125,46 +199,59 @@ obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o \
125 hsmmc.o \ 199 hsmmc.o \
126 board-flash.o 200 board-flash.o
127obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o 201obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o
202obj-$(CONFIG_MACH_NOKIA_RM680) += board-rm680.o \
203 sdram-nokia.o \
204 hsmmc.o
128obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \ 205obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \
129 board-rx51-sdram.o \ 206 sdram-nokia.o \
130 board-rx51-peripherals.o \ 207 board-rx51-peripherals.o \
131 board-rx51-video.o \ 208 board-rx51-video.o \
132 hsmmc.o 209 hsmmc.o
133obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom2.o \ 210obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom.o \
134 board-zoom-peripherals.o \ 211 board-zoom-peripherals.o \
212 board-zoom-display.o \
135 board-flash.o \ 213 board-flash.o \
136 hsmmc.o \ 214 hsmmc.o \
137 board-zoom-debugboard.o 215 board-zoom-debugboard.o
138obj-$(CONFIG_MACH_OMAP_ZOOM3) += board-zoom3.o \ 216obj-$(CONFIG_MACH_OMAP_ZOOM3) += board-zoom.o \
139 board-zoom-peripherals.o \ 217 board-zoom-peripherals.o \
218 board-zoom-display.o \
140 board-flash.o \ 219 board-flash.o \
141 hsmmc.o \ 220 hsmmc.o \
142 board-zoom-debugboard.o 221 board-zoom-debugboard.o
143obj-$(CONFIG_MACH_OMAP_3630SDP) += board-3630sdp.o \ 222obj-$(CONFIG_MACH_OMAP_3630SDP) += board-3630sdp.o \
144 board-zoom-peripherals.o \ 223 board-zoom-peripherals.o \
224 board-zoom-display.o \
145 board-flash.o \ 225 board-flash.o \
146 hsmmc.o 226 hsmmc.o
147obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o \ 227obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o \
148 hsmmc.o 228 hsmmc.o
229obj-$(CONFIG_MACH_CM_T3517) += board-cm-t3517.o
149obj-$(CONFIG_MACH_IGEP0020) += board-igep0020.o \ 230obj-$(CONFIG_MACH_IGEP0020) += board-igep0020.o \
150 hsmmc.o 231 hsmmc.o
151obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK) += board-omap3touchbook.o \ 232obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK) += board-omap3touchbook.o \
152 hsmmc.o 233 hsmmc.o
153obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \ 234obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \
154 hsmmc.o 235 hsmmc.o \
236 omap_phy_internal.o
155obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ 237obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \
156 hsmmc.o 238 hsmmc.o \
239 omap_phy_internal.o
240
241obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \
242 omap_phy_internal.o \
157 243
158obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o 244obj-$(CONFIG_MACH_CRANEBOARD) += board-am3517crane.o
159 245
160obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o \ 246obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o \
161 hsmmc.o 247 hsmmc.o
248obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o
162# Platform specific device init code 249# Platform specific device init code
163usbfs-$(CONFIG_ARCH_OMAP_OTG) := usb-fs.o 250usbfs-$(CONFIG_ARCH_OMAP_OTG) := usb-fs.o
164obj-y += $(usbfs-m) $(usbfs-y) 251obj-y += $(usbfs-m) $(usbfs-y)
165obj-y += usb-musb.o 252obj-y += usb-musb.o
166obj-$(CONFIG_MACH_OMAP2_TUSB6010) += usb-tusb6010.o 253obj-$(CONFIG_MACH_OMAP2_TUSB6010) += usb-tusb6010.o
167obj-y += usb-ehci.o 254obj-y += usb-host.o
168 255
169onenand-$(CONFIG_MTD_ONENAND_OMAP2) := gpmc-onenand.o 256onenand-$(CONFIG_MTD_ONENAND_OMAP2) := gpmc-onenand.o
170obj-y += $(onenand-m) $(onenand-y) 257obj-y += $(onenand-m) $(onenand-y)
@@ -174,3 +261,12 @@ obj-y += $(nand-m) $(nand-y)
174 261
175smc91x-$(CONFIG_SMC91X) := gpmc-smc91x.o 262smc91x-$(CONFIG_SMC91X) := gpmc-smc91x.o
176obj-y += $(smc91x-m) $(smc91x-y) 263obj-y += $(smc91x-m) $(smc91x-y)
264
265smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
266obj-y += $(smsc911x-m) $(smsc911x-y)
267obj-$(CONFIG_ARCH_OMAP4) += hwspinlock.o
268
269disp-$(CONFIG_OMAP2_DSS) := display.o
270obj-y += $(disp-m) $(disp-y)
271
272obj-y += common-board-devices.o
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c
index 8538e4131d27..5de6eac0a725 100644
--- a/arch/arm/mach-omap2/board-2430sdp.c
+++ b/arch/arm/mach-omap2/board-2430sdp.c
@@ -19,18 +19,20 @@
19#include <linux/mtd/mtd.h> 19#include <linux/mtd/mtd.h>
20#include <linux/mtd/partitions.h> 20#include <linux/mtd/partitions.h>
21#include <linux/mtd/physmap.h> 21#include <linux/mtd/physmap.h>
22#include <linux/mmc/host.h>
22#include <linux/delay.h> 23#include <linux/delay.h>
23#include <linux/i2c/twl.h> 24#include <linux/i2c/twl.h>
25#include <linux/regulator/machine.h>
24#include <linux/err.h> 26#include <linux/err.h>
25#include <linux/clk.h> 27#include <linux/clk.h>
26#include <linux/io.h> 28#include <linux/io.h>
29#include <linux/gpio.h>
27 30
28#include <mach/hardware.h> 31#include <mach/hardware.h>
29#include <asm/mach-types.h> 32#include <asm/mach-types.h>
30#include <asm/mach/arch.h> 33#include <asm/mach/arch.h>
31#include <asm/mach/map.h> 34#include <asm/mach/map.h>
32 35
33#include <mach/gpio.h>
34#include <plat/board.h> 36#include <plat/board.h>
35#include <plat/common.h> 37#include <plat/common.h>
36#include <plat/gpmc.h> 38#include <plat/gpmc.h>
@@ -39,6 +41,7 @@
39 41
40#include "mux.h" 42#include "mux.h"
41#include "hsmmc.h" 43#include "hsmmc.h"
44#include "common-board-devices.h"
42 45
43#define SDP2430_CS0_BASE 0x04000000 46#define SDP2430_CS0_BASE 0x04000000
44#define SECONDARY_LCD_GPIO 147 47#define SECONDARY_LCD_GPIO 147
@@ -134,19 +137,35 @@ static inline void board_smc91x_init(void)
134 137
135#endif 138#endif
136 139
137static struct omap_board_config_kernel sdp2430_config[] = { 140static struct omap_board_config_kernel sdp2430_config[] __initdata = {
138 {OMAP_TAG_LCD, &sdp2430_lcd_config}, 141 {OMAP_TAG_LCD, &sdp2430_lcd_config},
139}; 142};
140 143
141static void __init omap_2430sdp_init_irq(void) 144static void __init omap_2430sdp_init_early(void)
142{ 145{
143 omap_board_config = sdp2430_config; 146 omap2_init_common_infrastructure();
144 omap_board_config_size = ARRAY_SIZE(sdp2430_config); 147 omap2_init_common_devices(NULL, NULL);
145 omap2_init_common_hw(NULL, NULL);
146 omap_init_irq();
147 omap_gpio_init();
148} 148}
149 149
150static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = {
151 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
152};
153
154/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
155static struct regulator_init_data sdp2430_vmmc1 = {
156 .constraints = {
157 .min_uV = 1850000,
158 .max_uV = 3150000,
159 .valid_modes_mask = REGULATOR_MODE_NORMAL
160 | REGULATOR_MODE_STANDBY,
161 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
162 | REGULATOR_CHANGE_MODE
163 | REGULATOR_CHANGE_STATUS,
164 },
165 .num_consumer_supplies = ARRAY_SIZE(sdp2430_vmmc1_supplies),
166 .consumer_supplies = &sdp2430_vmmc1_supplies[0],
167};
168
150static struct twl4030_gpio_platform_data sdp2430_gpio_data = { 169static struct twl4030_gpio_platform_data sdp2430_gpio_data = {
151 .gpio_base = OMAP_MAX_GPIO_LINES, 170 .gpio_base = OMAP_MAX_GPIO_LINES,
152 .irq_base = TWL4030_GPIO_IRQ_BASE, 171 .irq_base = TWL4030_GPIO_IRQ_BASE,
@@ -159,15 +178,7 @@ static struct twl4030_platform_data sdp2430_twldata = {
159 178
160 /* platform_data for children goes here */ 179 /* platform_data for children goes here */
161 .gpio = &sdp2430_gpio_data, 180 .gpio = &sdp2430_gpio_data,
162}; 181 .vmmc1 = &sdp2430_vmmc1,
163
164static struct i2c_board_info __initdata sdp2430_i2c_boardinfo[] = {
165 {
166 I2C_BOARD_INFO("twl4030", 0x48),
167 .flags = I2C_CLIENT_WAKE,
168 .irq = INT_24XX_SYS_NIRQ,
169 .platform_data = &sdp2430_twldata,
170 },
171}; 182};
172 183
173static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo[] = { 184static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo[] = {
@@ -182,15 +193,14 @@ static int __init omap2430_i2c_init(void)
182{ 193{
183 omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo, 194 omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo,
184 ARRAY_SIZE(sdp2430_i2c1_boardinfo)); 195 ARRAY_SIZE(sdp2430_i2c1_boardinfo));
185 omap_register_i2c_bus(2, 2600, sdp2430_i2c_boardinfo, 196 omap2_pmic_init("twl4030", &sdp2430_twldata);
186 ARRAY_SIZE(sdp2430_i2c_boardinfo));
187 return 0; 197 return 0;
188} 198}
189 199
190static struct omap2_hsmmc_info mmc[] __initdata = { 200static struct omap2_hsmmc_info mmc[] __initdata = {
191 { 201 {
192 .mmc = 1, 202 .mmc = 1,
193 .wires = 4, 203 .caps = MMC_CAP_4_BIT_DATA,
194 .gpio_cd = -EINVAL, 204 .gpio_cd = -EINVAL,
195 .gpio_wp = -EINVAL, 205 .gpio_wp = -EINVAL,
196 .ext_clock = 1, 206 .ext_clock = 1,
@@ -198,11 +208,6 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
198 {} /* Terminator */ 208 {} /* Terminator */
199}; 209};
200 210
201static struct omap_musb_board_data musb_board_data = {
202 .interface_type = MUSB_INTERFACE_ULPI,
203 .mode = MUSB_OTG,
204 .power = 100,
205};
206static struct omap_usb_config sdp2430_usb_config __initdata = { 211static struct omap_usb_config sdp2430_usb_config __initdata = {
207 .otg = 1, 212 .otg = 1,
208#ifdef CONFIG_USB_GADGET_OMAP 213#ifdef CONFIG_USB_GADGET_OMAP
@@ -217,16 +222,15 @@ static struct omap_usb_config sdp2430_usb_config __initdata = {
217static struct omap_board_mux board_mux[] __initdata = { 222static struct omap_board_mux board_mux[] __initdata = {
218 { .reg_offset = OMAP_MUX_TERMINATOR }, 223 { .reg_offset = OMAP_MUX_TERMINATOR },
219}; 224};
220#else
221#define board_mux NULL
222#endif 225#endif
223 226
224static void __init omap_2430sdp_init(void) 227static void __init omap_2430sdp_init(void)
225{ 228{
226 int ret;
227
228 omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC); 229 omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
229 230
231 omap_board_config = sdp2430_config;
232 omap_board_config_size = ARRAY_SIZE(sdp2430_config);
233
230 omap2430_i2c_init(); 234 omap2430_i2c_init();
231 235
232 platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); 236 platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
@@ -235,14 +239,13 @@ static void __init omap_2430sdp_init(void)
235 omap2_usbfs_init(&sdp2430_usb_config); 239 omap2_usbfs_init(&sdp2430_usb_config);
236 240
237 omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP); 241 omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
238 usb_musb_init(&musb_board_data); 242 usb_musb_init(NULL);
239 243
240 board_smc91x_init(); 244 board_smc91x_init();
241 245
242 /* Turn off secondary LCD backlight */ 246 /* Turn off secondary LCD backlight */
243 ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight"); 247 gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,
244 if (ret == 0) 248 "Secondary LCD backlight");
245 gpio_direction_output(SECONDARY_LCD_GPIO, 0);
246} 249}
247 250
248static void __init omap_2430sdp_map_io(void) 251static void __init omap_2430sdp_map_io(void)
@@ -253,12 +256,11 @@ static void __init omap_2430sdp_map_io(void)
253 256
254MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board") 257MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
255 /* Maintainer: Syed Khasim - Texas Instruments Inc */ 258 /* Maintainer: Syed Khasim - Texas Instruments Inc */
256 .phys_io = 0x48000000,
257 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
258 .boot_params = 0x80000100, 259 .boot_params = 0x80000100,
259 .map_io = omap_2430sdp_map_io,
260 .reserve = omap_reserve, 260 .reserve = omap_reserve,
261 .init_irq = omap_2430sdp_init_irq, 261 .map_io = omap_2430sdp_map_io,
262 .init_early = omap_2430sdp_init_early,
263 .init_irq = omap_init_irq,
262 .init_machine = omap_2430sdp_init, 264 .init_machine = omap_2430sdp_init,
263 .timer = &omap_timer, 265 .timer = &omap_timer,
264MACHINE_END 266MACHINE_END
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 67b95b5f1a2f..5dac974be625 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -19,11 +19,11 @@
19#include <linux/input.h> 19#include <linux/input.h>
20#include <linux/input/matrix_keypad.h> 20#include <linux/input/matrix_keypad.h>
21#include <linux/spi/spi.h> 21#include <linux/spi/spi.h>
22#include <linux/spi/ads7846.h>
23#include <linux/i2c/twl.h> 22#include <linux/i2c/twl.h>
24#include <linux/regulator/machine.h> 23#include <linux/regulator/machine.h>
25#include <linux/io.h> 24#include <linux/io.h>
26#include <linux/gpio.h> 25#include <linux/gpio.h>
26#include <linux/mmc/host.h>
27 27
28#include <mach/hardware.h> 28#include <mach/hardware.h>
29#include <asm/mach-types.h> 29#include <asm/mach-types.h>
@@ -36,17 +36,18 @@
36#include <plat/common.h> 36#include <plat/common.h>
37#include <plat/dma.h> 37#include <plat/dma.h>
38#include <plat/gpmc.h> 38#include <plat/gpmc.h>
39#include <plat/display.h> 39#include <video/omapdss.h>
40#include <video/omap-panel-generic-dpi.h>
40 41
41#include <plat/control.h>
42#include <plat/gpmc-smc91x.h> 42#include <plat/gpmc-smc91x.h>
43 43
44#include <mach/board-flash.h> 44#include "board-flash.h"
45
46#include "mux.h" 45#include "mux.h"
47#include "sdram-qimonda-hyb18m512160af-6.h" 46#include "sdram-qimonda-hyb18m512160af-6.h"
48#include "hsmmc.h" 47#include "hsmmc.h"
49#include "pm.h" 48#include "pm.h"
49#include "control.h"
50#include "common-board-devices.h"
50 51
51#define CONFIG_DISABLE_HFCLK 1 52#define CONFIG_DISABLE_HFCLK 1
52 53
@@ -58,25 +59,7 @@
58 59
59#define TWL4030_MSECURE_GPIO 22 60#define TWL4030_MSECURE_GPIO 22
60 61
61/* FIXME: These values need to be updated based on more profiling on 3430sdp*/ 62static uint32_t board_keymap[] = {
62static struct cpuidle_params omap3_cpuidle_params_table[] = {
63 /* C1 */
64 {1, 2, 2, 5},
65 /* C2 */
66 {1, 10, 10, 30},
67 /* C3 */
68 {1, 50, 50, 300},
69 /* C4 */
70 {1, 1500, 1800, 4000},
71 /* C5 */
72 {1, 2500, 7500, 12000},
73 /* C6 */
74 {1, 3000, 8500, 15000},
75 /* C7 */
76 {1, 10000, 30000, 300000},
77};
78
79static int board_keymap[] = {
80 KEY(0, 0, KEY_LEFT), 63 KEY(0, 0, KEY_LEFT),
81 KEY(0, 1, KEY_RIGHT), 64 KEY(0, 1, KEY_RIGHT),
82 KEY(0, 2, KEY_A), 65 KEY(0, 2, KEY_A),
@@ -122,63 +105,14 @@ static struct twl4030_keypad_data sdp3430_kp_data = {
122 .rep = 1, 105 .rep = 1,
123}; 106};
124 107
125static int ts_gpio; /* Needed for ads7846_get_pendown_state */
126
127/**
128 * @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq
129 *
130 * @return - void. If request gpio fails then Flag KERN_ERR.
131 */
132static void ads7846_dev_init(void)
133{
134 if (gpio_request(ts_gpio, "ADS7846 pendown") < 0) {
135 printk(KERN_ERR "can't get ads746 pen down GPIO\n");
136 return;
137 }
138
139 gpio_direction_input(ts_gpio);
140 gpio_set_debounce(ts_gpio, 310);
141}
142
143static int ads7846_get_pendown_state(void)
144{
145 return !gpio_get_value(ts_gpio);
146}
147
148static struct ads7846_platform_data tsc2046_config __initdata = {
149 .get_pendown_state = ads7846_get_pendown_state,
150 .keep_vref_on = 1,
151 .wakeup = true,
152};
153
154
155static struct omap2_mcspi_device_config tsc2046_mcspi_config = {
156 .turbo_mode = 0,
157 .single_channel = 1, /* 0: slave, 1: master */
158};
159
160static struct spi_board_info sdp3430_spi_board_info[] __initdata = {
161 [0] = {
162 /*
163 * TSC2046 operates at a max freqency of 2MHz, so
164 * operate slightly below at 1.5MHz
165 */
166 .modalias = "ads7846",
167 .bus_num = 1,
168 .chip_select = 0,
169 .max_speed_hz = 1500000,
170 .controller_data = &tsc2046_mcspi_config,
171 .irq = 0,
172 .platform_data = &tsc2046_config,
173 },
174};
175
176
177#define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8 108#define SDP3430_LCD_PANEL_BACKLIGHT_GPIO 8
178#define SDP3430_LCD_PANEL_ENABLE_GPIO 5 109#define SDP3430_LCD_PANEL_ENABLE_GPIO 5
179 110
180static unsigned backlight_gpio; 111static struct gpio sdp3430_dss_gpios[] __initdata = {
181static unsigned enable_gpio; 112 {SDP3430_LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, "LCD reset" },
113 {SDP3430_LCD_PANEL_BACKLIGHT_GPIO, GPIOF_OUT_INIT_LOW, "LCD Backlight"},
114};
115
182static int lcd_enabled; 116static int lcd_enabled;
183static int dvi_enabled; 117static int dvi_enabled;
184 118
@@ -186,29 +120,11 @@ static void __init sdp3430_display_init(void)
186{ 120{
187 int r; 121 int r;
188 122
189 enable_gpio = SDP3430_LCD_PANEL_ENABLE_GPIO; 123 r = gpio_request_array(sdp3430_dss_gpios,
190 backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO; 124 ARRAY_SIZE(sdp3430_dss_gpios));
125 if (r)
126 printk(KERN_ERR "failed to get LCD control GPIOs\n");
191 127
192 r = gpio_request(enable_gpio, "LCD reset");
193 if (r) {
194 printk(KERN_ERR "failed to get LCD reset GPIO\n");
195 goto err0;
196 }
197
198 r = gpio_request(backlight_gpio, "LCD Backlight");
199 if (r) {
200 printk(KERN_ERR "failed to get LCD backlight GPIO\n");
201 goto err1;
202 }
203
204 gpio_direction_output(enable_gpio, 0);
205 gpio_direction_output(backlight_gpio, 0);
206
207 return;
208err1:
209 gpio_free(enable_gpio);
210err0:
211 return;
212} 128}
213 129
214static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev) 130static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
@@ -218,8 +134,8 @@ static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev)
218 return -EINVAL; 134 return -EINVAL;
219 } 135 }
220 136
221 gpio_direction_output(enable_gpio, 1); 137 gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 1);
222 gpio_direction_output(backlight_gpio, 1); 138 gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 1);
223 139
224 lcd_enabled = 1; 140 lcd_enabled = 1;
225 141
@@ -230,8 +146,8 @@ static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev)
230{ 146{
231 lcd_enabled = 0; 147 lcd_enabled = 0;
232 148
233 gpio_direction_output(enable_gpio, 0); 149 gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 0);
234 gpio_direction_output(backlight_gpio, 0); 150 gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 0);
235} 151}
236 152
237static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev) 153static int sdp3430_panel_enable_dvi(struct omap_dss_device *dssdev)
@@ -270,13 +186,18 @@ static struct omap_dss_device sdp3430_lcd_device = {
270 .platform_disable = sdp3430_panel_disable_lcd, 186 .platform_disable = sdp3430_panel_disable_lcd,
271}; 187};
272 188
189static struct panel_generic_dpi_data dvi_panel = {
190 .name = "generic",
191 .platform_enable = sdp3430_panel_enable_dvi,
192 .platform_disable = sdp3430_panel_disable_dvi,
193};
194
273static struct omap_dss_device sdp3430_dvi_device = { 195static struct omap_dss_device sdp3430_dvi_device = {
274 .name = "dvi", 196 .name = "dvi",
275 .driver_name = "generic_panel",
276 .type = OMAP_DISPLAY_TYPE_DPI, 197 .type = OMAP_DISPLAY_TYPE_DPI,
198 .driver_name = "generic_dpi_panel",
199 .data = &dvi_panel,
277 .phy.dpi.data_lines = 24, 200 .phy.dpi.data_lines = 24,
278 .platform_enable = sdp3430_panel_enable_dvi,
279 .platform_disable = sdp3430_panel_disable_dvi,
280}; 201};
281 202
282static struct omap_dss_device sdp3430_tv_device = { 203static struct omap_dss_device sdp3430_tv_device = {
@@ -301,34 +222,13 @@ static struct omap_dss_board_info sdp3430_dss_data = {
301 .default_device = &sdp3430_lcd_device, 222 .default_device = &sdp3430_lcd_device,
302}; 223};
303 224
304static struct platform_device sdp3430_dss_device = {
305 .name = "omapdss",
306 .id = -1,
307 .dev = {
308 .platform_data = &sdp3430_dss_data,
309 },
310};
311
312static struct regulator_consumer_supply sdp3430_vdda_dac_supply = {
313 .supply = "vdda_dac",
314 .dev = &sdp3430_dss_device.dev,
315};
316
317static struct platform_device *sdp3430_devices[] __initdata = {
318 &sdp3430_dss_device,
319};
320
321static struct omap_board_config_kernel sdp3430_config[] __initdata = { 225static struct omap_board_config_kernel sdp3430_config[] __initdata = {
322}; 226};
323 227
324static void __init omap_3430sdp_init_irq(void) 228static void __init omap_3430sdp_init_early(void)
325{ 229{
326 omap_board_config = sdp3430_config; 230 omap2_init_common_infrastructure();
327 omap_board_config_size = ARRAY_SIZE(sdp3430_config); 231 omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
328 omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
329 omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL);
330 omap_init_irq();
331 omap_gpio_init();
332} 232}
333 233
334static int sdp3430_batt_table[] = { 234static int sdp3430_batt_table[] = {
@@ -353,29 +253,17 @@ static struct omap2_hsmmc_info mmc[] = {
353 /* 8 bits (default) requires S6.3 == ON, 253 /* 8 bits (default) requires S6.3 == ON,
354 * so the SIM card isn't used; else 4 bits. 254 * so the SIM card isn't used; else 4 bits.
355 */ 255 */
356 .wires = 8, 256 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
357 .gpio_wp = 4, 257 .gpio_wp = 4,
358 }, 258 },
359 { 259 {
360 .mmc = 2, 260 .mmc = 2,
361 .wires = 8, 261 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
362 .gpio_wp = 7, 262 .gpio_wp = 7,
363 }, 263 },
364 {} /* Terminator */ 264 {} /* Terminator */
365}; 265};
366 266
367static struct regulator_consumer_supply sdp3430_vmmc1_supply = {
368 .supply = "vmmc",
369};
370
371static struct regulator_consumer_supply sdp3430_vsim_supply = {
372 .supply = "vmmc_aux",
373};
374
375static struct regulator_consumer_supply sdp3430_vmmc2_supply = {
376 .supply = "vmmc",
377};
378
379static int sdp3430_twl_gpio_setup(struct device *dev, 267static int sdp3430_twl_gpio_setup(struct device *dev,
380 unsigned gpio, unsigned ngpio) 268 unsigned gpio, unsigned ngpio)
381{ 269{
@@ -386,20 +274,11 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
386 mmc[1].gpio_cd = gpio + 1; 274 mmc[1].gpio_cd = gpio + 1;
387 omap2_hsmmc_init(mmc); 275 omap2_hsmmc_init(mmc);
388 276
389 /* link regulators to MMC adapters ... we "know" the
390 * regulators will be set up only *after* we return.
391 */
392 sdp3430_vmmc1_supply.dev = mmc[0].dev;
393 sdp3430_vsim_supply.dev = mmc[0].dev;
394 sdp3430_vmmc2_supply.dev = mmc[1].dev;
395
396 /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */ 277 /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
397 gpio_request(gpio + 7, "sub_lcd_en_bkl"); 278 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
398 gpio_direction_output(gpio + 7, 0);
399 279
400 /* gpio + 15 is "sub_lcd_nRST" (output) */ 280 /* gpio + 15 is "sub_lcd_nRST" (output) */
401 gpio_request(gpio + 15, "sub_lcd_nRST"); 281 gpio_request_one(gpio + 15, GPIOF_OUT_INIT_LOW, "sub_lcd_nRST");
402 gpio_direction_output(gpio + 15, 0);
403 282
404 return 0; 283 return 0;
405} 284}
@@ -421,6 +300,35 @@ static struct twl4030_madc_platform_data sdp3430_madc_data = {
421 .irq_line = 1, 300 .irq_line = 1,
422}; 301};
423 302
303/* regulator consumer mappings */
304
305/* ads7846 on SPI */
306static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = {
307 REGULATOR_SUPPLY("vcc", "spi1.0"),
308};
309
310static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = {
311 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
312};
313
314/* VPLL2 for digital video outputs */
315static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
316 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
317 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
318};
319
320static struct regulator_consumer_supply sdp3430_vmmc1_supplies[] = {
321 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
322};
323
324static struct regulator_consumer_supply sdp3430_vsim_supplies[] = {
325 REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
326};
327
328static struct regulator_consumer_supply sdp3430_vmmc2_supplies[] = {
329 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
330};
331
424/* 332/*
425 * Apply all the fixed voltages since most versions of U-Boot 333 * Apply all the fixed voltages since most versions of U-Boot
426 * don't bother with that initialization. 334 * don't bother with that initialization.
@@ -463,6 +371,8 @@ static struct regulator_init_data sdp3430_vaux3 = {
463 .valid_ops_mask = REGULATOR_CHANGE_MODE 371 .valid_ops_mask = REGULATOR_CHANGE_MODE
464 | REGULATOR_CHANGE_STATUS, 372 | REGULATOR_CHANGE_STATUS,
465 }, 373 },
374 .num_consumer_supplies = ARRAY_SIZE(sdp3430_vaux3_supplies),
375 .consumer_supplies = sdp3430_vaux3_supplies,
466}; 376};
467 377
468/* VAUX4 for OMAP VDD_CSI2 (camera) */ 378/* VAUX4 for OMAP VDD_CSI2 (camera) */
@@ -489,8 +399,8 @@ static struct regulator_init_data sdp3430_vmmc1 = {
489 | REGULATOR_CHANGE_MODE 399 | REGULATOR_CHANGE_MODE
490 | REGULATOR_CHANGE_STATUS, 400 | REGULATOR_CHANGE_STATUS,
491 }, 401 },
492 .num_consumer_supplies = 1, 402 .num_consumer_supplies = ARRAY_SIZE(sdp3430_vmmc1_supplies),
493 .consumer_supplies = &sdp3430_vmmc1_supply, 403 .consumer_supplies = sdp3430_vmmc1_supplies,
494}; 404};
495 405
496/* VMMC2 for MMC2 card */ 406/* VMMC2 for MMC2 card */
@@ -504,8 +414,8 @@ static struct regulator_init_data sdp3430_vmmc2 = {
504 .valid_ops_mask = REGULATOR_CHANGE_MODE 414 .valid_ops_mask = REGULATOR_CHANGE_MODE
505 | REGULATOR_CHANGE_STATUS, 415 | REGULATOR_CHANGE_STATUS,
506 }, 416 },
507 .num_consumer_supplies = 1, 417 .num_consumer_supplies = ARRAY_SIZE(sdp3430_vmmc2_supplies),
508 .consumer_supplies = &sdp3430_vmmc2_supply, 418 .consumer_supplies = sdp3430_vmmc2_supplies,
509}; 419};
510 420
511/* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */ 421/* VSIM for OMAP VDD_MMC1A (i/o for DAT4..DAT7) */
@@ -519,8 +429,8 @@ static struct regulator_init_data sdp3430_vsim = {
519 | REGULATOR_CHANGE_MODE 429 | REGULATOR_CHANGE_MODE
520 | REGULATOR_CHANGE_STATUS, 430 | REGULATOR_CHANGE_STATUS,
521 }, 431 },
522 .num_consumer_supplies = 1, 432 .num_consumer_supplies = ARRAY_SIZE(sdp3430_vsim_supplies),
523 .consumer_supplies = &sdp3430_vsim_supply, 433 .consumer_supplies = sdp3430_vsim_supplies,
524}; 434};
525 435
526/* VDAC for DSS driving S-Video */ 436/* VDAC for DSS driving S-Video */
@@ -534,16 +444,8 @@ static struct regulator_init_data sdp3430_vdac = {
534 .valid_ops_mask = REGULATOR_CHANGE_MODE 444 .valid_ops_mask = REGULATOR_CHANGE_MODE
535 | REGULATOR_CHANGE_STATUS, 445 | REGULATOR_CHANGE_STATUS,
536 }, 446 },
537 .num_consumer_supplies = 1, 447 .num_consumer_supplies = ARRAY_SIZE(sdp3430_vdda_dac_supplies),
538 .consumer_supplies = &sdp3430_vdda_dac_supply, 448 .consumer_supplies = sdp3430_vdda_dac_supplies,
539};
540
541/* VPLL2 for digital video outputs */
542static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
543 {
544 .supply = "vdds_dsi",
545 .dev = &sdp3430_dss_device.dev,
546 }
547}; 449};
548 450
549static struct regulator_init_data sdp3430_vpll2 = { 451static struct regulator_init_data sdp3430_vpll2 = {
@@ -561,9 +463,7 @@ static struct regulator_init_data sdp3430_vpll2 = {
561 .consumer_supplies = sdp3430_vpll2_supplies, 463 .consumer_supplies = sdp3430_vpll2_supplies,
562}; 464};
563 465
564static struct twl4030_codec_audio_data sdp3430_audio = { 466static struct twl4030_codec_audio_data sdp3430_audio;
565 .audio_mclk = 26000000,
566};
567 467
568static struct twl4030_codec_data sdp3430_codec = { 468static struct twl4030_codec_data sdp3430_codec = {
569 .audio_mclk = 26000000, 469 .audio_mclk = 26000000,
@@ -593,20 +493,10 @@ static struct twl4030_platform_data sdp3430_twldata = {
593 .vpll2 = &sdp3430_vpll2, 493 .vpll2 = &sdp3430_vpll2,
594}; 494};
595 495
596static struct i2c_board_info __initdata sdp3430_i2c_boardinfo[] = {
597 {
598 I2C_BOARD_INFO("twl4030", 0x48),
599 .flags = I2C_CLIENT_WAKE,
600 .irq = INT_34XX_SYS_NIRQ,
601 .platform_data = &sdp3430_twldata,
602 },
603};
604
605static int __init omap3430_i2c_init(void) 496static int __init omap3430_i2c_init(void)
606{ 497{
607 /* i2c1 for PMIC only */ 498 /* i2c1 for PMIC only */
608 omap_register_i2c_bus(1, 2600, sdp3430_i2c_boardinfo, 499 omap3_pmic_init("twl4030", &sdp3430_twldata);
609 ARRAY_SIZE(sdp3430_i2c_boardinfo));
610 /* i2c2 on camera connector (for sensor control) and optional isp1301 */ 500 /* i2c2 on camera connector (for sensor control) and optional isp1301 */
611 omap_register_i2c_bus(2, 400, NULL, 0); 501 omap_register_i2c_bus(2, 400, NULL, 0);
612 /* i2c3 on display connector (for DVI, tfp410) */ 502 /* i2c3 on display connector (for DVI, tfp410) */
@@ -647,11 +537,11 @@ static void enable_board_wakeup_source(void)
647 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); 537 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
648} 538}
649 539
650static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 540static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
651 541
652 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 542 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
653 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 543 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
654 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 544 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
655 545
656 .phy_reset = true, 546 .phy_reset = true,
657 .reset_gpio_port[0] = 57, 547 .reset_gpio_port[0] = 57,
@@ -663,8 +553,106 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
663static struct omap_board_mux board_mux[] __initdata = { 553static struct omap_board_mux board_mux[] __initdata = {
664 { .reg_offset = OMAP_MUX_TERMINATOR }, 554 { .reg_offset = OMAP_MUX_TERMINATOR },
665}; 555};
556
557static struct omap_device_pad serial1_pads[] __initdata = {
558 /*
559 * Note that off output enable is an active low
560 * signal. So setting this means pin is a
561 * input enabled in off mode
562 */
563 OMAP_MUX_STATIC("uart1_cts.uart1_cts",
564 OMAP_PIN_INPUT |
565 OMAP_PIN_OFF_INPUT_PULLDOWN |
566 OMAP_OFFOUT_EN |
567 OMAP_MUX_MODE0),
568 OMAP_MUX_STATIC("uart1_rts.uart1_rts",
569 OMAP_PIN_OUTPUT |
570 OMAP_OFF_EN |
571 OMAP_MUX_MODE0),
572 OMAP_MUX_STATIC("uart1_rx.uart1_rx",
573 OMAP_PIN_INPUT |
574 OMAP_PIN_OFF_INPUT_PULLDOWN |
575 OMAP_OFFOUT_EN |
576 OMAP_MUX_MODE0),
577 OMAP_MUX_STATIC("uart1_tx.uart1_tx",
578 OMAP_PIN_OUTPUT |
579 OMAP_OFF_EN |
580 OMAP_MUX_MODE0),
581};
582
583static struct omap_device_pad serial2_pads[] __initdata = {
584 OMAP_MUX_STATIC("uart2_cts.uart2_cts",
585 OMAP_PIN_INPUT_PULLUP |
586 OMAP_PIN_OFF_INPUT_PULLDOWN |
587 OMAP_OFFOUT_EN |
588 OMAP_MUX_MODE0),
589 OMAP_MUX_STATIC("uart2_rts.uart2_rts",
590 OMAP_PIN_OUTPUT |
591 OMAP_OFF_EN |
592 OMAP_MUX_MODE0),
593 OMAP_MUX_STATIC("uart2_rx.uart2_rx",
594 OMAP_PIN_INPUT |
595 OMAP_PIN_OFF_INPUT_PULLDOWN |
596 OMAP_OFFOUT_EN |
597 OMAP_MUX_MODE0),
598 OMAP_MUX_STATIC("uart2_tx.uart2_tx",
599 OMAP_PIN_OUTPUT |
600 OMAP_OFF_EN |
601 OMAP_MUX_MODE0),
602};
603
604static struct omap_device_pad serial3_pads[] __initdata = {
605 OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
606 OMAP_PIN_INPUT_PULLDOWN |
607 OMAP_PIN_OFF_INPUT_PULLDOWN |
608 OMAP_OFFOUT_EN |
609 OMAP_MUX_MODE0),
610 OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
611 OMAP_PIN_OUTPUT |
612 OMAP_OFF_EN |
613 OMAP_MUX_MODE0),
614 OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
615 OMAP_PIN_INPUT |
616 OMAP_PIN_OFF_INPUT_PULLDOWN |
617 OMAP_OFFOUT_EN |
618 OMAP_MUX_MODE0),
619 OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
620 OMAP_PIN_OUTPUT |
621 OMAP_OFF_EN |
622 OMAP_MUX_MODE0),
623};
624
625static struct omap_board_data serial1_data __initdata = {
626 .id = 0,
627 .pads = serial1_pads,
628 .pads_cnt = ARRAY_SIZE(serial1_pads),
629};
630
631static struct omap_board_data serial2_data __initdata = {
632 .id = 1,
633 .pads = serial2_pads,
634 .pads_cnt = ARRAY_SIZE(serial2_pads),
635};
636
637static struct omap_board_data serial3_data __initdata = {
638 .id = 2,
639 .pads = serial3_pads,
640 .pads_cnt = ARRAY_SIZE(serial3_pads),
641};
642
643static inline void board_serial_init(void)
644{
645 omap_serial_init_port(&serial1_data);
646 omap_serial_init_port(&serial2_data);
647 omap_serial_init_port(&serial3_data);
648}
666#else 649#else
667#define board_mux NULL 650#define board_mux NULL
651
652static inline void board_serial_init(void)
653{
654 omap_serial_init();
655}
668#endif 656#endif
669 657
670/* 658/*
@@ -787,42 +775,36 @@ static struct flash_partitions sdp_flash_partitions[] = {
787 }, 775 },
788}; 776};
789 777
790static struct omap_musb_board_data musb_board_data = {
791 .interface_type = MUSB_INTERFACE_ULPI,
792 .mode = MUSB_OTG,
793 .power = 100,
794};
795
796static void __init omap_3430sdp_init(void) 778static void __init omap_3430sdp_init(void)
797{ 779{
780 int gpio_pendown;
781
798 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 782 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
783 omap_board_config = sdp3430_config;
784 omap_board_config_size = ARRAY_SIZE(sdp3430_config);
799 omap3430_i2c_init(); 785 omap3430_i2c_init();
800 platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices)); 786 omap_display_init(&sdp3430_dss_data);
801 if (omap_rev() > OMAP3430_REV_ES1_0) 787 if (omap_rev() > OMAP3430_REV_ES1_0)
802 ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2; 788 gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV2;
803 else 789 else
804 ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV1; 790 gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1;
805 sdp3430_spi_board_info[0].irq = gpio_to_irq(ts_gpio); 791 omap_ads7846_init(1, gpio_pendown, 310, NULL);
806 spi_register_board_info(sdp3430_spi_board_info, 792 board_serial_init();
807 ARRAY_SIZE(sdp3430_spi_board_info)); 793 usb_musb_init(NULL);
808 ads7846_dev_init();
809 omap_serial_init();
810 usb_musb_init(&musb_board_data);
811 board_smc91x_init(); 794 board_smc91x_init();
812 board_flash_init(sdp_flash_partitions, chip_sel_3430); 795 board_flash_init(sdp_flash_partitions, chip_sel_3430, 0);
813 sdp3430_display_init(); 796 sdp3430_display_init();
814 enable_board_wakeup_source(); 797 enable_board_wakeup_source();
815 usb_ehci_init(&ehci_pdata); 798 usbhs_init(&usbhs_bdata);
816} 799}
817 800
818MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board") 801MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
819 /* Maintainer: Syed Khasim - Texas Instruments Inc */ 802 /* Maintainer: Syed Khasim - Texas Instruments Inc */
820 .phys_io = 0x48000000,
821 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
822 .boot_params = 0x80000100, 803 .boot_params = 0x80000100,
823 .map_io = omap3_map_io,
824 .reserve = omap_reserve, 804 .reserve = omap_reserve,
825 .init_irq = omap_3430sdp_init_irq, 805 .map_io = omap3_map_io,
806 .init_early = omap_3430sdp_init_early,
807 .init_irq = omap_init_irq,
826 .init_machine = omap_3430sdp_init, 808 .init_machine = omap_3430sdp_init,
827 .timer = &omap_timer, 809 .timer = &omap_timer,
828MACHINE_END 810MACHINE_END
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c
index b359c3f7bb39..a5933cc15caa 100644
--- a/arch/arm/mach-omap2/board-3630sdp.c
+++ b/arch/arm/mach-omap2/board-3630sdp.c
@@ -11,6 +11,7 @@
11#include <linux/platform_device.h> 11#include <linux/platform_device.h>
12#include <linux/input.h> 12#include <linux/input.h>
13#include <linux/gpio.h> 13#include <linux/gpio.h>
14#include <linux/mtd/nand.h>
14 15
15#include <asm/mach-types.h> 16#include <asm/mach-types.h>
16#include <asm/mach/arch.h> 17#include <asm/mach/arch.h>
@@ -21,8 +22,8 @@
21#include <plat/usb.h> 22#include <plat/usb.h>
22 23
23#include <mach/board-zoom.h> 24#include <mach/board-zoom.h>
24#include <mach/board-flash.h>
25 25
26#include "board-flash.h"
26#include "mux.h" 27#include "mux.h"
27#include "sdram-hynix-h8mbx00u0mer-0em.h" 28#include "sdram-hynix-h8mbx00u0mer-0em.h"
28 29
@@ -54,11 +55,11 @@ static void enable_board_wakeup_source(void)
54 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP); 55 OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
55} 56}
56 57
57static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 58static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
58 59
59 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 60 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
60 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 61 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
61 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 62 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
62 63
63 .phy_reset = true, 64 .phy_reset = true,
64 .reset_gpio_port[0] = 126, 65 .reset_gpio_port[0] = 126,
@@ -69,22 +70,17 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
69static struct omap_board_config_kernel sdp_config[] __initdata = { 70static struct omap_board_config_kernel sdp_config[] __initdata = {
70}; 71};
71 72
72static void __init omap_sdp_init_irq(void) 73static void __init omap_sdp_init_early(void)
73{ 74{
74 omap_board_config = sdp_config; 75 omap2_init_common_infrastructure();
75 omap_board_config_size = ARRAY_SIZE(sdp_config); 76 omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
76 omap2_init_common_hw(h8mbx00u0mer0em_sdrc_params, 77 h8mbx00u0mer0em_sdrc_params);
77 h8mbx00u0mer0em_sdrc_params);
78 omap_init_irq();
79 omap_gpio_init();
80} 78}
81 79
82#ifdef CONFIG_OMAP_MUX 80#ifdef CONFIG_OMAP_MUX
83static struct omap_board_mux board_mux[] __initdata = { 81static struct omap_board_mux board_mux[] __initdata = {
84 { .reg_offset = OMAP_MUX_TERMINATOR }, 82 { .reg_offset = OMAP_MUX_TERMINATOR },
85}; 83};
86#else
87#define board_mux NULL
88#endif 84#endif
89 85
90/* 86/*
@@ -208,21 +204,22 @@ static struct flash_partitions sdp_flash_partitions[] = {
208static void __init omap_sdp_init(void) 204static void __init omap_sdp_init(void)
209{ 205{
210 omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); 206 omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
211 omap_serial_init(); 207 omap_board_config = sdp_config;
208 omap_board_config_size = ARRAY_SIZE(sdp_config);
212 zoom_peripherals_init(); 209 zoom_peripherals_init();
210 zoom_display_init();
213 board_smc91x_init(); 211 board_smc91x_init();
214 board_flash_init(sdp_flash_partitions, chip_sel_sdp); 212 board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16);
215 enable_board_wakeup_source(); 213 enable_board_wakeup_source();
216 usb_ehci_init(&ehci_pdata); 214 usbhs_init(&usbhs_bdata);
217} 215}
218 216
219MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board") 217MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")
220 .phys_io = 0x48000000,
221 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
222 .boot_params = 0x80000100, 218 .boot_params = 0x80000100,
223 .map_io = omap3_map_io,
224 .reserve = omap_reserve, 219 .reserve = omap_reserve,
225 .init_irq = omap_sdp_init_irq, 220 .map_io = omap3_map_io,
221 .init_early = omap_sdp_init_early,
222 .init_irq = omap_init_irq,
226 .init_machine = omap_sdp_init, 223 .init_machine = omap_sdp_init,
227 .timer = &omap_timer, 224 .timer = &omap_timer,
228MACHINE_END 225MACHINE_END
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 9447644774c2..63de2d396e2d 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -20,8 +20,10 @@
20#include <linux/usb/otg.h> 20#include <linux/usb/otg.h>
21#include <linux/spi/spi.h> 21#include <linux/spi/spi.h>
22#include <linux/i2c/twl.h> 22#include <linux/i2c/twl.h>
23#include <linux/gpio_keys.h>
23#include <linux/regulator/machine.h> 24#include <linux/regulator/machine.h>
24#include <linux/leds.h> 25#include <linux/leds.h>
26#include <linux/leds_pwm.h>
25 27
26#include <mach/hardware.h> 28#include <mach/hardware.h>
27#include <mach/omap4-common.h> 29#include <mach/omap4-common.h>
@@ -31,16 +33,109 @@
31 33
32#include <plat/board.h> 34#include <plat/board.h>
33#include <plat/common.h> 35#include <plat/common.h>
34#include <plat/control.h>
35#include <plat/timer-gp.h>
36#include <plat/usb.h> 36#include <plat/usb.h>
37#include <plat/mmc.h> 37#include <plat/mmc.h>
38#include <plat/omap4-keypad.h>
39#include <video/omapdss.h>
40
41#include "mux.h"
38#include "hsmmc.h" 42#include "hsmmc.h"
43#include "timer-gp.h"
44#include "control.h"
45#include "common-board-devices.h"
39 46
40#define ETH_KS8851_IRQ 34 47#define ETH_KS8851_IRQ 34
41#define ETH_KS8851_POWER_ON 48 48#define ETH_KS8851_POWER_ON 48
42#define ETH_KS8851_QUART 138 49#define ETH_KS8851_QUART 138
50#define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184
51#define OMAP4_SFH7741_ENABLE_GPIO 188
52#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
53#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
54
55static const int sdp4430_keymap[] = {
56 KEY(0, 0, KEY_E),
57 KEY(0, 1, KEY_R),
58 KEY(0, 2, KEY_T),
59 KEY(0, 3, KEY_HOME),
60 KEY(0, 4, KEY_F5),
61 KEY(0, 5, KEY_UNKNOWN),
62 KEY(0, 6, KEY_I),
63 KEY(0, 7, KEY_LEFTSHIFT),
64
65 KEY(1, 0, KEY_D),
66 KEY(1, 1, KEY_F),
67 KEY(1, 2, KEY_G),
68 KEY(1, 3, KEY_SEND),
69 KEY(1, 4, KEY_F6),
70 KEY(1, 5, KEY_UNKNOWN),
71 KEY(1, 6, KEY_K),
72 KEY(1, 7, KEY_ENTER),
73
74 KEY(2, 0, KEY_X),
75 KEY(2, 1, KEY_C),
76 KEY(2, 2, KEY_V),
77 KEY(2, 3, KEY_END),
78 KEY(2, 4, KEY_F7),
79 KEY(2, 5, KEY_UNKNOWN),
80 KEY(2, 6, KEY_DOT),
81 KEY(2, 7, KEY_CAPSLOCK),
82
83 KEY(3, 0, KEY_Z),
84 KEY(3, 1, KEY_KPPLUS),
85 KEY(3, 2, KEY_B),
86 KEY(3, 3, KEY_F1),
87 KEY(3, 4, KEY_F8),
88 KEY(3, 5, KEY_UNKNOWN),
89 KEY(3, 6, KEY_O),
90 KEY(3, 7, KEY_SPACE),
91
92 KEY(4, 0, KEY_W),
93 KEY(4, 1, KEY_Y),
94 KEY(4, 2, KEY_U),
95 KEY(4, 3, KEY_F2),
96 KEY(4, 4, KEY_VOLUMEUP),
97 KEY(4, 5, KEY_UNKNOWN),
98 KEY(4, 6, KEY_L),
99 KEY(4, 7, KEY_LEFT),
100
101 KEY(5, 0, KEY_S),
102 KEY(5, 1, KEY_H),
103 KEY(5, 2, KEY_J),
104 KEY(5, 3, KEY_F3),
105 KEY(5, 4, KEY_F9),
106 KEY(5, 5, KEY_VOLUMEDOWN),
107 KEY(5, 6, KEY_M),
108 KEY(5, 7, KEY_RIGHT),
109
110 KEY(6, 0, KEY_Q),
111 KEY(6, 1, KEY_A),
112 KEY(6, 2, KEY_N),
113 KEY(6, 3, KEY_BACK),
114 KEY(6, 4, KEY_BACKSPACE),
115 KEY(6, 5, KEY_UNKNOWN),
116 KEY(6, 6, KEY_P),
117 KEY(6, 7, KEY_UP),
118
119 KEY(7, 0, KEY_PROG1),
120 KEY(7, 1, KEY_PROG2),
121 KEY(7, 2, KEY_PROG3),
122 KEY(7, 3, KEY_PROG4),
123 KEY(7, 4, KEY_F4),
124 KEY(7, 5, KEY_UNKNOWN),
125 KEY(7, 6, KEY_OK),
126 KEY(7, 7, KEY_DOWN),
127};
43 128
129static struct matrix_keymap_data sdp4430_keymap_data = {
130 .keymap = sdp4430_keymap,
131 .keymap_size = ARRAY_SIZE(sdp4430_keymap),
132};
133
134static struct omap4_keypad_platform_data sdp4430_keypad_data = {
135 .keymap_data = &sdp4430_keymap_data,
136 .rows = 8,
137 .cols = 8,
138};
44static struct gpio_led sdp4430_gpio_leds[] = { 139static struct gpio_led sdp4430_gpio_leds[] = {
45 { 140 {
46 .name = "omap4:green:debug0", 141 .name = "omap4:green:debug0",
@@ -77,11 +172,69 @@ static struct gpio_led sdp4430_gpio_leds[] = {
77 172
78}; 173};
79 174
175static struct gpio_keys_button sdp4430_gpio_keys[] = {
176 {
177 .desc = "Proximity Sensor",
178 .type = EV_SW,
179 .code = SW_FRONT_PROXIMITY,
180 .gpio = OMAP4_SFH7741_SENSOR_OUTPUT_GPIO,
181 .active_low = 0,
182 }
183};
184
80static struct gpio_led_platform_data sdp4430_led_data = { 185static struct gpio_led_platform_data sdp4430_led_data = {
81 .leds = sdp4430_gpio_leds, 186 .leds = sdp4430_gpio_leds,
82 .num_leds = ARRAY_SIZE(sdp4430_gpio_leds), 187 .num_leds = ARRAY_SIZE(sdp4430_gpio_leds),
83}; 188};
84 189
190static struct led_pwm sdp4430_pwm_leds[] = {
191 {
192 .name = "omap4:green:chrg",
193 .pwm_id = 1,
194 .max_brightness = 255,
195 .pwm_period_ns = 7812500,
196 },
197};
198
199static struct led_pwm_platform_data sdp4430_pwm_data = {
200 .num_leds = ARRAY_SIZE(sdp4430_pwm_leds),
201 .leds = sdp4430_pwm_leds,
202};
203
204static struct platform_device sdp4430_leds_pwm = {
205 .name = "leds_pwm",
206 .id = -1,
207 .dev = {
208 .platform_data = &sdp4430_pwm_data,
209 },
210};
211
212static int omap_prox_activate(struct device *dev)
213{
214 gpio_set_value(OMAP4_SFH7741_ENABLE_GPIO , 1);
215 return 0;
216}
217
218static void omap_prox_deactivate(struct device *dev)
219{
220 gpio_set_value(OMAP4_SFH7741_ENABLE_GPIO , 0);
221}
222
223static struct gpio_keys_platform_data sdp4430_gpio_keys_data = {
224 .buttons = sdp4430_gpio_keys,
225 .nbuttons = ARRAY_SIZE(sdp4430_gpio_keys),
226 .enable = omap_prox_activate,
227 .disable = omap_prox_deactivate,
228};
229
230static struct platform_device sdp4430_gpio_keys_device = {
231 .name = "gpio-keys",
232 .id = -1,
233 .dev = {
234 .platform_data = &sdp4430_gpio_keys_data,
235 },
236};
237
85static struct platform_device sdp4430_leds_gpio = { 238static struct platform_device sdp4430_leds_gpio = {
86 .name = "leds-gpio", 239 .name = "leds-gpio",
87 .id = -1, 240 .id = -1,
@@ -99,58 +252,22 @@ static struct spi_board_info sdp4430_spi_board_info[] __initdata = {
99 }, 252 },
100}; 253};
101 254
102static int omap_ethernet_init(void) 255static struct gpio sdp4430_eth_gpios[] __initdata = {
256 { ETH_KS8851_POWER_ON, GPIOF_OUT_INIT_HIGH, "eth_power" },
257 { ETH_KS8851_QUART, GPIOF_OUT_INIT_HIGH, "quart" },
258 { ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" },
259};
260
261static int __init omap_ethernet_init(void)
103{ 262{
104 int status; 263 int status;
105 264
106 /* Request of GPIO lines */ 265 /* Request of GPIO lines */
266 status = gpio_request_array(sdp4430_eth_gpios,
267 ARRAY_SIZE(sdp4430_eth_gpios));
268 if (status)
269 pr_err("Cannot request ETH GPIOs\n");
107 270
108 status = gpio_request(ETH_KS8851_POWER_ON, "eth_power");
109 if (status) {
110 pr_err("Cannot request GPIO %d\n", ETH_KS8851_POWER_ON);
111 return status;
112 }
113
114 status = gpio_request(ETH_KS8851_QUART, "quart");
115 if (status) {
116 pr_err("Cannot request GPIO %d\n", ETH_KS8851_QUART);
117 goto error1;
118 }
119
120 status = gpio_request(ETH_KS8851_IRQ, "eth_irq");
121 if (status) {
122 pr_err("Cannot request GPIO %d\n", ETH_KS8851_IRQ);
123 goto error2;
124 }
125
126 /* Configuration of requested GPIO lines */
127
128 status = gpio_direction_output(ETH_KS8851_POWER_ON, 1);
129 if (status) {
130 pr_err("Cannot set output GPIO %d\n", ETH_KS8851_IRQ);
131 goto error3;
132 }
133
134 status = gpio_direction_output(ETH_KS8851_QUART, 1);
135 if (status) {
136 pr_err("Cannot set output GPIO %d\n", ETH_KS8851_QUART);
137 goto error3;
138 }
139
140 status = gpio_direction_input(ETH_KS8851_IRQ);
141 if (status) {
142 pr_err("Cannot set input GPIO %d\n", ETH_KS8851_IRQ);
143 goto error3;
144 }
145
146 return 0;
147
148error3:
149 gpio_free(ETH_KS8851_IRQ);
150error2:
151 gpio_free(ETH_KS8851_QUART);
152error1:
153 gpio_free(ETH_KS8851_POWER_ON);
154 return status; 271 return status;
155} 272}
156 273
@@ -161,7 +278,9 @@ static struct platform_device sdp4430_lcd_device = {
161 278
162static struct platform_device *sdp4430_devices[] __initdata = { 279static struct platform_device *sdp4430_devices[] __initdata = {
163 &sdp4430_lcd_device, 280 &sdp4430_lcd_device,
281 &sdp4430_gpio_keys_device,
164 &sdp4430_leds_gpio, 282 &sdp4430_leds_gpio,
283 &sdp4430_leds_pwm,
165}; 284};
166 285
167static struct omap_lcd_config sdp4430_lcd_config __initdata = { 286static struct omap_lcd_config sdp4430_lcd_config __initdata = {
@@ -172,36 +291,43 @@ static struct omap_board_config_kernel sdp4430_config[] __initdata = {
172 { OMAP_TAG_LCD, &sdp4430_lcd_config }, 291 { OMAP_TAG_LCD, &sdp4430_lcd_config },
173}; 292};
174 293
175static void __init omap_4430sdp_init_irq(void) 294static void __init omap_4430sdp_init_early(void)
176{ 295{
177 omap_board_config = sdp4430_config; 296 omap2_init_common_infrastructure();
178 omap_board_config_size = ARRAY_SIZE(sdp4430_config); 297 omap2_init_common_devices(NULL, NULL);
179 omap2_init_common_hw(NULL, NULL);
180#ifdef CONFIG_OMAP_32K_TIMER 298#ifdef CONFIG_OMAP_32K_TIMER
181 omap2_gp_clockevent_set_gptimer(1); 299 omap2_gp_clockevent_set_gptimer(1);
182#endif 300#endif
183 gic_init_irq();
184 omap_gpio_init();
185} 301}
186 302
187static struct omap_musb_board_data musb_board_data = { 303static struct omap_musb_board_data musb_board_data = {
188 .interface_type = MUSB_INTERFACE_UTMI, 304 .interface_type = MUSB_INTERFACE_UTMI,
189 .mode = MUSB_PERIPHERAL, 305 .mode = MUSB_OTG,
190 .power = 100, 306 .power = 100,
191}; 307};
192 308
309static struct twl4030_usb_data omap4_usbphy_data = {
310 .phy_init = omap4430_phy_init,
311 .phy_exit = omap4430_phy_exit,
312 .phy_power = omap4430_phy_power,
313 .phy_set_clock = omap4430_phy_set_clk,
314 .phy_suspend = omap4430_phy_suspend,
315};
316
193static struct omap2_hsmmc_info mmc[] = { 317static struct omap2_hsmmc_info mmc[] = {
194 { 318 {
195 .mmc = 1,
196 .wires = 8,
197 .gpio_wp = -EINVAL,
198 },
199 {
200 .mmc = 2, 319 .mmc = 2,
201 .wires = 8, 320 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
202 .gpio_cd = -EINVAL, 321 .gpio_cd = -EINVAL,
203 .gpio_wp = -EINVAL, 322 .gpio_wp = -EINVAL,
204 .nonremovable = true, 323 .nonremovable = true,
324 .ocr_mask = MMC_VDD_29_30,
325 .no_off_init = true,
326 },
327 {
328 .mmc = 1,
329 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
330 .gpio_wp = -EINVAL,
205 }, 331 },
206 {} /* Terminator */ 332 {} /* Terminator */
207}; 333};
@@ -209,13 +335,13 @@ static struct omap2_hsmmc_info mmc[] = {
209static struct regulator_consumer_supply sdp4430_vaux_supply[] = { 335static struct regulator_consumer_supply sdp4430_vaux_supply[] = {
210 { 336 {
211 .supply = "vmmc", 337 .supply = "vmmc",
212 .dev_name = "mmci-omap-hs.1", 338 .dev_name = "omap_hsmmc.1",
213 }, 339 },
214}; 340};
215static struct regulator_consumer_supply sdp4430_vmmc_supply[] = { 341static struct regulator_consumer_supply sdp4430_vmmc_supply[] = {
216 { 342 {
217 .supply = "vmmc", 343 .supply = "vmmc",
218 .dev_name = "mmci-omap-hs.0", 344 .dev_name = "omap_hsmmc.0",
219 }, 345 },
220}; 346};
221 347
@@ -227,16 +353,27 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
227 struct omap_mmc_platform_data *pdata = dev->platform_data; 353 struct omap_mmc_platform_data *pdata = dev->platform_data;
228 354
229 /* Setting MMC1 Card detect Irq */ 355 /* Setting MMC1 Card detect Irq */
230 if (pdev->id == 0) 356 if (pdev->id == 0) {
357 ret = twl6030_mmc_card_detect_config();
358 if (ret)
359 pr_err("Failed configuring MMC1 card detect\n");
231 pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE + 360 pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE +
232 MMCDETECT_INTR_OFFSET; 361 MMCDETECT_INTR_OFFSET;
362 pdata->slots[0].card_detect = twl6030_mmc_card_detect;
363 }
233 return ret; 364 return ret;
234} 365}
235 366
236static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev) 367static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev)
237{ 368{
238 struct omap_mmc_platform_data *pdata = dev->platform_data; 369 struct omap_mmc_platform_data *pdata;
239 370
371 /* dev can be null if CONFIG_MMC_OMAP_HS is not set */
372 if (!dev) {
373 pr_err("Failed %s\n", __func__);
374 return;
375 }
376 pdata = dev->platform_data;
240 pdata->init = omap4_twl6030_hsmmc_late_init; 377 pdata->init = omap4_twl6030_hsmmc_late_init;
241} 378}
242 379
@@ -338,7 +475,6 @@ static struct regulator_init_data sdp4430_vana = {
338 .constraints = { 475 .constraints = {
339 .min_uV = 2100000, 476 .min_uV = 2100000,
340 .max_uV = 2100000, 477 .max_uV = 2100000,
341 .apply_uV = true,
342 .valid_modes_mask = REGULATOR_MODE_NORMAL 478 .valid_modes_mask = REGULATOR_MODE_NORMAL
343 | REGULATOR_MODE_STANDBY, 479 | REGULATOR_MODE_STANDBY,
344 .valid_ops_mask = REGULATOR_CHANGE_MODE 480 .valid_ops_mask = REGULATOR_CHANGE_MODE
@@ -350,7 +486,6 @@ static struct regulator_init_data sdp4430_vcxio = {
350 .constraints = { 486 .constraints = {
351 .min_uV = 1800000, 487 .min_uV = 1800000,
352 .max_uV = 1800000, 488 .max_uV = 1800000,
353 .apply_uV = true,
354 .valid_modes_mask = REGULATOR_MODE_NORMAL 489 .valid_modes_mask = REGULATOR_MODE_NORMAL
355 | REGULATOR_MODE_STANDBY, 490 | REGULATOR_MODE_STANDBY,
356 .valid_ops_mask = REGULATOR_CHANGE_MODE 491 .valid_ops_mask = REGULATOR_CHANGE_MODE
@@ -362,7 +497,6 @@ static struct regulator_init_data sdp4430_vdac = {
362 .constraints = { 497 .constraints = {
363 .min_uV = 1800000, 498 .min_uV = 1800000,
364 .max_uV = 1800000, 499 .max_uV = 1800000,
365 .apply_uV = true,
366 .valid_modes_mask = REGULATOR_MODE_NORMAL 500 .valid_modes_mask = REGULATOR_MODE_NORMAL
367 | REGULATOR_MODE_STANDBY, 501 | REGULATOR_MODE_STANDBY,
368 .valid_ops_mask = REGULATOR_CHANGE_MODE 502 .valid_ops_mask = REGULATOR_CHANGE_MODE
@@ -382,6 +516,12 @@ static struct regulator_init_data sdp4430_vusb = {
382 }, 516 },
383}; 517};
384 518
519static struct regulator_init_data sdp4430_clk32kg = {
520 .constraints = {
521 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
522 },
523};
524
385static struct twl4030_platform_data sdp4430_twldata = { 525static struct twl4030_platform_data sdp4430_twldata = {
386 .irq_base = TWL6030_IRQ_BASE, 526 .irq_base = TWL6030_IRQ_BASE,
387 .irq_end = TWL6030_IRQ_END, 527 .irq_end = TWL6030_IRQ_END,
@@ -397,48 +537,211 @@ static struct twl4030_platform_data sdp4430_twldata = {
397 .vaux1 = &sdp4430_vaux1, 537 .vaux1 = &sdp4430_vaux1,
398 .vaux2 = &sdp4430_vaux2, 538 .vaux2 = &sdp4430_vaux2,
399 .vaux3 = &sdp4430_vaux3, 539 .vaux3 = &sdp4430_vaux3,
540 .clk32kg = &sdp4430_clk32kg,
541 .usb = &omap4_usbphy_data
400}; 542};
401 543
402static struct i2c_board_info __initdata sdp4430_i2c_boardinfo[] = { 544static struct i2c_board_info __initdata sdp4430_i2c_3_boardinfo[] = {
545 {
546 I2C_BOARD_INFO("tmp105", 0x48),
547 },
403 { 548 {
404 I2C_BOARD_INFO("twl6030", 0x48), 549 I2C_BOARD_INFO("bh1780", 0x29),
405 .flags = I2C_CLIENT_WAKE,
406 .irq = OMAP44XX_IRQ_SYS_1N,
407 .platform_data = &sdp4430_twldata,
408 }, 550 },
409}; 551};
410static struct i2c_board_info __initdata sdp4430_i2c_3_boardinfo[] = { 552static struct i2c_board_info __initdata sdp4430_i2c_4_boardinfo[] = {
411 { 553 {
412 I2C_BOARD_INFO("tmp105", 0x48), 554 I2C_BOARD_INFO("hmc5843", 0x1e),
413 }, 555 },
414}; 556};
415static int __init omap4_i2c_init(void) 557static int __init omap4_i2c_init(void)
416{ 558{
417 /* 559 omap4_pmic_init("twl6030", &sdp4430_twldata);
418 * Phoenix Audio IC needs I2C1 to
419 * start with 400 KHz or less
420 */
421 omap_register_i2c_bus(1, 400, sdp4430_i2c_boardinfo,
422 ARRAY_SIZE(sdp4430_i2c_boardinfo));
423 omap_register_i2c_bus(2, 400, NULL, 0); 560 omap_register_i2c_bus(2, 400, NULL, 0);
424 omap_register_i2c_bus(3, 400, sdp4430_i2c_3_boardinfo, 561 omap_register_i2c_bus(3, 400, sdp4430_i2c_3_boardinfo,
425 ARRAY_SIZE(sdp4430_i2c_3_boardinfo)); 562 ARRAY_SIZE(sdp4430_i2c_3_boardinfo));
426 omap_register_i2c_bus(4, 400, NULL, 0); 563 omap_register_i2c_bus(4, 400, sdp4430_i2c_4_boardinfo,
564 ARRAY_SIZE(sdp4430_i2c_4_boardinfo));
427 return 0; 565 return 0;
428} 566}
567
568static void __init omap_sfh7741prox_init(void)
569{
570 int error;
571
572 error = gpio_request_one(OMAP4_SFH7741_ENABLE_GPIO,
573 GPIOF_OUT_INIT_LOW, "sfh7741");
574 if (error < 0)
575 pr_err("%s:failed to request GPIO %d, error %d\n",
576 __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
577}
578
579static void sdp4430_hdmi_mux_init(void)
580{
581 /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
582 omap_mux_init_signal("hdmi_hpd",
583 OMAP_PIN_INPUT_PULLUP);
584 omap_mux_init_signal("hdmi_cec",
585 OMAP_PIN_INPUT_PULLUP);
586 /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
587 omap_mux_init_signal("hdmi_ddc_scl",
588 OMAP_PIN_INPUT_PULLUP);
589 omap_mux_init_signal("hdmi_ddc_sda",
590 OMAP_PIN_INPUT_PULLUP);
591}
592
593static struct gpio sdp4430_hdmi_gpios[] = {
594 { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
595 { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
596};
597
598static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)
599{
600 int status;
601
602 status = gpio_request_array(sdp4430_hdmi_gpios,
603 ARRAY_SIZE(sdp4430_hdmi_gpios));
604 if (status)
605 pr_err("%s: Cannot request HDMI GPIOs\n", __func__);
606
607 return status;
608}
609
610static void sdp4430_panel_disable_hdmi(struct omap_dss_device *dssdev)
611{
612 gpio_free(HDMI_GPIO_LS_OE);
613 gpio_free(HDMI_GPIO_HPD);
614}
615
616static struct omap_dss_device sdp4430_hdmi_device = {
617 .name = "hdmi",
618 .driver_name = "hdmi_panel",
619 .type = OMAP_DISPLAY_TYPE_HDMI,
620 .clocks = {
621 .dispc = {
622 .dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK,
623 },
624 .hdmi = {
625 .regn = 15,
626 .regm2 = 1,
627 },
628 },
629 .platform_enable = sdp4430_panel_enable_hdmi,
630 .platform_disable = sdp4430_panel_disable_hdmi,
631 .channel = OMAP_DSS_CHANNEL_DIGIT,
632};
633
634static struct omap_dss_device *sdp4430_dss_devices[] = {
635 &sdp4430_hdmi_device,
636};
637
638static struct omap_dss_board_info sdp4430_dss_data = {
639 .num_devices = ARRAY_SIZE(sdp4430_dss_devices),
640 .devices = sdp4430_dss_devices,
641 .default_device = &sdp4430_hdmi_device,
642};
643
644void omap_4430sdp_display_init(void)
645{
646 sdp4430_hdmi_mux_init();
647 omap_display_init(&sdp4430_dss_data);
648}
649
650#ifdef CONFIG_OMAP_MUX
651static struct omap_board_mux board_mux[] __initdata = {
652 OMAP4_MUX(USBB2_ULPITLL_CLK, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
653 { .reg_offset = OMAP_MUX_TERMINATOR },
654};
655
656static struct omap_device_pad serial2_pads[] __initdata = {
657 OMAP_MUX_STATIC("uart2_cts.uart2_cts",
658 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
659 OMAP_MUX_STATIC("uart2_rts.uart2_rts",
660 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
661 OMAP_MUX_STATIC("uart2_rx.uart2_rx",
662 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
663 OMAP_MUX_STATIC("uart2_tx.uart2_tx",
664 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
665};
666
667static struct omap_device_pad serial3_pads[] __initdata = {
668 OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
669 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
670 OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
671 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
672 OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
673 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
674 OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
675 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
676};
677
678static struct omap_device_pad serial4_pads[] __initdata = {
679 OMAP_MUX_STATIC("uart4_rx.uart4_rx",
680 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
681 OMAP_MUX_STATIC("uart4_tx.uart4_tx",
682 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
683};
684
685static struct omap_board_data serial2_data __initdata = {
686 .id = 1,
687 .pads = serial2_pads,
688 .pads_cnt = ARRAY_SIZE(serial2_pads),
689};
690
691static struct omap_board_data serial3_data __initdata = {
692 .id = 2,
693 .pads = serial3_pads,
694 .pads_cnt = ARRAY_SIZE(serial3_pads),
695};
696
697static struct omap_board_data serial4_data __initdata = {
698 .id = 3,
699 .pads = serial4_pads,
700 .pads_cnt = ARRAY_SIZE(serial4_pads),
701};
702
703static inline void board_serial_init(void)
704{
705 struct omap_board_data bdata;
706 bdata.flags = 0;
707 bdata.pads = NULL;
708 bdata.pads_cnt = 0;
709 bdata.id = 0;
710 /* pass dummy data for UART1 */
711 omap_serial_init_port(&bdata);
712
713 omap_serial_init_port(&serial2_data);
714 omap_serial_init_port(&serial3_data);
715 omap_serial_init_port(&serial4_data);
716}
717#else
718#define board_mux NULL
719
720static inline void board_serial_init(void)
721{
722 omap_serial_init();
723}
724 #endif
725
429static void __init omap_4430sdp_init(void) 726static void __init omap_4430sdp_init(void)
430{ 727{
431 int status; 728 int status;
729 int package = OMAP_PACKAGE_CBS;
730
731 if (omap_rev() == OMAP4430_REV_ES1_0)
732 package = OMAP_PACKAGE_CBL;
733 omap4_mux_init(board_mux, NULL, package);
734
735 omap_board_config = sdp4430_config;
736 omap_board_config_size = ARRAY_SIZE(sdp4430_config);
432 737
433 omap4_i2c_init(); 738 omap4_i2c_init();
739 omap_sfh7741prox_init();
434 platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices)); 740 platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
435 omap_serial_init(); 741 board_serial_init();
436 omap4_twl6030_hsmmc_init(mmc); 742 omap4_twl6030_hsmmc_init(mmc);
437 /* OMAP4 SDP uses internal transceiver so register nop transceiver */ 743
438 usb_nop_xceiv_register(); 744 usb_musb_init(&musb_board_data);
439 /* FIXME: allow multi-omap to boot until musb is updated for omap4 */
440 if (!cpu_is_omap44xx())
441 usb_musb_init(&musb_board_data);
442 745
443 status = omap_ethernet_init(); 746 status = omap_ethernet_init();
444 if (status) { 747 if (status) {
@@ -448,6 +751,12 @@ static void __init omap_4430sdp_init(void)
448 spi_register_board_info(sdp4430_spi_board_info, 751 spi_register_board_info(sdp4430_spi_board_info,
449 ARRAY_SIZE(sdp4430_spi_board_info)); 752 ARRAY_SIZE(sdp4430_spi_board_info));
450 } 753 }
754
755 status = omap4_keyboard_init(&sdp4430_keypad_data);
756 if (status)
757 pr_err("Keypad initialization failed: %d\n", status);
758
759 omap_4430sdp_display_init();
451} 760}
452 761
453static void __init omap_4430sdp_map_io(void) 762static void __init omap_4430sdp_map_io(void)
@@ -458,12 +767,11 @@ static void __init omap_4430sdp_map_io(void)
458 767
459MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board") 768MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")
460 /* Maintainer: Santosh Shilimkar - Texas Instruments Inc */ 769 /* Maintainer: Santosh Shilimkar - Texas Instruments Inc */
461 .phys_io = 0x48000000,
462 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
463 .boot_params = 0x80000100, 770 .boot_params = 0x80000100,
464 .map_io = omap_4430sdp_map_io,
465 .reserve = omap_reserve, 771 .reserve = omap_reserve,
466 .init_irq = omap_4430sdp_init_irq, 772 .map_io = omap_4430sdp_map_io,
773 .init_early = omap_4430sdp_init_early,
774 .init_irq = gic_init_irq,
467 .init_machine = omap_4430sdp_init, 775 .init_machine = omap_4430sdp_init,
468 .timer = &omap_timer, 776 .timer = &omap_timer,
469MACHINE_END 777MACHINE_END
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c
new file mode 100644
index 000000000000..5e438a77cd72
--- /dev/null
+++ b/arch/arm/mach-omap2/board-am3517crane.c
@@ -0,0 +1,110 @@
1/*
2 * Support for AM3517/05 Craneboard
3 * http://www.mistralsolutions.com/products/craneboard.php
4 *
5 * Copyright (C) 2010 Mistral Solutions Pvt Ltd. <www.mistralsolutions.com>
6 * Author: R.Srinath <srinath@mistralsolutions.com>
7 *
8 * Based on mach-omap2/board-am3517evm.c
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation version 2.
13 *
14 * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind,
15 * whether express or implied; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 */
19
20#include <linux/kernel.h>
21#include <linux/init.h>
22#include <linux/gpio.h>
23
24#include <mach/hardware.h>
25#include <asm/mach-types.h>
26#include <asm/mach/arch.h>
27#include <asm/mach/map.h>
28
29#include <plat/board.h>
30#include <plat/common.h>
31#include <plat/usb.h>
32
33#include "mux.h"
34#include "control.h"
35
36#define GPIO_USB_POWER 35
37#define GPIO_USB_NRESET 38
38
39
40/* Board initialization */
41static struct omap_board_config_kernel am3517_crane_config[] __initdata = {
42};
43
44#ifdef CONFIG_OMAP_MUX
45static struct omap_board_mux board_mux[] __initdata = {
46 { .reg_offset = OMAP_MUX_TERMINATOR },
47};
48#else
49#define board_mux NULL
50#endif
51
52static void __init am3517_crane_init_early(void)
53{
54 omap2_init_common_infrastructure();
55 omap2_init_common_devices(NULL, NULL);
56}
57
58static struct usbhs_omap_board_data usbhs_bdata __initdata = {
59 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
60 .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
61 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
62
63 .phy_reset = true,
64 .reset_gpio_port[0] = GPIO_USB_NRESET,
65 .reset_gpio_port[1] = -EINVAL,
66 .reset_gpio_port[2] = -EINVAL
67};
68
69static void __init am3517_crane_init(void)
70{
71 int ret;
72
73 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
74 omap_serial_init();
75
76 omap_board_config = am3517_crane_config;
77 omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
78
79 /* Configure GPIO for EHCI port */
80 if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) {
81 pr_err("Can not configure mux for GPIO_USB_NRESET %d\n",
82 GPIO_USB_NRESET);
83 return;
84 }
85
86 if (omap_mux_init_gpio(GPIO_USB_POWER, OMAP_PIN_OUTPUT)) {
87 pr_err("Can not configure mux for GPIO_USB_POWER %d\n",
88 GPIO_USB_POWER);
89 return;
90 }
91
92 ret = gpio_request_one(GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH,
93 "usb_ehci_enable");
94 if (ret < 0) {
95 pr_err("Can not request GPIO %d\n", GPIO_USB_POWER);
96 return;
97 }
98
99 usbhs_init(&usbhs_bdata);
100}
101
102MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
103 .boot_params = 0x80000100,
104 .reserve = omap_reserve,
105 .map_io = omap3_map_io,
106 .init_early = am3517_crane_init_early,
107 .init_irq = omap_init_irq,
108 .init_machine = am3517_crane_init,
109 .timer = &omap_timer,
110MACHINE_END
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index 4d0f58592864..63af4171c043 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -18,6 +18,7 @@
18 18
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/clk.h>
21#include <linux/platform_device.h> 22#include <linux/platform_device.h>
22#include <linux/gpio.h> 23#include <linux/gpio.h>
23#include <linux/i2c/pca953x.h> 24#include <linux/i2c/pca953x.h>
@@ -32,25 +33,44 @@
32 33
33#include <plat/board.h> 34#include <plat/board.h>
34#include <plat/common.h> 35#include <plat/common.h>
35#include <plat/control.h>
36#include <plat/usb.h> 36#include <plat/usb.h>
37#include <plat/display.h> 37#include <video/omapdss.h>
38#include <video/omap-panel-generic-dpi.h>
38 39
39#include "mux.h" 40#include "mux.h"
41#include "control.h"
40 42
41#define AM35XX_EVM_PHY_MASK (0xF)
42#define AM35XX_EVM_MDIO_FREQUENCY (1000000) 43#define AM35XX_EVM_MDIO_FREQUENCY (1000000)
43 44
45static struct mdio_platform_data am3517_evm_mdio_pdata = {
46 .bus_freq = AM35XX_EVM_MDIO_FREQUENCY,
47};
48
49static struct resource am3517_mdio_resources[] = {
50 {
51 .start = AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET,
52 .end = AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET +
53 SZ_4K - 1,
54 .flags = IORESOURCE_MEM,
55 },
56};
57
58static struct platform_device am3517_mdio_device = {
59 .name = "davinci_mdio",
60 .id = 0,
61 .num_resources = ARRAY_SIZE(am3517_mdio_resources),
62 .resource = am3517_mdio_resources,
63 .dev.platform_data = &am3517_evm_mdio_pdata,
64};
65
44static struct emac_platform_data am3517_evm_emac_pdata = { 66static struct emac_platform_data am3517_evm_emac_pdata = {
45 .phy_mask = AM35XX_EVM_PHY_MASK,
46 .mdio_max_freq = AM35XX_EVM_MDIO_FREQUENCY,
47 .rmii_en = 1, 67 .rmii_en = 1,
48}; 68};
49 69
50static struct resource am3517_emac_resources[] = { 70static struct resource am3517_emac_resources[] = {
51 { 71 {
52 .start = AM35XX_IPSS_EMAC_BASE, 72 .start = AM35XX_IPSS_EMAC_BASE,
53 .end = AM35XX_IPSS_EMAC_BASE + 0x3FFFF, 73 .end = AM35XX_IPSS_EMAC_BASE + 0x2FFFF,
54 .flags = IORESOURCE_MEM, 74 .flags = IORESOURCE_MEM,
55 }, 75 },
56 { 76 {
@@ -106,14 +126,13 @@ static void am3517_disable_ethernet_int(void)
106 regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); 126 regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
107} 127}
108 128
109void am3517_evm_ethernet_init(struct emac_platform_data *pdata) 129static void am3517_evm_ethernet_init(struct emac_platform_data *pdata)
110{ 130{
111 unsigned int regval; 131 unsigned int regval;
112 132
113 pdata->ctrl_reg_offset = AM35XX_EMAC_CNTRL_OFFSET; 133 pdata->ctrl_reg_offset = AM35XX_EMAC_CNTRL_OFFSET;
114 pdata->ctrl_mod_reg_offset = AM35XX_EMAC_CNTRL_MOD_OFFSET; 134 pdata->ctrl_mod_reg_offset = AM35XX_EMAC_CNTRL_MOD_OFFSET;
115 pdata->ctrl_ram_offset = AM35XX_EMAC_CNTRL_RAM_OFFSET; 135 pdata->ctrl_ram_offset = AM35XX_EMAC_CNTRL_RAM_OFFSET;
116 pdata->mdio_reg_offset = AM35XX_EMAC_MDIO_OFFSET;
117 pdata->ctrl_ram_size = AM35XX_EMAC_CNTRL_RAM_SIZE; 136 pdata->ctrl_ram_size = AM35XX_EMAC_CNTRL_RAM_SIZE;
118 pdata->version = EMAC_VERSION_2; 137 pdata->version = EMAC_VERSION_2;
119 pdata->hw_ram_addr = AM35XX_EMAC_HW_RAM_ADDR; 138 pdata->hw_ram_addr = AM35XX_EMAC_HW_RAM_ADDR;
@@ -121,6 +140,9 @@ void am3517_evm_ethernet_init(struct emac_platform_data *pdata)
121 pdata->interrupt_disable = am3517_disable_ethernet_int; 140 pdata->interrupt_disable = am3517_disable_ethernet_int;
122 am3517_emac_device.dev.platform_data = pdata; 141 am3517_emac_device.dev.platform_data = pdata;
123 platform_device_register(&am3517_emac_device); 142 platform_device_register(&am3517_emac_device);
143 platform_device_register(&am3517_mdio_device);
144 clk_add_alias(NULL, dev_name(&am3517_mdio_device.dev),
145 NULL, &am3517_emac_device.dev);
124 146
125 regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); 147 regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
126 regval = regval & (~(AM35XX_CPGMACSS_SW_RST)); 148 regval = regval & (~(AM35XX_CPGMACSS_SW_RST));
@@ -139,7 +161,6 @@ void am3517_evm_ethernet_init(struct emac_platform_data *pdata)
139static struct i2c_board_info __initdata am3517evm_i2c1_boardinfo[] = { 161static struct i2c_board_info __initdata am3517evm_i2c1_boardinfo[] = {
140 { 162 {
141 I2C_BOARD_INFO("s35390a", 0x30), 163 I2C_BOARD_INFO("s35390a", 0x30),
142 .type = "s35390a",
143 }, 164 },
144}; 165};
145 166
@@ -153,19 +174,14 @@ static void __init am3517_evm_rtc_init(void)
153 int r; 174 int r;
154 175
155 omap_mux_init_gpio(GPIO_RTCS35390A_IRQ, OMAP_PIN_INPUT_PULLUP); 176 omap_mux_init_gpio(GPIO_RTCS35390A_IRQ, OMAP_PIN_INPUT_PULLUP);
156 r = gpio_request(GPIO_RTCS35390A_IRQ, "rtcs35390a-irq"); 177
178 r = gpio_request_one(GPIO_RTCS35390A_IRQ, GPIOF_IN, "rtcs35390a-irq");
157 if (r < 0) { 179 if (r < 0) {
158 printk(KERN_WARNING "failed to request GPIO#%d\n", 180 printk(KERN_WARNING "failed to request GPIO#%d\n",
159 GPIO_RTCS35390A_IRQ); 181 GPIO_RTCS35390A_IRQ);
160 return; 182 return;
161 } 183 }
162 r = gpio_direction_input(GPIO_RTCS35390A_IRQ); 184
163 if (r < 0) {
164 printk(KERN_WARNING "GPIO#%d cannot be configured as input\n",
165 GPIO_RTCS35390A_IRQ);
166 gpio_free(GPIO_RTCS35390A_IRQ);
167 return;
168 }
169 am3517evm_i2c1_boardinfo[0].irq = gpio_to_irq(GPIO_RTCS35390A_IRQ); 185 am3517evm_i2c1_boardinfo[0].irq = gpio_to_irq(GPIO_RTCS35390A_IRQ);
170} 186}
171 187
@@ -179,6 +195,9 @@ static struct pca953x_platform_data am3517evm_gpio_expander_info_0 = {
179}; 195};
180static struct i2c_board_info __initdata am3517evm_i2c2_boardinfo[] = { 196static struct i2c_board_info __initdata am3517evm_i2c2_boardinfo[] = {
181 { 197 {
198 I2C_BOARD_INFO("tlv320aic23", 0x1A),
199 },
200 {
182 I2C_BOARD_INFO("tca6416", 0x21), 201 I2C_BOARD_INFO("tca6416", 0x21),
183 .platform_data = &am3517evm_gpio_expander_info_0, 202 .platform_data = &am3517evm_gpio_expander_info_0,
184 }, 203 },
@@ -218,6 +237,15 @@ static int dvi_enabled;
218 237
219#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ 238#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
220 defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE) 239 defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
240static struct gpio am3517_evm_dss_gpios[] __initdata = {
241 /* GPIO 182 = LCD Backlight Power */
242 { LCD_PANEL_BKLIGHT_PWR, GPIOF_OUT_INIT_HIGH, "lcd_backlight_pwr" },
243 /* GPIO 181 = LCD Panel PWM */
244 { LCD_PANEL_PWM, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
245 /* GPIO 176 = LCD Panel Power enable pin */
246 { LCD_PANEL_PWR, GPIOF_OUT_INIT_HIGH, "dvi enable" },
247};
248
221static void __init am3517_evm_display_init(void) 249static void __init am3517_evm_display_init(void)
222{ 250{
223 int r; 251 int r;
@@ -225,41 +253,15 @@ static void __init am3517_evm_display_init(void)
225 omap_mux_init_gpio(LCD_PANEL_PWR, OMAP_PIN_INPUT_PULLUP); 253 omap_mux_init_gpio(LCD_PANEL_PWR, OMAP_PIN_INPUT_PULLUP);
226 omap_mux_init_gpio(LCD_PANEL_BKLIGHT_PWR, OMAP_PIN_INPUT_PULLDOWN); 254 omap_mux_init_gpio(LCD_PANEL_BKLIGHT_PWR, OMAP_PIN_INPUT_PULLDOWN);
227 omap_mux_init_gpio(LCD_PANEL_PWM, OMAP_PIN_INPUT_PULLDOWN); 255 omap_mux_init_gpio(LCD_PANEL_PWM, OMAP_PIN_INPUT_PULLDOWN);
228 /* 256
229 * Enable GPIO 182 = LCD Backlight Power 257 r = gpio_request_array(am3517_evm_dss_gpios,
230 */ 258 ARRAY_SIZE(am3517_evm_dss_gpios));
231 r = gpio_request(LCD_PANEL_BKLIGHT_PWR, "lcd_backlight_pwr");
232 if (r) { 259 if (r) {
233 printk(KERN_ERR "failed to get lcd_backlight_pwr\n"); 260 printk(KERN_ERR "failed to get DSS panel control GPIOs\n");
234 return; 261 return;
235 } 262 }
236 gpio_direction_output(LCD_PANEL_BKLIGHT_PWR, 1);
237 /*
238 * Enable GPIO 181 = LCD Panel PWM
239 */
240 r = gpio_request(LCD_PANEL_PWM, "lcd_pwm");
241 if (r) {
242 printk(KERN_ERR "failed to get lcd_pwm\n");
243 goto err_1;
244 }
245 gpio_direction_output(LCD_PANEL_PWM, 1);
246 /*
247 * Enable GPIO 176 = LCD Panel Power enable pin
248 */
249 r = gpio_request(LCD_PANEL_PWR, "lcd_panel_pwr");
250 if (r) {
251 printk(KERN_ERR "failed to get lcd_panel_pwr\n");
252 goto err_2;
253 }
254 gpio_direction_output(LCD_PANEL_PWR, 1);
255 263
256 printk(KERN_INFO "Display initialized successfully\n"); 264 printk(KERN_INFO "Display initialized successfully\n");
257 return;
258
259err_2:
260 gpio_free(LCD_PANEL_PWM);
261err_1:
262 gpio_free(LCD_PANEL_BKLIGHT_PWR);
263} 265}
264#else 266#else
265static void __init am3517_evm_display_init(void) {} 267static void __init am3517_evm_display_init(void) {}
@@ -283,13 +285,18 @@ static void am3517_evm_panel_disable_lcd(struct omap_dss_device *dssdev)
283 lcd_enabled = 0; 285 lcd_enabled = 0;
284} 286}
285 287
288static struct panel_generic_dpi_data lcd_panel = {
289 .name = "sharp_lq",
290 .platform_enable = am3517_evm_panel_enable_lcd,
291 .platform_disable = am3517_evm_panel_disable_lcd,
292};
293
286static struct omap_dss_device am3517_evm_lcd_device = { 294static struct omap_dss_device am3517_evm_lcd_device = {
287 .type = OMAP_DISPLAY_TYPE_DPI, 295 .type = OMAP_DISPLAY_TYPE_DPI,
288 .name = "lcd", 296 .name = "lcd",
289 .driver_name = "sharp_lq_panel", 297 .driver_name = "generic_dpi_panel",
298 .data = &lcd_panel,
290 .phy.dpi.data_lines = 16, 299 .phy.dpi.data_lines = 16,
291 .platform_enable = am3517_evm_panel_enable_lcd,
292 .platform_disable = am3517_evm_panel_disable_lcd,
293}; 300};
294 301
295static int am3517_evm_panel_enable_tv(struct omap_dss_device *dssdev) 302static int am3517_evm_panel_enable_tv(struct omap_dss_device *dssdev)
@@ -326,13 +333,18 @@ static void am3517_evm_panel_disable_dvi(struct omap_dss_device *dssdev)
326 dvi_enabled = 0; 333 dvi_enabled = 0;
327} 334}
328 335
336static struct panel_generic_dpi_data dvi_panel = {
337 .name = "generic",
338 .platform_enable = am3517_evm_panel_enable_dvi,
339 .platform_disable = am3517_evm_panel_disable_dvi,
340};
341
329static struct omap_dss_device am3517_evm_dvi_device = { 342static struct omap_dss_device am3517_evm_dvi_device = {
330 .type = OMAP_DISPLAY_TYPE_DPI, 343 .type = OMAP_DISPLAY_TYPE_DPI,
331 .name = "dvi", 344 .name = "dvi",
332 .driver_name = "generic_panel", 345 .driver_name = "generic_dpi_panel",
346 .data = &dvi_panel,
333 .phy.dpi.data_lines = 24, 347 .phy.dpi.data_lines = 24,
334 .platform_enable = am3517_evm_panel_enable_dvi,
335 .platform_disable = am3517_evm_panel_disable_dvi,
336}; 348};
337 349
338static struct omap_dss_device *am3517_evm_dss_devices[] = { 350static struct omap_dss_device *am3517_evm_dss_devices[] = {
@@ -347,43 +359,53 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
347 .default_device = &am3517_evm_lcd_device, 359 .default_device = &am3517_evm_lcd_device,
348}; 360};
349 361
350struct platform_device am3517_evm_dss_device = {
351 .name = "omapdss",
352 .id = -1,
353 .dev = {
354 .platform_data = &am3517_evm_dss_data,
355 },
356};
357
358/* 362/*
359 * Board initialization 363 * Board initialization
360 */ 364 */
361static struct omap_board_config_kernel am3517_evm_config[] __initdata = { 365static void __init am3517_evm_init_early(void)
362}; 366{
367 omap2_init_common_infrastructure();
368 omap2_init_common_devices(NULL, NULL);
369}
363 370
364static struct platform_device *am3517_evm_devices[] __initdata = { 371static struct omap_musb_board_data musb_board_data = {
365 &am3517_evm_dss_device, 372 .interface_type = MUSB_INTERFACE_ULPI,
373 .mode = MUSB_OTG,
374 .power = 500,
375 .set_phy_power = am35x_musb_phy_power,
376 .clear_irq = am35x_musb_clear_irq,
377 .set_mode = am35x_set_mode,
378 .reset = am35x_musb_reset,
366}; 379};
367 380
368static void __init am3517_evm_init_irq(void) 381static __init void am3517_evm_musb_init(void)
369{ 382{
370 omap_board_config = am3517_evm_config; 383 u32 devconf2;
371 omap_board_config_size = ARRAY_SIZE(am3517_evm_config); 384
385 /*
386 * Set up USB clock/mode in the DEVCONF2 register.
387 */
388 devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
372 389
373 omap2_init_common_hw(NULL, NULL); 390 /* USB2.0 PHY reference clock is 13 MHz */
374 omap_init_irq(); 391 devconf2 &= ~(CONF2_REFFREQ | CONF2_OTGMODE | CONF2_PHY_GPIOMODE);
375 omap_gpio_init(); 392 devconf2 |= CONF2_REFFREQ_13MHZ | CONF2_SESENDEN | CONF2_VBDTCTEN
393 | CONF2_DATPOL;
394
395 omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
396
397 usb_musb_init(&musb_board_data);
376} 398}
377 399
378static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 400static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
379 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 401 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
380#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ 402#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \
381 defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE) 403 defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE)
382 .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN, 404 .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
383#else 405#else
384 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 406 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
385#endif 407#endif
386 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 408 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
387 409
388 .phy_reset = true, 410 .phy_reset = true,
389 .reset_gpio_port[0] = 57, 411 .reset_gpio_port[0] = 57,
@@ -393,10 +415,10 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
393 415
394#ifdef CONFIG_OMAP_MUX 416#ifdef CONFIG_OMAP_MUX
395static struct omap_board_mux board_mux[] __initdata = { 417static struct omap_board_mux board_mux[] __initdata = {
418 /* USB OTG DRVVBUS offset = 0x212 */
419 OMAP3_MUX(SAD2D_MCAD23, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
396 { .reg_offset = OMAP_MUX_TERMINATOR }, 420 { .reg_offset = OMAP_MUX_TERMINATOR },
397}; 421};
398#else
399#define board_mux NULL
400#endif 422#endif
401 423
402 424
@@ -435,19 +457,22 @@ static void am3517_evm_hecc_init(struct ti_hecc_platform_data *pdata)
435 platform_device_register(&am3517_hecc_device); 457 platform_device_register(&am3517_hecc_device);
436} 458}
437 459
460static struct omap_board_config_kernel am3517_evm_config[] __initdata = {
461};
462
438static void __init am3517_evm_init(void) 463static void __init am3517_evm_init(void)
439{ 464{
465 omap_board_config = am3517_evm_config;
466 omap_board_config_size = ARRAY_SIZE(am3517_evm_config);
440 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 467 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
441 468
442 am3517_evm_i2c_init(); 469 am3517_evm_i2c_init();
443 platform_add_devices(am3517_evm_devices, 470 omap_display_init(&am3517_evm_dss_data);
444 ARRAY_SIZE(am3517_evm_devices));
445
446 omap_serial_init(); 471 omap_serial_init();
447 472
448 /* Configure GPIO for EHCI port */ 473 /* Configure GPIO for EHCI port */
449 omap_mux_init_gpio(57, OMAP_PIN_OUTPUT); 474 omap_mux_init_gpio(57, OMAP_PIN_OUTPUT);
450 usb_ehci_init(&ehci_pdata); 475 usbhs_init(&usbhs_bdata);
451 am3517_evm_hecc_init(&am3517_evm_hecc_pdata); 476 am3517_evm_hecc_init(&am3517_evm_hecc_pdata);
452 /* DSS */ 477 /* DSS */
453 am3517_evm_display_init(); 478 am3517_evm_display_init();
@@ -459,15 +484,17 @@ static void __init am3517_evm_init(void)
459 ARRAY_SIZE(am3517evm_i2c1_boardinfo)); 484 ARRAY_SIZE(am3517evm_i2c1_boardinfo));
460 /*Ethernet*/ 485 /*Ethernet*/
461 am3517_evm_ethernet_init(&am3517_evm_emac_pdata); 486 am3517_evm_ethernet_init(&am3517_evm_emac_pdata);
487
488 /* MUSB */
489 am3517_evm_musb_init();
462} 490}
463 491
464MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") 492MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
465 .phys_io = 0x48000000,
466 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
467 .boot_params = 0x80000100, 493 .boot_params = 0x80000100,
468 .map_io = omap3_map_io,
469 .reserve = omap_reserve, 494 .reserve = omap_reserve,
470 .init_irq = am3517_evm_init_irq, 495 .map_io = omap3_map_io,
496 .init_early = am3517_evm_init_early,
497 .init_irq = omap_init_irq,
471 .init_machine = am3517_evm_init, 498 .init_machine = am3517_evm_init,
472 .timer = &omap_timer, 499 .timer = &omap_timer,
473MACHINE_END 500MACHINE_END
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c
index c6421a72514a..b124bdfb4239 100644
--- a/arch/arm/mach-omap2/board-apollon.c
+++ b/arch/arm/mach-omap2/board-apollon.c
@@ -27,21 +27,21 @@
27#include <linux/err.h> 27#include <linux/err.h>
28#include <linux/clk.h> 28#include <linux/clk.h>
29#include <linux/smc91x.h> 29#include <linux/smc91x.h>
30#include <linux/gpio.h>
30 31
31#include <mach/hardware.h> 32#include <mach/hardware.h>
32#include <asm/mach-types.h> 33#include <asm/mach-types.h>
33#include <asm/mach/arch.h> 34#include <asm/mach/arch.h>
34#include <asm/mach/flash.h> 35#include <asm/mach/flash.h>
35 36
36#include <mach/gpio.h>
37#include <plat/led.h> 37#include <plat/led.h>
38#include <plat/usb.h> 38#include <plat/usb.h>
39#include <plat/board.h> 39#include <plat/board.h>
40#include <plat/common.h> 40#include <plat/common.h>
41#include <plat/gpmc.h> 41#include <plat/gpmc.h>
42#include <plat/control.h>
43 42
44#include "mux.h" 43#include "mux.h"
44#include "control.h"
45 45
46/* LED & Switch macros */ 46/* LED & Switch macros */
47#define LED0_GPIO13 13 47#define LED0_GPIO13 13
@@ -202,6 +202,7 @@ static inline void __init apollon_init_smc91x(void)
202 unsigned int rate; 202 unsigned int rate;
203 struct clk *gpmc_fck; 203 struct clk *gpmc_fck;
204 int eth_cs; 204 int eth_cs;
205 int err;
205 206
206 gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */ 207 gpmc_fck = clk_get(NULL, "gpmc_fck"); /* Always on ENABLE_ON_INIT */
207 if (IS_ERR(gpmc_fck)) { 208 if (IS_ERR(gpmc_fck)) {
@@ -245,15 +246,13 @@ static inline void __init apollon_init_smc91x(void)
245 apollon_smc91x_resources[0].end = base + 0x30f; 246 apollon_smc91x_resources[0].end = base + 0x30f;
246 udelay(100); 247 udelay(100);
247 248
248 omap_mux_init_gpio(74, 0); 249 omap_mux_init_gpio(APOLLON_ETHR_GPIO_IRQ, 0);
249 if (gpio_request(APOLLON_ETHR_GPIO_IRQ, "SMC91x irq") < 0) { 250 err = gpio_request_one(APOLLON_ETHR_GPIO_IRQ, GPIOF_IN, "SMC91x irq");
251 if (err) {
250 printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n", 252 printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
251 APOLLON_ETHR_GPIO_IRQ); 253 APOLLON_ETHR_GPIO_IRQ);
252 gpmc_cs_free(APOLLON_ETH_CS); 254 gpmc_cs_free(APOLLON_ETH_CS);
253 goto out;
254 } 255 }
255 gpio_direction_input(APOLLON_ETHR_GPIO_IRQ);
256
257out: 256out:
258 clk_disable(gpmc_fck); 257 clk_disable(gpmc_fck);
259 clk_put(gpmc_fck); 258 clk_put(gpmc_fck);
@@ -270,34 +269,29 @@ static struct omap_lcd_config apollon_lcd_config __initdata = {
270 .ctrl_name = "internal", 269 .ctrl_name = "internal",
271}; 270};
272 271
273static struct omap_board_config_kernel apollon_config[] = { 272static struct omap_board_config_kernel apollon_config[] __initdata = {
274 { OMAP_TAG_LCD, &apollon_lcd_config }, 273 { OMAP_TAG_LCD, &apollon_lcd_config },
275}; 274};
276 275
277static void __init omap_apollon_init_irq(void) 276static void __init omap_apollon_init_early(void)
278{ 277{
279 omap_board_config = apollon_config; 278 omap2_init_common_infrastructure();
280 omap_board_config_size = ARRAY_SIZE(apollon_config); 279 omap2_init_common_devices(NULL, NULL);
281 omap2_init_common_hw(NULL, NULL);
282 omap_init_irq();
283 omap_gpio_init();
284 apollon_init_smc91x();
285} 280}
286 281
282static struct gpio apollon_gpio_leds[] __initdata = {
283 { LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */
284 { LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */
285 { LED2_GPIO15, GPIOF_OUT_INIT_LOW, "LED2" }, /* LED2 - AA4 */
286};
287
287static void __init apollon_led_init(void) 288static void __init apollon_led_init(void)
288{ 289{
289 /* LED0 - AA10 */
290 omap_mux_init_signal("vlynq_clk.gpio_13", 0); 290 omap_mux_init_signal("vlynq_clk.gpio_13", 0);
291 gpio_request(LED0_GPIO13, "LED0");
292 gpio_direction_output(LED0_GPIO13, 0);
293 /* LED1 - AA6 */
294 omap_mux_init_signal("vlynq_rx1.gpio_14", 0); 291 omap_mux_init_signal("vlynq_rx1.gpio_14", 0);
295 gpio_request(LED1_GPIO14, "LED1");
296 gpio_direction_output(LED1_GPIO14, 0);
297 /* LED2 - AA4 */
298 omap_mux_init_signal("vlynq_rx0.gpio_15", 0); 292 omap_mux_init_signal("vlynq_rx0.gpio_15", 0);
299 gpio_request(LED2_GPIO15, "LED2"); 293
300 gpio_direction_output(LED2_GPIO15, 0); 294 gpio_request_array(apollon_gpio_leds, ARRAY_SIZE(apollon_gpio_leds));
301} 295}
302 296
303static void __init apollon_usb_init(void) 297static void __init apollon_usb_init(void)
@@ -305,8 +299,7 @@ static void __init apollon_usb_init(void)
305 /* USB device */ 299 /* USB device */
306 /* DEVICE_SUSPEND */ 300 /* DEVICE_SUSPEND */
307 omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0); 301 omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0);
308 gpio_request(12, "USB suspend"); 302 gpio_request_one(12, GPIOF_OUT_INIT_LOW, "USB suspend");
309 gpio_direction_output(12, 0);
310 omap2_usbfs_init(&apollon_usb_config); 303 omap2_usbfs_init(&apollon_usb_config);
311} 304}
312 305
@@ -314,8 +307,6 @@ static void __init apollon_usb_init(void)
314static struct omap_board_mux board_mux[] __initdata = { 307static struct omap_board_mux board_mux[] __initdata = {
315 { .reg_offset = OMAP_MUX_TERMINATOR }, 308 { .reg_offset = OMAP_MUX_TERMINATOR },
316}; 309};
317#else
318#define board_mux NULL
319#endif 310#endif
320 311
321static void __init omap_apollon_init(void) 312static void __init omap_apollon_init(void)
@@ -323,7 +314,10 @@ static void __init omap_apollon_init(void)
323 u32 v; 314 u32 v;
324 315
325 omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC); 316 omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC);
317 omap_board_config = apollon_config;
318 omap_board_config_size = ARRAY_SIZE(apollon_config);
326 319
320 apollon_init_smc91x();
327 apollon_led_init(); 321 apollon_led_init();
328 apollon_flash_init(); 322 apollon_flash_init();
329 apollon_usb_init(); 323 apollon_usb_init();
@@ -356,12 +350,11 @@ static void __init omap_apollon_map_io(void)
356 350
357MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon") 351MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")
358 /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ 352 /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */
359 .phys_io = 0x48000000,
360 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
361 .boot_params = 0x80000100, 353 .boot_params = 0x80000100,
362 .map_io = omap_apollon_map_io,
363 .reserve = omap_reserve, 354 .reserve = omap_reserve,
364 .init_irq = omap_apollon_init_irq, 355 .map_io = omap_apollon_map_io,
356 .init_early = omap_apollon_init_early,
357 .init_irq = omap_init_irq,
365 .init_machine = omap_apollon_init, 358 .init_machine = omap_apollon_init,
366 .timer = &omap_timer, 359 .timer = &omap_timer,
367MACHINE_END 360MACHINE_END
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index e10bc109415c..77456dec93ea 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -31,6 +31,7 @@
31#include <linux/i2c/at24.h> 31#include <linux/i2c/at24.h>
32#include <linux/i2c/twl.h> 32#include <linux/i2c/twl.h>
33#include <linux/regulator/machine.h> 33#include <linux/regulator/machine.h>
34#include <linux/mmc/host.h>
34 35
35#include <linux/spi/spi.h> 36#include <linux/spi/spi.h>
36#include <linux/spi/tdo24m.h> 37#include <linux/spi/tdo24m.h>
@@ -44,7 +45,8 @@
44#include <plat/nand.h> 45#include <plat/nand.h>
45#include <plat/gpmc.h> 46#include <plat/gpmc.h>
46#include <plat/usb.h> 47#include <plat/usb.h>
47#include <plat/display.h> 48#include <video/omapdss.h>
49#include <video/omap-panel-generic-dpi.h>
48#include <plat/mcspi.h> 50#include <plat/mcspi.h>
49 51
50#include <mach/hardware.h> 52#include <mach/hardware.h>
@@ -52,6 +54,7 @@
52#include "mux.h" 54#include "mux.h"
53#include "sdram-micron-mt46h32m32lf-6.h" 55#include "sdram-micron-mt46h32m32lf-6.h"
54#include "hsmmc.h" 56#include "hsmmc.h"
57#include "common-board-devices.h"
55 58
56#define CM_T35_GPIO_PENDOWN 57 59#define CM_T35_GPIO_PENDOWN 57
57 60
@@ -60,90 +63,30 @@
60#define SB_T35_SMSC911X_CS 4 63#define SB_T35_SMSC911X_CS 4
61#define SB_T35_SMSC911X_GPIO 65 64#define SB_T35_SMSC911X_GPIO 65
62 65
63#define NAND_BLOCK_SIZE SZ_128K
64
65#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) 66#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
66#include <linux/smsc911x.h> 67#include <linux/smsc911x.h>
68#include <plat/gpmc-smsc911x.h>
67 69
68static struct smsc911x_platform_config cm_t35_smsc911x_config = { 70static struct omap_smsc911x_platform_data cm_t35_smsc911x_cfg = {
69 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
70 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
71 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
72 .phy_interface = PHY_INTERFACE_MODE_MII,
73};
74
75static struct resource cm_t35_smsc911x_resources[] = {
76 {
77 .flags = IORESOURCE_MEM,
78 },
79 {
80 .start = OMAP_GPIO_IRQ(CM_T35_SMSC911X_GPIO),
81 .end = OMAP_GPIO_IRQ(CM_T35_SMSC911X_GPIO),
82 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
83 },
84};
85
86static struct platform_device cm_t35_smsc911x_device = {
87 .name = "smsc911x",
88 .id = 0, 71 .id = 0,
89 .num_resources = ARRAY_SIZE(cm_t35_smsc911x_resources), 72 .cs = CM_T35_SMSC911X_CS,
90 .resource = cm_t35_smsc911x_resources, 73 .gpio_irq = CM_T35_SMSC911X_GPIO,
91 .dev = { 74 .gpio_reset = -EINVAL,
92 .platform_data = &cm_t35_smsc911x_config, 75 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
93 },
94};
95
96static struct resource sb_t35_smsc911x_resources[] = {
97 {
98 .flags = IORESOURCE_MEM,
99 },
100 {
101 .start = OMAP_GPIO_IRQ(SB_T35_SMSC911X_GPIO),
102 .end = OMAP_GPIO_IRQ(SB_T35_SMSC911X_GPIO),
103 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
104 },
105}; 76};
106 77
107static struct platform_device sb_t35_smsc911x_device = { 78static struct omap_smsc911x_platform_data sb_t35_smsc911x_cfg = {
108 .name = "smsc911x",
109 .id = 1, 79 .id = 1,
110 .num_resources = ARRAY_SIZE(sb_t35_smsc911x_resources), 80 .cs = SB_T35_SMSC911X_CS,
111 .resource = sb_t35_smsc911x_resources, 81 .gpio_irq = SB_T35_SMSC911X_GPIO,
112 .dev = { 82 .gpio_reset = -EINVAL,
113 .platform_data = &cm_t35_smsc911x_config, 83 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
114 },
115}; 84};
116 85
117static void __init cm_t35_init_smsc911x(struct platform_device *dev,
118 int cs, int irq_gpio)
119{
120 unsigned long cs_mem_base;
121
122 if (gpmc_cs_request(cs, SZ_16M, &cs_mem_base) < 0) {
123 pr_err("CM-T35: Failed request for GPMC mem for smsc911x\n");
124 return;
125 }
126
127 dev->resource[0].start = cs_mem_base + 0x0;
128 dev->resource[0].end = cs_mem_base + 0xff;
129
130 if ((gpio_request(irq_gpio, "ETH IRQ") == 0) &&
131 (gpio_direction_input(irq_gpio) == 0)) {
132 gpio_export(irq_gpio, 0);
133 } else {
134 pr_err("CM-T35: could not obtain gpio for SMSC911X IRQ\n");
135 return;
136 }
137
138 platform_device_register(dev);
139}
140
141static void __init cm_t35_init_ethernet(void) 86static void __init cm_t35_init_ethernet(void)
142{ 87{
143 cm_t35_init_smsc911x(&cm_t35_smsc911x_device, 88 gpmc_smsc911x_init(&cm_t35_smsc911x_cfg);
144 CM_T35_SMSC911X_CS, CM_T35_SMSC911X_GPIO); 89 gpmc_smsc911x_init(&sb_t35_smsc911x_cfg);
145 cm_t35_init_smsc911x(&sb_t35_smsc911x_device,
146 SB_T35_SMSC911X_CS, SB_T35_SMSC911X_GPIO);
147} 90}
148#else 91#else
149static inline void __init cm_t35_init_ethernet(void) { return; } 92static inline void __init cm_t35_init_ethernet(void) { return; }
@@ -233,71 +176,10 @@ static void __init cm_t35_init_nand(void)
233static inline void cm_t35_init_nand(void) {} 176static inline void cm_t35_init_nand(void) {}
234#endif 177#endif
235 178
236#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
237 defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
238#include <linux/spi/ads7846.h>
239
240#include <plat/mcspi.h>
241
242static struct omap2_mcspi_device_config ads7846_mcspi_config = {
243 .turbo_mode = 0,
244 .single_channel = 1, /* 0: slave, 1: master */
245};
246
247static int ads7846_get_pendown_state(void)
248{
249 return !gpio_get_value(CM_T35_GPIO_PENDOWN);
250}
251
252static struct ads7846_platform_data ads7846_config = {
253 .x_max = 0x0fff,
254 .y_max = 0x0fff,
255 .x_plate_ohms = 180,
256 .pressure_max = 255,
257 .debounce_max = 10,
258 .debounce_tol = 3,
259 .debounce_rep = 1,
260 .get_pendown_state = ads7846_get_pendown_state,
261 .keep_vref_on = 1,
262};
263
264static struct spi_board_info cm_t35_spi_board_info[] __initdata = {
265 {
266 .modalias = "ads7846",
267 .bus_num = 1,
268 .chip_select = 0,
269 .max_speed_hz = 1500000,
270 .controller_data = &ads7846_mcspi_config,
271 .irq = OMAP_GPIO_IRQ(CM_T35_GPIO_PENDOWN),
272 .platform_data = &ads7846_config,
273 },
274};
275
276static void __init cm_t35_init_ads7846(void)
277{
278 if ((gpio_request(CM_T35_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) &&
279 (gpio_direction_input(CM_T35_GPIO_PENDOWN) == 0)) {
280 gpio_export(CM_T35_GPIO_PENDOWN, 0);
281 } else {
282 pr_err("CM-T35: could not obtain gpio for ADS7846_PENDOWN\n");
283 return;
284 }
285
286 spi_register_board_info(cm_t35_spi_board_info,
287 ARRAY_SIZE(cm_t35_spi_board_info));
288}
289#else
290static inline void cm_t35_init_ads7846(void) {}
291#endif
292
293#define CM_T35_LCD_EN_GPIO 157 179#define CM_T35_LCD_EN_GPIO 157
294#define CM_T35_LCD_BL_GPIO 58 180#define CM_T35_LCD_BL_GPIO 58
295#define CM_T35_DVI_EN_GPIO 54 181#define CM_T35_DVI_EN_GPIO 54
296 182
297static int lcd_bl_gpio;
298static int lcd_en_gpio;
299static int dvi_en_gpio;
300
301static int lcd_enabled; 183static int lcd_enabled;
302static int dvi_enabled; 184static int dvi_enabled;
303 185
@@ -308,8 +190,8 @@ static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
308 return -EINVAL; 190 return -EINVAL;
309 } 191 }
310 192
311 gpio_set_value(lcd_en_gpio, 1); 193 gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
312 gpio_set_value(lcd_bl_gpio, 1); 194 gpio_set_value(CM_T35_LCD_BL_GPIO, 1);
313 195
314 lcd_enabled = 1; 196 lcd_enabled = 1;
315 197
@@ -320,8 +202,8 @@ static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
320{ 202{
321 lcd_enabled = 0; 203 lcd_enabled = 0;
322 204
323 gpio_set_value(lcd_bl_gpio, 0); 205 gpio_set_value(CM_T35_LCD_BL_GPIO, 0);
324 gpio_set_value(lcd_en_gpio, 0); 206 gpio_set_value(CM_T35_LCD_EN_GPIO, 0);
325} 207}
326 208
327static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev) 209static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
@@ -331,7 +213,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
331 return -EINVAL; 213 return -EINVAL;
332 } 214 }
333 215
334 gpio_set_value(dvi_en_gpio, 0); 216 gpio_set_value(CM_T35_DVI_EN_GPIO, 0);
335 dvi_enabled = 1; 217 dvi_enabled = 1;
336 218
337 return 0; 219 return 0;
@@ -339,7 +221,7 @@ static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
339 221
340static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev) 222static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
341{ 223{
342 gpio_set_value(dvi_en_gpio, 1); 224 gpio_set_value(CM_T35_DVI_EN_GPIO, 1);
343 dvi_enabled = 0; 225 dvi_enabled = 0;
344} 226}
345 227
@@ -352,22 +234,32 @@ static void cm_t35_panel_disable_tv(struct omap_dss_device *dssdev)
352{ 234{
353} 235}
354 236
237static struct panel_generic_dpi_data lcd_panel = {
238 .name = "toppoly_tdo35s",
239 .platform_enable = cm_t35_panel_enable_lcd,
240 .platform_disable = cm_t35_panel_disable_lcd,
241};
242
355static struct omap_dss_device cm_t35_lcd_device = { 243static struct omap_dss_device cm_t35_lcd_device = {
356 .name = "lcd", 244 .name = "lcd",
357 .driver_name = "toppoly_tdo35s_panel",
358 .type = OMAP_DISPLAY_TYPE_DPI, 245 .type = OMAP_DISPLAY_TYPE_DPI,
246 .driver_name = "generic_dpi_panel",
247 .data = &lcd_panel,
359 .phy.dpi.data_lines = 18, 248 .phy.dpi.data_lines = 18,
360 .platform_enable = cm_t35_panel_enable_lcd, 249};
361 .platform_disable = cm_t35_panel_disable_lcd, 250
251static struct panel_generic_dpi_data dvi_panel = {
252 .name = "generic",
253 .platform_enable = cm_t35_panel_enable_dvi,
254 .platform_disable = cm_t35_panel_disable_dvi,
362}; 255};
363 256
364static struct omap_dss_device cm_t35_dvi_device = { 257static struct omap_dss_device cm_t35_dvi_device = {
365 .name = "dvi", 258 .name = "dvi",
366 .driver_name = "generic_panel",
367 .type = OMAP_DISPLAY_TYPE_DPI, 259 .type = OMAP_DISPLAY_TYPE_DPI,
260 .driver_name = "generic_dpi_panel",
261 .data = &dvi_panel,
368 .phy.dpi.data_lines = 24, 262 .phy.dpi.data_lines = 24,
369 .platform_enable = cm_t35_panel_enable_dvi,
370 .platform_disable = cm_t35_panel_disable_dvi,
371}; 263};
372 264
373static struct omap_dss_device cm_t35_tv_device = { 265static struct omap_dss_device cm_t35_tv_device = {
@@ -391,14 +283,6 @@ static struct omap_dss_board_info cm_t35_dss_data = {
391 .default_device = &cm_t35_dvi_device, 283 .default_device = &cm_t35_dvi_device,
392}; 284};
393 285
394static struct platform_device cm_t35_dss_device = {
395 .name = "omapdss",
396 .id = -1,
397 .dev = {
398 .platform_data = &cm_t35_dss_data,
399 },
400};
401
402static struct omap2_mcspi_device_config tdo24m_mcspi_config = { 286static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
403 .turbo_mode = 0, 287 .turbo_mode = 0,
404 .single_channel = 1, /* 0: slave, 1: master */ 288 .single_channel = 1, /* 0: slave, 1: master */
@@ -419,62 +303,38 @@ static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
419 }, 303 },
420}; 304};
421 305
306static struct gpio cm_t35_dss_gpios[] __initdata = {
307 { CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW, "lcd enable" },
308 { CM_T35_LCD_BL_GPIO, GPIOF_OUT_INIT_LOW, "lcd bl enable" },
309 { CM_T35_DVI_EN_GPIO, GPIOF_OUT_INIT_HIGH, "dvi enable" },
310};
311
422static void __init cm_t35_init_display(void) 312static void __init cm_t35_init_display(void)
423{ 313{
424 int err; 314 int err;
425 315
426 lcd_en_gpio = CM_T35_LCD_EN_GPIO;
427 lcd_bl_gpio = CM_T35_LCD_BL_GPIO;
428 dvi_en_gpio = CM_T35_DVI_EN_GPIO;
429
430 spi_register_board_info(cm_t35_lcd_spi_board_info, 316 spi_register_board_info(cm_t35_lcd_spi_board_info,
431 ARRAY_SIZE(cm_t35_lcd_spi_board_info)); 317 ARRAY_SIZE(cm_t35_lcd_spi_board_info));
432 318
433 err = gpio_request(lcd_en_gpio, "LCD RST"); 319 err = gpio_request_array(cm_t35_dss_gpios,
434 if (err) { 320 ARRAY_SIZE(cm_t35_dss_gpios));
435 pr_err("CM-T35: failed to get LCD reset GPIO\n");
436 goto out;
437 }
438
439 err = gpio_request(lcd_bl_gpio, "LCD BL");
440 if (err) { 321 if (err) {
441 pr_err("CM-T35: failed to get LCD backlight control GPIO\n"); 322 pr_err("CM-T35: failed to request DSS control GPIOs\n");
442 goto err_lcd_bl; 323 return;
443 }
444
445 err = gpio_request(dvi_en_gpio, "DVI EN");
446 if (err) {
447 pr_err("CM-T35: failed to get DVI reset GPIO\n");
448 goto err_dvi_en;
449 } 324 }
450 325
451 gpio_export(lcd_en_gpio, 0); 326 gpio_export(CM_T35_LCD_EN_GPIO, 0);
452 gpio_export(lcd_bl_gpio, 0); 327 gpio_export(CM_T35_LCD_BL_GPIO, 0);
453 gpio_export(dvi_en_gpio, 0); 328 gpio_export(CM_T35_DVI_EN_GPIO, 0);
454 gpio_direction_output(lcd_en_gpio, 0);
455 gpio_direction_output(lcd_bl_gpio, 0);
456 gpio_direction_output(dvi_en_gpio, 1);
457 329
458 msleep(50); 330 msleep(50);
459 gpio_set_value(lcd_en_gpio, 1); 331 gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
460 332
461 err = platform_device_register(&cm_t35_dss_device); 333 err = omap_display_init(&cm_t35_dss_data);
462 if (err) { 334 if (err) {
463 pr_err("CM-T35: failed to register DSS device\n"); 335 pr_err("CM-T35: failed to register DSS device\n");
464 goto err_dev_reg; 336 gpio_free_array(cm_t35_dss_gpios, ARRAY_SIZE(cm_t35_dss_gpios));
465 } 337 }
466
467 return;
468
469err_dev_reg:
470 gpio_free(dvi_en_gpio);
471err_dvi_en:
472 gpio_free(lcd_bl_gpio);
473err_lcd_bl:
474 gpio_free(lcd_en_gpio);
475out:
476
477 return;
478} 338}
479 339
480static struct regulator_consumer_supply cm_t35_vmmc1_supply = { 340static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
@@ -485,15 +345,11 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {
485 .supply = "vmmc_aux", 345 .supply = "vmmc_aux",
486}; 346};
487 347
488static struct regulator_consumer_supply cm_t35_vdac_supply = { 348static struct regulator_consumer_supply cm_t35_vdac_supply =
489 .supply = "vdda_dac", 349 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
490 .dev = &cm_t35_dss_device.dev,
491};
492 350
493static struct regulator_consumer_supply cm_t35_vdvi_supply = { 351static struct regulator_consumer_supply cm_t35_vdvi_supply =
494 .supply = "vdvi", 352 REGULATOR_SUPPLY("vdvi", "omapdss");
495 .dev = &cm_t35_dss_device.dev,
496};
497 353
498/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ 354/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
499static struct regulator_init_data cm_t35_vmmc1 = { 355static struct regulator_init_data cm_t35_vmmc1 = {
@@ -558,7 +414,7 @@ static struct twl4030_usb_data cm_t35_usb_data = {
558 .usb_mode = T2_USB_MODE_ULPI, 414 .usb_mode = T2_USB_MODE_ULPI,
559}; 415};
560 416
561static int cm_t35_keymap[] = { 417static uint32_t cm_t35_keymap[] = {
562 KEY(0, 0, KEY_A), KEY(0, 1, KEY_B), KEY(0, 2, KEY_LEFT), 418 KEY(0, 0, KEY_A), KEY(0, 1, KEY_B), KEY(0, 2, KEY_LEFT),
563 KEY(1, 0, KEY_UP), KEY(1, 1, KEY_ENTER), KEY(1, 2, KEY_DOWN), 419 KEY(1, 0, KEY_UP), KEY(1, 1, KEY_ENTER), KEY(1, 2, KEY_DOWN),
564 KEY(2, 0, KEY_RIGHT), KEY(2, 1, KEY_C), KEY(2, 2, KEY_D), 420 KEY(2, 0, KEY_RIGHT), KEY(2, 1, KEY_C), KEY(2, 2, KEY_D),
@@ -579,14 +435,14 @@ static struct twl4030_keypad_data cm_t35_kp_data = {
579static struct omap2_hsmmc_info mmc[] = { 435static struct omap2_hsmmc_info mmc[] = {
580 { 436 {
581 .mmc = 1, 437 .mmc = 1,
582 .wires = 4, 438 .caps = MMC_CAP_4_BIT_DATA,
583 .gpio_cd = -EINVAL, 439 .gpio_cd = -EINVAL,
584 .gpio_wp = -EINVAL, 440 .gpio_wp = -EINVAL,
585 441
586 }, 442 },
587 { 443 {
588 .mmc = 2, 444 .mmc = 2,
589 .wires = 4, 445 .caps = MMC_CAP_4_BIT_DATA,
590 .transceiver = 1, 446 .transceiver = 1,
591 .gpio_cd = -EINVAL, 447 .gpio_cd = -EINVAL,
592 .gpio_wp = -EINVAL, 448 .gpio_wp = -EINVAL,
@@ -595,14 +451,14 @@ static struct omap2_hsmmc_info mmc[] = {
595 {} /* Terminator */ 451 {} /* Terminator */
596}; 452};
597 453
598static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = { 454static struct usbhs_omap_board_data usbhs_bdata __initdata = {
599 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 455 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
600 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 456 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
601 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 457 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
602 458
603 .phy_reset = true, 459 .phy_reset = true,
604 .reset_gpio_port[0] = -EINVAL, 460 .reset_gpio_port[0] = OMAP_MAX_GPIO_LINES + 6,
605 .reset_gpio_port[1] = -EINVAL, 461 .reset_gpio_port[1] = OMAP_MAX_GPIO_LINES + 7,
606 .reset_gpio_port[2] = -EINVAL 462 .reset_gpio_port[2] = -EINVAL
607}; 463};
608 464
@@ -611,10 +467,8 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
611{ 467{
612 int wlan_rst = gpio + 2; 468 int wlan_rst = gpio + 2;
613 469
614 if ((gpio_request(wlan_rst, "WLAN RST") == 0) && 470 if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
615 (gpio_direction_output(wlan_rst, 1) == 0)) {
616 gpio_export(wlan_rst, 0); 471 gpio_export(wlan_rst, 0);
617
618 udelay(10); 472 udelay(10);
619 gpio_set_value(wlan_rst, 0); 473 gpio_set_value(wlan_rst, 0);
620 udelay(10); 474 udelay(10);
@@ -631,12 +485,6 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
631 cm_t35_vmmc1_supply.dev = mmc[0].dev; 485 cm_t35_vmmc1_supply.dev = mmc[0].dev;
632 cm_t35_vsim_supply.dev = mmc[0].dev; 486 cm_t35_vsim_supply.dev = mmc[0].dev;
633 487
634 /* setup USB with proper PHY reset GPIOs */
635 ehci_pdata.reset_gpio_port[0] = gpio + 6;
636 ehci_pdata.reset_gpio_port[1] = gpio + 7;
637
638 usb_ehci_init(&ehci_pdata);
639
640 return 0; 488 return 0;
641} 489}
642 490
@@ -661,35 +509,19 @@ static struct twl4030_platform_data cm_t35_twldata = {
661 .vpll2 = &cm_t35_vpll2, 509 .vpll2 = &cm_t35_vpll2,
662}; 510};
663 511
664static struct i2c_board_info __initdata cm_t35_i2c_boardinfo[] = {
665 {
666 I2C_BOARD_INFO("tps65930", 0x48),
667 .flags = I2C_CLIENT_WAKE,
668 .irq = INT_34XX_SYS_NIRQ,
669 .platform_data = &cm_t35_twldata,
670 },
671};
672
673static void __init cm_t35_init_i2c(void) 512static void __init cm_t35_init_i2c(void)
674{ 513{
675 omap_register_i2c_bus(1, 2600, cm_t35_i2c_boardinfo, 514 omap3_pmic_init("tps65930", &cm_t35_twldata);
676 ARRAY_SIZE(cm_t35_i2c_boardinfo));
677} 515}
678 516
679static struct omap_board_config_kernel cm_t35_config[] __initdata = { 517static void __init cm_t35_init_early(void)
680};
681
682static void __init cm_t35_init_irq(void)
683{ 518{
684 omap_board_config = cm_t35_config; 519 omap2_init_common_infrastructure();
685 omap_board_config_size = ARRAY_SIZE(cm_t35_config); 520 omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
686
687 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
688 mt46h32m32lf6_sdrc_params); 521 mt46h32m32lf6_sdrc_params);
689 omap_init_irq();
690 omap_gpio_init();
691} 522}
692 523
524#ifdef CONFIG_OMAP_MUX
693static struct omap_board_mux board_mux[] __initdata = { 525static struct omap_board_mux board_mux[] __initdata = {
694 /* nCS and IRQ for CM-T35 ethernet */ 526 /* nCS and IRQ for CM-T35 ethernet */
695 OMAP3_MUX(GPMC_NCS5, OMAP_MUX_MODE0), 527 OMAP3_MUX(GPMC_NCS5, OMAP_MUX_MODE0),
@@ -787,34 +619,34 @@ static struct omap_board_mux board_mux[] __initdata = {
787 619
788 { .reg_offset = OMAP_MUX_TERMINATOR }, 620 { .reg_offset = OMAP_MUX_TERMINATOR },
789}; 621};
622#endif
790 623
791static struct omap_musb_board_data musb_board_data = { 624static struct omap_board_config_kernel cm_t35_config[] __initdata = {
792 .interface_type = MUSB_INTERFACE_ULPI,
793 .mode = MUSB_OTG,
794 .power = 100,
795}; 625};
796 626
797static void __init cm_t35_init(void) 627static void __init cm_t35_init(void)
798{ 628{
629 omap_board_config = cm_t35_config;
630 omap_board_config_size = ARRAY_SIZE(cm_t35_config);
799 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); 631 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
800 omap_serial_init(); 632 omap_serial_init();
801 cm_t35_init_i2c(); 633 cm_t35_init_i2c();
802 cm_t35_init_nand(); 634 cm_t35_init_nand();
803 cm_t35_init_ads7846(); 635 omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
804 cm_t35_init_ethernet(); 636 cm_t35_init_ethernet();
805 cm_t35_init_led(); 637 cm_t35_init_led();
806 cm_t35_init_display(); 638 cm_t35_init_display();
807 639
808 usb_musb_init(&musb_board_data); 640 usb_musb_init(NULL);
641 usbhs_init(&usbhs_bdata);
809} 642}
810 643
811MACHINE_START(CM_T35, "Compulab CM-T35") 644MACHINE_START(CM_T35, "Compulab CM-T35")
812 .phys_io = 0x48000000,
813 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
814 .boot_params = 0x80000100, 645 .boot_params = 0x80000100,
815 .map_io = omap3_map_io,
816 .reserve = omap_reserve, 646 .reserve = omap_reserve,
817 .init_irq = cm_t35_init_irq, 647 .map_io = omap3_map_io,
648 .init_early = cm_t35_init_early,
649 .init_irq = omap_init_irq,
818 .init_machine = cm_t35_init, 650 .init_machine = cm_t35_init,
819 .timer = &omap_timer, 651 .timer = &omap_timer,
820MACHINE_END 652MACHINE_END
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
new file mode 100644
index 000000000000..c3a9fd35034a
--- /dev/null
+++ b/arch/arm/mach-omap2/board-cm-t3517.c
@@ -0,0 +1,310 @@
1/*
2 * linux/arch/arm/mach-omap2/board-cm-t3517.c
3 *
4 * Support for the CompuLab CM-T3517 modules
5 *
6 * Copyright (C) 2010 CompuLab, Ltd.
7 * Author: Igor Grinberg <grinberg@compulab.co.il>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * version 2 as published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21 * 02110-1301 USA
22 *
23 */
24
25#include <linux/kernel.h>
26#include <linux/init.h>
27#include <linux/platform_device.h>
28#include <linux/delay.h>
29#include <linux/gpio.h>
30#include <linux/leds.h>
31#include <linux/rtc-v3020.h>
32#include <linux/mtd/mtd.h>
33#include <linux/mtd/nand.h>
34#include <linux/mtd/partitions.h>
35#include <linux/can/platform/ti_hecc.h>
36
37#include <asm/mach-types.h>
38#include <asm/mach/arch.h>
39#include <asm/mach/map.h>
40
41#include <plat/board.h>
42#include <plat/common.h>
43#include <plat/usb.h>
44#include <plat/nand.h>
45#include <plat/gpmc.h>
46
47#include <mach/am35xx.h>
48
49#include "mux.h"
50#include "control.h"
51#include "common-board-devices.h"
52
53#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
54static struct gpio_led cm_t3517_leds[] = {
55 [0] = {
56 .gpio = 186,
57 .name = "cm-t3517:green",
58 .default_trigger = "heartbeat",
59 .active_low = 0,
60 },
61};
62
63static struct gpio_led_platform_data cm_t3517_led_pdata = {
64 .num_leds = ARRAY_SIZE(cm_t3517_leds),
65 .leds = cm_t3517_leds,
66};
67
68static struct platform_device cm_t3517_led_device = {
69 .name = "leds-gpio",
70 .id = -1,
71 .dev = {
72 .platform_data = &cm_t3517_led_pdata,
73 },
74};
75
76static void __init cm_t3517_init_leds(void)
77{
78 platform_device_register(&cm_t3517_led_device);
79}
80#else
81static inline void cm_t3517_init_leds(void) {}
82#endif
83
84#if defined(CONFIG_CAN_TI_HECC) || defined(CONFIG_CAN_TI_HECC_MODULE)
85static struct resource cm_t3517_hecc_resources[] = {
86 {
87 .start = AM35XX_IPSS_HECC_BASE,
88 .end = AM35XX_IPSS_HECC_BASE + SZ_16K - 1,
89 .flags = IORESOURCE_MEM,
90 },
91 {
92 .start = INT_35XX_HECC0_IRQ,
93 .end = INT_35XX_HECC0_IRQ,
94 .flags = IORESOURCE_IRQ,
95 },
96};
97
98static struct ti_hecc_platform_data cm_t3517_hecc_pdata = {
99 .scc_hecc_offset = AM35XX_HECC_SCC_HECC_OFFSET,
100 .scc_ram_offset = AM35XX_HECC_SCC_RAM_OFFSET,
101 .hecc_ram_offset = AM35XX_HECC_RAM_OFFSET,
102 .mbx_offset = AM35XX_HECC_MBOX_OFFSET,
103 .int_line = AM35XX_HECC_INT_LINE,
104 .version = AM35XX_HECC_VERSION,
105};
106
107static struct platform_device cm_t3517_hecc_device = {
108 .name = "ti_hecc",
109 .id = 1,
110 .num_resources = ARRAY_SIZE(cm_t3517_hecc_resources),
111 .resource = cm_t3517_hecc_resources,
112 .dev = {
113 .platform_data = &cm_t3517_hecc_pdata,
114 },
115};
116
117static void cm_t3517_init_hecc(void)
118{
119 platform_device_register(&cm_t3517_hecc_device);
120}
121#else
122static inline void cm_t3517_init_hecc(void) {}
123#endif
124
125#if defined(CONFIG_RTC_DRV_V3020) || defined(CONFIG_RTC_DRV_V3020_MODULE)
126#define RTC_IO_GPIO (153)
127#define RTC_WR_GPIO (154)
128#define RTC_RD_GPIO (53)
129#define RTC_CS_GPIO (163)
130#define RTC_CS_EN_GPIO (160)
131
132struct v3020_platform_data cm_t3517_v3020_pdata = {
133 .use_gpio = 1,
134 .gpio_cs = RTC_CS_GPIO,
135 .gpio_wr = RTC_WR_GPIO,
136 .gpio_rd = RTC_RD_GPIO,
137 .gpio_io = RTC_IO_GPIO,
138};
139
140static struct platform_device cm_t3517_rtc_device = {
141 .name = "v3020",
142 .id = -1,
143 .dev = {
144 .platform_data = &cm_t3517_v3020_pdata,
145 }
146};
147
148static void __init cm_t3517_init_rtc(void)
149{
150 int err;
151
152 err = gpio_request_one(RTC_CS_EN_GPIO, GPIOF_OUT_INIT_HIGH,
153 "rtc cs en");
154 if (err) {
155 pr_err("CM-T3517: rtc cs en gpio request failed: %d\n", err);
156 return;
157 }
158
159 platform_device_register(&cm_t3517_rtc_device);
160}
161#else
162static inline void cm_t3517_init_rtc(void) {}
163#endif
164
165#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
166#define HSUSB1_RESET_GPIO (146)
167#define HSUSB2_RESET_GPIO (147)
168#define USB_HUB_RESET_GPIO (152)
169
170static struct usbhs_omap_board_data cm_t3517_ehci_pdata __initdata = {
171 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
172 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
173 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
174
175 .phy_reset = true,
176 .reset_gpio_port[0] = HSUSB1_RESET_GPIO,
177 .reset_gpio_port[1] = HSUSB2_RESET_GPIO,
178 .reset_gpio_port[2] = -EINVAL,
179};
180
181static int __init cm_t3517_init_usbh(void)
182{
183 int err;
184
185 err = gpio_request_one(USB_HUB_RESET_GPIO, GPIOF_OUT_INIT_LOW,
186 "usb hub rst");
187 if (err) {
188 pr_err("CM-T3517: usb hub rst gpio request failed: %d\n", err);
189 } else {
190 udelay(10);
191 gpio_set_value(USB_HUB_RESET_GPIO, 1);
192 msleep(1);
193 }
194
195 usbhs_init(&cm_t3517_ehci_pdata);
196
197 return 0;
198}
199#else
200static inline int cm_t3517_init_usbh(void)
201{
202 return 0;
203}
204#endif
205
206#if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE)
207static struct mtd_partition cm_t3517_nand_partitions[] = {
208 {
209 .name = "xloader",
210 .offset = 0, /* Offset = 0x00000 */
211 .size = 4 * NAND_BLOCK_SIZE,
212 .mask_flags = MTD_WRITEABLE
213 },
214 {
215 .name = "uboot",
216 .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */
217 .size = 15 * NAND_BLOCK_SIZE,
218 },
219 {
220 .name = "uboot environment",
221 .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */
222 .size = 2 * NAND_BLOCK_SIZE,
223 },
224 {
225 .name = "linux",
226 .offset = MTDPART_OFS_APPEND, /* Offset = 0x2A0000 */
227 .size = 32 * NAND_BLOCK_SIZE,
228 },
229 {
230 .name = "rootfs",
231 .offset = MTDPART_OFS_APPEND, /* Offset = 0x6A0000 */
232 .size = MTDPART_SIZ_FULL,
233 },
234};
235
236static struct omap_nand_platform_data cm_t3517_nand_data = {
237 .parts = cm_t3517_nand_partitions,
238 .nr_parts = ARRAY_SIZE(cm_t3517_nand_partitions),
239 .dma_channel = -1, /* disable DMA in OMAP NAND driver */
240 .cs = 0,
241};
242
243static void __init cm_t3517_init_nand(void)
244{
245 if (gpmc_nand_init(&cm_t3517_nand_data) < 0)
246 pr_err("CM-T3517: NAND initialization failed\n");
247}
248#else
249static inline void cm_t3517_init_nand(void) {}
250#endif
251
252static struct omap_board_config_kernel cm_t3517_config[] __initdata = {
253};
254
255static void __init cm_t3517_init_early(void)
256{
257 omap2_init_common_infrastructure();
258 omap2_init_common_devices(NULL, NULL);
259}
260
261#ifdef CONFIG_OMAP_MUX
262static struct omap_board_mux board_mux[] __initdata = {
263 /* GPIO186 - Green LED */
264 OMAP3_MUX(SYS_CLKOUT2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
265
266 /* RTC GPIOs: */
267 /* IO - GPIO153 */
268 OMAP3_MUX(MCBSP4_DR, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
269 /* WR# - GPIO154 */
270 OMAP3_MUX(MCBSP4_DX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
271 /* RD# - GPIO53 */
272 OMAP3_MUX(GPMC_NCS2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
273 /* CS# - GPIO163 */
274 OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
275 /* CS EN - GPIO160 */
276 OMAP3_MUX(MCBSP_CLKS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
277
278 /* HSUSB1 RESET */
279 OMAP3_MUX(UART2_TX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
280 /* HSUSB2 RESET */
281 OMAP3_MUX(UART2_RX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
282 /* CM-T3517 USB HUB nRESET */
283 OMAP3_MUX(MCBSP4_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
284
285 { .reg_offset = OMAP_MUX_TERMINATOR },
286};
287#endif
288
289static void __init cm_t3517_init(void)
290{
291 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
292 omap_serial_init();
293 omap_board_config = cm_t3517_config;
294 omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
295 cm_t3517_init_leds();
296 cm_t3517_init_nand();
297 cm_t3517_init_rtc();
298 cm_t3517_init_usbh();
299 cm_t3517_init_hecc();
300}
301
302MACHINE_START(CM_T3517, "Compulab CM-T3517")
303 .boot_params = 0x80000100,
304 .reserve = omap_reserve,
305 .map_io = omap3_map_io,
306 .init_early = cm_t3517_init_early,
307 .init_irq = omap_init_irq,
308 .init_machine = cm_t3517_init,
309 .timer = &omap_timer,
310MACHINE_END
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index a07086d6a0b2..34956ec83296 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -28,6 +28,7 @@
28#include <linux/mtd/mtd.h> 28#include <linux/mtd/mtd.h>
29#include <linux/mtd/partitions.h> 29#include <linux/mtd/partitions.h>
30#include <linux/mtd/nand.h> 30#include <linux/mtd/nand.h>
31#include <linux/mmc/host.h>
31 32
32#include <linux/regulator/machine.h> 33#include <linux/regulator/machine.h>
33#include <linux/i2c/twl.h> 34#include <linux/i2c/twl.h>
@@ -44,13 +45,12 @@
44#include <plat/gpmc.h> 45#include <plat/gpmc.h>
45#include <plat/nand.h> 46#include <plat/nand.h>
46#include <plat/usb.h> 47#include <plat/usb.h>
47#include <plat/timer-gp.h> 48#include <video/omapdss.h>
48#include <plat/display.h> 49#include <video/omap-panel-generic-dpi.h>
49 50
50#include <plat/mcspi.h> 51#include <plat/mcspi.h>
51#include <linux/input/matrix_keypad.h> 52#include <linux/input/matrix_keypad.h>
52#include <linux/spi/spi.h> 53#include <linux/spi/spi.h>
53#include <linux/spi/ads7846.h>
54#include <linux/dm9000.h> 54#include <linux/dm9000.h>
55#include <linux/interrupt.h> 55#include <linux/interrupt.h>
56 56
@@ -58,8 +58,8 @@
58 58
59#include "mux.h" 59#include "mux.h"
60#include "hsmmc.h" 60#include "hsmmc.h"
61 61#include "timer-gp.h"
62#define NAND_BLOCK_SIZE SZ_128K 62#include "common-board-devices.h"
63 63
64#define OMAP_DM9000_GPIO_IRQ 25 64#define OMAP_DM9000_GPIO_IRQ 25
65#define OMAP3_DEVKIT_TS_GPIO 27 65#define OMAP3_DEVKIT_TS_GPIO 27
@@ -95,17 +95,10 @@ static struct mtd_partition devkit8000_nand_partitions[] = {
95 }, 95 },
96}; 96};
97 97
98static struct omap_nand_platform_data devkit8000_nand_data = {
99 .options = NAND_BUSWIDTH_16,
100 .parts = devkit8000_nand_partitions,
101 .nr_parts = ARRAY_SIZE(devkit8000_nand_partitions),
102 .dma_channel = -1, /* disable DMA in OMAP NAND driver */
103};
104
105static struct omap2_hsmmc_info mmc[] = { 98static struct omap2_hsmmc_info mmc[] = {
106 { 99 {
107 .mmc = 1, 100 .mmc = 1,
108 .wires = 8, 101 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
109 .gpio_wp = 29, 102 .gpio_wp = 29,
110 }, 103 },
111 {} /* Terminator */ 104 {} /* Terminator */
@@ -113,58 +106,64 @@ static struct omap2_hsmmc_info mmc[] = {
113 106
114static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev) 107static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev)
115{ 108{
116 twl_i2c_write_u8(TWL4030_MODULE_GPIO, 0x80, REG_GPIODATADIR1);
117 twl_i2c_write_u8(TWL4030_MODULE_LED, 0x0, 0x0);
118
119 if (gpio_is_valid(dssdev->reset_gpio)) 109 if (gpio_is_valid(dssdev->reset_gpio))
120 gpio_set_value(dssdev->reset_gpio, 1); 110 gpio_set_value_cansleep(dssdev->reset_gpio, 1);
121 return 0; 111 return 0;
122} 112}
123 113
124static void devkit8000_panel_disable_lcd(struct omap_dss_device *dssdev) 114static void devkit8000_panel_disable_lcd(struct omap_dss_device *dssdev)
125{ 115{
126 if (gpio_is_valid(dssdev->reset_gpio)) 116 if (gpio_is_valid(dssdev->reset_gpio))
127 gpio_set_value(dssdev->reset_gpio, 0); 117 gpio_set_value_cansleep(dssdev->reset_gpio, 0);
128} 118}
129 119
130static int devkit8000_panel_enable_dvi(struct omap_dss_device *dssdev) 120static int devkit8000_panel_enable_dvi(struct omap_dss_device *dssdev)
131{ 121{
132 if (gpio_is_valid(dssdev->reset_gpio)) 122 if (gpio_is_valid(dssdev->reset_gpio))
133 gpio_set_value(dssdev->reset_gpio, 1); 123 gpio_set_value_cansleep(dssdev->reset_gpio, 1);
134 return 0; 124 return 0;
135} 125}
136 126
137static void devkit8000_panel_disable_dvi(struct omap_dss_device *dssdev) 127static void devkit8000_panel_disable_dvi(struct omap_dss_device *dssdev)
138{ 128{
139 if (gpio_is_valid(dssdev->reset_gpio)) 129 if (gpio_is_valid(dssdev->reset_gpio))
140 gpio_set_value(dssdev->reset_gpio, 0); 130 gpio_set_value_cansleep(dssdev->reset_gpio, 0);
141} 131}
142 132
143static struct regulator_consumer_supply devkit8000_vmmc1_supply = 133static struct regulator_consumer_supply devkit8000_vmmc1_supply =
144 REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); 134 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
145 135
146 136
147/* ads7846 on SPI */ 137/* ads7846 on SPI */
148static struct regulator_consumer_supply devkit8000_vio_supply = 138static struct regulator_consumer_supply devkit8000_vio_supply =
149 REGULATOR_SUPPLY("vcc", "spi2.0"); 139 REGULATOR_SUPPLY("vcc", "spi2.0");
150 140
141static struct panel_generic_dpi_data lcd_panel = {
142 .name = "generic",
143 .platform_enable = devkit8000_panel_enable_lcd,
144 .platform_disable = devkit8000_panel_disable_lcd,
145};
146
151static struct omap_dss_device devkit8000_lcd_device = { 147static struct omap_dss_device devkit8000_lcd_device = {
152 .name = "lcd", 148 .name = "lcd",
153 .driver_name = "generic_panel",
154 .type = OMAP_DISPLAY_TYPE_DPI, 149 .type = OMAP_DISPLAY_TYPE_DPI,
150 .driver_name = "generic_dpi_panel",
151 .data = &lcd_panel,
155 .phy.dpi.data_lines = 24, 152 .phy.dpi.data_lines = 24,
156 .reset_gpio = -EINVAL, /* will be replaced */
157 .platform_enable = devkit8000_panel_enable_lcd,
158 .platform_disable = devkit8000_panel_disable_lcd,
159}; 153};
154
155static struct panel_generic_dpi_data dvi_panel = {
156 .name = "generic",
157 .platform_enable = devkit8000_panel_enable_dvi,
158 .platform_disable = devkit8000_panel_disable_dvi,
159};
160
160static struct omap_dss_device devkit8000_dvi_device = { 161static struct omap_dss_device devkit8000_dvi_device = {
161 .name = "dvi", 162 .name = "dvi",
162 .driver_name = "generic_panel",
163 .type = OMAP_DISPLAY_TYPE_DPI, 163 .type = OMAP_DISPLAY_TYPE_DPI,
164 .driver_name = "generic_dpi_panel",
165 .data = &dvi_panel,
164 .phy.dpi.data_lines = 24, 166 .phy.dpi.data_lines = 24,
165 .reset_gpio = -EINVAL, /* will be replaced */
166 .platform_enable = devkit8000_panel_enable_dvi,
167 .platform_disable = devkit8000_panel_disable_dvi,
168}; 167};
169 168
170static struct omap_dss_device devkit8000_tv_device = { 169static struct omap_dss_device devkit8000_tv_device = {
@@ -187,18 +186,10 @@ static struct omap_dss_board_info devkit8000_dss_data = {
187 .default_device = &devkit8000_lcd_device, 186 .default_device = &devkit8000_lcd_device,
188}; 187};
189 188
190static struct platform_device devkit8000_dss_device = {
191 .name = "omapdss",
192 .id = -1,
193 .dev = {
194 .platform_data = &devkit8000_dss_data,
195 },
196};
197
198static struct regulator_consumer_supply devkit8000_vdda_dac_supply = 189static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
199 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 190 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
200 191
201static int board_keymap[] = { 192static uint32_t board_keymap[] = {
202 KEY(0, 0, KEY_1), 193 KEY(0, 0, KEY_1),
203 KEY(1, 0, KEY_2), 194 KEY(1, 0, KEY_2),
204 KEY(2, 0, KEY_3), 195 KEY(2, 0, KEY_3),
@@ -236,28 +227,33 @@ static struct gpio_led gpio_leds[];
236static int devkit8000_twl_gpio_setup(struct device *dev, 227static int devkit8000_twl_gpio_setup(struct device *dev,
237 unsigned gpio, unsigned ngpio) 228 unsigned gpio, unsigned ngpio)
238{ 229{
230 int ret;
231
239 omap_mux_init_gpio(29, OMAP_PIN_INPUT); 232 omap_mux_init_gpio(29, OMAP_PIN_INPUT);
240 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 233 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
241 mmc[0].gpio_cd = gpio + 0; 234 mmc[0].gpio_cd = gpio + 0;
242 omap2_hsmmc_init(mmc); 235 omap2_hsmmc_init(mmc);
243 236
244 /* link regulators to MMC adapters */
245 devkit8000_vmmc1_supply.dev = mmc[0].dev;
246
247 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ 237 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
248 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 238 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
249 239
250 /* gpio + 1 is "LCD_PWREN" (out, active high) */ 240 /* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */
251 devkit8000_lcd_device.reset_gpio = gpio + 1; 241 devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0;
252 gpio_request(devkit8000_lcd_device.reset_gpio, "LCD_PWREN"); 242 ret = gpio_request_one(devkit8000_lcd_device.reset_gpio,
253 /* Disable until needed */ 243 GPIOF_OUT_INIT_LOW, "LCD_PWREN");
254 gpio_direction_output(devkit8000_lcd_device.reset_gpio, 0); 244 if (ret < 0) {
245 devkit8000_lcd_device.reset_gpio = -EINVAL;
246 printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n");
247 }
255 248
256 /* gpio + 7 is "DVI_PD" (out, active low) */ 249 /* gpio + 7 is "DVI_PD" (out, active low) */
257 devkit8000_dvi_device.reset_gpio = gpio + 7; 250 devkit8000_dvi_device.reset_gpio = gpio + 7;
258 gpio_request(devkit8000_dvi_device.reset_gpio, "DVI PowerDown"); 251 ret = gpio_request_one(devkit8000_dvi_device.reset_gpio,
259 /* Disable until needed */ 252 GPIOF_OUT_INIT_LOW, "DVI PowerDown");
260 gpio_direction_output(devkit8000_dvi_device.reset_gpio, 0); 253 if (ret < 0) {
254 devkit8000_dvi_device.reset_gpio = -EINVAL;
255 printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n");
256 }
261 257
262 return 0; 258 return 0;
263} 259}
@@ -267,14 +263,15 @@ static struct twl4030_gpio_platform_data devkit8000_gpio_data = {
267 .irq_base = TWL4030_GPIO_IRQ_BASE, 263 .irq_base = TWL4030_GPIO_IRQ_BASE,
268 .irq_end = TWL4030_GPIO_IRQ_END, 264 .irq_end = TWL4030_GPIO_IRQ_END,
269 .use_leds = true, 265 .use_leds = true,
270 .pullups = BIT(1), 266 .pulldowns = BIT(1) | BIT(2) | BIT(6) | BIT(8) | BIT(13)
271 .pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8) | BIT(13)
272 | BIT(15) | BIT(16) | BIT(17), 267 | BIT(15) | BIT(16) | BIT(17),
273 .setup = devkit8000_twl_gpio_setup, 268 .setup = devkit8000_twl_gpio_setup,
274}; 269};
275 270
276static struct regulator_consumer_supply devkit8000_vpll1_supply = 271static struct regulator_consumer_supply devkit8000_vpll1_supplies[] = {
277 REGULATOR_SUPPLY("vdds_dsi", "omapdss"); 272 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
273 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
274};
278 275
279/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ 276/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
280static struct regulator_init_data devkit8000_vmmc1 = { 277static struct regulator_init_data devkit8000_vmmc1 = {
@@ -315,8 +312,8 @@ static struct regulator_init_data devkit8000_vpll1 = {
315 .valid_ops_mask = REGULATOR_CHANGE_MODE 312 .valid_ops_mask = REGULATOR_CHANGE_MODE
316 | REGULATOR_CHANGE_STATUS, 313 | REGULATOR_CHANGE_STATUS,
317 }, 314 },
318 .num_consumer_supplies = 1, 315 .num_consumer_supplies = ARRAY_SIZE(devkit8000_vpll1_supplies),
319 .consumer_supplies = &devkit8000_vpll1_supply, 316 .consumer_supplies = devkit8000_vpll1_supplies,
320}; 317};
321 318
322/* VAUX4 for ads7846 and nubs */ 319/* VAUX4 for ads7846 and nubs */
@@ -338,9 +335,7 @@ static struct twl4030_usb_data devkit8000_usb_data = {
338 .usb_mode = T2_USB_MODE_ULPI, 335 .usb_mode = T2_USB_MODE_ULPI,
339}; 336};
340 337
341static struct twl4030_codec_audio_data devkit8000_audio_data = { 338static struct twl4030_codec_audio_data devkit8000_audio_data;
342 .audio_mclk = 26000000,
343};
344 339
345static struct twl4030_codec_data devkit8000_codec_data = { 340static struct twl4030_codec_data devkit8000_codec_data = {
346 .audio_mclk = 26000000, 341 .audio_mclk = 26000000,
@@ -362,19 +357,9 @@ static struct twl4030_platform_data devkit8000_twldata = {
362 .keypad = &devkit8000_kp_data, 357 .keypad = &devkit8000_kp_data,
363}; 358};
364 359
365static struct i2c_board_info __initdata devkit8000_i2c_boardinfo[] = {
366 {
367 I2C_BOARD_INFO("tps65930", 0x48),
368 .flags = I2C_CLIENT_WAKE,
369 .irq = INT_34XX_SYS_NIRQ,
370 .platform_data = &devkit8000_twldata,
371 },
372};
373
374static int __init devkit8000_i2c_init(void) 360static int __init devkit8000_i2c_init(void)
375{ 361{
376 omap_register_i2c_bus(1, 2600, devkit8000_i2c_boardinfo, 362 omap3_pmic_init("tps65930", &devkit8000_twldata);
377 ARRAY_SIZE(devkit8000_i2c_boardinfo));
378 /* Bus 3 is attached to the DVI port where devices like the pico DLP 363 /* Bus 3 is attached to the DVI port where devices like the pico DLP
379 * projector don't work reliably with 400kHz */ 364 * projector don't work reliably with 400kHz */
380 omap_register_i2c_bus(3, 400, NULL, 0); 365 omap_register_i2c_bus(3, 400, NULL, 0);
@@ -444,67 +429,21 @@ static struct platform_device keys_gpio = {
444}; 429};
445 430
446 431
432static void __init devkit8000_init_early(void)
433{
434 omap2_init_common_infrastructure();
435 omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
436 mt46h32m32lf6_sdrc_params);
437}
438
447static void __init devkit8000_init_irq(void) 439static void __init devkit8000_init_irq(void)
448{ 440{
449 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
450 mt46h32m32lf6_sdrc_params);
451 omap_init_irq(); 441 omap_init_irq();
452#ifdef CONFIG_OMAP_32K_TIMER 442#ifdef CONFIG_OMAP_32K_TIMER
453 omap2_gp_clockevent_set_gptimer(12); 443 omap2_gp_clockevent_set_gptimer(12);
454#endif 444#endif
455 omap_gpio_init();
456} 445}
457 446
458static void __init devkit8000_ads7846_init(void)
459{
460 int gpio = OMAP3_DEVKIT_TS_GPIO;
461 int ret;
462
463 ret = gpio_request(gpio, "ads7846_pen_down");
464 if (ret < 0) {
465 printk(KERN_ERR "Failed to request GPIO %d for "
466 "ads7846 pen down IRQ\n", gpio);
467 return;
468 }
469
470 gpio_direction_input(gpio);
471}
472
473static int ads7846_get_pendown_state(void)
474{
475 return !gpio_get_value(OMAP3_DEVKIT_TS_GPIO);
476}
477
478static struct ads7846_platform_data ads7846_config = {
479 .x_max = 0x0fff,
480 .y_max = 0x0fff,
481 .x_plate_ohms = 180,
482 .pressure_max = 255,
483 .debounce_max = 10,
484 .debounce_tol = 5,
485 .debounce_rep = 1,
486 .get_pendown_state = ads7846_get_pendown_state,
487 .keep_vref_on = 1,
488 .settle_delay_usecs = 150,
489};
490
491static struct omap2_mcspi_device_config ads7846_mcspi_config = {
492 .turbo_mode = 0,
493 .single_channel = 1, /* 0: slave, 1: master */
494};
495
496static struct spi_board_info devkit8000_spi_board_info[] __initdata = {
497 {
498 .modalias = "ads7846",
499 .bus_num = 2,
500 .chip_select = 0,
501 .max_speed_hz = 1500000,
502 .controller_data = &ads7846_mcspi_config,
503 .irq = OMAP_GPIO_IRQ(OMAP3_DEVKIT_TS_GPIO),
504 .platform_data = &ads7846_config,
505 }
506};
507
508#define OMAP_DM9000_BASE 0x2c000000 447#define OMAP_DM9000_BASE 0x2c000000
509 448
510static struct resource omap_dm9000_resources[] = { 449static struct resource omap_dm9000_resources[] = {
@@ -542,14 +481,14 @@ static void __init omap_dm9000_init(void)
542{ 481{
543 unsigned char *eth_addr = omap_dm9000_platdata.dev_addr; 482 unsigned char *eth_addr = omap_dm9000_platdata.dev_addr;
544 struct omap_die_id odi; 483 struct omap_die_id odi;
484 int ret;
545 485
546 if (gpio_request(OMAP_DM9000_GPIO_IRQ, "dm9000 irq") < 0) { 486 ret = gpio_request_one(OMAP_DM9000_GPIO_IRQ, GPIOF_IN, "dm9000 irq");
487 if (ret < 0) {
547 printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n", 488 printk(KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n",
548 OMAP_DM9000_GPIO_IRQ); 489 OMAP_DM9000_GPIO_IRQ);
549 return; 490 return;
550 } 491 }
551
552 gpio_direction_input(OMAP_DM9000_GPIO_IRQ);
553 492
554 /* init the mac address using DIE id */ 493 /* init the mac address using DIE id */
555 omap_get_die_id(&odi); 494 omap_get_die_id(&odi);
@@ -563,56 +502,16 @@ static void __init omap_dm9000_init(void)
563} 502}
564 503
565static struct platform_device *devkit8000_devices[] __initdata = { 504static struct platform_device *devkit8000_devices[] __initdata = {
566 &devkit8000_dss_device,
567 &leds_gpio, 505 &leds_gpio,
568 &keys_gpio, 506 &keys_gpio,
569 &omap_dm9000_dev, 507 &omap_dm9000_dev,
570}; 508};
571 509
572static void __init devkit8000_flash_init(void) 510static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
573{
574 u8 cs = 0;
575 u8 nandcs = GPMC_CS_NUM + 1;
576
577 /* find out the chip-select on which NAND exists */
578 while (cs < GPMC_CS_NUM) {
579 u32 ret = 0;
580 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
581
582 if ((ret & 0xC00) == 0x800) {
583 printk(KERN_INFO "Found NAND on CS%d\n", cs);
584 if (nandcs > GPMC_CS_NUM)
585 nandcs = cs;
586 }
587 cs++;
588 }
589
590 if (nandcs > GPMC_CS_NUM) {
591 printk(KERN_INFO "NAND: Unable to find configuration "
592 "in GPMC\n ");
593 return;
594 }
595 511
596 if (nandcs < GPMC_CS_NUM) { 512 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
597 devkit8000_nand_data.cs = nandcs; 513 .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
598 514 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
599 printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
600 if (gpmc_nand_init(&devkit8000_nand_data) < 0)
601 printk(KERN_ERR "Unable to register NAND device\n");
602 }
603}
604
605static struct omap_musb_board_data musb_board_data = {
606 .interface_type = MUSB_INTERFACE_ULPI,
607 .mode = MUSB_OTG,
608 .power = 100,
609};
610
611static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
612
613 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
614 .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
615 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
616 515
617 .phy_reset = true, 516 .phy_reset = true,
618 .reset_gpio_port[0] = -EINVAL, 517 .reset_gpio_port[0] = -EINVAL,
@@ -620,6 +519,7 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
620 .reset_gpio_port[2] = -EINVAL 519 .reset_gpio_port[2] = -EINVAL
621}; 520};
622 521
522#ifdef CONFIG_OMAP_MUX
623static struct omap_board_mux board_mux[] __initdata = { 523static struct omap_board_mux board_mux[] __initdata = {
624 /* nCS and IRQ for Devkit8000 ethernet */ 524 /* nCS and IRQ for Devkit8000 ethernet */
625 OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE0), 525 OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE0),
@@ -773,6 +673,7 @@ static struct omap_board_mux board_mux[] __initdata = {
773 673
774 { .reg_offset = OMAP_MUX_TERMINATOR }, 674 { .reg_offset = OMAP_MUX_TERMINATOR },
775}; 675};
676#endif
776 677
777static void __init devkit8000_init(void) 678static void __init devkit8000_init(void)
778{ 679{
@@ -785,14 +686,14 @@ static void __init devkit8000_init(void)
785 platform_add_devices(devkit8000_devices, 686 platform_add_devices(devkit8000_devices,
786 ARRAY_SIZE(devkit8000_devices)); 687 ARRAY_SIZE(devkit8000_devices));
787 688
788 spi_register_board_info(devkit8000_spi_board_info, 689 omap_display_init(&devkit8000_dss_data);
789 ARRAY_SIZE(devkit8000_spi_board_info));
790 690
791 devkit8000_ads7846_init(); 691 omap_ads7846_init(2, OMAP3_DEVKIT_TS_GPIO, 0, NULL);
792 692
793 usb_musb_init(&musb_board_data); 693 usb_musb_init(NULL);
794 usb_ehci_init(&ehci_pdata); 694 usbhs_init(&usbhs_bdata);
795 devkit8000_flash_init(); 695 omap_nand_flash_init(NAND_BUSWIDTH_16, devkit8000_nand_partitions,
696 ARRAY_SIZE(devkit8000_nand_partitions));
796 697
797 /* Ensure SDRC pins are mux'd for self-refresh */ 698 /* Ensure SDRC pins are mux'd for self-refresh */
798 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); 699 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
@@ -800,11 +701,10 @@ static void __init devkit8000_init(void)
800} 701}
801 702
802MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") 703MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
803 .phys_io = 0x48000000,
804 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
805 .boot_params = 0x80000100, 704 .boot_params = 0x80000100,
806 .map_io = omap3_map_io,
807 .reserve = omap_reserve, 705 .reserve = omap_reserve,
706 .map_io = omap3_map_io,
707 .init_early = devkit8000_init_early,
808 .init_irq = devkit8000_init_irq, 708 .init_irq = devkit8000_init_irq,
809 .init_machine = devkit8000_init, 709 .init_machine = devkit8000_init,
810 .timer = &omap_timer, 710 .timer = &omap_timer,
diff --git a/arch/arm/mach-omap2/board-flash.c b/arch/arm/mach-omap2/board-flash.c
index ac834aa7abf6..729892fdcf2e 100644
--- a/arch/arm/mach-omap2/board-flash.c
+++ b/arch/arm/mach-omap2/board-flash.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * board-sdp-flash.c 2 * board-flash.c
3 * Modified from mach-omap2/board-3430sdp-flash.c 3 * Modified from mach-omap2/board-3430sdp-flash.c
4 * 4 *
5 * Copyright (C) 2009 Nokia Corporation 5 * Copyright (C) 2009 Nokia Corporation
@@ -16,12 +16,14 @@
16#include <linux/platform_device.h> 16#include <linux/platform_device.h>
17#include <linux/mtd/physmap.h> 17#include <linux/mtd/physmap.h>
18#include <linux/io.h> 18#include <linux/io.h>
19#include <plat/irqs.h>
19 20
20#include <plat/gpmc.h> 21#include <plat/gpmc.h>
21#include <plat/nand.h> 22#include <plat/nand.h>
22#include <plat/onenand.h> 23#include <plat/onenand.h>
23#include <plat/tc.h> 24#include <plat/tc.h>
24#include <mach/board-flash.h> 25
26#include "board-flash.h"
25 27
26#define REG_FPGA_REV 0x10 28#define REG_FPGA_REV 0x10
27#define REG_FPGA_DIP_SWITCH_INPUT2 0x60 29#define REG_FPGA_DIP_SWITCH_INPUT2 0x60
@@ -72,11 +74,11 @@ __init board_nor_init(struct mtd_partition *nor_parts, u8 nr_parts, u8 cs)
72 + FLASH_SIZE_SDPV1 - 1; 74 + FLASH_SIZE_SDPV1 - 1;
73 } 75 }
74 if (err < 0) { 76 if (err < 0) {
75 printk(KERN_ERR "NOR: Can't request GPMC CS\n"); 77 pr_err("NOR: Can't request GPMC CS\n");
76 return; 78 return;
77 } 79 }
78 if (platform_device_register(&board_nor_device) < 0) 80 if (platform_device_register(&board_nor_device) < 0)
79 printk(KERN_ERR "Unable to register NOR device\n"); 81 pr_err("Unable to register NOR device\n");
80} 82}
81 83
82#if defined(CONFIG_MTD_ONENAND_OMAP2) || \ 84#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
@@ -138,17 +140,21 @@ static struct omap_nand_platform_data board_nand_data = {
138}; 140};
139 141
140void 142void
141__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs) 143__init board_nand_init(struct mtd_partition *nand_parts,
144 u8 nr_parts, u8 cs, int nand_type)
142{ 145{
143 board_nand_data.cs = cs; 146 board_nand_data.cs = cs;
144 board_nand_data.parts = nand_parts; 147 board_nand_data.parts = nand_parts;
145 board_nand_data.nr_parts = nr_parts; 148 board_nand_data.nr_parts = nr_parts;
149 board_nand_data.devsize = nand_type;
146 150
151 board_nand_data.ecc_opt = OMAP_ECC_HAMMING_CODE_DEFAULT;
152 board_nand_data.gpmc_irq = OMAP_GPMC_IRQ_BASE + cs;
147 gpmc_nand_init(&board_nand_data); 153 gpmc_nand_init(&board_nand_data);
148} 154}
149#else 155#else
150void 156void
151__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs) 157__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs, int nand_type)
152{ 158{
153} 159}
154#endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */ 160#endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */
@@ -188,12 +194,12 @@ unmap:
188} 194}
189 195
190/** 196/**
191 * sdp3430_flash_init - Identify devices connected to GPMC and register. 197 * board_flash_init - Identify devices connected to GPMC and register.
192 * 198 *
193 * @return - void. 199 * @return - void.
194 */ 200 */
195void board_flash_init(struct flash_partitions partition_info[], 201void board_flash_init(struct flash_partitions partition_info[],
196 char chip_sel_board[][GPMC_CS_NUM]) 202 char chip_sel_board[][GPMC_CS_NUM], int nand_type)
197{ 203{
198 u8 cs = 0; 204 u8 cs = 0;
199 u8 norcs = GPMC_CS_NUM + 1; 205 u8 norcs = GPMC_CS_NUM + 1;
@@ -207,7 +213,7 @@ void board_flash_init(struct flash_partitions partition_info[],
207 */ 213 */
208 idx = get_gpmc0_type(); 214 idx = get_gpmc0_type();
209 if (idx >= MAX_SUPPORTED_GPMC_CONFIG) { 215 if (idx >= MAX_SUPPORTED_GPMC_CONFIG) {
210 printk(KERN_ERR "%s: Invalid chip select: %d\n", __func__, cs); 216 pr_err("%s: Invalid chip select: %d\n", __func__, cs);
211 return; 217 return;
212 } 218 }
213 config_sel = (unsigned char *)(chip_sel_board[idx]); 219 config_sel = (unsigned char *)(chip_sel_board[idx]);
@@ -231,23 +237,20 @@ void board_flash_init(struct flash_partitions partition_info[],
231 } 237 }
232 238
233 if (norcs > GPMC_CS_NUM) 239 if (norcs > GPMC_CS_NUM)
234 printk(KERN_INFO "NOR: Unable to find configuration " 240 pr_err("NOR: Unable to find configuration in GPMC\n");
235 "in GPMC\n");
236 else 241 else
237 board_nor_init(partition_info[0].parts, 242 board_nor_init(partition_info[0].parts,
238 partition_info[0].nr_parts, norcs); 243 partition_info[0].nr_parts, norcs);
239 244
240 if (onenandcs > GPMC_CS_NUM) 245 if (onenandcs > GPMC_CS_NUM)
241 printk(KERN_INFO "OneNAND: Unable to find configuration " 246 pr_err("OneNAND: Unable to find configuration in GPMC\n");
242 "in GPMC\n");
243 else 247 else
244 board_onenand_init(partition_info[1].parts, 248 board_onenand_init(partition_info[1].parts,
245 partition_info[1].nr_parts, onenandcs); 249 partition_info[1].nr_parts, onenandcs);
246 250
247 if (nandcs > GPMC_CS_NUM) 251 if (nandcs > GPMC_CS_NUM)
248 printk(KERN_INFO "NAND: Unable to find configuration " 252 pr_err("NAND: Unable to find configuration in GPMC\n");
249 "in GPMC\n");
250 else 253 else
251 board_nand_init(partition_info[2].parts, 254 board_nand_init(partition_info[2].parts,
252 partition_info[2].nr_parts, nandcs); 255 partition_info[2].nr_parts, nandcs, nand_type);
253} 256}
diff --git a/arch/arm/mach-omap2/include/mach/board-flash.h b/arch/arm/mach-omap2/board-flash.h
index b2242ae2bb6f..c240a3f8d163 100644
--- a/arch/arm/mach-omap2/include/mach/board-flash.h
+++ b/arch/arm/mach-omap2/board-flash.h
@@ -25,4 +25,6 @@ struct flash_partitions {
25}; 25};
26 26
27extern void board_flash_init(struct flash_partitions [], 27extern void board_flash_init(struct flash_partitions [],
28 char chip_sel[][GPMC_CS_NUM]); 28 char chip_sel[][GPMC_CS_NUM], int nand_type);
29extern void board_nand_init(struct mtd_partition *nand_parts,
30 u8 nr_parts, u8 cs, int nand_type);
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index 3482b99e8c86..73e3c31e8508 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -33,33 +33,44 @@
33static struct omap_board_config_kernel generic_config[] = { 33static struct omap_board_config_kernel generic_config[] = {
34}; 34};
35 35
36static void __init omap_generic_init_irq(void) 36static void __init omap_generic_init_early(void)
37{ 37{
38 omap_board_config = generic_config; 38 omap2_init_common_infrastructure();
39 omap_board_config_size = ARRAY_SIZE(generic_config); 39 omap2_init_common_devices(NULL, NULL);
40 omap2_init_common_hw(NULL, NULL);
41 omap_init_irq();
42} 40}
43 41
44static void __init omap_generic_init(void) 42static void __init omap_generic_init(void)
45{ 43{
46 omap_serial_init(); 44 omap_serial_init();
45 omap_board_config = generic_config;
46 omap_board_config_size = ARRAY_SIZE(generic_config);
47} 47}
48 48
49static void __init omap_generic_map_io(void) 49static void __init omap_generic_map_io(void)
50{ 50{
51 omap2_set_globals_242x(); /* should be 242x, 243x, or 343x */ 51 if (cpu_is_omap242x()) {
52 omap242x_map_common_io(); 52 omap2_set_globals_242x();
53 omap242x_map_common_io();
54 } else if (cpu_is_omap243x()) {
55 omap2_set_globals_243x();
56 omap243x_map_common_io();
57 } else if (cpu_is_omap34xx()) {
58 omap2_set_globals_3xxx();
59 omap34xx_map_common_io();
60 } else if (cpu_is_omap44xx()) {
61 omap2_set_globals_443x();
62 omap44xx_map_common_io();
63 }
53} 64}
54 65
66/* XXX This machine entry name should be updated */
55MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx") 67MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
56 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ 68 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
57 .phys_io = 0x48000000,
58 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
59 .boot_params = 0x80000100, 69 .boot_params = 0x80000100,
60 .map_io = omap_generic_map_io,
61 .reserve = omap_reserve, 70 .reserve = omap_reserve,
62 .init_irq = omap_generic_init_irq, 71 .map_io = omap_generic_map_io,
72 .init_early = omap_generic_init_early,
73 .init_irq = omap_init_irq,
63 .init_machine = omap_generic_init, 74 .init_machine = omap_generic_init,
64 .timer = &omap_timer, 75 .timer = &omap_timer,
65MACHINE_END 76MACHINE_END
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c
index e09bd686389f..bac7933b8cbb 100644
--- a/arch/arm/mach-omap2/board-h4.c
+++ b/arch/arm/mach-omap2/board-h4.c
@@ -31,7 +31,6 @@
31#include <asm/mach/arch.h> 31#include <asm/mach/arch.h>
32#include <asm/mach/map.h> 32#include <asm/mach/map.h>
33 33
34#include <plat/control.h>
35#include <mach/gpio.h> 34#include <mach/gpio.h>
36#include <plat/usb.h> 35#include <plat/usb.h>
37#include <plat/board.h> 36#include <plat/board.h>
@@ -42,6 +41,7 @@
42#include <plat/gpmc.h> 41#include <plat/gpmc.h>
43 42
44#include "mux.h" 43#include "mux.h"
44#include "control.h"
45 45
46#define H4_FLASH_CS 0 46#define H4_FLASH_CS 0
47#define H4_SMC91X_CS 1 47#define H4_SMC91X_CS 1
@@ -51,38 +51,37 @@
51static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 }; 51static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 };
52static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 }; 52static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 };
53 53
54static int h4_keymap[] = { 54static const unsigned int h4_keymap[] = {
55 KEY(0, 0, KEY_LEFT), 55 KEY(0, 0, KEY_LEFT),
56 KEY(0, 1, KEY_RIGHT), 56 KEY(1, 0, KEY_RIGHT),
57 KEY(0, 2, KEY_A), 57 KEY(2, 0, KEY_A),
58 KEY(0, 3, KEY_B), 58 KEY(3, 0, KEY_B),
59 KEY(0, 4, KEY_C), 59 KEY(4, 0, KEY_C),
60 KEY(1, 0, KEY_DOWN), 60 KEY(0, 1, KEY_DOWN),
61 KEY(1, 1, KEY_UP), 61 KEY(1, 1, KEY_UP),
62 KEY(1, 2, KEY_E), 62 KEY(2, 1, KEY_E),
63 KEY(1, 3, KEY_F), 63 KEY(3, 1, KEY_F),
64 KEY(1, 4, KEY_G), 64 KEY(4, 1, KEY_G),
65 KEY(2, 0, KEY_ENTER), 65 KEY(0, 2, KEY_ENTER),
66 KEY(2, 1, KEY_I), 66 KEY(1, 2, KEY_I),
67 KEY(2, 2, KEY_J), 67 KEY(2, 2, KEY_J),
68 KEY(2, 3, KEY_K), 68 KEY(3, 2, KEY_K),
69 KEY(2, 4, KEY_3), 69 KEY(4, 2, KEY_3),
70 KEY(3, 0, KEY_M), 70 KEY(0, 3, KEY_M),
71 KEY(3, 1, KEY_N), 71 KEY(1, 3, KEY_N),
72 KEY(3, 2, KEY_O), 72 KEY(2, 3, KEY_O),
73 KEY(3, 3, KEY_P), 73 KEY(3, 3, KEY_P),
74 KEY(3, 4, KEY_Q), 74 KEY(4, 3, KEY_Q),
75 KEY(4, 0, KEY_R), 75 KEY(0, 4, KEY_R),
76 KEY(4, 1, KEY_4), 76 KEY(1, 4, KEY_4),
77 KEY(4, 2, KEY_T), 77 KEY(2, 4, KEY_T),
78 KEY(4, 3, KEY_U), 78 KEY(3, 4, KEY_U),
79 KEY(4, 4, KEY_ENTER), 79 KEY(4, 4, KEY_ENTER),
80 KEY(5, 0, KEY_V), 80 KEY(0, 5, KEY_V),
81 KEY(5, 1, KEY_W), 81 KEY(1, 5, KEY_W),
82 KEY(5, 2, KEY_L), 82 KEY(2, 5, KEY_L),
83 KEY(5, 3, KEY_S), 83 KEY(3, 5, KEY_S),
84 KEY(5, 4, KEY_ENTER), 84 KEY(4, 5, KEY_ENTER),
85 0
86}; 85};
87 86
88static struct mtd_partition h4_partitions[] = { 87static struct mtd_partition h4_partitions[] = {
@@ -136,12 +135,16 @@ static struct platform_device h4_flash_device = {
136 .resource = &h4_flash_resource, 135 .resource = &h4_flash_resource,
137}; 136};
138 137
138static const struct matrix_keymap_data h4_keymap_data = {
139 .keymap = h4_keymap,
140 .keymap_size = ARRAY_SIZE(h4_keymap),
141};
142
139static struct omap_kp_platform_data h4_kp_data = { 143static struct omap_kp_platform_data h4_kp_data = {
140 .rows = 6, 144 .rows = 6,
141 .cols = 7, 145 .cols = 7,
142 .keymap = h4_keymap, 146 .keymap_data = &h4_keymap_data,
143 .keymapsize = ARRAY_SIZE(h4_keymap), 147 .rep = true,
144 .rep = 1,
145 .row_gpios = row_gpios, 148 .row_gpios = row_gpios,
146 .col_gpios = col_gpios, 149 .col_gpios = col_gpios,
147}; 150};
@@ -283,18 +286,19 @@ static struct omap_usb_config h4_usb_config __initdata = {
283 .hmc_mode = 0x00, /* 0:dev|otg 1:disable 2:disable */ 286 .hmc_mode = 0x00, /* 0:dev|otg 1:disable 2:disable */
284}; 287};
285 288
286static struct omap_board_config_kernel h4_config[] = { 289static struct omap_board_config_kernel h4_config[] __initdata = {
287 { OMAP_TAG_LCD, &h4_lcd_config }, 290 { OMAP_TAG_LCD, &h4_lcd_config },
288}; 291};
289 292
293static void __init omap_h4_init_early(void)
294{
295 omap2_init_common_infrastructure();
296 omap2_init_common_devices(NULL, NULL);
297}
298
290static void __init omap_h4_init_irq(void) 299static void __init omap_h4_init_irq(void)
291{ 300{
292 omap_board_config = h4_config;
293 omap_board_config_size = ARRAY_SIZE(h4_config);
294 omap2_init_common_hw(NULL, NULL);
295 omap_init_irq(); 301 omap_init_irq();
296 omap_gpio_init();
297 h4_init_flash();
298} 302}
299 303
300static struct at24_platform_data m24c01 = { 304static struct at24_platform_data m24c01 = {
@@ -321,14 +325,15 @@ static struct i2c_board_info __initdata h4_i2c_board_info[] = {
321static struct omap_board_mux board_mux[] __initdata = { 325static struct omap_board_mux board_mux[] __initdata = {
322 { .reg_offset = OMAP_MUX_TERMINATOR }, 326 { .reg_offset = OMAP_MUX_TERMINATOR },
323}; 327};
324#else
325#define board_mux NULL
326#endif 328#endif
327 329
328static void __init omap_h4_init(void) 330static void __init omap_h4_init(void)
329{ 331{
330 omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAF); 332 omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAF);
331 333
334 omap_board_config = h4_config;
335 omap_board_config_size = ARRAY_SIZE(h4_config);
336
332 /* 337 /*
333 * Make sure the serial ports are muxed on at this point. 338 * Make sure the serial ports are muxed on at this point.
334 * You have to mux them off in device drivers later on 339 * You have to mux them off in device drivers later on
@@ -366,6 +371,7 @@ static void __init omap_h4_init(void)
366 platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices)); 371 platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices));
367 omap2_usbfs_init(&h4_usb_config); 372 omap2_usbfs_init(&h4_usb_config);
368 omap_serial_init(); 373 omap_serial_init();
374 h4_init_flash();
369} 375}
370 376
371static void __init omap_h4_map_io(void) 377static void __init omap_h4_map_io(void)
@@ -376,11 +382,10 @@ static void __init omap_h4_map_io(void)
376 382
377MACHINE_START(OMAP_H4, "OMAP2420 H4 board") 383MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
378 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ 384 /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
379 .phys_io = 0x48000000,
380 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
381 .boot_params = 0x80000100, 385 .boot_params = 0x80000100,
382 .map_io = omap_h4_map_io,
383 .reserve = omap_reserve, 386 .reserve = omap_reserve,
387 .map_io = omap_h4_map_io,
388 .init_early = omap_h4_init_early,
384 .init_irq = omap_h4_init_irq, 389 .init_irq = omap_h4_init_irq,
385 .init_machine = omap_h4_init, 390 .init_machine = omap_h4_init,
386 .timer = &omap_timer, 391 .timer = &omap_timer,
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 175f04339761..0c1bfca3f731 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -17,9 +17,12 @@
17#include <linux/io.h> 17#include <linux/io.h>
18#include <linux/gpio.h> 18#include <linux/gpio.h>
19#include <linux/interrupt.h> 19#include <linux/interrupt.h>
20#include <linux/input.h>
20 21
21#include <linux/regulator/machine.h> 22#include <linux/regulator/machine.h>
23#include <linux/regulator/fixed.h>
22#include <linux/i2c/twl.h> 24#include <linux/i2c/twl.h>
25#include <linux/mmc/host.h>
23 26
24#include <asm/mach-types.h> 27#include <asm/mach-types.h>
25#include <asm/mach/arch.h> 28#include <asm/mach/arch.h>
@@ -28,22 +31,84 @@
28#include <plat/common.h> 31#include <plat/common.h>
29#include <plat/gpmc.h> 32#include <plat/gpmc.h>
30#include <plat/usb.h> 33#include <plat/usb.h>
31#include <plat/display.h> 34#include <video/omapdss.h>
35#include <video/omap-panel-generic-dpi.h>
32#include <plat/onenand.h> 36#include <plat/onenand.h>
33 37
34#include "mux.h" 38#include "mux.h"
35#include "hsmmc.h" 39#include "hsmmc.h"
36#include "sdram-numonyx-m65kxxxxam.h" 40#include "sdram-numonyx-m65kxxxxam.h"
41#include "common-board-devices.h"
37 42
38#define IGEP2_SMSC911X_CS 5 43#define IGEP2_SMSC911X_CS 5
39#define IGEP2_SMSC911X_GPIO 176 44#define IGEP2_SMSC911X_GPIO 176
40#define IGEP2_GPIO_USBH_NRESET 24 45#define IGEP2_GPIO_USBH_NRESET 24
41#define IGEP2_GPIO_LED0_GREEN 26 46#define IGEP2_GPIO_LED0_GREEN 26
42#define IGEP2_GPIO_LED0_RED 27 47#define IGEP2_GPIO_LED0_RED 27
43#define IGEP2_GPIO_LED1_RED 28 48#define IGEP2_GPIO_LED1_RED 28
44#define IGEP2_GPIO_DVI_PUP 170 49#define IGEP2_GPIO_DVI_PUP 170
45#define IGEP2_GPIO_WIFI_NPD 94 50
46#define IGEP2_GPIO_WIFI_NRESET 95 51#define IGEP2_RB_GPIO_WIFI_NPD 94
52#define IGEP2_RB_GPIO_WIFI_NRESET 95
53#define IGEP2_RB_GPIO_BT_NRESET 137
54#define IGEP2_RC_GPIO_WIFI_NPD 138
55#define IGEP2_RC_GPIO_WIFI_NRESET 139
56#define IGEP2_RC_GPIO_BT_NRESET 137
57
58#define IGEP3_GPIO_LED0_GREEN 54
59#define IGEP3_GPIO_LED0_RED 53
60#define IGEP3_GPIO_LED1_RED 16
61#define IGEP3_GPIO_USBH_NRESET 183
62
63/*
64 * IGEP2 Hardware Revision Table
65 *
66 * --------------------------------------------------------------------------
67 * | Id. | Hw Rev. | HW0 (28) | WIFI_NPD | WIFI_NRESET | BT_NRESET |
68 * --------------------------------------------------------------------------
69 * | 0 | B | high | gpio94 | gpio95 | - |
70 * | 0 | B/C (B-compatible) | high | gpio94 | gpio95 | gpio137 |
71 * | 1 | C | low | gpio138 | gpio139 | gpio137 |
72 * --------------------------------------------------------------------------
73 */
74
75#define IGEP2_BOARD_HWREV_B 0
76#define IGEP2_BOARD_HWREV_C 1
77#define IGEP3_BOARD_HWREV 2
78
79static u8 hwrev;
80
81static void __init igep2_get_revision(void)
82{
83 u8 ret;
84
85 if (machine_is_igep0030()) {
86 hwrev = IGEP3_BOARD_HWREV;
87 return;
88 }
89
90 omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);
91
92 if (gpio_request_one(IGEP2_GPIO_LED1_RED, GPIOF_IN, "GPIO_HW0_REV")) {
93 pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");
94 pr_err("IGEP2: Unknown Hardware Revision\n");
95 return;
96 }
97
98 ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
99 if (ret == 0) {
100 pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
101 hwrev = IGEP2_BOARD_HWREV_C;
102 } else if (ret == 1) {
103 pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
104 hwrev = IGEP2_BOARD_HWREV_B;
105 } else {
106 pr_err("IGEP2: Unknown Hardware Revision\n");
107 hwrev = -1;
108 }
109
110 gpio_free(IGEP2_GPIO_LED1_RED);
111}
47 112
48#if defined(CONFIG_MTD_ONENAND_OMAP2) || \ 113#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
49 defined(CONFIG_MTD_ONENAND_OMAP2_MODULE) 114 defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
@@ -58,7 +123,7 @@
58 * So MTD regards it as 4KiB page size and 256KiB block size 64*(2*2048) 123 * So MTD regards it as 4KiB page size and 256KiB block size 64*(2*2048)
59 */ 124 */
60 125
61static struct mtd_partition igep2_onenand_partitions[] = { 126static struct mtd_partition igep_onenand_partitions[] = {
62 { 127 {
63 .name = "X-Loader", 128 .name = "X-Loader",
64 .offset = 0, 129 .offset = 0,
@@ -86,137 +151,82 @@ static struct mtd_partition igep2_onenand_partitions[] = {
86 }, 151 },
87}; 152};
88 153
89static int igep2_onenand_setup(void __iomem *onenand_base, int freq) 154static struct omap_onenand_platform_data igep_onenand_data = {
90{ 155 .parts = igep_onenand_partitions,
91 /* nothing is required to be setup for onenand as of now */ 156 .nr_parts = ARRAY_SIZE(igep_onenand_partitions),
92 return 0;
93}
94
95static struct omap_onenand_platform_data igep2_onenand_data = {
96 .parts = igep2_onenand_partitions,
97 .nr_parts = ARRAY_SIZE(igep2_onenand_partitions),
98 .onenand_setup = igep2_onenand_setup,
99 .dma_channel = -1, /* disable DMA in OMAP OneNAND driver */ 157 .dma_channel = -1, /* disable DMA in OMAP OneNAND driver */
100}; 158};
101 159
102static struct platform_device igep2_onenand_device = { 160static struct platform_device igep_onenand_device = {
103 .name = "omap2-onenand", 161 .name = "omap2-onenand",
104 .id = -1, 162 .id = -1,
105 .dev = { 163 .dev = {
106 .platform_data = &igep2_onenand_data, 164 .platform_data = &igep_onenand_data,
107 }, 165 },
108}; 166};
109 167
110void __init igep2_flash_init(void) 168static void __init igep_flash_init(void)
111{ 169{
112 u8 cs = 0; 170 u8 cs = 0;
113 u8 onenandcs = GPMC_CS_NUM + 1; 171 u8 onenandcs = GPMC_CS_NUM + 1;
114 172
115 while (cs < GPMC_CS_NUM) { 173 for (cs = 0; cs < GPMC_CS_NUM; cs++) {
116 u32 ret = 0; 174 u32 ret;
117 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); 175 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
118 176
119 /* Check if NAND/oneNAND is configured */ 177 /* Check if NAND/oneNAND is configured */
120 if ((ret & 0xC00) == 0x800) 178 if ((ret & 0xC00) == 0x800)
121 /* NAND found */ 179 /* NAND found */
122 pr_err("IGEP v2: Unsupported NAND found\n"); 180 pr_err("IGEP: Unsupported NAND found\n");
123 else { 181 else {
124 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); 182 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7);
125 if ((ret & 0x3F) == (ONENAND_MAP >> 24)) 183 if ((ret & 0x3F) == (ONENAND_MAP >> 24))
126 /* ONENAND found */ 184 /* ONENAND found */
127 onenandcs = cs; 185 onenandcs = cs;
128 } 186 }
129 cs++;
130 } 187 }
188
131 if (onenandcs > GPMC_CS_NUM) { 189 if (onenandcs > GPMC_CS_NUM) {
132 pr_err("IGEP v2: Unable to find configuration in GPMC\n"); 190 pr_err("IGEP: Unable to find configuration in GPMC\n");
133 return; 191 return;
134 } 192 }
135 193
136 if (onenandcs < GPMC_CS_NUM) { 194 igep_onenand_data.cs = onenandcs;
137 igep2_onenand_data.cs = onenandcs; 195
138 if (platform_device_register(&igep2_onenand_device) < 0) 196 if (platform_device_register(&igep_onenand_device) < 0)
139 pr_err("IGEP v2: Unable to register OneNAND device\n"); 197 pr_err("IGEP: Unable to register OneNAND device\n");
140 }
141} 198}
142 199
143#else 200#else
144void __init igep2_flash_init(void) {} 201static void __init igep_flash_init(void) {}
145#endif 202#endif
146 203
147#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) 204#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
148 205
149#include <linux/smsc911x.h> 206#include <linux/smsc911x.h>
207#include <plat/gpmc-smsc911x.h>
150 208
151static struct smsc911x_platform_config igep2_smsc911x_config = { 209static struct omap_smsc911x_platform_data smsc911x_cfg = {
152 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, 210 .cs = IGEP2_SMSC911X_CS,
153 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, 211 .gpio_irq = IGEP2_SMSC911X_GPIO,
154 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS , 212 .gpio_reset = -EINVAL,
155 .phy_interface = PHY_INTERFACE_MODE_MII, 213 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
156};
157
158static struct resource igep2_smsc911x_resources[] = {
159 {
160 .flags = IORESOURCE_MEM,
161 },
162 {
163 .start = OMAP_GPIO_IRQ(IGEP2_SMSC911X_GPIO),
164 .end = OMAP_GPIO_IRQ(IGEP2_SMSC911X_GPIO),
165 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
166 },
167};
168
169static struct platform_device igep2_smsc911x_device = {
170 .name = "smsc911x",
171 .id = 0,
172 .num_resources = ARRAY_SIZE(igep2_smsc911x_resources),
173 .resource = igep2_smsc911x_resources,
174 .dev = {
175 .platform_data = &igep2_smsc911x_config,
176 },
177}; 214};
178 215
179static inline void __init igep2_init_smsc911x(void) 216static inline void __init igep2_init_smsc911x(void)
180{ 217{
181 unsigned long cs_mem_base; 218 gpmc_smsc911x_init(&smsc911x_cfg);
182
183 if (gpmc_cs_request(IGEP2_SMSC911X_CS, SZ_16M, &cs_mem_base) < 0) {
184 pr_err("IGEP v2: Failed request for GPMC mem for smsc911x\n");
185 gpmc_cs_free(IGEP2_SMSC911X_CS);
186 return;
187 }
188
189 igep2_smsc911x_resources[0].start = cs_mem_base + 0x0;
190 igep2_smsc911x_resources[0].end = cs_mem_base + 0xff;
191
192 if ((gpio_request(IGEP2_SMSC911X_GPIO, "SMSC911X IRQ") == 0) &&
193 (gpio_direction_input(IGEP2_SMSC911X_GPIO) == 0)) {
194 gpio_export(IGEP2_SMSC911X_GPIO, 0);
195 } else {
196 pr_err("IGEP v2: Could not obtain gpio for for SMSC911X IRQ\n");
197 return;
198 }
199
200 platform_device_register(&igep2_smsc911x_device);
201} 219}
202 220
203#else 221#else
204static inline void __init igep2_init_smsc911x(void) { } 222static inline void __init igep2_init_smsc911x(void) { }
205#endif 223#endif
206 224
207static struct omap_board_config_kernel igep2_config[] __initdata = { 225static struct regulator_consumer_supply igep_vmmc1_supply =
208}; 226 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
209
210static struct regulator_consumer_supply igep2_vmmc1_supply = {
211 .supply = "vmmc",
212};
213
214static struct regulator_consumer_supply igep2_vmmc2_supply = {
215 .supply = "vmmc",
216};
217 227
218/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */ 228/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
219static struct regulator_init_data igep2_vmmc1 = { 229static struct regulator_init_data igep_vmmc1 = {
220 .constraints = { 230 .constraints = {
221 .min_uV = 1850000, 231 .min_uV = 1850000,
222 .max_uV = 3150000, 232 .max_uV = 3150000,
@@ -227,14 +237,17 @@ static struct regulator_init_data igep2_vmmc1 = {
227 | REGULATOR_CHANGE_STATUS, 237 | REGULATOR_CHANGE_STATUS,
228 }, 238 },
229 .num_consumer_supplies = 1, 239 .num_consumer_supplies = 1,
230 .consumer_supplies = &igep2_vmmc1_supply, 240 .consumer_supplies = &igep_vmmc1_supply,
231}; 241};
232 242
233/* VMMC2 for OMAP VDD_MMC2 (i/o) and MMC2 WIFI */ 243static struct regulator_consumer_supply igep_vio_supply =
234static struct regulator_init_data igep2_vmmc2 = { 244 REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
245
246static struct regulator_init_data igep_vio = {
235 .constraints = { 247 .constraints = {
236 .min_uV = 1850000, 248 .min_uV = 1800000,
237 .max_uV = 3150000, 249 .max_uV = 1800000,
250 .apply_uV = 1,
238 .valid_modes_mask = REGULATOR_MODE_NORMAL 251 .valid_modes_mask = REGULATOR_MODE_NORMAL
239 | REGULATOR_MODE_STANDBY, 252 | REGULATOR_MODE_STANDBY,
240 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE 253 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
@@ -242,50 +255,192 @@ static struct regulator_init_data igep2_vmmc2 = {
242 | REGULATOR_CHANGE_STATUS, 255 | REGULATOR_CHANGE_STATUS,
243 }, 256 },
244 .num_consumer_supplies = 1, 257 .num_consumer_supplies = 1,
245 .consumer_supplies = &igep2_vmmc2_supply, 258 .consumer_supplies = &igep_vio_supply,
259};
260
261static struct regulator_consumer_supply igep_vmmc2_supply =
262 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
263
264static struct regulator_init_data igep_vmmc2 = {
265 .constraints = {
266 .valid_modes_mask = REGULATOR_MODE_NORMAL,
267 .always_on = 1,
268 },
269 .num_consumer_supplies = 1,
270 .consumer_supplies = &igep_vmmc2_supply,
271};
272
273static struct fixed_voltage_config igep_vwlan = {
274 .supply_name = "vwlan",
275 .microvolts = 3300000,
276 .gpio = -EINVAL,
277 .enabled_at_boot = 1,
278 .init_data = &igep_vmmc2,
279};
280
281static struct platform_device igep_vwlan_device = {
282 .name = "reg-fixed-voltage",
283 .id = 0,
284 .dev = {
285 .platform_data = &igep_vwlan,
286 },
246}; 287};
247 288
248static struct omap2_hsmmc_info mmc[] = { 289static struct omap2_hsmmc_info mmc[] = {
249 { 290 {
250 .mmc = 1, 291 .mmc = 1,
251 .wires = 4, 292 .caps = MMC_CAP_4_BIT_DATA,
252 .gpio_cd = -EINVAL, 293 .gpio_cd = -EINVAL,
253 .gpio_wp = -EINVAL, 294 .gpio_wp = -EINVAL,
254 }, 295 },
296#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
255 { 297 {
256 .mmc = 2, 298 .mmc = 2,
257 .wires = 4, 299 .caps = MMC_CAP_4_BIT_DATA,
258 .gpio_cd = -EINVAL, 300 .gpio_cd = -EINVAL,
259 .gpio_wp = -EINVAL, 301 .gpio_wp = -EINVAL,
260 }, 302 },
303#endif
261 {} /* Terminator */ 304 {} /* Terminator */
262}; 305};
263 306
264static int igep2_twl_gpio_setup(struct device *dev, 307#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
308#include <linux/leds.h>
309
310static struct gpio_led igep_gpio_leds[] = {
311 [0] = {
312 .name = "gpio-led:red:d0",
313 .default_trigger = "default-off"
314 },
315 [1] = {
316 .name = "gpio-led:green:d0",
317 .default_trigger = "default-off",
318 },
319 [2] = {
320 .name = "gpio-led:red:d1",
321 .default_trigger = "default-off",
322 },
323 [3] = {
324 .name = "gpio-led:green:d1",
325 .default_trigger = "heartbeat",
326 .gpio = -EINVAL, /* gets replaced */
327 .active_low = 1,
328 },
329};
330
331static struct gpio_led_platform_data igep_led_pdata = {
332 .leds = igep_gpio_leds,
333 .num_leds = ARRAY_SIZE(igep_gpio_leds),
334};
335
336static struct platform_device igep_led_device = {
337 .name = "leds-gpio",
338 .id = -1,
339 .dev = {
340 .platform_data = &igep_led_pdata,
341 },
342};
343
344static void __init igep_leds_init(void)
345{
346 if (machine_is_igep0020()) {
347 igep_gpio_leds[0].gpio = IGEP2_GPIO_LED0_RED;
348 igep_gpio_leds[1].gpio = IGEP2_GPIO_LED0_GREEN;
349 igep_gpio_leds[2].gpio = IGEP2_GPIO_LED1_RED;
350 } else {
351 igep_gpio_leds[0].gpio = IGEP3_GPIO_LED0_RED;
352 igep_gpio_leds[1].gpio = IGEP3_GPIO_LED0_GREEN;
353 igep_gpio_leds[2].gpio = IGEP3_GPIO_LED1_RED;
354 }
355
356 platform_device_register(&igep_led_device);
357}
358
359#else
360static struct gpio igep_gpio_leds[] __initdata = {
361 { -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:red:d0" },
362 { -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:green:d0" },
363 { -EINVAL, GPIOF_OUT_INIT_LOW, "gpio-led:red:d1" },
364};
365
366static inline void igep_leds_init(void)
367{
368 int i;
369
370 if (machine_is_igep0020()) {
371 igep_gpio_leds[0].gpio = IGEP2_GPIO_LED0_RED;
372 igep_gpio_leds[1].gpio = IGEP2_GPIO_LED0_GREEN;
373 igep_gpio_leds[2].gpio = IGEP2_GPIO_LED1_RED;
374 } else {
375 igep_gpio_leds[0].gpio = IGEP3_GPIO_LED0_RED;
376 igep_gpio_leds[1].gpio = IGEP3_GPIO_LED0_GREEN;
377 igep_gpio_leds[2].gpio = IGEP3_GPIO_LED1_RED;
378 }
379
380 if (gpio_request_array(igep_gpio_leds, ARRAY_SIZE(igep_gpio_leds))) {
381 pr_warning("IGEP v2: Could not obtain leds gpios\n");
382 return;
383 }
384
385 for (i = 0; i < ARRAY_SIZE(igep_gpio_leds); i++)
386 gpio_export(igep_gpio_leds[i].gpio, 0);
387}
388#endif
389
390static struct gpio igep2_twl_gpios[] = {
391 { -EINVAL, GPIOF_IN, "GPIO_EHCI_NOC" },
392 { -EINVAL, GPIOF_OUT_INIT_LOW, "GPIO_USBH_CPEN" },
393};
394
395static int igep_twl_gpio_setup(struct device *dev,
265 unsigned gpio, unsigned ngpio) 396 unsigned gpio, unsigned ngpio)
266{ 397{
398 int ret;
399
267 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 400 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
268 mmc[0].gpio_cd = gpio + 0; 401 mmc[0].gpio_cd = gpio + 0;
269 omap2_hsmmc_init(mmc); 402 omap2_hsmmc_init(mmc);
270 403
271 /* link regulators to MMC adapters ... we "know" the 404 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
272 * regulators will be set up only *after* we return. 405#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
273 */ 406 ret = gpio_request_one(gpio + TWL4030_GPIO_MAX + 1, GPIOF_OUT_INIT_HIGH,
274 igep2_vmmc1_supply.dev = mmc[0].dev; 407 "gpio-led:green:d1");
275 igep2_vmmc2_supply.dev = mmc[1].dev; 408 if (ret == 0)
409 gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
410 else
411 pr_warning("IGEP: Could not obtain gpio GPIO_LED1_GREEN\n");
412#else
413 igep_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
414#endif
415
416 if (machine_is_igep0030())
417 return 0;
418
419 /*
420 * REVISIT: need ehci-omap hooks for external VBUS
421 * power switch and overcurrent detect
422 */
423 igep2_twl_gpios[0].gpio = gpio + 1;
424
425 /* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN (out, active low) */
426 igep2_twl_gpios[1].gpio = gpio + TWL4030_GPIO_MAX;
427
428 ret = gpio_request_array(igep2_twl_gpios, ARRAY_SIZE(igep2_twl_gpios));
429 if (ret < 0)
430 pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
276 431
277 return 0; 432 return 0;
278}; 433};
279 434
280static struct twl4030_gpio_platform_data igep2_gpio_data = { 435static struct twl4030_gpio_platform_data igep_twl4030_gpio_pdata = {
281 .gpio_base = OMAP_MAX_GPIO_LINES, 436 .gpio_base = OMAP_MAX_GPIO_LINES,
282 .irq_base = TWL4030_GPIO_IRQ_BASE, 437 .irq_base = TWL4030_GPIO_IRQ_BASE,
283 .irq_end = TWL4030_GPIO_IRQ_END, 438 .irq_end = TWL4030_GPIO_IRQ_END,
284 .use_leds = false, 439 .use_leds = true,
285 .setup = igep2_twl_gpio_setup, 440 .setup = igep_twl_gpio_setup,
286}; 441};
287 442
288static struct twl4030_usb_data igep2_usb_data = { 443static struct twl4030_usb_data igep_usb_data = {
289 .usb_mode = T2_USB_MODE_ULPI, 444 .usb_mode = T2_USB_MODE_ULPI,
290}; 445};
291 446
@@ -301,13 +456,18 @@ static void igep2_disable_dvi(struct omap_dss_device *dssdev)
301 gpio_direction_output(IGEP2_GPIO_DVI_PUP, 0); 456 gpio_direction_output(IGEP2_GPIO_DVI_PUP, 0);
302} 457}
303 458
459static struct panel_generic_dpi_data dvi_panel = {
460 .name = "generic",
461 .platform_enable = igep2_enable_dvi,
462 .platform_disable = igep2_disable_dvi,
463};
464
304static struct omap_dss_device igep2_dvi_device = { 465static struct omap_dss_device igep2_dvi_device = {
305 .type = OMAP_DISPLAY_TYPE_DPI, 466 .type = OMAP_DISPLAY_TYPE_DPI,
306 .name = "dvi", 467 .name = "dvi",
307 .driver_name = "generic_panel", 468 .driver_name = "generic_dpi_panel",
469 .data = &dvi_panel,
308 .phy.dpi.data_lines = 24, 470 .phy.dpi.data_lines = 24,
309 .platform_enable = igep2_enable_dvi,
310 .platform_disable = igep2_disable_dvi,
311}; 471};
312 472
313static struct omap_dss_device *igep2_dss_devices[] = { 473static struct omap_dss_device *igep2_dss_devices[] = {
@@ -320,17 +480,9 @@ static struct omap_dss_board_info igep2_dss_data = {
320 .default_device = &igep2_dvi_device, 480 .default_device = &igep2_dvi_device,
321}; 481};
322 482
323static struct platform_device igep2_dss_device = { 483static struct regulator_consumer_supply igep2_vpll2_supplies[] = {
324 .name = "omapdss", 484 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
325 .id = -1, 485 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
326 .dev = {
327 .platform_data = &igep2_dss_data,
328 },
329};
330
331static struct regulator_consumer_supply igep2_vpll2_supply = {
332 .supply = "vdds_dsi",
333 .dev = &igep2_dss_device.dev,
334}; 486};
335 487
336static struct regulator_init_data igep2_vpll2 = { 488static struct regulator_init_data igep2_vpll2 = {
@@ -344,123 +496,110 @@ static struct regulator_init_data igep2_vpll2 = {
344 .valid_ops_mask = REGULATOR_CHANGE_MODE 496 .valid_ops_mask = REGULATOR_CHANGE_MODE
345 | REGULATOR_CHANGE_STATUS, 497 | REGULATOR_CHANGE_STATUS,
346 }, 498 },
347 .num_consumer_supplies = 1, 499 .num_consumer_supplies = ARRAY_SIZE(igep2_vpll2_supplies),
348 .consumer_supplies = &igep2_vpll2_supply, 500 .consumer_supplies = igep2_vpll2_supplies,
349}; 501};
350 502
351static void __init igep2_display_init(void) 503static void __init igep2_display_init(void)
352{ 504{
353 if (gpio_request(IGEP2_GPIO_DVI_PUP, "GPIO_DVI_PUP") && 505 int err = gpio_request_one(IGEP2_GPIO_DVI_PUP, GPIOF_OUT_INIT_HIGH,
354 gpio_direction_output(IGEP2_GPIO_DVI_PUP, 1)) 506 "GPIO_DVI_PUP");
507 if (err)
355 pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n"); 508 pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");
356} 509}
357 510
358#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) 511static struct platform_device *igep_devices[] __initdata = {
359#include <linux/leds.h> 512 &igep_vwlan_device,
360
361static struct gpio_led igep2_gpio_leds[] = {
362 {
363 .name = "led0:red",
364 .gpio = IGEP2_GPIO_LED0_RED,
365 },
366 {
367 .name = "led0:green",
368 .default_trigger = "heartbeat",
369 .gpio = IGEP2_GPIO_LED0_GREEN,
370 },
371 {
372 .name = "led1:red",
373 .gpio = IGEP2_GPIO_LED1_RED,
374 },
375};
376
377static struct gpio_led_platform_data igep2_led_pdata = {
378 .leds = igep2_gpio_leds,
379 .num_leds = ARRAY_SIZE(igep2_gpio_leds),
380};
381
382static struct platform_device igep2_led_device = {
383 .name = "leds-gpio",
384 .id = -1,
385 .dev = {
386 .platform_data = &igep2_led_pdata,
387 },
388}; 513};
389 514
390static void __init igep2_init_led(void) 515static void __init igep_init_early(void)
391{ 516{
392 platform_device_register(&igep2_led_device); 517 omap2_init_common_infrastructure();
518 omap2_init_common_devices(m65kxxxxam_sdrc_params,
519 m65kxxxxam_sdrc_params);
393} 520}
394 521
395#else 522static struct twl4030_codec_audio_data igep2_audio_data;
396static inline void igep2_init_led(void) {}
397#endif
398 523
399static struct platform_device *igep2_devices[] __initdata = { 524static struct twl4030_codec_data igep2_codec_data = {
400 &igep2_dss_device, 525 .audio_mclk = 26000000,
526 .audio = &igep2_audio_data,
401}; 527};
402 528
403static void __init igep2_init_irq(void) 529static int igep2_keymap[] = {
404{ 530 KEY(0, 0, KEY_LEFT),
405 omap_board_config = igep2_config; 531 KEY(0, 1, KEY_RIGHT),
406 omap_board_config_size = ARRAY_SIZE(igep2_config); 532 KEY(0, 2, KEY_A),
407 omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params); 533 KEY(0, 3, KEY_B),
408 omap_init_irq(); 534 KEY(1, 0, KEY_DOWN),
409 omap_gpio_init(); 535 KEY(1, 1, KEY_UP),
410} 536 KEY(1, 2, KEY_E),
537 KEY(1, 3, KEY_F),
538 KEY(2, 0, KEY_ENTER),
539 KEY(2, 1, KEY_I),
540 KEY(2, 2, KEY_J),
541 KEY(2, 3, KEY_K),
542 KEY(3, 0, KEY_M),
543 KEY(3, 1, KEY_N),
544 KEY(3, 2, KEY_O),
545 KEY(3, 3, KEY_P)
546};
411 547
412static struct twl4030_codec_audio_data igep2_audio_data = { 548static struct matrix_keymap_data igep2_keymap_data = {
413 .audio_mclk = 26000000, 549 .keymap = igep2_keymap,
550 .keymap_size = ARRAY_SIZE(igep2_keymap),
414}; 551};
415 552
416static struct twl4030_codec_data igep2_codec_data = { 553static struct twl4030_keypad_data igep2_keypad_pdata = {
417 .audio_mclk = 26000000, 554 .keymap_data = &igep2_keymap_data,
418 .audio = &igep2_audio_data, 555 .rows = 4,
556 .cols = 4,
557 .rep = 1,
419}; 558};
420 559
421static struct twl4030_platform_data igep2_twldata = { 560static struct twl4030_platform_data igep_twldata = {
422 .irq_base = TWL4030_IRQ_BASE, 561 .irq_base = TWL4030_IRQ_BASE,
423 .irq_end = TWL4030_IRQ_END, 562 .irq_end = TWL4030_IRQ_END,
424 563
425 /* platform_data for children goes here */ 564 /* platform_data for children goes here */
426 .usb = &igep2_usb_data, 565 .usb = &igep_usb_data,
427 .codec = &igep2_codec_data, 566 .gpio = &igep_twl4030_gpio_pdata,
428 .gpio = &igep2_gpio_data, 567 .vmmc1 = &igep_vmmc1,
429 .vmmc1 = &igep2_vmmc1, 568 .vio = &igep_vio,
430 .vmmc2 = &igep2_vmmc2,
431 .vpll2 = &igep2_vpll2,
432
433}; 569};
434 570
435static struct i2c_board_info __initdata igep2_i2c_boardinfo[] = { 571static struct i2c_board_info __initdata igep2_i2c3_boardinfo[] = {
436 { 572 {
437 I2C_BOARD_INFO("twl4030", 0x48), 573 I2C_BOARD_INFO("eeprom", 0x50),
438 .flags = I2C_CLIENT_WAKE,
439 .irq = INT_34XX_SYS_NIRQ,
440 .platform_data = &igep2_twldata,
441 }, 574 },
442}; 575};
443 576
444static int __init igep2_i2c_init(void) 577static void __init igep_i2c_init(void)
445{ 578{
446 omap_register_i2c_bus(1, 2600, igep2_i2c_boardinfo, 579 int ret;
447 ARRAY_SIZE(igep2_i2c_boardinfo)); 580
448 /* Bus 3 is attached to the DVI port where devices like the pico DLP 581 if (machine_is_igep0020()) {
449 * projector don't work reliably with 400kHz */ 582 /*
450 omap_register_i2c_bus(3, 100, NULL, 0); 583 * Bus 3 is attached to the DVI port where devices like the
451 return 0; 584 * pico DLP projector don't work reliably with 400kHz
452} 585 */
586 ret = omap_register_i2c_bus(3, 100, igep2_i2c3_boardinfo,
587 ARRAY_SIZE(igep2_i2c3_boardinfo));
588 if (ret)
589 pr_warning("IGEP2: Could not register I2C3 bus (%d)\n", ret);
590
591 igep_twldata.codec = &igep2_codec_data;
592 igep_twldata.keypad = &igep2_keypad_pdata;
593 igep_twldata.vpll2 = &igep2_vpll2;
594 }
453 595
454static struct omap_musb_board_data musb_board_data = { 596 omap3_pmic_init("twl4030", &igep_twldata);
455 .interface_type = MUSB_INTERFACE_ULPI, 597}
456 .mode = MUSB_OTG,
457 .power = 100,
458};
459 598
460static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 599static const struct usbhs_omap_board_data igep2_usbhs_bdata __initconst = {
461 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 600 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
462 .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN, 601 .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
463 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 602 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
464 603
465 .phy_reset = true, 604 .phy_reset = true,
466 .reset_gpio_port[0] = IGEP2_GPIO_USBH_NRESET, 605 .reset_gpio_port[0] = IGEP2_GPIO_USBH_NRESET,
@@ -468,77 +607,113 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
468 .reset_gpio_port[2] = -EINVAL, 607 .reset_gpio_port[2] = -EINVAL,
469}; 608};
470 609
610static const struct usbhs_omap_board_data igep3_usbhs_bdata __initconst = {
611 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
612 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
613 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
614
615 .phy_reset = true,
616 .reset_gpio_port[0] = -EINVAL,
617 .reset_gpio_port[1] = IGEP3_GPIO_USBH_NRESET,
618 .reset_gpio_port[2] = -EINVAL,
619};
620
471#ifdef CONFIG_OMAP_MUX 621#ifdef CONFIG_OMAP_MUX
472static struct omap_board_mux board_mux[] __initdata = { 622static struct omap_board_mux board_mux[] __initdata = {
473 { .reg_offset = OMAP_MUX_TERMINATOR }, 623 { .reg_offset = OMAP_MUX_TERMINATOR },
474}; 624};
475#else
476#define board_mux NULL
477#endif 625#endif
478 626
479static void __init igep2_init(void) 627#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
628static struct gpio igep_wlan_bt_gpios[] __initdata = {
629 { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NPD" },
630 { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_WIFI_NRESET" },
631 { -EINVAL, GPIOF_OUT_INIT_HIGH, "GPIO_BT_NRESET" },
632};
633
634static void __init igep_wlan_bt_init(void)
480{ 635{
481 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 636 int err;
482 igep2_i2c_init(); 637
483 platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices)); 638 /* GPIO's for WLAN-BT combo depends on hardware revision */
484 omap_serial_init(); 639 if (hwrev == IGEP2_BOARD_HWREV_B) {
485 usb_musb_init(&musb_board_data); 640 igep_wlan_bt_gpios[0].gpio = IGEP2_RB_GPIO_WIFI_NPD;
486 usb_ehci_init(&ehci_pdata); 641 igep_wlan_bt_gpios[1].gpio = IGEP2_RB_GPIO_WIFI_NRESET;
642 igep_wlan_bt_gpios[2].gpio = IGEP2_RB_GPIO_BT_NRESET;
643 } else if (hwrev == IGEP2_BOARD_HWREV_C || machine_is_igep0030()) {
644 igep_wlan_bt_gpios[0].gpio = IGEP2_RC_GPIO_WIFI_NPD;
645 igep_wlan_bt_gpios[1].gpio = IGEP2_RC_GPIO_WIFI_NRESET;
646 igep_wlan_bt_gpios[2].gpio = IGEP2_RC_GPIO_BT_NRESET;
647 } else
648 return;
487 649
488 igep2_flash_init(); 650 err = gpio_request_array(igep_wlan_bt_gpios,
489 igep2_init_led(); 651 ARRAY_SIZE(igep_wlan_bt_gpios));
490 igep2_display_init(); 652 if (err) {
491 igep2_init_smsc911x(); 653 pr_warning("IGEP2: Could not obtain WIFI/BT gpios\n");
654 return;
655 }
492 656
493 /* GPIO userspace leds */ 657 gpio_export(igep_wlan_bt_gpios[0].gpio, 0);
494#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE) 658 gpio_export(igep_wlan_bt_gpios[1].gpio, 0);
495 if ((gpio_request(IGEP2_GPIO_LED0_RED, "led0:red") == 0) && 659 gpio_export(igep_wlan_bt_gpios[2].gpio, 0);
496 (gpio_direction_output(IGEP2_GPIO_LED0_RED, 1) == 0)) {
497 gpio_export(IGEP2_GPIO_LED0_RED, 0);
498 gpio_set_value(IGEP2_GPIO_LED0_RED, 0);
499 } else
500 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
501 660
502 if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "led0:green") == 0) && 661 gpio_set_value(igep_wlan_bt_gpios[1].gpio, 0);
503 (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 1) == 0)) { 662 udelay(10);
504 gpio_export(IGEP2_GPIO_LED0_GREEN, 0); 663 gpio_set_value(igep_wlan_bt_gpios[1].gpio, 1);
505 gpio_set_value(IGEP2_GPIO_LED0_GREEN, 0);
506 } else
507 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
508 664
509 if ((gpio_request(IGEP2_GPIO_LED1_RED, "led1:red") == 0) && 665}
510 (gpio_direction_output(IGEP2_GPIO_LED1_RED, 1) == 0)) { 666#else
511 gpio_export(IGEP2_GPIO_LED1_RED, 0); 667static inline void __init igep_wlan_bt_init(void) { }
512 gpio_set_value(IGEP2_GPIO_LED1_RED, 0);
513 } else
514 pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
515#endif 668#endif
516 669
517 /* GPIO W-LAN + Bluetooth combo module */ 670static void __init igep_init(void)
518 if ((gpio_request(IGEP2_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) && 671{
519 (gpio_direction_output(IGEP2_GPIO_WIFI_NPD, 1) == 0)) { 672 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
520 gpio_export(IGEP2_GPIO_WIFI_NPD, 0); 673
521/* gpio_set_value(IGEP2_GPIO_WIFI_NPD, 0); */ 674 /* Get IGEP2 hardware revision */
522 } else 675 igep2_get_revision();
523 pr_warning("IGEP v2: Could not obtain gpio GPIO_WIFI_NPD\n"); 676 /* Register I2C busses and drivers */
524 677 igep_i2c_init();
525 if ((gpio_request(IGEP2_GPIO_WIFI_NRESET, "GPIO_WIFI_NRESET") == 0) && 678 platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices));
526 (gpio_direction_output(IGEP2_GPIO_WIFI_NRESET, 1) == 0)) { 679 omap_serial_init();
527 gpio_export(IGEP2_GPIO_WIFI_NRESET, 0); 680 usb_musb_init(NULL);
528 gpio_set_value(IGEP2_GPIO_WIFI_NRESET, 0); 681
529 udelay(10); 682 igep_flash_init();
530 gpio_set_value(IGEP2_GPIO_WIFI_NRESET, 1); 683 igep_leds_init();
531 } else 684
532 pr_warning("IGEP v2: Could not obtain gpio GPIO_WIFI_NRESET\n"); 685 /*
686 * WLAN-BT combo module from MuRata which has a Marvell WLAN
687 * (88W8686) + CSR Bluetooth chipset. Uses SDIO interface.
688 */
689 igep_wlan_bt_init();
690
691 if (machine_is_igep0020()) {
692 omap_display_init(&igep2_dss_data);
693 igep2_display_init();
694 igep2_init_smsc911x();
695 usbhs_init(&igep2_usbhs_bdata);
696 } else {
697 usbhs_init(&igep3_usbhs_bdata);
698 }
533} 699}
534 700
535MACHINE_START(IGEP0020, "IGEP v2 board") 701MACHINE_START(IGEP0020, "IGEP v2 board")
536 .phys_io = 0x48000000,
537 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
538 .boot_params = 0x80000100, 702 .boot_params = 0x80000100,
703 .reserve = omap_reserve,
539 .map_io = omap3_map_io, 704 .map_io = omap3_map_io,
705 .init_early = igep_init_early,
706 .init_irq = omap_init_irq,
707 .init_machine = igep_init,
708 .timer = &omap_timer,
709MACHINE_END
710
711MACHINE_START(IGEP0030, "IGEP OMAP3 module")
712 .boot_params = 0x80000100,
540 .reserve = omap_reserve, 713 .reserve = omap_reserve,
541 .init_irq = igep2_init_irq, 714 .map_io = omap3_map_io,
542 .init_machine = igep2_init, 715 .init_early = igep_init_early,
716 .init_irq = omap_init_irq,
717 .init_machine = igep_init,
543 .timer = &omap_timer, 718 .timer = &omap_timer,
544MACHINE_END 719MACHINE_END
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
index 00d9b13b01c5..f7d6038075f0 100644
--- a/arch/arm/mach-omap2/board-ldp.c
+++ b/arch/arm/mach-omap2/board-ldp.c
@@ -22,11 +22,11 @@
22#include <linux/err.h> 22#include <linux/err.h>
23#include <linux/clk.h> 23#include <linux/clk.h>
24#include <linux/spi/spi.h> 24#include <linux/spi/spi.h>
25#include <linux/spi/ads7846.h>
26#include <linux/regulator/machine.h> 25#include <linux/regulator/machine.h>
27#include <linux/i2c/twl.h> 26#include <linux/i2c/twl.h>
28#include <linux/io.h> 27#include <linux/io.h>
29#include <linux/smsc911x.h> 28#include <linux/smsc911x.h>
29#include <linux/mmc/host.h>
30 30
31#include <mach/hardware.h> 31#include <mach/hardware.h>
32#include <asm/mach-types.h> 32#include <asm/mach-types.h>
@@ -41,48 +41,21 @@
41#include <mach/board-zoom.h> 41#include <mach/board-zoom.h>
42 42
43#include <asm/delay.h> 43#include <asm/delay.h>
44#include <plat/control.h>
45#include <plat/usb.h> 44#include <plat/usb.h>
45#include <plat/gpmc-smsc911x.h>
46 46
47#include "board-flash.h"
47#include "mux.h" 48#include "mux.h"
48#include "hsmmc.h" 49#include "hsmmc.h"
50#include "control.h"
51#include "common-board-devices.h"
49 52
50#define LDP_SMSC911X_CS 1 53#define LDP_SMSC911X_CS 1
51#define LDP_SMSC911X_GPIO 152 54#define LDP_SMSC911X_GPIO 152
52#define DEBUG_BASE 0x08000000 55#define DEBUG_BASE 0x08000000
53#define LDP_ETHR_START DEBUG_BASE 56#define LDP_ETHR_START DEBUG_BASE
54 57
55static struct resource ldp_smsc911x_resources[] = { 58static uint32_t board_keymap[] = {
56 [0] = {
57 .start = LDP_ETHR_START,
58 .end = LDP_ETHR_START + SZ_4K,
59 .flags = IORESOURCE_MEM,
60 },
61 [1] = {
62 .start = 0,
63 .end = 0,
64 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
65 },
66};
67
68static struct smsc911x_platform_config ldp_smsc911x_config = {
69 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
70 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
71 .flags = SMSC911X_USE_32BIT,
72 .phy_interface = PHY_INTERFACE_MODE_MII,
73};
74
75static struct platform_device ldp_smsc911x_device = {
76 .name = "smsc911x",
77 .id = -1,
78 .num_resources = ARRAY_SIZE(ldp_smsc911x_resources),
79 .resource = ldp_smsc911x_resources,
80 .dev = {
81 .platform_data = &ldp_smsc911x_config,
82 },
83};
84
85static int board_keymap[] = {
86 KEY(0, 0, KEY_1), 59 KEY(0, 0, KEY_1),
87 KEY(1, 0, KEY_2), 60 KEY(1, 0, KEY_2),
88 KEY(2, 0, KEY_3), 61 KEY(2, 0, KEY_3),
@@ -195,82 +168,16 @@ static struct platform_device ldp_gpio_keys_device = {
195 }, 168 },
196}; 169};
197 170
198static int ts_gpio; 171static struct omap_smsc911x_platform_data smsc911x_cfg = {
199 172 .cs = LDP_SMSC911X_CS,
200/** 173 .gpio_irq = LDP_SMSC911X_GPIO,
201 * @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq 174 .gpio_reset = -EINVAL,
202 * 175 .flags = SMSC911X_USE_32BIT,
203 * @return - void. If request gpio fails then Flag KERN_ERR.
204 */
205static void ads7846_dev_init(void)
206{
207 if (gpio_request(ts_gpio, "ads7846 irq") < 0) {
208 printk(KERN_ERR "can't get ads746 pen down GPIO\n");
209 return;
210 }
211
212 gpio_direction_input(ts_gpio);
213 gpio_set_debounce(ts_gpio, 310);
214}
215
216static int ads7846_get_pendown_state(void)
217{
218 return !gpio_get_value(ts_gpio);
219}
220
221static struct ads7846_platform_data tsc2046_config __initdata = {
222 .get_pendown_state = ads7846_get_pendown_state,
223 .keep_vref_on = 1,
224};
225
226static struct omap2_mcspi_device_config tsc2046_mcspi_config = {
227 .turbo_mode = 0,
228 .single_channel = 1, /* 0: slave, 1: master */
229};
230
231static struct spi_board_info ldp_spi_board_info[] __initdata = {
232 [0] = {
233 /*
234 * TSC2046 operates at a max freqency of 2MHz, so
235 * operate slightly below at 1.5MHz
236 */
237 .modalias = "ads7846",
238 .bus_num = 1,
239 .chip_select = 0,
240 .max_speed_hz = 1500000,
241 .controller_data = &tsc2046_mcspi_config,
242 .irq = 0,
243 .platform_data = &tsc2046_config,
244 },
245}; 176};
246 177
247static inline void __init ldp_init_smsc911x(void) 178static inline void __init ldp_init_smsc911x(void)
248{ 179{
249 int eth_cs; 180 gpmc_smsc911x_init(&smsc911x_cfg);
250 unsigned long cs_mem_base;
251 int eth_gpio = 0;
252
253 eth_cs = LDP_SMSC911X_CS;
254
255 if (gpmc_cs_request(eth_cs, SZ_16M, &cs_mem_base) < 0) {
256 printk(KERN_ERR "Failed to request GPMC mem for smsc911x\n");
257 return;
258 }
259
260 ldp_smsc911x_resources[0].start = cs_mem_base + 0x0;
261 ldp_smsc911x_resources[0].end = cs_mem_base + 0xff;
262 udelay(100);
263
264 eth_gpio = LDP_SMSC911X_GPIO;
265
266 ldp_smsc911x_resources[1].start = OMAP_GPIO_IRQ(eth_gpio);
267
268 if (gpio_request(eth_gpio, "smsc911x irq") < 0) {
269 printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n",
270 eth_gpio);
271 return;
272 }
273 gpio_direction_input(eth_gpio);
274} 181}
275 182
276static struct platform_device ldp_lcd_device = { 183static struct platform_device ldp_lcd_device = {
@@ -286,14 +193,10 @@ static struct omap_board_config_kernel ldp_config[] __initdata = {
286 { OMAP_TAG_LCD, &ldp_lcd_config }, 193 { OMAP_TAG_LCD, &ldp_lcd_config },
287}; 194};
288 195
289static void __init omap_ldp_init_irq(void) 196static void __init omap_ldp_init_early(void)
290{ 197{
291 omap_board_config = ldp_config; 198 omap2_init_common_infrastructure();
292 omap_board_config_size = ARRAY_SIZE(ldp_config); 199 omap2_init_common_devices(NULL, NULL);
293 omap2_init_common_hw(NULL, NULL);
294 omap_init_irq();
295 omap_gpio_init();
296 ldp_init_smsc911x();
297} 200}
298 201
299static struct twl4030_usb_data ldp_usb_data = { 202static struct twl4030_usb_data ldp_usb_data = {
@@ -329,6 +232,26 @@ static struct regulator_init_data ldp_vmmc1 = {
329 .consumer_supplies = &ldp_vmmc1_supply, 232 .consumer_supplies = &ldp_vmmc1_supply,
330}; 233};
331 234
235/* ads7846 on SPI */
236static struct regulator_consumer_supply ldp_vaux1_supplies[] = {
237 REGULATOR_SUPPLY("vcc", "spi1.0"),
238};
239
240/* VAUX1 */
241static struct regulator_init_data ldp_vaux1 = {
242 .constraints = {
243 .min_uV = 3000000,
244 .max_uV = 3000000,
245 .apply_uV = true,
246 .valid_modes_mask = REGULATOR_MODE_NORMAL
247 | REGULATOR_MODE_STANDBY,
248 .valid_ops_mask = REGULATOR_CHANGE_MODE
249 | REGULATOR_CHANGE_STATUS,
250 },
251 .num_consumer_supplies = ARRAY_SIZE(ldp_vaux1_supplies),
252 .consumer_supplies = ldp_vaux1_supplies,
253};
254
332static struct twl4030_platform_data ldp_twldata = { 255static struct twl4030_platform_data ldp_twldata = {
333 .irq_base = TWL4030_IRQ_BASE, 256 .irq_base = TWL4030_IRQ_BASE,
334 .irq_end = TWL4030_IRQ_END, 257 .irq_end = TWL4030_IRQ_END,
@@ -337,23 +260,14 @@ static struct twl4030_platform_data ldp_twldata = {
337 .madc = &ldp_madc_data, 260 .madc = &ldp_madc_data,
338 .usb = &ldp_usb_data, 261 .usb = &ldp_usb_data,
339 .vmmc1 = &ldp_vmmc1, 262 .vmmc1 = &ldp_vmmc1,
263 .vaux1 = &ldp_vaux1,
340 .gpio = &ldp_gpio_data, 264 .gpio = &ldp_gpio_data,
341 .keypad = &ldp_kp_twl4030_data, 265 .keypad = &ldp_kp_twl4030_data,
342}; 266};
343 267
344static struct i2c_board_info __initdata ldp_i2c_boardinfo[] = {
345 {
346 I2C_BOARD_INFO("twl4030", 0x48),
347 .flags = I2C_CLIENT_WAKE,
348 .irq = INT_34XX_SYS_NIRQ,
349 .platform_data = &ldp_twldata,
350 },
351};
352
353static int __init omap_i2c_init(void) 268static int __init omap_i2c_init(void)
354{ 269{
355 omap_register_i2c_bus(1, 2600, ldp_i2c_boardinfo, 270 omap3_pmic_init("twl4030", &ldp_twldata);
356 ARRAY_SIZE(ldp_i2c_boardinfo));
357 omap_register_i2c_bus(2, 400, NULL, 0); 271 omap_register_i2c_bus(2, 400, NULL, 0);
358 omap_register_i2c_bus(3, 400, NULL, 0); 272 omap_register_i2c_bus(3, 400, NULL, 0);
359 return 0; 273 return 0;
@@ -362,7 +276,7 @@ static int __init omap_i2c_init(void)
362static struct omap2_hsmmc_info mmc[] __initdata = { 276static struct omap2_hsmmc_info mmc[] __initdata = {
363 { 277 {
364 .mmc = 1, 278 .mmc = 1,
365 .wires = 4, 279 .caps = MMC_CAP_4_BIT_DATA,
366 .gpio_cd = -EINVAL, 280 .gpio_cd = -EINVAL,
367 .gpio_wp = -EINVAL, 281 .gpio_wp = -EINVAL,
368 }, 282 },
@@ -370,7 +284,6 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
370}; 284};
371 285
372static struct platform_device *ldp_devices[] __initdata = { 286static struct platform_device *ldp_devices[] __initdata = {
373 &ldp_smsc911x_device,
374 &ldp_lcd_device, 287 &ldp_lcd_device,
375 &ldp_gpio_keys_device, 288 &ldp_gpio_keys_device,
376}; 289};
@@ -379,16 +292,8 @@ static struct platform_device *ldp_devices[] __initdata = {
379static struct omap_board_mux board_mux[] __initdata = { 292static struct omap_board_mux board_mux[] __initdata = {
380 { .reg_offset = OMAP_MUX_TERMINATOR }, 293 { .reg_offset = OMAP_MUX_TERMINATOR },
381}; 294};
382#else
383#define board_mux NULL
384#endif 295#endif
385 296
386static struct omap_musb_board_data musb_board_data = {
387 .interface_type = MUSB_INTERFACE_ULPI,
388 .mode = MUSB_OTG,
389 .power = 100,
390};
391
392static struct mtd_partition ldp_nand_partitions[] = { 297static struct mtd_partition ldp_nand_partitions[] = {
393 /* All the partition sizes are listed in terms of NAND block size */ 298 /* All the partition sizes are listed in terms of NAND block size */
394 { 299 {
@@ -424,17 +329,16 @@ static struct mtd_partition ldp_nand_partitions[] = {
424static void __init omap_ldp_init(void) 329static void __init omap_ldp_init(void)
425{ 330{
426 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 331 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
332 omap_board_config = ldp_config;
333 omap_board_config_size = ARRAY_SIZE(ldp_config);
334 ldp_init_smsc911x();
427 omap_i2c_init(); 335 omap_i2c_init();
428 platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices)); 336 platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices));
429 ts_gpio = 54; 337 omap_ads7846_init(1, 54, 310, NULL);
430 ldp_spi_board_info[0].irq = gpio_to_irq(ts_gpio);
431 spi_register_board_info(ldp_spi_board_info,
432 ARRAY_SIZE(ldp_spi_board_info));
433 ads7846_dev_init();
434 omap_serial_init(); 338 omap_serial_init();
435 usb_musb_init(&musb_board_data); 339 usb_musb_init(NULL);
436 board_nand_init(ldp_nand_partitions, 340 board_nand_init(ldp_nand_partitions,
437 ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS); 341 ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
438 342
439 omap2_hsmmc_init(mmc); 343 omap2_hsmmc_init(mmc);
440 /* link regulators to MMC adapters */ 344 /* link regulators to MMC adapters */
@@ -442,12 +346,11 @@ static void __init omap_ldp_init(void)
442} 346}
443 347
444MACHINE_START(OMAP_LDP, "OMAP LDP board") 348MACHINE_START(OMAP_LDP, "OMAP LDP board")
445 .phys_io = 0x48000000,
446 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
447 .boot_params = 0x80000100, 349 .boot_params = 0x80000100,
448 .map_io = omap3_map_io,
449 .reserve = omap_reserve, 350 .reserve = omap_reserve,
450 .init_irq = omap_ldp_init_irq, 351 .map_io = omap3_map_io,
352 .init_early = omap_ldp_init_early,
353 .init_irq = omap_init_irq,
451 .init_machine = omap_ldp_init, 354 .init_machine = omap_ldp_init,
452 .timer = &omap_timer, 355 .timer = &omap_timer,
453MACHINE_END 356MACHINE_END
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
index a3e2b49aa39f..8d74318ed495 100644
--- a/arch/arm/mach-omap2/board-n8x0.c
+++ b/arch/arm/mach-omap2/board-n8x0.c
@@ -20,6 +20,7 @@
20#include <linux/i2c.h> 20#include <linux/i2c.h>
21#include <linux/spi/spi.h> 21#include <linux/spi/spi.h>
22#include <linux/usb/musb.h> 22#include <linux/usb/musb.h>
23#include <sound/tlv320aic3x.h>
23 24
24#include <asm/mach/arch.h> 25#include <asm/mach/arch.h>
25#include <asm/mach-types.h> 26#include <asm/mach-types.h>
@@ -45,8 +46,7 @@ static struct device *mmc_device;
45#define TUSB6010_GPIO_ENABLE 0 46#define TUSB6010_GPIO_ENABLE 0
46#define TUSB6010_DMACHAN 0x3f 47#define TUSB6010_DMACHAN 0x3f
47 48
48#if defined(CONFIG_USB_TUSB6010) || \ 49#ifdef CONFIG_USB_MUSB_TUSB6010
49 defined(CONFIG_USB_TUSB6010_MODULE)
50/* 50/*
51 * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and 51 * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and
52 * 1.5 V voltage regulators of PM companion chip. Companion chip will then 52 * 1.5 V voltage regulators of PM companion chip. Companion chip will then
@@ -106,14 +106,13 @@ static void __init n8x0_usb_init(void)
106 static char announce[] __initdata = KERN_INFO "TUSB 6010\n"; 106 static char announce[] __initdata = KERN_INFO "TUSB 6010\n";
107 107
108 /* PM companion chip power control pin */ 108 /* PM companion chip power control pin */
109 ret = gpio_request(TUSB6010_GPIO_ENABLE, "TUSB6010 enable"); 109 ret = gpio_request_one(TUSB6010_GPIO_ENABLE, GPIOF_OUT_INIT_LOW,
110 "TUSB6010 enable");
110 if (ret != 0) { 111 if (ret != 0) {
111 printk(KERN_ERR "Could not get TUSB power GPIO%i\n", 112 printk(KERN_ERR "Could not get TUSB power GPIO%i\n",
112 TUSB6010_GPIO_ENABLE); 113 TUSB6010_GPIO_ENABLE);
113 return; 114 return;
114 } 115 }
115 gpio_direction_output(TUSB6010_GPIO_ENABLE, 0);
116
117 tusb_set_power(0); 116 tusb_set_power(0);
118 117
119 ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2, 118 ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2,
@@ -133,7 +132,7 @@ err:
133 132
134static void __init n8x0_usb_init(void) {} 133static void __init n8x0_usb_init(void) {}
135 134
136#endif /*CONFIG_USB_TUSB6010 */ 135#endif /*CONFIG_USB_MUSB_TUSB6010 */
137 136
138 137
139static struct omap2_mcspi_device_config p54spi_mcspi_config = { 138static struct omap2_mcspi_device_config p54spi_mcspi_config = {
@@ -183,23 +182,15 @@ static struct mtd_partition onenand_partitions[] = {
183 }, 182 },
184}; 183};
185 184
186static struct omap_onenand_platform_data board_onenand_data = { 185static struct omap_onenand_platform_data board_onenand_data[] = {
187 .cs = 0, 186 {
188 .gpio_irq = 26, 187 .cs = 0,
189 .parts = onenand_partitions, 188 .gpio_irq = 26,
190 .nr_parts = ARRAY_SIZE(onenand_partitions), 189 .parts = onenand_partitions,
191 .flags = ONENAND_SYNC_READ, 190 .nr_parts = ARRAY_SIZE(onenand_partitions),
191 .flags = ONENAND_SYNC_READ,
192 }
192}; 193};
193
194static void __init n8x0_onenand_init(void)
195{
196 gpmc_onenand_init(&board_onenand_data);
197}
198
199#else
200
201static void __init n8x0_onenand_init(void) {}
202
203#endif 194#endif
204 195
205#if defined(CONFIG_MENELAUS) && \ 196#if defined(CONFIG_MENELAUS) && \
@@ -383,15 +374,6 @@ static void n8x0_mmc_callback(void *data, u8 card_mask)
383 omap_mmc_notify_cover_event(mmc_device, index, *openp); 374 omap_mmc_notify_cover_event(mmc_device, index, *openp);
384} 375}
385 376
386void n8x0_mmc_slot1_cover_handler(void *arg, int closed_state)
387{
388 if (mmc_device == NULL)
389 return;
390
391 slot1_cover_open = !closed_state;
392 omap_mmc_notify_cover_event(mmc_device, 0, closed_state);
393}
394
395static int n8x0_mmc_late_init(struct device *dev) 377static int n8x0_mmc_late_init(struct device *dev)
396{ 378{
397 int r, bit, *openp; 379 int r, bit, *openp;
@@ -511,8 +493,12 @@ static struct omap_mmc_platform_data mmc1_data = {
511 493
512static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC]; 494static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
513 495
514void __init n8x0_mmc_init(void) 496static struct gpio n810_emmc_gpios[] __initdata = {
497 { N810_EMMC_VSD_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vddf" },
498 { N810_EMMC_VIO_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot 2 Vdd" },
499};
515 500
501static void __init n8x0_mmc_init(void)
516{ 502{
517 int err; 503 int err;
518 504
@@ -529,42 +515,28 @@ void __init n8x0_mmc_init(void)
529 mmc1_data.slots[1].ban_openended = 1; 515 mmc1_data.slots[1].ban_openended = 1;
530 } 516 }
531 517
532 err = gpio_request(N8X0_SLOT_SWITCH_GPIO, "MMC slot switch"); 518 err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW,
519 "MMC slot switch");
533 if (err) 520 if (err)
534 return; 521 return;
535 522
536 gpio_direction_output(N8X0_SLOT_SWITCH_GPIO, 0);
537
538 if (machine_is_nokia_n810()) { 523 if (machine_is_nokia_n810()) {
539 err = gpio_request(N810_EMMC_VSD_GPIO, "MMC slot 2 Vddf"); 524 err = gpio_request_array(n810_emmc_gpios,
525 ARRAY_SIZE(n810_emmc_gpios));
540 if (err) { 526 if (err) {
541 gpio_free(N8X0_SLOT_SWITCH_GPIO); 527 gpio_free(N8X0_SLOT_SWITCH_GPIO);
542 return; 528 return;
543 } 529 }
544 gpio_direction_output(N810_EMMC_VSD_GPIO, 0);
545
546 err = gpio_request(N810_EMMC_VIO_GPIO, "MMC slot 2 Vdd");
547 if (err) {
548 gpio_free(N8X0_SLOT_SWITCH_GPIO);
549 gpio_free(N810_EMMC_VSD_GPIO);
550 return;
551 }
552 gpio_direction_output(N810_EMMC_VIO_GPIO, 0);
553 } 530 }
554 531
555 mmc_data[0] = &mmc1_data; 532 mmc_data[0] = &mmc1_data;
556 omap2_init_mmc(mmc_data, OMAP24XX_NR_MMC); 533 omap242x_init_mmc(mmc_data);
557} 534}
558#else 535#else
559 536
560void __init n8x0_mmc_init(void) 537void __init n8x0_mmc_init(void)
561{ 538{
562} 539}
563
564void n8x0_mmc_slot1_cover_handler(void *arg, int state)
565{
566}
567
568#endif /* CONFIG_MMC_OMAP */ 540#endif /* CONFIG_MMC_OMAP */
569 541
570#ifdef CONFIG_MENELAUS 542#ifdef CONFIG_MENELAUS
@@ -614,29 +586,35 @@ static int n8x0_menelaus_late_init(struct device *dev)
614 return 0; 586 return 0;
615} 587}
616 588
617static struct i2c_board_info __initdata n8x0_i2c_board_info_1[] = { 589#else
590static int n8x0_menelaus_late_init(struct device *dev)
591{
592 return 0;
593}
594#endif
595
596static struct menelaus_platform_data n8x0_menelaus_platform_data __initdata = {
597 .late_init = n8x0_menelaus_late_init,
598};
599
600static struct i2c_board_info __initdata n8x0_i2c_board_info_1[] __initdata = {
618 { 601 {
619 I2C_BOARD_INFO("menelaus", 0x72), 602 I2C_BOARD_INFO("menelaus", 0x72),
620 .irq = INT_24XX_SYS_NIRQ, 603 .irq = INT_24XX_SYS_NIRQ,
604 .platform_data = &n8x0_menelaus_platform_data,
621 }, 605 },
622}; 606};
623 607
624static struct menelaus_platform_data n8x0_menelaus_platform_data = { 608static struct aic3x_pdata n810_aic33_data __initdata = {
625 .late_init = n8x0_menelaus_late_init, 609 .gpio_reset = 118,
626}; 610};
627 611
628static void __init n8x0_menelaus_init(void) 612static struct i2c_board_info n810_i2c_board_info_2[] __initdata = {
629{ 613 {
630 n8x0_i2c_board_info_1[0].platform_data = &n8x0_menelaus_platform_data; 614 I2C_BOARD_INFO("tlv320aic3x", 0x18),
631 omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1, 615 .platform_data = &n810_aic33_data,
632 ARRAY_SIZE(n8x0_i2c_board_info_1)); 616 },
633} 617};
634
635#else
636static inline void __init n8x0_menelaus_init(void)
637{
638}
639#endif
640 618
641static void __init n8x0_map_io(void) 619static void __init n8x0_map_io(void)
642{ 620{
@@ -644,19 +622,58 @@ static void __init n8x0_map_io(void)
644 omap242x_map_common_io(); 622 omap242x_map_common_io();
645} 623}
646 624
647static void __init n8x0_init_irq(void) 625static void __init n8x0_init_early(void)
648{ 626{
649 omap2_init_common_hw(NULL, NULL); 627 omap2_init_common_infrastructure();
650 omap_init_irq(); 628 omap2_init_common_devices(NULL, NULL);
651 omap_gpio_init();
652} 629}
653 630
654#ifdef CONFIG_OMAP_MUX 631#ifdef CONFIG_OMAP_MUX
655static struct omap_board_mux board_mux[] __initdata = { 632static struct omap_board_mux board_mux[] __initdata = {
633 /* I2S codec port pins for McBSP block */
634 OMAP2420_MUX(EAC_AC_SCLK, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
635 OMAP2420_MUX(EAC_AC_FS, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
636 OMAP2420_MUX(EAC_AC_DIN, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
637 OMAP2420_MUX(EAC_AC_DOUT, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
656 { .reg_offset = OMAP_MUX_TERMINATOR }, 638 { .reg_offset = OMAP_MUX_TERMINATOR },
657}; 639};
640
641static struct omap_device_pad serial2_pads[] __initdata = {
642 {
643 .name = "uart3_rx_irrx.uart3_rx_irrx",
644 .flags = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
645 .enable = OMAP_MUX_MODE0,
646 .idle = OMAP_MUX_MODE3 /* Mux as GPIO for idle */
647 },
648};
649
650static inline void board_serial_init(void)
651{
652 struct omap_board_data bdata;
653
654 bdata.flags = 0;
655 bdata.pads = NULL;
656 bdata.pads_cnt = 0;
657
658 bdata.id = 0;
659 omap_serial_init_port(&bdata);
660
661 bdata.id = 1;
662 omap_serial_init_port(&bdata);
663
664 bdata.id = 2;
665 bdata.pads = serial2_pads;
666 bdata.pads_cnt = ARRAY_SIZE(serial2_pads);
667 omap_serial_init_port(&bdata);
668}
669
658#else 670#else
659#define board_mux NULL 671
672static inline void board_serial_init(void)
673{
674 omap_serial_init();
675}
676
660#endif 677#endif
661 678
662static void __init n8x0_init_machine(void) 679static void __init n8x0_init_machine(void)
@@ -665,43 +682,44 @@ static void __init n8x0_init_machine(void)
665 /* FIXME: add n810 spi devices */ 682 /* FIXME: add n810 spi devices */
666 spi_register_board_info(n800_spi_board_info, 683 spi_register_board_info(n800_spi_board_info,
667 ARRAY_SIZE(n800_spi_board_info)); 684 ARRAY_SIZE(n800_spi_board_info));
668 685 omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1,
669 omap_serial_init(); 686 ARRAY_SIZE(n8x0_i2c_board_info_1));
670 n8x0_menelaus_init(); 687 omap_register_i2c_bus(2, 400, NULL, 0);
671 n8x0_onenand_init(); 688 if (machine_is_nokia_n810())
689 i2c_register_board_info(2, n810_i2c_board_info_2,
690 ARRAY_SIZE(n810_i2c_board_info_2));
691 board_serial_init();
692 gpmc_onenand_init(board_onenand_data);
672 n8x0_mmc_init(); 693 n8x0_mmc_init();
673 n8x0_usb_init(); 694 n8x0_usb_init();
674} 695}
675 696
676MACHINE_START(NOKIA_N800, "Nokia N800") 697MACHINE_START(NOKIA_N800, "Nokia N800")
677 .phys_io = 0x48000000,
678 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
679 .boot_params = 0x80000100, 698 .boot_params = 0x80000100,
680 .map_io = n8x0_map_io,
681 .reserve = omap_reserve, 699 .reserve = omap_reserve,
682 .init_irq = n8x0_init_irq, 700 .map_io = n8x0_map_io,
701 .init_early = n8x0_init_early,
702 .init_irq = omap_init_irq,
683 .init_machine = n8x0_init_machine, 703 .init_machine = n8x0_init_machine,
684 .timer = &omap_timer, 704 .timer = &omap_timer,
685MACHINE_END 705MACHINE_END
686 706
687MACHINE_START(NOKIA_N810, "Nokia N810") 707MACHINE_START(NOKIA_N810, "Nokia N810")
688 .phys_io = 0x48000000,
689 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
690 .boot_params = 0x80000100, 708 .boot_params = 0x80000100,
691 .map_io = n8x0_map_io,
692 .reserve = omap_reserve, 709 .reserve = omap_reserve,
693 .init_irq = n8x0_init_irq, 710 .map_io = n8x0_map_io,
711 .init_early = n8x0_init_early,
712 .init_irq = omap_init_irq,
694 .init_machine = n8x0_init_machine, 713 .init_machine = n8x0_init_machine,
695 .timer = &omap_timer, 714 .timer = &omap_timer,
696MACHINE_END 715MACHINE_END
697 716
698MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX") 717MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
699 .phys_io = 0x48000000,
700 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
701 .boot_params = 0x80000100, 718 .boot_params = 0x80000100,
702 .map_io = n8x0_map_io,
703 .reserve = omap_reserve, 719 .reserve = omap_reserve,
704 .init_irq = n8x0_init_irq, 720 .map_io = n8x0_map_io,
721 .init_early = n8x0_init_early,
722 .init_irq = omap_init_irq,
705 .init_machine = n8x0_init_machine, 723 .init_machine = n8x0_init_machine,
706 .timer = &omap_timer, 724 .timer = &omap_timer,
707MACHINE_END 725MACHINE_END
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 87969c7df652..7f21d24bd437 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -23,10 +23,12 @@
23#include <linux/gpio.h> 23#include <linux/gpio.h>
24#include <linux/input.h> 24#include <linux/input.h>
25#include <linux/gpio_keys.h> 25#include <linux/gpio_keys.h>
26#include <linux/opp.h>
26 27
27#include <linux/mtd/mtd.h> 28#include <linux/mtd/mtd.h>
28#include <linux/mtd/partitions.h> 29#include <linux/mtd/partitions.h>
29#include <linux/mtd/nand.h> 30#include <linux/mtd/nand.h>
31#include <linux/mmc/host.h>
30 32
31#include <linux/regulator/machine.h> 33#include <linux/regulator/machine.h>
32#include <linux/i2c/twl.h> 34#include <linux/i2c/twl.h>
@@ -39,16 +41,94 @@
39 41
40#include <plat/board.h> 42#include <plat/board.h>
41#include <plat/common.h> 43#include <plat/common.h>
42#include <plat/display.h> 44#include <video/omapdss.h>
45#include <video/omap-panel-generic-dpi.h>
43#include <plat/gpmc.h> 46#include <plat/gpmc.h>
44#include <plat/nand.h> 47#include <plat/nand.h>
45#include <plat/usb.h> 48#include <plat/usb.h>
46#include <plat/timer-gp.h> 49#include <plat/omap_device.h>
47 50
48#include "mux.h" 51#include "mux.h"
49#include "hsmmc.h" 52#include "hsmmc.h"
53#include "timer-gp.h"
54#include "pm.h"
55#include "common-board-devices.h"
50 56
51#define NAND_BLOCK_SIZE SZ_128K 57/*
58 * OMAP3 Beagle revision
59 * Run time detection of Beagle revision is done by reading GPIO.
60 * GPIO ID -
61 * AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
62 * C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
63 * C4 = GPIO173, GPIO172, GPIO171: 1 0 1
64 * XM = GPIO173, GPIO172, GPIO171: 0 0 0
65 */
66enum {
67 OMAP3BEAGLE_BOARD_UNKN = 0,
68 OMAP3BEAGLE_BOARD_AXBX,
69 OMAP3BEAGLE_BOARD_C1_3,
70 OMAP3BEAGLE_BOARD_C4,
71 OMAP3BEAGLE_BOARD_XM,
72};
73
74static u8 omap3_beagle_version;
75
76static u8 omap3_beagle_get_rev(void)
77{
78 return omap3_beagle_version;
79}
80
81static struct gpio omap3_beagle_rev_gpios[] __initdata = {
82 { 171, GPIOF_IN, "rev_id_0" },
83 { 172, GPIOF_IN, "rev_id_1" },
84 { 173, GPIOF_IN, "rev_id_2" },
85};
86
87static void __init omap3_beagle_init_rev(void)
88{
89 int ret;
90 u16 beagle_rev = 0;
91
92 omap_mux_init_gpio(171, OMAP_PIN_INPUT_PULLUP);
93 omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
94 omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
95
96 ret = gpio_request_array(omap3_beagle_rev_gpios,
97 ARRAY_SIZE(omap3_beagle_rev_gpios));
98 if (ret < 0) {
99 printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
100 omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
101 return;
102 }
103
104 beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
105 | (gpio_get_value(173) << 2);
106
107 gpio_free_array(omap3_beagle_rev_gpios,
108 ARRAY_SIZE(omap3_beagle_rev_gpios));
109
110 switch (beagle_rev) {
111 case 7:
112 printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
113 omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
114 break;
115 case 6:
116 printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
117 omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
118 break;
119 case 5:
120 printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
121 omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
122 break;
123 case 0:
124 printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
125 omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
126 break;
127 default:
128 printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
129 omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
130 }
131}
52 132
53static struct mtd_partition omap3beagle_nand_partitions[] = { 133static struct mtd_partition omap3beagle_nand_partitions[] = {
54 /* All the partition sizes are listed in terms of NAND block size */ 134 /* All the partition sizes are listed in terms of NAND block size */
@@ -81,15 +161,6 @@ static struct mtd_partition omap3beagle_nand_partitions[] = {
81 }, 161 },
82}; 162};
83 163
84static struct omap_nand_platform_data omap3beagle_nand_data = {
85 .options = NAND_BUSWIDTH_16,
86 .parts = omap3beagle_nand_partitions,
87 .nr_parts = ARRAY_SIZE(omap3beagle_nand_partitions),
88 .dma_channel = -1, /* disable DMA in OMAP NAND driver */
89 .nand_setup = NULL,
90 .dev_ready = NULL,
91};
92
93/* DSS */ 164/* DSS */
94 165
95static int beagle_enable_dvi(struct omap_dss_device *dssdev) 166static int beagle_enable_dvi(struct omap_dss_device *dssdev)
@@ -106,14 +177,19 @@ static void beagle_disable_dvi(struct omap_dss_device *dssdev)
106 gpio_set_value(dssdev->reset_gpio, 0); 177 gpio_set_value(dssdev->reset_gpio, 0);
107} 178}
108 179
180static struct panel_generic_dpi_data dvi_panel = {
181 .name = "generic",
182 .platform_enable = beagle_enable_dvi,
183 .platform_disable = beagle_disable_dvi,
184};
185
109static struct omap_dss_device beagle_dvi_device = { 186static struct omap_dss_device beagle_dvi_device = {
110 .type = OMAP_DISPLAY_TYPE_DPI, 187 .type = OMAP_DISPLAY_TYPE_DPI,
111 .name = "dvi", 188 .name = "dvi",
112 .driver_name = "generic_panel", 189 .driver_name = "generic_dpi_panel",
190 .data = &dvi_panel,
113 .phy.dpi.data_lines = 24, 191 .phy.dpi.data_lines = 24,
114 .reset_gpio = 170, 192 .reset_gpio = -EINVAL,
115 .platform_enable = beagle_enable_dvi,
116 .platform_disable = beagle_disable_dvi,
117}; 193};
118 194
119static struct omap_dss_device beagle_tv_device = { 195static struct omap_dss_device beagle_tv_device = {
@@ -134,31 +210,22 @@ static struct omap_dss_board_info beagle_dss_data = {
134 .default_device = &beagle_dvi_device, 210 .default_device = &beagle_dvi_device,
135}; 211};
136 212
137static struct platform_device beagle_dss_device = {
138 .name = "omapdss",
139 .id = -1,
140 .dev = {
141 .platform_data = &beagle_dss_data,
142 },
143};
144
145static struct regulator_consumer_supply beagle_vdac_supply = 213static struct regulator_consumer_supply beagle_vdac_supply =
146 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 214 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
147 215
148static struct regulator_consumer_supply beagle_vdvi_supply = 216static struct regulator_consumer_supply beagle_vdvi_supplies[] = {
149 REGULATOR_SUPPLY("vdds_dsi", "omapdss"); 217 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
218 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
219};
150 220
151static void __init beagle_display_init(void) 221static void __init beagle_display_init(void)
152{ 222{
153 int r; 223 int r;
154 224
155 r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset"); 225 r = gpio_request_one(beagle_dvi_device.reset_gpio, GPIOF_OUT_INIT_LOW,
156 if (r < 0) { 226 "DVI reset");
227 if (r < 0)
157 printk(KERN_ERR "Unable to get DVI reset GPIO\n"); 228 printk(KERN_ERR "Unable to get DVI reset GPIO\n");
158 return;
159 }
160
161 gpio_direction_output(beagle_dvi_device.reset_gpio, 0);
162} 229}
163 230
164#include "sdram-micron-mt46h32m32lf-6.h" 231#include "sdram-micron-mt46h32m32lf-6.h"
@@ -166,7 +233,7 @@ static void __init beagle_display_init(void)
166static struct omap2_hsmmc_info mmc[] = { 233static struct omap2_hsmmc_info mmc[] = {
167 { 234 {
168 .mmc = 1, 235 .mmc = 1,
169 .wires = 8, 236 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
170 .gpio_wp = 29, 237 .gpio_wp = 29,
171 }, 238 },
172 {} /* Terminator */ 239 {} /* Terminator */
@@ -185,7 +252,12 @@ static struct gpio_led gpio_leds[];
185static int beagle_twl_gpio_setup(struct device *dev, 252static int beagle_twl_gpio_setup(struct device *dev,
186 unsigned gpio, unsigned ngpio) 253 unsigned gpio, unsigned ngpio)
187{ 254{
188 if (system_rev >= 0x20 && system_rev <= 0x34301000) { 255 int r, usb_pwr_level;
256
257 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
258 mmc[0].gpio_wp = -EINVAL;
259 } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
260 (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) {
189 omap_mux_init_gpio(23, OMAP_PIN_INPUT); 261 omap_mux_init_gpio(23, OMAP_PIN_INPUT);
190 mmc[0].gpio_wp = 23; 262 mmc[0].gpio_wp = 23;
191 } else { 263 } else {
@@ -199,16 +271,42 @@ static int beagle_twl_gpio_setup(struct device *dev,
199 beagle_vmmc1_supply.dev = mmc[0].dev; 271 beagle_vmmc1_supply.dev = mmc[0].dev;
200 beagle_vsim_supply.dev = mmc[0].dev; 272 beagle_vsim_supply.dev = mmc[0].dev;
201 273
202 /* REVISIT: need ehci-omap hooks for external VBUS 274 /*
203 * power switch and overcurrent detect 275 * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
276 * high / others active low)
277 * DVI reset GPIO is different between beagle revisions
204 */ 278 */
279 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
280 usb_pwr_level = GPIOF_OUT_INIT_HIGH;
281 beagle_dvi_device.reset_gpio = 129;
282 /*
283 * gpio + 1 on Xm controls the TFP410's enable line (active low)
284 * gpio + 2 control varies depending on the board rev as below:
285 * P7/P8 revisions(prototype): Camera EN
286 * A2+ revisions (production): LDO (DVI, serial, led blocks)
287 */
288 r = gpio_request_one(gpio + 1, GPIOF_OUT_INIT_LOW,
289 "nDVI_PWR_EN");
290 if (r)
291 pr_err("%s: unable to configure nDVI_PWR_EN\n",
292 __func__);
293 r = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH,
294 "DVI_LDO_EN");
295 if (r)
296 pr_err("%s: unable to configure DVI_LDO_EN\n",
297 __func__);
298 } else {
299 usb_pwr_level = GPIOF_OUT_INIT_LOW;
300 beagle_dvi_device.reset_gpio = 170;
301 /*
302 * REVISIT: need ehci-omap hooks for external VBUS
303 * power switch and overcurrent detect
304 */
305 if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
306 pr_err("%s: unable to configure EHCI_nOC\n", __func__);
307 }
205 308
206 gpio_request(gpio + 1, "EHCI_nOC"); 309 gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
207 gpio_direction_input(gpio + 1);
208
209 /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
210 gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
211 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
212 310
213 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ 311 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
214 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 312 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -282,17 +380,15 @@ static struct regulator_init_data beagle_vpll2 = {
282 .valid_ops_mask = REGULATOR_CHANGE_MODE 380 .valid_ops_mask = REGULATOR_CHANGE_MODE
283 | REGULATOR_CHANGE_STATUS, 381 | REGULATOR_CHANGE_STATUS,
284 }, 382 },
285 .num_consumer_supplies = 1, 383 .num_consumer_supplies = ARRAY_SIZE(beagle_vdvi_supplies),
286 .consumer_supplies = &beagle_vdvi_supply, 384 .consumer_supplies = beagle_vdvi_supplies,
287}; 385};
288 386
289static struct twl4030_usb_data beagle_usb_data = { 387static struct twl4030_usb_data beagle_usb_data = {
290 .usb_mode = T2_USB_MODE_ULPI, 388 .usb_mode = T2_USB_MODE_ULPI,
291}; 389};
292 390
293static struct twl4030_codec_audio_data beagle_audio_data = { 391static struct twl4030_codec_audio_data beagle_audio_data;
294 .audio_mclk = 26000000,
295};
296 392
297static struct twl4030_codec_data beagle_codec_data = { 393static struct twl4030_codec_data beagle_codec_data = {
298 .audio_mclk = 26000000, 394 .audio_mclk = 26000000,
@@ -313,22 +409,18 @@ static struct twl4030_platform_data beagle_twldata = {
313 .vpll2 = &beagle_vpll2, 409 .vpll2 = &beagle_vpll2,
314}; 410};
315 411
316static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = { 412static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
317 { 413 {
318 I2C_BOARD_INFO("twl4030", 0x48), 414 I2C_BOARD_INFO("eeprom", 0x50),
319 .flags = I2C_CLIENT_WAKE, 415 },
320 .irq = INT_34XX_SYS_NIRQ,
321 .platform_data = &beagle_twldata,
322 },
323}; 416};
324 417
325static int __init omap3_beagle_i2c_init(void) 418static int __init omap3_beagle_i2c_init(void)
326{ 419{
327 omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo, 420 omap3_pmic_init("twl4030", &beagle_twldata);
328 ARRAY_SIZE(beagle_i2c_boardinfo));
329 /* Bus 3 is attached to the DVI port where devices like the pico DLP 421 /* Bus 3 is attached to the DVI port where devices like the pico DLP
330 * projector don't work reliably with 400kHz */ 422 * projector don't work reliably with 400kHz */
331 omap_register_i2c_bus(3, 100, NULL, 0); 423 omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
332 return 0; 424 return 0;
333} 425}
334 426
@@ -385,61 +477,31 @@ static struct platform_device keys_gpio = {
385 }, 477 },
386}; 478};
387 479
480static void __init omap3_beagle_init_early(void)
481{
482 omap2_init_common_infrastructure();
483 omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
484 mt46h32m32lf6_sdrc_params);
485}
486
388static void __init omap3_beagle_init_irq(void) 487static void __init omap3_beagle_init_irq(void)
389{ 488{
390 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
391 mt46h32m32lf6_sdrc_params);
392 omap_init_irq(); 489 omap_init_irq();
393#ifdef CONFIG_OMAP_32K_TIMER 490#ifdef CONFIG_OMAP_32K_TIMER
394 omap2_gp_clockevent_set_gptimer(12); 491 omap2_gp_clockevent_set_gptimer(12);
395#endif 492#endif
396 omap_gpio_init();
397} 493}
398 494
399static struct platform_device *omap3_beagle_devices[] __initdata = { 495static struct platform_device *omap3_beagle_devices[] __initdata = {
400 &leds_gpio, 496 &leds_gpio,
401 &keys_gpio, 497 &keys_gpio,
402 &beagle_dss_device,
403}; 498};
404 499
405static void __init omap3beagle_flash_init(void) 500static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
406{
407 u8 cs = 0;
408 u8 nandcs = GPMC_CS_NUM + 1;
409
410 /* find out the chip-select on which NAND exists */
411 while (cs < GPMC_CS_NUM) {
412 u32 ret = 0;
413 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
414
415 if ((ret & 0xC00) == 0x800) {
416 printk(KERN_INFO "Found NAND on CS%d\n", cs);
417 if (nandcs > GPMC_CS_NUM)
418 nandcs = cs;
419 }
420 cs++;
421 }
422
423 if (nandcs > GPMC_CS_NUM) {
424 printk(KERN_INFO "NAND: Unable to find configuration "
425 "in GPMC\n ");
426 return;
427 }
428
429 if (nandcs < GPMC_CS_NUM) {
430 omap3beagle_nand_data.cs = nandcs;
431
432 printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
433 if (gpmc_nand_init(&omap3beagle_nand_data) < 0)
434 printk(KERN_ERR "Unable to register NAND device\n");
435 }
436}
437
438static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
439 501
440 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 502 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
441 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 503 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
442 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 504 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
443 505
444 .phy_reset = true, 506 .phy_reset = true,
445 .reset_gpio_port[0] = -EINVAL, 507 .reset_gpio_port[0] = -EINVAL,
@@ -451,47 +513,90 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
451static struct omap_board_mux board_mux[] __initdata = { 513static struct omap_board_mux board_mux[] __initdata = {
452 { .reg_offset = OMAP_MUX_TERMINATOR }, 514 { .reg_offset = OMAP_MUX_TERMINATOR },
453}; 515};
454#else
455#define board_mux NULL
456#endif 516#endif
457 517
458static struct omap_musb_board_data musb_board_data = { 518static void __init beagle_opp_init(void)
459 .interface_type = MUSB_INTERFACE_ULPI, 519{
460 .mode = MUSB_OTG, 520 int r = 0;
461 .power = 100, 521
462}; 522 /* Initialize the omap3 opp table */
523 if (omap3_opp_init()) {
524 pr_err("%s: opp default init failed\n", __func__);
525 return;
526 }
527
528 /* Custom OPP enabled for XM */
529 if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
530 struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
531 struct omap_hwmod *dh = omap_hwmod_lookup("iva");
532 struct device *dev;
533
534 if (!mh || !dh) {
535 pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
536 __func__, mh, dh);
537 return;
538 }
539 /* Enable MPU 1GHz and lower opps */
540 dev = &mh->od->pdev.dev;
541 r = opp_enable(dev, 800000000);
542 /* TODO: MPU 1GHz needs SR and ABB */
543
544 /* Enable IVA 800MHz and lower opps */
545 dev = &dh->od->pdev.dev;
546 r |= opp_enable(dev, 660000000);
547 /* TODO: DSP 800MHz needs SR and ABB */
548 if (r) {
549 pr_err("%s: failed to enable higher opp %d\n",
550 __func__, r);
551 /*
552 * Cleanup - disable the higher freqs - we dont care
553 * about the results
554 */
555 dev = &mh->od->pdev.dev;
556 opp_disable(dev, 800000000);
557 dev = &dh->od->pdev.dev;
558 opp_disable(dev, 660000000);
559 }
560 }
561 return;
562}
463 563
464static void __init omap3_beagle_init(void) 564static void __init omap3_beagle_init(void)
465{ 565{
466 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 566 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
567 omap3_beagle_init_rev();
467 omap3_beagle_i2c_init(); 568 omap3_beagle_i2c_init();
468 platform_add_devices(omap3_beagle_devices, 569 platform_add_devices(omap3_beagle_devices,
469 ARRAY_SIZE(omap3_beagle_devices)); 570 ARRAY_SIZE(omap3_beagle_devices));
571 omap_display_init(&beagle_dss_data);
470 omap_serial_init(); 572 omap_serial_init();
471 573
472 omap_mux_init_gpio(170, OMAP_PIN_INPUT); 574 omap_mux_init_gpio(170, OMAP_PIN_INPUT);
473 gpio_request(170, "DVI_nPD");
474 /* REVISIT leave DVI powered down until it's needed ... */ 575 /* REVISIT leave DVI powered down until it's needed ... */
475 gpio_direction_output(170, true); 576 gpio_request_one(170, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
577
578 usb_musb_init(NULL);
579 usbhs_init(&usbhs_bdata);
580 omap_nand_flash_init(NAND_BUSWIDTH_16, omap3beagle_nand_partitions,
581 ARRAY_SIZE(omap3beagle_nand_partitions));
476 582
477 usb_musb_init(&musb_board_data); 583 /* Ensure msecure is mux'd to be able to set the RTC. */
478 usb_ehci_init(&ehci_pdata); 584 omap_mux_init_signal("sys_drm_msecure", OMAP_PIN_OFF_OUTPUT_HIGH);
479 omap3beagle_flash_init();
480 585
481 /* Ensure SDRC pins are mux'd for self-refresh */ 586 /* Ensure SDRC pins are mux'd for self-refresh */
482 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); 587 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
483 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); 588 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
484 589
485 beagle_display_init(); 590 beagle_display_init();
591 beagle_opp_init();
486} 592}
487 593
488MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") 594MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
489 /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ 595 /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
490 .phys_io = 0x48000000,
491 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
492 .boot_params = 0x80000100, 596 .boot_params = 0x80000100,
493 .map_io = omap3_map_io,
494 .reserve = omap_reserve, 597 .reserve = omap_reserve,
598 .map_io = omap3_map_io,
599 .init_early = omap3_beagle_init_early,
495 .init_irq = omap3_beagle_init_irq, 600 .init_irq = omap3_beagle_init_irq,
496 .init_machine = omap3_beagle_init, 601 .init_machine = omap3_beagle_init,
497 .timer = &omap_timer, 602 .timer = &omap_timer,
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index f76d9c0a47a1..b4d43464a303 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -30,7 +30,10 @@
30#include <linux/usb/otg.h> 30#include <linux/usb/otg.h>
31#include <linux/smsc911x.h> 31#include <linux/smsc911x.h>
32 32
33#include <linux/wl12xx.h>
34#include <linux/regulator/fixed.h>
33#include <linux/regulator/machine.h> 35#include <linux/regulator/machine.h>
36#include <linux/mmc/host.h>
34 37
35#include <mach/hardware.h> 38#include <mach/hardware.h>
36#include <asm/mach-types.h> 39#include <asm/mach-types.h>
@@ -41,11 +44,13 @@
41#include <plat/usb.h> 44#include <plat/usb.h>
42#include <plat/common.h> 45#include <plat/common.h>
43#include <plat/mcspi.h> 46#include <plat/mcspi.h>
44#include <plat/display.h> 47#include <video/omapdss.h>
48#include <video/omap-panel-generic-dpi.h>
45 49
46#include "mux.h" 50#include "mux.h"
47#include "sdram-micron-mt46h32m32lf-6.h" 51#include "sdram-micron-mt46h32m32lf-6.h"
48#include "hsmmc.h" 52#include "hsmmc.h"
53#include "common-board-devices.h"
49 54
50#define OMAP3_EVM_TS_GPIO 175 55#define OMAP3_EVM_TS_GPIO 175
51#define OMAP3_EVM_EHCI_VBUS 22 56#define OMAP3_EVM_EHCI_VBUS 22
@@ -56,6 +61,13 @@
56#define OMAP3EVM_ETHR_ID_REV 0x50 61#define OMAP3EVM_ETHR_ID_REV 0x50
57#define OMAP3EVM_ETHR_GPIO_IRQ 176 62#define OMAP3EVM_ETHR_GPIO_IRQ 176
58#define OMAP3EVM_SMSC911X_CS 5 63#define OMAP3EVM_SMSC911X_CS 5
64/*
65 * Eth Reset signal
66 * 64 = Generation 1 (<=RevD)
67 * 7 = Generation 2 (>=RevE)
68 */
69#define OMAP3EVM_GEN1_ETHR_GPIO_RST 64
70#define OMAP3EVM_GEN2_ETHR_GPIO_RST 7
59 71
60static u8 omap3_evm_version; 72static u8 omap3_evm_version;
61 73
@@ -90,58 +102,35 @@ static void __init omap3_evm_get_revision(void)
90} 102}
91 103
92#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) 104#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
93static struct resource omap3evm_smsc911x_resources[] = { 105#include <plat/gpmc-smsc911x.h>
94 [0] = {
95 .start = OMAP3EVM_ETHR_START,
96 .end = (OMAP3EVM_ETHR_START + OMAP3EVM_ETHR_SIZE - 1),
97 .flags = IORESOURCE_MEM,
98 },
99 [1] = {
100 .start = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ),
101 .end = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ),
102 .flags = (IORESOURCE_IRQ | IRQF_TRIGGER_LOW),
103 },
104};
105
106static struct smsc911x_platform_config smsc911x_config = {
107 .phy_interface = PHY_INTERFACE_MODE_MII,
108 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
109 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
110 .flags = (SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS),
111};
112 106
113static struct platform_device omap3evm_smsc911x_device = { 107static struct omap_smsc911x_platform_data smsc911x_cfg = {
114 .name = "smsc911x", 108 .cs = OMAP3EVM_SMSC911X_CS,
115 .id = -1, 109 .gpio_irq = OMAP3EVM_ETHR_GPIO_IRQ,
116 .num_resources = ARRAY_SIZE(omap3evm_smsc911x_resources), 110 .gpio_reset = -EINVAL,
117 .resource = &omap3evm_smsc911x_resources[0], 111 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
118 .dev = {
119 .platform_data = &smsc911x_config,
120 },
121}; 112};
122 113
123static inline void __init omap3evm_init_smsc911x(void) 114static inline void __init omap3evm_init_smsc911x(void)
124{ 115{
125 int eth_cs;
126 struct clk *l3ck; 116 struct clk *l3ck;
127 unsigned int rate; 117 unsigned int rate;
128 118
129 eth_cs = OMAP3EVM_SMSC911X_CS;
130
131 l3ck = clk_get(NULL, "l3_ck"); 119 l3ck = clk_get(NULL, "l3_ck");
132 if (IS_ERR(l3ck)) 120 if (IS_ERR(l3ck))
133 rate = 100000000; 121 rate = 100000000;
134 else 122 else
135 rate = clk_get_rate(l3ck); 123 rate = clk_get_rate(l3ck);
136 124
137 if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMSC911x irq") < 0) { 125 /* Configure ethernet controller reset gpio */
138 printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n", 126 if (cpu_is_omap3430()) {
139 OMAP3EVM_ETHR_GPIO_IRQ); 127 if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
140 return; 128 smsc911x_cfg.gpio_reset = OMAP3EVM_GEN1_ETHR_GPIO_RST;
129 else
130 smsc911x_cfg.gpio_reset = OMAP3EVM_GEN2_ETHR_GPIO_RST;
141 } 131 }
142 132
143 gpio_direction_input(OMAP3EVM_ETHR_GPIO_IRQ); 133 gpmc_smsc911x_init(&smsc911x_cfg);
144 platform_device_register(&omap3evm_smsc911x_device);
145} 134}
146 135
147#else 136#else
@@ -160,6 +149,15 @@ static inline void __init omap3evm_init_smsc911x(void) { return; }
160#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210 149#define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO 210
161#define OMAP3EVM_DVI_PANEL_EN_GPIO 199 150#define OMAP3EVM_DVI_PANEL_EN_GPIO 199
162 151
152static struct gpio omap3_evm_dss_gpios[] __initdata = {
153 { OMAP3EVM_LCD_PANEL_RESB, GPIOF_OUT_INIT_HIGH, "lcd_panel_resb" },
154 { OMAP3EVM_LCD_PANEL_INI, GPIOF_OUT_INIT_HIGH, "lcd_panel_ini" },
155 { OMAP3EVM_LCD_PANEL_QVGA, GPIOF_OUT_INIT_LOW, "lcd_panel_qvga" },
156 { OMAP3EVM_LCD_PANEL_LR, GPIOF_OUT_INIT_HIGH, "lcd_panel_lr" },
157 { OMAP3EVM_LCD_PANEL_UD, GPIOF_OUT_INIT_HIGH, "lcd_panel_ud" },
158 { OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW, "lcd_panel_envdd" },
159};
160
163static int lcd_enabled; 161static int lcd_enabled;
164static int dvi_enabled; 162static int dvi_enabled;
165 163
@@ -167,61 +165,10 @@ static void __init omap3_evm_display_init(void)
167{ 165{
168 int r; 166 int r;
169 167
170 r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb"); 168 r = gpio_request_array(omap3_evm_dss_gpios,
171 if (r) { 169 ARRAY_SIZE(omap3_evm_dss_gpios));
172 printk(KERN_ERR "failed to get lcd_panel_resb\n"); 170 if (r)
173 return; 171 printk(KERN_ERR "failed to get lcd_panel_* gpios\n");
174 }
175 gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
176
177 r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
178 if (r) {
179 printk(KERN_ERR "failed to get lcd_panel_ini\n");
180 goto err_1;
181 }
182 gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
183
184 r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
185 if (r) {
186 printk(KERN_ERR "failed to get lcd_panel_qvga\n");
187 goto err_2;
188 }
189 gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
190
191 r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
192 if (r) {
193 printk(KERN_ERR "failed to get lcd_panel_lr\n");
194 goto err_3;
195 }
196 gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
197
198 r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
199 if (r) {
200 printk(KERN_ERR "failed to get lcd_panel_ud\n");
201 goto err_4;
202 }
203 gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
204
205 r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
206 if (r) {
207 printk(KERN_ERR "failed to get lcd_panel_envdd\n");
208 goto err_5;
209 }
210 gpio_direction_output(OMAP3EVM_LCD_PANEL_ENVDD, 0);
211
212 return;
213
214err_5:
215 gpio_free(OMAP3EVM_LCD_PANEL_UD);
216err_4:
217 gpio_free(OMAP3EVM_LCD_PANEL_LR);
218err_3:
219 gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
220err_2:
221 gpio_free(OMAP3EVM_LCD_PANEL_INI);
222err_1:
223 gpio_free(OMAP3EVM_LCD_PANEL_RESB);
224
225} 172}
226 173
227static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev) 174static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
@@ -233,9 +180,9 @@ static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev)
233 gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0); 180 gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0);
234 181
235 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) 182 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
236 gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0); 183 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
237 else 184 else
238 gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1); 185 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
239 186
240 lcd_enabled = 1; 187 lcd_enabled = 1;
241 return 0; 188 return 0;
@@ -246,9 +193,9 @@ static void omap3_evm_disable_lcd(struct omap_dss_device *dssdev)
246 gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1); 193 gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1);
247 194
248 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) 195 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)
249 gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1); 196 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1);
250 else 197 else
251 gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0); 198 gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
252 199
253 lcd_enabled = 0; 200 lcd_enabled = 0;
254} 201}
@@ -287,7 +234,7 @@ static int omap3_evm_enable_dvi(struct omap_dss_device *dssdev)
287 return -EINVAL; 234 return -EINVAL;
288 } 235 }
289 236
290 gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 1); 237 gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 1);
291 238
292 dvi_enabled = 1; 239 dvi_enabled = 1;
293 return 0; 240 return 0;
@@ -295,18 +242,23 @@ static int omap3_evm_enable_dvi(struct omap_dss_device *dssdev)
295 242
296static void omap3_evm_disable_dvi(struct omap_dss_device *dssdev) 243static void omap3_evm_disable_dvi(struct omap_dss_device *dssdev)
297{ 244{
298 gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 0); 245 gpio_set_value_cansleep(OMAP3EVM_DVI_PANEL_EN_GPIO, 0);
299 246
300 dvi_enabled = 0; 247 dvi_enabled = 0;
301} 248}
302 249
250static struct panel_generic_dpi_data dvi_panel = {
251 .name = "generic",
252 .platform_enable = omap3_evm_enable_dvi,
253 .platform_disable = omap3_evm_disable_dvi,
254};
255
303static struct omap_dss_device omap3_evm_dvi_device = { 256static struct omap_dss_device omap3_evm_dvi_device = {
304 .name = "dvi", 257 .name = "dvi",
305 .driver_name = "generic_panel",
306 .type = OMAP_DISPLAY_TYPE_DPI, 258 .type = OMAP_DISPLAY_TYPE_DPI,
259 .driver_name = "generic_dpi_panel",
260 .data = &dvi_panel,
307 .phy.dpi.data_lines = 24, 261 .phy.dpi.data_lines = 24,
308 .platform_enable = omap3_evm_enable_dvi,
309 .platform_disable = omap3_evm_disable_dvi,
310}; 262};
311 263
312static struct omap_dss_device *omap3_evm_dss_devices[] = { 264static struct omap_dss_device *omap3_evm_dss_devices[] = {
@@ -321,14 +273,6 @@ static struct omap_dss_board_info omap3_evm_dss_data = {
321 .default_device = &omap3_evm_lcd_device, 273 .default_device = &omap3_evm_lcd_device,
322}; 274};
323 275
324static struct platform_device omap3_evm_dss_device = {
325 .name = "omapdss",
326 .id = -1,
327 .dev = {
328 .platform_data = &omap3_evm_dss_data,
329 },
330};
331
332static struct regulator_consumer_supply omap3evm_vmmc1_supply = { 276static struct regulator_consumer_supply omap3evm_vmmc1_supply = {
333 .supply = "vmmc", 277 .supply = "vmmc",
334}; 278};
@@ -370,10 +314,20 @@ static struct regulator_init_data omap3evm_vsim = {
370static struct omap2_hsmmc_info mmc[] = { 314static struct omap2_hsmmc_info mmc[] = {
371 { 315 {
372 .mmc = 1, 316 .mmc = 1,
373 .wires = 4, 317 .caps = MMC_CAP_4_BIT_DATA,
374 .gpio_cd = -EINVAL, 318 .gpio_cd = -EINVAL,
375 .gpio_wp = 63, 319 .gpio_wp = 63,
376 }, 320 },
321#ifdef CONFIG_WL12XX_PLATFORM_DATA
322 {
323 .name = "wl1271",
324 .mmc = 2,
325 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
326 .gpio_wp = -EINVAL,
327 .gpio_cd = -EINVAL,
328 .nonremovable = true,
329 },
330#endif
377 {} /* Terminator */ 331 {} /* Terminator */
378}; 332};
379 333
@@ -404,6 +358,8 @@ static struct platform_device leds_gpio = {
404static int omap3evm_twl_gpio_setup(struct device *dev, 358static int omap3evm_twl_gpio_setup(struct device *dev,
405 unsigned gpio, unsigned ngpio) 359 unsigned gpio, unsigned ngpio)
406{ 360{
361 int r, lcd_bl_en;
362
407 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 363 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
408 omap_mux_init_gpio(63, OMAP_PIN_INPUT); 364 omap_mux_init_gpio(63, OMAP_PIN_INPUT);
409 mmc[0].gpio_cd = gpio + 0; 365 mmc[0].gpio_cd = gpio + 0;
@@ -419,12 +375,14 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
419 */ 375 */
420 376
421 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */ 377 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
422 gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL"); 378 lcd_bl_en = get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2 ?
423 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); 379 GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
380 r = gpio_request_one(gpio + TWL4030_GPIO_MAX, lcd_bl_en, "EN_LCD_BKL");
381 if (r)
382 printk(KERN_ERR "failed to get/set lcd_bkl gpio\n");
424 383
425 /* gpio + 7 == DVI Enable */ 384 /* gpio + 7 == DVI Enable */
426 gpio_request(gpio + 7, "EN_DVI"); 385 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
427 gpio_direction_output(gpio + 7, 0);
428 386
429 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ 387 /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
430 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 388 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -446,7 +404,7 @@ static struct twl4030_usb_data omap3evm_usb_data = {
446 .usb_mode = T2_USB_MODE_ULPI, 404 .usb_mode = T2_USB_MODE_ULPI,
447}; 405};
448 406
449static int board_keymap[] = { 407static uint32_t board_keymap[] = {
450 KEY(0, 0, KEY_LEFT), 408 KEY(0, 0, KEY_LEFT),
451 KEY(0, 1, KEY_DOWN), 409 KEY(0, 1, KEY_DOWN),
452 KEY(0, 2, KEY_ENTER), 410 KEY(0, 2, KEY_ENTER),
@@ -484,19 +442,15 @@ static struct twl4030_madc_platform_data omap3evm_madc_data = {
484 .irq_line = 1, 442 .irq_line = 1,
485}; 443};
486 444
487static struct twl4030_codec_audio_data omap3evm_audio_data = { 445static struct twl4030_codec_audio_data omap3evm_audio_data;
488 .audio_mclk = 26000000,
489};
490 446
491static struct twl4030_codec_data omap3evm_codec_data = { 447static struct twl4030_codec_data omap3evm_codec_data = {
492 .audio_mclk = 26000000, 448 .audio_mclk = 26000000,
493 .audio = &omap3evm_audio_data, 449 .audio = &omap3evm_audio_data,
494}; 450};
495 451
496static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = { 452static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
497 .supply = "vdda_dac", 453 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
498 .dev = &omap3_evm_dss_device.dev,
499};
500 454
501/* VDAC for DSS driving S-Video */ 455/* VDAC for DSS driving S-Video */
502static struct regulator_init_data omap3_evm_vdac = { 456static struct regulator_init_data omap3_evm_vdac = {
@@ -514,8 +468,10 @@ static struct regulator_init_data omap3_evm_vdac = {
514}; 468};
515 469
516/* VPLL2 for digital video outputs */ 470/* VPLL2 for digital video outputs */
517static struct regulator_consumer_supply omap3_evm_vpll2_supply = 471static struct regulator_consumer_supply omap3_evm_vpll2_supplies[] = {
518 REGULATOR_SUPPLY("vdds_dsi", "omapdss"); 472 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
473 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
474};
519 475
520static struct regulator_init_data omap3_evm_vpll2 = { 476static struct regulator_init_data omap3_evm_vpll2 = {
521 .constraints = { 477 .constraints = {
@@ -527,10 +483,70 @@ static struct regulator_init_data omap3_evm_vpll2 = {
527 .valid_ops_mask = REGULATOR_CHANGE_MODE 483 .valid_ops_mask = REGULATOR_CHANGE_MODE
528 | REGULATOR_CHANGE_STATUS, 484 | REGULATOR_CHANGE_STATUS,
529 }, 485 },
486 .num_consumer_supplies = ARRAY_SIZE(omap3_evm_vpll2_supplies),
487 .consumer_supplies = omap3_evm_vpll2_supplies,
488};
489
490/* ads7846 on SPI */
491static struct regulator_consumer_supply omap3evm_vio_supply =
492 REGULATOR_SUPPLY("vcc", "spi1.0");
493
494/* VIO for ads7846 */
495static struct regulator_init_data omap3evm_vio = {
496 .constraints = {
497 .min_uV = 1800000,
498 .max_uV = 1800000,
499 .apply_uV = true,
500 .valid_modes_mask = REGULATOR_MODE_NORMAL
501 | REGULATOR_MODE_STANDBY,
502 .valid_ops_mask = REGULATOR_CHANGE_MODE
503 | REGULATOR_CHANGE_STATUS,
504 },
530 .num_consumer_supplies = 1, 505 .num_consumer_supplies = 1,
531 .consumer_supplies = &omap3_evm_vpll2_supply, 506 .consumer_supplies = &omap3evm_vio_supply,
532}; 507};
533 508
509#ifdef CONFIG_WL12XX_PLATFORM_DATA
510
511#define OMAP3EVM_WLAN_PMENA_GPIO (150)
512#define OMAP3EVM_WLAN_IRQ_GPIO (149)
513
514static struct regulator_consumer_supply omap3evm_vmmc2_supply =
515 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
516
517/* VMMC2 for driving the WL12xx module */
518static struct regulator_init_data omap3evm_vmmc2 = {
519 .constraints = {
520 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
521 },
522 .num_consumer_supplies = 1,
523 .consumer_supplies = &omap3evm_vmmc2_supply,
524};
525
526static struct fixed_voltage_config omap3evm_vwlan = {
527 .supply_name = "vwl1271",
528 .microvolts = 1800000, /* 1.80V */
529 .gpio = OMAP3EVM_WLAN_PMENA_GPIO,
530 .startup_delay = 70000, /* 70ms */
531 .enable_high = 1,
532 .enabled_at_boot = 0,
533 .init_data = &omap3evm_vmmc2,
534};
535
536static struct platform_device omap3evm_wlan_regulator = {
537 .name = "reg-fixed-voltage",
538 .id = 1,
539 .dev = {
540 .platform_data = &omap3evm_vwlan,
541 },
542};
543
544struct wl12xx_platform_data omap3evm_wlan_data __initdata = {
545 .irq = OMAP_GPIO_IRQ(OMAP3EVM_WLAN_IRQ_GPIO),
546 .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
547};
548#endif
549
534static struct twl4030_platform_data omap3evm_twldata = { 550static struct twl4030_platform_data omap3evm_twldata = {
535 .irq_base = TWL4030_IRQ_BASE, 551 .irq_base = TWL4030_IRQ_BASE,
536 .irq_end = TWL4030_IRQ_END, 552 .irq_end = TWL4030_IRQ_END,
@@ -543,99 +559,33 @@ static struct twl4030_platform_data omap3evm_twldata = {
543 .codec = &omap3evm_codec_data, 559 .codec = &omap3evm_codec_data,
544 .vdac = &omap3_evm_vdac, 560 .vdac = &omap3_evm_vdac,
545 .vpll2 = &omap3_evm_vpll2, 561 .vpll2 = &omap3_evm_vpll2,
546}; 562 .vio = &omap3evm_vio,
547 563 .vmmc1 = &omap3evm_vmmc1,
548static struct i2c_board_info __initdata omap3evm_i2c_boardinfo[] = { 564 .vsim = &omap3evm_vsim,
549 {
550 I2C_BOARD_INFO("twl4030", 0x48),
551 .flags = I2C_CLIENT_WAKE,
552 .irq = INT_34XX_SYS_NIRQ,
553 .platform_data = &omap3evm_twldata,
554 },
555}; 565};
556 566
557static int __init omap3_evm_i2c_init(void) 567static int __init omap3_evm_i2c_init(void)
558{ 568{
559 /* 569 omap3_pmic_init("twl4030", &omap3evm_twldata);
560 * REVISIT: These entries can be set in omap3evm_twl_data
561 * after a merge with MFD tree
562 */
563 omap3evm_twldata.vmmc1 = &omap3evm_vmmc1;
564 omap3evm_twldata.vsim = &omap3evm_vsim;
565
566 omap_register_i2c_bus(1, 2600, omap3evm_i2c_boardinfo,
567 ARRAY_SIZE(omap3evm_i2c_boardinfo));
568 omap_register_i2c_bus(2, 400, NULL, 0); 570 omap_register_i2c_bus(2, 400, NULL, 0);
569 omap_register_i2c_bus(3, 400, NULL, 0); 571 omap_register_i2c_bus(3, 400, NULL, 0);
570 return 0; 572 return 0;
571} 573}
572 574
573static void ads7846_dev_init(void)
574{
575 if (gpio_request(OMAP3_EVM_TS_GPIO, "ADS7846 pendown") < 0)
576 printk(KERN_ERR "can't get ads7846 pen down GPIO\n");
577
578 gpio_direction_input(OMAP3_EVM_TS_GPIO);
579 gpio_set_debounce(OMAP3_EVM_TS_GPIO, 310);
580}
581
582static int ads7846_get_pendown_state(void)
583{
584 return !gpio_get_value(OMAP3_EVM_TS_GPIO);
585}
586
587struct ads7846_platform_data ads7846_config = {
588 .x_max = 0x0fff,
589 .y_max = 0x0fff,
590 .x_plate_ohms = 180,
591 .pressure_max = 255,
592 .debounce_max = 10,
593 .debounce_tol = 3,
594 .debounce_rep = 1,
595 .get_pendown_state = ads7846_get_pendown_state,
596 .keep_vref_on = 1,
597 .settle_delay_usecs = 150,
598 .wakeup = true,
599};
600
601static struct omap2_mcspi_device_config ads7846_mcspi_config = {
602 .turbo_mode = 0,
603 .single_channel = 1, /* 0: slave, 1: master */
604};
605
606struct spi_board_info omap3evm_spi_board_info[] = {
607 [0] = {
608 .modalias = "ads7846",
609 .bus_num = 1,
610 .chip_select = 0,
611 .max_speed_hz = 1500000,
612 .controller_data = &ads7846_mcspi_config,
613 .irq = OMAP_GPIO_IRQ(OMAP3_EVM_TS_GPIO),
614 .platform_data = &ads7846_config,
615 },
616};
617
618static struct omap_board_config_kernel omap3_evm_config[] __initdata = { 575static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
619}; 576};
620 577
621static void __init omap3_evm_init_irq(void) 578static void __init omap3_evm_init_early(void)
622{ 579{
623 omap_board_config = omap3_evm_config; 580 omap2_init_common_infrastructure();
624 omap_board_config_size = ARRAY_SIZE(omap3_evm_config); 581 omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
625 omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL);
626 omap_init_irq();
627 omap_gpio_init();
628} 582}
629 583
630static struct platform_device *omap3_evm_devices[] __initdata = { 584static struct usbhs_omap_board_data usbhs_bdata __initdata = {
631 &omap3_evm_dss_device,
632};
633
634static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
635 585
636 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN, 586 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
637 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 587 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
638 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 588 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
639 589
640 .phy_reset = true, 590 .phy_reset = true,
641 /* PHY reset GPIO will be runtime programmed based on EVM version */ 591 /* PHY reset GPIO will be runtime programmed based on EVM version */
@@ -645,16 +595,76 @@ static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
645}; 595};
646 596
647#ifdef CONFIG_OMAP_MUX 597#ifdef CONFIG_OMAP_MUX
648static struct omap_board_mux board_mux[] __initdata = { 598static struct omap_board_mux omap35x_board_mux[] __initdata = {
649 OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP | 599 OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
650 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW | 600 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
651 OMAP_PIN_OFF_WAKEUPENABLE), 601 OMAP_PIN_OFF_WAKEUPENABLE),
652 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP | 602 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
653 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW), 603 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
604 OMAP_PIN_OFF_WAKEUPENABLE),
605 OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
606 OMAP_PIN_OFF_NONE),
607 OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
608 OMAP_PIN_OFF_NONE),
609#ifdef CONFIG_WL12XX_PLATFORM_DATA
610 /* WLAN IRQ - GPIO 149 */
611 OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
612
613 /* WLAN POWER ENABLE - GPIO 150 */
614 OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
615
616 /* MMC2 SDIO pin muxes for WL12xx */
617 OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
618 OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
619 OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
620 OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
621 OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
622 OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
623#endif
624 { .reg_offset = OMAP_MUX_TERMINATOR },
625};
626
627static struct omap_board_mux omap36x_board_mux[] __initdata = {
628 OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP |
629 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
630 OMAP_PIN_OFF_WAKEUPENABLE),
631 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
632 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_OUTPUT_LOW |
633 OMAP_PIN_OFF_WAKEUPENABLE),
634 /* AM/DM37x EVM: DSS data bus muxed with sys_boot */
635 OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
636 OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
637 OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
638 OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
639 OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
640 OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
641 OMAP3_MUX(SYS_BOOT0, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
642 OMAP3_MUX(SYS_BOOT1, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
643 OMAP3_MUX(SYS_BOOT3, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
644 OMAP3_MUX(SYS_BOOT4, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
645 OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
646 OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
647#ifdef CONFIG_WL12XX_PLATFORM_DATA
648 /* WLAN IRQ - GPIO 149 */
649 OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
650
651 /* WLAN POWER ENABLE - GPIO 150 */
652 OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
653
654 /* MMC2 SDIO pin muxes for WL12xx */
655 OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
656 OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
657 OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
658 OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
659 OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
660 OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
661#endif
662
654 { .reg_offset = OMAP_MUX_TERMINATOR }, 663 { .reg_offset = OMAP_MUX_TERMINATOR },
655}; 664};
656#else 665#else
657#define board_mux NULL 666#define omap35x_board_mux NULL
667#define omap36x_board_mux NULL
658#endif 668#endif
659 669
660static struct omap_musb_board_data musb_board_data = { 670static struct omap_musb_board_data musb_board_data = {
@@ -663,17 +673,26 @@ static struct omap_musb_board_data musb_board_data = {
663 .power = 100, 673 .power = 100,
664}; 674};
665 675
676static struct gpio omap3_evm_ehci_gpios[] __initdata = {
677 { OMAP3_EVM_EHCI_VBUS, GPIOF_OUT_INIT_HIGH, "enable EHCI VBUS" },
678 { OMAP3_EVM_EHCI_SELECT, GPIOF_OUT_INIT_LOW, "select EHCI port" },
679};
680
666static void __init omap3_evm_init(void) 681static void __init omap3_evm_init(void)
667{ 682{
668 omap3_evm_get_revision(); 683 omap3_evm_get_revision();
669 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
670 684
671 omap3_evm_i2c_init(); 685 if (cpu_is_omap3630())
686 omap3_mux_init(omap36x_board_mux, OMAP_PACKAGE_CBB);
687 else
688 omap3_mux_init(omap35x_board_mux, OMAP_PACKAGE_CBB);
672 689
673 platform_add_devices(omap3_evm_devices, ARRAY_SIZE(omap3_evm_devices)); 690 omap_board_config = omap3_evm_config;
691 omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
674 692
675 spi_register_board_info(omap3evm_spi_board_info, 693 omap3_evm_i2c_init();
676 ARRAY_SIZE(omap3evm_spi_board_info)); 694
695 omap_display_init(&omap3_evm_dss_data);
677 696
678 omap_serial_init(); 697 omap_serial_init();
679 698
@@ -682,20 +701,16 @@ static void __init omap3_evm_init(void)
682 701
683 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) { 702 if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) {
684 /* enable EHCI VBUS using GPIO22 */ 703 /* enable EHCI VBUS using GPIO22 */
685 omap_mux_init_gpio(22, OMAP_PIN_INPUT_PULLUP); 704 omap_mux_init_gpio(OMAP3_EVM_EHCI_VBUS, OMAP_PIN_INPUT_PULLUP);
686 gpio_request(OMAP3_EVM_EHCI_VBUS, "enable EHCI VBUS");
687 gpio_direction_output(OMAP3_EVM_EHCI_VBUS, 0);
688 gpio_set_value(OMAP3_EVM_EHCI_VBUS, 1);
689
690 /* Select EHCI port on main board */ 705 /* Select EHCI port on main board */
691 omap_mux_init_gpio(61, OMAP_PIN_INPUT_PULLUP); 706 omap_mux_init_gpio(OMAP3_EVM_EHCI_SELECT,
692 gpio_request(OMAP3_EVM_EHCI_SELECT, "select EHCI port"); 707 OMAP_PIN_INPUT_PULLUP);
693 gpio_direction_output(OMAP3_EVM_EHCI_SELECT, 0); 708 gpio_request_array(omap3_evm_ehci_gpios,
694 gpio_set_value(OMAP3_EVM_EHCI_SELECT, 0); 709 ARRAY_SIZE(omap3_evm_ehci_gpios));
695 710
696 /* setup EHCI phy reset config */ 711 /* setup EHCI phy reset config */
697 omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP); 712 omap_mux_init_gpio(21, OMAP_PIN_INPUT_PULLUP);
698 ehci_pdata.reset_gpio_port[1] = 21; 713 usbhs_bdata.reset_gpio_port[1] = 21;
699 714
700 /* EVM REV >= E can supply 500mA with EXTVBUS programming */ 715 /* EVM REV >= E can supply 500mA with EXTVBUS programming */
701 musb_board_data.power = 500; 716 musb_board_data.power = 500;
@@ -703,23 +718,29 @@ static void __init omap3_evm_init(void)
703 } else { 718 } else {
704 /* setup EHCI phy reset on MDC */ 719 /* setup EHCI phy reset on MDC */
705 omap_mux_init_gpio(135, OMAP_PIN_OUTPUT); 720 omap_mux_init_gpio(135, OMAP_PIN_OUTPUT);
706 ehci_pdata.reset_gpio_port[1] = 135; 721 usbhs_bdata.reset_gpio_port[1] = 135;
707 } 722 }
708 usb_musb_init(&musb_board_data); 723 usb_musb_init(&musb_board_data);
709 usb_ehci_init(&ehci_pdata); 724 usbhs_init(&usbhs_bdata);
710 ads7846_dev_init(); 725 omap_ads7846_init(1, OMAP3_EVM_TS_GPIO, 310, NULL);
711 omap3evm_init_smsc911x(); 726 omap3evm_init_smsc911x();
712 omap3_evm_display_init(); 727 omap3_evm_display_init();
728
729#ifdef CONFIG_WL12XX_PLATFORM_DATA
730 /* WL12xx WLAN Init */
731 if (wl12xx_set_platform_data(&omap3evm_wlan_data))
732 pr_err("error setting wl12xx data\n");
733 platform_device_register(&omap3evm_wlan_regulator);
734#endif
713} 735}
714 736
715MACHINE_START(OMAP3EVM, "OMAP3 EVM") 737MACHINE_START(OMAP3EVM, "OMAP3 EVM")
716 /* Maintainer: Syed Mohammed Khasim - Texas Instruments */ 738 /* Maintainer: Syed Mohammed Khasim - Texas Instruments */
717 .phys_io = 0x48000000,
718 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
719 .boot_params = 0x80000100, 739 .boot_params = 0x80000100,
720 .map_io = omap3_map_io,
721 .reserve = omap_reserve, 740 .reserve = omap_reserve,
722 .init_irq = omap3_evm_init_irq, 741 .map_io = omap3_map_io,
742 .init_early = omap3_evm_init_early,
743 .init_irq = omap_init_irq,
723 .init_machine = omap3_evm_init, 744 .init_machine = omap3_evm_init,
724 .timer = &omap_timer, 745 .timer = &omap_timer,
725MACHINE_END 746MACHINE_END
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c
new file mode 100644
index 000000000000..60d9be49dbab
--- /dev/null
+++ b/arch/arm/mach-omap2/board-omap3logic.c
@@ -0,0 +1,230 @@
1/*
2 * linux/arch/arm/mach-omap2/board-omap3logic.c
3 *
4 * Copyright (C) 2010 Li-Pro.Net
5 * Stephan Linz <linz@li-pro.net>
6 *
7 * Copyright (C) 2010 Logic Product Development, Inc.
8 * Peter Barada <peter.barada@logicpd.com>
9 *
10 * Modified from Beagle, EVM, and RX51
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
15 */
16
17#include <linux/kernel.h>
18#include <linux/init.h>
19#include <linux/platform_device.h>
20#include <linux/delay.h>
21#include <linux/err.h>
22#include <linux/clk.h>
23#include <linux/io.h>
24#include <linux/gpio.h>
25
26#include <linux/regulator/machine.h>
27
28#include <linux/i2c/twl.h>
29#include <linux/mmc/host.h>
30
31#include <mach/hardware.h>
32#include <asm/mach-types.h>
33#include <asm/mach/arch.h>
34#include <asm/mach/map.h>
35
36#include "mux.h"
37#include "hsmmc.h"
38#include "timer-gp.h"
39#include "control.h"
40#include "common-board-devices.h"
41
42#include <plat/mux.h>
43#include <plat/board.h>
44#include <plat/common.h>
45#include <plat/gpmc-smsc911x.h>
46#include <plat/gpmc.h>
47#include <plat/sdrc.h>
48
49#define OMAP3LOGIC_SMSC911X_CS 1
50
51#define OMAP3530_LV_SOM_MMC_GPIO_CD 110
52#define OMAP3530_LV_SOM_MMC_GPIO_WP 126
53#define OMAP3530_LV_SOM_SMSC911X_GPIO_IRQ 152
54
55#define OMAP3_TORPEDO_MMC_GPIO_CD 127
56#define OMAP3_TORPEDO_SMSC911X_GPIO_IRQ 129
57
58static struct regulator_consumer_supply omap3logic_vmmc1_supply = {
59 .supply = "vmmc",
60};
61
62/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
63static struct regulator_init_data omap3logic_vmmc1 = {
64 .constraints = {
65 .name = "VMMC1",
66 .min_uV = 1850000,
67 .max_uV = 3150000,
68 .valid_modes_mask = REGULATOR_MODE_NORMAL
69 | REGULATOR_MODE_STANDBY,
70 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
71 | REGULATOR_CHANGE_MODE
72 | REGULATOR_CHANGE_STATUS,
73 },
74 .num_consumer_supplies = 1,
75 .consumer_supplies = &omap3logic_vmmc1_supply,
76};
77
78static struct twl4030_gpio_platform_data omap3logic_gpio_data = {
79 .gpio_base = OMAP_MAX_GPIO_LINES,
80 .irq_base = TWL4030_GPIO_IRQ_BASE,
81 .irq_end = TWL4030_GPIO_IRQ_END,
82 .use_leds = true,
83 .pullups = BIT(1),
84 .pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8)
85 | BIT(13) | BIT(15) | BIT(16) | BIT(17),
86};
87
88static struct twl4030_platform_data omap3logic_twldata = {
89 .irq_base = TWL4030_IRQ_BASE,
90 .irq_end = TWL4030_IRQ_END,
91
92 /* platform_data for children goes here */
93 .gpio = &omap3logic_gpio_data,
94 .vmmc1 = &omap3logic_vmmc1,
95};
96
97static int __init omap3logic_i2c_init(void)
98{
99 omap3_pmic_init("twl4030", &omap3logic_twldata);
100 return 0;
101}
102
103static struct omap2_hsmmc_info __initdata board_mmc_info[] = {
104 {
105 .name = "external",
106 .mmc = 1,
107 .caps = MMC_CAP_4_BIT_DATA,
108 .gpio_cd = -EINVAL,
109 .gpio_wp = -EINVAL,
110 },
111 {} /* Terminator */
112};
113
114static void __init board_mmc_init(void)
115{
116 if (machine_is_omap3530_lv_som()) {
117 /* OMAP3530 LV SOM board */
118 board_mmc_info[0].gpio_cd = OMAP3530_LV_SOM_MMC_GPIO_CD;
119 board_mmc_info[0].gpio_wp = OMAP3530_LV_SOM_MMC_GPIO_WP;
120 omap_mux_init_signal("gpio_110", OMAP_PIN_OUTPUT);
121 omap_mux_init_signal("gpio_126", OMAP_PIN_OUTPUT);
122 } else if (machine_is_omap3_torpedo()) {
123 /* OMAP3 Torpedo board */
124 board_mmc_info[0].gpio_cd = OMAP3_TORPEDO_MMC_GPIO_CD;
125 omap_mux_init_signal("gpio_127", OMAP_PIN_OUTPUT);
126 } else {
127 /* unsupported board */
128 printk(KERN_ERR "%s(): unknown machine type\n", __func__);
129 return;
130 }
131
132 omap2_hsmmc_init(board_mmc_info);
133 /* link regulators to MMC adapters */
134 omap3logic_vmmc1_supply.dev = board_mmc_info[0].dev;
135}
136
137static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
138 .cs = OMAP3LOGIC_SMSC911X_CS,
139 .gpio_irq = -EINVAL,
140 .gpio_reset = -EINVAL,
141};
142
143/* TODO/FIXME (comment by Peter Barada, LogicPD):
144 * Fix the PBIAS voltage for Torpedo MMC1 pins that
145 * are used for other needs (IRQs, etc). */
146static void omap3torpedo_fix_pbias_voltage(void)
147{
148 u16 control_pbias_offset = OMAP343X_CONTROL_PBIAS_LITE;
149 u32 reg;
150
151 if (machine_is_omap3_torpedo())
152 {
153 /* Set the bias for the pin */
154 reg = omap_ctrl_readl(control_pbias_offset);
155
156 reg &= ~OMAP343X_PBIASLITEPWRDNZ1;
157 omap_ctrl_writel(reg, control_pbias_offset);
158
159 /* 100ms delay required for PBIAS configuration */
160 msleep(100);
161
162 reg |= OMAP343X_PBIASLITEVMODE1;
163 reg |= OMAP343X_PBIASLITEPWRDNZ1;
164 omap_ctrl_writel(reg | 0x300, control_pbias_offset);
165 }
166}
167
168static inline void __init board_smsc911x_init(void)
169{
170 if (machine_is_omap3530_lv_som()) {
171 /* OMAP3530 LV SOM board */
172 board_smsc911x_data.gpio_irq =
173 OMAP3530_LV_SOM_SMSC911X_GPIO_IRQ;
174 omap_mux_init_signal("gpio_152", OMAP_PIN_INPUT);
175 } else if (machine_is_omap3_torpedo()) {
176 /* OMAP3 Torpedo board */
177 board_smsc911x_data.gpio_irq = OMAP3_TORPEDO_SMSC911X_GPIO_IRQ;
178 omap_mux_init_signal("gpio_129", OMAP_PIN_INPUT);
179 } else {
180 /* unsupported board */
181 printk(KERN_ERR "%s(): unknown machine type\n", __func__);
182 return;
183 }
184
185 gpmc_smsc911x_init(&board_smsc911x_data);
186}
187
188static void __init omap3logic_init_early(void)
189{
190 omap2_init_common_infrastructure();
191 omap2_init_common_devices(NULL, NULL);
192}
193
194#ifdef CONFIG_OMAP_MUX
195static struct omap_board_mux board_mux[] __initdata = {
196 { .reg_offset = OMAP_MUX_TERMINATOR },
197};
198#endif
199
200static void __init omap3logic_init(void)
201{
202 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
203 omap3torpedo_fix_pbias_voltage();
204 omap3logic_i2c_init();
205 omap_serial_init();
206 board_mmc_init();
207 board_smsc911x_init();
208
209 /* Ensure SDRC pins are mux'd for self-refresh */
210 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
211 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
212}
213
214MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")
215 .boot_params = 0x80000100,
216 .map_io = omap3_map_io,
217 .init_early = omap3logic_init_early,
218 .init_irq = omap_init_irq,
219 .init_machine = omap3logic_init,
220 .timer = &omap_timer,
221MACHINE_END
222
223MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
224 .boot_params = 0x80000100,
225 .map_io = omap3_map_io,
226 .init_early = omap3logic_init_early,
227 .init_irq = omap_init_irq,
228 .init_machine = omap3logic_init,
229 .timer = &omap_timer,
230MACHINE_END
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index dd3af2be13be..23f71d40883e 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -22,17 +22,19 @@
22#include <linux/platform_device.h> 22#include <linux/platform_device.h>
23 23
24#include <linux/spi/spi.h> 24#include <linux/spi/spi.h>
25#include <linux/spi/ads7846.h>
26#include <linux/regulator/machine.h> 25#include <linux/regulator/machine.h>
27#include <linux/i2c/twl.h> 26#include <linux/i2c/twl.h>
28#include <linux/spi/wl12xx.h> 27#include <linux/wl12xx.h>
29#include <linux/mtd/partitions.h> 28#include <linux/mtd/partitions.h>
30#include <linux/mtd/nand.h> 29#include <linux/mtd/nand.h>
31#include <linux/leds.h> 30#include <linux/leds.h>
32#include <linux/input.h> 31#include <linux/input.h>
33#include <linux/input/matrix_keypad.h> 32#include <linux/input/matrix_keypad.h>
33#include <linux/gpio.h>
34#include <linux/gpio_keys.h> 34#include <linux/gpio_keys.h>
35#include <linux/mmc/host.h>
35#include <linux/mmc/card.h> 36#include <linux/mmc/card.h>
37#include <linux/regulator/fixed.h>
36 38
37#include <asm/mach-types.h> 39#include <asm/mach-types.h>
38#include <asm/mach/arch.h> 40#include <asm/mach/arch.h>
@@ -40,23 +42,21 @@
40 42
41#include <plat/board.h> 43#include <plat/board.h>
42#include <plat/common.h> 44#include <plat/common.h>
43#include <mach/gpio.h>
44#include <mach/hardware.h> 45#include <mach/hardware.h>
45#include <plat/mcspi.h> 46#include <plat/mcspi.h>
46#include <plat/usb.h> 47#include <plat/usb.h>
47#include <plat/display.h> 48#include <video/omapdss.h>
48#include <plat/nand.h> 49#include <plat/nand.h>
49 50
50#include "mux.h" 51#include "mux.h"
51#include "sdram-micron-mt46h32m32lf-6.h" 52#include "sdram-micron-mt46h32m32lf-6.h"
52#include "hsmmc.h" 53#include "hsmmc.h"
54#include "common-board-devices.h"
53 55
54#define PANDORA_WIFI_IRQ_GPIO 21 56#define PANDORA_WIFI_IRQ_GPIO 21
55#define PANDORA_WIFI_NRESET_GPIO 23 57#define PANDORA_WIFI_NRESET_GPIO 23
56#define OMAP3_PANDORA_TS_GPIO 94 58#define OMAP3_PANDORA_TS_GPIO 94
57 59
58#define NAND_BLOCK_SIZE SZ_128K
59
60static struct mtd_partition omap3pandora_nand_partitions[] = { 60static struct mtd_partition omap3pandora_nand_partitions[] = {
61 { 61 {
62 .name = "xloader", 62 .name = "xloader",
@@ -84,7 +84,8 @@ static struct mtd_partition omap3pandora_nand_partitions[] = {
84 84
85static struct omap_nand_platform_data pandora_nand_data = { 85static struct omap_nand_platform_data pandora_nand_data = {
86 .cs = 0, 86 .cs = 0,
87 .devsize = 1, /* '0' for 8-bit, '1' for 16-bit device */ 87 .devsize = NAND_BUSWIDTH_16,
88 .xfer_type = NAND_OMAP_PREFETCH_DMA,
88 .parts = omap3pandora_nand_partitions, 89 .parts = omap3pandora_nand_partitions,
89 .nr_parts = ARRAY_SIZE(omap3pandora_nand_partitions), 90 .nr_parts = ARRAY_SIZE(omap3pandora_nand_partitions),
90}; 91};
@@ -251,14 +252,6 @@ static struct omap_dss_board_info pandora_dss_data = {
251 .default_device = &pandora_lcd_device, 252 .default_device = &pandora_lcd_device,
252}; 253};
253 254
254static struct platform_device pandora_dss_device = {
255 .name = "omapdss",
256 .id = -1,
257 .dev = {
258 .platform_data = &pandora_dss_data,
259 },
260};
261
262static void pandora_wl1251_init_card(struct mmc_card *card) 255static void pandora_wl1251_init_card(struct mmc_card *card)
263{ 256{
264 /* 257 /*
@@ -276,14 +269,14 @@ static void pandora_wl1251_init_card(struct mmc_card *card)
276static struct omap2_hsmmc_info omap3pandora_mmc[] = { 269static struct omap2_hsmmc_info omap3pandora_mmc[] = {
277 { 270 {
278 .mmc = 1, 271 .mmc = 1,
279 .wires = 4, 272 .caps = MMC_CAP_4_BIT_DATA,
280 .gpio_cd = -EINVAL, 273 .gpio_cd = -EINVAL,
281 .gpio_wp = 126, 274 .gpio_wp = 126,
282 .ext_clock = 0, 275 .ext_clock = 0,
283 }, 276 },
284 { 277 {
285 .mmc = 2, 278 .mmc = 2,
286 .wires = 4, 279 .caps = MMC_CAP_4_BIT_DATA,
287 .gpio_cd = -EINVAL, 280 .gpio_cd = -EINVAL,
288 .gpio_wp = 127, 281 .gpio_wp = 127,
289 .ext_clock = 1, 282 .ext_clock = 1,
@@ -291,7 +284,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
291 }, 284 },
292 { 285 {
293 .mmc = 3, 286 .mmc = 3,
294 .wires = 4, 287 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
295 .gpio_cd = -EINVAL, 288 .gpio_cd = -EINVAL,
296 .gpio_wp = -EINVAL, 289 .gpio_wp = -EINVAL,
297 .init_card = pandora_wl1251_init_card, 290 .init_card = pandora_wl1251_init_card,
@@ -311,24 +304,13 @@ static int omap3pandora_twl_gpio_setup(struct device *dev,
311 304
312 /* gpio + 13 drives 32kHz buffer for wifi module */ 305 /* gpio + 13 drives 32kHz buffer for wifi module */
313 gpio_32khz = gpio + 13; 306 gpio_32khz = gpio + 13;
314 ret = gpio_request(gpio_32khz, "wifi 32kHz"); 307 ret = gpio_request_one(gpio_32khz, GPIOF_OUT_INIT_HIGH, "wifi 32kHz");
315 if (ret < 0) { 308 if (ret < 0) {
316 pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret); 309 pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret);
317 goto fail; 310 return -ENODEV;
318 }
319
320 ret = gpio_direction_output(gpio_32khz, 1);
321 if (ret < 0) {
322 pr_err("Cannot set GPIO line %d, ret=%d\n", gpio_32khz, ret);
323 goto fail_direction;
324 } 311 }
325 312
326 return 0; 313 return 0;
327
328fail_direction:
329 gpio_free(gpio_32khz);
330fail:
331 return -ENODEV;
332} 314}
333 315
334static struct twl4030_gpio_platform_data omap3pandora_gpio_data = { 316static struct twl4030_gpio_platform_data omap3pandora_gpio_data = {
@@ -339,17 +321,21 @@ static struct twl4030_gpio_platform_data omap3pandora_gpio_data = {
339}; 321};
340 322
341static struct regulator_consumer_supply pandora_vmmc1_supply = 323static struct regulator_consumer_supply pandora_vmmc1_supply =
342 REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); 324 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
343 325
344static struct regulator_consumer_supply pandora_vmmc2_supply = 326static struct regulator_consumer_supply pandora_vmmc2_supply =
345 REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"); 327 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
328
329static struct regulator_consumer_supply pandora_vmmc3_supply =
330 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2");
346 331
347static struct regulator_consumer_supply pandora_vdda_dac_supply = 332static struct regulator_consumer_supply pandora_vdda_dac_supply =
348 REGULATOR_SUPPLY("vdda_dac", "omapdss"); 333 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
349 334
350static struct regulator_consumer_supply pandora_vdds_supplies[] = { 335static struct regulator_consumer_supply pandora_vdds_supplies[] = {
351 REGULATOR_SUPPLY("vdds_sdi", "omapdss"), 336 REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
352 REGULATOR_SUPPLY("vdds_dsi", "omapdss"), 337 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
338 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
353}; 339};
354 340
355static struct regulator_consumer_supply pandora_vcc_lcd_supply = 341static struct regulator_consumer_supply pandora_vcc_lcd_supply =
@@ -488,19 +474,46 @@ static struct regulator_init_data pandora_vsim = {
488 .consumer_supplies = &pandora_adac_supply, 474 .consumer_supplies = &pandora_adac_supply,
489}; 475};
490 476
477/* Fixed regulator internal to Wifi module */
478static struct regulator_init_data pandora_vmmc3 = {
479 .constraints = {
480 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
481 },
482 .num_consumer_supplies = 1,
483 .consumer_supplies = &pandora_vmmc3_supply,
484};
485
486static struct fixed_voltage_config pandora_vwlan = {
487 .supply_name = "vwlan",
488 .microvolts = 1800000, /* 1.8V */
489 .gpio = PANDORA_WIFI_NRESET_GPIO,
490 .startup_delay = 50000, /* 50ms */
491 .enable_high = 1,
492 .enabled_at_boot = 0,
493 .init_data = &pandora_vmmc3,
494};
495
496static struct platform_device pandora_vwlan_device = {
497 .name = "reg-fixed-voltage",
498 .id = 1,
499 .dev = {
500 .platform_data = &pandora_vwlan,
501 },
502};
503
491static struct twl4030_usb_data omap3pandora_usb_data = { 504static struct twl4030_usb_data omap3pandora_usb_data = {
492 .usb_mode = T2_USB_MODE_ULPI, 505 .usb_mode = T2_USB_MODE_ULPI,
493}; 506};
494 507
495static struct twl4030_codec_audio_data omap3pandora_audio_data = { 508static struct twl4030_codec_audio_data omap3pandora_audio_data;
496 .audio_mclk = 26000000,
497};
498 509
499static struct twl4030_codec_data omap3pandora_codec_data = { 510static struct twl4030_codec_data omap3pandora_codec_data = {
500 .audio_mclk = 26000000, 511 .audio_mclk = 26000000,
501 .audio = &omap3pandora_audio_data, 512 .audio = &omap3pandora_audio_data,
502}; 513};
503 514
515static struct twl4030_bci_platform_data pandora_bci_data;
516
504static struct twl4030_platform_data omap3pandora_twldata = { 517static struct twl4030_platform_data omap3pandora_twldata = {
505 .irq_base = TWL4030_IRQ_BASE, 518 .irq_base = TWL4030_IRQ_BASE,
506 .irq_end = TWL4030_IRQ_END, 519 .irq_end = TWL4030_IRQ_END,
@@ -516,15 +529,7 @@ static struct twl4030_platform_data omap3pandora_twldata = {
516 .vaux4 = &pandora_vaux4, 529 .vaux4 = &pandora_vaux4,
517 .vsim = &pandora_vsim, 530 .vsim = &pandora_vsim,
518 .keypad = &pandora_kp_data, 531 .keypad = &pandora_kp_data,
519}; 532 .bci = &pandora_bci_data,
520
521static struct i2c_board_info __initdata omap3pandora_i2c_boardinfo[] = {
522 {
523 I2C_BOARD_INFO("tps65950", 0x48),
524 .flags = I2C_CLIENT_WAKE,
525 .irq = INT_34XX_SYS_NIRQ,
526 .platform_data = &omap3pandora_twldata,
527 },
528}; 533};
529 534
530static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = { 535static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = {
@@ -536,61 +541,15 @@ static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = {
536 541
537static int __init omap3pandora_i2c_init(void) 542static int __init omap3pandora_i2c_init(void)
538{ 543{
539 omap_register_i2c_bus(1, 2600, omap3pandora_i2c_boardinfo, 544 omap3_pmic_init("tps65950", &omap3pandora_twldata);
540 ARRAY_SIZE(omap3pandora_i2c_boardinfo));
541 /* i2c2 pins are not connected */ 545 /* i2c2 pins are not connected */
542 omap_register_i2c_bus(3, 100, omap3pandora_i2c3_boardinfo, 546 omap_register_i2c_bus(3, 100, omap3pandora_i2c3_boardinfo,
543 ARRAY_SIZE(omap3pandora_i2c3_boardinfo)); 547 ARRAY_SIZE(omap3pandora_i2c3_boardinfo));
544 return 0; 548 return 0;
545} 549}
546 550
547static void __init omap3pandora_ads7846_init(void)
548{
549 int gpio = OMAP3_PANDORA_TS_GPIO;
550 int ret;
551
552 ret = gpio_request(gpio, "ads7846_pen_down");
553 if (ret < 0) {
554 printk(KERN_ERR "Failed to request GPIO %d for "
555 "ads7846 pen down IRQ\n", gpio);
556 return;
557 }
558
559 gpio_direction_input(gpio);
560}
561
562static int ads7846_get_pendown_state(void)
563{
564 return !gpio_get_value(OMAP3_PANDORA_TS_GPIO);
565}
566
567static struct ads7846_platform_data ads7846_config = {
568 .x_max = 0x0fff,
569 .y_max = 0x0fff,
570 .x_plate_ohms = 180,
571 .pressure_max = 255,
572 .debounce_max = 10,
573 .debounce_tol = 3,
574 .debounce_rep = 1,
575 .get_pendown_state = ads7846_get_pendown_state,
576 .keep_vref_on = 1,
577};
578
579static struct omap2_mcspi_device_config ads7846_mcspi_config = {
580 .turbo_mode = 0,
581 .single_channel = 1, /* 0: slave, 1: master */
582};
583
584static struct spi_board_info omap3pandora_spi_board_info[] __initdata = { 551static struct spi_board_info omap3pandora_spi_board_info[] __initdata = {
585 { 552 {
586 .modalias = "ads7846",
587 .bus_num = 1,
588 .chip_select = 0,
589 .max_speed_hz = 1500000,
590 .controller_data = &ads7846_mcspi_config,
591 .irq = OMAP_GPIO_IRQ(OMAP3_PANDORA_TS_GPIO),
592 .platform_data = &ads7846_config,
593 }, {
594 .modalias = "tpo_td043mtea1_panel_spi", 553 .modalias = "tpo_td043mtea1_panel_spi",
595 .bus_num = 1, 554 .bus_num = 1,
596 .chip_select = 1, 555 .chip_select = 1,
@@ -599,64 +558,35 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = {
599 } 558 }
600}; 559};
601 560
602static void __init omap3pandora_init_irq(void) 561static void __init omap3pandora_init_early(void)
603{ 562{
604 omap2_init_common_hw(mt46h32m32lf6_sdrc_params, 563 omap2_init_common_infrastructure();
605 mt46h32m32lf6_sdrc_params); 564 omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
606 omap_init_irq(); 565 mt46h32m32lf6_sdrc_params);
607 omap_gpio_init();
608} 566}
609 567
610static void pandora_wl1251_set_power(bool enable) 568static void __init pandora_wl1251_init(void)
611{
612 /*
613 * Keep power always on until wl1251_sdio driver learns to re-init
614 * the chip after powering it down and back up.
615 */
616}
617
618static struct wl12xx_platform_data pandora_wl1251_pdata = {
619 .set_power = pandora_wl1251_set_power,
620 .use_eeprom = true,
621};
622
623static struct platform_device pandora_wl1251_data = {
624 .name = "wl1251_data",
625 .id = -1,
626 .dev = {
627 .platform_data = &pandora_wl1251_pdata,
628 },
629};
630
631static void pandora_wl1251_init(void)
632{ 569{
570 struct wl12xx_platform_data pandora_wl1251_pdata;
633 int ret; 571 int ret;
634 572
635 ret = gpio_request(PANDORA_WIFI_IRQ_GPIO, "wl1251 irq"); 573 memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata));
636 if (ret < 0)
637 goto fail;
638 574
639 ret = gpio_direction_input(PANDORA_WIFI_IRQ_GPIO); 575 ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq");
640 if (ret < 0) 576 if (ret < 0)
641 goto fail_irq; 577 goto fail;
642 578
643 pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO); 579 pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO);
644 if (pandora_wl1251_pdata.irq < 0) 580 if (pandora_wl1251_pdata.irq < 0)
645 goto fail_irq; 581 goto fail_irq;
646 582
647 ret = gpio_request(PANDORA_WIFI_NRESET_GPIO, "wl1251 nreset"); 583 pandora_wl1251_pdata.use_eeprom = true;
584 ret = wl12xx_set_platform_data(&pandora_wl1251_pdata);
648 if (ret < 0) 585 if (ret < 0)
649 goto fail_irq; 586 goto fail_irq;
650 587
651 /* start powered so that it probes with MMC subsystem */
652 ret = gpio_direction_output(PANDORA_WIFI_NRESET_GPIO, 1);
653 if (ret < 0)
654 goto fail_nreset;
655
656 return; 588 return;
657 589
658fail_nreset:
659 gpio_free(PANDORA_WIFI_NRESET_GPIO);
660fail_irq: 590fail_irq:
661 gpio_free(PANDORA_WIFI_IRQ_GPIO); 591 gpio_free(PANDORA_WIFI_IRQ_GPIO);
662fail: 592fail:
@@ -666,15 +596,14 @@ fail:
666static struct platform_device *omap3pandora_devices[] __initdata = { 596static struct platform_device *omap3pandora_devices[] __initdata = {
667 &pandora_leds_gpio, 597 &pandora_leds_gpio,
668 &pandora_keys_gpio, 598 &pandora_keys_gpio,
669 &pandora_dss_device, 599 &pandora_vwlan_device,
670 &pandora_wl1251_data,
671}; 600};
672 601
673static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 602static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
674 603
675 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 604 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
676 .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN, 605 .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
677 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 606 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
678 607
679 .phy_reset = true, 608 .phy_reset = true,
680 .reset_gpio_port[0] = 16, 609 .reset_gpio_port[0] = 16,
@@ -686,16 +615,8 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
686static struct omap_board_mux board_mux[] __initdata = { 615static struct omap_board_mux board_mux[] __initdata = {
687 { .reg_offset = OMAP_MUX_TERMINATOR }, 616 { .reg_offset = OMAP_MUX_TERMINATOR },
688}; 617};
689#else
690#define board_mux NULL
691#endif 618#endif
692 619
693static struct omap_musb_board_data musb_board_data = {
694 .interface_type = MUSB_INTERFACE_ULPI,
695 .mode = MUSB_OTG,
696 .power = 100,
697};
698
699static void __init omap3pandora_init(void) 620static void __init omap3pandora_init(void)
700{ 621{
701 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 622 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
@@ -703,12 +624,13 @@ static void __init omap3pandora_init(void)
703 pandora_wl1251_init(); 624 pandora_wl1251_init();
704 platform_add_devices(omap3pandora_devices, 625 platform_add_devices(omap3pandora_devices,
705 ARRAY_SIZE(omap3pandora_devices)); 626 ARRAY_SIZE(omap3pandora_devices));
627 omap_display_init(&pandora_dss_data);
706 omap_serial_init(); 628 omap_serial_init();
707 spi_register_board_info(omap3pandora_spi_board_info, 629 spi_register_board_info(omap3pandora_spi_board_info,
708 ARRAY_SIZE(omap3pandora_spi_board_info)); 630 ARRAY_SIZE(omap3pandora_spi_board_info));
709 omap3pandora_ads7846_init(); 631 omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL);
710 usb_ehci_init(&ehci_pdata); 632 usbhs_init(&usbhs_bdata);
711 usb_musb_init(&musb_board_data); 633 usb_musb_init(NULL);
712 gpmc_nand_init(&pandora_nand_data); 634 gpmc_nand_init(&pandora_nand_data);
713 635
714 /* Ensure SDRC pins are mux'd for self-refresh */ 636 /* Ensure SDRC pins are mux'd for self-refresh */
@@ -717,12 +639,11 @@ static void __init omap3pandora_init(void)
717} 639}
718 640
719MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console") 641MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
720 .phys_io = 0x48000000,
721 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
722 .boot_params = 0x80000100, 642 .boot_params = 0x80000100,
723 .map_io = omap3_map_io,
724 .reserve = omap_reserve, 643 .reserve = omap_reserve,
725 .init_irq = omap3pandora_init_irq, 644 .map_io = omap3_map_io,
645 .init_early = omap3pandora_init_early,
646 .init_irq = omap_init_irq,
726 .init_machine = omap3pandora_init, 647 .init_machine = omap3pandora_init,
727 .timer = &omap_timer, 648 .timer = &omap_timer,
728MACHINE_END 649MACHINE_END
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index bcd01d278c65..0c108a212ea2 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -26,6 +26,7 @@
26 26
27#include <linux/regulator/machine.h> 27#include <linux/regulator/machine.h>
28#include <linux/i2c/twl.h> 28#include <linux/i2c/twl.h>
29#include <linux/mmc/host.h>
29 30
30#include <mach/hardware.h> 31#include <mach/hardware.h>
31#include <asm/mach-types.h> 32#include <asm/mach-types.h>
@@ -38,13 +39,12 @@
38#include <plat/gpmc.h> 39#include <plat/gpmc.h>
39#include <plat/nand.h> 40#include <plat/nand.h>
40#include <plat/usb.h> 41#include <plat/usb.h>
41#include <plat/timer-gp.h> 42#include <video/omapdss.h>
42#include <plat/display.h> 43#include <video/omap-panel-generic-dpi.h>
43 44
44#include <plat/mcspi.h> 45#include <plat/mcspi.h>
45#include <linux/input/matrix_keypad.h> 46#include <linux/input/matrix_keypad.h>
46#include <linux/spi/spi.h> 47#include <linux/spi/spi.h>
47#include <linux/spi/ads7846.h>
48#include <linux/interrupt.h> 48#include <linux/interrupt.h>
49#include <linux/smsc911x.h> 49#include <linux/smsc911x.h>
50#include <linux/i2c/at24.h> 50#include <linux/i2c/at24.h>
@@ -52,52 +52,29 @@
52#include "sdram-micron-mt46h32m32lf-6.h" 52#include "sdram-micron-mt46h32m32lf-6.h"
53#include "mux.h" 53#include "mux.h"
54#include "hsmmc.h" 54#include "hsmmc.h"
55#include "timer-gp.h"
56#include "common-board-devices.h"
55 57
56#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) 58#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
59#include <plat/gpmc-smsc911x.h>
60
57#define OMAP3STALKER_ETHR_START 0x2c000000 61#define OMAP3STALKER_ETHR_START 0x2c000000
58#define OMAP3STALKER_ETHR_SIZE 1024 62#define OMAP3STALKER_ETHR_SIZE 1024
59#define OMAP3STALKER_ETHR_GPIO_IRQ 19 63#define OMAP3STALKER_ETHR_GPIO_IRQ 19
60#define OMAP3STALKER_SMC911X_CS 5 64#define OMAP3STALKER_SMC911X_CS 5
61 65
62static struct resource omap3stalker_smsc911x_resources[] = { 66static struct omap_smsc911x_platform_data smsc911x_cfg = {
63 [0] = { 67 .cs = OMAP3STALKER_SMC911X_CS,
64 .start = OMAP3STALKER_ETHR_START, 68 .gpio_irq = OMAP3STALKER_ETHR_GPIO_IRQ,
65 .end = 69 .gpio_reset = -EINVAL,
66 (OMAP3STALKER_ETHR_START + OMAP3STALKER_ETHR_SIZE - 1),
67 .flags = IORESOURCE_MEM,
68 },
69 [1] = {
70 .start = OMAP_GPIO_IRQ(OMAP3STALKER_ETHR_GPIO_IRQ),
71 .end = OMAP_GPIO_IRQ(OMAP3STALKER_ETHR_GPIO_IRQ),
72 .flags = (IORESOURCE_IRQ | IRQF_TRIGGER_LOW),
73 },
74};
75
76static struct smsc911x_platform_config smsc911x_config = {
77 .phy_interface = PHY_INTERFACE_MODE_MII,
78 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
79 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
80 .flags = (SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS), 70 .flags = (SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS),
81}; 71};
82 72
83static struct platform_device omap3stalker_smsc911x_device = {
84 .name = "smsc911x",
85 .id = -1,
86 .num_resources = ARRAY_SIZE(omap3stalker_smsc911x_resources),
87 .resource = &omap3stalker_smsc911x_resources[0],
88 .dev = {
89 .platform_data = &smsc911x_config,
90 },
91};
92
93static inline void __init omap3stalker_init_eth(void) 73static inline void __init omap3stalker_init_eth(void)
94{ 74{
95 int eth_cs;
96 struct clk *l3ck; 75 struct clk *l3ck;
97 unsigned int rate; 76 unsigned int rate;
98 77
99 eth_cs = OMAP3STALKER_SMC911X_CS;
100
101 l3ck = clk_get(NULL, "l3_ck"); 78 l3ck = clk_get(NULL, "l3_ck");
102 if (IS_ERR(l3ck)) 79 if (IS_ERR(l3ck))
103 rate = 100000000; 80 rate = 100000000;
@@ -105,16 +82,7 @@ static inline void __init omap3stalker_init_eth(void)
105 rate = clk_get_rate(l3ck); 82 rate = clk_get_rate(l3ck);
106 83
107 omap_mux_init_gpio(19, OMAP_PIN_INPUT_PULLUP); 84 omap_mux_init_gpio(19, OMAP_PIN_INPUT_PULLUP);
108 if (gpio_request(OMAP3STALKER_ETHR_GPIO_IRQ, "SMC911x irq") < 0) { 85 gpmc_smsc911x_init(&smsc911x_cfg);
109 printk(KERN_ERR
110 "Failed to request GPIO%d for smc911x IRQ\n",
111 OMAP3STALKER_ETHR_GPIO_IRQ);
112 return;
113 }
114
115 gpio_direction_input(OMAP3STALKER_ETHR_GPIO_IRQ);
116
117 platform_device_register(&omap3stalker_smsc911x_device);
118} 86}
119 87
120#else 88#else
@@ -159,13 +127,18 @@ static void omap3_stalker_disable_lcd(struct omap_dss_device *dssdev)
159 lcd_enabled = 0; 127 lcd_enabled = 0;
160} 128}
161 129
130static struct panel_generic_dpi_data lcd_panel = {
131 .name = "generic",
132 .platform_enable = omap3_stalker_enable_lcd,
133 .platform_disable = omap3_stalker_disable_lcd,
134};
135
162static struct omap_dss_device omap3_stalker_lcd_device = { 136static struct omap_dss_device omap3_stalker_lcd_device = {
163 .name = "lcd", 137 .name = "lcd",
164 .driver_name = "generic_panel", 138 .driver_name = "generic_dpi_panel",
139 .data = &lcd_panel,
165 .phy.dpi.data_lines = 24, 140 .phy.dpi.data_lines = 24,
166 .type = OMAP_DISPLAY_TYPE_DPI, 141 .type = OMAP_DISPLAY_TYPE_DPI,
167 .platform_enable = omap3_stalker_enable_lcd,
168 .platform_disable = omap3_stalker_disable_lcd,
169}; 142};
170 143
171static int omap3_stalker_enable_tv(struct omap_dss_device *dssdev) 144static int omap3_stalker_enable_tv(struct omap_dss_device *dssdev)
@@ -207,13 +180,18 @@ static void omap3_stalker_disable_dvi(struct omap_dss_device *dssdev)
207 dvi_enabled = 0; 180 dvi_enabled = 0;
208} 181}
209 182
183static struct panel_generic_dpi_data dvi_panel = {
184 .name = "generic",
185 .platform_enable = omap3_stalker_enable_dvi,
186 .platform_disable = omap3_stalker_disable_dvi,
187};
188
210static struct omap_dss_device omap3_stalker_dvi_device = { 189static struct omap_dss_device omap3_stalker_dvi_device = {
211 .name = "dvi", 190 .name = "dvi",
212 .driver_name = "generic_panel",
213 .type = OMAP_DISPLAY_TYPE_DPI, 191 .type = OMAP_DISPLAY_TYPE_DPI,
192 .driver_name = "generic_dpi_panel",
193 .data = &dvi_panel,
214 .phy.dpi.data_lines = 24, 194 .phy.dpi.data_lines = 24,
215 .platform_enable = omap3_stalker_enable_dvi,
216 .platform_disable = omap3_stalker_disable_dvi,
217}; 195};
218 196
219static struct omap_dss_device *omap3_stalker_dss_devices[] = { 197static struct omap_dss_device *omap3_stalker_dss_devices[] = {
@@ -228,14 +206,6 @@ static struct omap_dss_board_info omap3_stalker_dss_data = {
228 .default_device = &omap3_stalker_dvi_device, 206 .default_device = &omap3_stalker_dvi_device,
229}; 207};
230 208
231static struct platform_device omap3_stalker_dss_device = {
232 .name = "omapdss",
233 .id = -1,
234 .dev = {
235 .platform_data = &omap3_stalker_dss_data,
236 },
237};
238
239static struct regulator_consumer_supply omap3stalker_vmmc1_supply = { 209static struct regulator_consumer_supply omap3stalker_vmmc1_supply = {
240 .supply = "vmmc", 210 .supply = "vmmc",
241}; 211};
@@ -275,7 +245,7 @@ static struct regulator_init_data omap3stalker_vsim = {
275static struct omap2_hsmmc_info mmc[] = { 245static struct omap2_hsmmc_info mmc[] = {
276 { 246 {
277 .mmc = 1, 247 .mmc = 1,
278 .wires = 4, 248 .caps = MMC_CAP_4_BIT_DATA,
279 .gpio_cd = -EINVAL, 249 .gpio_cd = -EINVAL,
280 .gpio_wp = 23, 250 .gpio_wp = 23,
281 }, 251 },
@@ -361,12 +331,11 @@ omap3stalker_twl_gpio_setup(struct device *dev,
361 */ 331 */
362 332
363 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */ 333 /* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
364 gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL"); 334 gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
365 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); 335 "EN_LCD_BKL");
366 336
367 /* gpio + 7 == DVI Enable */ 337 /* gpio + 7 == DVI Enable */
368 gpio_request(gpio + 7, "EN_DVI"); 338 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "EN_DVI");
369 gpio_direction_output(gpio + 7, 0);
370 339
371 /* TWL4030_GPIO_MAX + 1 == ledB (out, mmc0) */ 340 /* TWL4030_GPIO_MAX + 1 == ledB (out, mmc0) */
372 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 341 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -389,7 +358,7 @@ static struct twl4030_usb_data omap3stalker_usb_data = {
389 .usb_mode = T2_USB_MODE_ULPI, 358 .usb_mode = T2_USB_MODE_ULPI,
390}; 359};
391 360
392static int board_keymap[] = { 361static uint32_t board_keymap[] = {
393 KEY(0, 0, KEY_LEFT), 362 KEY(0, 0, KEY_LEFT),
394 KEY(0, 1, KEY_DOWN), 363 KEY(0, 1, KEY_DOWN),
395 KEY(0, 2, KEY_ENTER), 364 KEY(0, 2, KEY_ENTER),
@@ -427,19 +396,15 @@ static struct twl4030_madc_platform_data omap3stalker_madc_data = {
427 .irq_line = 1, 396 .irq_line = 1,
428}; 397};
429 398
430static struct twl4030_codec_audio_data omap3stalker_audio_data = { 399static struct twl4030_codec_audio_data omap3stalker_audio_data;
431 .audio_mclk = 26000000,
432};
433 400
434static struct twl4030_codec_data omap3stalker_codec_data = { 401static struct twl4030_codec_data omap3stalker_codec_data = {
435 .audio_mclk = 26000000, 402 .audio_mclk = 26000000,
436 .audio = &omap3stalker_audio_data, 403 .audio = &omap3stalker_audio_data,
437}; 404};
438 405
439static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = { 406static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply =
440 .supply = "vdda_dac", 407 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
441 .dev = &omap3_stalker_dss_device.dev,
442};
443 408
444/* VDAC for DSS driving S-Video */ 409/* VDAC for DSS driving S-Video */
445static struct regulator_init_data omap3_stalker_vdac = { 410static struct regulator_init_data omap3_stalker_vdac = {
@@ -457,9 +422,9 @@ static struct regulator_init_data omap3_stalker_vdac = {
457}; 422};
458 423
459/* VPLL2 for digital video outputs */ 424/* VPLL2 for digital video outputs */
460static struct regulator_consumer_supply omap3_stalker_vpll2_supply = { 425static struct regulator_consumer_supply omap3_stalker_vpll2_supplies[] = {
461 .supply = "vdds_dsi", 426 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
462 .dev = &omap3_stalker_lcd_device.dev, 427 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
463}; 428};
464 429
465static struct regulator_init_data omap3_stalker_vpll2 = { 430static struct regulator_init_data omap3_stalker_vpll2 = {
@@ -473,8 +438,8 @@ static struct regulator_init_data omap3_stalker_vpll2 = {
473 .valid_ops_mask = REGULATOR_CHANGE_MODE 438 .valid_ops_mask = REGULATOR_CHANGE_MODE
474 | REGULATOR_CHANGE_STATUS, 439 | REGULATOR_CHANGE_STATUS,
475 }, 440 },
476 .num_consumer_supplies = 1, 441 .num_consumer_supplies = ARRAY_SIZE(omap3_stalker_vpll2_supplies),
477 .consumer_supplies = &omap3_stalker_vpll2_supply, 442 .consumer_supplies = omap3_stalker_vpll2_supplies,
478}; 443};
479 444
480static struct twl4030_platform_data omap3stalker_twldata = { 445static struct twl4030_platform_data omap3stalker_twldata = {
@@ -489,15 +454,8 @@ static struct twl4030_platform_data omap3stalker_twldata = {
489 .codec = &omap3stalker_codec_data, 454 .codec = &omap3stalker_codec_data,
490 .vdac = &omap3_stalker_vdac, 455 .vdac = &omap3_stalker_vdac,
491 .vpll2 = &omap3_stalker_vpll2, 456 .vpll2 = &omap3_stalker_vpll2,
492}; 457 .vmmc1 = &omap3stalker_vmmc1,
493 458 .vsim = &omap3stalker_vsim,
494static struct i2c_board_info __initdata omap3stalker_i2c_boardinfo[] = {
495 {
496 I2C_BOARD_INFO("twl4030", 0x48),
497 .flags = I2C_CLIENT_WAKE,
498 .irq = INT_34XX_SYS_NIRQ,
499 .platform_data = &omap3stalker_twldata,
500 },
501}; 459};
502 460
503static struct at24_platform_data fram_info = { 461static struct at24_platform_data fram_info = {
@@ -516,15 +474,7 @@ static struct i2c_board_info __initdata omap3stalker_i2c_boardinfo3[] = {
516 474
517static int __init omap3_stalker_i2c_init(void) 475static int __init omap3_stalker_i2c_init(void)
518{ 476{
519 /* 477 omap3_pmic_init("twl4030", &omap3stalker_twldata);
520 * REVISIT: These entries can be set in omap3evm_twl_data
521 * after a merge with MFD tree
522 */
523 omap3stalker_twldata.vmmc1 = &omap3stalker_vmmc1;
524 omap3stalker_twldata.vsim = &omap3stalker_vsim;
525
526 omap_register_i2c_bus(1, 2600, omap3stalker_i2c_boardinfo,
527 ARRAY_SIZE(omap3stalker_i2c_boardinfo));
528 omap_register_i2c_bus(2, 400, NULL, 0); 478 omap_register_i2c_bus(2, 400, NULL, 0);
529 omap_register_i2c_bus(3, 400, omap3stalker_i2c_boardinfo3, 479 omap_register_i2c_bus(3, 400, omap3stalker_i2c_boardinfo3,
530 ARRAY_SIZE(omap3stalker_i2c_boardinfo3)); 480 ARRAY_SIZE(omap3stalker_i2c_boardinfo3));
@@ -532,74 +482,32 @@ static int __init omap3_stalker_i2c_init(void)
532} 482}
533 483
534#define OMAP3_STALKER_TS_GPIO 175 484#define OMAP3_STALKER_TS_GPIO 175
535static void ads7846_dev_init(void)
536{
537 if (gpio_request(OMAP3_STALKER_TS_GPIO, "ADS7846 pendown") < 0)
538 printk(KERN_ERR "can't get ads7846 pen down GPIO\n");
539 485
540 gpio_direction_input(OMAP3_STALKER_TS_GPIO); 486static struct omap_board_config_kernel omap3_stalker_config[] __initdata = {
541 gpio_set_debounce(OMAP3_STALKER_TS_GPIO, 310); 487};
542}
543 488
544static int ads7846_get_pendown_state(void) 489static void __init omap3_stalker_init_early(void)
545{ 490{
546 return !gpio_get_value(OMAP3_STALKER_TS_GPIO); 491 omap2_init_common_infrastructure();
492 omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
547} 493}
548 494
549static struct ads7846_platform_data ads7846_config = {
550 .x_max = 0x0fff,
551 .y_max = 0x0fff,
552 .x_plate_ohms = 180,
553 .pressure_max = 255,
554 .debounce_max = 10,
555 .debounce_tol = 3,
556 .debounce_rep = 1,
557 .get_pendown_state = ads7846_get_pendown_state,
558 .keep_vref_on = 1,
559 .settle_delay_usecs = 150,
560};
561
562static struct omap2_mcspi_device_config ads7846_mcspi_config = {
563 .turbo_mode = 0,
564 .single_channel = 1, /* 0: slave, 1: master */
565};
566
567struct spi_board_info omap3stalker_spi_board_info[] = {
568 [0] = {
569 .modalias = "ads7846",
570 .bus_num = 1,
571 .chip_select = 0,
572 .max_speed_hz = 1500000,
573 .controller_data = &ads7846_mcspi_config,
574 .irq = OMAP_GPIO_IRQ(OMAP3_STALKER_TS_GPIO),
575 .platform_data = &ads7846_config,
576 },
577};
578
579static struct omap_board_config_kernel omap3_stalker_config[] __initdata = {
580};
581
582static void __init omap3_stalker_init_irq(void) 495static void __init omap3_stalker_init_irq(void)
583{ 496{
584 omap_board_config = omap3_stalker_config;
585 omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
586 omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL);
587 omap_init_irq(); 497 omap_init_irq();
588#ifdef CONFIG_OMAP_32K_TIMER 498#ifdef CONFIG_OMAP_32K_TIMER
589 omap2_gp_clockevent_set_gptimer(12); 499 omap2_gp_clockevent_set_gptimer(12);
590#endif 500#endif
591 omap_gpio_init();
592} 501}
593 502
594static struct platform_device *omap3_stalker_devices[] __initdata = { 503static struct platform_device *omap3_stalker_devices[] __initdata = {
595 &omap3_stalker_dss_device,
596 &keys_gpio, 504 &keys_gpio,
597}; 505};
598 506
599static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 507static struct usbhs_omap_board_data usbhs_bdata __initconst = {
600 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN, 508 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
601 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY, 509 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
602 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN, 510 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
603 511
604 .phy_reset = true, 512 .phy_reset = true,
605 .reset_gpio_port[0] = -EINVAL, 513 .reset_gpio_port[0] = -EINVAL,
@@ -615,32 +523,25 @@ static struct omap_board_mux board_mux[] __initdata = {
615 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE), 523 OMAP_PIN_OFF_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE),
616 {.reg_offset = OMAP_MUX_TERMINATOR}, 524 {.reg_offset = OMAP_MUX_TERMINATOR},
617}; 525};
618#else
619#define board_mux NULL
620#endif 526#endif
621 527
622static struct omap_musb_board_data musb_board_data = {
623 .interface_type = MUSB_INTERFACE_ULPI,
624 .mode = MUSB_OTG,
625 .power = 100,
626};
627
628static void __init omap3_stalker_init(void) 528static void __init omap3_stalker_init(void)
629{ 529{
630 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); 530 omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
531 omap_board_config = omap3_stalker_config;
532 omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
631 533
632 omap3_stalker_i2c_init(); 534 omap3_stalker_i2c_init();
633 535
634 platform_add_devices(omap3_stalker_devices, 536 platform_add_devices(omap3_stalker_devices,
635 ARRAY_SIZE(omap3_stalker_devices)); 537 ARRAY_SIZE(omap3_stalker_devices));
636 538
637 spi_register_board_info(omap3stalker_spi_board_info, 539 omap_display_init(&omap3_stalker_dss_data);
638 ARRAY_SIZE(omap3stalker_spi_board_info));
639 540
640 omap_serial_init(); 541 omap_serial_init();
641 usb_musb_init(&musb_board_data); 542 usb_musb_init(NULL);
642 usb_ehci_init(&ehci_pdata); 543 usbhs_init(&usbhs_bdata);
643 ads7846_dev_init(); 544 omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL);
644 545
645 omap_mux_init_gpio(21, OMAP_PIN_OUTPUT); 546 omap_mux_init_gpio(21, OMAP_PIN_OUTPUT);
646 omap_mux_init_gpio(18, OMAP_PIN_INPUT_PULLUP); 547 omap_mux_init_gpio(18, OMAP_PIN_INPUT_PULLUP);
@@ -654,10 +555,9 @@ static void __init omap3_stalker_init(void)
654 555
655MACHINE_START(SBC3530, "OMAP3 STALKER") 556MACHINE_START(SBC3530, "OMAP3 STALKER")
656 /* Maintainer: Jason Lam -lzg@ema-tech.com */ 557 /* Maintainer: Jason Lam -lzg@ema-tech.com */
657 .phys_io = 0x48000000,
658 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
659 .boot_params = 0x80000100, 558 .boot_params = 0x80000100,
660 .map_io = omap3_map_io, 559 .map_io = omap3_map_io,
560 .init_early = omap3_stalker_init_early,
661 .init_irq = omap3_stalker_init_irq, 561 .init_irq = omap3_stalker_init_irq,
662 .init_machine = omap3_stalker_init, 562 .init_machine = omap3_stalker_init,
663 .timer = &omap_timer, 563 .timer = &omap_timer,
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c
index 663c62d271e8..5f649faf7377 100644
--- a/arch/arm/mach-omap2/board-omap3touchbook.c
+++ b/arch/arm/mach-omap2/board-omap3touchbook.c
@@ -27,6 +27,7 @@
27#include <linux/mtd/mtd.h> 27#include <linux/mtd/mtd.h>
28#include <linux/mtd/partitions.h> 28#include <linux/mtd/partitions.h>
29#include <linux/mtd/nand.h> 29#include <linux/mtd/nand.h>
30#include <linux/mmc/host.h>
30 31
31#include <plat/mcspi.h> 32#include <plat/mcspi.h>
32#include <linux/spi/spi.h> 33#include <linux/spi/spi.h>
@@ -47,21 +48,20 @@
47#include <plat/gpmc.h> 48#include <plat/gpmc.h>
48#include <plat/nand.h> 49#include <plat/nand.h>
49#include <plat/usb.h> 50#include <plat/usb.h>
50#include <plat/timer-gp.h>
51 51
52#include "mux.h" 52#include "mux.h"
53#include "hsmmc.h" 53#include "hsmmc.h"
54#include "timer-gp.h"
55#include "common-board-devices.h"
54 56
55#include <asm/setup.h> 57#include <asm/setup.h>
56 58
57#define NAND_BLOCK_SIZE SZ_128K
58
59#define OMAP3_AC_GPIO 136 59#define OMAP3_AC_GPIO 136
60#define OMAP3_TS_GPIO 162 60#define OMAP3_TS_GPIO 162
61#define TB_BL_PWM_TIMER 9 61#define TB_BL_PWM_TIMER 9
62#define TB_KILL_POWER_GPIO 168 62#define TB_KILL_POWER_GPIO 168
63 63
64unsigned long touchbook_revision; 64static unsigned long touchbook_revision;
65 65
66static struct mtd_partition omap3touchbook_nand_partitions[] = { 66static struct mtd_partition omap3touchbook_nand_partitions[] = {
67 /* All the partition sizes are listed in terms of NAND block size */ 67 /* All the partition sizes are listed in terms of NAND block size */
@@ -94,21 +94,12 @@ static struct mtd_partition omap3touchbook_nand_partitions[] = {
94 }, 94 },
95}; 95};
96 96
97static struct omap_nand_platform_data omap3touchbook_nand_data = {
98 .options = NAND_BUSWIDTH_16,
99 .parts = omap3touchbook_nand_partitions,
100 .nr_parts = ARRAY_SIZE(omap3touchbook_nand_partitions),
101 .dma_channel = -1, /* disable DMA in OMAP NAND driver */
102 .nand_setup = NULL,
103 .dev_ready = NULL,
104};
105
106#include "sdram-micron-mt46h32m32lf-6.h" 97#include "sdram-micron-mt46h32m32lf-6.h"
107 98
108static struct omap2_hsmmc_info mmc[] = { 99static struct omap2_hsmmc_info mmc[] = {
109 { 100 {
110 .mmc = 1, 101 .mmc = 1,
111 .wires = 8, 102 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
112 .gpio_wp = 29, 103 .gpio_wp = 29,
113 }, 104 },
114 {} /* Terminator */ 105 {} /* Terminator */
@@ -153,13 +144,11 @@ static int touchbook_twl_gpio_setup(struct device *dev,
153 /* REVISIT: need ehci-omap hooks for external VBUS 144 /* REVISIT: need ehci-omap hooks for external VBUS
154 * power switch and overcurrent detect 145 * power switch and overcurrent detect
155 */ 146 */
156 147 gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC");
157 gpio_request(gpio + 1, "EHCI_nOC");
158 gpio_direction_input(gpio + 1);
159 148
160 /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ 149 /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
161 gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); 150 gpio_request_one(gpio + TWL4030_GPIO_MAX, GPIOF_OUT_INIT_LOW,
162 gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); 151 "nEN_USB_PWR");
163 152
164 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ 153 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
165 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; 154 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
@@ -251,9 +240,7 @@ static struct twl4030_usb_data touchbook_usb_data = {
251 .usb_mode = T2_USB_MODE_ULPI, 240 .usb_mode = T2_USB_MODE_ULPI,
252}; 241};
253 242
254static struct twl4030_codec_audio_data touchbook_audio_data = { 243static struct twl4030_codec_audio_data touchbook_audio_data;
255 .audio_mclk = 26000000,
256};
257 244
258static struct twl4030_codec_data touchbook_codec_data = { 245static struct twl4030_codec_data touchbook_codec_data = {
259 .audio_mclk = 26000000, 246 .audio_mclk = 26000000,
@@ -274,15 +261,6 @@ static struct twl4030_platform_data touchbook_twldata = {
274 .vpll2 = &touchbook_vpll2, 261 .vpll2 = &touchbook_vpll2,
275}; 262};
276 263
277static struct i2c_board_info __initdata touchbook_i2c_boardinfo[] = {
278 {
279 I2C_BOARD_INFO("twl4030", 0x48),
280 .flags = I2C_CLIENT_WAKE,
281 .irq = INT_34XX_SYS_NIRQ,
282 .platform_data = &touchbook_twldata,
283 },
284};
285
286static struct i2c_board_info __initdata touchBook_i2c_boardinfo[] = { 264static struct i2c_board_info __initdata touchBook_i2c_boardinfo[] = {
287 { 265 {
288 I2C_BOARD_INFO("bq27200", 0x55), 266 I2C_BOARD_INFO("bq27200", 0x55),
@@ -292,8 +270,7 @@ static struct i2c_board_info __initdata touchBook_i2c_boardinfo[] = {
292static int __init omap3_touchbook_i2c_init(void) 270static int __init omap3_touchbook_i2c_init(void)
293{ 271{
294 /* Standard TouchBook bus */ 272 /* Standard TouchBook bus */
295 omap_register_i2c_bus(1, 2600, touchbook_i2c_boardinfo, 273 omap3_pmic_init("twl4030", &touchbook_twldata);
296 ARRAY_SIZE(touchbook_i2c_boardinfo));
297 274
298 /* Additional TouchBook bus */ 275 /* Additional TouchBook bus */
299 omap_register_i2c_bus(3, 100, touchBook_i2c_boardinfo, 276 omap_register_i2c_bus(3, 100, touchBook_i2c_boardinfo,
@@ -302,19 +279,7 @@ static int __init omap3_touchbook_i2c_init(void)
302 return 0; 279 return 0;
303} 280}
304 281
305static void __init omap3_ads7846_init(void) 282static struct ads7846_platform_data ads7846_pdata = {
306{
307 if (gpio_request(OMAP3_TS_GPIO, "ads7846_pen_down")) {
308 printk(KERN_ERR "Failed to request GPIO %d for "
309 "ads7846 pen down IRQ\n", OMAP3_TS_GPIO);
310 return;
311 }
312
313 gpio_direction_input(OMAP3_TS_GPIO);
314 gpio_set_debounce(OMAP3_TS_GPIO, 310);
315}
316
317static struct ads7846_platform_data ads7846_config = {
318 .x_min = 100, 283 .x_min = 100,
319 .y_min = 265, 284 .y_min = 265,
320 .x_max = 3950, 285 .x_max = 3950,
@@ -328,23 +293,6 @@ static struct ads7846_platform_data ads7846_config = {
328 .keep_vref_on = 1, 293 .keep_vref_on = 1,
329}; 294};
330 295
331static struct omap2_mcspi_device_config ads7846_mcspi_config = {
332 .turbo_mode = 0,
333 .single_channel = 1, /* 0: slave, 1: master */
334};
335
336static struct spi_board_info omap3_ads7846_spi_board_info[] __initdata = {
337 {
338 .modalias = "ads7846",
339 .bus_num = 4,
340 .chip_select = 0,
341 .max_speed_hz = 1500000,
342 .controller_data = &ads7846_mcspi_config,
343 .irq = OMAP_GPIO_IRQ(OMAP3_TS_GPIO),
344 .platform_data = &ads7846_config,
345 }
346};
347
348static struct gpio_led gpio_leds[] = { 296static struct gpio_led gpio_leds[] = {
349 { 297 {
350 .name = "touchbook::usr0", 298 .name = "touchbook::usr0",
@@ -412,22 +360,21 @@ static struct omap_board_config_kernel omap3_touchbook_config[] __initdata = {
412static struct omap_board_mux board_mux[] __initdata = { 360static struct omap_board_mux board_mux[] __initdata = {
413 { .reg_offset = OMAP_MUX_TERMINATOR }, 361 { .reg_offset = OMAP_MUX_TERMINATOR },
414}; 362};
415#else
416#define board_mux NULL
417#endif 363#endif
418 364
365static void __init omap3_touchbook_init_early(void)
366{
367 omap2_init_common_infrastructure();
368 omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
369 mt46h32m32lf6_sdrc_params);
370}
371
419static void __init omap3_touchbook_init_irq(void) 372static void __init omap3_touchbook_init_irq(void)
420{ 373{
421 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
422 omap_board_config = omap3_touchbook_config;
423 omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
424 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
425 mt46h32m32lf6_sdrc_params);
426 omap_init_irq(); 374 omap_init_irq();
427#ifdef CONFIG_OMAP_32K_TIMER 375#ifdef CONFIG_OMAP_32K_TIMER
428 omap2_gp_clockevent_set_gptimer(12); 376 omap2_gp_clockevent_set_gptimer(12);
429#endif 377#endif
430 omap_gpio_init();
431} 378}
432 379
433static struct platform_device *omap3_touchbook_devices[] __initdata = { 380static struct platform_device *omap3_touchbook_devices[] __initdata = {
@@ -436,44 +383,11 @@ static struct platform_device *omap3_touchbook_devices[] __initdata = {
436 &keys_gpio, 383 &keys_gpio,
437}; 384};
438 385
439static void __init omap3touchbook_flash_init(void) 386static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
440{
441 u8 cs = 0;
442 u8 nandcs = GPMC_CS_NUM + 1;
443
444 /* find out the chip-select on which NAND exists */
445 while (cs < GPMC_CS_NUM) {
446 u32 ret = 0;
447 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
448
449 if ((ret & 0xC00) == 0x800) {
450 printk(KERN_INFO "Found NAND on CS%d\n", cs);
451 if (nandcs > GPMC_CS_NUM)
452 nandcs = cs;
453 }
454 cs++;
455 }
456
457 if (nandcs > GPMC_CS_NUM) {
458 printk(KERN_INFO "NAND: Unable to find configuration "
459 "in GPMC\n ");
460 return;
461 }
462
463 if (nandcs < GPMC_CS_NUM) {
464 omap3touchbook_nand_data.cs = nandcs;
465
466 printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
467 if (gpmc_nand_init(&omap3touchbook_nand_data) < 0)
468 printk(KERN_ERR "Unable to register NAND device\n");
469 }
470}
471 387
472static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 388 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
473 389 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
474 .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY, 390 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
475 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
476 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
477 391
478 .phy_reset = true, 392 .phy_reset = true,
479 .reset_gpio_port[0] = -EINVAL, 393 .reset_gpio_port[0] = -EINVAL,
@@ -483,15 +397,10 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
483 397
484static void omap3_touchbook_poweroff(void) 398static void omap3_touchbook_poweroff(void)
485{ 399{
486 int r; 400 int pwr_off = TB_KILL_POWER_GPIO;
487 401
488 r = gpio_request(TB_KILL_POWER_GPIO, "DVI reset"); 402 if (gpio_request_one(pwr_off, GPIOF_OUT_INIT_LOW, "DVI reset") < 0)
489 if (r < 0) {
490 printk(KERN_ERR "Unable to get kill power GPIO\n"); 403 printk(KERN_ERR "Unable to get kill power GPIO\n");
491 return;
492 }
493
494 gpio_direction_output(TB_KILL_POWER_GPIO, 0);
495} 404}
496 405
497static int __init early_touchbook_revision(char *p) 406static int __init early_touchbook_revision(char *p)
@@ -503,14 +412,12 @@ static int __init early_touchbook_revision(char *p)
503} 412}
504early_param("tbr", early_touchbook_revision); 413early_param("tbr", early_touchbook_revision);
505 414
506static struct omap_musb_board_data musb_board_data = {
507 .interface_type = MUSB_INTERFACE_ULPI,
508 .mode = MUSB_OTG,
509 .power = 100,
510};
511
512static void __init omap3_touchbook_init(void) 415static void __init omap3_touchbook_init(void)
513{ 416{
417 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
418 omap_board_config = omap3_touchbook_config;
419 omap_board_config_size = ARRAY_SIZE(omap3_touchbook_config);
420
514 pm_power_off = omap3_touchbook_poweroff; 421 pm_power_off = omap3_touchbook_poweroff;
515 422
516 omap3_touchbook_i2c_init(); 423 omap3_touchbook_i2c_init();
@@ -519,17 +426,15 @@ static void __init omap3_touchbook_init(void)
519 omap_serial_init(); 426 omap_serial_init();
520 427
521 omap_mux_init_gpio(170, OMAP_PIN_INPUT); 428 omap_mux_init_gpio(170, OMAP_PIN_INPUT);
522 gpio_request(176, "DVI_nPD");
523 /* REVISIT leave DVI powered down until it's needed ... */ 429 /* REVISIT leave DVI powered down until it's needed ... */
524 gpio_direction_output(176, true); 430 gpio_request_one(176, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
525 431
526 /* Touchscreen and accelerometer */ 432 /* Touchscreen and accelerometer */
527 spi_register_board_info(omap3_ads7846_spi_board_info, 433 omap_ads7846_init(4, OMAP3_TS_GPIO, 310, &ads7846_pdata);
528 ARRAY_SIZE(omap3_ads7846_spi_board_info)); 434 usb_musb_init(NULL);
529 omap3_ads7846_init(); 435 usbhs_init(&usbhs_bdata);
530 usb_musb_init(&musb_board_data); 436 omap_nand_flash_init(NAND_BUSWIDTH_16, omap3touchbook_nand_partitions,
531 usb_ehci_init(&ehci_pdata); 437 ARRAY_SIZE(omap3touchbook_nand_partitions));
532 omap3touchbook_flash_init();
533 438
534 /* Ensure SDRC pins are mux'd for self-refresh */ 439 /* Ensure SDRC pins are mux'd for self-refresh */
535 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); 440 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
@@ -538,11 +443,10 @@ static void __init omap3_touchbook_init(void)
538 443
539MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board") 444MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
540 /* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */ 445 /* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */
541 .phys_io = 0x48000000,
542 .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc,
543 .boot_params = 0x80000100, 446 .boot_params = 0x80000100,
544 .map_io = omap3_map_io,
545 .reserve = omap_reserve, 447 .reserve = omap_reserve,
448 .map_io = omap3_map_io,
449 .init_early = omap3_touchbook_init_early,
546 .init_irq = omap3_touchbook_init_irq, 450 .init_irq = omap3_touchbook_init_irq,
547 .init_machine = omap3_touchbook_init, 451 .init_machine = omap3_touchbook_init,
548 .timer = &omap_timer, 452 .timer = &omap_timer,
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index c03d1d56db56..0cfe2005cb50 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -19,45 +19,165 @@
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/platform_device.h> 21#include <linux/platform_device.h>
22#include <linux/clk.h>
22#include <linux/io.h> 23#include <linux/io.h>
24#include <linux/leds.h>
23#include <linux/gpio.h> 25#include <linux/gpio.h>
24#include <linux/usb/otg.h> 26#include <linux/usb/otg.h>
25#include <linux/i2c/twl.h> 27#include <linux/i2c/twl.h>
26#include <linux/regulator/machine.h> 28#include <linux/regulator/machine.h>
29#include <linux/regulator/fixed.h>
30#include <linux/wl12xx.h>
27 31
28#include <mach/hardware.h> 32#include <mach/hardware.h>
29#include <mach/omap4-common.h> 33#include <mach/omap4-common.h>
30#include <asm/mach-types.h> 34#include <asm/mach-types.h>
31#include <asm/mach/arch.h> 35#include <asm/mach/arch.h>
32#include <asm/mach/map.h> 36#include <asm/mach/map.h>
37#include <video/omapdss.h>
33 38
34#include <plat/board.h> 39#include <plat/board.h>
35#include <plat/common.h> 40#include <plat/common.h>
36#include <plat/control.h>
37#include <plat/timer-gp.h>
38#include <plat/usb.h> 41#include <plat/usb.h>
39#include <plat/mmc.h> 42#include <plat/mmc.h>
43#include <video/omap-panel-generic-dpi.h>
44#include "timer-gp.h"
45
40#include "hsmmc.h" 46#include "hsmmc.h"
47#include "control.h"
48#include "mux.h"
49#include "common-board-devices.h"
50
51#define GPIO_HUB_POWER 1
52#define GPIO_HUB_NRESET 62
53#define GPIO_WIFI_PMENA 43
54#define GPIO_WIFI_IRQ 53
55#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
56#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
57
58/* wl127x BT, FM, GPS connectivity chip */
59static int wl1271_gpios[] = {46, -1, -1};
60static struct platform_device wl1271_device = {
61 .name = "kim",
62 .id = -1,
63 .dev = {
64 .platform_data = &wl1271_gpios,
65 },
66};
67
68static struct gpio_led gpio_leds[] = {
69 {
70 .name = "pandaboard::status1",
71 .default_trigger = "heartbeat",
72 .gpio = 7,
73 },
74 {
75 .name = "pandaboard::status2",
76 .default_trigger = "mmc0",
77 .gpio = 8,
78 },
79};
80
81static struct gpio_led_platform_data gpio_led_info = {
82 .leds = gpio_leds,
83 .num_leds = ARRAY_SIZE(gpio_leds),
84};
85
86static struct platform_device leds_gpio = {
87 .name = "leds-gpio",
88 .id = -1,
89 .dev = {
90 .platform_data = &gpio_led_info,
91 },
92};
41 93
94static struct platform_device *panda_devices[] __initdata = {
95 &leds_gpio,
96 &wl1271_device,
97};
42 98
43static void __init omap4_panda_init_irq(void) 99static void __init omap4_panda_init_early(void)
44{ 100{
45 omap2_init_common_hw(NULL, NULL); 101 omap2_init_common_infrastructure();
46 gic_init_irq(); 102 omap2_init_common_devices(NULL, NULL);
47 omap_gpio_init(); 103}
104
105static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
106 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
107 .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
108 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
109 .phy_reset = false,
110 .reset_gpio_port[0] = -EINVAL,
111 .reset_gpio_port[1] = -EINVAL,
112 .reset_gpio_port[2] = -EINVAL
113};
114
115static struct gpio panda_ehci_gpios[] __initdata = {
116 { GPIO_HUB_POWER, GPIOF_OUT_INIT_LOW, "hub_power" },
117 { GPIO_HUB_NRESET, GPIOF_OUT_INIT_LOW, "hub_nreset" },
118};
119
120static void __init omap4_ehci_init(void)
121{
122 int ret;
123 struct clk *phy_ref_clk;
124
125 /* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */
126 phy_ref_clk = clk_get(NULL, "auxclk3_ck");
127 if (IS_ERR(phy_ref_clk)) {
128 pr_err("Cannot request auxclk3\n");
129 return;
130 }
131 clk_set_rate(phy_ref_clk, 19200000);
132 clk_enable(phy_ref_clk);
133
134 /* disable the power to the usb hub prior to init and reset phy+hub */
135 ret = gpio_request_array(panda_ehci_gpios,
136 ARRAY_SIZE(panda_ehci_gpios));
137 if (ret) {
138 pr_err("Unable to initialize EHCI power/reset\n");
139 return;
140 }
141
142 gpio_export(GPIO_HUB_POWER, 0);
143 gpio_export(GPIO_HUB_NRESET, 0);
144 gpio_set_value(GPIO_HUB_NRESET, 1);
145
146 usbhs_init(&usbhs_bdata);
147
148 /* enable power to hub */
149 gpio_set_value(GPIO_HUB_POWER, 1);
48} 150}
49 151
50static struct omap_musb_board_data musb_board_data = { 152static struct omap_musb_board_data musb_board_data = {
51 .interface_type = MUSB_INTERFACE_UTMI, 153 .interface_type = MUSB_INTERFACE_UTMI,
52 .mode = MUSB_PERIPHERAL, 154 .mode = MUSB_OTG,
53 .power = 100, 155 .power = 100,
54}; 156};
55 157
158static struct twl4030_usb_data omap4_usbphy_data = {
159 .phy_init = omap4430_phy_init,
160 .phy_exit = omap4430_phy_exit,
161 .phy_power = omap4430_phy_power,
162 .phy_set_clock = omap4430_phy_set_clk,
163 .phy_suspend = omap4430_phy_suspend,
164};
165
56static struct omap2_hsmmc_info mmc[] = { 166static struct omap2_hsmmc_info mmc[] = {
57 { 167 {
58 .mmc = 1, 168 .mmc = 1,
59 .wires = 8, 169 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
60 .gpio_wp = -EINVAL, 170 .gpio_wp = -EINVAL,
171 .gpio_cd = -EINVAL,
172 },
173 {
174 .name = "wl1271",
175 .mmc = 5,
176 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
177 .gpio_wp = -EINVAL,
178 .gpio_cd = -EINVAL,
179 .ocr_mask = MMC_VDD_165_195,
180 .nonremovable = true,
61 }, 181 },
62 {} /* Terminator */ 182 {} /* Terminator */
63}; 183};
@@ -65,14 +185,47 @@ static struct omap2_hsmmc_info mmc[] = {
65static struct regulator_consumer_supply omap4_panda_vmmc_supply[] = { 185static struct regulator_consumer_supply omap4_panda_vmmc_supply[] = {
66 { 186 {
67 .supply = "vmmc", 187 .supply = "vmmc",
68 .dev_name = "mmci-omap-hs.0", 188 .dev_name = "omap_hsmmc.0",
69 }, 189 },
70 { 190};
71 .supply = "vmmc", 191
72 .dev_name = "mmci-omap-hs.1", 192static struct regulator_consumer_supply omap4_panda_vmmc5_supply = {
193 .supply = "vmmc",
194 .dev_name = "omap_hsmmc.4",
195};
196
197static struct regulator_init_data panda_vmmc5 = {
198 .constraints = {
199 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
200 },
201 .num_consumer_supplies = 1,
202 .consumer_supplies = &omap4_panda_vmmc5_supply,
203};
204
205static struct fixed_voltage_config panda_vwlan = {
206 .supply_name = "vwl1271",
207 .microvolts = 1800000, /* 1.8V */
208 .gpio = GPIO_WIFI_PMENA,
209 .startup_delay = 70000, /* 70msec */
210 .enable_high = 1,
211 .enabled_at_boot = 0,
212 .init_data = &panda_vmmc5,
213};
214
215static struct platform_device omap_vwlan_device = {
216 .name = "reg-fixed-voltage",
217 .id = 1,
218 .dev = {
219 .platform_data = &panda_vwlan,
73 }, 220 },
74}; 221};
75 222
223struct wl12xx_platform_data omap_panda_wlan_data __initdata = {
224 .irq = OMAP_GPIO_IRQ(GPIO_WIFI_IRQ),
225 /* PANDA ref clock is 38.4 MHz */
226 .board_ref_clock = 2,
227};
228
76static int omap4_twl6030_hsmmc_late_init(struct device *dev) 229static int omap4_twl6030_hsmmc_late_init(struct device *dev)
77{ 230{
78 int ret = 0; 231 int ret = 0;
@@ -80,16 +233,32 @@ static int omap4_twl6030_hsmmc_late_init(struct device *dev)
80 struct platform_device, dev); 233 struct platform_device, dev);
81 struct omap_mmc_platform_data *pdata = dev->platform_data; 234 struct omap_mmc_platform_data *pdata = dev->platform_data;
82 235
236 if (!pdata) {
237 dev_err(dev, "%s: NULL platform data\n", __func__);
238 return -EINVAL;
239 }
83 /* Setting MMC1 Card detect Irq */ 240 /* Setting MMC1 Card detect Irq */
84 if (pdev->id == 0) 241 if (pdev->id == 0) {
85 pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE + 242 ret = twl6030_mmc_card_detect_config();
86 MMCDETECT_INTR_OFFSET; 243 if (ret)
244 dev_err(dev, "%s: Error card detect config(%d)\n",
245 __func__, ret);
246 else
247 pdata->slots[0].card_detect = twl6030_mmc_card_detect;
248 }
87 return ret; 249 return ret;
88} 250}
89 251
90static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev) 252static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev)
91{ 253{
92 struct omap_mmc_platform_data *pdata = dev->platform_data; 254 struct omap_mmc_platform_data *pdata;
255
256 /* dev can be null if CONFIG_MMC_OMAP_HS is not set */
257 if (!dev) {
258 pr_err("Failed omap4_twl6030_hsmmc_set_late_init\n");
259 return;
260 }
261 pdata = dev->platform_data;
93 262
94 pdata->init = omap4_twl6030_hsmmc_late_init; 263 pdata->init = omap4_twl6030_hsmmc_late_init;
95} 264}
@@ -105,19 +274,6 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
105 return 0; 274 return 0;
106} 275}
107 276
108static struct regulator_init_data omap4_panda_vaux1 = {
109 .constraints = {
110 .min_uV = 1000000,
111 .max_uV = 3000000,
112 .apply_uV = true,
113 .valid_modes_mask = REGULATOR_MODE_NORMAL
114 | REGULATOR_MODE_STANDBY,
115 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
116 | REGULATOR_CHANGE_MODE
117 | REGULATOR_CHANGE_STATUS,
118 },
119};
120
121static struct regulator_init_data omap4_panda_vaux2 = { 277static struct regulator_init_data omap4_panda_vaux2 = {
122 .constraints = { 278 .constraints = {
123 .min_uV = 1200000, 279 .min_uV = 1200000,
@@ -156,7 +312,7 @@ static struct regulator_init_data omap4_panda_vmmc = {
156 | REGULATOR_CHANGE_MODE 312 | REGULATOR_CHANGE_MODE
157 | REGULATOR_CHANGE_STATUS, 313 | REGULATOR_CHANGE_STATUS,
158 }, 314 },
159 .num_consumer_supplies = 2, 315 .num_consumer_supplies = 1,
160 .consumer_supplies = omap4_panda_vmmc_supply, 316 .consumer_supplies = omap4_panda_vmmc_supply,
161}; 317};
162 318
@@ -173,24 +329,10 @@ static struct regulator_init_data omap4_panda_vpp = {
173 }, 329 },
174}; 330};
175 331
176static struct regulator_init_data omap4_panda_vusim = {
177 .constraints = {
178 .min_uV = 1200000,
179 .max_uV = 2900000,
180 .apply_uV = true,
181 .valid_modes_mask = REGULATOR_MODE_NORMAL
182 | REGULATOR_MODE_STANDBY,
183 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
184 | REGULATOR_CHANGE_MODE
185 | REGULATOR_CHANGE_STATUS,
186 },
187};
188
189static struct regulator_init_data omap4_panda_vana = { 332static struct regulator_init_data omap4_panda_vana = {
190 .constraints = { 333 .constraints = {
191 .min_uV = 2100000, 334 .min_uV = 2100000,
192 .max_uV = 2100000, 335 .max_uV = 2100000,
193 .apply_uV = true,
194 .valid_modes_mask = REGULATOR_MODE_NORMAL 336 .valid_modes_mask = REGULATOR_MODE_NORMAL
195 | REGULATOR_MODE_STANDBY, 337 | REGULATOR_MODE_STANDBY,
196 .valid_ops_mask = REGULATOR_CHANGE_MODE 338 .valid_ops_mask = REGULATOR_CHANGE_MODE
@@ -202,7 +344,6 @@ static struct regulator_init_data omap4_panda_vcxio = {
202 .constraints = { 344 .constraints = {
203 .min_uV = 1800000, 345 .min_uV = 1800000,
204 .max_uV = 1800000, 346 .max_uV = 1800000,
205 .apply_uV = true,
206 .valid_modes_mask = REGULATOR_MODE_NORMAL 347 .valid_modes_mask = REGULATOR_MODE_NORMAL
207 | REGULATOR_MODE_STANDBY, 348 | REGULATOR_MODE_STANDBY,
208 .valid_ops_mask = REGULATOR_CHANGE_MODE 349 .valid_ops_mask = REGULATOR_CHANGE_MODE
@@ -214,7 +355,6 @@ static struct regulator_init_data omap4_panda_vdac = {
214 .constraints = { 355 .constraints = {
215 .min_uV = 1800000, 356 .min_uV = 1800000,
216 .max_uV = 1800000, 357 .max_uV = 1800000,
217 .apply_uV = true,
218 .valid_modes_mask = REGULATOR_MODE_NORMAL 358 .valid_modes_mask = REGULATOR_MODE_NORMAL
219 | REGULATOR_MODE_STANDBY, 359 | REGULATOR_MODE_STANDBY,
220 .valid_ops_mask = REGULATOR_CHANGE_MODE 360 .valid_ops_mask = REGULATOR_CHANGE_MODE
@@ -234,6 +374,12 @@ static struct regulator_init_data omap4_panda_vusb = {
234 }, 374 },
235}; 375};
236 376
377static struct regulator_init_data omap4_panda_clk32kg = {
378 .constraints = {
379 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
380 },
381};
382
237static struct twl4030_platform_data omap4_panda_twldata = { 383static struct twl4030_platform_data omap4_panda_twldata = {
238 .irq_base = TWL6030_IRQ_BASE, 384 .irq_base = TWL6030_IRQ_BASE,
239 .irq_end = TWL6030_IRQ_END, 385 .irq_end = TWL6030_IRQ_END,
@@ -241,49 +387,319 @@ static struct twl4030_platform_data omap4_panda_twldata = {
241 /* Regulators */ 387 /* Regulators */
242 .vmmc = &omap4_panda_vmmc, 388 .vmmc = &omap4_panda_vmmc,
243 .vpp = &omap4_panda_vpp, 389 .vpp = &omap4_panda_vpp,
244 .vusim = &omap4_panda_vusim,
245 .vana = &omap4_panda_vana, 390 .vana = &omap4_panda_vana,
246 .vcxio = &omap4_panda_vcxio, 391 .vcxio = &omap4_panda_vcxio,
247 .vdac = &omap4_panda_vdac, 392 .vdac = &omap4_panda_vdac,
248 .vusb = &omap4_panda_vusb, 393 .vusb = &omap4_panda_vusb,
249 .vaux1 = &omap4_panda_vaux1,
250 .vaux2 = &omap4_panda_vaux2, 394 .vaux2 = &omap4_panda_vaux2,
251 .vaux3 = &omap4_panda_vaux3, 395 .vaux3 = &omap4_panda_vaux3,
396 .clk32kg = &omap4_panda_clk32kg,
397 .usb = &omap4_usbphy_data,
252}; 398};
253 399
254static struct i2c_board_info __initdata omap4_panda_i2c_boardinfo[] = { 400/*
401 * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM
402 * is connected as I2C slave device, and can be accessed at address 0x50
403 */
404static struct i2c_board_info __initdata panda_i2c_eeprom[] = {
255 { 405 {
256 I2C_BOARD_INFO("twl6030", 0x48), 406 I2C_BOARD_INFO("eeprom", 0x50),
257 .flags = I2C_CLIENT_WAKE,
258 .irq = OMAP44XX_IRQ_SYS_1N,
259 .platform_data = &omap4_panda_twldata,
260 }, 407 },
261}; 408};
409
262static int __init omap4_panda_i2c_init(void) 410static int __init omap4_panda_i2c_init(void)
263{ 411{
412 omap4_pmic_init("twl6030", &omap4_panda_twldata);
413 omap_register_i2c_bus(2, 400, NULL, 0);
264 /* 414 /*
265 * Phoenix Audio IC needs I2C1 to 415 * Bus 3 is attached to the DVI port where devices like the pico DLP
266 * start with 400 KHz or less 416 * projector don't work reliably with 400kHz
267 */ 417 */
268 omap_register_i2c_bus(1, 400, omap4_panda_i2c_boardinfo, 418 omap_register_i2c_bus(3, 100, panda_i2c_eeprom,
269 ARRAY_SIZE(omap4_panda_i2c_boardinfo)); 419 ARRAY_SIZE(panda_i2c_eeprom));
270 omap_register_i2c_bus(2, 400, NULL, 0);
271 omap_register_i2c_bus(3, 400, NULL, 0);
272 omap_register_i2c_bus(4, 400, NULL, 0); 420 omap_register_i2c_bus(4, 400, NULL, 0);
273 return 0; 421 return 0;
274} 422}
275static void __init omap4_panda_init(void) 423
424#ifdef CONFIG_OMAP_MUX
425static struct omap_board_mux board_mux[] __initdata = {
426 /* WLAN IRQ - GPIO 53 */
427 OMAP4_MUX(GPMC_NCS3, OMAP_MUX_MODE3 | OMAP_PIN_INPUT),
428 /* WLAN POWER ENABLE - GPIO 43 */
429 OMAP4_MUX(GPMC_A19, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
430 /* WLAN SDIO: MMC5 CMD */
431 OMAP4_MUX(SDMMC5_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
432 /* WLAN SDIO: MMC5 CLK */
433 OMAP4_MUX(SDMMC5_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
434 /* WLAN SDIO: MMC5 DAT[0-3] */
435 OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
436 OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
437 OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
438 OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
439 /* gpio 0 - TFP410 PD */
440 OMAP4_MUX(KPD_COL1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
441 /* dispc2_data23 */
442 OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
443 /* dispc2_data22 */
444 OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
445 /* dispc2_data21 */
446 OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
447 /* dispc2_data20 */
448 OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
449 /* dispc2_data19 */
450 OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
451 /* dispc2_data18 */
452 OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
453 /* dispc2_data15 */
454 OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
455 /* dispc2_data14 */
456 OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
457 /* dispc2_data13 */
458 OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
459 /* dispc2_data12 */
460 OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
461 /* dispc2_data11 */
462 OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
463 /* dispc2_data10 */
464 OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
465 /* dispc2_data9 */
466 OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
467 /* dispc2_data16 */
468 OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
469 /* dispc2_data17 */
470 OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
471 /* dispc2_hsync */
472 OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
473 /* dispc2_pclk */
474 OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
475 /* dispc2_vsync */
476 OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
477 /* dispc2_de */
478 OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
479 /* dispc2_data8 */
480 OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
481 /* dispc2_data7 */
482 OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
483 /* dispc2_data6 */
484 OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
485 /* dispc2_data5 */
486 OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
487 /* dispc2_data4 */
488 OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
489 /* dispc2_data3 */
490 OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
491 /* dispc2_data2 */
492 OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
493 /* dispc2_data1 */
494 OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
495 /* dispc2_data0 */
496 OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
497 { .reg_offset = OMAP_MUX_TERMINATOR },
498};
499
500static struct omap_device_pad serial2_pads[] __initdata = {
501 OMAP_MUX_STATIC("uart2_cts.uart2_cts",
502 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
503 OMAP_MUX_STATIC("uart2_rts.uart2_rts",
504 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
505 OMAP_MUX_STATIC("uart2_rx.uart2_rx",
506 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
507 OMAP_MUX_STATIC("uart2_tx.uart2_tx",
508 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
509};
510
511static struct omap_device_pad serial3_pads[] __initdata = {
512 OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
513 OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
514 OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
515 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
516 OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
517 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
518 OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
519 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
520};
521
522static struct omap_device_pad serial4_pads[] __initdata = {
523 OMAP_MUX_STATIC("uart4_rx.uart4_rx",
524 OMAP_PIN_INPUT | OMAP_MUX_MODE0),
525 OMAP_MUX_STATIC("uart4_tx.uart4_tx",
526 OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
527};
528
529static struct omap_board_data serial2_data __initdata = {
530 .id = 1,
531 .pads = serial2_pads,
532 .pads_cnt = ARRAY_SIZE(serial2_pads),
533};
534
535static struct omap_board_data serial3_data __initdata = {
536 .id = 2,
537 .pads = serial3_pads,
538 .pads_cnt = ARRAY_SIZE(serial3_pads),
539};
540
541static struct omap_board_data serial4_data __initdata = {
542 .id = 3,
543 .pads = serial4_pads,
544 .pads_cnt = ARRAY_SIZE(serial4_pads),
545};
546
547static inline void board_serial_init(void)
548{
549 struct omap_board_data bdata;
550 bdata.flags = 0;
551 bdata.pads = NULL;
552 bdata.pads_cnt = 0;
553 bdata.id = 0;
554 /* pass dummy data for UART1 */
555 omap_serial_init_port(&bdata);
556
557 omap_serial_init_port(&serial2_data);
558 omap_serial_init_port(&serial3_data);
559 omap_serial_init_port(&serial4_data);
560}
561#else
562#define board_mux NULL
563
564static inline void board_serial_init(void)
565{
566 omap_serial_init();
567}
568#endif
569
570/* Display DVI */
571#define PANDA_DVI_TFP410_POWER_DOWN_GPIO 0
572
573static int omap4_panda_enable_dvi(struct omap_dss_device *dssdev)
574{
575 gpio_set_value(dssdev->reset_gpio, 1);
576 return 0;
577}
578
579static void omap4_panda_disable_dvi(struct omap_dss_device *dssdev)
580{
581 gpio_set_value(dssdev->reset_gpio, 0);
582}
583
584/* Using generic display panel */
585static struct panel_generic_dpi_data omap4_dvi_panel = {
586 .name = "generic",
587 .platform_enable = omap4_panda_enable_dvi,
588 .platform_disable = omap4_panda_disable_dvi,
589};
590
591struct omap_dss_device omap4_panda_dvi_device = {
592 .type = OMAP_DISPLAY_TYPE_DPI,
593 .name = "dvi",
594 .driver_name = "generic_dpi_panel",
595 .data = &omap4_dvi_panel,
596 .phy.dpi.data_lines = 24,
597 .reset_gpio = PANDA_DVI_TFP410_POWER_DOWN_GPIO,
598 .channel = OMAP_DSS_CHANNEL_LCD2,
599};
600
601int __init omap4_panda_dvi_init(void)
602{
603 int r;
604
605 /* Requesting TFP410 DVI GPIO and disabling it, at bootup */
606 r = gpio_request_one(omap4_panda_dvi_device.reset_gpio,
607 GPIOF_OUT_INIT_LOW, "DVI PD");
608 if (r)
609 pr_err("Failed to get DVI powerdown GPIO\n");
610
611 return r;
612}
613
614
615static void omap4_panda_hdmi_mux_init(void)
616{
617 /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
618 omap_mux_init_signal("hdmi_hpd",
619 OMAP_PIN_INPUT_PULLUP);
620 omap_mux_init_signal("hdmi_cec",
621 OMAP_PIN_INPUT_PULLUP);
622 /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
623 omap_mux_init_signal("hdmi_ddc_scl",
624 OMAP_PIN_INPUT_PULLUP);
625 omap_mux_init_signal("hdmi_ddc_sda",
626 OMAP_PIN_INPUT_PULLUP);
627}
628
629static struct gpio panda_hdmi_gpios[] = {
630 { HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd" },
631 { HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
632};
633
634static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
276{ 635{
277 int status; 636 int status;
278 637
638 status = gpio_request_array(panda_hdmi_gpios,
639 ARRAY_SIZE(panda_hdmi_gpios));
640 if (status)
641 pr_err("Cannot request HDMI GPIOs\n");
642
643 return status;
644}
645
646static void omap4_panda_panel_disable_hdmi(struct omap_dss_device *dssdev)
647{
648 gpio_free(HDMI_GPIO_LS_OE);
649 gpio_free(HDMI_GPIO_HPD);
650}
651
652static struct omap_dss_device omap4_panda_hdmi_device = {
653 .name = "hdmi",
654 .driver_name = "hdmi_panel",
655 .type = OMAP_DISPLAY_TYPE_HDMI,
656 .platform_enable = omap4_panda_panel_enable_hdmi,
657 .platform_disable = omap4_panda_panel_disable_hdmi,
658 .channel = OMAP_DSS_CHANNEL_DIGIT,
659};
660
661static struct omap_dss_device *omap4_panda_dss_devices[] = {
662 &omap4_panda_dvi_device,
663 &omap4_panda_hdmi_device,
664};
665
666static struct omap_dss_board_info omap4_panda_dss_data = {
667 .num_devices = ARRAY_SIZE(omap4_panda_dss_devices),
668 .devices = omap4_panda_dss_devices,
669 .default_device = &omap4_panda_dvi_device,
670};
671
672void omap4_panda_display_init(void)
673{
674 int r;
675
676 r = omap4_panda_dvi_init();
677 if (r)
678 pr_err("error initializing panda DVI\n");
679
680 omap4_panda_hdmi_mux_init();
681 omap_display_init(&omap4_panda_dss_data);
682}
683
684static void __init omap4_panda_init(void)
685{
686 int package = OMAP_PACKAGE_CBS;
687
688 if (omap_rev() == OMAP4430_REV_ES1_0)
689 package = OMAP_PACKAGE_CBL;
690 omap4_mux_init(board_mux, NULL, package);
691
692 if (wl12xx_set_platform_data(&omap_panda_wlan_data))
693 pr_err("error setting wl12xx data\n");
694
279 omap4_panda_i2c_init(); 695 omap4_panda_i2c_init();
280 omap_serial_init(); 696 platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
697 platform_device_register(&omap_vwlan_device);
698 board_serial_init();
281 omap4_twl6030_hsmmc_init(mmc); 699 omap4_twl6030_hsmmc_init(mmc);
282 /* OMAP4 Panda uses internal transceiver so register nop transceiver */ 700 omap4_ehci_init();
283 usb_nop_xceiv_register(); 701 usb_musb_init(&musb_board_data);
284 /* FIXME: allow multi-omap to boot until musb is updated for omap4 */ 702 omap4_panda_display_init();
285 if (!cpu_is_omap44xx())
286 usb_musb_init(&musb_board_data);
287} 703}
288 704
289static void __init omap4_panda_map_io(void) 705static void __init omap4_panda_map_io(void)
@@ -294,11 +710,11 @@ static void __init omap4_panda_map_io(void)
294 710
295MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board") 711MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
296 /* Maintainer: David Anders - Texas Instruments Inc */ 712 /* Maintainer: David Anders - Texas Instruments Inc */
297 .phys_io = 0x48000000,
298 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
299 .boot_params = 0x80000100, 713 .boot_params = 0x80000100,
714 .reserve = omap_reserve,
300 .map_io = omap4_panda_map_io, 715 .map_io = omap4_panda_map_io,
301 .init_irq = omap4_panda_init_irq, 716 .init_early = omap4_panda_init_early,
717 .init_irq = gic_init_irq,
302 .init_machine = omap4_panda_init, 718 .init_machine = omap4_panda_init,
303 .timer = &omap_timer, 719 .timer = &omap_timer,
304MACHINE_END 720MACHINE_END
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
index 4c4843618350..175e1ab2b04d 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -24,14 +24,18 @@
24#include <linux/err.h> 24#include <linux/err.h>
25#include <linux/init.h> 25#include <linux/init.h>
26#include <linux/io.h> 26#include <linux/io.h>
27#include <linux/gpio.h>
27#include <linux/kernel.h> 28#include <linux/kernel.h>
28#include <linux/platform_device.h> 29#include <linux/platform_device.h>
29#include <linux/i2c/twl.h> 30#include <linux/i2c/twl.h>
30#include <linux/regulator/machine.h> 31#include <linux/regulator/machine.h>
32#include <linux/regulator/fixed.h>
33#include <linux/spi/spi.h>
31 34
32#include <linux/mtd/mtd.h> 35#include <linux/mtd/mtd.h>
33#include <linux/mtd/nand.h> 36#include <linux/mtd/nand.h>
34#include <linux/mtd/partitions.h> 37#include <linux/mtd/partitions.h>
38#include <linux/mmc/host.h>
35 39
36#include <asm/mach-types.h> 40#include <asm/mach-types.h>
37#include <asm/mach/arch.h> 41#include <asm/mach/arch.h>
@@ -40,15 +44,19 @@
40 44
41#include <plat/board.h> 45#include <plat/board.h>
42#include <plat/common.h> 46#include <plat/common.h>
43#include <mach/gpio.h> 47#include <video/omapdss.h>
48#include <video/omap-panel-generic-dpi.h>
44#include <plat/gpmc.h> 49#include <plat/gpmc.h>
45#include <mach/hardware.h> 50#include <mach/hardware.h>
46#include <plat/nand.h> 51#include <plat/nand.h>
52#include <plat/mcspi.h>
53#include <plat/mux.h>
47#include <plat/usb.h> 54#include <plat/usb.h>
48 55
49#include "mux.h" 56#include "mux.h"
50#include "sdram-micron-mt46h32m32lf-6.h" 57#include "sdram-micron-mt46h32m32lf-6.h"
51#include "hsmmc.h" 58#include "hsmmc.h"
59#include "common-board-devices.h"
52 60
53#define OVERO_GPIO_BT_XGATE 15 61#define OVERO_GPIO_BT_XGATE 15
54#define OVERO_GPIO_W2W_NRESET 16 62#define OVERO_GPIO_W2W_NRESET 16
@@ -57,8 +65,6 @@
57#define OVERO_GPIO_USBH_CPEN 168 65#define OVERO_GPIO_USBH_CPEN 168
58#define OVERO_GPIO_USBH_NRESET 183 66#define OVERO_GPIO_USBH_NRESET 183
59 67
60#define NAND_BLOCK_SIZE SZ_128K
61
62#define OVERO_SMSC911X_CS 5 68#define OVERO_SMSC911X_CS 5
63#define OVERO_SMSC911X_GPIO 176 69#define OVERO_SMSC911X_GPIO 176
64#define OVERO_SMSC911X2_CS 4 70#define OVERO_SMSC911X2_CS 4
@@ -67,56 +73,38 @@
67#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ 73#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
68 defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) 74 defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
69 75
70#include <plat/mcspi.h> 76/* fixed regulator for ads7846 */
71#include <linux/spi/spi.h> 77static struct regulator_consumer_supply ads7846_supply =
72#include <linux/spi/ads7846.h> 78 REGULATOR_SUPPLY("vcc", "spi1.0");
73 79
74static struct omap2_mcspi_device_config ads7846_mcspi_config = { 80static struct regulator_init_data vads7846_regulator = {
75 .turbo_mode = 0, 81 .constraints = {
76 .single_channel = 1, /* 0: slave, 1: master */ 82 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
83 },
84 .num_consumer_supplies = 1,
85 .consumer_supplies = &ads7846_supply,
77}; 86};
78 87
79static int ads7846_get_pendown_state(void) 88static struct fixed_voltage_config vads7846 = {
80{ 89 .supply_name = "vads7846",
81 return !gpio_get_value(OVERO_GPIO_PENDOWN); 90 .microvolts = 3300000, /* 3.3V */
82} 91 .gpio = -EINVAL,
83 92 .startup_delay = 0,
84static struct ads7846_platform_data ads7846_config = { 93 .init_data = &vads7846_regulator,
85 .x_max = 0x0fff,
86 .y_max = 0x0fff,
87 .x_plate_ohms = 180,
88 .pressure_max = 255,
89 .debounce_max = 10,
90 .debounce_tol = 3,
91 .debounce_rep = 1,
92 .get_pendown_state = ads7846_get_pendown_state,
93 .keep_vref_on = 1,
94}; 94};
95 95
96static struct spi_board_info overo_spi_board_info[] __initdata = { 96static struct platform_device vads7846_device = {
97 { 97 .name = "reg-fixed-voltage",
98 .modalias = "ads7846", 98 .id = 1,
99 .bus_num = 1, 99 .dev = {
100 .chip_select = 0, 100 .platform_data = &vads7846,
101 .max_speed_hz = 1500000, 101 },
102 .controller_data = &ads7846_mcspi_config,
103 .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN),
104 .platform_data = &ads7846_config,
105 }
106}; 102};
107 103
108static void __init overo_ads7846_init(void) 104static void __init overo_ads7846_init(void)
109{ 105{
110 if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) && 106 omap_ads7846_init(1, OVERO_GPIO_PENDOWN, 0, NULL);
111 (gpio_direction_input(OVERO_GPIO_PENDOWN) == 0)) { 107 platform_device_register(&vads7846_device);
112 gpio_export(OVERO_GPIO_PENDOWN, 0);
113 } else {
114 printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n");
115 return;
116 }
117
118 spi_register_board_info(overo_spi_board_info,
119 ARRAY_SIZE(overo_spi_board_info));
120} 108}
121 109
122#else 110#else
@@ -126,112 +114,164 @@ static inline void __init overo_ads7846_init(void) { return; }
126#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) 114#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
127 115
128#include <linux/smsc911x.h> 116#include <linux/smsc911x.h>
117#include <plat/gpmc-smsc911x.h>
129 118
130static struct resource overo_smsc911x_resources[] = { 119static struct omap_smsc911x_platform_data smsc911x_cfg = {
131 { 120 .id = 0,
132 .name = "smsc911x-memory", 121 .cs = OVERO_SMSC911X_CS,
133 .flags = IORESOURCE_MEM, 122 .gpio_irq = OVERO_SMSC911X_GPIO,
134 }, 123 .gpio_reset = -EINVAL,
135 { 124 .flags = SMSC911X_USE_32BIT,
136 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
137 },
138}; 125};
139 126
140static struct resource overo_smsc911x2_resources[] = { 127static struct omap_smsc911x_platform_data smsc911x2_cfg = {
141 { 128 .id = 1,
142 .name = "smsc911x2-memory", 129 .cs = OVERO_SMSC911X2_CS,
143 .flags = IORESOURCE_MEM, 130 .gpio_irq = OVERO_SMSC911X2_GPIO,
144 }, 131 .gpio_reset = -EINVAL,
145 { 132 .flags = SMSC911X_USE_32BIT,
146 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
147 },
148}; 133};
149 134
150static struct smsc911x_platform_config overo_smsc911x_config = { 135static void __init overo_init_smsc911x(void)
151 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, 136{
152 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, 137 gpmc_smsc911x_init(&smsc911x_cfg);
153 .flags = SMSC911X_USE_32BIT , 138 gpmc_smsc911x_init(&smsc911x2_cfg);
154 .phy_interface = PHY_INTERFACE_MODE_MII, 139}
155};
156 140
157static struct platform_device overo_smsc911x_device = { 141#else
158 .name = "smsc911x", 142static inline void __init overo_init_smsc911x(void) { return; }
159 .id = 0, 143#endif
160 .num_resources = ARRAY_SIZE(overo_smsc911x_resources),
161 .resource = overo_smsc911x_resources,
162 .dev = {
163 .platform_data = &overo_smsc911x_config,
164 },
165};
166 144
167static struct platform_device overo_smsc911x2_device = { 145/* DSS */
168 .name = "smsc911x", 146static int lcd_enabled;
169 .id = 1, 147static int dvi_enabled;
170 .num_resources = ARRAY_SIZE(overo_smsc911x2_resources), 148
171 .resource = overo_smsc911x2_resources, 149#define OVERO_GPIO_LCD_EN 144
172 .dev = { 150#define OVERO_GPIO_LCD_BL 145
173 .platform_data = &overo_smsc911x_config,
174 },
175};
176 151
177static struct platform_device *smsc911x_devices[] = { 152static struct gpio overo_dss_gpios[] __initdata = {
178 &overo_smsc911x_device, 153 { OVERO_GPIO_LCD_EN, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_EN" },
179 &overo_smsc911x2_device, 154 { OVERO_GPIO_LCD_BL, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_BL" },
180}; 155};
181 156
182static inline void __init overo_init_smsc911x(void) 157static void __init overo_display_init(void)
183{ 158{
184 unsigned long cs_mem_base, cs_mem_base2; 159 if (gpio_request_array(overo_dss_gpios, ARRAY_SIZE(overo_dss_gpios))) {
185 160 printk(KERN_ERR "could not obtain DSS control GPIOs\n");
186 /* set up first smsc911x chip */
187
188 if (gpmc_cs_request(OVERO_SMSC911X_CS, SZ_16M, &cs_mem_base) < 0) {
189 printk(KERN_ERR "Failed request for GPMC mem for smsc911x\n");
190 return; 161 return;
191 } 162 }
192 163
193 overo_smsc911x_resources[0].start = cs_mem_base + 0x0; 164 gpio_export(OVERO_GPIO_LCD_EN, 0);
194 overo_smsc911x_resources[0].end = cs_mem_base + 0xff; 165 gpio_export(OVERO_GPIO_LCD_BL, 0);
166}
195 167
196 if ((gpio_request(OVERO_SMSC911X_GPIO, "SMSC911X IRQ") == 0) && 168static int overo_panel_enable_dvi(struct omap_dss_device *dssdev)
197 (gpio_direction_input(OVERO_SMSC911X_GPIO) == 0)) { 169{
198 gpio_export(OVERO_SMSC911X_GPIO, 0); 170 if (lcd_enabled) {
199 } else { 171 printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
200 printk(KERN_ERR "could not obtain gpio for SMSC911X IRQ\n"); 172 return -EINVAL;
201 return;
202 } 173 }
174 dvi_enabled = 1;
203 175
204 overo_smsc911x_resources[1].start = OMAP_GPIO_IRQ(OVERO_SMSC911X_GPIO); 176 return 0;
205 overo_smsc911x_resources[1].end = 0; 177}
206 178
207 /* set up second smsc911x chip */ 179static void overo_panel_disable_dvi(struct omap_dss_device *dssdev)
180{
181 dvi_enabled = 0;
182}
208 183
209 if (gpmc_cs_request(OVERO_SMSC911X2_CS, SZ_16M, &cs_mem_base2) < 0) { 184static struct panel_generic_dpi_data dvi_panel = {
210 printk(KERN_ERR "Failed request for GPMC mem for smsc911x2\n"); 185 .name = "generic",
211 return; 186 .platform_enable = overo_panel_enable_dvi,
212 } 187 .platform_disable = overo_panel_disable_dvi,
188};
213 189
214 overo_smsc911x2_resources[0].start = cs_mem_base2 + 0x0; 190static struct omap_dss_device overo_dvi_device = {
215 overo_smsc911x2_resources[0].end = cs_mem_base2 + 0xff; 191 .name = "dvi",
192 .type = OMAP_DISPLAY_TYPE_DPI,
193 .driver_name = "generic_dpi_panel",
194 .data = &dvi_panel,
195 .phy.dpi.data_lines = 24,
196};
216 197
217 if ((gpio_request(OVERO_SMSC911X2_GPIO, "SMSC911X2 IRQ") == 0) && 198static struct omap_dss_device overo_tv_device = {
218 (gpio_direction_input(OVERO_SMSC911X2_GPIO) == 0)) { 199 .name = "tv",
219 gpio_export(OVERO_SMSC911X2_GPIO, 0); 200 .driver_name = "venc",
220 } else { 201 .type = OMAP_DISPLAY_TYPE_VENC,
221 printk(KERN_ERR "could not obtain gpio for SMSC911X2 IRQ\n"); 202 .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
222 return; 203};
204
205static int overo_panel_enable_lcd(struct omap_dss_device *dssdev)
206{
207 if (dvi_enabled) {
208 printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
209 return -EINVAL;
223 } 210 }
224 211
225 overo_smsc911x2_resources[1].start = OMAP_GPIO_IRQ(OVERO_SMSC911X2_GPIO); 212 gpio_set_value(OVERO_GPIO_LCD_EN, 1);
226 overo_smsc911x2_resources[1].end = 0; 213 gpio_set_value(OVERO_GPIO_LCD_BL, 1);
214 lcd_enabled = 1;
215 return 0;
216}
227 217
228 platform_add_devices(smsc911x_devices, ARRAY_SIZE(smsc911x_devices)); 218static void overo_panel_disable_lcd(struct omap_dss_device *dssdev)
219{
220 gpio_set_value(OVERO_GPIO_LCD_EN, 0);
221 gpio_set_value(OVERO_GPIO_LCD_BL, 0);
222 lcd_enabled = 0;
229} 223}
230 224
231#else 225static struct panel_generic_dpi_data lcd43_panel = {
232static inline void __init overo_init_smsc911x(void) { return; } 226 .name = "samsung_lte430wq_f0c",
227 .platform_enable = overo_panel_enable_lcd,
228 .platform_disable = overo_panel_disable_lcd,
229};
230
231static struct omap_dss_device overo_lcd43_device = {
232 .name = "lcd43",
233 .type = OMAP_DISPLAY_TYPE_DPI,
234 .driver_name = "generic_dpi_panel",
235 .data = &lcd43_panel,
236 .phy.dpi.data_lines = 24,
237};
238
239#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
240 defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
241static struct omap_dss_device overo_lcd35_device = {
242 .type = OMAP_DISPLAY_TYPE_DPI,
243 .name = "lcd35",
244 .driver_name = "lgphilips_lb035q02_panel",
245 .phy.dpi.data_lines = 24,
246 .platform_enable = overo_panel_enable_lcd,
247 .platform_disable = overo_panel_disable_lcd,
248};
233#endif 249#endif
234 250
251static struct omap_dss_device *overo_dss_devices[] = {
252 &overo_dvi_device,
253 &overo_tv_device,
254#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
255 defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
256 &overo_lcd35_device,
257#endif
258 &overo_lcd43_device,
259};
260
261static struct omap_dss_board_info overo_dss_data = {
262 .num_devices = ARRAY_SIZE(overo_dss_devices),
263 .devices = overo_dss_devices,
264 .default_device = &overo_dvi_device,
265};
266
267static struct regulator_consumer_supply overo_vdda_dac_supply =
268 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
269
270static struct regulator_consumer_supply overo_vdds_dsi_supply[] = {
271 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
272 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
273};
274
235static struct mtd_partition overo_nand_partitions[] = { 275static struct mtd_partition overo_nand_partitions[] = {
236 { 276 {
237 .name = "xloader", 277 .name = "xloader",
@@ -261,55 +301,16 @@ static struct mtd_partition overo_nand_partitions[] = {
261 }, 301 },
262}; 302};
263 303
264static struct omap_nand_platform_data overo_nand_data = {
265 .parts = overo_nand_partitions,
266 .nr_parts = ARRAY_SIZE(overo_nand_partitions),
267 .dma_channel = -1, /* disable DMA in OMAP NAND driver */
268};
269
270static void __init overo_flash_init(void)
271{
272 u8 cs = 0;
273 u8 nandcs = GPMC_CS_NUM + 1;
274
275 /* find out the chip-select on which NAND exists */
276 while (cs < GPMC_CS_NUM) {
277 u32 ret = 0;
278 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
279
280 if ((ret & 0xC00) == 0x800) {
281 printk(KERN_INFO "Found NAND on CS%d\n", cs);
282 if (nandcs > GPMC_CS_NUM)
283 nandcs = cs;
284 }
285 cs++;
286 }
287
288 if (nandcs > GPMC_CS_NUM) {
289 printk(KERN_INFO "NAND: Unable to find configuration "
290 "in GPMC\n ");
291 return;
292 }
293
294 if (nandcs < GPMC_CS_NUM) {
295 overo_nand_data.cs = nandcs;
296
297 printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
298 if (gpmc_nand_init(&overo_nand_data) < 0)
299 printk(KERN_ERR "Unable to register NAND device\n");
300 }
301}
302
303static struct omap2_hsmmc_info mmc[] = { 304static struct omap2_hsmmc_info mmc[] = {
304 { 305 {
305 .mmc = 1, 306 .mmc = 1,
306 .wires = 4, 307 .caps = MMC_CAP_4_BIT_DATA,
307 .gpio_cd = -EINVAL, 308 .gpio_cd = -EINVAL,
308 .gpio_wp = -EINVAL, 309 .gpio_wp = -EINVAL,
309 }, 310 },
310 { 311 {
311 .mmc = 2, 312 .mmc = 2,
312 .wires = 4, 313 .caps = MMC_CAP_4_BIT_DATA,
313 .gpio_cd = -EINVAL, 314 .gpio_cd = -EINVAL,
314 .gpio_wp = -EINVAL, 315 .gpio_wp = -EINVAL,
315 .transceiver = true, 316 .transceiver = true,
@@ -322,6 +323,93 @@ static struct regulator_consumer_supply overo_vmmc1_supply = {
322 .supply = "vmmc", 323 .supply = "vmmc",
323}; 324};
324 325
326#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
327#include <linux/leds.h>
328
329static struct gpio_led gpio_leds[] = {
330 {
331 .name = "overo:red:gpio21",
332 .default_trigger = "heartbeat",
333 .gpio = 21,
334 .active_low = true,
335 },
336 {
337 .name = "overo:blue:gpio22",
338 .default_trigger = "none",
339 .gpio = 22,
340 .active_low = true,
341 },
342 {
343 .name = "overo:blue:COM",
344 .default_trigger = "mmc0",
345 .gpio = -EINVAL, /* gets replaced */
346 .active_low = true,
347 },
348};
349
350static struct gpio_led_platform_data gpio_leds_pdata = {
351 .leds = gpio_leds,
352 .num_leds = ARRAY_SIZE(gpio_leds),
353};
354
355static struct platform_device gpio_leds_device = {
356 .name = "leds-gpio",
357 .id = -1,
358 .dev = {
359 .platform_data = &gpio_leds_pdata,
360 },
361};
362
363static void __init overo_init_led(void)
364{
365 platform_device_register(&gpio_leds_device);
366}
367
368#else
369static inline void __init overo_init_led(void) { return; }
370#endif
371
372#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
373#include <linux/input.h>
374#include <linux/gpio_keys.h>
375
376static struct gpio_keys_button gpio_buttons[] = {
377 {
378 .code = BTN_0,
379 .gpio = 23,
380 .desc = "button0",
381 .wakeup = 1,
382 },
383 {
384 .code = BTN_1,
385 .gpio = 14,
386 .desc = "button1",
387 .wakeup = 1,
388 },
389};
390
391static struct gpio_keys_platform_data gpio_keys_pdata = {
392 .buttons = gpio_buttons,
393 .nbuttons = ARRAY_SIZE(gpio_buttons),
394};
395
396static struct platform_device gpio_keys_device = {
397 .name = "gpio-keys",
398 .id = -1,
399 .dev = {
400 .platform_data = &gpio_keys_pdata,
401 },
402};
403
404static void __init overo_init_keys(void)
405{
406 platform_device_register(&gpio_keys_device);
407}
408
409#else
410static inline void __init overo_init_keys(void) { return; }
411#endif
412
325static int overo_twl_gpio_setup(struct device *dev, 413static int overo_twl_gpio_setup(struct device *dev,
326 unsigned gpio, unsigned ngpio) 414 unsigned gpio, unsigned ngpio)
327{ 415{
@@ -329,6 +417,11 @@ static int overo_twl_gpio_setup(struct device *dev,
329 417
330 overo_vmmc1_supply.dev = mmc[0].dev; 418 overo_vmmc1_supply.dev = mmc[0].dev;
331 419
420#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
421 /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
422 gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
423#endif
424
332 return 0; 425 return 0;
333} 426}
334 427
@@ -336,6 +429,7 @@ static struct twl4030_gpio_platform_data overo_gpio_data = {
336 .gpio_base = OMAP_MAX_GPIO_LINES, 429 .gpio_base = OMAP_MAX_GPIO_LINES,
337 .irq_base = TWL4030_GPIO_IRQ_BASE, 430 .irq_base = TWL4030_GPIO_IRQ_BASE,
338 .irq_end = TWL4030_GPIO_IRQ_END, 431 .irq_end = TWL4030_GPIO_IRQ_END,
432 .use_leds = true,
339 .setup = overo_twl_gpio_setup, 433 .setup = overo_twl_gpio_setup,
340}; 434};
341 435
@@ -357,17 +451,42 @@ static struct regulator_init_data overo_vmmc1 = {
357 .consumer_supplies = &overo_vmmc1_supply, 451 .consumer_supplies = &overo_vmmc1_supply,
358}; 452};
359 453
360static struct twl4030_codec_audio_data overo_audio_data = { 454/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */
361 .audio_mclk = 26000000, 455static struct regulator_init_data overo_vdac = {
456 .constraints = {
457 .min_uV = 1800000,
458 .max_uV = 1800000,
459 .valid_modes_mask = REGULATOR_MODE_NORMAL
460 | REGULATOR_MODE_STANDBY,
461 .valid_ops_mask = REGULATOR_CHANGE_MODE
462 | REGULATOR_CHANGE_STATUS,
463 },
464 .num_consumer_supplies = 1,
465 .consumer_supplies = &overo_vdda_dac_supply,
362}; 466};
363 467
468/* VPLL2 for digital video outputs */
469static struct regulator_init_data overo_vpll2 = {
470 .constraints = {
471 .name = "VDVI",
472 .min_uV = 1800000,
473 .max_uV = 1800000,
474 .valid_modes_mask = REGULATOR_MODE_NORMAL
475 | REGULATOR_MODE_STANDBY,
476 .valid_ops_mask = REGULATOR_CHANGE_MODE
477 | REGULATOR_CHANGE_STATUS,
478 },
479 .num_consumer_supplies = ARRAY_SIZE(overo_vdds_dsi_supply),
480 .consumer_supplies = overo_vdds_dsi_supply,
481};
482
483static struct twl4030_codec_audio_data overo_audio_data;
484
364static struct twl4030_codec_data overo_codec_data = { 485static struct twl4030_codec_data overo_codec_data = {
365 .audio_mclk = 26000000, 486 .audio_mclk = 26000000,
366 .audio = &overo_audio_data, 487 .audio = &overo_audio_data,
367}; 488};
368 489
369/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */
370
371static struct twl4030_platform_data overo_twldata = { 490static struct twl4030_platform_data overo_twldata = {
372 .irq_base = TWL4030_IRQ_BASE, 491 .irq_base = TWL4030_IRQ_BASE,
373 .irq_end = TWL4030_IRQ_END, 492 .irq_end = TWL4030_IRQ_END,
@@ -375,58 +494,50 @@ static struct twl4030_platform_data overo_twldata = {
375 .usb = &overo_usb_data, 494 .usb = &overo_usb_data,
376 .codec = &overo_codec_data, 495 .codec = &overo_codec_data,
377 .vmmc1 = &overo_vmmc1, 496 .vmmc1 = &overo_vmmc1,
378}; 497 .vdac = &overo_vdac,
379 498 .vpll2 = &overo_vpll2,
380static struct i2c_board_info __initdata overo_i2c_boardinfo[] = {
381 {
382 I2C_BOARD_INFO("tps65950", 0x48),
383 .flags = I2C_CLIENT_WAKE,
384 .irq = INT_34XX_SYS_NIRQ,
385 .platform_data = &overo_twldata,
386 },
387}; 499};
388 500
389static int __init overo_i2c_init(void) 501static int __init overo_i2c_init(void)
390{ 502{
391 omap_register_i2c_bus(1, 2600, overo_i2c_boardinfo, 503 omap3_pmic_init("tps65950", &overo_twldata);
392 ARRAY_SIZE(overo_i2c_boardinfo));
393 /* i2c2 pins are used for gpio */ 504 /* i2c2 pins are used for gpio */
394 omap_register_i2c_bus(3, 400, NULL, 0); 505 omap_register_i2c_bus(3, 400, NULL, 0);
395 return 0; 506 return 0;
396} 507}
397 508
398static struct platform_device overo_lcd_device = { 509static struct spi_board_info overo_spi_board_info[] __initdata = {
399 .name = "overo_lcd", 510#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
400 .id = -1, 511 defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
401}; 512 {
402 513 .modalias = "lgphilips_lb035q02_panel-spi",
403static struct omap_lcd_config overo_lcd_config __initdata = { 514 .bus_num = 1,
404 .ctrl_name = "internal", 515 .chip_select = 1,
405}; 516 .max_speed_hz = 500000,
406 517 .mode = SPI_MODE_3,
407static struct omap_board_config_kernel overo_config[] __initdata = { 518 },
408 { OMAP_TAG_LCD, &overo_lcd_config }, 519#endif
409}; 520};
410 521
411static void __init overo_init_irq(void) 522static int __init overo_spi_init(void)
412{ 523{
413 omap_board_config = overo_config; 524 overo_ads7846_init();
414 omap_board_config_size = ARRAY_SIZE(overo_config); 525 spi_register_board_info(overo_spi_board_info,
415 omap2_init_common_hw(mt46h32m32lf6_sdrc_params, 526 ARRAY_SIZE(overo_spi_board_info));
416 mt46h32m32lf6_sdrc_params); 527 return 0;
417 omap_init_irq();
418 omap_gpio_init();
419} 528}
420 529
421static struct platform_device *overo_devices[] __initdata = { 530static void __init overo_init_early(void)
422 &overo_lcd_device, 531{
423}; 532 omap2_init_common_infrastructure();
424 533 omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
425static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 534 mt46h32m32lf6_sdrc_params);
426 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN, 535}
427 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
428 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
429 536
537static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
538 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
539 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
540 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
430 .phy_reset = true, 541 .phy_reset = true,
431 .reset_gpio_port[0] = -EINVAL, 542 .reset_gpio_port[0] = -EINVAL,
432 .reset_gpio_port[1] = OVERO_GPIO_USBH_NRESET, 543 .reset_gpio_port[1] = OVERO_GPIO_USBH_NRESET,
@@ -437,35 +548,39 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
437static struct omap_board_mux board_mux[] __initdata = { 548static struct omap_board_mux board_mux[] __initdata = {
438 { .reg_offset = OMAP_MUX_TERMINATOR }, 549 { .reg_offset = OMAP_MUX_TERMINATOR },
439}; 550};
440#else
441#define board_mux NULL
442#endif 551#endif
443 552
444static struct omap_musb_board_data musb_board_data = { 553static struct gpio overo_bt_gpios[] __initdata = {
445 .interface_type = MUSB_INTERFACE_ULPI, 554 { OVERO_GPIO_BT_XGATE, GPIOF_OUT_INIT_LOW, "lcd enable" },
446 .mode = MUSB_OTG, 555 { OVERO_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
447 .power = 100,
448}; 556};
449 557
450static void __init overo_init(void) 558static void __init overo_init(void)
451{ 559{
560 int ret;
561
452 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 562 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
453 overo_i2c_init(); 563 overo_i2c_init();
454 platform_add_devices(overo_devices, ARRAY_SIZE(overo_devices)); 564 omap_display_init(&overo_dss_data);
455 omap_serial_init(); 565 omap_serial_init();
456 overo_flash_init(); 566 omap_nand_flash_init(0, overo_nand_partitions,
457 usb_musb_init(&musb_board_data); 567 ARRAY_SIZE(overo_nand_partitions));
458 usb_ehci_init(&ehci_pdata); 568 usb_musb_init(NULL);
569 usbhs_init(&usbhs_bdata);
570 overo_spi_init();
459 overo_ads7846_init(); 571 overo_ads7846_init();
460 overo_init_smsc911x(); 572 overo_init_smsc911x();
573 overo_display_init();
574 overo_init_led();
575 overo_init_keys();
461 576
462 /* Ensure SDRC pins are mux'd for self-refresh */ 577 /* Ensure SDRC pins are mux'd for self-refresh */
463 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); 578 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
464 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); 579 omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
465 580
466 if ((gpio_request(OVERO_GPIO_W2W_NRESET, 581 ret = gpio_request_one(OVERO_GPIO_W2W_NRESET, GPIOF_OUT_INIT_HIGH,
467 "OVERO_GPIO_W2W_NRESET") == 0) && 582 "OVERO_GPIO_W2W_NRESET");
468 (gpio_direction_output(OVERO_GPIO_W2W_NRESET, 1) == 0)) { 583 if (ret == 0) {
469 gpio_export(OVERO_GPIO_W2W_NRESET, 0); 584 gpio_export(OVERO_GPIO_W2W_NRESET, 0);
470 gpio_set_value(OVERO_GPIO_W2W_NRESET, 0); 585 gpio_set_value(OVERO_GPIO_W2W_NRESET, 0);
471 udelay(10); 586 udelay(10);
@@ -475,25 +590,20 @@ static void __init overo_init(void)
475 "OVERO_GPIO_W2W_NRESET\n"); 590 "OVERO_GPIO_W2W_NRESET\n");
476 } 591 }
477 592
478 if ((gpio_request(OVERO_GPIO_BT_XGATE, "OVERO_GPIO_BT_XGATE") == 0) && 593 ret = gpio_request_array(overo_bt_gpios, ARRAY_SIZE(overo_bt_gpios));
479 (gpio_direction_output(OVERO_GPIO_BT_XGATE, 0) == 0)) 594 if (ret) {
595 pr_err("%s: could not obtain BT gpios\n", __func__);
596 } else {
480 gpio_export(OVERO_GPIO_BT_XGATE, 0); 597 gpio_export(OVERO_GPIO_BT_XGATE, 0);
481 else
482 printk(KERN_ERR "could not obtain gpio for OVERO_GPIO_BT_XGATE\n");
483
484 if ((gpio_request(OVERO_GPIO_BT_NRESET, "OVERO_GPIO_BT_NRESET") == 0) &&
485 (gpio_direction_output(OVERO_GPIO_BT_NRESET, 1) == 0)) {
486 gpio_export(OVERO_GPIO_BT_NRESET, 0); 598 gpio_export(OVERO_GPIO_BT_NRESET, 0);
487 gpio_set_value(OVERO_GPIO_BT_NRESET, 0); 599 gpio_set_value(OVERO_GPIO_BT_NRESET, 0);
488 mdelay(6); 600 mdelay(6);
489 gpio_set_value(OVERO_GPIO_BT_NRESET, 1); 601 gpio_set_value(OVERO_GPIO_BT_NRESET, 1);
490 } else {
491 printk(KERN_ERR "could not obtain gpio for "
492 "OVERO_GPIO_BT_NRESET\n");
493 } 602 }
494 603
495 if ((gpio_request(OVERO_GPIO_USBH_CPEN, "OVERO_GPIO_USBH_CPEN") == 0) && 604 ret = gpio_request_one(OVERO_GPIO_USBH_CPEN, GPIOF_OUT_INIT_HIGH,
496 (gpio_direction_output(OVERO_GPIO_USBH_CPEN, 1) == 0)) 605 "OVERO_GPIO_USBH_CPEN");
606 if (ret == 0)
497 gpio_export(OVERO_GPIO_USBH_CPEN, 0); 607 gpio_export(OVERO_GPIO_USBH_CPEN, 0);
498 else 608 else
499 printk(KERN_ERR "could not obtain gpio for " 609 printk(KERN_ERR "could not obtain gpio for "
@@ -501,12 +611,11 @@ static void __init overo_init(void)
501} 611}
502 612
503MACHINE_START(OVERO, "Gumstix Overo") 613MACHINE_START(OVERO, "Gumstix Overo")
504 .phys_io = 0x48000000,
505 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
506 .boot_params = 0x80000100, 614 .boot_params = 0x80000100,
507 .map_io = omap3_map_io,
508 .reserve = omap_reserve, 615 .reserve = omap_reserve,
509 .init_irq = overo_init_irq, 616 .map_io = omap3_map_io,
617 .init_early = overo_init_early,
618 .init_irq = omap_init_irq,
510 .init_machine = overo_init, 619 .init_machine = overo_init,
511 .timer = &omap_timer, 620 .timer = &omap_timer,
512MACHINE_END 621MACHINE_END
diff --git a/arch/arm/mach-omap2/board-rm680.c b/arch/arm/mach-omap2/board-rm680.c
new file mode 100644
index 000000000000..42d10b12da3c
--- /dev/null
+++ b/arch/arm/mach-omap2/board-rm680.c
@@ -0,0 +1,169 @@
1/*
2 * Board support file for Nokia RM-680.
3 *
4 * Copyright (C) 2010 Nokia
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/io.h>
12#include <linux/i2c.h>
13#include <linux/gpio.h>
14#include <linux/init.h>
15#include <linux/i2c/twl.h>
16#include <linux/platform_device.h>
17#include <linux/regulator/fixed.h>
18#include <linux/regulator/machine.h>
19#include <linux/regulator/consumer.h>
20
21#include <asm/mach/arch.h>
22#include <asm/mach-types.h>
23
24#include <plat/i2c.h>
25#include <plat/mmc.h>
26#include <plat/usb.h>
27#include <plat/gpmc.h>
28#include <plat/common.h>
29#include <plat/onenand.h>
30
31#include "mux.h"
32#include "hsmmc.h"
33#include "sdram-nokia.h"
34#include "common-board-devices.h"
35
36static struct regulator_consumer_supply rm680_vemmc_consumers[] = {
37 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
38};
39
40/* Fixed regulator for internal eMMC */
41static struct regulator_init_data rm680_vemmc = {
42 .constraints = {
43 .name = "rm680_vemmc",
44 .valid_modes_mask = REGULATOR_MODE_NORMAL
45 | REGULATOR_MODE_STANDBY,
46 .valid_ops_mask = REGULATOR_CHANGE_STATUS
47 | REGULATOR_CHANGE_MODE,
48 },
49 .num_consumer_supplies = ARRAY_SIZE(rm680_vemmc_consumers),
50 .consumer_supplies = rm680_vemmc_consumers,
51};
52
53static struct fixed_voltage_config rm680_vemmc_config = {
54 .supply_name = "VEMMC",
55 .microvolts = 2900000,
56 .gpio = 157,
57 .startup_delay = 150,
58 .enable_high = 1,
59 .init_data = &rm680_vemmc,
60};
61
62static struct platform_device rm680_vemmc_device = {
63 .name = "reg-fixed-voltage",
64 .dev = {
65 .platform_data = &rm680_vemmc_config,
66 },
67};
68
69static struct platform_device *rm680_peripherals_devices[] __initdata = {
70 &rm680_vemmc_device,
71};
72
73/* TWL */
74static struct twl4030_gpio_platform_data rm680_gpio_data = {
75 .gpio_base = OMAP_MAX_GPIO_LINES,
76 .irq_base = TWL4030_GPIO_IRQ_BASE,
77 .irq_end = TWL4030_GPIO_IRQ_END,
78 .pullups = BIT(0),
79 .pulldowns = BIT(1) | BIT(2) | BIT(8) | BIT(15),
80};
81
82static struct twl4030_usb_data rm680_usb_data = {
83 .usb_mode = T2_USB_MODE_ULPI,
84};
85
86static struct twl4030_platform_data rm680_twl_data = {
87 .irq_base = TWL4030_IRQ_BASE,
88 .irq_end = TWL4030_IRQ_END,
89 .gpio = &rm680_gpio_data,
90 .usb = &rm680_usb_data,
91 /* add rest of the children here */
92};
93
94static void __init rm680_i2c_init(void)
95{
96 omap_pmic_init(1, 2900, "twl5031", INT_34XX_SYS_NIRQ, &rm680_twl_data);
97 omap_register_i2c_bus(2, 400, NULL, 0);
98 omap_register_i2c_bus(3, 400, NULL, 0);
99}
100
101#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
102 defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
103static struct omap_onenand_platform_data board_onenand_data[] = {
104 {
105 .gpio_irq = 65,
106 .flags = ONENAND_SYNC_READWRITE,
107 }
108};
109#endif
110
111/* eMMC */
112static struct omap2_hsmmc_info mmc[] __initdata = {
113 {
114 .name = "internal",
115 .mmc = 2,
116 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED,
117 .gpio_cd = -EINVAL,
118 .gpio_wp = -EINVAL,
119 },
120 { /* Terminator */ }
121};
122
123static void __init rm680_peripherals_init(void)
124{
125 platform_add_devices(rm680_peripherals_devices,
126 ARRAY_SIZE(rm680_peripherals_devices));
127 rm680_i2c_init();
128 gpmc_onenand_init(board_onenand_data);
129 omap2_hsmmc_init(mmc);
130}
131
132static void __init rm680_init_early(void)
133{
134 struct omap_sdrc_params *sdrc_params;
135
136 omap2_init_common_infrastructure();
137 sdrc_params = nokia_get_sdram_timings();
138 omap2_init_common_devices(sdrc_params, sdrc_params);
139}
140
141#ifdef CONFIG_OMAP_MUX
142static struct omap_board_mux board_mux[] __initdata = {
143 { .reg_offset = OMAP_MUX_TERMINATOR },
144};
145#endif
146
147static void __init rm680_init(void)
148{
149 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
150 omap_serial_init();
151 usb_musb_init(NULL);
152 rm680_peripherals_init();
153}
154
155static void __init rm680_map_io(void)
156{
157 omap2_set_globals_3xxx();
158 omap34xx_map_common_io();
159}
160
161MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")
162 .boot_params = 0x80000100,
163 .reserve = omap_reserve,
164 .map_io = rm680_map_io,
165 .init_early = rm680_init_early,
166 .init_irq = omap_init_irq,
167 .init_machine = rm680_init,
168 .timer = &omap_timer,
169MACHINE_END
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index 9a5eb87425fc..88bd6f7705f0 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -14,7 +14,7 @@
14#include <linux/input.h> 14#include <linux/input.h>
15#include <linux/input/matrix_keypad.h> 15#include <linux/input/matrix_keypad.h>
16#include <linux/spi/spi.h> 16#include <linux/spi/spi.h>
17#include <linux/spi/wl12xx.h> 17#include <linux/wl12xx.h>
18#include <linux/i2c.h> 18#include <linux/i2c.h>
19#include <linux/i2c/twl.h> 19#include <linux/i2c/twl.h>
20#include <linux/clk.h> 20#include <linux/clk.h>
@@ -23,6 +23,7 @@
23#include <linux/gpio.h> 23#include <linux/gpio.h>
24#include <linux/gpio_keys.h> 24#include <linux/gpio_keys.h>
25#include <linux/mmc/host.h> 25#include <linux/mmc/host.h>
26#include <linux/power/isp1704_charger.h>
26 27
27#include <plat/mcspi.h> 28#include <plat/mcspi.h>
28#include <plat/board.h> 29#include <plat/board.h>
@@ -32,19 +33,28 @@
32#include <plat/onenand.h> 33#include <plat/onenand.h>
33#include <plat/gpmc-smc91x.h> 34#include <plat/gpmc-smc91x.h>
34 35
36#include <mach/board-rx51.h>
37
35#include <sound/tlv320aic3x.h> 38#include <sound/tlv320aic3x.h>
36#include <sound/tpa6130a2-plat.h> 39#include <sound/tpa6130a2-plat.h>
40#include <media/radio-si4713.h>
41#include <media/si4713.h>
37 42
38#include <../drivers/staging/iio/light/tsl2563.h> 43#include <../drivers/staging/iio/light/tsl2563.h>
39 44
40#include "mux.h" 45#include "mux.h"
41#include "hsmmc.h" 46#include "hsmmc.h"
47#include "common-board-devices.h"
42 48
43#define SYSTEM_REV_B_USES_VAUX3 0x1699 49#define SYSTEM_REV_B_USES_VAUX3 0x1699
44#define SYSTEM_REV_S_USES_VAUX3 0x8 50#define SYSTEM_REV_S_USES_VAUX3 0x8
45 51
46#define RX51_WL1251_POWER_GPIO 87 52#define RX51_WL1251_POWER_GPIO 87
47#define RX51_WL1251_IRQ_GPIO 42 53#define RX51_WL1251_IRQ_GPIO 42
54#define RX51_FMTX_RESET_GPIO 163
55#define RX51_FMTX_IRQ 53
56
57#define RX51_USB_TRANSCEIVER_RST_GPIO 67
48 58
49/* list all spi devices here */ 59/* list all spi devices here */
50enum { 60enum {
@@ -104,6 +114,30 @@ static struct spi_board_info rx51_peripherals_spi_board_info[] __initdata = {
104 }, 114 },
105}; 115};
106 116
117static void rx51_charger_set_power(bool on)
118{
119 gpio_set_value(RX51_USB_TRANSCEIVER_RST_GPIO, on);
120}
121
122static struct isp1704_charger_data rx51_charger_data = {
123 .set_power = rx51_charger_set_power,
124};
125
126static struct platform_device rx51_charger_device = {
127 .name = "isp1704_charger",
128 .dev = {
129 .platform_data = &rx51_charger_data,
130 },
131};
132
133static void __init rx51_charger_init(void)
134{
135 WARN_ON(gpio_request_one(RX51_USB_TRANSCEIVER_RST_GPIO,
136 GPIOF_OUT_INIT_LOW, "isp1704_reset"));
137
138 platform_device_register(&rx51_charger_device);
139}
140
107#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) 141#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
108 142
109#define RX51_GPIO_CAMERA_LENS_COVER 110 143#define RX51_GPIO_CAMERA_LENS_COVER 110
@@ -184,7 +218,7 @@ static void __init rx51_add_gpio_keys(void)
184} 218}
185#endif /* CONFIG_KEYBOARD_GPIO || CONFIG_KEYBOARD_GPIO_MODULE */ 219#endif /* CONFIG_KEYBOARD_GPIO || CONFIG_KEYBOARD_GPIO_MODULE */
186 220
187static int board_keymap[] = { 221static uint32_t board_keymap[] = {
188 /* 222 /*
189 * Note that KEY(x, 8, KEY_XXX) entries represent "entrire row 223 * Note that KEY(x, 8, KEY_XXX) entries represent "entrire row
190 * connected to the ground" matrix state. 224 * connected to the ground" matrix state.
@@ -286,6 +320,8 @@ static struct omap_board_mux rx51_mmc2_off_mux[] = {
286 { .reg_offset = OMAP_MUX_TERMINATOR }, 320 { .reg_offset = OMAP_MUX_TERMINATOR },
287}; 321};
288 322
323static struct omap_mux_partition *partition;
324
289/* 325/*
290 * Current flows to eMMC when eMMC is off and the data lines are pulled up, 326 * Current flows to eMMC when eMMC is off and the data lines are pulled up,
291 * so pull them down. N.B. we pull 8 lines because we are using 8 lines. 327 * so pull them down. N.B. we pull 8 lines because we are using 8 lines.
@@ -293,16 +329,16 @@ static struct omap_board_mux rx51_mmc2_off_mux[] = {
293static void rx51_mmc2_remux(struct device *dev, int slot, int power_on) 329static void rx51_mmc2_remux(struct device *dev, int slot, int power_on)
294{ 330{
295 if (power_on) 331 if (power_on)
296 omap_mux_write_array(rx51_mmc2_on_mux); 332 omap_mux_write_array(partition, rx51_mmc2_on_mux);
297 else 333 else
298 omap_mux_write_array(rx51_mmc2_off_mux); 334 omap_mux_write_array(partition, rx51_mmc2_off_mux);
299} 335}
300 336
301static struct omap2_hsmmc_info mmc[] __initdata = { 337static struct omap2_hsmmc_info mmc[] __initdata = {
302 { 338 {
303 .name = "external", 339 .name = "external",
304 .mmc = 1, 340 .mmc = 1,
305 .wires = 4, 341 .caps = MMC_CAP_4_BIT_DATA,
306 .cover_only = true, 342 .cover_only = true,
307 .gpio_cd = 160, 343 .gpio_cd = 160,
308 .gpio_wp = -EINVAL, 344 .gpio_wp = -EINVAL,
@@ -311,7 +347,8 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
311 { 347 {
312 .name = "internal", 348 .name = "internal",
313 .mmc = 2, 349 .mmc = 2,
314 .wires = 8, /* See also rx51_mmc2_remux */ 350 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
351 /* See also rx51_mmc2_remux */
315 .gpio_cd = -EINVAL, 352 .gpio_cd = -EINVAL,
316 .gpio_wp = -EINVAL, 353 .gpio_wp = -EINVAL,
317 .nonremovable = true, 354 .nonremovable = true,
@@ -322,41 +359,44 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
322}; 359};
323 360
324static struct regulator_consumer_supply rx51_vmmc1_supply = 361static struct regulator_consumer_supply rx51_vmmc1_supply =
325 REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0"); 362 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
326 363
327static struct regulator_consumer_supply rx51_vaux3_supply = 364static struct regulator_consumer_supply rx51_vaux3_supply =
328 REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"); 365 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
329 366
330static struct regulator_consumer_supply rx51_vsim_supply = 367static struct regulator_consumer_supply rx51_vsim_supply =
331 REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1"); 368 REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
332 369
333static struct regulator_consumer_supply rx51_vmmc2_supplies[] = { 370static struct regulator_consumer_supply rx51_vmmc2_supplies[] = {
334 /* tlv320aic3x analog supplies */ 371 /* tlv320aic3x analog supplies */
335 REGULATOR_SUPPLY("AVDD", "2-0018"), 372 REGULATOR_SUPPLY("AVDD", "2-0018"),
336 REGULATOR_SUPPLY("DRVDD", "2-0018"), 373 REGULATOR_SUPPLY("DRVDD", "2-0018"),
374 REGULATOR_SUPPLY("AVDD", "2-0019"),
375 REGULATOR_SUPPLY("DRVDD", "2-0019"),
337 /* tpa6130a2 */ 376 /* tpa6130a2 */
338 REGULATOR_SUPPLY("Vdd", "2-0060"), 377 REGULATOR_SUPPLY("Vdd", "2-0060"),
339 /* Keep vmmc as last item. It is not iterated for newer boards */ 378 /* Keep vmmc as last item. It is not iterated for newer boards */
340 REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"), 379 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
341}; 380};
342 381
343static struct regulator_consumer_supply rx51_vio_supplies[] = { 382static struct regulator_consumer_supply rx51_vio_supplies[] = {
344 /* tlv320aic3x digital supplies */ 383 /* tlv320aic3x digital supplies */
345 REGULATOR_SUPPLY("IOVDD", "2-0018"), 384 REGULATOR_SUPPLY("IOVDD", "2-0018"),
346 REGULATOR_SUPPLY("DVDD", "2-0018"), 385 REGULATOR_SUPPLY("DVDD", "2-0018"),
386 REGULATOR_SUPPLY("IOVDD", "2-0019"),
387 REGULATOR_SUPPLY("DVDD", "2-0019"),
388 /* Si4713 IO supply */
389 REGULATOR_SUPPLY("vio", "2-0063"),
347}; 390};
348 391
349#if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE)
350extern struct platform_device rx51_display_device;
351#endif
352
353static struct regulator_consumer_supply rx51_vaux1_consumers[] = { 392static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
354#if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) 393 REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
355 { 394 /* Si4713 supply */
356 .supply = "vdds_sdi", 395 REGULATOR_SUPPLY("vdd", "2-0063"),
357 .dev = &rx51_display_device.dev, 396};
358 }, 397
359#endif 398static struct regulator_consumer_supply rx51_vdac_supply[] = {
399 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
360}; 400};
361 401
362static struct regulator_init_data rx51_vaux1 = { 402static struct regulator_init_data rx51_vaux1 = {
@@ -448,6 +488,7 @@ static struct regulator_init_data rx51_vmmc2 = {
448 .name = "V28_A", 488 .name = "V28_A",
449 .min_uV = 2800000, 489 .min_uV = 2800000,
450 .max_uV = 3000000, 490 .max_uV = 3000000,
491 .always_on = true, /* due VIO leak to AIC34 VDDs */
451 .apply_uV = true, 492 .apply_uV = true,
452 .valid_modes_mask = REGULATOR_MODE_NORMAL 493 .valid_modes_mask = REGULATOR_MODE_NORMAL
453 | REGULATOR_MODE_STANDBY, 494 | REGULATOR_MODE_STANDBY,
@@ -476,14 +517,17 @@ static struct regulator_init_data rx51_vsim = {
476 517
477static struct regulator_init_data rx51_vdac = { 518static struct regulator_init_data rx51_vdac = {
478 .constraints = { 519 .constraints = {
520 .name = "VDAC",
479 .min_uV = 1800000, 521 .min_uV = 1800000,
480 .max_uV = 1800000, 522 .max_uV = 1800000,
523 .apply_uV = true,
481 .valid_modes_mask = REGULATOR_MODE_NORMAL 524 .valid_modes_mask = REGULATOR_MODE_NORMAL
482 | REGULATOR_MODE_STANDBY, 525 | REGULATOR_MODE_STANDBY,
483 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE 526 .valid_ops_mask = REGULATOR_CHANGE_MODE
484 | REGULATOR_CHANGE_MODE
485 | REGULATOR_CHANGE_STATUS, 527 | REGULATOR_CHANGE_STATUS,
486 }, 528 },
529 .num_consumer_supplies = 1,
530 .consumer_supplies = rx51_vdac_supply,
487}; 531};
488 532
489static struct regulator_init_data rx51_vio = { 533static struct regulator_init_data rx51_vio = {
@@ -500,13 +544,46 @@ static struct regulator_init_data rx51_vio = {
500 .consumer_supplies = rx51_vio_supplies, 544 .consumer_supplies = rx51_vio_supplies,
501}; 545};
502 546
547static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
548 .gpio_reset = RX51_FMTX_RESET_GPIO,
549};
550
551static struct i2c_board_info rx51_si4713_board_info __initdata_or_module = {
552 I2C_BOARD_INFO("si4713", SI4713_I2C_ADDR_BUSEN_HIGH),
553 .platform_data = &rx51_si4713_i2c_data,
554};
555
556static struct radio_si4713_platform_data rx51_si4713_data __initdata_or_module = {
557 .i2c_bus = 2,
558 .subdev_board_info = &rx51_si4713_board_info,
559};
560
561static struct platform_device rx51_si4713_dev = {
562 .name = "radio-si4713",
563 .id = -1,
564 .dev = {
565 .platform_data = &rx51_si4713_data,
566 },
567};
568
569static __init void rx51_init_si4713(void)
570{
571 int err;
572
573 err = gpio_request_one(RX51_FMTX_IRQ, GPIOF_DIR_IN, "si4713 irq");
574 if (err) {
575 printk(KERN_ERR "Cannot request si4713 irq gpio. %d\n", err);
576 return;
577 }
578 rx51_si4713_board_info.irq = gpio_to_irq(RX51_FMTX_IRQ);
579 platform_device_register(&rx51_si4713_dev);
580}
581
503static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n) 582static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
504{ 583{
505 /* FIXME this gpio setup is just a placeholder for now */ 584 /* FIXME this gpio setup is just a placeholder for now */
506 gpio_request(gpio + 6, "backlight_pwm"); 585 gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm");
507 gpio_direction_output(gpio + 6, 0); 586 gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "speaker_en");
508 gpio_request(gpio + 7, "speaker_en");
509 gpio_direction_output(gpio + 7, 1);
510 587
511 return 0; 588 return 0;
512} 589}
@@ -676,7 +753,7 @@ static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
676 { .resource = RES_RESET, .devgroup = -1, 753 { .resource = RES_RESET, .devgroup = -1,
677 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1 754 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
678 }, 755 },
679 { .resource = RES_Main_Ref, .devgroup = -1, 756 { .resource = RES_MAIN_REF, .devgroup = -1,
680 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1 757 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
681 }, 758 },
682 { 0, 0}, 759 { 0, 0},
@@ -688,7 +765,14 @@ static struct twl4030_power_data rx51_t2scripts_data __initdata = {
688 .resource_config = twl4030_rconfig, 765 .resource_config = twl4030_rconfig,
689}; 766};
690 767
768struct twl4030_codec_vibra_data rx51_vibra_data __initdata = {
769 .coexist = 0,
770};
691 771
772struct twl4030_codec_data rx51_codec_data __initdata = {
773 .audio_mclk = 26000000,
774 .vibra = &rx51_vibra_data,
775};
692 776
693static struct twl4030_platform_data rx51_twldata __initdata = { 777static struct twl4030_platform_data rx51_twldata __initdata = {
694 .irq_base = TWL4030_IRQ_BASE, 778 .irq_base = TWL4030_IRQ_BASE,
@@ -700,6 +784,7 @@ static struct twl4030_platform_data rx51_twldata __initdata = {
700 .madc = &rx51_madc_data, 784 .madc = &rx51_madc_data,
701 .usb = &rx51_usb_data, 785 .usb = &rx51_usb_data,
702 .power = &rx51_t2scripts_data, 786 .power = &rx51_t2scripts_data,
787 .codec = &rx51_codec_data,
703 788
704 .vaux1 = &rx51_vaux1, 789 .vaux1 = &rx51_vaux1,
705 .vaux2 = &rx51_vaux2, 790 .vaux2 = &rx51_vaux2,
@@ -710,22 +795,24 @@ static struct twl4030_platform_data rx51_twldata __initdata = {
710 .vio = &rx51_vio, 795 .vio = &rx51_vio,
711}; 796};
712 797
713static struct aic3x_pdata rx51_aic3x_data __initdata = { 798static struct tpa6130a2_platform_data rx51_tpa6130a2_data __initdata_or_module = {
714 .gpio_reset = 60,
715};
716
717static struct tpa6130a2_platform_data rx51_tpa6130a2_data __initdata = {
718 .id = TPA6130A2, 799 .id = TPA6130A2,
719 .power_gpio = 98, 800 .power_gpio = 98,
720}; 801};
721 802
722static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_1[] = { 803/* Audio setup data */
723 { 804static struct aic3x_setup_data rx51_aic34_setup = {
724 I2C_BOARD_INFO("twl5030", 0x48), 805 .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
725 .flags = I2C_CLIENT_WAKE, 806 .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
726 .irq = INT_34XX_SYS_NIRQ, 807};
727 .platform_data = &rx51_twldata, 808
728 }, 809static struct aic3x_pdata rx51_aic3x_data = {
810 .setup = &rx51_aic34_setup,
811 .gpio_reset = 60,
812};
813
814static struct aic3x_pdata rx51_aic3x_data2 = {
815 .gpio_reset = 60,
729}; 816};
730 817
731static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = { 818static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
@@ -733,6 +820,10 @@ static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
733 I2C_BOARD_INFO("tlv320aic3x", 0x18), 820 I2C_BOARD_INFO("tlv320aic3x", 0x18),
734 .platform_data = &rx51_aic3x_data, 821 .platform_data = &rx51_aic3x_data,
735 }, 822 },
823 {
824 I2C_BOARD_INFO("tlv320aic3x", 0x19),
825 .platform_data = &rx51_aic3x_data2,
826 },
736#if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE) 827#if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE)
737 { 828 {
738 I2C_BOARD_INFO("tsl2563", 0x29), 829 I2C_BOARD_INFO("tsl2563", 0x29),
@@ -756,8 +847,7 @@ static int __init rx51_i2c_init(void)
756 rx51_twldata.vaux3 = &rx51_vaux3_cam; 847 rx51_twldata.vaux3 = &rx51_vaux3_cam;
757 } 848 }
758 rx51_twldata.vmmc2 = &rx51_vmmc2; 849 rx51_twldata.vmmc2 = &rx51_vmmc2;
759 omap_register_i2c_bus(1, 2200, rx51_peripherals_i2c_board_info_1, 850 omap_pmic_init(1, 2200, "twl5030", INT_34XX_SYS_NIRQ, &rx51_twldata);
760 ARRAY_SIZE(rx51_peripherals_i2c_board_info_1));
761 omap_register_i2c_bus(2, 100, rx51_peripherals_i2c_board_info_2, 851 omap_register_i2c_bus(2, 100, rx51_peripherals_i2c_board_info_2,
762 ARRAY_SIZE(rx51_peripherals_i2c_board_info_2)); 852 ARRAY_SIZE(rx51_peripherals_i2c_board_info_2));
763 omap_register_i2c_bus(3, 400, NULL, 0); 853 omap_register_i2c_bus(3, 400, NULL, 0);
@@ -801,25 +891,15 @@ static struct mtd_partition onenand_partitions[] = {
801 }, 891 },
802}; 892};
803 893
804static struct omap_onenand_platform_data board_onenand_data = { 894static struct omap_onenand_platform_data board_onenand_data[] = {
805 .cs = 0, 895 {
806 .gpio_irq = 65, 896 .cs = 0,
807 .parts = onenand_partitions, 897 .gpio_irq = 65,
808 .nr_parts = ARRAY_SIZE(onenand_partitions), 898 .parts = onenand_partitions,
809 .flags = ONENAND_SYNC_READWRITE, 899 .nr_parts = ARRAY_SIZE(onenand_partitions),
900 .flags = ONENAND_SYNC_READWRITE,
901 }
810}; 902};
811
812static void __init board_onenand_init(void)
813{
814 gpmc_onenand_init(&board_onenand_data);
815}
816
817#else
818
819static inline void board_onenand_init(void)
820{
821}
822
823#endif 903#endif
824 904
825#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) 905#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
@@ -854,26 +934,20 @@ static void rx51_wl1251_set_power(bool enable)
854 gpio_set_value(RX51_WL1251_POWER_GPIO, enable); 934 gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
855} 935}
856 936
937static struct gpio rx51_wl1251_gpios[] __initdata = {
938 { RX51_WL1251_POWER_GPIO, GPIOF_OUT_INIT_LOW, "wl1251 power" },
939 { RX51_WL1251_IRQ_GPIO, GPIOF_IN, "wl1251 irq" },
940};
941
857static void __init rx51_init_wl1251(void) 942static void __init rx51_init_wl1251(void)
858{ 943{
859 int irq, ret; 944 int irq, ret;
860 945
861 ret = gpio_request(RX51_WL1251_POWER_GPIO, "wl1251 power"); 946 ret = gpio_request_array(rx51_wl1251_gpios,
947 ARRAY_SIZE(rx51_wl1251_gpios));
862 if (ret < 0) 948 if (ret < 0)
863 goto error; 949 goto error;
864 950
865 ret = gpio_direction_output(RX51_WL1251_POWER_GPIO, 0);
866 if (ret < 0)
867 goto err_power;
868
869 ret = gpio_request(RX51_WL1251_IRQ_GPIO, "wl1251 irq");
870 if (ret < 0)
871 goto err_power;
872
873 ret = gpio_direction_input(RX51_WL1251_IRQ_GPIO);
874 if (ret < 0)
875 goto err_irq;
876
877 irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO); 951 irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
878 if (irq < 0) 952 if (irq < 0)
879 goto err_irq; 953 goto err_irq;
@@ -885,10 +959,7 @@ static void __init rx51_init_wl1251(void)
885 959
886err_irq: 960err_irq:
887 gpio_free(RX51_WL1251_IRQ_GPIO); 961 gpio_free(RX51_WL1251_IRQ_GPIO);
888
889err_power:
890 gpio_free(RX51_WL1251_POWER_GPIO); 962 gpio_free(RX51_WL1251_POWER_GPIO);
891
892error: 963error:
893 printk(KERN_ERR "wl1251 board initialisation failed\n"); 964 printk(KERN_ERR "wl1251 board initialisation failed\n");
894 wl1251_pdata.set_power = NULL; 965 wl1251_pdata.set_power = NULL;
@@ -902,12 +973,18 @@ error:
902void __init rx51_peripherals_init(void) 973void __init rx51_peripherals_init(void)
903{ 974{
904 rx51_i2c_init(); 975 rx51_i2c_init();
905 board_onenand_init(); 976 gpmc_onenand_init(board_onenand_data);
906 board_smc91x_init(); 977 board_smc91x_init();
907 rx51_add_gpio_keys(); 978 rx51_add_gpio_keys();
908 rx51_init_wl1251(); 979 rx51_init_wl1251();
980 rx51_init_si4713();
909 spi_register_board_info(rx51_peripherals_spi_board_info, 981 spi_register_board_info(rx51_peripherals_spi_board_info,
910 ARRAY_SIZE(rx51_peripherals_spi_board_info)); 982 ARRAY_SIZE(rx51_peripherals_spi_board_info));
911 omap2_hsmmc_init(mmc); 983
984 partition = omap_mux_get("core");
985 if (partition)
986 omap2_hsmmc_init(mmc);
987
988 rx51_charger_init();
912} 989}
913 990
diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c
index 5a1005ba9815..2c1289bd5e6a 100644
--- a/arch/arm/mach-omap2/board-rx51-video.c
+++ b/arch/arm/mach-omap2/board-rx51-video.c
@@ -14,12 +14,13 @@
14#include <linux/gpio.h> 14#include <linux/gpio.h>
15#include <linux/spi/spi.h> 15#include <linux/spi/spi.h>
16#include <linux/mm.h> 16#include <linux/mm.h>
17
18#include <asm/mach-types.h> 17#include <asm/mach-types.h>
19#include <plat/display.h> 18#include <video/omapdss.h>
20#include <plat/vram.h> 19#include <plat/vram.h>
21#include <plat/mcspi.h> 20#include <plat/mcspi.h>
22 21
22#include <mach/board-rx51.h>
23
23#include "mux.h" 24#include "mux.h"
24 25
25#define RX51_LCD_RESET_GPIO 90 26#define RX51_LCD_RESET_GPIO 90
@@ -47,8 +48,16 @@ static struct omap_dss_device rx51_lcd_device = {
47 .platform_disable = rx51_lcd_disable, 48 .platform_disable = rx51_lcd_disable,
48}; 49};
49 50
51static struct omap_dss_device rx51_tv_device = {
52 .name = "tv",
53 .type = OMAP_DISPLAY_TYPE_VENC,
54 .driver_name = "venc",
55 .phy.venc.type = OMAP_DSS_VENC_TYPE_COMPOSITE,
56};
57
50static struct omap_dss_device *rx51_dss_devices[] = { 58static struct omap_dss_device *rx51_dss_devices[] = {
51 &rx51_lcd_device, 59 &rx51_lcd_device,
60 &rx51_tv_device,
52}; 61};
53 62
54static struct omap_dss_board_info rx51_dss_board_info = { 63static struct omap_dss_board_info rx51_dss_board_info = {
@@ -57,18 +66,6 @@ static struct omap_dss_board_info rx51_dss_board_info = {
57 .default_device = &rx51_lcd_device, 66 .default_device = &rx51_lcd_device,
58}; 67};
59 68
60struct platform_device rx51_display_device = {
61 .name = "omapdss",
62 .id = -1,
63 .dev = {
64 .platform_data = &rx51_dss_board_info,
65 },
66};
67
68static struct platform_device *rx51_video_devices[] __initdata = {
69 &rx51_display_device,
70};
71
72static int __init rx51_video_init(void) 69static int __init rx51_video_init(void)
73{ 70{
74 if (!machine_is_nokia_rx51()) 71 if (!machine_is_nokia_rx51())
@@ -79,15 +76,13 @@ static int __init rx51_video_init(void)
79 return 0; 76 return 0;
80 } 77 }
81 78
82 if (gpio_request(RX51_LCD_RESET_GPIO, "LCD ACX565AKM reset")) { 79 if (gpio_request_one(RX51_LCD_RESET_GPIO, GPIOF_OUT_INIT_HIGH,
80 "LCD ACX565AKM reset")) {
83 pr_err("%s failed to get LCD Reset GPIO\n", __func__); 81 pr_err("%s failed to get LCD Reset GPIO\n", __func__);
84 return 0; 82 return 0;
85 } 83 }
86 84
87 gpio_direction_output(RX51_LCD_RESET_GPIO, 1); 85 omap_display_init(&rx51_dss_board_info);
88
89 platform_add_devices(rx51_video_devices,
90 ARRAY_SIZE(rx51_video_devices));
91 return 0; 86 return 0;
92} 87}
93 88
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index a58e8cb1a7fc..fec4cac8fa0a 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -32,10 +32,10 @@
32 32
33#include "mux.h" 33#include "mux.h"
34#include "pm.h" 34#include "pm.h"
35#include "sdram-nokia.h"
35 36
36#define RX51_GPIO_SLEEP_IND 162 37#define RX51_GPIO_SLEEP_IND 162
37 38
38struct omap_sdrc_params *rx51_get_sdram_timings(void);
39extern void rx51_video_mem_init(void); 39extern void rx51_video_mem_init(void);
40 40
41static struct gpio_led gpio_leds[] = { 41static struct gpio_led gpio_leds[] = {
@@ -58,21 +58,25 @@ static struct platform_device leds_gpio = {
58 }, 58 },
59}; 59};
60 60
61/*
62 * cpuidle C-states definition override from the default values.
63 * The 'exit_latency' field is the sum of sleep and wake-up latencies.
64 */
61static struct cpuidle_params rx51_cpuidle_params[] = { 65static struct cpuidle_params rx51_cpuidle_params[] = {
62 /* C1 */ 66 /* C1 */
63 {1, 110, 162, 5}, 67 {110 + 162, 5 , 1},
64 /* C2 */ 68 /* C2 */
65 {1, 106, 180, 309}, 69 {106 + 180, 309, 1},
66 /* C3 */ 70 /* C3 */
67 {0, 107, 410, 46057}, 71 {107 + 410, 46057, 0},
68 /* C4 */ 72 /* C4 */
69 {0, 121, 3374, 46057}, 73 {121 + 3374, 46057, 0},
70 /* C5 */ 74 /* C5 */
71 {1, 855, 1146, 46057}, 75 {855 + 1146, 46057, 1},
72 /* C6 */ 76 /* C6 */
73 {0, 7580, 4134, 484329}, 77 {7580 + 4134, 484329, 0},
74 /* C7 */ 78 /* C7 */
75 {1, 7505, 15274, 484329}, 79 {7505 + 15274, 484329, 1},
76}; 80};
77 81
78static struct omap_lcd_config rx51_lcd_config = { 82static struct omap_lcd_config rx51_lcd_config = {
@@ -98,17 +102,13 @@ static struct omap_board_config_kernel rx51_config[] = {
98 { OMAP_TAG_LCD, &rx51_lcd_config }, 102 { OMAP_TAG_LCD, &rx51_lcd_config },
99}; 103};
100 104
101static void __init rx51_init_irq(void) 105static void __init rx51_init_early(void)
102{ 106{
103 struct omap_sdrc_params *sdrc_params; 107 struct omap_sdrc_params *sdrc_params;
104 108
105 omap_board_config = rx51_config; 109 omap2_init_common_infrastructure();
106 omap_board_config_size = ARRAY_SIZE(rx51_config); 110 sdrc_params = nokia_get_sdram_timings();
107 omap3_pm_init_cpuidle(rx51_cpuidle_params); 111 omap2_init_common_devices(sdrc_params, sdrc_params);
108 sdrc_params = rx51_get_sdram_timings();
109 omap2_init_common_hw(sdrc_params, sdrc_params);
110 omap_init_irq();
111 omap_gpio_init();
112} 112}
113 113
114extern void __init rx51_peripherals_init(void); 114extern void __init rx51_peripherals_init(void);
@@ -117,8 +117,6 @@ extern void __init rx51_peripherals_init(void);
117static struct omap_board_mux board_mux[] __initdata = { 117static struct omap_board_mux board_mux[] __initdata = {
118 { .reg_offset = OMAP_MUX_TERMINATOR }, 118 { .reg_offset = OMAP_MUX_TERMINATOR },
119}; 119};
120#else
121#define board_mux NULL
122#endif 120#endif
123 121
124static struct omap_musb_board_data musb_board_data = { 122static struct omap_musb_board_data musb_board_data = {
@@ -130,6 +128,9 @@ static struct omap_musb_board_data musb_board_data = {
130static void __init rx51_init(void) 128static void __init rx51_init(void)
131{ 129{
132 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 130 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
131 omap_board_config = rx51_config;
132 omap_board_config_size = ARRAY_SIZE(rx51_config);
133 omap3_pm_init_cpuidle(rx51_cpuidle_params);
133 omap_serial_init(); 134 omap_serial_init();
134 usb_musb_init(&musb_board_data); 135 usb_musb_init(&musb_board_data);
135 rx51_peripherals_init(); 136 rx51_peripherals_init();
@@ -144,18 +145,22 @@ static void __init rx51_init(void)
144static void __init rx51_map_io(void) 145static void __init rx51_map_io(void)
145{ 146{
146 omap2_set_globals_3xxx(); 147 omap2_set_globals_3xxx();
147 rx51_video_mem_init();
148 omap34xx_map_common_io(); 148 omap34xx_map_common_io();
149} 149}
150 150
151static void __init rx51_reserve(void)
152{
153 rx51_video_mem_init();
154 omap_reserve();
155}
156
151MACHINE_START(NOKIA_RX51, "Nokia RX-51 board") 157MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
152 /* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */ 158 /* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */
153 .phys_io = 0x48000000,
154 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc,
155 .boot_params = 0x80000100, 159 .boot_params = 0x80000100,
160 .reserve = rx51_reserve,
156 .map_io = rx51_map_io, 161 .map_io = rx51_map_io,
157 .reserve = omap_reserve, 162 .init_early = rx51_init_early,
158 .init_irq = rx51_init_irq, 163 .init_irq = omap_init_irq,
159 .init_machine = rx51_init, 164 .init_machine = rx51_init,
160 .timer = &omap_timer, 165 .timer = &omap_timer,
161MACHINE_END 166MACHINE_END
diff --git a/arch/arm/mach-omap2/board-ti8168evm.c b/arch/arm/mach-omap2/board-ti8168evm.c
new file mode 100644
index 000000000000..09fa7bfff8d6
--- /dev/null
+++ b/arch/arm/mach-omap2/board-ti8168evm.c
@@ -0,0 +1,62 @@
1/*
2 * Code for TI8168 EVM.
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc. - http://www.ti.com/
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation version 2.
9 *
10 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
11 * kind, whether express or implied; without even the implied warranty
12 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15#include <linux/kernel.h>
16#include <linux/init.h>
17
18#include <mach/hardware.h>
19#include <asm/mach-types.h>
20#include <asm/mach/arch.h>
21#include <asm/mach/map.h>
22
23#include <plat/irqs.h>
24#include <plat/board.h>
25#include <plat/common.h>
26
27static struct omap_board_config_kernel ti8168_evm_config[] __initdata = {
28};
29
30static void __init ti8168_init_early(void)
31{
32 omap2_init_common_infrastructure();
33 omap2_init_common_devices(NULL, NULL);
34}
35
36static void __init ti8168_evm_init_irq(void)
37{
38 omap_init_irq();
39}
40
41static void __init ti8168_evm_init(void)
42{
43 omap_serial_init();
44 omap_board_config = ti8168_evm_config;
45 omap_board_config_size = ARRAY_SIZE(ti8168_evm_config);
46}
47
48static void __init ti8168_evm_map_io(void)
49{
50 omap2_set_globals_ti816x();
51 omapti816x_map_common_io();
52}
53
54MACHINE_START(TI8168EVM, "ti8168evm")
55 /* Maintainer: Texas Instruments */
56 .boot_params = 0x80000100,
57 .map_io = ti8168_evm_map_io,
58 .init_early = ti8168_init_early,
59 .init_irq = ti8168_evm_init_irq,
60 .timer = &omap_timer,
61 .init_machine = ti8168_evm_init,
62MACHINE_END
diff --git a/arch/arm/mach-omap2/board-zoom-debugboard.c b/arch/arm/mach-omap2/board-zoom-debugboard.c
index 1d7f827b0408..6402e781c458 100644
--- a/arch/arm/mach-omap2/board-zoom-debugboard.c
+++ b/arch/arm/mach-omap2/board-zoom-debugboard.c
@@ -15,6 +15,9 @@
15#include <linux/interrupt.h> 15#include <linux/interrupt.h>
16 16
17#include <plat/gpmc.h> 17#include <plat/gpmc.h>
18#include <plat/gpmc-smsc911x.h>
19
20#include <mach/board-zoom.h>
18 21
19#define ZOOM_SMSC911X_CS 7 22#define ZOOM_SMSC911X_CS 7
20#define ZOOM_SMSC911X_GPIO 158 23#define ZOOM_SMSC911X_GPIO 158
@@ -24,60 +27,16 @@
24#define DEBUG_BASE 0x08000000 27#define DEBUG_BASE 0x08000000
25#define ZOOM_ETHR_START DEBUG_BASE 28#define ZOOM_ETHR_START DEBUG_BASE
26 29
27static struct resource zoom_smsc911x_resources[] = { 30static struct omap_smsc911x_platform_data zoom_smsc911x_cfg = {
28 [0] = { 31 .cs = ZOOM_SMSC911X_CS,
29 .start = ZOOM_ETHR_START, 32 .gpio_irq = ZOOM_SMSC911X_GPIO,
30 .end = ZOOM_ETHR_START + SZ_4K, 33 .gpio_reset = -EINVAL,
31 .flags = IORESOURCE_MEM,
32 },
33 [1] = {
34 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
35 },
36};
37
38static struct smsc911x_platform_config zoom_smsc911x_config = {
39 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
40 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
41 .flags = SMSC911X_USE_32BIT, 34 .flags = SMSC911X_USE_32BIT,
42 .phy_interface = PHY_INTERFACE_MODE_MII,
43};
44
45static struct platform_device zoom_smsc911x_device = {
46 .name = "smsc911x",
47 .id = -1,
48 .num_resources = ARRAY_SIZE(zoom_smsc911x_resources),
49 .resource = zoom_smsc911x_resources,
50 .dev = {
51 .platform_data = &zoom_smsc911x_config,
52 },
53}; 35};
54 36
55static inline void __init zoom_init_smsc911x(void) 37static inline void __init zoom_init_smsc911x(void)
56{ 38{
57 int eth_cs; 39 gpmc_smsc911x_init(&zoom_smsc911x_cfg);
58 unsigned long cs_mem_base;
59 int eth_gpio = 0;
60
61 eth_cs = ZOOM_SMSC911X_CS;
62
63 if (gpmc_cs_request(eth_cs, SZ_16M, &cs_mem_base) < 0) {
64 printk(KERN_ERR "Failed to request GPMC mem for smsc911x\n");
65 return;
66 }
67
68 zoom_smsc911x_resources[0].start = cs_mem_base + 0x0;
69 zoom_smsc911x_resources[0].end = cs_mem_base + 0xff;
70
71 eth_gpio = ZOOM_SMSC911X_GPIO;
72
73 zoom_smsc911x_resources[1].start = OMAP_GPIO_IRQ(eth_gpio);
74
75 if (gpio_request(eth_gpio, "smsc911x irq") < 0) {
76 printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n",
77 eth_gpio);
78 return;
79 }
80 gpio_direction_input(eth_gpio);
81} 40}
82 41
83static struct plat_serial8250_port serial_platform_data[] = { 42static struct plat_serial8250_port serial_platform_data[] = {
@@ -118,12 +77,9 @@ static inline void __init zoom_init_quaduart(void)
118 77
119 quart_gpio = ZOOM_QUADUART_GPIO; 78 quart_gpio = ZOOM_QUADUART_GPIO;
120 79
121 if (gpio_request(quart_gpio, "TL16CP754C GPIO") < 0) { 80 if (gpio_request_one(quart_gpio, GPIOF_IN, "TL16CP754C GPIO") < 0)
122 printk(KERN_ERR "Failed to request GPIO%d for TL16CP754C\n", 81 printk(KERN_ERR "Failed to request GPIO%d for TL16CP754C\n",
123 quart_gpio); 82 quart_gpio);
124 return;
125 }
126 gpio_direction_input(quart_gpio);
127} 83}
128 84
129static inline int omap_zoom_debugboard_detect(void) 85static inline int omap_zoom_debugboard_detect(void)
@@ -133,12 +89,12 @@ static inline int omap_zoom_debugboard_detect(void)
133 89
134 debug_board_detect = ZOOM_SMSC911X_GPIO; 90 debug_board_detect = ZOOM_SMSC911X_GPIO;
135 91
136 if (gpio_request(debug_board_detect, "Zoom debug board detect") < 0) { 92 if (gpio_request_one(debug_board_detect, GPIOF_IN,
93 "Zoom debug board detect") < 0) {
137 printk(KERN_ERR "Failed to request GPIO%d for Zoom debug" 94 printk(KERN_ERR "Failed to request GPIO%d for Zoom debug"
138 "board detect\n", debug_board_detect); 95 "board detect\n", debug_board_detect);
139 return 0; 96 return 0;
140 } 97 }
141 gpio_direction_input(debug_board_detect);
142 98
143 if (!gpio_get_value(debug_board_detect)) { 99 if (!gpio_get_value(debug_board_detect)) {
144 ret = 0; 100 ret = 0;
@@ -148,7 +104,6 @@ static inline int omap_zoom_debugboard_detect(void)
148} 104}
149 105
150static struct platform_device *zoom_devices[] __initdata = { 106static struct platform_device *zoom_devices[] __initdata = {
151 &zoom_smsc911x_device,
152 &zoom_debugboard_serial_device, 107 &zoom_debugboard_serial_device,
153}; 108};
154 109
diff --git a/arch/arm/mach-omap2/board-zoom-display.c b/arch/arm/mach-omap2/board-zoom-display.c
new file mode 100644
index 000000000000..d4683ba5f721
--- /dev/null
+++ b/arch/arm/mach-omap2/board-zoom-display.c
@@ -0,0 +1,140 @@
1/*
2 * Copyright (C) 2010 Texas Instruments Inc.
3 *
4 * Modified from mach-omap2/board-zoom-peripherals.c
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/kernel.h>
12#include <linux/init.h>
13#include <linux/platform_device.h>
14#include <linux/gpio.h>
15#include <linux/i2c/twl.h>
16#include <linux/spi/spi.h>
17#include <plat/mcspi.h>
18#include <video/omapdss.h>
19
20#define LCD_PANEL_RESET_GPIO_PROD 96
21#define LCD_PANEL_RESET_GPIO_PILOT 55
22#define LCD_PANEL_QVGA_GPIO 56
23
24static struct gpio zoom_lcd_gpios[] __initdata = {
25 { -EINVAL, GPIOF_OUT_INIT_HIGH, "lcd reset" },
26 { LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "lcd qvga" },
27};
28
29static void __init zoom_lcd_panel_init(void)
30{
31 zoom_lcd_gpios[0].gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
32 LCD_PANEL_RESET_GPIO_PROD :
33 LCD_PANEL_RESET_GPIO_PILOT;
34
35 if (gpio_request_array(zoom_lcd_gpios, ARRAY_SIZE(zoom_lcd_gpios)))
36 pr_err("%s: Failed to get LCD GPIOs.\n", __func__);
37}
38
39static int zoom_panel_enable_lcd(struct omap_dss_device *dssdev)
40{
41 return 0;
42}
43
44static void zoom_panel_disable_lcd(struct omap_dss_device *dssdev)
45{
46}
47
48/*
49 * PWMA/B register offsets (TWL4030_MODULE_PWMA)
50 */
51#define TWL_INTBR_PMBR1 0xD
52#define TWL_INTBR_GPBR1 0xC
53#define TWL_LED_PWMON 0x0
54#define TWL_LED_PWMOFF 0x1
55
56static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int level)
57{
58 unsigned char c;
59 u8 mux_pwm, enb_pwm;
60
61 if (level > 100)
62 return -1;
63
64 twl_i2c_read_u8(TWL4030_MODULE_INTBR, &mux_pwm, TWL_INTBR_PMBR1);
65 twl_i2c_read_u8(TWL4030_MODULE_INTBR, &enb_pwm, TWL_INTBR_GPBR1);
66
67 if (level == 0) {
68 /* disable pwm1 output and clock */
69 enb_pwm = enb_pwm & 0xF5;
70 /* change pwm1 pin to gpio pin */
71 mux_pwm = mux_pwm & 0xCF;
72 twl_i2c_write_u8(TWL4030_MODULE_INTBR,
73 enb_pwm, TWL_INTBR_GPBR1);
74 twl_i2c_write_u8(TWL4030_MODULE_INTBR,
75 mux_pwm, TWL_INTBR_PMBR1);
76 return 0;
77 }
78
79 if (!((enb_pwm & 0xA) && (mux_pwm & 0x30))) {
80 /* change gpio pin to pwm1 pin */
81 mux_pwm = mux_pwm | 0x30;
82 /* enable pwm1 output and clock*/
83 enb_pwm = enb_pwm | 0x0A;
84 twl_i2c_write_u8(TWL4030_MODULE_INTBR,
85 mux_pwm, TWL_INTBR_PMBR1);
86 twl_i2c_write_u8(TWL4030_MODULE_INTBR,
87 enb_pwm, TWL_INTBR_GPBR1);
88 }
89
90 c = ((50 * (100 - level)) / 100) + 1;
91 twl_i2c_write_u8(TWL4030_MODULE_PWM1, 0x7F, TWL_LED_PWMOFF);
92 twl_i2c_write_u8(TWL4030_MODULE_PWM1, c, TWL_LED_PWMON);
93
94 return 0;
95}
96
97static struct omap_dss_device zoom_lcd_device = {
98 .name = "lcd",
99 .driver_name = "NEC_8048_panel",
100 .type = OMAP_DISPLAY_TYPE_DPI,
101 .phy.dpi.data_lines = 24,
102 .platform_enable = zoom_panel_enable_lcd,
103 .platform_disable = zoom_panel_disable_lcd,
104 .max_backlight_level = 100,
105 .set_backlight = zoom_set_bl_intensity,
106};
107
108static struct omap_dss_device *zoom_dss_devices[] = {
109 &zoom_lcd_device,
110};
111
112static struct omap_dss_board_info zoom_dss_data = {
113 .num_devices = ARRAY_SIZE(zoom_dss_devices),
114 .devices = zoom_dss_devices,
115 .default_device = &zoom_lcd_device,
116};
117
118static struct omap2_mcspi_device_config dss_lcd_mcspi_config = {
119 .turbo_mode = 1,
120 .single_channel = 1, /* 0: slave, 1: master */
121};
122
123static struct spi_board_info nec_8048_spi_board_info[] __initdata = {
124 [0] = {
125 .modalias = "nec_8048_spi",
126 .bus_num = 1,
127 .chip_select = 2,
128 .max_speed_hz = 375000,
129 .controller_data = &dss_lcd_mcspi_config,
130 },
131};
132
133void __init zoom_display_init(void)
134{
135 omap_display_init(&zoom_dss_data);
136 spi_register_board_info(nec_8048_spi_board_info,
137 ARRAY_SIZE(nec_8048_spi_board_info));
138 zoom_lcd_panel_init();
139}
140
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c
index 6b3984964cc5..118c6f53c5eb 100644
--- a/arch/arm/mach-omap2/board-zoom-peripherals.c
+++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
@@ -16,6 +16,9 @@
16#include <linux/gpio.h> 16#include <linux/gpio.h>
17#include <linux/i2c/twl.h> 17#include <linux/i2c/twl.h>
18#include <linux/regulator/machine.h> 18#include <linux/regulator/machine.h>
19#include <linux/regulator/fixed.h>
20#include <linux/wl12xx.h>
21#include <linux/mmc/host.h>
19 22
20#include <asm/mach-types.h> 23#include <asm/mach-types.h>
21#include <asm/mach/arch.h> 24#include <asm/mach/arch.h>
@@ -24,11 +27,19 @@
24#include <plat/common.h> 27#include <plat/common.h>
25#include <plat/usb.h> 28#include <plat/usb.h>
26 29
30#include <mach/board-zoom.h>
31
27#include "mux.h" 32#include "mux.h"
28#include "hsmmc.h" 33#include "hsmmc.h"
34#include "common-board-devices.h"
35
36#define OMAP_ZOOM_WLAN_PMENA_GPIO (101)
37#define OMAP_ZOOM_WLAN_IRQ_GPIO (162)
38
39#define LCD_PANEL_ENABLE_GPIO (7 + OMAP_MAX_GPIO_LINES)
29 40
30/* Zoom2 has Qwerty keyboard*/ 41/* Zoom2 has Qwerty keyboard*/
31static int board_keymap[] = { 42static uint32_t board_keymap[] = {
32 KEY(0, 0, KEY_E), 43 KEY(0, 0, KEY_E),
33 KEY(0, 1, KEY_R), 44 KEY(0, 1, KEY_R),
34 KEY(0, 2, KEY_T), 45 KEY(0, 2, KEY_T),
@@ -106,6 +117,11 @@ static struct regulator_consumer_supply zoom_vmmc2_supply = {
106 .supply = "vmmc", 117 .supply = "vmmc",
107}; 118};
108 119
120static struct regulator_consumer_supply zoom_vmmc3_supply = {
121 .supply = "vmmc",
122 .dev_name = "omap_hsmmc.2",
123};
124
109/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */ 125/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
110static struct regulator_init_data zoom_vmmc1 = { 126static struct regulator_init_data zoom_vmmc1 = {
111 .constraints = { 127 .constraints = {
@@ -151,29 +167,105 @@ static struct regulator_init_data zoom_vsim = {
151 .consumer_supplies = &zoom_vsim_supply, 167 .consumer_supplies = &zoom_vsim_supply,
152}; 168};
153 169
154static struct omap2_hsmmc_info mmc[] __initdata = { 170static struct regulator_init_data zoom_vmmc3 = {
171 .constraints = {
172 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
173 },
174 .num_consumer_supplies = 1,
175 .consumer_supplies = &zoom_vmmc3_supply,
176};
177
178static struct fixed_voltage_config zoom_vwlan = {
179 .supply_name = "vwl1271",
180 .microvolts = 1800000, /* 1.8V */
181 .gpio = OMAP_ZOOM_WLAN_PMENA_GPIO,
182 .startup_delay = 70000, /* 70msec */
183 .enable_high = 1,
184 .enabled_at_boot = 0,
185 .init_data = &zoom_vmmc3,
186};
187
188static struct platform_device omap_vwlan_device = {
189 .name = "reg-fixed-voltage",
190 .id = 1,
191 .dev = {
192 .platform_data = &zoom_vwlan,
193 },
194};
195
196static struct wl12xx_platform_data omap_zoom_wlan_data __initdata = {
197 .irq = OMAP_GPIO_IRQ(OMAP_ZOOM_WLAN_IRQ_GPIO),
198 /* ZOOM ref clock is 26 MHz */
199 .board_ref_clock = 1,
200};
201
202static struct omap2_hsmmc_info mmc[] = {
155 { 203 {
156 .name = "external", 204 .name = "external",
157 .mmc = 1, 205 .mmc = 1,
158 .wires = 4, 206 .caps = MMC_CAP_4_BIT_DATA,
159 .gpio_wp = -EINVAL, 207 .gpio_wp = -EINVAL,
160 .power_saving = true, 208 .power_saving = true,
161 }, 209 },
162 { 210 {
163 .name = "internal", 211 .name = "internal",
164 .mmc = 2, 212 .mmc = 2,
165 .wires = 8, 213 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
166 .gpio_cd = -EINVAL, 214 .gpio_cd = -EINVAL,
167 .gpio_wp = -EINVAL, 215 .gpio_wp = -EINVAL,
168 .nonremovable = true, 216 .nonremovable = true,
169 .power_saving = true, 217 .power_saving = true,
170 }, 218 },
219 {
220 .name = "wl1271",
221 .mmc = 3,
222 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
223 .gpio_wp = -EINVAL,
224 .gpio_cd = -EINVAL,
225 .nonremovable = true,
226 },
171 {} /* Terminator */ 227 {} /* Terminator */
172}; 228};
173 229
230static struct regulator_consumer_supply zoom_vpll2_supplies[] = {
231 REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
232 REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
233};
234
235static struct regulator_consumer_supply zoom_vdda_dac_supply =
236 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
237
238static struct regulator_init_data zoom_vpll2 = {
239 .constraints = {
240 .min_uV = 1800000,
241 .max_uV = 1800000,
242 .valid_modes_mask = REGULATOR_MODE_NORMAL
243 | REGULATOR_MODE_STANDBY,
244 .valid_ops_mask = REGULATOR_CHANGE_MODE
245 | REGULATOR_CHANGE_STATUS,
246 },
247 .num_consumer_supplies = ARRAY_SIZE(zoom_vpll2_supplies),
248 .consumer_supplies = zoom_vpll2_supplies,
249};
250
251static struct regulator_init_data zoom_vdac = {
252 .constraints = {
253 .min_uV = 1800000,
254 .max_uV = 1800000,
255 .valid_modes_mask = REGULATOR_MODE_NORMAL
256 | REGULATOR_MODE_STANDBY,
257 .valid_ops_mask = REGULATOR_CHANGE_MODE
258 | REGULATOR_CHANGE_STATUS,
259 },
260 .num_consumer_supplies = 1,
261 .consumer_supplies = &zoom_vdda_dac_supply,
262};
263
174static int zoom_twl_gpio_setup(struct device *dev, 264static int zoom_twl_gpio_setup(struct device *dev,
175 unsigned gpio, unsigned ngpio) 265 unsigned gpio, unsigned ngpio)
176{ 266{
267 int ret;
268
177 /* gpio + 0 is "mmc0_cd" (input/IRQ) */ 269 /* gpio + 0 is "mmc0_cd" (input/IRQ) */
178 mmc[0].gpio_cd = gpio + 0; 270 mmc[0].gpio_cd = gpio + 0;
179 omap2_hsmmc_init(mmc); 271 omap2_hsmmc_init(mmc);
@@ -185,9 +277,20 @@ static int zoom_twl_gpio_setup(struct device *dev,
185 zoom_vsim_supply.dev = mmc[0].dev; 277 zoom_vsim_supply.dev = mmc[0].dev;
186 zoom_vmmc2_supply.dev = mmc[1].dev; 278 zoom_vmmc2_supply.dev = mmc[1].dev;
187 279
188 return 0; 280 ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
281 "lcd enable");
282 if (ret)
283 pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
284 LCD_PANEL_ENABLE_GPIO);
285
286 return ret;
189} 287}
190 288
289/* EXTMUTE callback function */
290static void zoom2_set_hs_extmute(int mute)
291{
292 gpio_set_value(ZOOM2_HEADSET_EXTMUTE_GPIO, mute);
293}
191 294
192static int zoom_batt_table[] = { 295static int zoom_batt_table[] = {
193/* 0 C*/ 296/* 0 C*/
@@ -220,9 +323,7 @@ static struct twl4030_madc_platform_data zoom_madc_data = {
220 .irq_line = 1, 323 .irq_line = 1,
221}; 324};
222 325
223static struct twl4030_codec_audio_data zoom_audio_data = { 326static struct twl4030_codec_audio_data zoom_audio_data;
224 .audio_mclk = 26000000,
225};
226 327
227static struct twl4030_codec_data zoom_codec_data = { 328static struct twl4030_codec_data zoom_codec_data = {
228 .audio_mclk = 26000000, 329 .audio_mclk = 26000000,
@@ -243,33 +344,23 @@ static struct twl4030_platform_data zoom_twldata = {
243 .vmmc1 = &zoom_vmmc1, 344 .vmmc1 = &zoom_vmmc1,
244 .vmmc2 = &zoom_vmmc2, 345 .vmmc2 = &zoom_vmmc2,
245 .vsim = &zoom_vsim, 346 .vsim = &zoom_vsim,
246 347 .vpll2 = &zoom_vpll2,
247}; 348 .vdac = &zoom_vdac,
248
249static struct i2c_board_info __initdata zoom_i2c_boardinfo[] = {
250 {
251 I2C_BOARD_INFO("twl5030", 0x48),
252 .flags = I2C_CLIENT_WAKE,
253 .irq = INT_34XX_SYS_NIRQ,
254 .platform_data = &zoom_twldata,
255 },
256}; 349};
257 350
258static int __init omap_i2c_init(void) 351static int __init omap_i2c_init(void)
259{ 352{
260 omap_register_i2c_bus(1, 2400, zoom_i2c_boardinfo, 353 if (machine_is_omap_zoom2()) {
261 ARRAY_SIZE(zoom_i2c_boardinfo)); 354 zoom_audio_data.ramp_delay_value = 3; /* 161 ms */
355 zoom_audio_data.hs_extmute = 1;
356 zoom_audio_data.set_hs_extmute = zoom2_set_hs_extmute;
357 }
358 omap_pmic_init(1, 2400, "twl5030", INT_34XX_SYS_NIRQ, &zoom_twldata);
262 omap_register_i2c_bus(2, 400, NULL, 0); 359 omap_register_i2c_bus(2, 400, NULL, 0);
263 omap_register_i2c_bus(3, 400, NULL, 0); 360 omap_register_i2c_bus(3, 400, NULL, 0);
264 return 0; 361 return 0;
265} 362}
266 363
267static struct omap_musb_board_data musb_board_data = {
268 .interface_type = MUSB_INTERFACE_ULPI,
269 .mode = MUSB_OTG,
270 .power = 100,
271};
272
273static void enable_board_wakeup_source(void) 364static void enable_board_wakeup_source(void)
274{ 365{
275 /* T2 interrupt line (keypad) */ 366 /* T2 interrupt line (keypad) */
@@ -279,7 +370,12 @@ static void enable_board_wakeup_source(void)
279 370
280void __init zoom_peripherals_init(void) 371void __init zoom_peripherals_init(void)
281{ 372{
373 if (wl12xx_set_platform_data(&omap_zoom_wlan_data))
374 pr_err("error setting wl12xx data\n");
375
282 omap_i2c_init(); 376 omap_i2c_init();
283 usb_musb_init(&musb_board_data); 377 platform_device_register(&omap_vwlan_device);
378 usb_musb_init(NULL);
284 enable_board_wakeup_source(); 379 enable_board_wakeup_source();
380 omap_serial_init();
285} 381}
diff --git a/arch/arm/mach-omap2/board-zoom3.c b/arch/arm/mach-omap2/board-zoom.c
index 6ca0b8341615..4b133d75c935 100644
--- a/arch/arm/mach-omap2/board-zoom3.c
+++ b/arch/arm/mach-omap2/board-zoom.c
@@ -1,6 +1,9 @@
1/* 1/*
2 * Copyright (C) 2009 Texas Instruments Inc. 2 * Copyright (C) 2009-2010 Texas Instruments Inc.
3 * Mikkel Christensen <mlc@ti.com>
4 * Felipe Balbi <balbi@ti.com>
3 * 5 *
6 * Modified from mach-omap2/board-ldp.c
4 * 7 *
5 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as 9 * it under the terms of the GNU General Public License version 2 as
@@ -12,21 +15,54 @@
12#include <linux/platform_device.h> 15#include <linux/platform_device.h>
13#include <linux/input.h> 16#include <linux/input.h>
14#include <linux/gpio.h> 17#include <linux/gpio.h>
18#include <linux/i2c/twl.h>
19#include <linux/mtd/nand.h>
15 20
16#include <asm/mach-types.h> 21#include <asm/mach-types.h>
17#include <asm/mach/arch.h> 22#include <asm/mach/arch.h>
18 23
19#include <mach/board-zoom.h>
20
21#include <plat/common.h> 24#include <plat/common.h>
22#include <plat/board.h> 25#include <plat/board.h>
23#include <plat/usb.h> 26#include <plat/usb.h>
24 27
28#include <mach/board-zoom.h>
29
30#include "board-flash.h"
25#include "mux.h" 31#include "mux.h"
32#include "sdram-micron-mt46h32m32lf-6.h"
26#include "sdram-hynix-h8mbx00u0mer-0em.h" 33#include "sdram-hynix-h8mbx00u0mer-0em.h"
27 34
28static struct omap_board_config_kernel zoom_config[] __initdata = { 35#define ZOOM3_EHCI_RESET_GPIO 64
36
37static void __init omap_zoom_init_early(void)
38{
39 omap2_init_common_infrastructure();
40 if (machine_is_omap_zoom2())
41 omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
42 mt46h32m32lf6_sdrc_params);
43 else if (machine_is_omap_zoom3())
44 omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
45 h8mbx00u0mer0em_sdrc_params);
46}
47
48#ifdef CONFIG_OMAP_MUX
49static struct omap_board_mux board_mux[] __initdata = {
50 /* WLAN IRQ - GPIO 162 */
51 OMAP3_MUX(MCBSP1_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
52 /* WLAN POWER ENABLE - GPIO 101 */
53 OMAP3_MUX(CAM_D2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
54 /* WLAN SDIO: MMC3 CMD */
55 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE3 | OMAP_PIN_INPUT_PULLUP),
56 /* WLAN SDIO: MMC3 CLK */
57 OMAP3_MUX(ETK_CLK, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
58 /* WLAN SDIO: MMC3 DAT[0-3] */
59 OMAP3_MUX(ETK_D3, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
60 OMAP3_MUX(ETK_D4, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
61 OMAP3_MUX(ETK_D5, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
62 OMAP3_MUX(ETK_D6, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
63 { .reg_offset = OMAP_MUX_TERMINATOR },
29}; 64};
65#endif
30 66
31static struct mtd_partition zoom_nand_partitions[] = { 67static struct mtd_partition zoom_nand_partitions[] = {
32 /* All the partition sizes are listed in terms of NAND block size */ 68 /* All the partition sizes are listed in terms of NAND block size */
@@ -69,66 +105,49 @@ static struct mtd_partition zoom_nand_partitions[] = {
69 }, 105 },
70}; 106};
71 107
72static void __init omap_zoom_init_irq(void) 108static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
73{ 109 .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
74 omap_board_config = zoom_config; 110 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
75 omap_board_config_size = ARRAY_SIZE(zoom_config); 111 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
76 omap2_init_common_hw(h8mbx00u0mer0em_sdrc_params,
77 h8mbx00u0mer0em_sdrc_params);
78 omap_init_irq();
79 omap_gpio_init();
80}
81
82#ifdef CONFIG_OMAP_MUX
83static struct omap_board_mux board_mux[] __initdata = {
84 /* WLAN IRQ - GPIO 162 */
85 OMAP3_MUX(MCBSP1_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
86 /* WLAN POWER ENABLE - GPIO 101 */
87 OMAP3_MUX(CAM_D2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
88 /* WLAN SDIO: MMC3 CMD */
89 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE3 | OMAP_PIN_INPUT_PULLUP),
90 /* WLAN SDIO: MMC3 CLK */
91 OMAP3_MUX(ETK_CLK, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
92 /* WLAN SDIO: MMC3 DAT[0-3] */
93 OMAP3_MUX(ETK_D3, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
94 OMAP3_MUX(ETK_D4, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
95 OMAP3_MUX(ETK_D5, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
96 OMAP3_MUX(ETK_D6, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
97 { .reg_offset = OMAP_MUX_TERMINATOR },
98};
99#else
100#define board_mux NULL
101#endif
102
103static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
104 .port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
105 .port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
106 .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
107 .phy_reset = true, 112 .phy_reset = true,
108 .reset_gpio_port[0] = -EINVAL, 113 .reset_gpio_port[0] = -EINVAL,
109 .reset_gpio_port[1] = 64, 114 .reset_gpio_port[1] = ZOOM3_EHCI_RESET_GPIO,
110 .reset_gpio_port[2] = -EINVAL, 115 .reset_gpio_port[2] = -EINVAL,
111}; 116};
112 117
113static void __init omap_zoom_init(void) 118static void __init omap_zoom_init(void)
114{ 119{
115 omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); 120 if (machine_is_omap_zoom2()) {
116 zoom_peripherals_init(); 121 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
117 board_nand_init(zoom_nand_partitions, 122 } else if (machine_is_omap_zoom3()) {
118 ARRAY_SIZE(zoom_nand_partitions), ZOOM_NAND_CS); 123 omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
119 zoom_debugboard_init(); 124 omap_mux_init_gpio(ZOOM3_EHCI_RESET_GPIO, OMAP_PIN_OUTPUT);
125 usbhs_init(&usbhs_bdata);
126 }
120 127
121 omap_mux_init_gpio(64, OMAP_PIN_OUTPUT); 128 board_nand_init(zoom_nand_partitions, ARRAY_SIZE(zoom_nand_partitions),
122 usb_ehci_init(&ehci_pdata); 129 ZOOM_NAND_CS, NAND_BUSWIDTH_16);
130 zoom_debugboard_init();
131 zoom_peripherals_init();
132 zoom_display_init();
123} 133}
124 134
125MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board") 135MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
126 .phys_io = ZOOM_UART_BASE,
127 .io_pg_offst = (ZOOM_UART_VIRT >> 18) & 0xfffc,
128 .boot_params = 0x80000100, 136 .boot_params = 0x80000100,
137 .reserve = omap_reserve,
129 .map_io = omap3_map_io, 138 .map_io = omap3_map_io,
139 .init_early = omap_zoom_init_early,
140 .init_irq = omap_init_irq,
141 .init_machine = omap_zoom_init,
142 .timer = &omap_timer,
143MACHINE_END
144
145MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
146 .boot_params = 0x80000100,
130 .reserve = omap_reserve, 147 .reserve = omap_reserve,
131 .init_irq = omap_zoom_init_irq, 148 .map_io = omap3_map_io,
149 .init_early = omap_zoom_init_early,
150 .init_irq = omap_init_irq,
132 .init_machine = omap_zoom_init, 151 .init_machine = omap_zoom_init,
133 .timer = &omap_timer, 152 .timer = &omap_timer,
134MACHINE_END 153MACHINE_END
diff --git a/arch/arm/mach-omap2/board-zoom2.c b/arch/arm/mach-omap2/board-zoom2.c
deleted file mode 100644
index 3ad9ecf7f5e2..000000000000
--- a/arch/arm/mach-omap2/board-zoom2.c
+++ /dev/null
@@ -1,152 +0,0 @@
1/*
2 * Copyright (C) 2009 Texas Instruments Inc.
3 * Mikkel Christensen <mlc@ti.com>
4 *
5 * Modified from mach-omap2/board-ldp.c
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/init.h>
14#include <linux/platform_device.h>
15#include <linux/input.h>
16#include <linux/gpio.h>
17
18#include <asm/mach-types.h>
19#include <asm/mach/arch.h>
20
21#include <plat/common.h>
22#include <plat/board.h>
23
24#include <mach/board-zoom.h>
25
26#include "mux.h"
27#include "sdram-micron-mt46h32m32lf-6.h"
28
29static void __init omap_zoom2_init_irq(void)
30{
31 omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
32 mt46h32m32lf6_sdrc_params);
33 omap_init_irq();
34 omap_gpio_init();
35}
36
37/* REVISIT: These audio entries can be removed once MFD code is merged */
38#if 0
39
40static struct twl4030_madc_platform_data zoom2_madc_data = {
41 .irq_line = 1,
42};
43
44static struct twl4030_codec_audio_data zoom2_audio_data = {
45 .audio_mclk = 26000000,
46};
47
48static struct twl4030_codec_data zoom2_codec_data = {
49 .audio_mclk = 26000000,
50 .audio = &zoom2_audio_data,
51};
52
53static struct twl4030_platform_data zoom2_twldata = {
54 .irq_base = TWL4030_IRQ_BASE,
55 .irq_end = TWL4030_IRQ_END,
56
57 /* platform_data for children goes here */
58 .bci = &zoom2_bci_data,
59 .madc = &zoom2_madc_data,
60 .usb = &zoom2_usb_data,
61 .gpio = &zoom2_gpio_data,
62 .keypad = &zoom2_kp_twl4030_data,
63 .codec = &zoom2_codec_data,
64 .vmmc1 = &zoom2_vmmc1,
65 .vmmc2 = &zoom2_vmmc2,
66 .vsim = &zoom2_vsim,
67
68};
69
70#endif
71
72#ifdef CONFIG_OMAP_MUX
73static struct omap_board_mux board_mux[] __initdata = {
74 /* WLAN IRQ - GPIO 162 */
75 OMAP3_MUX(MCBSP1_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
76 /* WLAN POWER ENABLE - GPIO 101 */
77 OMAP3_MUX(CAM_D2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
78 /* WLAN SDIO: MMC3 CMD */
79 OMAP3_MUX(MCSPI1_CS1, OMAP_MUX_MODE3 | OMAP_PIN_INPUT_PULLUP),
80 /* WLAN SDIO: MMC3 CLK */
81 OMAP3_MUX(ETK_CLK, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
82 /* WLAN SDIO: MMC3 DAT[0-3] */
83 OMAP3_MUX(ETK_D3, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
84 OMAP3_MUX(ETK_D4, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
85 OMAP3_MUX(ETK_D5, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
86 OMAP3_MUX(ETK_D6, OMAP_MUX_MODE2 | OMAP_PIN_INPUT_PULLUP),
87 { .reg_offset = OMAP_MUX_TERMINATOR },
88};
89#else
90#define board_mux NULL
91#endif
92
93static struct mtd_partition zoom_nand_partitions[] = {
94 /* All the partition sizes are listed in terms of NAND block size */
95 {
96 .name = "X-Loader-NAND",
97 .offset = 0,
98 .size = 4 * (64 * 2048), /* 512KB, 0x80000 */
99 .mask_flags = MTD_WRITEABLE, /* force read-only */
100 },
101 {
102 .name = "U-Boot-NAND",
103 .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */
104 .size = 10 * (64 * 2048), /* 1.25MB, 0x140000 */
105 .mask_flags = MTD_WRITEABLE, /* force read-only */
106 },
107 {
108 .name = "Boot Env-NAND",
109 .offset = MTDPART_OFS_APPEND, /* Offset = 0x1c0000 */
110 .size = 2 * (64 * 2048), /* 256KB, 0x40000 */
111 },
112 {
113 .name = "Kernel-NAND",
114 .offset = MTDPART_OFS_APPEND, /* Offset = 0x0200000*/
115 .size = 240 * (64 * 2048), /* 30M, 0x1E00000 */
116 },
117 {
118 .name = "system",
119 .offset = MTDPART_OFS_APPEND, /* Offset = 0x2000000 */
120 .size = 3328 * (64 * 2048), /* 416M, 0x1A000000 */
121 },
122 {
123 .name = "userdata",
124 .offset = MTDPART_OFS_APPEND, /* Offset = 0x1C000000*/
125 .size = 256 * (64 * 2048), /* 32M, 0x2000000 */
126 },
127 {
128 .name = "cache",
129 .offset = MTDPART_OFS_APPEND, /* Offset = 0x1E000000*/
130 .size = 256 * (64 * 2048), /* 32M, 0x2000000 */
131 },
132};
133
134static void __init omap_zoom2_init(void)
135{
136 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
137 zoom_peripherals_init();
138 board_nand_init(zoom_nand_partitions,
139 ARRAY_SIZE(zoom_nand_partitions), ZOOM_NAND_CS);
140 zoom_debugboard_init();
141}
142
143MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
144 .phys_io = ZOOM_UART_BASE,
145 .io_pg_offst = (ZOOM_UART_VIRT >> 18) & 0xfffc,
146 .boot_params = 0x80000100,
147 .map_io = omap3_map_io,
148 .reserve = omap_reserve,
149 .init_irq = omap_zoom2_init_irq,
150 .init_machine = omap_zoom2_init,
151 .timer = &omap_timer,
152MACHINE_END
diff --git a/arch/arm/mach-omap2/clkt2xxx_apll.c b/arch/arm/mach-omap2/clkt2xxx_apll.c
index 66e01acfd585..b19a1f7234ae 100644
--- a/arch/arm/mach-omap2/clkt2xxx_apll.c
+++ b/arch/arm/mach-omap2/clkt2xxx_apll.c
@@ -26,7 +26,7 @@
26 26
27#include "clock.h" 27#include "clock.h"
28#include "clock2xxx.h" 28#include "clock2xxx.h"
29#include "cm.h" 29#include "cm2xxx_3xxx.h"
30#include "cm-regbits-24xx.h" 30#include "cm-regbits-24xx.h"
31 31
32/* CM_CLKEN_PLL.EN_{54,96}M_PLL options (24XX) */ 32/* CM_CLKEN_PLL.EN_{54,96}M_PLL options (24XX) */
@@ -49,14 +49,14 @@ static int omap2_clk_apll_enable(struct clk *clk, u32 status_mask)
49 49
50 apll_mask = EN_APLL_LOCKED << clk->enable_bit; 50 apll_mask = EN_APLL_LOCKED << clk->enable_bit;
51 51
52 cval = cm_read_mod_reg(PLL_MOD, CM_CLKEN); 52 cval = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN);
53 53
54 if ((cval & apll_mask) == apll_mask) 54 if ((cval & apll_mask) == apll_mask)
55 return 0; /* apll already enabled */ 55 return 0; /* apll already enabled */
56 56
57 cval &= ~apll_mask; 57 cval &= ~apll_mask;
58 cval |= apll_mask; 58 cval |= apll_mask;
59 cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN); 59 omap2_cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN);
60 60
61 omap2_cm_wait_idlest(cm_idlest_pll, status_mask, 61 omap2_cm_wait_idlest(cm_idlest_pll, status_mask,
62 OMAP24XX_CM_IDLEST_VAL, clk->name); 62 OMAP24XX_CM_IDLEST_VAL, clk->name);
@@ -78,14 +78,34 @@ static int omap2_clk_apll54_enable(struct clk *clk)
78 return omap2_clk_apll_enable(clk, OMAP24XX_ST_54M_APLL_MASK); 78 return omap2_clk_apll_enable(clk, OMAP24XX_ST_54M_APLL_MASK);
79} 79}
80 80
81static void _apll96_allow_idle(struct clk *clk)
82{
83 omap2xxx_cm_set_apll96_auto_low_power_stop();
84}
85
86static void _apll96_deny_idle(struct clk *clk)
87{
88 omap2xxx_cm_set_apll96_disable_autoidle();
89}
90
91static void _apll54_allow_idle(struct clk *clk)
92{
93 omap2xxx_cm_set_apll54_auto_low_power_stop();
94}
95
96static void _apll54_deny_idle(struct clk *clk)
97{
98 omap2xxx_cm_set_apll54_disable_autoidle();
99}
100
81/* Stop APLL */ 101/* Stop APLL */
82static void omap2_clk_apll_disable(struct clk *clk) 102static void omap2_clk_apll_disable(struct clk *clk)
83{ 103{
84 u32 cval; 104 u32 cval;
85 105
86 cval = cm_read_mod_reg(PLL_MOD, CM_CLKEN); 106 cval = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN);
87 cval &= ~(EN_APLL_LOCKED << clk->enable_bit); 107 cval &= ~(EN_APLL_LOCKED << clk->enable_bit);
88 cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN); 108 omap2_cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN);
89} 109}
90 110
91/* Public data */ 111/* Public data */
@@ -93,11 +113,15 @@ static void omap2_clk_apll_disable(struct clk *clk)
93const struct clkops clkops_apll96 = { 113const struct clkops clkops_apll96 = {
94 .enable = omap2_clk_apll96_enable, 114 .enable = omap2_clk_apll96_enable,
95 .disable = omap2_clk_apll_disable, 115 .disable = omap2_clk_apll_disable,
116 .allow_idle = _apll96_allow_idle,
117 .deny_idle = _apll96_deny_idle,
96}; 118};
97 119
98const struct clkops clkops_apll54 = { 120const struct clkops clkops_apll54 = {
99 .enable = omap2_clk_apll54_enable, 121 .enable = omap2_clk_apll54_enable,
100 .disable = omap2_clk_apll_disable, 122 .disable = omap2_clk_apll_disable,
123 .allow_idle = _apll54_allow_idle,
124 .deny_idle = _apll54_deny_idle,
101}; 125};
102 126
103/* Public functions */ 127/* Public functions */
@@ -106,7 +130,7 @@ u32 omap2xxx_get_apll_clkin(void)
106{ 130{
107 u32 aplls, srate = 0; 131 u32 aplls, srate = 0;
108 132
109 aplls = cm_read_mod_reg(PLL_MOD, CM_CLKSEL1); 133 aplls = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL1);
110 aplls &= OMAP24XX_APLLS_CLKIN_MASK; 134 aplls &= OMAP24XX_APLLS_CLKIN_MASK;
111 aplls >>= OMAP24XX_APLLS_CLKIN_SHIFT; 135 aplls >>= OMAP24XX_APLLS_CLKIN_SHIFT;
112 136
diff --git a/arch/arm/mach-omap2/clkt2xxx_dpll.c b/arch/arm/mach-omap2/clkt2xxx_dpll.c
new file mode 100644
index 000000000000..1502a7bc20bb
--- /dev/null
+++ b/arch/arm/mach-omap2/clkt2xxx_dpll.c
@@ -0,0 +1,63 @@
1/*
2 * OMAP2-specific DPLL control functions
3 *
4 * Copyright (C) 2011 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/errno.h>
14#include <linux/clk.h>
15#include <linux/io.h>
16
17#include <plat/clock.h>
18
19#include "clock.h"
20#include "cm2xxx_3xxx.h"
21#include "cm-regbits-24xx.h"
22
23/* Private functions */
24
25/**
26 * _allow_idle - enable DPLL autoidle bits
27 * @clk: struct clk * of the DPLL to operate on
28 *
29 * Enable DPLL automatic idle control. The DPLL will enter low-power
30 * stop when its downstream clocks are gated. No return value.
31 * REVISIT: DPLL can optionally enter low-power bypass by writing 0x1
32 * instead. Add some mechanism to optionally enter this mode.
33 */
34static void _allow_idle(struct clk *clk)
35{
36 if (!clk || !clk->dpll_data)
37 return;
38
39 omap2xxx_cm_set_dpll_auto_low_power_stop();
40}
41
42/**
43 * _deny_idle - prevent DPLL from automatically idling
44 * @clk: struct clk * of the DPLL to operate on
45 *
46 * Disable DPLL automatic idle control. No return value.
47 */
48static void _deny_idle(struct clk *clk)
49{
50 if (!clk || !clk->dpll_data)
51 return;
52
53 omap2xxx_cm_set_dpll_disable_autoidle();
54}
55
56
57/* Public data */
58
59const struct clkops clkops_omap2xxx_dpll_ops = {
60 .allow_idle = _allow_idle,
61 .deny_idle = _deny_idle,
62};
63
diff --git a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c b/arch/arm/mach-omap2/clkt2xxx_dpllcore.c
index 019048434f13..4ae439222085 100644
--- a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c
+++ b/arch/arm/mach-omap2/clkt2xxx_dpllcore.c
@@ -32,7 +32,7 @@
32#include "clock.h" 32#include "clock.h"
33#include "clock2xxx.h" 33#include "clock2xxx.h"
34#include "opp2xxx.h" 34#include "opp2xxx.h"
35#include "cm.h" 35#include "cm2xxx_3xxx.h"
36#include "cm-regbits-24xx.h" 36#include "cm-regbits-24xx.h"
37 37
38/* #define DOWN_VARIABLE_DPLL 1 */ /* Experimental */ 38/* #define DOWN_VARIABLE_DPLL 1 */ /* Experimental */
@@ -54,7 +54,7 @@ unsigned long omap2xxx_clk_get_core_rate(struct clk *clk)
54 54
55 core_clk = omap2_get_dpll_rate(clk); 55 core_clk = omap2_get_dpll_rate(clk);
56 56
57 v = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2); 57 v = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
58 v &= OMAP24XX_CORE_CLK_SRC_MASK; 58 v &= OMAP24XX_CORE_CLK_SRC_MASK;
59 59
60 if (v == CORE_CLK_SRC_32K) 60 if (v == CORE_CLK_SRC_32K)
@@ -73,7 +73,7 @@ static long omap2_dpllcore_round_rate(unsigned long target_rate)
73{ 73{
74 u32 high, low, core_clk_src; 74 u32 high, low, core_clk_src;
75 75
76 core_clk_src = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2); 76 core_clk_src = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
77 core_clk_src &= OMAP24XX_CORE_CLK_SRC_MASK; 77 core_clk_src &= OMAP24XX_CORE_CLK_SRC_MASK;
78 78
79 if (core_clk_src == CORE_CLK_SRC_DPLL) { /* DPLL clockout */ 79 if (core_clk_src == CORE_CLK_SRC_DPLL) { /* DPLL clockout */
@@ -111,7 +111,7 @@ int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)
111 const struct dpll_data *dd; 111 const struct dpll_data *dd;
112 112
113 cur_rate = omap2xxx_clk_get_core_rate(dclk); 113 cur_rate = omap2xxx_clk_get_core_rate(dclk);
114 mult = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2); 114 mult = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
115 mult &= OMAP24XX_CORE_CLK_SRC_MASK; 115 mult &= OMAP24XX_CORE_CLK_SRC_MASK;
116 116
117 if ((rate == (cur_rate / 2)) && (mult == 2)) { 117 if ((rate == (cur_rate / 2)) && (mult == 2)) {
@@ -136,7 +136,7 @@ int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)
136 tmpset.cm_clksel1_pll &= ~(dd->mult_mask | 136 tmpset.cm_clksel1_pll &= ~(dd->mult_mask |
137 dd->div1_mask); 137 dd->div1_mask);
138 div = ((curr_prcm_set->xtal_speed / 1000000) - 1); 138 div = ((curr_prcm_set->xtal_speed / 1000000) - 1);
139 tmpset.cm_clksel2_pll = cm_read_mod_reg(PLL_MOD, CM_CLKSEL2); 139 tmpset.cm_clksel2_pll = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);
140 tmpset.cm_clksel2_pll &= ~OMAP24XX_CORE_CLK_SRC_MASK; 140 tmpset.cm_clksel2_pll &= ~OMAP24XX_CORE_CLK_SRC_MASK;
141 if (rate > low) { 141 if (rate > low) {
142 tmpset.cm_clksel2_pll |= CORE_CLK_SRC_DPLL_X2; 142 tmpset.cm_clksel2_pll |= CORE_CLK_SRC_DPLL_X2;
diff --git a/arch/arm/mach-omap2/clkt2xxx_osc.c b/arch/arm/mach-omap2/clkt2xxx_osc.c
index 2167be84a5bc..c3460928b5e0 100644
--- a/arch/arm/mach-omap2/clkt2xxx_osc.c
+++ b/arch/arm/mach-omap2/clkt2xxx_osc.c
@@ -27,9 +27,16 @@
27 27
28#include "clock.h" 28#include "clock.h"
29#include "clock2xxx.h" 29#include "clock2xxx.h"
30#include "prm.h" 30#include "prm2xxx_3xxx.h"
31#include "prm-regbits-24xx.h" 31#include "prm-regbits-24xx.h"
32 32
33/*
34 * XXX This does not actually enable the osc_ck, since the osc_ck must
35 * be running for this function to be called. Instead, this function
36 * is used to disable an autoidle mode on the osc_ck. The existing
37 * clk_enable/clk_disable()-based usecounting for osc_ck should be
38 * replaced with autoidle-based usecounting.
39 */
33static int omap2_enable_osc_ck(struct clk *clk) 40static int omap2_enable_osc_ck(struct clk *clk)
34{ 41{
35 u32 pcc; 42 u32 pcc;
@@ -41,6 +48,13 @@ static int omap2_enable_osc_ck(struct clk *clk)
41 return 0; 48 return 0;
42} 49}
43 50
51/*
52 * XXX This does not actually disable the osc_ck, since doing so would
53 * immediately halt the system. Instead, this function is used to
54 * enable an autoidle mode on the osc_ck. The existing
55 * clk_enable/clk_disable()-based usecounting for osc_ck should be
56 * replaced with autoidle-based usecounting.
57 */
44static void omap2_disable_osc_ck(struct clk *clk) 58static void omap2_disable_osc_ck(struct clk *clk)
45{ 59{
46 u32 pcc; 60 u32 pcc;
diff --git a/arch/arm/mach-omap2/clkt2xxx_sys.c b/arch/arm/mach-omap2/clkt2xxx_sys.c
index 822b5a79f457..8693cfdac49a 100644
--- a/arch/arm/mach-omap2/clkt2xxx_sys.c
+++ b/arch/arm/mach-omap2/clkt2xxx_sys.c
@@ -26,7 +26,7 @@
26 26
27#include "clock.h" 27#include "clock.h"
28#include "clock2xxx.h" 28#include "clock2xxx.h"
29#include "prm.h" 29#include "prm2xxx_3xxx.h"
30#include "prm-regbits-24xx.h" 30#include "prm-regbits-24xx.h"
31 31
32void __iomem *prcm_clksrc_ctrl; 32void __iomem *prcm_clksrc_ctrl;
diff --git a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c
index aef62918aaf0..39f9d5a58d0c 100644
--- a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c
+++ b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c
@@ -40,7 +40,7 @@
40#include "clock.h" 40#include "clock.h"
41#include "clock2xxx.h" 41#include "clock2xxx.h"
42#include "opp2xxx.h" 42#include "opp2xxx.h"
43#include "cm.h" 43#include "cm2xxx_3xxx.h"
44#include "cm-regbits-24xx.h" 44#include "cm-regbits-24xx.h"
45 45
46const struct prcm_config *curr_prcm_set; 46const struct prcm_config *curr_prcm_set;
@@ -133,21 +133,21 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate)
133 done_rate = CORE_CLK_SRC_DPLL; 133 done_rate = CORE_CLK_SRC_DPLL;
134 134
135 /* MPU divider */ 135 /* MPU divider */
136 cm_write_mod_reg(prcm->cm_clksel_mpu, MPU_MOD, CM_CLKSEL); 136 omap2_cm_write_mod_reg(prcm->cm_clksel_mpu, MPU_MOD, CM_CLKSEL);
137 137
138 /* dsp + iva1 div(2420), iva2.1(2430) */ 138 /* dsp + iva1 div(2420), iva2.1(2430) */
139 cm_write_mod_reg(prcm->cm_clksel_dsp, 139 omap2_cm_write_mod_reg(prcm->cm_clksel_dsp,
140 OMAP24XX_DSP_MOD, CM_CLKSEL); 140 OMAP24XX_DSP_MOD, CM_CLKSEL);
141 141
142 cm_write_mod_reg(prcm->cm_clksel_gfx, GFX_MOD, CM_CLKSEL); 142 omap2_cm_write_mod_reg(prcm->cm_clksel_gfx, GFX_MOD, CM_CLKSEL);
143 143
144 /* Major subsystem dividers */ 144 /* Major subsystem dividers */
145 tmp = cm_read_mod_reg(CORE_MOD, CM_CLKSEL1) & OMAP24XX_CLKSEL_DSS2_MASK; 145 tmp = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL1) & OMAP24XX_CLKSEL_DSS2_MASK;
146 cm_write_mod_reg(prcm->cm_clksel1_core | tmp, CORE_MOD, 146 omap2_cm_write_mod_reg(prcm->cm_clksel1_core | tmp, CORE_MOD,
147 CM_CLKSEL1); 147 CM_CLKSEL1);
148 148
149 if (cpu_is_omap2430()) 149 if (cpu_is_omap2430())
150 cm_write_mod_reg(prcm->cm_clksel_mdm, 150 omap2_cm_write_mod_reg(prcm->cm_clksel_mdm,
151 OMAP2430_MDM_MOD, CM_CLKSEL); 151 OMAP2430_MDM_MOD, CM_CLKSEL);
152 152
153 /* x2 to enter omap2xxx_sdrc_init_params() */ 153 /* x2 to enter omap2xxx_sdrc_init_params() */
diff --git a/arch/arm/mach-omap2/clkt34xx_dpll3m2.c b/arch/arm/mach-omap2/clkt34xx_dpll3m2.c
index b2b1e37bb6bb..d6e34dd9e7e7 100644
--- a/arch/arm/mach-omap2/clkt34xx_dpll3m2.c
+++ b/arch/arm/mach-omap2/clkt34xx_dpll3m2.c
@@ -115,6 +115,7 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)
115 sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla, 115 sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
116 sdrc_cs0->actim_ctrlb, sdrc_cs0->mr, 116 sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,
117 0, 0, 0, 0); 117 0, 0, 0, 0);
118 clk->rate = rate;
118 119
119 return 0; 120 return 0;
120} 121}
diff --git a/arch/arm/mach-omap2/clkt_clksel.c b/arch/arm/mach-omap2/clkt_clksel.c
index a781cd6795a4..e25364de028a 100644
--- a/arch/arm/mach-omap2/clkt_clksel.c
+++ b/arch/arm/mach-omap2/clkt_clksel.c
@@ -97,7 +97,7 @@ static u8 _get_div_and_fieldval(struct clk *src_clk, struct clk *clk,
97 u32 *field_val) 97 u32 *field_val)
98{ 98{
99 const struct clksel *clks; 99 const struct clksel *clks;
100 const struct clksel_rate *clkr, *max_clkr; 100 const struct clksel_rate *clkr, *max_clkr = NULL;
101 u8 max_div = 0; 101 u8 max_div = 0;
102 102
103 clks = _get_clksel_by_parent(clk, src_clk); 103 clks = _get_clksel_by_parent(clk, src_clk);
diff --git a/arch/arm/mach-omap2/clkt_dpll.c b/arch/arm/mach-omap2/clkt_dpll.c
index 6ce512e902c6..bcffee001bfa 100644
--- a/arch/arm/mach-omap2/clkt_dpll.c
+++ b/arch/arm/mach-omap2/clkt_dpll.c
@@ -24,7 +24,6 @@
24#include <plat/clock.h> 24#include <plat/clock.h>
25 25
26#include "clock.h" 26#include "clock.h"
27#include "cm.h"
28#include "cm-regbits-24xx.h" 27#include "cm-regbits-24xx.h"
29#include "cm-regbits-34xx.h" 28#include "cm-regbits-34xx.h"
30 29
@@ -78,7 +77,7 @@ static int _dpll_test_fint(struct clk *clk, u8 n)
78 dd = clk->dpll_data; 77 dd = clk->dpll_data;
79 78
80 /* DPLL divider must result in a valid jitter correction val */ 79 /* DPLL divider must result in a valid jitter correction val */
81 fint = clk->parent->rate / (n + 1); 80 fint = clk->parent->rate / n;
82 if (fint < DPLL_FINT_BAND1_MIN) { 81 if (fint < DPLL_FINT_BAND1_MIN) {
83 82
84 pr_debug("rejecting n=%d due to Fint failure, " 83 pr_debug("rejecting n=%d due to Fint failure, "
@@ -179,12 +178,11 @@ void omap2_init_dpll_parent(struct clk *clk)
179 if (!dd) 178 if (!dd)
180 return; 179 return;
181 180
182 /* Return bypass rate if DPLL is bypassed */
183 v = __raw_readl(dd->control_reg); 181 v = __raw_readl(dd->control_reg);
184 v &= dd->enable_mask; 182 v &= dd->enable_mask;
185 v >>= __ffs(dd->enable_mask); 183 v >>= __ffs(dd->enable_mask);
186 184
187 /* Reparent in case the dpll is in bypass */ 185 /* Reparent the struct clk in case the dpll is in bypass */
188 if (cpu_is_omap24xx()) { 186 if (cpu_is_omap24xx()) {
189 if (v == OMAP2XXX_EN_DPLL_LPBYPASS || 187 if (v == OMAP2XXX_EN_DPLL_LPBYPASS ||
190 v == OMAP2XXX_EN_DPLL_FRBYPASS) 188 v == OMAP2XXX_EN_DPLL_FRBYPASS)
@@ -261,50 +259,22 @@ u32 omap2_get_dpll_rate(struct clk *clk)
261/* DPLL rate rounding code */ 259/* DPLL rate rounding code */
262 260
263/** 261/**
264 * omap2_dpll_set_rate_tolerance: set the error tolerance during rate rounding
265 * @clk: struct clk * of the DPLL
266 * @tolerance: maximum rate error tolerance
267 *
268 * Set the maximum DPLL rate error tolerance for the rate rounding
269 * algorithm. The rate tolerance is an attempt to balance DPLL power
270 * saving (the least divider value "n") vs. rate fidelity (the least
271 * difference between the desired DPLL target rate and the rounded
272 * rate out of the algorithm). So, increasing the tolerance is likely
273 * to decrease DPLL power consumption and increase DPLL rate error.
274 * Returns -EINVAL if provided a null clock ptr or a clk that is not a
275 * DPLL; or 0 upon success.
276 */
277int omap2_dpll_set_rate_tolerance(struct clk *clk, unsigned int tolerance)
278{
279 if (!clk || !clk->dpll_data)
280 return -EINVAL;
281
282 clk->dpll_data->rate_tolerance = tolerance;
283
284 return 0;
285}
286
287/**
288 * omap2_dpll_round_rate - round a target rate for an OMAP DPLL 262 * omap2_dpll_round_rate - round a target rate for an OMAP DPLL
289 * @clk: struct clk * for a DPLL 263 * @clk: struct clk * for a DPLL
290 * @target_rate: desired DPLL clock rate 264 * @target_rate: desired DPLL clock rate
291 * 265 *
292 * Given a DPLL, a desired target rate, and a rate tolerance, round 266 * Given a DPLL and a desired target rate, round the target rate to a
293 * the target rate to a possible, programmable rate for this DPLL. 267 * possible, programmable rate for this DPLL. Attempts to select the
294 * Rate tolerance is assumed to be set by the caller before this 268 * minimum possible n. Stores the computed (m, n) in the DPLL's
295 * function is called. Attempts to select the minimum possible n 269 * dpll_data structure so set_rate() will not need to call this
296 * within the tolerance to reduce power consumption. Stores the 270 * (expensive) function again. Returns ~0 if the target rate cannot
297 * computed (m, n) in the DPLL's dpll_data structure so set_rate() 271 * be rounded, or the rounded rate upon success.
298 * will not need to call this (expensive) function again. Returns ~0
299 * if the target rate cannot be rounded, either because the rate is
300 * too low or because the rate tolerance is set too tightly; or the
301 * rounded rate upon success.
302 */ 272 */
303long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate) 273long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)
304{ 274{
305 int m, n, r, e, scaled_max_m; 275 int m, n, r, scaled_max_m;
306 unsigned long scaled_rt_rp, new_rate; 276 unsigned long scaled_rt_rp;
307 int min_e = -1, min_e_m = -1, min_e_n = -1; 277 unsigned long new_rate = 0;
308 struct dpll_data *dd; 278 struct dpll_data *dd;
309 279
310 if (!clk || !clk->dpll_data) 280 if (!clk || !clk->dpll_data)
@@ -312,8 +282,8 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)
312 282
313 dd = clk->dpll_data; 283 dd = clk->dpll_data;
314 284
315 pr_debug("clock: starting DPLL round_rate for clock %s, target rate " 285 pr_debug("clock: %s: starting DPLL round_rate, target rate %ld\n",
316 "%ld\n", clk->name, target_rate); 286 clk->name, target_rate);
317 287
318 scaled_rt_rp = target_rate / (dd->clk_ref->rate / DPLL_SCALE_FACTOR); 288 scaled_rt_rp = target_rate / (dd->clk_ref->rate / DPLL_SCALE_FACTOR);
319 scaled_max_m = dd->max_multiplier * DPLL_SCALE_FACTOR; 289 scaled_max_m = dd->max_multiplier * DPLL_SCALE_FACTOR;
@@ -348,39 +318,23 @@ long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate)
348 if (r == DPLL_MULT_UNDERFLOW) 318 if (r == DPLL_MULT_UNDERFLOW)
349 continue; 319 continue;
350 320
351 e = target_rate - new_rate; 321 pr_debug("clock: %s: m = %d: n = %d: new_rate = %ld\n",
352 pr_debug("clock: n = %d: m = %d: rate error is %d " 322 clk->name, m, n, new_rate);
353 "(new_rate = %ld)\n", n, m, e, new_rate);
354
355 if (min_e == -1 ||
356 min_e >= (int)(abs(e) - dd->rate_tolerance)) {
357 min_e = e;
358 min_e_m = m;
359 min_e_n = n;
360
361 pr_debug("clock: found new least error %d\n", min_e);
362 323
363 /* We found good settings -- bail out now */ 324 if (target_rate == new_rate) {
364 if (min_e <= dd->rate_tolerance) 325 dd->last_rounded_m = m;
365 break; 326 dd->last_rounded_n = n;
327 dd->last_rounded_rate = target_rate;
328 break;
366 } 329 }
367 } 330 }
368 331
369 if (min_e < 0) { 332 if (target_rate != new_rate) {
370 pr_debug("clock: error: target rate or tolerance too low\n"); 333 pr_debug("clock: %s: cannot round to rate %ld\n", clk->name,
334 target_rate);
371 return ~0; 335 return ~0;
372 } 336 }
373 337
374 dd->last_rounded_m = min_e_m; 338 return target_rate;
375 dd->last_rounded_n = min_e_n;
376 dd->last_rounded_rate = _dpll_compute_new_rate(dd->clk_ref->rate,
377 min_e_m, min_e_n);
378
379 pr_debug("clock: final least error: e = %d, m = %d, n = %d\n",
380 min_e, min_e_m, min_e_n);
381 pr_debug("clock: final rate: %ld (target rate: %ld)\n",
382 dd->last_rounded_rate, target_rate);
383
384 return dd->last_rounded_rate;
385} 339}
386 340
diff --git a/arch/arm/mach-omap2/clkt_iclk.c b/arch/arm/mach-omap2/clkt_iclk.c
new file mode 100644
index 000000000000..3d43fba2542f
--- /dev/null
+++ b/arch/arm/mach-omap2/clkt_iclk.c
@@ -0,0 +1,82 @@
1/*
2 * OMAP2/3 interface clock control
3 *
4 * Copyright (C) 2011 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#undef DEBUG
12
13#include <linux/kernel.h>
14#include <linux/clk.h>
15#include <linux/io.h>
16
17#include <plat/clock.h>
18#include <plat/prcm.h>
19
20#include "clock.h"
21#include "clock2xxx.h"
22#include "cm2xxx_3xxx.h"
23#include "cm-regbits-24xx.h"
24
25/* Private functions */
26
27/* XXX */
28void omap2_clkt_iclk_allow_idle(struct clk *clk)
29{
30 u32 v, r;
31
32 r = ((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN));
33
34 v = __raw_readl((__force void __iomem *)r);
35 v |= (1 << clk->enable_bit);
36 __raw_writel(v, (__force void __iomem *)r);
37}
38
39/* XXX */
40void omap2_clkt_iclk_deny_idle(struct clk *clk)
41{
42 u32 v, r;
43
44 r = ((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN));
45
46 v = __raw_readl((__force void __iomem *)r);
47 v &= ~(1 << clk->enable_bit);
48 __raw_writel(v, (__force void __iomem *)r);
49}
50
51/* Public data */
52
53const struct clkops clkops_omap2_iclk_dflt_wait = {
54 .enable = omap2_dflt_clk_enable,
55 .disable = omap2_dflt_clk_disable,
56 .find_companion = omap2_clk_dflt_find_companion,
57 .find_idlest = omap2_clk_dflt_find_idlest,
58 .allow_idle = omap2_clkt_iclk_allow_idle,
59 .deny_idle = omap2_clkt_iclk_deny_idle,
60};
61
62const struct clkops clkops_omap2_iclk_dflt = {
63 .enable = omap2_dflt_clk_enable,
64 .disable = omap2_dflt_clk_disable,
65 .allow_idle = omap2_clkt_iclk_allow_idle,
66 .deny_idle = omap2_clkt_iclk_deny_idle,
67};
68
69const struct clkops clkops_omap2_iclk_idle_only = {
70 .allow_idle = omap2_clkt_iclk_allow_idle,
71 .deny_idle = omap2_clkt_iclk_deny_idle,
72};
73
74const struct clkops clkops_omap2_mdmclk_dflt_wait = {
75 .enable = omap2_dflt_clk_enable,
76 .disable = omap2_dflt_clk_disable,
77 .find_companion = omap2_clk_dflt_find_companion,
78 .find_idlest = omap2_clk_dflt_find_idlest,
79 .allow_idle = omap2_clkt_iclk_allow_idle,
80 .deny_idle = omap2_clkt_iclk_deny_idle,
81};
82
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index 605f531783a8..180299e4a838 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -22,16 +22,16 @@
22#include <linux/clk.h> 22#include <linux/clk.h>
23#include <linux/io.h> 23#include <linux/io.h>
24#include <linux/bitops.h> 24#include <linux/bitops.h>
25#include <trace/events/power.h>
25 26
27#include <asm/cpu.h>
26#include <plat/clock.h> 28#include <plat/clock.h>
27#include <plat/clockdomain.h> 29#include "clockdomain.h"
28#include <plat/cpu.h> 30#include <plat/cpu.h>
29#include <plat/prcm.h> 31#include <plat/prcm.h>
30 32
31#include "clock.h" 33#include "clock.h"
32#include "prm.h" 34#include "cm2xxx_3xxx.h"
33#include "prm-regbits-24xx.h"
34#include "cm.h"
35#include "cm-regbits-24xx.h" 35#include "cm-regbits-24xx.h"
36#include "cm-regbits-34xx.h" 36#include "cm-regbits-34xx.h"
37 37
@@ -263,10 +263,13 @@ void omap2_clk_disable(struct clk *clk)
263 263
264 pr_debug("clock: %s: disabling in hardware\n", clk->name); 264 pr_debug("clock: %s: disabling in hardware\n", clk->name);
265 265
266 clk->ops->disable(clk); 266 if (clk->ops && clk->ops->disable) {
267 trace_clock_disable(clk->name, 0, smp_processor_id());
268 clk->ops->disable(clk);
269 }
267 270
268 if (clk->clkdm) 271 if (clk->clkdm)
269 omap2_clkdm_clk_disable(clk->clkdm, clk); 272 clkdm_clk_disable(clk->clkdm, clk);
270 273
271 if (clk->parent) 274 if (clk->parent)
272 omap2_clk_disable(clk->parent); 275 omap2_clk_disable(clk->parent);
@@ -306,7 +309,7 @@ int omap2_clk_enable(struct clk *clk)
306 } 309 }
307 310
308 if (clk->clkdm) { 311 if (clk->clkdm) {
309 ret = omap2_clkdm_clk_enable(clk->clkdm, clk); 312 ret = clkdm_clk_enable(clk->clkdm, clk);
310 if (ret) { 313 if (ret) {
311 WARN(1, "clock: %s: could not enable clockdomain %s: " 314 WARN(1, "clock: %s: could not enable clockdomain %s: "
312 "%d\n", clk->name, clk->clkdm->name, ret); 315 "%d\n", clk->name, clk->clkdm->name, ret);
@@ -314,17 +317,21 @@ int omap2_clk_enable(struct clk *clk)
314 } 317 }
315 } 318 }
316 319
317 ret = clk->ops->enable(clk); 320 if (clk->ops && clk->ops->enable) {
318 if (ret) { 321 trace_clock_enable(clk->name, 1, smp_processor_id());
319 WARN(1, "clock: %s: could not enable: %d\n", clk->name, ret); 322 ret = clk->ops->enable(clk);
320 goto oce_err3; 323 if (ret) {
324 WARN(1, "clock: %s: could not enable: %d\n",
325 clk->name, ret);
326 goto oce_err3;
327 }
321 } 328 }
322 329
323 return 0; 330 return 0;
324 331
325oce_err3: 332oce_err3:
326 if (clk->clkdm) 333 if (clk->clkdm)
327 omap2_clkdm_clk_disable(clk->clkdm, clk); 334 clkdm_clk_disable(clk->clkdm, clk);
328oce_err2: 335oce_err2:
329 if (clk->parent) 336 if (clk->parent)
330 omap2_clk_disable(clk->parent); 337 omap2_clk_disable(clk->parent);
@@ -351,8 +358,10 @@ int omap2_clk_set_rate(struct clk *clk, unsigned long rate)
351 pr_debug("clock: set_rate for clock %s to rate %ld\n", clk->name, rate); 358 pr_debug("clock: set_rate for clock %s to rate %ld\n", clk->name, rate);
352 359
353 /* dpll_ck, core_ck, virt_prcm_set; plus all clksel clocks */ 360 /* dpll_ck, core_ck, virt_prcm_set; plus all clksel clocks */
354 if (clk->set_rate) 361 if (clk->set_rate) {
362 trace_clock_set_rate(clk->name, rate, smp_processor_id());
355 ret = clk->set_rate(clk, rate); 363 ret = clk->set_rate(clk, rate);
364 }
356 365
357 return ret; 366 return ret;
358} 367}
@@ -375,10 +384,16 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent)
375const struct clkops clkops_omap3_noncore_dpll_ops = { 384const struct clkops clkops_omap3_noncore_dpll_ops = {
376 .enable = omap3_noncore_dpll_enable, 385 .enable = omap3_noncore_dpll_enable,
377 .disable = omap3_noncore_dpll_disable, 386 .disable = omap3_noncore_dpll_disable,
387 .allow_idle = omap3_dpll_allow_idle,
388 .deny_idle = omap3_dpll_deny_idle,
378}; 389};
379 390
380#endif 391const struct clkops clkops_omap3_core_dpll_ops = {
392 .allow_idle = omap3_dpll_allow_idle,
393 .deny_idle = omap3_dpll_deny_idle,
394};
381 395
396#endif
382 397
383/* 398/*
384 * OMAP2+ clock reset and init functions 399 * OMAP2+ clock reset and init functions
@@ -395,7 +410,7 @@ void omap2_clk_disable_unused(struct clk *clk)
395 if ((regval32 & (1 << clk->enable_bit)) == v) 410 if ((regval32 & (1 << clk->enable_bit)) == v)
396 return; 411 return;
397 412
398 printk(KERN_DEBUG "Disabling unused clock \"%s\"\n", clk->name); 413 pr_debug("Disabling unused clock \"%s\"\n", clk->name);
399 if (cpu_is_omap34xx()) { 414 if (cpu_is_omap34xx()) {
400 omap2_clk_enable(clk); 415 omap2_clk_enable(clk);
401 omap2_clk_disable(clk); 416 omap2_clk_disable(clk);
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h
index a535c7a2a62a..e10ff2b54844 100644
--- a/arch/arm/mach-omap2/clock.h
+++ b/arch/arm/mach-omap2/clock.h
@@ -2,7 +2,7 @@
2 * linux/arch/arm/mach-omap2/clock.h 2 * linux/arch/arm/mach-omap2/clock.h
3 * 3 *
4 * Copyright (C) 2005-2009 Texas Instruments, Inc. 4 * Copyright (C) 2005-2009 Texas Instruments, Inc.
5 * Copyright (C) 2004-2009 Nokia Corporation 5 * Copyright (C) 2004-2011 Nokia Corporation
6 * 6 *
7 * Contacts: 7 * Contacts:
8 * Richard Woodruff <r-woodruff2@ti.com> 8 * Richard Woodruff <r-woodruff2@ti.com>
@@ -18,9 +18,6 @@
18 18
19#include <plat/clock.h> 19#include <plat/clock.h>
20 20
21/* The maximum error between a target DPLL rate and the rounded rate in Hz */
22#define DEFAULT_DPLL_RATE_TOLERANCE 50000
23
24/* CM_CLKSEL2_PLL.CORE_CLK_SRC bits (2XXX) */ 21/* CM_CLKSEL2_PLL.CORE_CLK_SRC bits (2XXX) */
25#define CORE_CLK_SRC_32K 0x0 22#define CORE_CLK_SRC_32K 0x0
26#define CORE_CLK_SRC_DPLL 0x1 23#define CORE_CLK_SRC_DPLL 0x1
@@ -49,14 +46,12 @@
49 46
50/* DPLL Type and DCO Selection Flags */ 47/* DPLL Type and DCO Selection Flags */
51#define DPLL_J_TYPE 0x1 48#define DPLL_J_TYPE 0x1
52#define DPLL_NO_DCO_SEL 0x2
53 49
54int omap2_clk_enable(struct clk *clk); 50int omap2_clk_enable(struct clk *clk);
55void omap2_clk_disable(struct clk *clk); 51void omap2_clk_disable(struct clk *clk);
56long omap2_clk_round_rate(struct clk *clk, unsigned long rate); 52long omap2_clk_round_rate(struct clk *clk, unsigned long rate);
57int omap2_clk_set_rate(struct clk *clk, unsigned long rate); 53int omap2_clk_set_rate(struct clk *clk, unsigned long rate);
58int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent); 54int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent);
59int omap2_dpll_set_rate_tolerance(struct clk *clk, unsigned int tolerance);
60long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate); 55long omap2_dpll_round_rate(struct clk *clk, unsigned long target_rate);
61unsigned long omap3_dpll_recalc(struct clk *clk); 56unsigned long omap3_dpll_recalc(struct clk *clk);
62unsigned long omap3_clkoutx2_recalc(struct clk *clk); 57unsigned long omap3_clkoutx2_recalc(struct clk *clk);
@@ -66,6 +61,9 @@ u32 omap3_dpll_autoidle_read(struct clk *clk);
66int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate); 61int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate);
67int omap3_noncore_dpll_enable(struct clk *clk); 62int omap3_noncore_dpll_enable(struct clk *clk);
68void omap3_noncore_dpll_disable(struct clk *clk); 63void omap3_noncore_dpll_disable(struct clk *clk);
64int omap4_dpllmx_gatectrl_read(struct clk *clk);
65void omap4_dpllmx_allow_gatectrl(struct clk *clk);
66void omap4_dpllmx_deny_gatectrl(struct clk *clk);
69 67
70#ifdef CONFIG_OMAP_RESET_CLOCKS 68#ifdef CONFIG_OMAP_RESET_CLOCKS
71void omap2_clk_disable_unused(struct clk *clk); 69void omap2_clk_disable_unused(struct clk *clk);
@@ -84,6 +82,10 @@ long omap2_clksel_round_rate(struct clk *clk, unsigned long target_rate);
84int omap2_clksel_set_rate(struct clk *clk, unsigned long rate); 82int omap2_clksel_set_rate(struct clk *clk, unsigned long rate);
85int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent); 83int omap2_clksel_set_parent(struct clk *clk, struct clk *new_parent);
86 84
85/* clkt_iclk.c public functions */
86extern void omap2_clkt_iclk_allow_idle(struct clk *clk);
87extern void omap2_clkt_iclk_deny_idle(struct clk *clk);
88
87u32 omap2_get_dpll_rate(struct clk *clk); 89u32 omap2_get_dpll_rate(struct clk *clk);
88void omap2_init_dpll_parent(struct clk *clk); 90void omap2_init_dpll_parent(struct clk *clk);
89 91
@@ -137,6 +139,7 @@ extern struct clk *vclk, *sclk;
137extern const struct clksel_rate gpt_32k_rates[]; 139extern const struct clksel_rate gpt_32k_rates[];
138extern const struct clksel_rate gpt_sys_rates[]; 140extern const struct clksel_rate gpt_sys_rates[];
139extern const struct clksel_rate gfx_l3_rates[]; 141extern const struct clksel_rate gfx_l3_rates[];
142extern const struct clksel_rate dsp_ick_rates[];
140 143
141#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ) 144#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ)
142extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table); 145extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
@@ -146,6 +149,13 @@ extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table)
146#define omap2_clk_exit_cpufreq_table 0 149#define omap2_clk_exit_cpufreq_table 0
147#endif 150#endif
148 151
152extern const struct clkops clkops_omap2_iclk_dflt_wait;
153extern const struct clkops clkops_omap2_iclk_dflt;
154extern const struct clkops clkops_omap2_iclk_idle_only;
155extern const struct clkops clkops_omap2_mdmclk_dflt_wait;
156extern const struct clkops clkops_omap2xxx_dpll_ops;
149extern const struct clkops clkops_omap3_noncore_dpll_ops; 157extern const struct clkops clkops_omap3_noncore_dpll_ops;
158extern const struct clkops clkops_omap3_core_dpll_ops;
159extern const struct clkops clkops_omap4_dpllmx_ops;
150 160
151#endif 161#endif
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
index 37d65d62ed8f..2926d028b6e9 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -1,12 +1,12 @@
1/* 1/*
2 * linux/arch/arm/mach-omap2/clock2420_data.c 2 * OMAP2420 clock data
3 * 3 *
4 * Copyright (C) 2005-2009 Texas Instruments, Inc. 4 * Copyright (C) 2005-2009 Texas Instruments, Inc.
5 * Copyright (C) 2004-2010 Nokia Corporation 5 * Copyright (C) 2004-2011 Nokia Corporation
6 * 6 *
7 * Contacts: 7 * Contacts:
8 * Richard Woodruff <r-woodruff2@ti.com> 8 * Richard Woodruff <r-woodruff2@ti.com>
9 * Paul Walmsley 9 * Paul Walmsley
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as 12 * it under the terms of the GNU General Public License version 2 as
@@ -22,29 +22,27 @@
22#include "clock.h" 22#include "clock.h"
23#include "clock2xxx.h" 23#include "clock2xxx.h"
24#include "opp2xxx.h" 24#include "opp2xxx.h"
25#include "prm.h" 25#include "cm2xxx_3xxx.h"
26#include "cm.h" 26#include "prm2xxx_3xxx.h"
27#include "prm-regbits-24xx.h" 27#include "prm-regbits-24xx.h"
28#include "cm-regbits-24xx.h" 28#include "cm-regbits-24xx.h"
29#include "sdrc.h" 29#include "sdrc.h"
30#include "control.h"
30 31
31#define OMAP_CM_REGADDR OMAP2420_CM_REGADDR 32#define OMAP_CM_REGADDR OMAP2420_CM_REGADDR
32 33
33/* 34/*
34 * 2420 clock tree. 35 * 2420 clock tree.
35 * 36 *
36 * NOTE:In many cases here we are assigning a 'default' parent. In many 37 * NOTE:In many cases here we are assigning a 'default' parent. In
37 * cases the parent is selectable. The get/set parent calls will also 38 * many cases the parent is selectable. The set parent calls will
38 * switch sources. 39 * also switch sources.
39 *
40 * Many some clocks say always_enabled, but they can be auto idled for
41 * power savings. They will always be available upon clock request.
42 * 40 *
43 * Several sources are given initial rates which may be wrong, this will 41 * Several sources are given initial rates which may be wrong, this will
44 * be fixed up in the init func. 42 * be fixed up in the init func.
45 * 43 *
46 * Things are broadly separated below by clock domains. It is 44 * Things are broadly separated below by clock domains. It is
47 * noteworthy that most periferals have dependencies on multiple clock 45 * noteworthy that most peripherals have dependencies on multiple clock
48 * domains. Many get their interface clocks from the L4 domain, but get 46 * domains. Many get their interface clocks from the L4 domain, but get
49 * functional clocks from fixed sources or other core domain derived 47 * functional clocks from fixed sources or other core domain derived
50 * clocks. 48 * clocks.
@@ -54,7 +52,7 @@
54static struct clk func_32k_ck = { 52static struct clk func_32k_ck = {
55 .name = "func_32k_ck", 53 .name = "func_32k_ck",
56 .ops = &clkops_null, 54 .ops = &clkops_null,
57 .rate = 32000, 55 .rate = 32768,
58 .clkdm_name = "wkup_clkdm", 56 .clkdm_name = "wkup_clkdm",
59}; 57};
60 58
@@ -89,6 +87,12 @@ static struct clk alt_ck = { /* Typical 54M or 48M, may not exist */
89 .clkdm_name = "wkup_clkdm", 87 .clkdm_name = "wkup_clkdm",
90}; 88};
91 89
90/* Optional external clock input for McBSP CLKS */
91static struct clk mcbsp_clks = {
92 .name = "mcbsp_clks",
93 .ops = &clkops_null,
94};
95
92/* 96/*
93 * Analog domain root source clocks 97 * Analog domain root source clocks
94 */ 98 */
@@ -109,7 +113,6 @@ static struct dpll_data dpll_dd = {
109 .max_multiplier = 1023, 113 .max_multiplier = 1023,
110 .min_divider = 1, 114 .min_divider = 1,
111 .max_divider = 16, 115 .max_divider = 16,
112 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
113}; 116};
114 117
115/* 118/*
@@ -118,7 +121,7 @@ static struct dpll_data dpll_dd = {
118 */ 121 */
119static struct clk dpll_ck = { 122static struct clk dpll_ck = {
120 .name = "dpll_ck", 123 .name = "dpll_ck",
121 .ops = &clkops_null, 124 .ops = &clkops_omap2xxx_dpll_ops,
122 .parent = &sys_ck, /* Can be func_32k also */ 125 .parent = &sys_ck, /* Can be func_32k also */
123 .dpll_data = &dpll_dd, 126 .dpll_data = &dpll_dd,
124 .clkdm_name = "wkup_clkdm", 127 .clkdm_name = "wkup_clkdm",
@@ -448,36 +451,22 @@ static struct clk dsp_fck = {
448 .recalc = &omap2_clksel_recalc, 451 .recalc = &omap2_clksel_recalc,
449}; 452};
450 453
451/* DSP interface clock */ 454static const struct clksel dsp_ick_clksel[] = {
452static const struct clksel_rate dsp_irate_ick_rates[] = { 455 { .parent = &dsp_fck, .rates = dsp_ick_rates },
453 { .div = 1, .val = 1, .flags = RATE_IN_24XX },
454 { .div = 2, .val = 2, .flags = RATE_IN_24XX },
455 { .div = 0 },
456};
457
458static const struct clksel dsp_irate_ick_clksel[] = {
459 { .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
460 { .parent = NULL } 456 { .parent = NULL }
461}; 457};
462 458
463/* This clock does not exist as such in the TRM. */
464static struct clk dsp_irate_ick = {
465 .name = "dsp_irate_ick",
466 .ops = &clkops_null,
467 .parent = &dsp_fck,
468 .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
469 .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
470 .clksel = dsp_irate_ick_clksel,
471 .recalc = &omap2_clksel_recalc,
472};
473
474/* 2420 only */
475static struct clk dsp_ick = { 459static struct clk dsp_ick = {
476 .name = "dsp_ick", /* apparently ipi and isp */ 460 .name = "dsp_ick", /* apparently ipi and isp */
477 .ops = &clkops_omap2_dflt_wait, 461 .ops = &clkops_omap2_iclk_dflt_wait,
478 .parent = &dsp_irate_ick, 462 .parent = &dsp_fck,
463 .clkdm_name = "dsp_clkdm",
479 .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_ICLKEN), 464 .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_ICLKEN),
480 .enable_bit = OMAP2420_EN_DSP_IPI_SHIFT, /* for ipi */ 465 .enable_bit = OMAP2420_EN_DSP_IPI_SHIFT, /* for ipi */
466 .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
467 .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
468 .clksel = dsp_ick_clksel,
469 .recalc = &omap2_clksel_recalc,
481}; 470};
482 471
483/* 472/*
@@ -572,7 +561,7 @@ static const struct clksel usb_l4_ick_clksel[] = {
572/* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */ 561/* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */
573static struct clk usb_l4_ick = { /* FS-USB interface clock */ 562static struct clk usb_l4_ick = { /* FS-USB interface clock */
574 .name = "usb_l4_ick", 563 .name = "usb_l4_ick",
575 .ops = &clkops_omap2_dflt_wait, 564 .ops = &clkops_omap2_iclk_dflt_wait,
576 .parent = &core_l3_ck, 565 .parent = &core_l3_ck,
577 .clkdm_name = "core_l4_clkdm", 566 .clkdm_name = "core_l4_clkdm",
578 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 567 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -654,7 +643,7 @@ static struct clk ssi_ssr_sst_fck = {
654 */ 643 */
655static struct clk ssi_l4_ick = { 644static struct clk ssi_l4_ick = {
656 .name = "ssi_l4_ick", 645 .name = "ssi_l4_ick",
657 .ops = &clkops_omap2_dflt_wait, 646 .ops = &clkops_omap2_iclk_dflt_wait,
658 .parent = &l4_ck, 647 .parent = &l4_ck,
659 .clkdm_name = "core_l4_clkdm", 648 .clkdm_name = "core_l4_clkdm",
660 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 649 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -709,6 +698,7 @@ static struct clk gfx_2d_fck = {
709 .recalc = &omap2_clksel_recalc, 698 .recalc = &omap2_clksel_recalc,
710}; 699};
711 700
701/* This interface clock does not have a CM_AUTOIDLE bit */
712static struct clk gfx_ick = { 702static struct clk gfx_ick = {
713 .name = "gfx_ick", /* From l3 */ 703 .name = "gfx_ick", /* From l3 */
714 .ops = &clkops_omap2_dflt_wait, 704 .ops = &clkops_omap2_dflt_wait,
@@ -756,7 +746,7 @@ static const struct clksel dss1_fck_clksel[] = {
756 746
757static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */ 747static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */
758 .name = "dss_ick", 748 .name = "dss_ick",
759 .ops = &clkops_omap2_dflt, 749 .ops = &clkops_omap2_iclk_dflt,
760 .parent = &l4_ck, /* really both l3 and l4 */ 750 .parent = &l4_ck, /* really both l3 and l4 */
761 .clkdm_name = "dss_clkdm", 751 .clkdm_name = "dss_clkdm",
762 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 752 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -805,7 +795,7 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
805 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), 795 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
806 .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK, 796 .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK,
807 .clksel = dss2_fck_clksel, 797 .clksel = dss2_fck_clksel,
808 .recalc = &followparent_recalc, 798 .recalc = &omap2_clksel_recalc,
809}; 799};
810 800
811static struct clk dss_54m_fck = { /* Alt clk used in power management */ 801static struct clk dss_54m_fck = { /* Alt clk used in power management */
@@ -818,6 +808,14 @@ static struct clk dss_54m_fck = { /* Alt clk used in power management */
818 .recalc = &followparent_recalc, 808 .recalc = &followparent_recalc,
819}; 809};
820 810
811static struct clk wu_l4_ick = {
812 .name = "wu_l4_ick",
813 .ops = &clkops_null,
814 .parent = &sys_ck,
815 .clkdm_name = "wkup_clkdm",
816 .recalc = &followparent_recalc,
817};
818
821/* 819/*
822 * CORE power domain ICLK & FCLK defines. 820 * CORE power domain ICLK & FCLK defines.
823 * Many of the these can have more than one possible parent. Entries 821 * Many of the these can have more than one possible parent. Entries
@@ -838,9 +836,9 @@ static const struct clksel omap24xx_gpt_clksel[] = {
838 836
839static struct clk gpt1_ick = { 837static struct clk gpt1_ick = {
840 .name = "gpt1_ick", 838 .name = "gpt1_ick",
841 .ops = &clkops_omap2_dflt_wait, 839 .ops = &clkops_omap2_iclk_dflt_wait,
842 .parent = &l4_ck, 840 .parent = &wu_l4_ick,
843 .clkdm_name = "core_l4_clkdm", 841 .clkdm_name = "wkup_clkdm",
844 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 842 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
845 .enable_bit = OMAP24XX_EN_GPT1_SHIFT, 843 .enable_bit = OMAP24XX_EN_GPT1_SHIFT,
846 .recalc = &followparent_recalc, 844 .recalc = &followparent_recalc,
@@ -864,7 +862,7 @@ static struct clk gpt1_fck = {
864 862
865static struct clk gpt2_ick = { 863static struct clk gpt2_ick = {
866 .name = "gpt2_ick", 864 .name = "gpt2_ick",
867 .ops = &clkops_omap2_dflt_wait, 865 .ops = &clkops_omap2_iclk_dflt_wait,
868 .parent = &l4_ck, 866 .parent = &l4_ck,
869 .clkdm_name = "core_l4_clkdm", 867 .clkdm_name = "core_l4_clkdm",
870 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 868 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -888,7 +886,7 @@ static struct clk gpt2_fck = {
888 886
889static struct clk gpt3_ick = { 887static struct clk gpt3_ick = {
890 .name = "gpt3_ick", 888 .name = "gpt3_ick",
891 .ops = &clkops_omap2_dflt_wait, 889 .ops = &clkops_omap2_iclk_dflt_wait,
892 .parent = &l4_ck, 890 .parent = &l4_ck,
893 .clkdm_name = "core_l4_clkdm", 891 .clkdm_name = "core_l4_clkdm",
894 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 892 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -912,7 +910,7 @@ static struct clk gpt3_fck = {
912 910
913static struct clk gpt4_ick = { 911static struct clk gpt4_ick = {
914 .name = "gpt4_ick", 912 .name = "gpt4_ick",
915 .ops = &clkops_omap2_dflt_wait, 913 .ops = &clkops_omap2_iclk_dflt_wait,
916 .parent = &l4_ck, 914 .parent = &l4_ck,
917 .clkdm_name = "core_l4_clkdm", 915 .clkdm_name = "core_l4_clkdm",
918 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 916 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -936,7 +934,7 @@ static struct clk gpt4_fck = {
936 934
937static struct clk gpt5_ick = { 935static struct clk gpt5_ick = {
938 .name = "gpt5_ick", 936 .name = "gpt5_ick",
939 .ops = &clkops_omap2_dflt_wait, 937 .ops = &clkops_omap2_iclk_dflt_wait,
940 .parent = &l4_ck, 938 .parent = &l4_ck,
941 .clkdm_name = "core_l4_clkdm", 939 .clkdm_name = "core_l4_clkdm",
942 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 940 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -960,7 +958,7 @@ static struct clk gpt5_fck = {
960 958
961static struct clk gpt6_ick = { 959static struct clk gpt6_ick = {
962 .name = "gpt6_ick", 960 .name = "gpt6_ick",
963 .ops = &clkops_omap2_dflt_wait, 961 .ops = &clkops_omap2_iclk_dflt_wait,
964 .parent = &l4_ck, 962 .parent = &l4_ck,
965 .clkdm_name = "core_l4_clkdm", 963 .clkdm_name = "core_l4_clkdm",
966 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 964 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -984,8 +982,9 @@ static struct clk gpt6_fck = {
984 982
985static struct clk gpt7_ick = { 983static struct clk gpt7_ick = {
986 .name = "gpt7_ick", 984 .name = "gpt7_ick",
987 .ops = &clkops_omap2_dflt_wait, 985 .ops = &clkops_omap2_iclk_dflt_wait,
988 .parent = &l4_ck, 986 .parent = &l4_ck,
987 .clkdm_name = "core_l4_clkdm",
989 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 988 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
990 .enable_bit = OMAP24XX_EN_GPT7_SHIFT, 989 .enable_bit = OMAP24XX_EN_GPT7_SHIFT,
991 .recalc = &followparent_recalc, 990 .recalc = &followparent_recalc,
@@ -1007,7 +1006,7 @@ static struct clk gpt7_fck = {
1007 1006
1008static struct clk gpt8_ick = { 1007static struct clk gpt8_ick = {
1009 .name = "gpt8_ick", 1008 .name = "gpt8_ick",
1010 .ops = &clkops_omap2_dflt_wait, 1009 .ops = &clkops_omap2_iclk_dflt_wait,
1011 .parent = &l4_ck, 1010 .parent = &l4_ck,
1012 .clkdm_name = "core_l4_clkdm", 1011 .clkdm_name = "core_l4_clkdm",
1013 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1012 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1031,7 +1030,7 @@ static struct clk gpt8_fck = {
1031 1030
1032static struct clk gpt9_ick = { 1031static struct clk gpt9_ick = {
1033 .name = "gpt9_ick", 1032 .name = "gpt9_ick",
1034 .ops = &clkops_omap2_dflt_wait, 1033 .ops = &clkops_omap2_iclk_dflt_wait,
1035 .parent = &l4_ck, 1034 .parent = &l4_ck,
1036 .clkdm_name = "core_l4_clkdm", 1035 .clkdm_name = "core_l4_clkdm",
1037 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1036 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1055,7 +1054,7 @@ static struct clk gpt9_fck = {
1055 1054
1056static struct clk gpt10_ick = { 1055static struct clk gpt10_ick = {
1057 .name = "gpt10_ick", 1056 .name = "gpt10_ick",
1058 .ops = &clkops_omap2_dflt_wait, 1057 .ops = &clkops_omap2_iclk_dflt_wait,
1059 .parent = &l4_ck, 1058 .parent = &l4_ck,
1060 .clkdm_name = "core_l4_clkdm", 1059 .clkdm_name = "core_l4_clkdm",
1061 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1060 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1079,7 +1078,7 @@ static struct clk gpt10_fck = {
1079 1078
1080static struct clk gpt11_ick = { 1079static struct clk gpt11_ick = {
1081 .name = "gpt11_ick", 1080 .name = "gpt11_ick",
1082 .ops = &clkops_omap2_dflt_wait, 1081 .ops = &clkops_omap2_iclk_dflt_wait,
1083 .parent = &l4_ck, 1082 .parent = &l4_ck,
1084 .clkdm_name = "core_l4_clkdm", 1083 .clkdm_name = "core_l4_clkdm",
1085 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1084 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1103,7 +1102,7 @@ static struct clk gpt11_fck = {
1103 1102
1104static struct clk gpt12_ick = { 1103static struct clk gpt12_ick = {
1105 .name = "gpt12_ick", 1104 .name = "gpt12_ick",
1106 .ops = &clkops_omap2_dflt_wait, 1105 .ops = &clkops_omap2_iclk_dflt_wait,
1107 .parent = &l4_ck, 1106 .parent = &l4_ck,
1108 .clkdm_name = "core_l4_clkdm", 1107 .clkdm_name = "core_l4_clkdm",
1109 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1108 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1127,7 +1126,7 @@ static struct clk gpt12_fck = {
1127 1126
1128static struct clk mcbsp1_ick = { 1127static struct clk mcbsp1_ick = {
1129 .name = "mcbsp1_ick", 1128 .name = "mcbsp1_ick",
1130 .ops = &clkops_omap2_dflt_wait, 1129 .ops = &clkops_omap2_iclk_dflt_wait,
1131 .parent = &l4_ck, 1130 .parent = &l4_ck,
1132 .clkdm_name = "core_l4_clkdm", 1131 .clkdm_name = "core_l4_clkdm",
1133 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1132 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1135,19 +1134,39 @@ static struct clk mcbsp1_ick = {
1135 .recalc = &followparent_recalc, 1134 .recalc = &followparent_recalc,
1136}; 1135};
1137 1136
1137static const struct clksel_rate common_mcbsp_96m_rates[] = {
1138 { .div = 1, .val = 0, .flags = RATE_IN_24XX },
1139 { .div = 0 }
1140};
1141
1142static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
1143 { .div = 1, .val = 1, .flags = RATE_IN_24XX },
1144 { .div = 0 }
1145};
1146
1147static const struct clksel mcbsp_fck_clksel[] = {
1148 { .parent = &func_96m_ck, .rates = common_mcbsp_96m_rates },
1149 { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
1150 { .parent = NULL }
1151};
1152
1138static struct clk mcbsp1_fck = { 1153static struct clk mcbsp1_fck = {
1139 .name = "mcbsp1_fck", 1154 .name = "mcbsp1_fck",
1140 .ops = &clkops_omap2_dflt_wait, 1155 .ops = &clkops_omap2_dflt_wait,
1141 .parent = &func_96m_ck, 1156 .parent = &func_96m_ck,
1157 .init = &omap2_init_clksel_parent,
1142 .clkdm_name = "core_l4_clkdm", 1158 .clkdm_name = "core_l4_clkdm",
1143 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1159 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1144 .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT, 1160 .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT,
1145 .recalc = &followparent_recalc, 1161 .clksel_reg = OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1162 .clksel_mask = OMAP2_MCBSP1_CLKS_MASK,
1163 .clksel = mcbsp_fck_clksel,
1164 .recalc = &omap2_clksel_recalc,
1146}; 1165};
1147 1166
1148static struct clk mcbsp2_ick = { 1167static struct clk mcbsp2_ick = {
1149 .name = "mcbsp2_ick", 1168 .name = "mcbsp2_ick",
1150 .ops = &clkops_omap2_dflt_wait, 1169 .ops = &clkops_omap2_iclk_dflt_wait,
1151 .parent = &l4_ck, 1170 .parent = &l4_ck,
1152 .clkdm_name = "core_l4_clkdm", 1171 .clkdm_name = "core_l4_clkdm",
1153 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1172 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1159,15 +1178,19 @@ static struct clk mcbsp2_fck = {
1159 .name = "mcbsp2_fck", 1178 .name = "mcbsp2_fck",
1160 .ops = &clkops_omap2_dflt_wait, 1179 .ops = &clkops_omap2_dflt_wait,
1161 .parent = &func_96m_ck, 1180 .parent = &func_96m_ck,
1181 .init = &omap2_init_clksel_parent,
1162 .clkdm_name = "core_l4_clkdm", 1182 .clkdm_name = "core_l4_clkdm",
1163 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1183 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1164 .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT, 1184 .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT,
1165 .recalc = &followparent_recalc, 1185 .clksel_reg = OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1186 .clksel_mask = OMAP2_MCBSP2_CLKS_MASK,
1187 .clksel = mcbsp_fck_clksel,
1188 .recalc = &omap2_clksel_recalc,
1166}; 1189};
1167 1190
1168static struct clk mcspi1_ick = { 1191static struct clk mcspi1_ick = {
1169 .name = "mcspi1_ick", 1192 .name = "mcspi1_ick",
1170 .ops = &clkops_omap2_dflt_wait, 1193 .ops = &clkops_omap2_iclk_dflt_wait,
1171 .parent = &l4_ck, 1194 .parent = &l4_ck,
1172 .clkdm_name = "core_l4_clkdm", 1195 .clkdm_name = "core_l4_clkdm",
1173 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1196 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1187,7 +1210,7 @@ static struct clk mcspi1_fck = {
1187 1210
1188static struct clk mcspi2_ick = { 1211static struct clk mcspi2_ick = {
1189 .name = "mcspi2_ick", 1212 .name = "mcspi2_ick",
1190 .ops = &clkops_omap2_dflt_wait, 1213 .ops = &clkops_omap2_iclk_dflt_wait,
1191 .parent = &l4_ck, 1214 .parent = &l4_ck,
1192 .clkdm_name = "core_l4_clkdm", 1215 .clkdm_name = "core_l4_clkdm",
1193 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1216 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1207,7 +1230,7 @@ static struct clk mcspi2_fck = {
1207 1230
1208static struct clk uart1_ick = { 1231static struct clk uart1_ick = {
1209 .name = "uart1_ick", 1232 .name = "uart1_ick",
1210 .ops = &clkops_omap2_dflt_wait, 1233 .ops = &clkops_omap2_iclk_dflt_wait,
1211 .parent = &l4_ck, 1234 .parent = &l4_ck,
1212 .clkdm_name = "core_l4_clkdm", 1235 .clkdm_name = "core_l4_clkdm",
1213 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1236 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1227,7 +1250,7 @@ static struct clk uart1_fck = {
1227 1250
1228static struct clk uart2_ick = { 1251static struct clk uart2_ick = {
1229 .name = "uart2_ick", 1252 .name = "uart2_ick",
1230 .ops = &clkops_omap2_dflt_wait, 1253 .ops = &clkops_omap2_iclk_dflt_wait,
1231 .parent = &l4_ck, 1254 .parent = &l4_ck,
1232 .clkdm_name = "core_l4_clkdm", 1255 .clkdm_name = "core_l4_clkdm",
1233 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1256 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1247,7 +1270,7 @@ static struct clk uart2_fck = {
1247 1270
1248static struct clk uart3_ick = { 1271static struct clk uart3_ick = {
1249 .name = "uart3_ick", 1272 .name = "uart3_ick",
1250 .ops = &clkops_omap2_dflt_wait, 1273 .ops = &clkops_omap2_iclk_dflt_wait,
1251 .parent = &l4_ck, 1274 .parent = &l4_ck,
1252 .clkdm_name = "core_l4_clkdm", 1275 .clkdm_name = "core_l4_clkdm",
1253 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1276 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1267,9 +1290,9 @@ static struct clk uart3_fck = {
1267 1290
1268static struct clk gpios_ick = { 1291static struct clk gpios_ick = {
1269 .name = "gpios_ick", 1292 .name = "gpios_ick",
1270 .ops = &clkops_omap2_dflt_wait, 1293 .ops = &clkops_omap2_iclk_dflt_wait,
1271 .parent = &l4_ck, 1294 .parent = &wu_l4_ick,
1272 .clkdm_name = "core_l4_clkdm", 1295 .clkdm_name = "wkup_clkdm",
1273 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1296 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1274 .enable_bit = OMAP24XX_EN_GPIOS_SHIFT, 1297 .enable_bit = OMAP24XX_EN_GPIOS_SHIFT,
1275 .recalc = &followparent_recalc, 1298 .recalc = &followparent_recalc,
@@ -1287,9 +1310,9 @@ static struct clk gpios_fck = {
1287 1310
1288static struct clk mpu_wdt_ick = { 1311static struct clk mpu_wdt_ick = {
1289 .name = "mpu_wdt_ick", 1312 .name = "mpu_wdt_ick",
1290 .ops = &clkops_omap2_dflt_wait, 1313 .ops = &clkops_omap2_iclk_dflt_wait,
1291 .parent = &l4_ck, 1314 .parent = &wu_l4_ick,
1292 .clkdm_name = "core_l4_clkdm", 1315 .clkdm_name = "wkup_clkdm",
1293 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1316 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1294 .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT, 1317 .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
1295 .recalc = &followparent_recalc, 1318 .recalc = &followparent_recalc,
@@ -1307,10 +1330,10 @@ static struct clk mpu_wdt_fck = {
1307 1330
1308static struct clk sync_32k_ick = { 1331static struct clk sync_32k_ick = {
1309 .name = "sync_32k_ick", 1332 .name = "sync_32k_ick",
1310 .ops = &clkops_omap2_dflt_wait, 1333 .ops = &clkops_omap2_iclk_dflt_wait,
1311 .parent = &l4_ck, 1334 .parent = &wu_l4_ick,
1335 .clkdm_name = "wkup_clkdm",
1312 .flags = ENABLE_ON_INIT, 1336 .flags = ENABLE_ON_INIT,
1313 .clkdm_name = "core_l4_clkdm",
1314 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1337 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1315 .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT, 1338 .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT,
1316 .recalc = &followparent_recalc, 1339 .recalc = &followparent_recalc,
@@ -1318,9 +1341,9 @@ static struct clk sync_32k_ick = {
1318 1341
1319static struct clk wdt1_ick = { 1342static struct clk wdt1_ick = {
1320 .name = "wdt1_ick", 1343 .name = "wdt1_ick",
1321 .ops = &clkops_omap2_dflt_wait, 1344 .ops = &clkops_omap2_iclk_dflt_wait,
1322 .parent = &l4_ck, 1345 .parent = &wu_l4_ick,
1323 .clkdm_name = "core_l4_clkdm", 1346 .clkdm_name = "wkup_clkdm",
1324 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1347 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1325 .enable_bit = OMAP24XX_EN_WDT1_SHIFT, 1348 .enable_bit = OMAP24XX_EN_WDT1_SHIFT,
1326 .recalc = &followparent_recalc, 1349 .recalc = &followparent_recalc,
@@ -1328,10 +1351,10 @@ static struct clk wdt1_ick = {
1328 1351
1329static struct clk omapctrl_ick = { 1352static struct clk omapctrl_ick = {
1330 .name = "omapctrl_ick", 1353 .name = "omapctrl_ick",
1331 .ops = &clkops_omap2_dflt_wait, 1354 .ops = &clkops_omap2_iclk_dflt_wait,
1332 .parent = &l4_ck, 1355 .parent = &wu_l4_ick,
1356 .clkdm_name = "wkup_clkdm",
1333 .flags = ENABLE_ON_INIT, 1357 .flags = ENABLE_ON_INIT,
1334 .clkdm_name = "core_l4_clkdm",
1335 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1358 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1336 .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT, 1359 .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT,
1337 .recalc = &followparent_recalc, 1360 .recalc = &followparent_recalc,
@@ -1339,7 +1362,7 @@ static struct clk omapctrl_ick = {
1339 1362
1340static struct clk cam_ick = { 1363static struct clk cam_ick = {
1341 .name = "cam_ick", 1364 .name = "cam_ick",
1342 .ops = &clkops_omap2_dflt, 1365 .ops = &clkops_omap2_iclk_dflt,
1343 .parent = &l4_ck, 1366 .parent = &l4_ck,
1344 .clkdm_name = "core_l4_clkdm", 1367 .clkdm_name = "core_l4_clkdm",
1345 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1368 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1364,7 +1387,7 @@ static struct clk cam_fck = {
1364 1387
1365static struct clk mailboxes_ick = { 1388static struct clk mailboxes_ick = {
1366 .name = "mailboxes_ick", 1389 .name = "mailboxes_ick",
1367 .ops = &clkops_omap2_dflt_wait, 1390 .ops = &clkops_omap2_iclk_dflt_wait,
1368 .parent = &l4_ck, 1391 .parent = &l4_ck,
1369 .clkdm_name = "core_l4_clkdm", 1392 .clkdm_name = "core_l4_clkdm",
1370 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1393 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1374,7 +1397,7 @@ static struct clk mailboxes_ick = {
1374 1397
1375static struct clk wdt4_ick = { 1398static struct clk wdt4_ick = {
1376 .name = "wdt4_ick", 1399 .name = "wdt4_ick",
1377 .ops = &clkops_omap2_dflt_wait, 1400 .ops = &clkops_omap2_iclk_dflt_wait,
1378 .parent = &l4_ck, 1401 .parent = &l4_ck,
1379 .clkdm_name = "core_l4_clkdm", 1402 .clkdm_name = "core_l4_clkdm",
1380 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1403 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1394,7 +1417,7 @@ static struct clk wdt4_fck = {
1394 1417
1395static struct clk wdt3_ick = { 1418static struct clk wdt3_ick = {
1396 .name = "wdt3_ick", 1419 .name = "wdt3_ick",
1397 .ops = &clkops_omap2_dflt_wait, 1420 .ops = &clkops_omap2_iclk_dflt_wait,
1398 .parent = &l4_ck, 1421 .parent = &l4_ck,
1399 .clkdm_name = "core_l4_clkdm", 1422 .clkdm_name = "core_l4_clkdm",
1400 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1423 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1414,7 +1437,7 @@ static struct clk wdt3_fck = {
1414 1437
1415static struct clk mspro_ick = { 1438static struct clk mspro_ick = {
1416 .name = "mspro_ick", 1439 .name = "mspro_ick",
1417 .ops = &clkops_omap2_dflt_wait, 1440 .ops = &clkops_omap2_iclk_dflt_wait,
1418 .parent = &l4_ck, 1441 .parent = &l4_ck,
1419 .clkdm_name = "core_l4_clkdm", 1442 .clkdm_name = "core_l4_clkdm",
1420 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1443 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1434,7 +1457,7 @@ static struct clk mspro_fck = {
1434 1457
1435static struct clk mmc_ick = { 1458static struct clk mmc_ick = {
1436 .name = "mmc_ick", 1459 .name = "mmc_ick",
1437 .ops = &clkops_omap2_dflt_wait, 1460 .ops = &clkops_omap2_iclk_dflt_wait,
1438 .parent = &l4_ck, 1461 .parent = &l4_ck,
1439 .clkdm_name = "core_l4_clkdm", 1462 .clkdm_name = "core_l4_clkdm",
1440 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1463 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1454,7 +1477,7 @@ static struct clk mmc_fck = {
1454 1477
1455static struct clk fac_ick = { 1478static struct clk fac_ick = {
1456 .name = "fac_ick", 1479 .name = "fac_ick",
1457 .ops = &clkops_omap2_dflt_wait, 1480 .ops = &clkops_omap2_iclk_dflt_wait,
1458 .parent = &l4_ck, 1481 .parent = &l4_ck,
1459 .clkdm_name = "core_l4_clkdm", 1482 .clkdm_name = "core_l4_clkdm",
1460 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1483 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1474,7 +1497,7 @@ static struct clk fac_fck = {
1474 1497
1475static struct clk eac_ick = { 1498static struct clk eac_ick = {
1476 .name = "eac_ick", 1499 .name = "eac_ick",
1477 .ops = &clkops_omap2_dflt_wait, 1500 .ops = &clkops_omap2_iclk_dflt_wait,
1478 .parent = &l4_ck, 1501 .parent = &l4_ck,
1479 .clkdm_name = "core_l4_clkdm", 1502 .clkdm_name = "core_l4_clkdm",
1480 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1503 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1494,7 +1517,7 @@ static struct clk eac_fck = {
1494 1517
1495static struct clk hdq_ick = { 1518static struct clk hdq_ick = {
1496 .name = "hdq_ick", 1519 .name = "hdq_ick",
1497 .ops = &clkops_omap2_dflt_wait, 1520 .ops = &clkops_omap2_iclk_dflt_wait,
1498 .parent = &l4_ck, 1521 .parent = &l4_ck,
1499 .clkdm_name = "core_l4_clkdm", 1522 .clkdm_name = "core_l4_clkdm",
1500 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1523 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1514,7 +1537,7 @@ static struct clk hdq_fck = {
1514 1537
1515static struct clk i2c2_ick = { 1538static struct clk i2c2_ick = {
1516 .name = "i2c2_ick", 1539 .name = "i2c2_ick",
1517 .ops = &clkops_omap2_dflt_wait, 1540 .ops = &clkops_omap2_iclk_dflt_wait,
1518 .parent = &l4_ck, 1541 .parent = &l4_ck,
1519 .clkdm_name = "core_l4_clkdm", 1542 .clkdm_name = "core_l4_clkdm",
1520 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1543 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1534,7 +1557,7 @@ static struct clk i2c2_fck = {
1534 1557
1535static struct clk i2c1_ick = { 1558static struct clk i2c1_ick = {
1536 .name = "i2c1_ick", 1559 .name = "i2c1_ick",
1537 .ops = &clkops_omap2_dflt_wait, 1560 .ops = &clkops_omap2_iclk_dflt_wait,
1538 .parent = &l4_ck, 1561 .parent = &l4_ck,
1539 .clkdm_name = "core_l4_clkdm", 1562 .clkdm_name = "core_l4_clkdm",
1540 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1563 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1552,12 +1575,18 @@ static struct clk i2c1_fck = {
1552 .recalc = &followparent_recalc, 1575 .recalc = &followparent_recalc,
1553}; 1576};
1554 1577
1578/*
1579 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1580 * accesses derived from this data.
1581 */
1555static struct clk gpmc_fck = { 1582static struct clk gpmc_fck = {
1556 .name = "gpmc_fck", 1583 .name = "gpmc_fck",
1557 .ops = &clkops_null, /* RMK: missing? */ 1584 .ops = &clkops_omap2_iclk_idle_only,
1558 .parent = &core_l3_ck, 1585 .parent = &core_l3_ck,
1559 .flags = ENABLE_ON_INIT, 1586 .flags = ENABLE_ON_INIT,
1560 .clkdm_name = "core_l3_clkdm", 1587 .clkdm_name = "core_l3_clkdm",
1588 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1589 .enable_bit = OMAP24XX_AUTO_GPMC_SHIFT,
1561 .recalc = &followparent_recalc, 1590 .recalc = &followparent_recalc,
1562}; 1591};
1563 1592
@@ -1569,17 +1598,38 @@ static struct clk sdma_fck = {
1569 .recalc = &followparent_recalc, 1598 .recalc = &followparent_recalc,
1570}; 1599};
1571 1600
1601/*
1602 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1603 * accesses derived from this data.
1604 */
1572static struct clk sdma_ick = { 1605static struct clk sdma_ick = {
1573 .name = "sdma_ick", 1606 .name = "sdma_ick",
1574 .ops = &clkops_null, /* RMK: missing? */ 1607 .ops = &clkops_omap2_iclk_idle_only,
1575 .parent = &l4_ck, 1608 .parent = &core_l3_ck,
1609 .clkdm_name = "core_l3_clkdm",
1610 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1611 .enable_bit = OMAP24XX_AUTO_SDMA_SHIFT,
1612 .recalc = &followparent_recalc,
1613};
1614
1615/*
1616 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1617 * accesses derived from this data.
1618 */
1619static struct clk sdrc_ick = {
1620 .name = "sdrc_ick",
1621 .ops = &clkops_omap2_iclk_idle_only,
1622 .parent = &core_l3_ck,
1623 .flags = ENABLE_ON_INIT,
1576 .clkdm_name = "core_l3_clkdm", 1624 .clkdm_name = "core_l3_clkdm",
1625 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1626 .enable_bit = OMAP24XX_AUTO_SDRC_SHIFT,
1577 .recalc = &followparent_recalc, 1627 .recalc = &followparent_recalc,
1578}; 1628};
1579 1629
1580static struct clk vlynq_ick = { 1630static struct clk vlynq_ick = {
1581 .name = "vlynq_ick", 1631 .name = "vlynq_ick",
1582 .ops = &clkops_omap2_dflt_wait, 1632 .ops = &clkops_omap2_iclk_dflt_wait,
1583 .parent = &core_l3_ck, 1633 .parent = &core_l3_ck,
1584 .clkdm_name = "core_l3_clkdm", 1634 .clkdm_name = "core_l3_clkdm",
1585 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1635 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1628,7 +1678,7 @@ static struct clk vlynq_fck = {
1628 1678
1629static struct clk des_ick = { 1679static struct clk des_ick = {
1630 .name = "des_ick", 1680 .name = "des_ick",
1631 .ops = &clkops_omap2_dflt_wait, 1681 .ops = &clkops_omap2_iclk_dflt_wait,
1632 .parent = &l4_ck, 1682 .parent = &l4_ck,
1633 .clkdm_name = "core_l4_clkdm", 1683 .clkdm_name = "core_l4_clkdm",
1634 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1684 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1638,7 +1688,7 @@ static struct clk des_ick = {
1638 1688
1639static struct clk sha_ick = { 1689static struct clk sha_ick = {
1640 .name = "sha_ick", 1690 .name = "sha_ick",
1641 .ops = &clkops_omap2_dflt_wait, 1691 .ops = &clkops_omap2_iclk_dflt_wait,
1642 .parent = &l4_ck, 1692 .parent = &l4_ck,
1643 .clkdm_name = "core_l4_clkdm", 1693 .clkdm_name = "core_l4_clkdm",
1644 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1694 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1648,7 +1698,7 @@ static struct clk sha_ick = {
1648 1698
1649static struct clk rng_ick = { 1699static struct clk rng_ick = {
1650 .name = "rng_ick", 1700 .name = "rng_ick",
1651 .ops = &clkops_omap2_dflt_wait, 1701 .ops = &clkops_omap2_iclk_dflt_wait,
1652 .parent = &l4_ck, 1702 .parent = &l4_ck,
1653 .clkdm_name = "core_l4_clkdm", 1703 .clkdm_name = "core_l4_clkdm",
1654 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1704 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1658,7 +1708,7 @@ static struct clk rng_ick = {
1658 1708
1659static struct clk aes_ick = { 1709static struct clk aes_ick = {
1660 .name = "aes_ick", 1710 .name = "aes_ick",
1661 .ops = &clkops_omap2_dflt_wait, 1711 .ops = &clkops_omap2_iclk_dflt_wait,
1662 .parent = &l4_ck, 1712 .parent = &l4_ck,
1663 .clkdm_name = "core_l4_clkdm", 1713 .clkdm_name = "core_l4_clkdm",
1664 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1714 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1668,7 +1718,7 @@ static struct clk aes_ick = {
1668 1718
1669static struct clk pka_ick = { 1719static struct clk pka_ick = {
1670 .name = "pka_ick", 1720 .name = "pka_ick",
1671 .ops = &clkops_omap2_dflt_wait, 1721 .ops = &clkops_omap2_iclk_dflt_wait,
1672 .parent = &l4_ck, 1722 .parent = &l4_ck,
1673 .clkdm_name = "core_l4_clkdm", 1723 .clkdm_name = "core_l4_clkdm",
1674 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1724 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1721,6 +1771,9 @@ static struct omap_clk omap2420_clks[] = {
1721 CLK(NULL, "osc_ck", &osc_ck, CK_242X), 1771 CLK(NULL, "osc_ck", &osc_ck, CK_242X),
1722 CLK(NULL, "sys_ck", &sys_ck, CK_242X), 1772 CLK(NULL, "sys_ck", &sys_ck, CK_242X),
1723 CLK(NULL, "alt_ck", &alt_ck, CK_242X), 1773 CLK(NULL, "alt_ck", &alt_ck, CK_242X),
1774 CLK("omap-mcbsp.1", "pad_fck", &mcbsp_clks, CK_242X),
1775 CLK("omap-mcbsp.2", "pad_fck", &mcbsp_clks, CK_242X),
1776 CLK(NULL, "mcbsp_clks", &mcbsp_clks, CK_242X),
1724 /* internal analog sources */ 1777 /* internal analog sources */
1725 CLK(NULL, "dpll_ck", &dpll_ck, CK_242X), 1778 CLK(NULL, "dpll_ck", &dpll_ck, CK_242X),
1726 CLK(NULL, "apll96_ck", &apll96_ck, CK_242X), 1779 CLK(NULL, "apll96_ck", &apll96_ck, CK_242X),
@@ -1728,6 +1781,8 @@ static struct omap_clk omap2420_clks[] = {
1728 /* internal prcm root sources */ 1781 /* internal prcm root sources */
1729 CLK(NULL, "func_54m_ck", &func_54m_ck, CK_242X), 1782 CLK(NULL, "func_54m_ck", &func_54m_ck, CK_242X),
1730 CLK(NULL, "core_ck", &core_ck, CK_242X), 1783 CLK(NULL, "core_ck", &core_ck, CK_242X),
1784 CLK("omap-mcbsp.1", "prcm_fck", &func_96m_ck, CK_242X),
1785 CLK("omap-mcbsp.2", "prcm_fck", &func_96m_ck, CK_242X),
1731 CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X), 1786 CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X),
1732 CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X), 1787 CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X),
1733 CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X), 1788 CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X),
@@ -1741,7 +1796,6 @@ static struct omap_clk omap2420_clks[] = {
1741 CLK(NULL, "mpu_ck", &mpu_ck, CK_242X), 1796 CLK(NULL, "mpu_ck", &mpu_ck, CK_242X),
1742 /* dsp domain clocks */ 1797 /* dsp domain clocks */
1743 CLK(NULL, "dsp_fck", &dsp_fck, CK_242X), 1798 CLK(NULL, "dsp_fck", &dsp_fck, CK_242X),
1744 CLK(NULL, "dsp_irate_ick", &dsp_irate_ick, CK_242X),
1745 CLK(NULL, "dsp_ick", &dsp_ick, CK_242X), 1799 CLK(NULL, "dsp_ick", &dsp_ick, CK_242X),
1746 CLK(NULL, "iva1_ifck", &iva1_ifck, CK_242X), 1800 CLK(NULL, "iva1_ifck", &iva1_ifck, CK_242X),
1747 CLK(NULL, "iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X), 1801 CLK(NULL, "iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X),
@@ -1750,10 +1804,10 @@ static struct omap_clk omap2420_clks[] = {
1750 CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X), 1804 CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X),
1751 CLK(NULL, "gfx_ick", &gfx_ick, CK_242X), 1805 CLK(NULL, "gfx_ick", &gfx_ick, CK_242X),
1752 /* DSS domain clocks */ 1806 /* DSS domain clocks */
1753 CLK("omapdss", "ick", &dss_ick, CK_242X), 1807 CLK("omapdss_dss", "ick", &dss_ick, CK_242X),
1754 CLK("omapdss", "dss1_fck", &dss1_fck, CK_242X), 1808 CLK("omapdss_dss", "fck", &dss1_fck, CK_242X),
1755 CLK("omapdss", "dss2_fck", &dss2_fck, CK_242X), 1809 CLK("omapdss_dss", "sys_clk", &dss2_fck, CK_242X),
1756 CLK("omapdss", "tv_fck", &dss_54m_fck, CK_242X), 1810 CLK("omapdss_dss", "tv_clk", &dss_54m_fck, CK_242X),
1757 /* L3 domain clocks */ 1811 /* L3 domain clocks */
1758 CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X), 1812 CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X),
1759 CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X), 1813 CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X),
@@ -1761,6 +1815,7 @@ static struct omap_clk omap2420_clks[] = {
1761 /* L4 domain clocks */ 1815 /* L4 domain clocks */
1762 CLK(NULL, "l4_ck", &l4_ck, CK_242X), 1816 CLK(NULL, "l4_ck", &l4_ck, CK_242X),
1763 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X), 1817 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X),
1818 CLK(NULL, "wu_l4_ick", &wu_l4_ick, CK_242X),
1764 /* virtual meta-group clock */ 1819 /* virtual meta-group clock */
1765 CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X), 1820 CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X),
1766 /* general l4 interface ck, multi-parent functional clk */ 1821 /* general l4 interface ck, multi-parent functional clk */
@@ -1826,22 +1881,23 @@ static struct omap_clk omap2420_clks[] = {
1826 CLK(NULL, "eac_fck", &eac_fck, CK_242X), 1881 CLK(NULL, "eac_fck", &eac_fck, CK_242X),
1827 CLK("omap_hdq.0", "ick", &hdq_ick, CK_242X), 1882 CLK("omap_hdq.0", "ick", &hdq_ick, CK_242X),
1828 CLK("omap_hdq.1", "fck", &hdq_fck, CK_242X), 1883 CLK("omap_hdq.1", "fck", &hdq_fck, CK_242X),
1829 CLK("i2c_omap.1", "ick", &i2c1_ick, CK_242X), 1884 CLK("omap_i2c.1", "ick", &i2c1_ick, CK_242X),
1830 CLK("i2c_omap.1", "fck", &i2c1_fck, CK_242X), 1885 CLK("omap_i2c.1", "fck", &i2c1_fck, CK_242X),
1831 CLK("i2c_omap.2", "ick", &i2c2_ick, CK_242X), 1886 CLK("omap_i2c.2", "ick", &i2c2_ick, CK_242X),
1832 CLK("i2c_omap.2", "fck", &i2c2_fck, CK_242X), 1887 CLK("omap_i2c.2", "fck", &i2c2_fck, CK_242X),
1833 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_242X), 1888 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_242X),
1834 CLK(NULL, "sdma_fck", &sdma_fck, CK_242X), 1889 CLK(NULL, "sdma_fck", &sdma_fck, CK_242X),
1835 CLK(NULL, "sdma_ick", &sdma_ick, CK_242X), 1890 CLK(NULL, "sdma_ick", &sdma_ick, CK_242X),
1891 CLK(NULL, "sdrc_ick", &sdrc_ick, CK_242X),
1836 CLK(NULL, "vlynq_ick", &vlynq_ick, CK_242X), 1892 CLK(NULL, "vlynq_ick", &vlynq_ick, CK_242X),
1837 CLK(NULL, "vlynq_fck", &vlynq_fck, CK_242X), 1893 CLK(NULL, "vlynq_fck", &vlynq_fck, CK_242X),
1838 CLK(NULL, "des_ick", &des_ick, CK_242X), 1894 CLK(NULL, "des_ick", &des_ick, CK_242X),
1839 CLK("omap-sham", "ick", &sha_ick, CK_242X), 1895 CLK("omap-sham", "ick", &sha_ick, CK_242X),
1840 CLK("omap_rng", "ick", &rng_ick, CK_242X), 1896 CLK("omap_rng", "ick", &rng_ick, CK_242X),
1841 CLK(NULL, "aes_ick", &aes_ick, CK_242X), 1897 CLK("omap-aes", "ick", &aes_ick, CK_242X),
1842 CLK(NULL, "pka_ick", &pka_ick, CK_242X), 1898 CLK(NULL, "pka_ick", &pka_ick, CK_242X),
1843 CLK(NULL, "usb_fck", &usb_fck, CK_242X), 1899 CLK(NULL, "usb_fck", &usb_fck, CK_242X),
1844 CLK("musb_hdrc", "fck", &osc_ck, CK_242X), 1900 CLK("musb-hdrc", "fck", &osc_ck, CK_242X),
1845}; 1901};
1846 1902
1847/* 1903/*
@@ -1877,6 +1933,9 @@ int __init omap2420_clk_init(void)
1877 omap2_init_clk_clkdm(c->lk.clk); 1933 omap2_init_clk_clkdm(c->lk.clk);
1878 } 1934 }
1879 1935
1936 /* Disable autoidle on all clocks; let the PM code enable it later */
1937 omap_clk_disable_autoidle_all();
1938
1880 /* Check the MPU rate set by bootloader */ 1939 /* Check the MPU rate set by bootloader */
1881 clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); 1940 clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);
1882 for (prcm = rate_table; prcm->mpu_speed; prcm++) { 1941 for (prcm = rate_table; prcm->mpu_speed; prcm++) {
diff --git a/arch/arm/mach-omap2/clock2430.c b/arch/arm/mach-omap2/clock2430.c
index 44d0cccc51a9..d87bc9cb2a36 100644
--- a/arch/arm/mach-omap2/clock2430.c
+++ b/arch/arm/mach-omap2/clock2430.c
@@ -25,7 +25,7 @@
25 25
26#include "clock.h" 26#include "clock.h"
27#include "clock2xxx.h" 27#include "clock2xxx.h"
28#include "cm.h" 28#include "cm2xxx_3xxx.h"
29#include "cm-regbits-24xx.h" 29#include "cm-regbits-24xx.h"
30 30
31/** 31/**
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
index b33118fb6a87..0c79d39e3021 100644
--- a/arch/arm/mach-omap2/clock2430_data.c
+++ b/arch/arm/mach-omap2/clock2430_data.c
@@ -1,12 +1,12 @@
1/* 1/*
2 * linux/arch/arm/mach-omap2/clock2430_data.c 2 * OMAP2430 clock data
3 * 3 *
4 * Copyright (C) 2005-2009 Texas Instruments, Inc. 4 * Copyright (C) 2005-2009 Texas Instruments, Inc.
5 * Copyright (C) 2004-2010 Nokia Corporation 5 * Copyright (C) 2004-2011 Nokia Corporation
6 * 6 *
7 * Contacts: 7 * Contacts:
8 * Richard Woodruff <r-woodruff2@ti.com> 8 * Richard Woodruff <r-woodruff2@ti.com>
9 * Paul Walmsley 9 * Paul Walmsley
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as 12 * it under the terms of the GNU General Public License version 2 as
@@ -22,29 +22,27 @@
22#include "clock.h" 22#include "clock.h"
23#include "clock2xxx.h" 23#include "clock2xxx.h"
24#include "opp2xxx.h" 24#include "opp2xxx.h"
25#include "prm.h" 25#include "cm2xxx_3xxx.h"
26#include "cm.h" 26#include "prm2xxx_3xxx.h"
27#include "prm-regbits-24xx.h" 27#include "prm-regbits-24xx.h"
28#include "cm-regbits-24xx.h" 28#include "cm-regbits-24xx.h"
29#include "sdrc.h" 29#include "sdrc.h"
30#include "control.h"
30 31
31#define OMAP_CM_REGADDR OMAP2430_CM_REGADDR 32#define OMAP_CM_REGADDR OMAP2430_CM_REGADDR
32 33
33/* 34/*
34 * 2430 clock tree. 35 * 2430 clock tree.
35 * 36 *
36 * NOTE:In many cases here we are assigning a 'default' parent. In many 37 * NOTE:In many cases here we are assigning a 'default' parent. In
37 * cases the parent is selectable. The get/set parent calls will also 38 * many cases the parent is selectable. The set parent calls will
38 * switch sources. 39 * also switch sources.
39 *
40 * Many some clocks say always_enabled, but they can be auto idled for
41 * power savings. They will always be available upon clock request.
42 * 40 *
43 * Several sources are given initial rates which may be wrong, this will 41 * Several sources are given initial rates which may be wrong, this will
44 * be fixed up in the init func. 42 * be fixed up in the init func.
45 * 43 *
46 * Things are broadly separated below by clock domains. It is 44 * Things are broadly separated below by clock domains. It is
47 * noteworthy that most periferals have dependencies on multiple clock 45 * noteworthy that most peripherals have dependencies on multiple clock
48 * domains. Many get their interface clocks from the L4 domain, but get 46 * domains. Many get their interface clocks from the L4 domain, but get
49 * functional clocks from fixed sources or other core domain derived 47 * functional clocks from fixed sources or other core domain derived
50 * clocks. 48 * clocks.
@@ -54,7 +52,7 @@
54static struct clk func_32k_ck = { 52static struct clk func_32k_ck = {
55 .name = "func_32k_ck", 53 .name = "func_32k_ck",
56 .ops = &clkops_null, 54 .ops = &clkops_null,
57 .rate = 32000, 55 .rate = 32768,
58 .clkdm_name = "wkup_clkdm", 56 .clkdm_name = "wkup_clkdm",
59}; 57};
60 58
@@ -89,6 +87,12 @@ static struct clk alt_ck = { /* Typical 54M or 48M, may not exist */
89 .clkdm_name = "wkup_clkdm", 87 .clkdm_name = "wkup_clkdm",
90}; 88};
91 89
90/* Optional external clock input for McBSP CLKS */
91static struct clk mcbsp_clks = {
92 .name = "mcbsp_clks",
93 .ops = &clkops_null,
94};
95
92/* 96/*
93 * Analog domain root source clocks 97 * Analog domain root source clocks
94 */ 98 */
@@ -109,7 +113,6 @@ static struct dpll_data dpll_dd = {
109 .max_multiplier = 1023, 113 .max_multiplier = 1023,
110 .min_divider = 1, 114 .min_divider = 1,
111 .max_divider = 16, 115 .max_divider = 16,
112 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
113}; 116};
114 117
115/* 118/*
@@ -118,7 +121,7 @@ static struct dpll_data dpll_dd = {
118 */ 121 */
119static struct clk dpll_ck = { 122static struct clk dpll_ck = {
120 .name = "dpll_ck", 123 .name = "dpll_ck",
121 .ops = &clkops_null, 124 .ops = &clkops_omap2xxx_dpll_ops,
122 .parent = &sys_ck, /* Can be func_32k also */ 125 .parent = &sys_ck, /* Can be func_32k also */
123 .dpll_data = &dpll_dd, 126 .dpll_data = &dpll_dd,
124 .clkdm_name = "wkup_clkdm", 127 .clkdm_name = "wkup_clkdm",
@@ -427,37 +430,23 @@ static struct clk dsp_fck = {
427 .recalc = &omap2_clksel_recalc, 430 .recalc = &omap2_clksel_recalc,
428}; 431};
429 432
430/* DSP interface clock */ 433static const struct clksel dsp_ick_clksel[] = {
431static const struct clksel_rate dsp_irate_ick_rates[] = { 434 { .parent = &dsp_fck, .rates = dsp_ick_rates },
432 { .div = 1, .val = 1, .flags = RATE_IN_24XX },
433 { .div = 2, .val = 2, .flags = RATE_IN_24XX },
434 { .div = 3, .val = 3, .flags = RATE_IN_243X },
435 { .div = 0 },
436};
437
438static const struct clksel dsp_irate_ick_clksel[] = {
439 { .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
440 { .parent = NULL } 435 { .parent = NULL }
441}; 436};
442 437
443/* This clock does not exist as such in the TRM. */
444static struct clk dsp_irate_ick = {
445 .name = "dsp_irate_ick",
446 .ops = &clkops_null,
447 .parent = &dsp_fck,
448 .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
449 .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
450 .clksel = dsp_irate_ick_clksel,
451 .recalc = &omap2_clksel_recalc,
452};
453
454/* 2430 only - EN_DSP controls both dsp fclk and iclk on 2430 */ 438/* 2430 only - EN_DSP controls both dsp fclk and iclk on 2430 */
455static struct clk iva2_1_ick = { 439static struct clk iva2_1_ick = {
456 .name = "iva2_1_ick", 440 .name = "iva2_1_ick",
457 .ops = &clkops_omap2_dflt_wait, 441 .ops = &clkops_omap2_dflt_wait,
458 .parent = &dsp_irate_ick, 442 .parent = &dsp_fck,
443 .clkdm_name = "dsp_clkdm",
459 .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN), 444 .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
460 .enable_bit = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT, 445 .enable_bit = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT,
446 .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
447 .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
448 .clksel = dsp_ick_clksel,
449 .recalc = &omap2_clksel_recalc,
461}; 450};
462 451
463/* 452/*
@@ -518,7 +507,7 @@ static const struct clksel usb_l4_ick_clksel[] = {
518/* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */ 507/* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */
519static struct clk usb_l4_ick = { /* FS-USB interface clock */ 508static struct clk usb_l4_ick = { /* FS-USB interface clock */
520 .name = "usb_l4_ick", 509 .name = "usb_l4_ick",
521 .ops = &clkops_omap2_dflt_wait, 510 .ops = &clkops_omap2_iclk_dflt_wait,
522 .parent = &core_l3_ck, 511 .parent = &core_l3_ck,
523 .clkdm_name = "core_l4_clkdm", 512 .clkdm_name = "core_l4_clkdm",
524 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 513 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -599,7 +588,7 @@ static struct clk ssi_ssr_sst_fck = {
599 */ 588 */
600static struct clk ssi_l4_ick = { 589static struct clk ssi_l4_ick = {
601 .name = "ssi_l4_ick", 590 .name = "ssi_l4_ick",
602 .ops = &clkops_omap2_dflt_wait, 591 .ops = &clkops_omap2_iclk_dflt_wait,
603 .parent = &l4_ck, 592 .parent = &l4_ck,
604 .clkdm_name = "core_l4_clkdm", 593 .clkdm_name = "core_l4_clkdm",
605 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 594 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -654,6 +643,7 @@ static struct clk gfx_2d_fck = {
654 .recalc = &omap2_clksel_recalc, 643 .recalc = &omap2_clksel_recalc,
655}; 644};
656 645
646/* This interface clock does not have a CM_AUTOIDLE bit */
657static struct clk gfx_ick = { 647static struct clk gfx_ick = {
658 .name = "gfx_ick", /* From l3 */ 648 .name = "gfx_ick", /* From l3 */
659 .ops = &clkops_omap2_dflt_wait, 649 .ops = &clkops_omap2_dflt_wait,
@@ -686,7 +676,7 @@ static const struct clksel mdm_ick_clksel[] = {
686 676
687static struct clk mdm_ick = { /* used both as a ick and fck */ 677static struct clk mdm_ick = { /* used both as a ick and fck */
688 .name = "mdm_ick", 678 .name = "mdm_ick",
689 .ops = &clkops_omap2_dflt_wait, 679 .ops = &clkops_omap2_iclk_dflt_wait,
690 .parent = &core_ck, 680 .parent = &core_ck,
691 .clkdm_name = "mdm_clkdm", 681 .clkdm_name = "mdm_clkdm",
692 .enable_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_ICLKEN), 682 .enable_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_ICLKEN),
@@ -699,7 +689,7 @@ static struct clk mdm_ick = { /* used both as a ick and fck */
699 689
700static struct clk mdm_osc_ck = { 690static struct clk mdm_osc_ck = {
701 .name = "mdm_osc_ck", 691 .name = "mdm_osc_ck",
702 .ops = &clkops_omap2_dflt_wait, 692 .ops = &clkops_omap2_mdmclk_dflt_wait,
703 .parent = &osc_ck, 693 .parent = &osc_ck,
704 .clkdm_name = "mdm_clkdm", 694 .clkdm_name = "mdm_clkdm",
705 .enable_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_FCLKEN), 695 .enable_reg = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_FCLKEN),
@@ -744,7 +734,7 @@ static const struct clksel dss1_fck_clksel[] = {
744 734
745static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */ 735static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */
746 .name = "dss_ick", 736 .name = "dss_ick",
747 .ops = &clkops_omap2_dflt, 737 .ops = &clkops_omap2_iclk_dflt,
748 .parent = &l4_ck, /* really both l3 and l4 */ 738 .parent = &l4_ck, /* really both l3 and l4 */
749 .clkdm_name = "dss_clkdm", 739 .clkdm_name = "dss_clkdm",
750 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 740 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -793,7 +783,7 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
793 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), 783 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
794 .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK, 784 .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK,
795 .clksel = dss2_fck_clksel, 785 .clksel = dss2_fck_clksel,
796 .recalc = &followparent_recalc, 786 .recalc = &omap2_clksel_recalc,
797}; 787};
798 788
799static struct clk dss_54m_fck = { /* Alt clk used in power management */ 789static struct clk dss_54m_fck = { /* Alt clk used in power management */
@@ -806,6 +796,14 @@ static struct clk dss_54m_fck = { /* Alt clk used in power management */
806 .recalc = &followparent_recalc, 796 .recalc = &followparent_recalc,
807}; 797};
808 798
799static struct clk wu_l4_ick = {
800 .name = "wu_l4_ick",
801 .ops = &clkops_null,
802 .parent = &sys_ck,
803 .clkdm_name = "wkup_clkdm",
804 .recalc = &followparent_recalc,
805};
806
809/* 807/*
810 * CORE power domain ICLK & FCLK defines. 808 * CORE power domain ICLK & FCLK defines.
811 * Many of the these can have more than one possible parent. Entries 809 * Many of the these can have more than one possible parent. Entries
@@ -826,9 +824,9 @@ static const struct clksel omap24xx_gpt_clksel[] = {
826 824
827static struct clk gpt1_ick = { 825static struct clk gpt1_ick = {
828 .name = "gpt1_ick", 826 .name = "gpt1_ick",
829 .ops = &clkops_omap2_dflt_wait, 827 .ops = &clkops_omap2_iclk_dflt_wait,
830 .parent = &l4_ck, 828 .parent = &wu_l4_ick,
831 .clkdm_name = "core_l4_clkdm", 829 .clkdm_name = "wkup_clkdm",
832 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 830 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
833 .enable_bit = OMAP24XX_EN_GPT1_SHIFT, 831 .enable_bit = OMAP24XX_EN_GPT1_SHIFT,
834 .recalc = &followparent_recalc, 832 .recalc = &followparent_recalc,
@@ -852,7 +850,7 @@ static struct clk gpt1_fck = {
852 850
853static struct clk gpt2_ick = { 851static struct clk gpt2_ick = {
854 .name = "gpt2_ick", 852 .name = "gpt2_ick",
855 .ops = &clkops_omap2_dflt_wait, 853 .ops = &clkops_omap2_iclk_dflt_wait,
856 .parent = &l4_ck, 854 .parent = &l4_ck,
857 .clkdm_name = "core_l4_clkdm", 855 .clkdm_name = "core_l4_clkdm",
858 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 856 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -876,7 +874,7 @@ static struct clk gpt2_fck = {
876 874
877static struct clk gpt3_ick = { 875static struct clk gpt3_ick = {
878 .name = "gpt3_ick", 876 .name = "gpt3_ick",
879 .ops = &clkops_omap2_dflt_wait, 877 .ops = &clkops_omap2_iclk_dflt_wait,
880 .parent = &l4_ck, 878 .parent = &l4_ck,
881 .clkdm_name = "core_l4_clkdm", 879 .clkdm_name = "core_l4_clkdm",
882 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 880 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -900,7 +898,7 @@ static struct clk gpt3_fck = {
900 898
901static struct clk gpt4_ick = { 899static struct clk gpt4_ick = {
902 .name = "gpt4_ick", 900 .name = "gpt4_ick",
903 .ops = &clkops_omap2_dflt_wait, 901 .ops = &clkops_omap2_iclk_dflt_wait,
904 .parent = &l4_ck, 902 .parent = &l4_ck,
905 .clkdm_name = "core_l4_clkdm", 903 .clkdm_name = "core_l4_clkdm",
906 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 904 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -924,7 +922,7 @@ static struct clk gpt4_fck = {
924 922
925static struct clk gpt5_ick = { 923static struct clk gpt5_ick = {
926 .name = "gpt5_ick", 924 .name = "gpt5_ick",
927 .ops = &clkops_omap2_dflt_wait, 925 .ops = &clkops_omap2_iclk_dflt_wait,
928 .parent = &l4_ck, 926 .parent = &l4_ck,
929 .clkdm_name = "core_l4_clkdm", 927 .clkdm_name = "core_l4_clkdm",
930 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 928 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -948,7 +946,7 @@ static struct clk gpt5_fck = {
948 946
949static struct clk gpt6_ick = { 947static struct clk gpt6_ick = {
950 .name = "gpt6_ick", 948 .name = "gpt6_ick",
951 .ops = &clkops_omap2_dflt_wait, 949 .ops = &clkops_omap2_iclk_dflt_wait,
952 .parent = &l4_ck, 950 .parent = &l4_ck,
953 .clkdm_name = "core_l4_clkdm", 951 .clkdm_name = "core_l4_clkdm",
954 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 952 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -972,8 +970,9 @@ static struct clk gpt6_fck = {
972 970
973static struct clk gpt7_ick = { 971static struct clk gpt7_ick = {
974 .name = "gpt7_ick", 972 .name = "gpt7_ick",
975 .ops = &clkops_omap2_dflt_wait, 973 .ops = &clkops_omap2_iclk_dflt_wait,
976 .parent = &l4_ck, 974 .parent = &l4_ck,
975 .clkdm_name = "core_l4_clkdm",
977 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 976 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
978 .enable_bit = OMAP24XX_EN_GPT7_SHIFT, 977 .enable_bit = OMAP24XX_EN_GPT7_SHIFT,
979 .recalc = &followparent_recalc, 978 .recalc = &followparent_recalc,
@@ -995,7 +994,7 @@ static struct clk gpt7_fck = {
995 994
996static struct clk gpt8_ick = { 995static struct clk gpt8_ick = {
997 .name = "gpt8_ick", 996 .name = "gpt8_ick",
998 .ops = &clkops_omap2_dflt_wait, 997 .ops = &clkops_omap2_iclk_dflt_wait,
999 .parent = &l4_ck, 998 .parent = &l4_ck,
1000 .clkdm_name = "core_l4_clkdm", 999 .clkdm_name = "core_l4_clkdm",
1001 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1000 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1019,7 +1018,7 @@ static struct clk gpt8_fck = {
1019 1018
1020static struct clk gpt9_ick = { 1019static struct clk gpt9_ick = {
1021 .name = "gpt9_ick", 1020 .name = "gpt9_ick",
1022 .ops = &clkops_omap2_dflt_wait, 1021 .ops = &clkops_omap2_iclk_dflt_wait,
1023 .parent = &l4_ck, 1022 .parent = &l4_ck,
1024 .clkdm_name = "core_l4_clkdm", 1023 .clkdm_name = "core_l4_clkdm",
1025 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1024 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1043,7 +1042,7 @@ static struct clk gpt9_fck = {
1043 1042
1044static struct clk gpt10_ick = { 1043static struct clk gpt10_ick = {
1045 .name = "gpt10_ick", 1044 .name = "gpt10_ick",
1046 .ops = &clkops_omap2_dflt_wait, 1045 .ops = &clkops_omap2_iclk_dflt_wait,
1047 .parent = &l4_ck, 1046 .parent = &l4_ck,
1048 .clkdm_name = "core_l4_clkdm", 1047 .clkdm_name = "core_l4_clkdm",
1049 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1048 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1067,7 +1066,7 @@ static struct clk gpt10_fck = {
1067 1066
1068static struct clk gpt11_ick = { 1067static struct clk gpt11_ick = {
1069 .name = "gpt11_ick", 1068 .name = "gpt11_ick",
1070 .ops = &clkops_omap2_dflt_wait, 1069 .ops = &clkops_omap2_iclk_dflt_wait,
1071 .parent = &l4_ck, 1070 .parent = &l4_ck,
1072 .clkdm_name = "core_l4_clkdm", 1071 .clkdm_name = "core_l4_clkdm",
1073 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1072 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1091,7 +1090,7 @@ static struct clk gpt11_fck = {
1091 1090
1092static struct clk gpt12_ick = { 1091static struct clk gpt12_ick = {
1093 .name = "gpt12_ick", 1092 .name = "gpt12_ick",
1094 .ops = &clkops_omap2_dflt_wait, 1093 .ops = &clkops_omap2_iclk_dflt_wait,
1095 .parent = &l4_ck, 1094 .parent = &l4_ck,
1096 .clkdm_name = "core_l4_clkdm", 1095 .clkdm_name = "core_l4_clkdm",
1097 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1096 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1115,7 +1114,7 @@ static struct clk gpt12_fck = {
1115 1114
1116static struct clk mcbsp1_ick = { 1115static struct clk mcbsp1_ick = {
1117 .name = "mcbsp1_ick", 1116 .name = "mcbsp1_ick",
1118 .ops = &clkops_omap2_dflt_wait, 1117 .ops = &clkops_omap2_iclk_dflt_wait,
1119 .parent = &l4_ck, 1118 .parent = &l4_ck,
1120 .clkdm_name = "core_l4_clkdm", 1119 .clkdm_name = "core_l4_clkdm",
1121 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1120 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1123,19 +1122,39 @@ static struct clk mcbsp1_ick = {
1123 .recalc = &followparent_recalc, 1122 .recalc = &followparent_recalc,
1124}; 1123};
1125 1124
1125static const struct clksel_rate common_mcbsp_96m_rates[] = {
1126 { .div = 1, .val = 0, .flags = RATE_IN_24XX },
1127 { .div = 0 }
1128};
1129
1130static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
1131 { .div = 1, .val = 1, .flags = RATE_IN_24XX },
1132 { .div = 0 }
1133};
1134
1135static const struct clksel mcbsp_fck_clksel[] = {
1136 { .parent = &func_96m_ck, .rates = common_mcbsp_96m_rates },
1137 { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
1138 { .parent = NULL }
1139};
1140
1126static struct clk mcbsp1_fck = { 1141static struct clk mcbsp1_fck = {
1127 .name = "mcbsp1_fck", 1142 .name = "mcbsp1_fck",
1128 .ops = &clkops_omap2_dflt_wait, 1143 .ops = &clkops_omap2_dflt_wait,
1129 .parent = &func_96m_ck, 1144 .parent = &func_96m_ck,
1145 .init = &omap2_init_clksel_parent,
1130 .clkdm_name = "core_l4_clkdm", 1146 .clkdm_name = "core_l4_clkdm",
1131 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1147 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1132 .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT, 1148 .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT,
1133 .recalc = &followparent_recalc, 1149 .clksel_reg = OMAP243X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1150 .clksel_mask = OMAP2_MCBSP1_CLKS_MASK,
1151 .clksel = mcbsp_fck_clksel,
1152 .recalc = &omap2_clksel_recalc,
1134}; 1153};
1135 1154
1136static struct clk mcbsp2_ick = { 1155static struct clk mcbsp2_ick = {
1137 .name = "mcbsp2_ick", 1156 .name = "mcbsp2_ick",
1138 .ops = &clkops_omap2_dflt_wait, 1157 .ops = &clkops_omap2_iclk_dflt_wait,
1139 .parent = &l4_ck, 1158 .parent = &l4_ck,
1140 .clkdm_name = "core_l4_clkdm", 1159 .clkdm_name = "core_l4_clkdm",
1141 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1160 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1147,15 +1166,19 @@ static struct clk mcbsp2_fck = {
1147 .name = "mcbsp2_fck", 1166 .name = "mcbsp2_fck",
1148 .ops = &clkops_omap2_dflt_wait, 1167 .ops = &clkops_omap2_dflt_wait,
1149 .parent = &func_96m_ck, 1168 .parent = &func_96m_ck,
1169 .init = &omap2_init_clksel_parent,
1150 .clkdm_name = "core_l4_clkdm", 1170 .clkdm_name = "core_l4_clkdm",
1151 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1171 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1152 .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT, 1172 .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT,
1153 .recalc = &followparent_recalc, 1173 .clksel_reg = OMAP243X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1174 .clksel_mask = OMAP2_MCBSP2_CLKS_MASK,
1175 .clksel = mcbsp_fck_clksel,
1176 .recalc = &omap2_clksel_recalc,
1154}; 1177};
1155 1178
1156static struct clk mcbsp3_ick = { 1179static struct clk mcbsp3_ick = {
1157 .name = "mcbsp3_ick", 1180 .name = "mcbsp3_ick",
1158 .ops = &clkops_omap2_dflt_wait, 1181 .ops = &clkops_omap2_iclk_dflt_wait,
1159 .parent = &l4_ck, 1182 .parent = &l4_ck,
1160 .clkdm_name = "core_l4_clkdm", 1183 .clkdm_name = "core_l4_clkdm",
1161 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1184 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1167,15 +1190,19 @@ static struct clk mcbsp3_fck = {
1167 .name = "mcbsp3_fck", 1190 .name = "mcbsp3_fck",
1168 .ops = &clkops_omap2_dflt_wait, 1191 .ops = &clkops_omap2_dflt_wait,
1169 .parent = &func_96m_ck, 1192 .parent = &func_96m_ck,
1193 .init = &omap2_init_clksel_parent,
1170 .clkdm_name = "core_l4_clkdm", 1194 .clkdm_name = "core_l4_clkdm",
1171 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), 1195 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1172 .enable_bit = OMAP2430_EN_MCBSP3_SHIFT, 1196 .enable_bit = OMAP2430_EN_MCBSP3_SHIFT,
1173 .recalc = &followparent_recalc, 1197 .clksel_reg = OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1198 .clksel_mask = OMAP2_MCBSP3_CLKS_MASK,
1199 .clksel = mcbsp_fck_clksel,
1200 .recalc = &omap2_clksel_recalc,
1174}; 1201};
1175 1202
1176static struct clk mcbsp4_ick = { 1203static struct clk mcbsp4_ick = {
1177 .name = "mcbsp4_ick", 1204 .name = "mcbsp4_ick",
1178 .ops = &clkops_omap2_dflt_wait, 1205 .ops = &clkops_omap2_iclk_dflt_wait,
1179 .parent = &l4_ck, 1206 .parent = &l4_ck,
1180 .clkdm_name = "core_l4_clkdm", 1207 .clkdm_name = "core_l4_clkdm",
1181 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1208 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1187,15 +1214,19 @@ static struct clk mcbsp4_fck = {
1187 .name = "mcbsp4_fck", 1214 .name = "mcbsp4_fck",
1188 .ops = &clkops_omap2_dflt_wait, 1215 .ops = &clkops_omap2_dflt_wait,
1189 .parent = &func_96m_ck, 1216 .parent = &func_96m_ck,
1217 .init = &omap2_init_clksel_parent,
1190 .clkdm_name = "core_l4_clkdm", 1218 .clkdm_name = "core_l4_clkdm",
1191 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), 1219 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1192 .enable_bit = OMAP2430_EN_MCBSP4_SHIFT, 1220 .enable_bit = OMAP2430_EN_MCBSP4_SHIFT,
1193 .recalc = &followparent_recalc, 1221 .clksel_reg = OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1222 .clksel_mask = OMAP2_MCBSP4_CLKS_MASK,
1223 .clksel = mcbsp_fck_clksel,
1224 .recalc = &omap2_clksel_recalc,
1194}; 1225};
1195 1226
1196static struct clk mcbsp5_ick = { 1227static struct clk mcbsp5_ick = {
1197 .name = "mcbsp5_ick", 1228 .name = "mcbsp5_ick",
1198 .ops = &clkops_omap2_dflt_wait, 1229 .ops = &clkops_omap2_iclk_dflt_wait,
1199 .parent = &l4_ck, 1230 .parent = &l4_ck,
1200 .clkdm_name = "core_l4_clkdm", 1231 .clkdm_name = "core_l4_clkdm",
1201 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1232 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1207,15 +1238,19 @@ static struct clk mcbsp5_fck = {
1207 .name = "mcbsp5_fck", 1238 .name = "mcbsp5_fck",
1208 .ops = &clkops_omap2_dflt_wait, 1239 .ops = &clkops_omap2_dflt_wait,
1209 .parent = &func_96m_ck, 1240 .parent = &func_96m_ck,
1241 .init = &omap2_init_clksel_parent,
1210 .clkdm_name = "core_l4_clkdm", 1242 .clkdm_name = "core_l4_clkdm",
1211 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), 1243 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1212 .enable_bit = OMAP2430_EN_MCBSP5_SHIFT, 1244 .enable_bit = OMAP2430_EN_MCBSP5_SHIFT,
1213 .recalc = &followparent_recalc, 1245 .clksel_reg = OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1246 .clksel_mask = OMAP2_MCBSP5_CLKS_MASK,
1247 .clksel = mcbsp_fck_clksel,
1248 .recalc = &omap2_clksel_recalc,
1214}; 1249};
1215 1250
1216static struct clk mcspi1_ick = { 1251static struct clk mcspi1_ick = {
1217 .name = "mcspi1_ick", 1252 .name = "mcspi1_ick",
1218 .ops = &clkops_omap2_dflt_wait, 1253 .ops = &clkops_omap2_iclk_dflt_wait,
1219 .parent = &l4_ck, 1254 .parent = &l4_ck,
1220 .clkdm_name = "core_l4_clkdm", 1255 .clkdm_name = "core_l4_clkdm",
1221 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1256 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1235,7 +1270,7 @@ static struct clk mcspi1_fck = {
1235 1270
1236static struct clk mcspi2_ick = { 1271static struct clk mcspi2_ick = {
1237 .name = "mcspi2_ick", 1272 .name = "mcspi2_ick",
1238 .ops = &clkops_omap2_dflt_wait, 1273 .ops = &clkops_omap2_iclk_dflt_wait,
1239 .parent = &l4_ck, 1274 .parent = &l4_ck,
1240 .clkdm_name = "core_l4_clkdm", 1275 .clkdm_name = "core_l4_clkdm",
1241 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1276 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1255,7 +1290,7 @@ static struct clk mcspi2_fck = {
1255 1290
1256static struct clk mcspi3_ick = { 1291static struct clk mcspi3_ick = {
1257 .name = "mcspi3_ick", 1292 .name = "mcspi3_ick",
1258 .ops = &clkops_omap2_dflt_wait, 1293 .ops = &clkops_omap2_iclk_dflt_wait,
1259 .parent = &l4_ck, 1294 .parent = &l4_ck,
1260 .clkdm_name = "core_l4_clkdm", 1295 .clkdm_name = "core_l4_clkdm",
1261 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1296 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1275,7 +1310,7 @@ static struct clk mcspi3_fck = {
1275 1310
1276static struct clk uart1_ick = { 1311static struct clk uart1_ick = {
1277 .name = "uart1_ick", 1312 .name = "uart1_ick",
1278 .ops = &clkops_omap2_dflt_wait, 1313 .ops = &clkops_omap2_iclk_dflt_wait,
1279 .parent = &l4_ck, 1314 .parent = &l4_ck,
1280 .clkdm_name = "core_l4_clkdm", 1315 .clkdm_name = "core_l4_clkdm",
1281 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1316 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1295,7 +1330,7 @@ static struct clk uart1_fck = {
1295 1330
1296static struct clk uart2_ick = { 1331static struct clk uart2_ick = {
1297 .name = "uart2_ick", 1332 .name = "uart2_ick",
1298 .ops = &clkops_omap2_dflt_wait, 1333 .ops = &clkops_omap2_iclk_dflt_wait,
1299 .parent = &l4_ck, 1334 .parent = &l4_ck,
1300 .clkdm_name = "core_l4_clkdm", 1335 .clkdm_name = "core_l4_clkdm",
1301 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1336 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1315,7 +1350,7 @@ static struct clk uart2_fck = {
1315 1350
1316static struct clk uart3_ick = { 1351static struct clk uart3_ick = {
1317 .name = "uart3_ick", 1352 .name = "uart3_ick",
1318 .ops = &clkops_omap2_dflt_wait, 1353 .ops = &clkops_omap2_iclk_dflt_wait,
1319 .parent = &l4_ck, 1354 .parent = &l4_ck,
1320 .clkdm_name = "core_l4_clkdm", 1355 .clkdm_name = "core_l4_clkdm",
1321 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1356 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1335,9 +1370,9 @@ static struct clk uart3_fck = {
1335 1370
1336static struct clk gpios_ick = { 1371static struct clk gpios_ick = {
1337 .name = "gpios_ick", 1372 .name = "gpios_ick",
1338 .ops = &clkops_omap2_dflt_wait, 1373 .ops = &clkops_omap2_iclk_dflt_wait,
1339 .parent = &l4_ck, 1374 .parent = &wu_l4_ick,
1340 .clkdm_name = "core_l4_clkdm", 1375 .clkdm_name = "wkup_clkdm",
1341 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1376 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1342 .enable_bit = OMAP24XX_EN_GPIOS_SHIFT, 1377 .enable_bit = OMAP24XX_EN_GPIOS_SHIFT,
1343 .recalc = &followparent_recalc, 1378 .recalc = &followparent_recalc,
@@ -1355,9 +1390,9 @@ static struct clk gpios_fck = {
1355 1390
1356static struct clk mpu_wdt_ick = { 1391static struct clk mpu_wdt_ick = {
1357 .name = "mpu_wdt_ick", 1392 .name = "mpu_wdt_ick",
1358 .ops = &clkops_omap2_dflt_wait, 1393 .ops = &clkops_omap2_iclk_dflt_wait,
1359 .parent = &l4_ck, 1394 .parent = &wu_l4_ick,
1360 .clkdm_name = "core_l4_clkdm", 1395 .clkdm_name = "wkup_clkdm",
1361 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1396 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1362 .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT, 1397 .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
1363 .recalc = &followparent_recalc, 1398 .recalc = &followparent_recalc,
@@ -1375,10 +1410,10 @@ static struct clk mpu_wdt_fck = {
1375 1410
1376static struct clk sync_32k_ick = { 1411static struct clk sync_32k_ick = {
1377 .name = "sync_32k_ick", 1412 .name = "sync_32k_ick",
1378 .ops = &clkops_omap2_dflt_wait, 1413 .ops = &clkops_omap2_iclk_dflt_wait,
1379 .parent = &l4_ck,
1380 .flags = ENABLE_ON_INIT, 1414 .flags = ENABLE_ON_INIT,
1381 .clkdm_name = "core_l4_clkdm", 1415 .parent = &wu_l4_ick,
1416 .clkdm_name = "wkup_clkdm",
1382 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1417 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1383 .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT, 1418 .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT,
1384 .recalc = &followparent_recalc, 1419 .recalc = &followparent_recalc,
@@ -1386,9 +1421,9 @@ static struct clk sync_32k_ick = {
1386 1421
1387static struct clk wdt1_ick = { 1422static struct clk wdt1_ick = {
1388 .name = "wdt1_ick", 1423 .name = "wdt1_ick",
1389 .ops = &clkops_omap2_dflt_wait, 1424 .ops = &clkops_omap2_iclk_dflt_wait,
1390 .parent = &l4_ck, 1425 .parent = &wu_l4_ick,
1391 .clkdm_name = "core_l4_clkdm", 1426 .clkdm_name = "wkup_clkdm",
1392 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1427 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1393 .enable_bit = OMAP24XX_EN_WDT1_SHIFT, 1428 .enable_bit = OMAP24XX_EN_WDT1_SHIFT,
1394 .recalc = &followparent_recalc, 1429 .recalc = &followparent_recalc,
@@ -1396,10 +1431,10 @@ static struct clk wdt1_ick = {
1396 1431
1397static struct clk omapctrl_ick = { 1432static struct clk omapctrl_ick = {
1398 .name = "omapctrl_ick", 1433 .name = "omapctrl_ick",
1399 .ops = &clkops_omap2_dflt_wait, 1434 .ops = &clkops_omap2_iclk_dflt_wait,
1400 .parent = &l4_ck,
1401 .flags = ENABLE_ON_INIT, 1435 .flags = ENABLE_ON_INIT,
1402 .clkdm_name = "core_l4_clkdm", 1436 .parent = &wu_l4_ick,
1437 .clkdm_name = "wkup_clkdm",
1403 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1438 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1404 .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT, 1439 .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT,
1405 .recalc = &followparent_recalc, 1440 .recalc = &followparent_recalc,
@@ -1407,9 +1442,9 @@ static struct clk omapctrl_ick = {
1407 1442
1408static struct clk icr_ick = { 1443static struct clk icr_ick = {
1409 .name = "icr_ick", 1444 .name = "icr_ick",
1410 .ops = &clkops_omap2_dflt_wait, 1445 .ops = &clkops_omap2_iclk_dflt_wait,
1411 .parent = &l4_ck, 1446 .parent = &wu_l4_ick,
1412 .clkdm_name = "core_l4_clkdm", 1447 .clkdm_name = "wkup_clkdm",
1413 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1448 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1414 .enable_bit = OMAP2430_EN_ICR_SHIFT, 1449 .enable_bit = OMAP2430_EN_ICR_SHIFT,
1415 .recalc = &followparent_recalc, 1450 .recalc = &followparent_recalc,
@@ -1417,7 +1452,7 @@ static struct clk icr_ick = {
1417 1452
1418static struct clk cam_ick = { 1453static struct clk cam_ick = {
1419 .name = "cam_ick", 1454 .name = "cam_ick",
1420 .ops = &clkops_omap2_dflt, 1455 .ops = &clkops_omap2_iclk_dflt,
1421 .parent = &l4_ck, 1456 .parent = &l4_ck,
1422 .clkdm_name = "core_l4_clkdm", 1457 .clkdm_name = "core_l4_clkdm",
1423 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1458 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1442,7 +1477,7 @@ static struct clk cam_fck = {
1442 1477
1443static struct clk mailboxes_ick = { 1478static struct clk mailboxes_ick = {
1444 .name = "mailboxes_ick", 1479 .name = "mailboxes_ick",
1445 .ops = &clkops_omap2_dflt_wait, 1480 .ops = &clkops_omap2_iclk_dflt_wait,
1446 .parent = &l4_ck, 1481 .parent = &l4_ck,
1447 .clkdm_name = "core_l4_clkdm", 1482 .clkdm_name = "core_l4_clkdm",
1448 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1483 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1452,7 +1487,7 @@ static struct clk mailboxes_ick = {
1452 1487
1453static struct clk wdt4_ick = { 1488static struct clk wdt4_ick = {
1454 .name = "wdt4_ick", 1489 .name = "wdt4_ick",
1455 .ops = &clkops_omap2_dflt_wait, 1490 .ops = &clkops_omap2_iclk_dflt_wait,
1456 .parent = &l4_ck, 1491 .parent = &l4_ck,
1457 .clkdm_name = "core_l4_clkdm", 1492 .clkdm_name = "core_l4_clkdm",
1458 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1493 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1472,7 +1507,7 @@ static struct clk wdt4_fck = {
1472 1507
1473static struct clk mspro_ick = { 1508static struct clk mspro_ick = {
1474 .name = "mspro_ick", 1509 .name = "mspro_ick",
1475 .ops = &clkops_omap2_dflt_wait, 1510 .ops = &clkops_omap2_iclk_dflt_wait,
1476 .parent = &l4_ck, 1511 .parent = &l4_ck,
1477 .clkdm_name = "core_l4_clkdm", 1512 .clkdm_name = "core_l4_clkdm",
1478 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1513 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1492,7 +1527,7 @@ static struct clk mspro_fck = {
1492 1527
1493static struct clk fac_ick = { 1528static struct clk fac_ick = {
1494 .name = "fac_ick", 1529 .name = "fac_ick",
1495 .ops = &clkops_omap2_dflt_wait, 1530 .ops = &clkops_omap2_iclk_dflt_wait,
1496 .parent = &l4_ck, 1531 .parent = &l4_ck,
1497 .clkdm_name = "core_l4_clkdm", 1532 .clkdm_name = "core_l4_clkdm",
1498 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1533 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1512,7 +1547,7 @@ static struct clk fac_fck = {
1512 1547
1513static struct clk hdq_ick = { 1548static struct clk hdq_ick = {
1514 .name = "hdq_ick", 1549 .name = "hdq_ick",
1515 .ops = &clkops_omap2_dflt_wait, 1550 .ops = &clkops_omap2_iclk_dflt_wait,
1516 .parent = &l4_ck, 1551 .parent = &l4_ck,
1517 .clkdm_name = "core_l4_clkdm", 1552 .clkdm_name = "core_l4_clkdm",
1518 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1553 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1536,7 +1571,7 @@ static struct clk hdq_fck = {
1536 */ 1571 */
1537static struct clk i2c2_ick = { 1572static struct clk i2c2_ick = {
1538 .name = "i2c2_ick", 1573 .name = "i2c2_ick",
1539 .ops = &clkops_omap2_dflt_wait, 1574 .ops = &clkops_omap2_iclk_dflt_wait,
1540 .parent = &l4_ck, 1575 .parent = &l4_ck,
1541 .clkdm_name = "core_l4_clkdm", 1576 .clkdm_name = "core_l4_clkdm",
1542 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1577 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1560,7 +1595,7 @@ static struct clk i2chs2_fck = {
1560 */ 1595 */
1561static struct clk i2c1_ick = { 1596static struct clk i2c1_ick = {
1562 .name = "i2c1_ick", 1597 .name = "i2c1_ick",
1563 .ops = &clkops_omap2_dflt_wait, 1598 .ops = &clkops_omap2_iclk_dflt_wait,
1564 .parent = &l4_ck, 1599 .parent = &l4_ck,
1565 .clkdm_name = "core_l4_clkdm", 1600 .clkdm_name = "core_l4_clkdm",
1566 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1601 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1578,12 +1613,18 @@ static struct clk i2chs1_fck = {
1578 .recalc = &followparent_recalc, 1613 .recalc = &followparent_recalc,
1579}; 1614};
1580 1615
1616/*
1617 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1618 * accesses derived from this data.
1619 */
1581static struct clk gpmc_fck = { 1620static struct clk gpmc_fck = {
1582 .name = "gpmc_fck", 1621 .name = "gpmc_fck",
1583 .ops = &clkops_null, /* RMK: missing? */ 1622 .ops = &clkops_omap2_iclk_idle_only,
1584 .parent = &core_l3_ck, 1623 .parent = &core_l3_ck,
1585 .flags = ENABLE_ON_INIT, 1624 .flags = ENABLE_ON_INIT,
1586 .clkdm_name = "core_l3_clkdm", 1625 .clkdm_name = "core_l3_clkdm",
1626 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1627 .enable_bit = OMAP24XX_AUTO_GPMC_SHIFT,
1587 .recalc = &followparent_recalc, 1628 .recalc = &followparent_recalc,
1588}; 1629};
1589 1630
@@ -1595,20 +1636,26 @@ static struct clk sdma_fck = {
1595 .recalc = &followparent_recalc, 1636 .recalc = &followparent_recalc,
1596}; 1637};
1597 1638
1639/*
1640 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1641 * accesses derived from this data.
1642 */
1598static struct clk sdma_ick = { 1643static struct clk sdma_ick = {
1599 .name = "sdma_ick", 1644 .name = "sdma_ick",
1600 .ops = &clkops_null, /* RMK: missing? */ 1645 .ops = &clkops_omap2_iclk_idle_only,
1601 .parent = &l4_ck, 1646 .parent = &core_l3_ck,
1602 .clkdm_name = "core_l3_clkdm", 1647 .clkdm_name = "core_l3_clkdm",
1648 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1649 .enable_bit = OMAP24XX_AUTO_SDMA_SHIFT,
1603 .recalc = &followparent_recalc, 1650 .recalc = &followparent_recalc,
1604}; 1651};
1605 1652
1606static struct clk sdrc_ick = { 1653static struct clk sdrc_ick = {
1607 .name = "sdrc_ick", 1654 .name = "sdrc_ick",
1608 .ops = &clkops_omap2_dflt_wait, 1655 .ops = &clkops_omap2_iclk_idle_only,
1609 .parent = &l4_ck, 1656 .parent = &core_l3_ck,
1610 .flags = ENABLE_ON_INIT, 1657 .flags = ENABLE_ON_INIT,
1611 .clkdm_name = "core_l4_clkdm", 1658 .clkdm_name = "core_l3_clkdm",
1612 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), 1659 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1613 .enable_bit = OMAP2430_EN_SDRC_SHIFT, 1660 .enable_bit = OMAP2430_EN_SDRC_SHIFT,
1614 .recalc = &followparent_recalc, 1661 .recalc = &followparent_recalc,
@@ -1616,7 +1663,7 @@ static struct clk sdrc_ick = {
1616 1663
1617static struct clk des_ick = { 1664static struct clk des_ick = {
1618 .name = "des_ick", 1665 .name = "des_ick",
1619 .ops = &clkops_omap2_dflt_wait, 1666 .ops = &clkops_omap2_iclk_dflt_wait,
1620 .parent = &l4_ck, 1667 .parent = &l4_ck,
1621 .clkdm_name = "core_l4_clkdm", 1668 .clkdm_name = "core_l4_clkdm",
1622 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1669 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1626,7 +1673,7 @@ static struct clk des_ick = {
1626 1673
1627static struct clk sha_ick = { 1674static struct clk sha_ick = {
1628 .name = "sha_ick", 1675 .name = "sha_ick",
1629 .ops = &clkops_omap2_dflt_wait, 1676 .ops = &clkops_omap2_iclk_dflt_wait,
1630 .parent = &l4_ck, 1677 .parent = &l4_ck,
1631 .clkdm_name = "core_l4_clkdm", 1678 .clkdm_name = "core_l4_clkdm",
1632 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1679 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1636,7 +1683,7 @@ static struct clk sha_ick = {
1636 1683
1637static struct clk rng_ick = { 1684static struct clk rng_ick = {
1638 .name = "rng_ick", 1685 .name = "rng_ick",
1639 .ops = &clkops_omap2_dflt_wait, 1686 .ops = &clkops_omap2_iclk_dflt_wait,
1640 .parent = &l4_ck, 1687 .parent = &l4_ck,
1641 .clkdm_name = "core_l4_clkdm", 1688 .clkdm_name = "core_l4_clkdm",
1642 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1689 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1646,7 +1693,7 @@ static struct clk rng_ick = {
1646 1693
1647static struct clk aes_ick = { 1694static struct clk aes_ick = {
1648 .name = "aes_ick", 1695 .name = "aes_ick",
1649 .ops = &clkops_omap2_dflt_wait, 1696 .ops = &clkops_omap2_iclk_dflt_wait,
1650 .parent = &l4_ck, 1697 .parent = &l4_ck,
1651 .clkdm_name = "core_l4_clkdm", 1698 .clkdm_name = "core_l4_clkdm",
1652 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1699 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1656,7 +1703,7 @@ static struct clk aes_ick = {
1656 1703
1657static struct clk pka_ick = { 1704static struct clk pka_ick = {
1658 .name = "pka_ick", 1705 .name = "pka_ick",
1659 .ops = &clkops_omap2_dflt_wait, 1706 .ops = &clkops_omap2_iclk_dflt_wait,
1660 .parent = &l4_ck, 1707 .parent = &l4_ck,
1661 .clkdm_name = "core_l4_clkdm", 1708 .clkdm_name = "core_l4_clkdm",
1662 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1709 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1676,7 +1723,7 @@ static struct clk usb_fck = {
1676 1723
1677static struct clk usbhs_ick = { 1724static struct clk usbhs_ick = {
1678 .name = "usbhs_ick", 1725 .name = "usbhs_ick",
1679 .ops = &clkops_omap2_dflt_wait, 1726 .ops = &clkops_omap2_iclk_dflt_wait,
1680 .parent = &core_l3_ck, 1727 .parent = &core_l3_ck,
1681 .clkdm_name = "core_l3_clkdm", 1728 .clkdm_name = "core_l3_clkdm",
1682 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1729 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1686,7 +1733,7 @@ static struct clk usbhs_ick = {
1686 1733
1687static struct clk mmchs1_ick = { 1734static struct clk mmchs1_ick = {
1688 .name = "mmchs1_ick", 1735 .name = "mmchs1_ick",
1689 .ops = &clkops_omap2_dflt_wait, 1736 .ops = &clkops_omap2_iclk_dflt_wait,
1690 .parent = &l4_ck, 1737 .parent = &l4_ck,
1691 .clkdm_name = "core_l4_clkdm", 1738 .clkdm_name = "core_l4_clkdm",
1692 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1739 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1698,7 +1745,7 @@ static struct clk mmchs1_fck = {
1698 .name = "mmchs1_fck", 1745 .name = "mmchs1_fck",
1699 .ops = &clkops_omap2_dflt_wait, 1746 .ops = &clkops_omap2_dflt_wait,
1700 .parent = &func_96m_ck, 1747 .parent = &func_96m_ck,
1701 .clkdm_name = "core_l3_clkdm", 1748 .clkdm_name = "core_l4_clkdm",
1702 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), 1749 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1703 .enable_bit = OMAP2430_EN_MMCHS1_SHIFT, 1750 .enable_bit = OMAP2430_EN_MMCHS1_SHIFT,
1704 .recalc = &followparent_recalc, 1751 .recalc = &followparent_recalc,
@@ -1706,7 +1753,7 @@ static struct clk mmchs1_fck = {
1706 1753
1707static struct clk mmchs2_ick = { 1754static struct clk mmchs2_ick = {
1708 .name = "mmchs2_ick", 1755 .name = "mmchs2_ick",
1709 .ops = &clkops_omap2_dflt_wait, 1756 .ops = &clkops_omap2_iclk_dflt_wait,
1710 .parent = &l4_ck, 1757 .parent = &l4_ck,
1711 .clkdm_name = "core_l4_clkdm", 1758 .clkdm_name = "core_l4_clkdm",
1712 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1759 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1718,6 +1765,7 @@ static struct clk mmchs2_fck = {
1718 .name = "mmchs2_fck", 1765 .name = "mmchs2_fck",
1719 .ops = &clkops_omap2_dflt_wait, 1766 .ops = &clkops_omap2_dflt_wait,
1720 .parent = &func_96m_ck, 1767 .parent = &func_96m_ck,
1768 .clkdm_name = "core_l4_clkdm",
1721 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2), 1769 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1722 .enable_bit = OMAP2430_EN_MMCHS2_SHIFT, 1770 .enable_bit = OMAP2430_EN_MMCHS2_SHIFT,
1723 .recalc = &followparent_recalc, 1771 .recalc = &followparent_recalc,
@@ -1725,7 +1773,7 @@ static struct clk mmchs2_fck = {
1725 1773
1726static struct clk gpio5_ick = { 1774static struct clk gpio5_ick = {
1727 .name = "gpio5_ick", 1775 .name = "gpio5_ick",
1728 .ops = &clkops_omap2_dflt_wait, 1776 .ops = &clkops_omap2_iclk_dflt_wait,
1729 .parent = &l4_ck, 1777 .parent = &l4_ck,
1730 .clkdm_name = "core_l4_clkdm", 1778 .clkdm_name = "core_l4_clkdm",
1731 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1779 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1745,7 +1793,7 @@ static struct clk gpio5_fck = {
1745 1793
1746static struct clk mdm_intc_ick = { 1794static struct clk mdm_intc_ick = {
1747 .name = "mdm_intc_ick", 1795 .name = "mdm_intc_ick",
1748 .ops = &clkops_omap2_dflt_wait, 1796 .ops = &clkops_omap2_iclk_dflt_wait,
1749 .parent = &l4_ck, 1797 .parent = &l4_ck,
1750 .clkdm_name = "core_l4_clkdm", 1798 .clkdm_name = "core_l4_clkdm",
1751 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1799 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1808,6 +1856,12 @@ static struct omap_clk omap2430_clks[] = {
1808 CLK(NULL, "osc_ck", &osc_ck, CK_243X), 1856 CLK(NULL, "osc_ck", &osc_ck, CK_243X),
1809 CLK(NULL, "sys_ck", &sys_ck, CK_243X), 1857 CLK(NULL, "sys_ck", &sys_ck, CK_243X),
1810 CLK(NULL, "alt_ck", &alt_ck, CK_243X), 1858 CLK(NULL, "alt_ck", &alt_ck, CK_243X),
1859 CLK("omap-mcbsp.1", "pad_fck", &mcbsp_clks, CK_243X),
1860 CLK("omap-mcbsp.2", "pad_fck", &mcbsp_clks, CK_243X),
1861 CLK("omap-mcbsp.3", "pad_fck", &mcbsp_clks, CK_243X),
1862 CLK("omap-mcbsp.4", "pad_fck", &mcbsp_clks, CK_243X),
1863 CLK("omap-mcbsp.5", "pad_fck", &mcbsp_clks, CK_243X),
1864 CLK(NULL, "mcbsp_clks", &mcbsp_clks, CK_243X),
1811 /* internal analog sources */ 1865 /* internal analog sources */
1812 CLK(NULL, "dpll_ck", &dpll_ck, CK_243X), 1866 CLK(NULL, "dpll_ck", &dpll_ck, CK_243X),
1813 CLK(NULL, "apll96_ck", &apll96_ck, CK_243X), 1867 CLK(NULL, "apll96_ck", &apll96_ck, CK_243X),
@@ -1815,6 +1869,11 @@ static struct omap_clk omap2430_clks[] = {
1815 /* internal prcm root sources */ 1869 /* internal prcm root sources */
1816 CLK(NULL, "func_54m_ck", &func_54m_ck, CK_243X), 1870 CLK(NULL, "func_54m_ck", &func_54m_ck, CK_243X),
1817 CLK(NULL, "core_ck", &core_ck, CK_243X), 1871 CLK(NULL, "core_ck", &core_ck, CK_243X),
1872 CLK("omap-mcbsp.1", "prcm_fck", &func_96m_ck, CK_243X),
1873 CLK("omap-mcbsp.2", "prcm_fck", &func_96m_ck, CK_243X),
1874 CLK("omap-mcbsp.3", "prcm_fck", &func_96m_ck, CK_243X),
1875 CLK("omap-mcbsp.4", "prcm_fck", &func_96m_ck, CK_243X),
1876 CLK("omap-mcbsp.5", "prcm_fck", &func_96m_ck, CK_243X),
1818 CLK(NULL, "func_96m_ck", &func_96m_ck, CK_243X), 1877 CLK(NULL, "func_96m_ck", &func_96m_ck, CK_243X),
1819 CLK(NULL, "func_48m_ck", &func_48m_ck, CK_243X), 1878 CLK(NULL, "func_48m_ck", &func_48m_ck, CK_243X),
1820 CLK(NULL, "func_12m_ck", &func_12m_ck, CK_243X), 1879 CLK(NULL, "func_12m_ck", &func_12m_ck, CK_243X),
@@ -1826,7 +1885,6 @@ static struct omap_clk omap2430_clks[] = {
1826 CLK(NULL, "mpu_ck", &mpu_ck, CK_243X), 1885 CLK(NULL, "mpu_ck", &mpu_ck, CK_243X),
1827 /* dsp domain clocks */ 1886 /* dsp domain clocks */
1828 CLK(NULL, "dsp_fck", &dsp_fck, CK_243X), 1887 CLK(NULL, "dsp_fck", &dsp_fck, CK_243X),
1829 CLK(NULL, "dsp_irate_ick", &dsp_irate_ick, CK_243X),
1830 CLK(NULL, "iva2_1_ick", &iva2_1_ick, CK_243X), 1888 CLK(NULL, "iva2_1_ick", &iva2_1_ick, CK_243X),
1831 /* GFX domain clocks */ 1889 /* GFX domain clocks */
1832 CLK(NULL, "gfx_3d_fck", &gfx_3d_fck, CK_243X), 1890 CLK(NULL, "gfx_3d_fck", &gfx_3d_fck, CK_243X),
@@ -1836,10 +1894,10 @@ static struct omap_clk omap2430_clks[] = {
1836 CLK(NULL, "mdm_ick", &mdm_ick, CK_243X), 1894 CLK(NULL, "mdm_ick", &mdm_ick, CK_243X),
1837 CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X), 1895 CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X),
1838 /* DSS domain clocks */ 1896 /* DSS domain clocks */
1839 CLK("omapdss", "ick", &dss_ick, CK_243X), 1897 CLK("omapdss_dss", "ick", &dss_ick, CK_243X),
1840 CLK("omapdss", "dss1_fck", &dss1_fck, CK_243X), 1898 CLK("omapdss_dss", "fck", &dss1_fck, CK_243X),
1841 CLK("omapdss", "dss2_fck", &dss2_fck, CK_243X), 1899 CLK("omapdss_dss", "sys_clk", &dss2_fck, CK_243X),
1842 CLK("omapdss", "tv_fck", &dss_54m_fck, CK_243X), 1900 CLK("omapdss_dss", "tv_clk", &dss_54m_fck, CK_243X),
1843 /* L3 domain clocks */ 1901 /* L3 domain clocks */
1844 CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X), 1902 CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X),
1845 CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X), 1903 CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X),
@@ -1847,6 +1905,7 @@ static struct omap_clk omap2430_clks[] = {
1847 /* L4 domain clocks */ 1905 /* L4 domain clocks */
1848 CLK(NULL, "l4_ck", &l4_ck, CK_243X), 1906 CLK(NULL, "l4_ck", &l4_ck, CK_243X),
1849 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_243X), 1907 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_243X),
1908 CLK(NULL, "wu_l4_ick", &wu_l4_ick, CK_243X),
1850 /* virtual meta-group clock */ 1909 /* virtual meta-group clock */
1851 CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_243X), 1910 CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_243X),
1852 /* general l4 interface ck, multi-parent functional clk */ 1911 /* general l4 interface ck, multi-parent functional clk */
@@ -1915,10 +1974,10 @@ static struct omap_clk omap2430_clks[] = {
1915 CLK(NULL, "fac_fck", &fac_fck, CK_243X), 1974 CLK(NULL, "fac_fck", &fac_fck, CK_243X),
1916 CLK("omap_hdq.0", "ick", &hdq_ick, CK_243X), 1975 CLK("omap_hdq.0", "ick", &hdq_ick, CK_243X),
1917 CLK("omap_hdq.1", "fck", &hdq_fck, CK_243X), 1976 CLK("omap_hdq.1", "fck", &hdq_fck, CK_243X),
1918 CLK("i2c_omap.1", "ick", &i2c1_ick, CK_243X), 1977 CLK("omap_i2c.1", "ick", &i2c1_ick, CK_243X),
1919 CLK("i2c_omap.1", "fck", &i2chs1_fck, CK_243X), 1978 CLK("omap_i2c.1", "fck", &i2chs1_fck, CK_243X),
1920 CLK("i2c_omap.2", "ick", &i2c2_ick, CK_243X), 1979 CLK("omap_i2c.2", "ick", &i2c2_ick, CK_243X),
1921 CLK("i2c_omap.2", "fck", &i2chs2_fck, CK_243X), 1980 CLK("omap_i2c.2", "fck", &i2chs2_fck, CK_243X),
1922 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_243X), 1981 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_243X),
1923 CLK(NULL, "sdma_fck", &sdma_fck, CK_243X), 1982 CLK(NULL, "sdma_fck", &sdma_fck, CK_243X),
1924 CLK(NULL, "sdma_ick", &sdma_ick, CK_243X), 1983 CLK(NULL, "sdma_ick", &sdma_ick, CK_243X),
@@ -1926,19 +1985,19 @@ static struct omap_clk omap2430_clks[] = {
1926 CLK(NULL, "des_ick", &des_ick, CK_243X), 1985 CLK(NULL, "des_ick", &des_ick, CK_243X),
1927 CLK("omap-sham", "ick", &sha_ick, CK_243X), 1986 CLK("omap-sham", "ick", &sha_ick, CK_243X),
1928 CLK("omap_rng", "ick", &rng_ick, CK_243X), 1987 CLK("omap_rng", "ick", &rng_ick, CK_243X),
1929 CLK(NULL, "aes_ick", &aes_ick, CK_243X), 1988 CLK("omap-aes", "ick", &aes_ick, CK_243X),
1930 CLK(NULL, "pka_ick", &pka_ick, CK_243X), 1989 CLK(NULL, "pka_ick", &pka_ick, CK_243X),
1931 CLK(NULL, "usb_fck", &usb_fck, CK_243X), 1990 CLK(NULL, "usb_fck", &usb_fck, CK_243X),
1932 CLK("musb_hdrc", "ick", &usbhs_ick, CK_243X), 1991 CLK("musb-omap2430", "ick", &usbhs_ick, CK_243X),
1933 CLK("mmci-omap-hs.0", "ick", &mmchs1_ick, CK_243X), 1992 CLK("omap_hsmmc.0", "ick", &mmchs1_ick, CK_243X),
1934 CLK("mmci-omap-hs.0", "fck", &mmchs1_fck, CK_243X), 1993 CLK("omap_hsmmc.0", "fck", &mmchs1_fck, CK_243X),
1935 CLK("mmci-omap-hs.1", "ick", &mmchs2_ick, CK_243X), 1994 CLK("omap_hsmmc.1", "ick", &mmchs2_ick, CK_243X),
1936 CLK("mmci-omap-hs.1", "fck", &mmchs2_fck, CK_243X), 1995 CLK("omap_hsmmc.1", "fck", &mmchs2_fck, CK_243X),
1937 CLK(NULL, "gpio5_ick", &gpio5_ick, CK_243X), 1996 CLK(NULL, "gpio5_ick", &gpio5_ick, CK_243X),
1938 CLK(NULL, "gpio5_fck", &gpio5_fck, CK_243X), 1997 CLK(NULL, "gpio5_fck", &gpio5_fck, CK_243X),
1939 CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X), 1998 CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X),
1940 CLK("mmci-omap-hs.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X), 1999 CLK("omap_hsmmc.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X),
1941 CLK("mmci-omap-hs.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X), 2000 CLK("omap_hsmmc.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X),
1942}; 2001};
1943 2002
1944/* 2003/*
@@ -1974,6 +2033,9 @@ int __init omap2430_clk_init(void)
1974 omap2_init_clk_clkdm(c->lk.clk); 2033 omap2_init_clk_clkdm(c->lk.clk);
1975 } 2034 }
1976 2035
2036 /* Disable autoidle on all clocks; let the PM code enable it later */
2037 omap_clk_disable_autoidle_all();
2038
1977 /* Check the MPU rate set by bootloader */ 2039 /* Check the MPU rate set by bootloader */
1978 clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); 2040 clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);
1979 for (prcm = rate_table; prcm->mpu_speed; prcm++) { 2041 for (prcm = rate_table; prcm->mpu_speed; prcm++) {
diff --git a/arch/arm/mach-omap2/clock2xxx.h b/arch/arm/mach-omap2/clock2xxx.h
index 6a658b890c17..cb6df8ca9e4a 100644
--- a/arch/arm/mach-omap2/clock2xxx.h
+++ b/arch/arm/mach-omap2/clock2xxx.h
@@ -20,16 +20,16 @@ u32 omap2xxx_get_apll_clkin(void);
20u32 omap2xxx_get_sysclkdiv(void); 20u32 omap2xxx_get_sysclkdiv(void);
21void omap2xxx_clk_prepare_for_reboot(void); 21void omap2xxx_clk_prepare_for_reboot(void);
22 22
23#ifdef CONFIG_ARCH_OMAP2420 23#ifdef CONFIG_SOC_OMAP2420
24int omap2420_clk_init(void); 24int omap2420_clk_init(void);
25#else 25#else
26#define omap2420_clk_init() 0 26#define omap2420_clk_init() do { } while(0)
27#endif 27#endif
28 28
29#ifdef CONFIG_ARCH_OMAP2430 29#ifdef CONFIG_SOC_OMAP2430
30int omap2430_clk_init(void); 30int omap2430_clk_init(void);
31#else 31#else
32#define omap2430_clk_init() 0 32#define omap2430_clk_init() do { } while(0)
33#endif 33#endif
34 34
35extern void __iomem *prcm_clksrc_ctrl, *cm_idlest_pll; 35extern void __iomem *prcm_clksrc_ctrl, *cm_idlest_pll;
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
index 6febd5f11e85..1fc96b9ee330 100644
--- a/arch/arm/mach-omap2/clock34xx.c
+++ b/arch/arm/mach-omap2/clock34xx.c
@@ -2,7 +2,7 @@
2 * OMAP3-specific clock framework functions 2 * OMAP3-specific clock framework functions
3 * 3 *
4 * Copyright (C) 2007-2008 Texas Instruments, Inc. 4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
5 * Copyright (C) 2007-2010 Nokia Corporation 5 * Copyright (C) 2007-2011 Nokia Corporation
6 * 6 *
7 * Paul Walmsley 7 * Paul Walmsley
8 * Jouni Högander 8 * Jouni Högander
@@ -25,7 +25,7 @@
25 25
26#include "clock.h" 26#include "clock.h"
27#include "clock34xx.h" 27#include "clock34xx.h"
28#include "cm.h" 28#include "cm2xxx_3xxx.h"
29#include "cm-regbits-34xx.h" 29#include "cm-regbits-34xx.h"
30 30
31/** 31/**
@@ -59,6 +59,15 @@ const struct clkops clkops_omap3430es2_ssi_wait = {
59 .find_companion = omap2_clk_dflt_find_companion, 59 .find_companion = omap2_clk_dflt_find_companion,
60}; 60};
61 61
62const struct clkops clkops_omap3430es2_iclk_ssi_wait = {
63 .enable = omap2_dflt_clk_enable,
64 .disable = omap2_dflt_clk_disable,
65 .find_idlest = omap3430es2_clk_ssi_find_idlest,
66 .find_companion = omap2_clk_dflt_find_companion,
67 .allow_idle = omap2_clkt_iclk_allow_idle,
68 .deny_idle = omap2_clkt_iclk_deny_idle,
69};
70
62/** 71/**
63 * omap3430es2_clk_dss_usbhost_find_idlest - CM_IDLEST info for DSS, USBHOST 72 * omap3430es2_clk_dss_usbhost_find_idlest - CM_IDLEST info for DSS, USBHOST
64 * @clk: struct clk * being enabled 73 * @clk: struct clk * being enabled
@@ -94,6 +103,15 @@ const struct clkops clkops_omap3430es2_dss_usbhost_wait = {
94 .find_companion = omap2_clk_dflt_find_companion, 103 .find_companion = omap2_clk_dflt_find_companion,
95}; 104};
96 105
106const struct clkops clkops_omap3430es2_iclk_dss_usbhost_wait = {
107 .enable = omap2_dflt_clk_enable,
108 .disable = omap2_dflt_clk_disable,
109 .find_idlest = omap3430es2_clk_dss_usbhost_find_idlest,
110 .find_companion = omap2_clk_dflt_find_companion,
111 .allow_idle = omap2_clkt_iclk_allow_idle,
112 .deny_idle = omap2_clkt_iclk_deny_idle,
113};
114
97/** 115/**
98 * omap3430es2_clk_hsotgusb_find_idlest - return CM_IDLEST info for HSOTGUSB 116 * omap3430es2_clk_hsotgusb_find_idlest - return CM_IDLEST info for HSOTGUSB
99 * @clk: struct clk * being enabled 117 * @clk: struct clk * being enabled
@@ -124,3 +142,12 @@ const struct clkops clkops_omap3430es2_hsotgusb_wait = {
124 .find_idlest = omap3430es2_clk_hsotgusb_find_idlest, 142 .find_idlest = omap3430es2_clk_hsotgusb_find_idlest,
125 .find_companion = omap2_clk_dflt_find_companion, 143 .find_companion = omap2_clk_dflt_find_companion,
126}; 144};
145
146const struct clkops clkops_omap3430es2_iclk_hsotgusb_wait = {
147 .enable = omap2_dflt_clk_enable,
148 .disable = omap2_dflt_clk_disable,
149 .find_idlest = omap3430es2_clk_hsotgusb_find_idlest,
150 .find_companion = omap2_clk_dflt_find_companion,
151 .allow_idle = omap2_clkt_iclk_allow_idle,
152 .deny_idle = omap2_clkt_iclk_deny_idle,
153};
diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h
index 628e8de57680..084ba71b2b31 100644
--- a/arch/arm/mach-omap2/clock34xx.h
+++ b/arch/arm/mach-omap2/clock34xx.h
@@ -2,14 +2,17 @@
2 * OMAP34xx clock function prototypes and macros 2 * OMAP34xx clock function prototypes and macros
3 * 3 *
4 * Copyright (C) 2007-2010 Texas Instruments, Inc. 4 * Copyright (C) 2007-2010 Texas Instruments, Inc.
5 * Copyright (C) 2007-2010 Nokia Corporation 5 * Copyright (C) 2007-2011 Nokia Corporation
6 */ 6 */
7 7
8#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H 8#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
9#define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H 9#define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
10 10
11extern const struct clkops clkops_omap3430es2_ssi_wait; 11extern const struct clkops clkops_omap3430es2_ssi_wait;
12extern const struct clkops clkops_omap3430es2_iclk_ssi_wait;
12extern const struct clkops clkops_omap3430es2_hsotgusb_wait; 13extern const struct clkops clkops_omap3430es2_hsotgusb_wait;
14extern const struct clkops clkops_omap3430es2_iclk_hsotgusb_wait;
13extern const struct clkops clkops_omap3430es2_dss_usbhost_wait; 15extern const struct clkops clkops_omap3430es2_dss_usbhost_wait;
16extern const struct clkops clkops_omap3430es2_iclk_dss_usbhost_wait;
14 17
15#endif 18#endif
diff --git a/arch/arm/mach-omap2/clock3517.c b/arch/arm/mach-omap2/clock3517.c
index b496a9305e1c..2e97d08f0e56 100644
--- a/arch/arm/mach-omap2/clock3517.c
+++ b/arch/arm/mach-omap2/clock3517.c
@@ -2,7 +2,7 @@
2 * OMAP3517/3505-specific clock framework functions 2 * OMAP3517/3505-specific clock framework functions
3 * 3 *
4 * Copyright (C) 2010 Texas Instruments, Inc. 4 * Copyright (C) 2010 Texas Instruments, Inc.
5 * Copyright (C) 2010 Nokia Corporation 5 * Copyright (C) 2011 Nokia Corporation
6 * 6 *
7 * Ranjith Lohithakshan 7 * Ranjith Lohithakshan
8 * Paul Walmsley 8 * Paul Walmsley
@@ -25,7 +25,7 @@
25 25
26#include "clock.h" 26#include "clock.h"
27#include "clock3517.h" 27#include "clock3517.h"
28#include "cm.h" 28#include "cm2xxx_3xxx.h"
29#include "cm-regbits-34xx.h" 29#include "cm-regbits-34xx.h"
30 30
31/* 31/*
@@ -119,6 +119,8 @@ const struct clkops clkops_am35xx_ipss_wait = {
119 .disable = omap2_dflt_clk_disable, 119 .disable = omap2_dflt_clk_disable,
120 .find_idlest = am35xx_clk_ipss_find_idlest, 120 .find_idlest = am35xx_clk_ipss_find_idlest,
121 .find_companion = omap2_clk_dflt_find_companion, 121 .find_companion = omap2_clk_dflt_find_companion,
122 .allow_idle = omap2_clkt_iclk_allow_idle,
123 .deny_idle = omap2_clkt_iclk_deny_idle,
122}; 124};
123 125
124 126
diff --git a/arch/arm/mach-omap2/clock3xxx.c b/arch/arm/mach-omap2/clock3xxx.c
index a447c4d2c28a..952c3e01c9eb 100644
--- a/arch/arm/mach-omap2/clock3xxx.c
+++ b/arch/arm/mach-omap2/clock3xxx.c
@@ -25,9 +25,9 @@
25 25
26#include "clock.h" 26#include "clock.h"
27#include "clock3xxx.h" 27#include "clock3xxx.h"
28#include "prm.h" 28#include "prm2xxx_3xxx.h"
29#include "prm-regbits-34xx.h" 29#include "prm-regbits-34xx.h"
30#include "cm.h" 30#include "cm2xxx_3xxx.h"
31#include "cm-regbits-34xx.h" 31#include "cm-regbits-34xx.h"
32 32
33/* 33/*
@@ -65,9 +65,6 @@ void __init omap3_clk_lock_dpll5(void)
65 clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST); 65 clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST);
66 clk_enable(dpll5_clk); 66 clk_enable(dpll5_clk);
67 67
68 /* Enable autoidle to allow it to enter low power bypass */
69 omap3_dpll_allow_idle(dpll5_clk);
70
71 /* Program dpll5_m2_clk divider for no division */ 68 /* Program dpll5_m2_clk divider for no division */
72 dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck"); 69 dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck");
73 clk_enable(dpll5_m2_clk); 70 clk_enable(dpll5_m2_clk);
@@ -94,7 +91,7 @@ static int __init omap3xxx_clk_arch_init(void)
94 91
95 ret = omap2_clk_switch_mpurate_at_boot("dpll1_ck"); 92 ret = omap2_clk_switch_mpurate_at_boot("dpll1_ck");
96 if (!ret) 93 if (!ret)
97 omap2_clk_print_new_rates("osc_sys_ck", "arm_fck", "core_ck"); 94 omap2_clk_print_new_rates("osc_sys_ck", "core_ck", "arm_fck");
98 95
99 return ret; 96 return ret;
100} 97}
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
index dfdce2d82779..75b119bd9cda 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -2,7 +2,7 @@
2 * OMAP3 clock data 2 * OMAP3 clock data
3 * 3 *
4 * Copyright (C) 2007-2010 Texas Instruments, Inc. 4 * Copyright (C) 2007-2010 Texas Instruments, Inc.
5 * Copyright (C) 2007-2010 Nokia Corporation 5 * Copyright (C) 2007-2011 Nokia Corporation
6 * 6 *
7 * Written by Paul Walmsley 7 * Written by Paul Walmsley
8 * With many device clock fixes by Kevin Hilman and Jouni Högander 8 * With many device clock fixes by Kevin Hilman and Jouni Högander
@@ -20,7 +20,6 @@
20#include <linux/clk.h> 20#include <linux/clk.h>
21#include <linux/list.h> 21#include <linux/list.h>
22 22
23#include <plat/control.h>
24#include <plat/clkdev_omap.h> 23#include <plat/clkdev_omap.h>
25 24
26#include "clock.h" 25#include "clock.h"
@@ -29,10 +28,11 @@
29#include "clock36xx.h" 28#include "clock36xx.h"
30#include "clock3517.h" 29#include "clock3517.h"
31 30
32#include "cm.h" 31#include "cm2xxx_3xxx.h"
33#include "cm-regbits-34xx.h" 32#include "cm-regbits-34xx.h"
34#include "prm.h" 33#include "prm2xxx_3xxx.h"
35#include "prm-regbits-34xx.h" 34#include "prm-regbits-34xx.h"
35#include "control.h"
36 36
37/* 37/*
38 * clocks 38 * clocks
@@ -120,7 +120,7 @@ static const struct clksel_rate osc_sys_13m_rates[] = {
120}; 120};
121 121
122static const struct clksel_rate osc_sys_16_8m_rates[] = { 122static const struct clksel_rate osc_sys_16_8m_rates[] = {
123 { .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS }, 123 { .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
124 { .div = 0 } 124 { .div = 0 }
125}; 125};
126 126
@@ -291,12 +291,11 @@ static struct dpll_data dpll1_dd = {
291 .max_multiplier = OMAP3_MAX_DPLL_MULT, 291 .max_multiplier = OMAP3_MAX_DPLL_MULT,
292 .min_divider = 1, 292 .min_divider = 1,
293 .max_divider = OMAP3_MAX_DPLL_DIV, 293 .max_divider = OMAP3_MAX_DPLL_DIV,
294 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
295}; 294};
296 295
297static struct clk dpll1_ck = { 296static struct clk dpll1_ck = {
298 .name = "dpll1_ck", 297 .name = "dpll1_ck",
299 .ops = &clkops_null, 298 .ops = &clkops_omap3_noncore_dpll_ops,
300 .parent = &sys_ck, 299 .parent = &sys_ck,
301 .dpll_data = &dpll1_dd, 300 .dpll_data = &dpll1_dd,
302 .round_rate = &omap2_dpll_round_rate, 301 .round_rate = &omap2_dpll_round_rate,
@@ -364,7 +363,6 @@ static struct dpll_data dpll2_dd = {
364 .max_multiplier = OMAP3_MAX_DPLL_MULT, 363 .max_multiplier = OMAP3_MAX_DPLL_MULT,
365 .min_divider = 1, 364 .min_divider = 1,
366 .max_divider = OMAP3_MAX_DPLL_DIV, 365 .max_divider = OMAP3_MAX_DPLL_DIV,
367 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
368}; 366};
369 367
370static struct clk dpll2_ck = { 368static struct clk dpll2_ck = {
@@ -424,12 +422,11 @@ static struct dpll_data dpll3_dd = {
424 .max_multiplier = OMAP3_MAX_DPLL_MULT, 422 .max_multiplier = OMAP3_MAX_DPLL_MULT,
425 .min_divider = 1, 423 .min_divider = 1,
426 .max_divider = OMAP3_MAX_DPLL_DIV, 424 .max_divider = OMAP3_MAX_DPLL_DIV,
427 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
428}; 425};
429 426
430static struct clk dpll3_ck = { 427static struct clk dpll3_ck = {
431 .name = "dpll3_ck", 428 .name = "dpll3_ck",
432 .ops = &clkops_null, 429 .ops = &clkops_omap3_core_dpll_ops,
433 .parent = &sys_ck, 430 .parent = &sys_ck,
434 .dpll_data = &dpll3_dd, 431 .dpll_data = &dpll3_dd,
435 .round_rate = &omap2_dpll_round_rate, 432 .round_rate = &omap2_dpll_round_rate,
@@ -452,35 +449,35 @@ static struct clk dpll3_x2_ck = {
452static const struct clksel_rate div31_dpll3_rates[] = { 449static const struct clksel_rate div31_dpll3_rates[] = {
453 { .div = 1, .val = 1, .flags = RATE_IN_3XXX }, 450 { .div = 1, .val = 1, .flags = RATE_IN_3XXX },
454 { .div = 2, .val = 2, .flags = RATE_IN_3XXX }, 451 { .div = 2, .val = 2, .flags = RATE_IN_3XXX },
455 { .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS }, 452 { .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS_36XX },
456 { .div = 4, .val = 4, .flags = RATE_IN_3430ES2PLUS }, 453 { .div = 4, .val = 4, .flags = RATE_IN_3430ES2PLUS_36XX },
457 { .div = 5, .val = 5, .flags = RATE_IN_3430ES2PLUS }, 454 { .div = 5, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
458 { .div = 6, .val = 6, .flags = RATE_IN_3430ES2PLUS }, 455 { .div = 6, .val = 6, .flags = RATE_IN_3430ES2PLUS_36XX },
459 { .div = 7, .val = 7, .flags = RATE_IN_3430ES2PLUS }, 456 { .div = 7, .val = 7, .flags = RATE_IN_3430ES2PLUS_36XX },
460 { .div = 8, .val = 8, .flags = RATE_IN_3430ES2PLUS }, 457 { .div = 8, .val = 8, .flags = RATE_IN_3430ES2PLUS_36XX },
461 { .div = 9, .val = 9, .flags = RATE_IN_3430ES2PLUS }, 458 { .div = 9, .val = 9, .flags = RATE_IN_3430ES2PLUS_36XX },
462 { .div = 10, .val = 10, .flags = RATE_IN_3430ES2PLUS }, 459 { .div = 10, .val = 10, .flags = RATE_IN_3430ES2PLUS_36XX },
463 { .div = 11, .val = 11, .flags = RATE_IN_3430ES2PLUS }, 460 { .div = 11, .val = 11, .flags = RATE_IN_3430ES2PLUS_36XX },
464 { .div = 12, .val = 12, .flags = RATE_IN_3430ES2PLUS }, 461 { .div = 12, .val = 12, .flags = RATE_IN_3430ES2PLUS_36XX },
465 { .div = 13, .val = 13, .flags = RATE_IN_3430ES2PLUS }, 462 { .div = 13, .val = 13, .flags = RATE_IN_3430ES2PLUS_36XX },
466 { .div = 14, .val = 14, .flags = RATE_IN_3430ES2PLUS }, 463 { .div = 14, .val = 14, .flags = RATE_IN_3430ES2PLUS_36XX },
467 { .div = 15, .val = 15, .flags = RATE_IN_3430ES2PLUS }, 464 { .div = 15, .val = 15, .flags = RATE_IN_3430ES2PLUS_36XX },
468 { .div = 16, .val = 16, .flags = RATE_IN_3430ES2PLUS }, 465 { .div = 16, .val = 16, .flags = RATE_IN_3430ES2PLUS_36XX },
469 { .div = 17, .val = 17, .flags = RATE_IN_3430ES2PLUS }, 466 { .div = 17, .val = 17, .flags = RATE_IN_3430ES2PLUS_36XX },
470 { .div = 18, .val = 18, .flags = RATE_IN_3430ES2PLUS }, 467 { .div = 18, .val = 18, .flags = RATE_IN_3430ES2PLUS_36XX },
471 { .div = 19, .val = 19, .flags = RATE_IN_3430ES2PLUS }, 468 { .div = 19, .val = 19, .flags = RATE_IN_3430ES2PLUS_36XX },
472 { .div = 20, .val = 20, .flags = RATE_IN_3430ES2PLUS }, 469 { .div = 20, .val = 20, .flags = RATE_IN_3430ES2PLUS_36XX },
473 { .div = 21, .val = 21, .flags = RATE_IN_3430ES2PLUS }, 470 { .div = 21, .val = 21, .flags = RATE_IN_3430ES2PLUS_36XX },
474 { .div = 22, .val = 22, .flags = RATE_IN_3430ES2PLUS }, 471 { .div = 22, .val = 22, .flags = RATE_IN_3430ES2PLUS_36XX },
475 { .div = 23, .val = 23, .flags = RATE_IN_3430ES2PLUS }, 472 { .div = 23, .val = 23, .flags = RATE_IN_3430ES2PLUS_36XX },
476 { .div = 24, .val = 24, .flags = RATE_IN_3430ES2PLUS }, 473 { .div = 24, .val = 24, .flags = RATE_IN_3430ES2PLUS_36XX },
477 { .div = 25, .val = 25, .flags = RATE_IN_3430ES2PLUS }, 474 { .div = 25, .val = 25, .flags = RATE_IN_3430ES2PLUS_36XX },
478 { .div = 26, .val = 26, .flags = RATE_IN_3430ES2PLUS }, 475 { .div = 26, .val = 26, .flags = RATE_IN_3430ES2PLUS_36XX },
479 { .div = 27, .val = 27, .flags = RATE_IN_3430ES2PLUS }, 476 { .div = 27, .val = 27, .flags = RATE_IN_3430ES2PLUS_36XX },
480 { .div = 28, .val = 28, .flags = RATE_IN_3430ES2PLUS }, 477 { .div = 28, .val = 28, .flags = RATE_IN_3430ES2PLUS_36XX },
481 { .div = 29, .val = 29, .flags = RATE_IN_3430ES2PLUS }, 478 { .div = 29, .val = 29, .flags = RATE_IN_3430ES2PLUS_36XX },
482 { .div = 30, .val = 30, .flags = RATE_IN_3430ES2PLUS }, 479 { .div = 30, .val = 30, .flags = RATE_IN_3430ES2PLUS_36XX },
483 { .div = 31, .val = 31, .flags = RATE_IN_3430ES2PLUS }, 480 { .div = 31, .val = 31, .flags = RATE_IN_3430ES2PLUS_36XX },
484 { .div = 0 }, 481 { .div = 0 },
485}; 482};
486 483
@@ -583,7 +580,6 @@ static struct dpll_data dpll4_dd_34xx __initdata = {
583 .max_multiplier = OMAP3_MAX_DPLL_MULT, 580 .max_multiplier = OMAP3_MAX_DPLL_MULT,
584 .min_divider = 1, 581 .min_divider = 1,
585 .max_divider = OMAP3_MAX_DPLL_DIV, 582 .max_divider = OMAP3_MAX_DPLL_DIV,
586 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
587}; 583};
588 584
589static struct dpll_data dpll4_dd_3630 __initdata = { 585static struct dpll_data dpll4_dd_3630 __initdata = {
@@ -602,10 +598,11 @@ static struct dpll_data dpll4_dd_3630 __initdata = {
602 .autoidle_mask = OMAP3430_AUTO_PERIPH_DPLL_MASK, 598 .autoidle_mask = OMAP3430_AUTO_PERIPH_DPLL_MASK,
603 .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), 599 .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
604 .idlest_mask = OMAP3430_ST_PERIPH_CLK_MASK, 600 .idlest_mask = OMAP3430_ST_PERIPH_CLK_MASK,
601 .dco_mask = OMAP3630_PERIPH_DPLL_DCO_SEL_MASK,
602 .sddiv_mask = OMAP3630_PERIPH_DPLL_SD_DIV_MASK,
605 .max_multiplier = OMAP3630_MAX_JTYPE_DPLL_MULT, 603 .max_multiplier = OMAP3630_MAX_JTYPE_DPLL_MULT,
606 .min_divider = 1, 604 .min_divider = 1,
607 .max_divider = OMAP3_MAX_DPLL_DIV, 605 .max_divider = OMAP3_MAX_DPLL_DIV,
608 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE,
609 .flags = DPLL_J_TYPE 606 .flags = DPLL_J_TYPE
610}; 607};
611 608
@@ -937,7 +934,6 @@ static struct dpll_data dpll5_dd = {
937 .max_multiplier = OMAP3_MAX_DPLL_MULT, 934 .max_multiplier = OMAP3_MAX_DPLL_MULT,
938 .min_divider = 1, 935 .min_divider = 1,
939 .max_divider = OMAP3_MAX_DPLL_DIV, 936 .max_divider = OMAP3_MAX_DPLL_DIV,
940 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
941}; 937};
942 938
943static struct clk dpll5_ck = { 939static struct clk dpll5_ck = {
@@ -1203,7 +1199,10 @@ static const struct clksel gfx_l3_clksel[] = {
1203 { .parent = NULL } 1199 { .parent = NULL }
1204}; 1200};
1205 1201
1206/* Virtual parent clock for gfx_l3_ick and gfx_l3_fck */ 1202/*
1203 * Virtual parent clock for gfx_l3_ick and gfx_l3_fck
1204 * This interface clock does not have a CM_AUTOIDLE bit
1205 */
1207static struct clk gfx_l3_ck = { 1206static struct clk gfx_l3_ck = {
1208 .name = "gfx_l3_ck", 1207 .name = "gfx_l3_ck",
1209 .ops = &clkops_omap2_dflt_wait, 1208 .ops = &clkops_omap2_dflt_wait,
@@ -1302,6 +1301,7 @@ static struct clk sgx_fck = {
1302 .round_rate = &omap2_clksel_round_rate 1301 .round_rate = &omap2_clksel_round_rate
1303}; 1302};
1304 1303
1304/* This interface clock does not have a CM_AUTOIDLE bit */
1305static struct clk sgx_ick = { 1305static struct clk sgx_ick = {
1306 .name = "sgx_ick", 1306 .name = "sgx_ick",
1307 .ops = &clkops_omap2_dflt_wait, 1307 .ops = &clkops_omap2_dflt_wait,
@@ -1326,7 +1326,7 @@ static struct clk d2d_26m_fck = {
1326 1326
1327static struct clk modem_fck = { 1327static struct clk modem_fck = {
1328 .name = "modem_fck", 1328 .name = "modem_fck",
1329 .ops = &clkops_omap2_dflt_wait, 1329 .ops = &clkops_omap2_mdmclk_dflt_wait,
1330 .parent = &sys_ck, 1330 .parent = &sys_ck,
1331 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1331 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1332 .enable_bit = OMAP3430_EN_MODEM_SHIFT, 1332 .enable_bit = OMAP3430_EN_MODEM_SHIFT,
@@ -1336,7 +1336,7 @@ static struct clk modem_fck = {
1336 1336
1337static struct clk sad2d_ick = { 1337static struct clk sad2d_ick = {
1338 .name = "sad2d_ick", 1338 .name = "sad2d_ick",
1339 .ops = &clkops_omap2_dflt_wait, 1339 .ops = &clkops_omap2_iclk_dflt_wait,
1340 .parent = &l3_ick, 1340 .parent = &l3_ick,
1341 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1341 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1342 .enable_bit = OMAP3430_EN_SAD2D_SHIFT, 1342 .enable_bit = OMAP3430_EN_SAD2D_SHIFT,
@@ -1346,7 +1346,7 @@ static struct clk sad2d_ick = {
1346 1346
1347static struct clk mad2d_ick = { 1347static struct clk mad2d_ick = {
1348 .name = "mad2d_ick", 1348 .name = "mad2d_ick",
1349 .ops = &clkops_omap2_dflt_wait, 1349 .ops = &clkops_omap2_iclk_dflt_wait,
1350 .parent = &l3_ick, 1350 .parent = &l3_ick,
1351 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), 1351 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1352 .enable_bit = OMAP3430_EN_MAD2D_SHIFT, 1352 .enable_bit = OMAP3430_EN_MAD2D_SHIFT,
@@ -1558,6 +1558,7 @@ static struct clk mcspi4_fck = {
1558 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1558 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1559 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT, 1559 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
1560 .recalc = &followparent_recalc, 1560 .recalc = &followparent_recalc,
1561 .clkdm_name = "core_l4_clkdm",
1561}; 1562};
1562 1563
1563static struct clk mcspi3_fck = { 1564static struct clk mcspi3_fck = {
@@ -1567,6 +1568,7 @@ static struct clk mcspi3_fck = {
1567 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1568 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1568 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT, 1569 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
1569 .recalc = &followparent_recalc, 1570 .recalc = &followparent_recalc,
1571 .clkdm_name = "core_l4_clkdm",
1570}; 1572};
1571 1573
1572static struct clk mcspi2_fck = { 1574static struct clk mcspi2_fck = {
@@ -1576,6 +1578,7 @@ static struct clk mcspi2_fck = {
1576 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1578 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1577 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT, 1579 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
1578 .recalc = &followparent_recalc, 1580 .recalc = &followparent_recalc,
1581 .clkdm_name = "core_l4_clkdm",
1579}; 1582};
1580 1583
1581static struct clk mcspi1_fck = { 1584static struct clk mcspi1_fck = {
@@ -1585,6 +1588,7 @@ static struct clk mcspi1_fck = {
1585 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1588 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1586 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT, 1589 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
1587 .recalc = &followparent_recalc, 1590 .recalc = &followparent_recalc,
1591 .clkdm_name = "core_l4_clkdm",
1588}; 1592};
1589 1593
1590static struct clk uart2_fck = { 1594static struct clk uart2_fck = {
@@ -1712,7 +1716,7 @@ static struct clk core_l3_ick = {
1712 1716
1713static struct clk hsotgusb_ick_3430es1 = { 1717static struct clk hsotgusb_ick_3430es1 = {
1714 .name = "hsotgusb_ick", 1718 .name = "hsotgusb_ick",
1715 .ops = &clkops_omap2_dflt, 1719 .ops = &clkops_omap2_iclk_dflt,
1716 .parent = &core_l3_ick, 1720 .parent = &core_l3_ick,
1717 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1721 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1718 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT, 1722 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
@@ -1722,7 +1726,7 @@ static struct clk hsotgusb_ick_3430es1 = {
1722 1726
1723static struct clk hsotgusb_ick_3430es2 = { 1727static struct clk hsotgusb_ick_3430es2 = {
1724 .name = "hsotgusb_ick", 1728 .name = "hsotgusb_ick",
1725 .ops = &clkops_omap3430es2_hsotgusb_wait, 1729 .ops = &clkops_omap3430es2_iclk_hsotgusb_wait,
1726 .parent = &core_l3_ick, 1730 .parent = &core_l3_ick,
1727 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1731 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1728 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT, 1732 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
@@ -1730,6 +1734,7 @@ static struct clk hsotgusb_ick_3430es2 = {
1730 .recalc = &followparent_recalc, 1734 .recalc = &followparent_recalc,
1731}; 1735};
1732 1736
1737/* This interface clock does not have a CM_AUTOIDLE bit */
1733static struct clk sdrc_ick = { 1738static struct clk sdrc_ick = {
1734 .name = "sdrc_ick", 1739 .name = "sdrc_ick",
1735 .ops = &clkops_omap2_dflt_wait, 1740 .ops = &clkops_omap2_dflt_wait,
@@ -1761,7 +1766,7 @@ static struct clk security_l3_ick = {
1761 1766
1762static struct clk pka_ick = { 1767static struct clk pka_ick = {
1763 .name = "pka_ick", 1768 .name = "pka_ick",
1764 .ops = &clkops_omap2_dflt_wait, 1769 .ops = &clkops_omap2_iclk_dflt_wait,
1765 .parent = &security_l3_ick, 1770 .parent = &security_l3_ick,
1766 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1771 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1767 .enable_bit = OMAP3430_EN_PKA_SHIFT, 1772 .enable_bit = OMAP3430_EN_PKA_SHIFT,
@@ -1780,7 +1785,7 @@ static struct clk core_l4_ick = {
1780 1785
1781static struct clk usbtll_ick = { 1786static struct clk usbtll_ick = {
1782 .name = "usbtll_ick", 1787 .name = "usbtll_ick",
1783 .ops = &clkops_omap2_dflt_wait, 1788 .ops = &clkops_omap2_iclk_dflt_wait,
1784 .parent = &core_l4_ick, 1789 .parent = &core_l4_ick,
1785 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), 1790 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1786 .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT, 1791 .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
@@ -1790,7 +1795,7 @@ static struct clk usbtll_ick = {
1790 1795
1791static struct clk mmchs3_ick = { 1796static struct clk mmchs3_ick = {
1792 .name = "mmchs3_ick", 1797 .name = "mmchs3_ick",
1793 .ops = &clkops_omap2_dflt_wait, 1798 .ops = &clkops_omap2_iclk_dflt_wait,
1794 .parent = &core_l4_ick, 1799 .parent = &core_l4_ick,
1795 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1800 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1796 .enable_bit = OMAP3430ES2_EN_MMC3_SHIFT, 1801 .enable_bit = OMAP3430ES2_EN_MMC3_SHIFT,
@@ -1801,7 +1806,7 @@ static struct clk mmchs3_ick = {
1801/* Intersystem Communication Registers - chassis mode only */ 1806/* Intersystem Communication Registers - chassis mode only */
1802static struct clk icr_ick = { 1807static struct clk icr_ick = {
1803 .name = "icr_ick", 1808 .name = "icr_ick",
1804 .ops = &clkops_omap2_dflt_wait, 1809 .ops = &clkops_omap2_iclk_dflt_wait,
1805 .parent = &core_l4_ick, 1810 .parent = &core_l4_ick,
1806 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1811 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1807 .enable_bit = OMAP3430_EN_ICR_SHIFT, 1812 .enable_bit = OMAP3430_EN_ICR_SHIFT,
@@ -1811,7 +1816,7 @@ static struct clk icr_ick = {
1811 1816
1812static struct clk aes2_ick = { 1817static struct clk aes2_ick = {
1813 .name = "aes2_ick", 1818 .name = "aes2_ick",
1814 .ops = &clkops_omap2_dflt_wait, 1819 .ops = &clkops_omap2_iclk_dflt_wait,
1815 .parent = &core_l4_ick, 1820 .parent = &core_l4_ick,
1816 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1821 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1817 .enable_bit = OMAP3430_EN_AES2_SHIFT, 1822 .enable_bit = OMAP3430_EN_AES2_SHIFT,
@@ -1821,7 +1826,7 @@ static struct clk aes2_ick = {
1821 1826
1822static struct clk sha12_ick = { 1827static struct clk sha12_ick = {
1823 .name = "sha12_ick", 1828 .name = "sha12_ick",
1824 .ops = &clkops_omap2_dflt_wait, 1829 .ops = &clkops_omap2_iclk_dflt_wait,
1825 .parent = &core_l4_ick, 1830 .parent = &core_l4_ick,
1826 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1831 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1827 .enable_bit = OMAP3430_EN_SHA12_SHIFT, 1832 .enable_bit = OMAP3430_EN_SHA12_SHIFT,
@@ -1831,7 +1836,7 @@ static struct clk sha12_ick = {
1831 1836
1832static struct clk des2_ick = { 1837static struct clk des2_ick = {
1833 .name = "des2_ick", 1838 .name = "des2_ick",
1834 .ops = &clkops_omap2_dflt_wait, 1839 .ops = &clkops_omap2_iclk_dflt_wait,
1835 .parent = &core_l4_ick, 1840 .parent = &core_l4_ick,
1836 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1841 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1837 .enable_bit = OMAP3430_EN_DES2_SHIFT, 1842 .enable_bit = OMAP3430_EN_DES2_SHIFT,
@@ -1841,7 +1846,7 @@ static struct clk des2_ick = {
1841 1846
1842static struct clk mmchs2_ick = { 1847static struct clk mmchs2_ick = {
1843 .name = "mmchs2_ick", 1848 .name = "mmchs2_ick",
1844 .ops = &clkops_omap2_dflt_wait, 1849 .ops = &clkops_omap2_iclk_dflt_wait,
1845 .parent = &core_l4_ick, 1850 .parent = &core_l4_ick,
1846 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1851 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1847 .enable_bit = OMAP3430_EN_MMC2_SHIFT, 1852 .enable_bit = OMAP3430_EN_MMC2_SHIFT,
@@ -1851,7 +1856,7 @@ static struct clk mmchs2_ick = {
1851 1856
1852static struct clk mmchs1_ick = { 1857static struct clk mmchs1_ick = {
1853 .name = "mmchs1_ick", 1858 .name = "mmchs1_ick",
1854 .ops = &clkops_omap2_dflt_wait, 1859 .ops = &clkops_omap2_iclk_dflt_wait,
1855 .parent = &core_l4_ick, 1860 .parent = &core_l4_ick,
1856 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1861 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1857 .enable_bit = OMAP3430_EN_MMC1_SHIFT, 1862 .enable_bit = OMAP3430_EN_MMC1_SHIFT,
@@ -1861,7 +1866,7 @@ static struct clk mmchs1_ick = {
1861 1866
1862static struct clk mspro_ick = { 1867static struct clk mspro_ick = {
1863 .name = "mspro_ick", 1868 .name = "mspro_ick",
1864 .ops = &clkops_omap2_dflt_wait, 1869 .ops = &clkops_omap2_iclk_dflt_wait,
1865 .parent = &core_l4_ick, 1870 .parent = &core_l4_ick,
1866 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1871 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1867 .enable_bit = OMAP3430_EN_MSPRO_SHIFT, 1872 .enable_bit = OMAP3430_EN_MSPRO_SHIFT,
@@ -1871,7 +1876,7 @@ static struct clk mspro_ick = {
1871 1876
1872static struct clk hdq_ick = { 1877static struct clk hdq_ick = {
1873 .name = "hdq_ick", 1878 .name = "hdq_ick",
1874 .ops = &clkops_omap2_dflt_wait, 1879 .ops = &clkops_omap2_iclk_dflt_wait,
1875 .parent = &core_l4_ick, 1880 .parent = &core_l4_ick,
1876 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1881 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1877 .enable_bit = OMAP3430_EN_HDQ_SHIFT, 1882 .enable_bit = OMAP3430_EN_HDQ_SHIFT,
@@ -1881,7 +1886,7 @@ static struct clk hdq_ick = {
1881 1886
1882static struct clk mcspi4_ick = { 1887static struct clk mcspi4_ick = {
1883 .name = "mcspi4_ick", 1888 .name = "mcspi4_ick",
1884 .ops = &clkops_omap2_dflt_wait, 1889 .ops = &clkops_omap2_iclk_dflt_wait,
1885 .parent = &core_l4_ick, 1890 .parent = &core_l4_ick,
1886 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1891 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1887 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT, 1892 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
@@ -1891,7 +1896,7 @@ static struct clk mcspi4_ick = {
1891 1896
1892static struct clk mcspi3_ick = { 1897static struct clk mcspi3_ick = {
1893 .name = "mcspi3_ick", 1898 .name = "mcspi3_ick",
1894 .ops = &clkops_omap2_dflt_wait, 1899 .ops = &clkops_omap2_iclk_dflt_wait,
1895 .parent = &core_l4_ick, 1900 .parent = &core_l4_ick,
1896 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1901 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1897 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT, 1902 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
@@ -1901,7 +1906,7 @@ static struct clk mcspi3_ick = {
1901 1906
1902static struct clk mcspi2_ick = { 1907static struct clk mcspi2_ick = {
1903 .name = "mcspi2_ick", 1908 .name = "mcspi2_ick",
1904 .ops = &clkops_omap2_dflt_wait, 1909 .ops = &clkops_omap2_iclk_dflt_wait,
1905 .parent = &core_l4_ick, 1910 .parent = &core_l4_ick,
1906 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1911 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1907 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT, 1912 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
@@ -1911,7 +1916,7 @@ static struct clk mcspi2_ick = {
1911 1916
1912static struct clk mcspi1_ick = { 1917static struct clk mcspi1_ick = {
1913 .name = "mcspi1_ick", 1918 .name = "mcspi1_ick",
1914 .ops = &clkops_omap2_dflt_wait, 1919 .ops = &clkops_omap2_iclk_dflt_wait,
1915 .parent = &core_l4_ick, 1920 .parent = &core_l4_ick,
1916 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1921 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1917 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT, 1922 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
@@ -1921,7 +1926,7 @@ static struct clk mcspi1_ick = {
1921 1926
1922static struct clk i2c3_ick = { 1927static struct clk i2c3_ick = {
1923 .name = "i2c3_ick", 1928 .name = "i2c3_ick",
1924 .ops = &clkops_omap2_dflt_wait, 1929 .ops = &clkops_omap2_iclk_dflt_wait,
1925 .parent = &core_l4_ick, 1930 .parent = &core_l4_ick,
1926 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1931 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1927 .enable_bit = OMAP3430_EN_I2C3_SHIFT, 1932 .enable_bit = OMAP3430_EN_I2C3_SHIFT,
@@ -1931,7 +1936,7 @@ static struct clk i2c3_ick = {
1931 1936
1932static struct clk i2c2_ick = { 1937static struct clk i2c2_ick = {
1933 .name = "i2c2_ick", 1938 .name = "i2c2_ick",
1934 .ops = &clkops_omap2_dflt_wait, 1939 .ops = &clkops_omap2_iclk_dflt_wait,
1935 .parent = &core_l4_ick, 1940 .parent = &core_l4_ick,
1936 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1941 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1937 .enable_bit = OMAP3430_EN_I2C2_SHIFT, 1942 .enable_bit = OMAP3430_EN_I2C2_SHIFT,
@@ -1941,7 +1946,7 @@ static struct clk i2c2_ick = {
1941 1946
1942static struct clk i2c1_ick = { 1947static struct clk i2c1_ick = {
1943 .name = "i2c1_ick", 1948 .name = "i2c1_ick",
1944 .ops = &clkops_omap2_dflt_wait, 1949 .ops = &clkops_omap2_iclk_dflt_wait,
1945 .parent = &core_l4_ick, 1950 .parent = &core_l4_ick,
1946 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1951 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1947 .enable_bit = OMAP3430_EN_I2C1_SHIFT, 1952 .enable_bit = OMAP3430_EN_I2C1_SHIFT,
@@ -1951,7 +1956,7 @@ static struct clk i2c1_ick = {
1951 1956
1952static struct clk uart2_ick = { 1957static struct clk uart2_ick = {
1953 .name = "uart2_ick", 1958 .name = "uart2_ick",
1954 .ops = &clkops_omap2_dflt_wait, 1959 .ops = &clkops_omap2_iclk_dflt_wait,
1955 .parent = &core_l4_ick, 1960 .parent = &core_l4_ick,
1956 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1961 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1957 .enable_bit = OMAP3430_EN_UART2_SHIFT, 1962 .enable_bit = OMAP3430_EN_UART2_SHIFT,
@@ -1961,7 +1966,7 @@ static struct clk uart2_ick = {
1961 1966
1962static struct clk uart1_ick = { 1967static struct clk uart1_ick = {
1963 .name = "uart1_ick", 1968 .name = "uart1_ick",
1964 .ops = &clkops_omap2_dflt_wait, 1969 .ops = &clkops_omap2_iclk_dflt_wait,
1965 .parent = &core_l4_ick, 1970 .parent = &core_l4_ick,
1966 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1971 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1967 .enable_bit = OMAP3430_EN_UART1_SHIFT, 1972 .enable_bit = OMAP3430_EN_UART1_SHIFT,
@@ -1971,7 +1976,7 @@ static struct clk uart1_ick = {
1971 1976
1972static struct clk gpt11_ick = { 1977static struct clk gpt11_ick = {
1973 .name = "gpt11_ick", 1978 .name = "gpt11_ick",
1974 .ops = &clkops_omap2_dflt_wait, 1979 .ops = &clkops_omap2_iclk_dflt_wait,
1975 .parent = &core_l4_ick, 1980 .parent = &core_l4_ick,
1976 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1981 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1977 .enable_bit = OMAP3430_EN_GPT11_SHIFT, 1982 .enable_bit = OMAP3430_EN_GPT11_SHIFT,
@@ -1981,7 +1986,7 @@ static struct clk gpt11_ick = {
1981 1986
1982static struct clk gpt10_ick = { 1987static struct clk gpt10_ick = {
1983 .name = "gpt10_ick", 1988 .name = "gpt10_ick",
1984 .ops = &clkops_omap2_dflt_wait, 1989 .ops = &clkops_omap2_iclk_dflt_wait,
1985 .parent = &core_l4_ick, 1990 .parent = &core_l4_ick,
1986 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1991 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1987 .enable_bit = OMAP3430_EN_GPT10_SHIFT, 1992 .enable_bit = OMAP3430_EN_GPT10_SHIFT,
@@ -1991,7 +1996,7 @@ static struct clk gpt10_ick = {
1991 1996
1992static struct clk mcbsp5_ick = { 1997static struct clk mcbsp5_ick = {
1993 .name = "mcbsp5_ick", 1998 .name = "mcbsp5_ick",
1994 .ops = &clkops_omap2_dflt_wait, 1999 .ops = &clkops_omap2_iclk_dflt_wait,
1995 .parent = &core_l4_ick, 2000 .parent = &core_l4_ick,
1996 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2001 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1997 .enable_bit = OMAP3430_EN_MCBSP5_SHIFT, 2002 .enable_bit = OMAP3430_EN_MCBSP5_SHIFT,
@@ -2001,7 +2006,7 @@ static struct clk mcbsp5_ick = {
2001 2006
2002static struct clk mcbsp1_ick = { 2007static struct clk mcbsp1_ick = {
2003 .name = "mcbsp1_ick", 2008 .name = "mcbsp1_ick",
2004 .ops = &clkops_omap2_dflt_wait, 2009 .ops = &clkops_omap2_iclk_dflt_wait,
2005 .parent = &core_l4_ick, 2010 .parent = &core_l4_ick,
2006 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2011 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2007 .enable_bit = OMAP3430_EN_MCBSP1_SHIFT, 2012 .enable_bit = OMAP3430_EN_MCBSP1_SHIFT,
@@ -2011,7 +2016,7 @@ static struct clk mcbsp1_ick = {
2011 2016
2012static struct clk fac_ick = { 2017static struct clk fac_ick = {
2013 .name = "fac_ick", 2018 .name = "fac_ick",
2014 .ops = &clkops_omap2_dflt_wait, 2019 .ops = &clkops_omap2_iclk_dflt_wait,
2015 .parent = &core_l4_ick, 2020 .parent = &core_l4_ick,
2016 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2021 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2017 .enable_bit = OMAP3430ES1_EN_FAC_SHIFT, 2022 .enable_bit = OMAP3430ES1_EN_FAC_SHIFT,
@@ -2021,7 +2026,7 @@ static struct clk fac_ick = {
2021 2026
2022static struct clk mailboxes_ick = { 2027static struct clk mailboxes_ick = {
2023 .name = "mailboxes_ick", 2028 .name = "mailboxes_ick",
2024 .ops = &clkops_omap2_dflt_wait, 2029 .ops = &clkops_omap2_iclk_dflt_wait,
2025 .parent = &core_l4_ick, 2030 .parent = &core_l4_ick,
2026 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2031 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2027 .enable_bit = OMAP3430_EN_MAILBOXES_SHIFT, 2032 .enable_bit = OMAP3430_EN_MAILBOXES_SHIFT,
@@ -2031,7 +2036,7 @@ static struct clk mailboxes_ick = {
2031 2036
2032static struct clk omapctrl_ick = { 2037static struct clk omapctrl_ick = {
2033 .name = "omapctrl_ick", 2038 .name = "omapctrl_ick",
2034 .ops = &clkops_omap2_dflt_wait, 2039 .ops = &clkops_omap2_iclk_dflt_wait,
2035 .parent = &core_l4_ick, 2040 .parent = &core_l4_ick,
2036 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2041 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2037 .enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT, 2042 .enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT,
@@ -2051,7 +2056,7 @@ static struct clk ssi_l4_ick = {
2051 2056
2052static struct clk ssi_ick_3430es1 = { 2057static struct clk ssi_ick_3430es1 = {
2053 .name = "ssi_ick", 2058 .name = "ssi_ick",
2054 .ops = &clkops_omap2_dflt, 2059 .ops = &clkops_omap2_iclk_dflt,
2055 .parent = &ssi_l4_ick, 2060 .parent = &ssi_l4_ick,
2056 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2061 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2057 .enable_bit = OMAP3430_EN_SSI_SHIFT, 2062 .enable_bit = OMAP3430_EN_SSI_SHIFT,
@@ -2061,7 +2066,7 @@ static struct clk ssi_ick_3430es1 = {
2061 2066
2062static struct clk ssi_ick_3430es2 = { 2067static struct clk ssi_ick_3430es2 = {
2063 .name = "ssi_ick", 2068 .name = "ssi_ick",
2064 .ops = &clkops_omap3430es2_ssi_wait, 2069 .ops = &clkops_omap3430es2_iclk_ssi_wait,
2065 .parent = &ssi_l4_ick, 2070 .parent = &ssi_l4_ick,
2066 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2071 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2067 .enable_bit = OMAP3430_EN_SSI_SHIFT, 2072 .enable_bit = OMAP3430_EN_SSI_SHIFT,
@@ -2079,7 +2084,7 @@ static const struct clksel usb_l4_clksel[] = {
2079 2084
2080static struct clk usb_l4_ick = { 2085static struct clk usb_l4_ick = {
2081 .name = "usb_l4_ick", 2086 .name = "usb_l4_ick",
2082 .ops = &clkops_omap2_dflt_wait, 2087 .ops = &clkops_omap2_iclk_dflt_wait,
2083 .parent = &l4_ick, 2088 .parent = &l4_ick,
2084 .init = &omap2_init_clksel_parent, 2089 .init = &omap2_init_clksel_parent,
2085 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 2090 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -2101,7 +2106,7 @@ static struct clk security_l4_ick2 = {
2101 2106
2102static struct clk aes1_ick = { 2107static struct clk aes1_ick = {
2103 .name = "aes1_ick", 2108 .name = "aes1_ick",
2104 .ops = &clkops_omap2_dflt_wait, 2109 .ops = &clkops_omap2_iclk_dflt_wait,
2105 .parent = &security_l4_ick2, 2110 .parent = &security_l4_ick2,
2106 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 2111 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2107 .enable_bit = OMAP3430_EN_AES1_SHIFT, 2112 .enable_bit = OMAP3430_EN_AES1_SHIFT,
@@ -2110,7 +2115,7 @@ static struct clk aes1_ick = {
2110 2115
2111static struct clk rng_ick = { 2116static struct clk rng_ick = {
2112 .name = "rng_ick", 2117 .name = "rng_ick",
2113 .ops = &clkops_omap2_dflt_wait, 2118 .ops = &clkops_omap2_iclk_dflt_wait,
2114 .parent = &security_l4_ick2, 2119 .parent = &security_l4_ick2,
2115 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 2120 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2116 .enable_bit = OMAP3430_EN_RNG_SHIFT, 2121 .enable_bit = OMAP3430_EN_RNG_SHIFT,
@@ -2119,7 +2124,7 @@ static struct clk rng_ick = {
2119 2124
2120static struct clk sha11_ick = { 2125static struct clk sha11_ick = {
2121 .name = "sha11_ick", 2126 .name = "sha11_ick",
2122 .ops = &clkops_omap2_dflt_wait, 2127 .ops = &clkops_omap2_iclk_dflt_wait,
2123 .parent = &security_l4_ick2, 2128 .parent = &security_l4_ick2,
2124 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 2129 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2125 .enable_bit = OMAP3430_EN_SHA11_SHIFT, 2130 .enable_bit = OMAP3430_EN_SHA11_SHIFT,
@@ -2128,7 +2133,7 @@ static struct clk sha11_ick = {
2128 2133
2129static struct clk des1_ick = { 2134static struct clk des1_ick = {
2130 .name = "des1_ick", 2135 .name = "des1_ick",
2131 .ops = &clkops_omap2_dflt_wait, 2136 .ops = &clkops_omap2_iclk_dflt_wait,
2132 .parent = &security_l4_ick2, 2137 .parent = &security_l4_ick2,
2133 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 2138 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2134 .enable_bit = OMAP3430_EN_DES1_SHIFT, 2139 .enable_bit = OMAP3430_EN_DES1_SHIFT,
@@ -2189,7 +2194,7 @@ static struct clk dss2_alwon_fck = {
2189static struct clk dss_ick_3430es1 = { 2194static struct clk dss_ick_3430es1 = {
2190 /* Handles both L3 and L4 clocks */ 2195 /* Handles both L3 and L4 clocks */
2191 .name = "dss_ick", 2196 .name = "dss_ick",
2192 .ops = &clkops_omap2_dflt, 2197 .ops = &clkops_omap2_iclk_dflt,
2193 .parent = &l4_ick, 2198 .parent = &l4_ick,
2194 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN), 2199 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
2195 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT, 2200 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
@@ -2200,7 +2205,7 @@ static struct clk dss_ick_3430es1 = {
2200static struct clk dss_ick_3430es2 = { 2205static struct clk dss_ick_3430es2 = {
2201 /* Handles both L3 and L4 clocks */ 2206 /* Handles both L3 and L4 clocks */
2202 .name = "dss_ick", 2207 .name = "dss_ick",
2203 .ops = &clkops_omap3430es2_dss_usbhost_wait, 2208 .ops = &clkops_omap3430es2_iclk_dss_usbhost_wait,
2204 .parent = &l4_ick, 2209 .parent = &l4_ick,
2205 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN), 2210 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
2206 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT, 2211 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
@@ -2223,7 +2228,7 @@ static struct clk cam_mclk = {
2223static struct clk cam_ick = { 2228static struct clk cam_ick = {
2224 /* Handles both L3 and L4 clocks */ 2229 /* Handles both L3 and L4 clocks */
2225 .name = "cam_ick", 2230 .name = "cam_ick",
2226 .ops = &clkops_omap2_dflt, 2231 .ops = &clkops_omap2_iclk_dflt,
2227 .parent = &l4_ick, 2232 .parent = &l4_ick,
2228 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN), 2233 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN),
2229 .enable_bit = OMAP3430_EN_CAM_SHIFT, 2234 .enable_bit = OMAP3430_EN_CAM_SHIFT,
@@ -2266,7 +2271,7 @@ static struct clk usbhost_48m_fck = {
2266static struct clk usbhost_ick = { 2271static struct clk usbhost_ick = {
2267 /* Handles both L3 and L4 clocks */ 2272 /* Handles both L3 and L4 clocks */
2268 .name = "usbhost_ick", 2273 .name = "usbhost_ick",
2269 .ops = &clkops_omap3430es2_dss_usbhost_wait, 2274 .ops = &clkops_omap3430es2_iclk_dss_usbhost_wait,
2270 .parent = &l4_ick, 2275 .parent = &l4_ick,
2271 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN), 2276 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN),
2272 .enable_bit = OMAP3430ES2_EN_USBHOST_SHIFT, 2277 .enable_bit = OMAP3430ES2_EN_USBHOST_SHIFT,
@@ -2366,7 +2371,7 @@ static struct clk wkup_l4_ick = {
2366/* Never specifically named in the TRM, so we have to infer a likely name */ 2371/* Never specifically named in the TRM, so we have to infer a likely name */
2367static struct clk usim_ick = { 2372static struct clk usim_ick = {
2368 .name = "usim_ick", 2373 .name = "usim_ick",
2369 .ops = &clkops_omap2_dflt_wait, 2374 .ops = &clkops_omap2_iclk_dflt_wait,
2370 .parent = &wkup_l4_ick, 2375 .parent = &wkup_l4_ick,
2371 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 2376 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2372 .enable_bit = OMAP3430ES2_EN_USIMOCP_SHIFT, 2377 .enable_bit = OMAP3430ES2_EN_USIMOCP_SHIFT,
@@ -2376,7 +2381,7 @@ static struct clk usim_ick = {
2376 2381
2377static struct clk wdt2_ick = { 2382static struct clk wdt2_ick = {
2378 .name = "wdt2_ick", 2383 .name = "wdt2_ick",
2379 .ops = &clkops_omap2_dflt_wait, 2384 .ops = &clkops_omap2_iclk_dflt_wait,
2380 .parent = &wkup_l4_ick, 2385 .parent = &wkup_l4_ick,
2381 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 2386 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2382 .enable_bit = OMAP3430_EN_WDT2_SHIFT, 2387 .enable_bit = OMAP3430_EN_WDT2_SHIFT,
@@ -2386,7 +2391,7 @@ static struct clk wdt2_ick = {
2386 2391
2387static struct clk wdt1_ick = { 2392static struct clk wdt1_ick = {
2388 .name = "wdt1_ick", 2393 .name = "wdt1_ick",
2389 .ops = &clkops_omap2_dflt_wait, 2394 .ops = &clkops_omap2_iclk_dflt_wait,
2390 .parent = &wkup_l4_ick, 2395 .parent = &wkup_l4_ick,
2391 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 2396 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2392 .enable_bit = OMAP3430_EN_WDT1_SHIFT, 2397 .enable_bit = OMAP3430_EN_WDT1_SHIFT,
@@ -2396,7 +2401,7 @@ static struct clk wdt1_ick = {
2396 2401
2397static struct clk gpio1_ick = { 2402static struct clk gpio1_ick = {
2398 .name = "gpio1_ick", 2403 .name = "gpio1_ick",
2399 .ops = &clkops_omap2_dflt_wait, 2404 .ops = &clkops_omap2_iclk_dflt_wait,
2400 .parent = &wkup_l4_ick, 2405 .parent = &wkup_l4_ick,
2401 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 2406 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2402 .enable_bit = OMAP3430_EN_GPIO1_SHIFT, 2407 .enable_bit = OMAP3430_EN_GPIO1_SHIFT,
@@ -2406,7 +2411,7 @@ static struct clk gpio1_ick = {
2406 2411
2407static struct clk omap_32ksync_ick = { 2412static struct clk omap_32ksync_ick = {
2408 .name = "omap_32ksync_ick", 2413 .name = "omap_32ksync_ick",
2409 .ops = &clkops_omap2_dflt_wait, 2414 .ops = &clkops_omap2_iclk_dflt_wait,
2410 .parent = &wkup_l4_ick, 2415 .parent = &wkup_l4_ick,
2411 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 2416 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2412 .enable_bit = OMAP3430_EN_32KSYNC_SHIFT, 2417 .enable_bit = OMAP3430_EN_32KSYNC_SHIFT,
@@ -2417,7 +2422,7 @@ static struct clk omap_32ksync_ick = {
2417/* XXX This clock no longer exists in 3430 TRM rev F */ 2422/* XXX This clock no longer exists in 3430 TRM rev F */
2418static struct clk gpt12_ick = { 2423static struct clk gpt12_ick = {
2419 .name = "gpt12_ick", 2424 .name = "gpt12_ick",
2420 .ops = &clkops_omap2_dflt_wait, 2425 .ops = &clkops_omap2_iclk_dflt_wait,
2421 .parent = &wkup_l4_ick, 2426 .parent = &wkup_l4_ick,
2422 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 2427 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2423 .enable_bit = OMAP3430_EN_GPT12_SHIFT, 2428 .enable_bit = OMAP3430_EN_GPT12_SHIFT,
@@ -2427,7 +2432,7 @@ static struct clk gpt12_ick = {
2427 2432
2428static struct clk gpt1_ick = { 2433static struct clk gpt1_ick = {
2429 .name = "gpt1_ick", 2434 .name = "gpt1_ick",
2430 .ops = &clkops_omap2_dflt_wait, 2435 .ops = &clkops_omap2_iclk_dflt_wait,
2431 .parent = &wkup_l4_ick, 2436 .parent = &wkup_l4_ick,
2432 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 2437 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2433 .enable_bit = OMAP3430_EN_GPT1_SHIFT, 2438 .enable_bit = OMAP3430_EN_GPT1_SHIFT,
@@ -2465,6 +2470,16 @@ static struct clk uart3_fck = {
2465 .recalc = &followparent_recalc, 2470 .recalc = &followparent_recalc,
2466}; 2471};
2467 2472
2473static struct clk uart4_fck = {
2474 .name = "uart4_fck",
2475 .ops = &clkops_omap2_dflt_wait,
2476 .parent = &per_48m_fck,
2477 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2478 .enable_bit = OMAP3630_EN_UART4_SHIFT,
2479 .clkdm_name = "per_clkdm",
2480 .recalc = &followparent_recalc,
2481};
2482
2468static struct clk gpt2_fck = { 2483static struct clk gpt2_fck = {
2469 .name = "gpt2_fck", 2484 .name = "gpt2_fck",
2470 .ops = &clkops_omap2_dflt_wait, 2485 .ops = &clkops_omap2_dflt_wait,
@@ -2647,7 +2662,7 @@ static struct clk per_l4_ick = {
2647 2662
2648static struct clk gpio6_ick = { 2663static struct clk gpio6_ick = {
2649 .name = "gpio6_ick", 2664 .name = "gpio6_ick",
2650 .ops = &clkops_omap2_dflt_wait, 2665 .ops = &clkops_omap2_iclk_dflt_wait,
2651 .parent = &per_l4_ick, 2666 .parent = &per_l4_ick,
2652 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2667 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2653 .enable_bit = OMAP3430_EN_GPIO6_SHIFT, 2668 .enable_bit = OMAP3430_EN_GPIO6_SHIFT,
@@ -2657,7 +2672,7 @@ static struct clk gpio6_ick = {
2657 2672
2658static struct clk gpio5_ick = { 2673static struct clk gpio5_ick = {
2659 .name = "gpio5_ick", 2674 .name = "gpio5_ick",
2660 .ops = &clkops_omap2_dflt_wait, 2675 .ops = &clkops_omap2_iclk_dflt_wait,
2661 .parent = &per_l4_ick, 2676 .parent = &per_l4_ick,
2662 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2677 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2663 .enable_bit = OMAP3430_EN_GPIO5_SHIFT, 2678 .enable_bit = OMAP3430_EN_GPIO5_SHIFT,
@@ -2667,7 +2682,7 @@ static struct clk gpio5_ick = {
2667 2682
2668static struct clk gpio4_ick = { 2683static struct clk gpio4_ick = {
2669 .name = "gpio4_ick", 2684 .name = "gpio4_ick",
2670 .ops = &clkops_omap2_dflt_wait, 2685 .ops = &clkops_omap2_iclk_dflt_wait,
2671 .parent = &per_l4_ick, 2686 .parent = &per_l4_ick,
2672 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2687 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2673 .enable_bit = OMAP3430_EN_GPIO4_SHIFT, 2688 .enable_bit = OMAP3430_EN_GPIO4_SHIFT,
@@ -2677,7 +2692,7 @@ static struct clk gpio4_ick = {
2677 2692
2678static struct clk gpio3_ick = { 2693static struct clk gpio3_ick = {
2679 .name = "gpio3_ick", 2694 .name = "gpio3_ick",
2680 .ops = &clkops_omap2_dflt_wait, 2695 .ops = &clkops_omap2_iclk_dflt_wait,
2681 .parent = &per_l4_ick, 2696 .parent = &per_l4_ick,
2682 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2697 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2683 .enable_bit = OMAP3430_EN_GPIO3_SHIFT, 2698 .enable_bit = OMAP3430_EN_GPIO3_SHIFT,
@@ -2687,7 +2702,7 @@ static struct clk gpio3_ick = {
2687 2702
2688static struct clk gpio2_ick = { 2703static struct clk gpio2_ick = {
2689 .name = "gpio2_ick", 2704 .name = "gpio2_ick",
2690 .ops = &clkops_omap2_dflt_wait, 2705 .ops = &clkops_omap2_iclk_dflt_wait,
2691 .parent = &per_l4_ick, 2706 .parent = &per_l4_ick,
2692 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2707 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2693 .enable_bit = OMAP3430_EN_GPIO2_SHIFT, 2708 .enable_bit = OMAP3430_EN_GPIO2_SHIFT,
@@ -2697,7 +2712,7 @@ static struct clk gpio2_ick = {
2697 2712
2698static struct clk wdt3_ick = { 2713static struct clk wdt3_ick = {
2699 .name = "wdt3_ick", 2714 .name = "wdt3_ick",
2700 .ops = &clkops_omap2_dflt_wait, 2715 .ops = &clkops_omap2_iclk_dflt_wait,
2701 .parent = &per_l4_ick, 2716 .parent = &per_l4_ick,
2702 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2717 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2703 .enable_bit = OMAP3430_EN_WDT3_SHIFT, 2718 .enable_bit = OMAP3430_EN_WDT3_SHIFT,
@@ -2707,7 +2722,7 @@ static struct clk wdt3_ick = {
2707 2722
2708static struct clk uart3_ick = { 2723static struct clk uart3_ick = {
2709 .name = "uart3_ick", 2724 .name = "uart3_ick",
2710 .ops = &clkops_omap2_dflt_wait, 2725 .ops = &clkops_omap2_iclk_dflt_wait,
2711 .parent = &per_l4_ick, 2726 .parent = &per_l4_ick,
2712 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2727 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2713 .enable_bit = OMAP3430_EN_UART3_SHIFT, 2728 .enable_bit = OMAP3430_EN_UART3_SHIFT,
@@ -2715,9 +2730,19 @@ static struct clk uart3_ick = {
2715 .recalc = &followparent_recalc, 2730 .recalc = &followparent_recalc,
2716}; 2731};
2717 2732
2733static struct clk uart4_ick = {
2734 .name = "uart4_ick",
2735 .ops = &clkops_omap2_iclk_dflt_wait,
2736 .parent = &per_l4_ick,
2737 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2738 .enable_bit = OMAP3630_EN_UART4_SHIFT,
2739 .clkdm_name = "per_clkdm",
2740 .recalc = &followparent_recalc,
2741};
2742
2718static struct clk gpt9_ick = { 2743static struct clk gpt9_ick = {
2719 .name = "gpt9_ick", 2744 .name = "gpt9_ick",
2720 .ops = &clkops_omap2_dflt_wait, 2745 .ops = &clkops_omap2_iclk_dflt_wait,
2721 .parent = &per_l4_ick, 2746 .parent = &per_l4_ick,
2722 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2747 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2723 .enable_bit = OMAP3430_EN_GPT9_SHIFT, 2748 .enable_bit = OMAP3430_EN_GPT9_SHIFT,
@@ -2727,7 +2752,7 @@ static struct clk gpt9_ick = {
2727 2752
2728static struct clk gpt8_ick = { 2753static struct clk gpt8_ick = {
2729 .name = "gpt8_ick", 2754 .name = "gpt8_ick",
2730 .ops = &clkops_omap2_dflt_wait, 2755 .ops = &clkops_omap2_iclk_dflt_wait,
2731 .parent = &per_l4_ick, 2756 .parent = &per_l4_ick,
2732 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2757 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2733 .enable_bit = OMAP3430_EN_GPT8_SHIFT, 2758 .enable_bit = OMAP3430_EN_GPT8_SHIFT,
@@ -2737,7 +2762,7 @@ static struct clk gpt8_ick = {
2737 2762
2738static struct clk gpt7_ick = { 2763static struct clk gpt7_ick = {
2739 .name = "gpt7_ick", 2764 .name = "gpt7_ick",
2740 .ops = &clkops_omap2_dflt_wait, 2765 .ops = &clkops_omap2_iclk_dflt_wait,
2741 .parent = &per_l4_ick, 2766 .parent = &per_l4_ick,
2742 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2767 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2743 .enable_bit = OMAP3430_EN_GPT7_SHIFT, 2768 .enable_bit = OMAP3430_EN_GPT7_SHIFT,
@@ -2747,7 +2772,7 @@ static struct clk gpt7_ick = {
2747 2772
2748static struct clk gpt6_ick = { 2773static struct clk gpt6_ick = {
2749 .name = "gpt6_ick", 2774 .name = "gpt6_ick",
2750 .ops = &clkops_omap2_dflt_wait, 2775 .ops = &clkops_omap2_iclk_dflt_wait,
2751 .parent = &per_l4_ick, 2776 .parent = &per_l4_ick,
2752 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2777 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2753 .enable_bit = OMAP3430_EN_GPT6_SHIFT, 2778 .enable_bit = OMAP3430_EN_GPT6_SHIFT,
@@ -2757,7 +2782,7 @@ static struct clk gpt6_ick = {
2757 2782
2758static struct clk gpt5_ick = { 2783static struct clk gpt5_ick = {
2759 .name = "gpt5_ick", 2784 .name = "gpt5_ick",
2760 .ops = &clkops_omap2_dflt_wait, 2785 .ops = &clkops_omap2_iclk_dflt_wait,
2761 .parent = &per_l4_ick, 2786 .parent = &per_l4_ick,
2762 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2787 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2763 .enable_bit = OMAP3430_EN_GPT5_SHIFT, 2788 .enable_bit = OMAP3430_EN_GPT5_SHIFT,
@@ -2767,7 +2792,7 @@ static struct clk gpt5_ick = {
2767 2792
2768static struct clk gpt4_ick = { 2793static struct clk gpt4_ick = {
2769 .name = "gpt4_ick", 2794 .name = "gpt4_ick",
2770 .ops = &clkops_omap2_dflt_wait, 2795 .ops = &clkops_omap2_iclk_dflt_wait,
2771 .parent = &per_l4_ick, 2796 .parent = &per_l4_ick,
2772 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2797 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2773 .enable_bit = OMAP3430_EN_GPT4_SHIFT, 2798 .enable_bit = OMAP3430_EN_GPT4_SHIFT,
@@ -2777,7 +2802,7 @@ static struct clk gpt4_ick = {
2777 2802
2778static struct clk gpt3_ick = { 2803static struct clk gpt3_ick = {
2779 .name = "gpt3_ick", 2804 .name = "gpt3_ick",
2780 .ops = &clkops_omap2_dflt_wait, 2805 .ops = &clkops_omap2_iclk_dflt_wait,
2781 .parent = &per_l4_ick, 2806 .parent = &per_l4_ick,
2782 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2807 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2783 .enable_bit = OMAP3430_EN_GPT3_SHIFT, 2808 .enable_bit = OMAP3430_EN_GPT3_SHIFT,
@@ -2787,7 +2812,7 @@ static struct clk gpt3_ick = {
2787 2812
2788static struct clk gpt2_ick = { 2813static struct clk gpt2_ick = {
2789 .name = "gpt2_ick", 2814 .name = "gpt2_ick",
2790 .ops = &clkops_omap2_dflt_wait, 2815 .ops = &clkops_omap2_iclk_dflt_wait,
2791 .parent = &per_l4_ick, 2816 .parent = &per_l4_ick,
2792 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2817 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2793 .enable_bit = OMAP3430_EN_GPT2_SHIFT, 2818 .enable_bit = OMAP3430_EN_GPT2_SHIFT,
@@ -2797,7 +2822,7 @@ static struct clk gpt2_ick = {
2797 2822
2798static struct clk mcbsp2_ick = { 2823static struct clk mcbsp2_ick = {
2799 .name = "mcbsp2_ick", 2824 .name = "mcbsp2_ick",
2800 .ops = &clkops_omap2_dflt_wait, 2825 .ops = &clkops_omap2_iclk_dflt_wait,
2801 .parent = &per_l4_ick, 2826 .parent = &per_l4_ick,
2802 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2827 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2803 .enable_bit = OMAP3430_EN_MCBSP2_SHIFT, 2828 .enable_bit = OMAP3430_EN_MCBSP2_SHIFT,
@@ -2807,7 +2832,7 @@ static struct clk mcbsp2_ick = {
2807 2832
2808static struct clk mcbsp3_ick = { 2833static struct clk mcbsp3_ick = {
2809 .name = "mcbsp3_ick", 2834 .name = "mcbsp3_ick",
2810 .ops = &clkops_omap2_dflt_wait, 2835 .ops = &clkops_omap2_iclk_dflt_wait,
2811 .parent = &per_l4_ick, 2836 .parent = &per_l4_ick,
2812 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2837 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2813 .enable_bit = OMAP3430_EN_MCBSP3_SHIFT, 2838 .enable_bit = OMAP3430_EN_MCBSP3_SHIFT,
@@ -2817,7 +2842,7 @@ static struct clk mcbsp3_ick = {
2817 2842
2818static struct clk mcbsp4_ick = { 2843static struct clk mcbsp4_ick = {
2819 .name = "mcbsp4_ick", 2844 .name = "mcbsp4_ick",
2820 .ops = &clkops_omap2_dflt_wait, 2845 .ops = &clkops_omap2_iclk_dflt_wait,
2821 .parent = &per_l4_ick, 2846 .parent = &per_l4_ick,
2822 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN), 2847 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2823 .enable_bit = OMAP3430_EN_MCBSP4_SHIFT, 2848 .enable_bit = OMAP3430_EN_MCBSP4_SHIFT,
@@ -3024,6 +3049,7 @@ static struct clk sr1_fck = {
3024 .parent = &sys_ck, 3049 .parent = &sys_ck,
3025 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN), 3050 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
3026 .enable_bit = OMAP3430_EN_SR1_SHIFT, 3051 .enable_bit = OMAP3430_EN_SR1_SHIFT,
3052 .clkdm_name = "wkup_clkdm",
3027 .recalc = &followparent_recalc, 3053 .recalc = &followparent_recalc,
3028}; 3054};
3029 3055
@@ -3034,6 +3060,7 @@ static struct clk sr2_fck = {
3034 .parent = &sys_ck, 3060 .parent = &sys_ck,
3035 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN), 3061 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
3036 .enable_bit = OMAP3430_EN_SR2_SHIFT, 3062 .enable_bit = OMAP3430_EN_SR2_SHIFT,
3063 .clkdm_name = "wkup_clkdm",
3037 .recalc = &followparent_recalc, 3064 .recalc = &followparent_recalc,
3038}; 3065};
3039 3066
@@ -3158,7 +3185,7 @@ static struct clk vpfe_fck = {
3158 */ 3185 */
3159static struct clk uart4_ick_am35xx = { 3186static struct clk uart4_ick_am35xx = {
3160 .name = "uart4_ick", 3187 .name = "uart4_ick",
3161 .ops = &clkops_omap2_dflt_wait, 3188 .ops = &clkops_omap2_iclk_dflt_wait,
3162 .parent = &core_l4_ick, 3189 .parent = &core_l4_ick,
3163 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 3190 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
3164 .enable_bit = AM35XX_EN_UART4_SHIFT, 3191 .enable_bit = AM35XX_EN_UART4_SHIFT,
@@ -3181,20 +3208,25 @@ static struct omap_clk omap3xxx_clks[] = {
3181 CLK(NULL, "omap_32k_fck", &omap_32k_fck, CK_3XXX), 3208 CLK(NULL, "omap_32k_fck", &omap_32k_fck, CK_3XXX),
3182 CLK(NULL, "virt_12m_ck", &virt_12m_ck, CK_3XXX), 3209 CLK(NULL, "virt_12m_ck", &virt_12m_ck, CK_3XXX),
3183 CLK(NULL, "virt_13m_ck", &virt_13m_ck, CK_3XXX), 3210 CLK(NULL, "virt_13m_ck", &virt_13m_ck, CK_3XXX),
3184 CLK(NULL, "virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2 | CK_AM35XX), 3211 CLK(NULL, "virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3185 CLK(NULL, "virt_19_2m_ck", &virt_19_2m_ck, CK_3XXX), 3212 CLK(NULL, "virt_19_2m_ck", &virt_19_2m_ck, CK_3XXX),
3186 CLK(NULL, "virt_26m_ck", &virt_26m_ck, CK_3XXX), 3213 CLK(NULL, "virt_26m_ck", &virt_26m_ck, CK_3XXX),
3187 CLK(NULL, "virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX), 3214 CLK(NULL, "virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX),
3188 CLK(NULL, "osc_sys_ck", &osc_sys_ck, CK_3XXX), 3215 CLK(NULL, "osc_sys_ck", &osc_sys_ck, CK_3XXX),
3189 CLK(NULL, "sys_ck", &sys_ck, CK_3XXX), 3216 CLK(NULL, "sys_ck", &sys_ck, CK_3XXX),
3190 CLK(NULL, "sys_altclk", &sys_altclk, CK_3XXX), 3217 CLK(NULL, "sys_altclk", &sys_altclk, CK_3XXX),
3218 CLK("omap-mcbsp.1", "pad_fck", &mcbsp_clks, CK_3XXX),
3219 CLK("omap-mcbsp.2", "pad_fck", &mcbsp_clks, CK_3XXX),
3220 CLK("omap-mcbsp.3", "pad_fck", &mcbsp_clks, CK_3XXX),
3221 CLK("omap-mcbsp.4", "pad_fck", &mcbsp_clks, CK_3XXX),
3222 CLK("omap-mcbsp.5", "pad_fck", &mcbsp_clks, CK_3XXX),
3191 CLK(NULL, "mcbsp_clks", &mcbsp_clks, CK_3XXX), 3223 CLK(NULL, "mcbsp_clks", &mcbsp_clks, CK_3XXX),
3192 CLK(NULL, "sys_clkout1", &sys_clkout1, CK_3XXX), 3224 CLK(NULL, "sys_clkout1", &sys_clkout1, CK_3XXX),
3193 CLK(NULL, "dpll1_ck", &dpll1_ck, CK_3XXX), 3225 CLK(NULL, "dpll1_ck", &dpll1_ck, CK_3XXX),
3194 CLK(NULL, "dpll1_x2_ck", &dpll1_x2_ck, CK_3XXX), 3226 CLK(NULL, "dpll1_x2_ck", &dpll1_x2_ck, CK_3XXX),
3195 CLK(NULL, "dpll1_x2m2_ck", &dpll1_x2m2_ck, CK_3XXX), 3227 CLK(NULL, "dpll1_x2m2_ck", &dpll1_x2m2_ck, CK_3XXX),
3196 CLK(NULL, "dpll2_ck", &dpll2_ck, CK_343X), 3228 CLK(NULL, "dpll2_ck", &dpll2_ck, CK_34XX | CK_36XX),
3197 CLK(NULL, "dpll2_m2_ck", &dpll2_m2_ck, CK_343X), 3229 CLK(NULL, "dpll2_m2_ck", &dpll2_m2_ck, CK_34XX | CK_36XX),
3198 CLK(NULL, "dpll3_ck", &dpll3_ck, CK_3XXX), 3230 CLK(NULL, "dpll3_ck", &dpll3_ck, CK_3XXX),
3199 CLK(NULL, "core_ck", &core_ck, CK_3XXX), 3231 CLK(NULL, "core_ck", &core_ck, CK_3XXX),
3200 CLK(NULL, "dpll3_x2_ck", &dpll3_x2_ck, CK_3XXX), 3232 CLK(NULL, "dpll3_x2_ck", &dpll3_x2_ck, CK_3XXX),
@@ -3223,8 +3255,8 @@ static struct omap_clk omap3xxx_clks[] = {
3223 CLK(NULL, "dpll4_m6_ck", &dpll4_m6_ck, CK_3XXX), 3255 CLK(NULL, "dpll4_m6_ck", &dpll4_m6_ck, CK_3XXX),
3224 CLK(NULL, "dpll4_m6x2_ck", &dpll4_m6x2_ck, CK_3XXX), 3256 CLK(NULL, "dpll4_m6x2_ck", &dpll4_m6x2_ck, CK_3XXX),
3225 CLK("etb", "emu_per_alwon_ck", &emu_per_alwon_ck, CK_3XXX), 3257 CLK("etb", "emu_per_alwon_ck", &emu_per_alwon_ck, CK_3XXX),
3226 CLK(NULL, "dpll5_ck", &dpll5_ck, CK_3430ES2 | CK_AM35XX), 3258 CLK(NULL, "dpll5_ck", &dpll5_ck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3227 CLK(NULL, "dpll5_m2_ck", &dpll5_m2_ck, CK_3430ES2 | CK_AM35XX), 3259 CLK(NULL, "dpll5_m2_ck", &dpll5_m2_ck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3228 CLK(NULL, "clkout2_src_ck", &clkout2_src_ck, CK_3XXX), 3260 CLK(NULL, "clkout2_src_ck", &clkout2_src_ck, CK_3XXX),
3229 CLK(NULL, "sys_clkout2", &sys_clkout2, CK_3XXX), 3261 CLK(NULL, "sys_clkout2", &sys_clkout2, CK_3XXX),
3230 CLK(NULL, "corex2_fck", &corex2_fck, CK_3XXX), 3262 CLK(NULL, "corex2_fck", &corex2_fck, CK_3XXX),
@@ -3232,8 +3264,8 @@ static struct omap_clk omap3xxx_clks[] = {
3232 CLK(NULL, "mpu_ck", &mpu_ck, CK_3XXX), 3264 CLK(NULL, "mpu_ck", &mpu_ck, CK_3XXX),
3233 CLK(NULL, "arm_fck", &arm_fck, CK_3XXX), 3265 CLK(NULL, "arm_fck", &arm_fck, CK_3XXX),
3234 CLK("etb", "emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX), 3266 CLK("etb", "emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX),
3235 CLK(NULL, "dpll2_fck", &dpll2_fck, CK_343X), 3267 CLK(NULL, "dpll2_fck", &dpll2_fck, CK_34XX | CK_36XX),
3236 CLK(NULL, "iva2_ck", &iva2_ck, CK_343X), 3268 CLK(NULL, "iva2_ck", &iva2_ck, CK_34XX | CK_36XX),
3237 CLK(NULL, "l3_ick", &l3_ick, CK_3XXX), 3269 CLK(NULL, "l3_ick", &l3_ick, CK_3XXX),
3238 CLK(NULL, "l4_ick", &l4_ick, CK_3XXX), 3270 CLK(NULL, "l4_ick", &l4_ick, CK_3XXX),
3239 CLK(NULL, "rm_ick", &rm_ick, CK_3XXX), 3271 CLK(NULL, "rm_ick", &rm_ick, CK_3XXX),
@@ -3242,25 +3274,28 @@ static struct omap_clk omap3xxx_clks[] = {
3242 CLK(NULL, "gfx_l3_ick", &gfx_l3_ick, CK_3430ES1), 3274 CLK(NULL, "gfx_l3_ick", &gfx_l3_ick, CK_3430ES1),
3243 CLK(NULL, "gfx_cg1_ck", &gfx_cg1_ck, CK_3430ES1), 3275 CLK(NULL, "gfx_cg1_ck", &gfx_cg1_ck, CK_3430ES1),
3244 CLK(NULL, "gfx_cg2_ck", &gfx_cg2_ck, CK_3430ES1), 3276 CLK(NULL, "gfx_cg2_ck", &gfx_cg2_ck, CK_3430ES1),
3245 CLK(NULL, "sgx_fck", &sgx_fck, CK_3430ES2 | CK_3517), 3277 CLK(NULL, "sgx_fck", &sgx_fck, CK_3430ES2PLUS | CK_3517 | CK_36XX),
3246 CLK(NULL, "sgx_ick", &sgx_ick, CK_3430ES2 | CK_3517), 3278 CLK(NULL, "sgx_ick", &sgx_ick, CK_3430ES2PLUS | CK_3517 | CK_36XX),
3247 CLK(NULL, "d2d_26m_fck", &d2d_26m_fck, CK_3430ES1), 3279 CLK(NULL, "d2d_26m_fck", &d2d_26m_fck, CK_3430ES1),
3248 CLK(NULL, "modem_fck", &modem_fck, CK_343X), 3280 CLK(NULL, "modem_fck", &modem_fck, CK_34XX | CK_36XX),
3249 CLK(NULL, "sad2d_ick", &sad2d_ick, CK_343X), 3281 CLK(NULL, "sad2d_ick", &sad2d_ick, CK_34XX | CK_36XX),
3250 CLK(NULL, "mad2d_ick", &mad2d_ick, CK_343X), 3282 CLK(NULL, "mad2d_ick", &mad2d_ick, CK_34XX | CK_36XX),
3251 CLK(NULL, "gpt10_fck", &gpt10_fck, CK_3XXX), 3283 CLK(NULL, "gpt10_fck", &gpt10_fck, CK_3XXX),
3252 CLK(NULL, "gpt11_fck", &gpt11_fck, CK_3XXX), 3284 CLK(NULL, "gpt11_fck", &gpt11_fck, CK_3XXX),
3253 CLK(NULL, "cpefuse_fck", &cpefuse_fck, CK_3430ES2 | CK_AM35XX), 3285 CLK(NULL, "cpefuse_fck", &cpefuse_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3254 CLK(NULL, "ts_fck", &ts_fck, CK_3430ES2 | CK_AM35XX), 3286 CLK(NULL, "ts_fck", &ts_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3255 CLK(NULL, "usbtll_fck", &usbtll_fck, CK_3430ES2 | CK_AM35XX), 3287 CLK(NULL, "usbtll_fck", &usbtll_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3288 CLK("usbhs-omap.0", "usbtll_fck", &usbtll_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3289 CLK("omap-mcbsp.1", "prcm_fck", &core_96m_fck, CK_3XXX),
3290 CLK("omap-mcbsp.5", "prcm_fck", &core_96m_fck, CK_3XXX),
3256 CLK(NULL, "core_96m_fck", &core_96m_fck, CK_3XXX), 3291 CLK(NULL, "core_96m_fck", &core_96m_fck, CK_3XXX),
3257 CLK("mmci-omap-hs.2", "fck", &mmchs3_fck, CK_3430ES2 | CK_AM35XX), 3292 CLK("omap_hsmmc.2", "fck", &mmchs3_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3258 CLK("mmci-omap-hs.1", "fck", &mmchs2_fck, CK_3XXX), 3293 CLK("omap_hsmmc.1", "fck", &mmchs2_fck, CK_3XXX),
3259 CLK(NULL, "mspro_fck", &mspro_fck, CK_343X), 3294 CLK(NULL, "mspro_fck", &mspro_fck, CK_34XX | CK_36XX),
3260 CLK("mmci-omap-hs.0", "fck", &mmchs1_fck, CK_3XXX), 3295 CLK("omap_hsmmc.0", "fck", &mmchs1_fck, CK_3XXX),
3261 CLK("i2c_omap.3", "fck", &i2c3_fck, CK_3XXX), 3296 CLK("omap_i2c.3", "fck", &i2c3_fck, CK_3XXX),
3262 CLK("i2c_omap.2", "fck", &i2c2_fck, CK_3XXX), 3297 CLK("omap_i2c.2", "fck", &i2c2_fck, CK_3XXX),
3263 CLK("i2c_omap.1", "fck", &i2c1_fck, CK_3XXX), 3298 CLK("omap_i2c.1", "fck", &i2c1_fck, CK_3XXX),
3264 CLK("omap-mcbsp.5", "fck", &mcbsp5_fck, CK_3XXX), 3299 CLK("omap-mcbsp.5", "fck", &mcbsp5_fck, CK_3XXX),
3265 CLK("omap-mcbsp.1", "fck", &mcbsp1_fck, CK_3XXX), 3300 CLK("omap-mcbsp.1", "fck", &mcbsp1_fck, CK_3XXX),
3266 CLK(NULL, "core_48m_fck", &core_48m_fck, CK_3XXX), 3301 CLK(NULL, "core_48m_fck", &core_48m_fck, CK_3XXX),
@@ -3274,34 +3309,35 @@ static struct omap_clk omap3xxx_clks[] = {
3274 CLK(NULL, "core_12m_fck", &core_12m_fck, CK_3XXX), 3309 CLK(NULL, "core_12m_fck", &core_12m_fck, CK_3XXX),
3275 CLK("omap_hdq.0", "fck", &hdq_fck, CK_3XXX), 3310 CLK("omap_hdq.0", "fck", &hdq_fck, CK_3XXX),
3276 CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es1, CK_3430ES1), 3311 CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es1, CK_3430ES1),
3277 CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es2, CK_3430ES2), 3312 CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck_3430es2, CK_3430ES2PLUS | CK_36XX),
3278 CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es1, CK_3430ES1), 3313 CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es1, CK_3430ES1),
3279 CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es2, CK_3430ES2), 3314 CLK(NULL, "ssi_sst_fck", &ssi_sst_fck_3430es2, CK_3430ES2PLUS | CK_36XX),
3280 CLK(NULL, "core_l3_ick", &core_l3_ick, CK_3XXX), 3315 CLK(NULL, "core_l3_ick", &core_l3_ick, CK_3XXX),
3281 CLK("musb_hdrc", "ick", &hsotgusb_ick_3430es1, CK_3430ES1), 3316 CLK("musb-omap2430", "ick", &hsotgusb_ick_3430es1, CK_3430ES1),
3282 CLK("musb_hdrc", "ick", &hsotgusb_ick_3430es2, CK_3430ES2), 3317 CLK("musb-omap2430", "ick", &hsotgusb_ick_3430es2, CK_3430ES2PLUS | CK_36XX),
3283 CLK(NULL, "sdrc_ick", &sdrc_ick, CK_3XXX), 3318 CLK(NULL, "sdrc_ick", &sdrc_ick, CK_3XXX),
3284 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_3XXX), 3319 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_3XXX),
3285 CLK(NULL, "security_l3_ick", &security_l3_ick, CK_343X), 3320 CLK(NULL, "security_l3_ick", &security_l3_ick, CK_34XX | CK_36XX),
3286 CLK(NULL, "pka_ick", &pka_ick, CK_343X), 3321 CLK(NULL, "pka_ick", &pka_ick, CK_34XX | CK_36XX),
3287 CLK(NULL, "core_l4_ick", &core_l4_ick, CK_3XXX), 3322 CLK(NULL, "core_l4_ick", &core_l4_ick, CK_3XXX),
3288 CLK(NULL, "usbtll_ick", &usbtll_ick, CK_3430ES2 | CK_AM35XX), 3323 CLK(NULL, "usbtll_ick", &usbtll_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3289 CLK("mmci-omap-hs.2", "ick", &mmchs3_ick, CK_3430ES2 | CK_AM35XX), 3324 CLK("usbhs-omap.0", "usbtll_ick", &usbtll_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3290 CLK(NULL, "icr_ick", &icr_ick, CK_343X), 3325 CLK("omap_hsmmc.2", "ick", &mmchs3_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3291 CLK(NULL, "aes2_ick", &aes2_ick, CK_343X), 3326 CLK(NULL, "icr_ick", &icr_ick, CK_34XX | CK_36XX),
3292 CLK("omap-sham", "ick", &sha12_ick, CK_343X), 3327 CLK("omap-aes", "ick", &aes2_ick, CK_34XX | CK_36XX),
3293 CLK(NULL, "des2_ick", &des2_ick, CK_343X), 3328 CLK("omap-sham", "ick", &sha12_ick, CK_34XX | CK_36XX),
3294 CLK("mmci-omap-hs.1", "ick", &mmchs2_ick, CK_3XXX), 3329 CLK(NULL, "des2_ick", &des2_ick, CK_34XX | CK_36XX),
3295 CLK("mmci-omap-hs.0", "ick", &mmchs1_ick, CK_3XXX), 3330 CLK("omap_hsmmc.1", "ick", &mmchs2_ick, CK_3XXX),
3296 CLK(NULL, "mspro_ick", &mspro_ick, CK_343X), 3331 CLK("omap_hsmmc.0", "ick", &mmchs1_ick, CK_3XXX),
3332 CLK(NULL, "mspro_ick", &mspro_ick, CK_34XX | CK_36XX),
3297 CLK("omap_hdq.0", "ick", &hdq_ick, CK_3XXX), 3333 CLK("omap_hdq.0", "ick", &hdq_ick, CK_3XXX),
3298 CLK("omap2_mcspi.4", "ick", &mcspi4_ick, CK_3XXX), 3334 CLK("omap2_mcspi.4", "ick", &mcspi4_ick, CK_3XXX),
3299 CLK("omap2_mcspi.3", "ick", &mcspi3_ick, CK_3XXX), 3335 CLK("omap2_mcspi.3", "ick", &mcspi3_ick, CK_3XXX),
3300 CLK("omap2_mcspi.2", "ick", &mcspi2_ick, CK_3XXX), 3336 CLK("omap2_mcspi.2", "ick", &mcspi2_ick, CK_3XXX),
3301 CLK("omap2_mcspi.1", "ick", &mcspi1_ick, CK_3XXX), 3337 CLK("omap2_mcspi.1", "ick", &mcspi1_ick, CK_3XXX),
3302 CLK("i2c_omap.3", "ick", &i2c3_ick, CK_3XXX), 3338 CLK("omap_i2c.3", "ick", &i2c3_ick, CK_3XXX),
3303 CLK("i2c_omap.2", "ick", &i2c2_ick, CK_3XXX), 3339 CLK("omap_i2c.2", "ick", &i2c2_ick, CK_3XXX),
3304 CLK("i2c_omap.1", "ick", &i2c1_ick, CK_3XXX), 3340 CLK("omap_i2c.1", "ick", &i2c1_ick, CK_3XXX),
3305 CLK(NULL, "uart2_ick", &uart2_ick, CK_3XXX), 3341 CLK(NULL, "uart2_ick", &uart2_ick, CK_3XXX),
3306 CLK(NULL, "uart1_ick", &uart1_ick, CK_3XXX), 3342 CLK(NULL, "uart1_ick", &uart1_ick, CK_3XXX),
3307 CLK(NULL, "gpt11_ick", &gpt11_ick, CK_3XXX), 3343 CLK(NULL, "gpt11_ick", &gpt11_ick, CK_3XXX),
@@ -3309,46 +3345,62 @@ static struct omap_clk omap3xxx_clks[] = {
3309 CLK("omap-mcbsp.5", "ick", &mcbsp5_ick, CK_3XXX), 3345 CLK("omap-mcbsp.5", "ick", &mcbsp5_ick, CK_3XXX),
3310 CLK("omap-mcbsp.1", "ick", &mcbsp1_ick, CK_3XXX), 3346 CLK("omap-mcbsp.1", "ick", &mcbsp1_ick, CK_3XXX),
3311 CLK(NULL, "fac_ick", &fac_ick, CK_3430ES1), 3347 CLK(NULL, "fac_ick", &fac_ick, CK_3430ES1),
3312 CLK(NULL, "mailboxes_ick", &mailboxes_ick, CK_343X), 3348 CLK(NULL, "mailboxes_ick", &mailboxes_ick, CK_34XX | CK_36XX),
3313 CLK(NULL, "omapctrl_ick", &omapctrl_ick, CK_3XXX), 3349 CLK(NULL, "omapctrl_ick", &omapctrl_ick, CK_3XXX),
3314 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_343X), 3350 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_34XX | CK_36XX),
3315 CLK(NULL, "ssi_ick", &ssi_ick_3430es1, CK_3430ES1), 3351 CLK(NULL, "ssi_ick", &ssi_ick_3430es1, CK_3430ES1),
3316 CLK(NULL, "ssi_ick", &ssi_ick_3430es2, CK_3430ES2), 3352 CLK(NULL, "ssi_ick", &ssi_ick_3430es2, CK_3430ES2PLUS | CK_36XX),
3317 CLK(NULL, "usb_l4_ick", &usb_l4_ick, CK_3430ES1), 3353 CLK(NULL, "usb_l4_ick", &usb_l4_ick, CK_3430ES1),
3318 CLK(NULL, "security_l4_ick2", &security_l4_ick2, CK_343X), 3354 CLK(NULL, "security_l4_ick2", &security_l4_ick2, CK_34XX | CK_36XX),
3319 CLK(NULL, "aes1_ick", &aes1_ick, CK_343X), 3355 CLK(NULL, "aes1_ick", &aes1_ick, CK_34XX | CK_36XX),
3320 CLK("omap_rng", "ick", &rng_ick, CK_343X), 3356 CLK("omap_rng", "ick", &rng_ick, CK_34XX | CK_36XX),
3321 CLK(NULL, "sha11_ick", &sha11_ick, CK_343X), 3357 CLK(NULL, "sha11_ick", &sha11_ick, CK_34XX | CK_36XX),
3322 CLK(NULL, "des1_ick", &des1_ick, CK_343X), 3358 CLK(NULL, "des1_ick", &des1_ick, CK_34XX | CK_36XX),
3323 CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1), 3359 CLK("omapdss_dss", "fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
3324 CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2 | CK_AM35XX), 3360 CLK("omapdss_dss", "fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3325 CLK("omapdss", "tv_fck", &dss_tv_fck, CK_3XXX), 3361 CLK("omapdss_dss", "tv_clk", &dss_tv_fck, CK_3XXX),
3326 CLK("omapdss", "video_fck", &dss_96m_fck, CK_3XXX), 3362 CLK("omapdss_dss", "video_clk", &dss_96m_fck, CK_3XXX),
3327 CLK("omapdss", "dss2_fck", &dss2_alwon_fck, CK_3XXX), 3363 CLK("omapdss_dss", "sys_clk", &dss2_alwon_fck, CK_3XXX),
3328 CLK("omapdss", "ick", &dss_ick_3430es1, CK_3430ES1), 3364 CLK("omapdss_dss", "ick", &dss_ick_3430es1, CK_3430ES1),
3329 CLK("omapdss", "ick", &dss_ick_3430es2, CK_3430ES2 | CK_AM35XX), 3365 CLK("omapdss_dss", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3330 CLK(NULL, "cam_mclk", &cam_mclk, CK_343X), 3366 CLK(NULL, "cam_mclk", &cam_mclk, CK_34XX | CK_36XX),
3331 CLK(NULL, "cam_ick", &cam_ick, CK_343X), 3367 CLK(NULL, "cam_ick", &cam_ick, CK_34XX | CK_36XX),
3332 CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_343X), 3368 CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_34XX | CK_36XX),
3333 CLK(NULL, "usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2 | CK_AM35XX), 3369 CLK(NULL, "usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3334 CLK(NULL, "usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2 | CK_AM35XX), 3370 CLK("usbhs-omap.0", "hs_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3335 CLK(NULL, "usbhost_ick", &usbhost_ick, CK_3430ES2 | CK_AM35XX), 3371 CLK(NULL, "usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3336 CLK(NULL, "usim_fck", &usim_fck, CK_3430ES2), 3372 CLK("usbhs-omap.0", "fs_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3373 CLK(NULL, "usbhost_ick", &usbhost_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3374 CLK("usbhs-omap.0", "usbhost_ick", &usbhost_ick, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
3375 CLK("usbhs-omap.0", "utmi_p1_gfclk", &dummy_ck, CK_3XXX),
3376 CLK("usbhs-omap.0", "utmi_p2_gfclk", &dummy_ck, CK_3XXX),
3377 CLK("usbhs-omap.0", "xclk60mhsp1_ck", &dummy_ck, CK_3XXX),
3378 CLK("usbhs-omap.0", "xclk60mhsp2_ck", &dummy_ck, CK_3XXX),
3379 CLK("usbhs-omap.0", "usb_host_hs_utmi_p1_clk", &dummy_ck, CK_3XXX),
3380 CLK("usbhs-omap.0", "usb_host_hs_utmi_p2_clk", &dummy_ck, CK_3XXX),
3381 CLK("usbhs-omap.0", "usb_tll_hs_usb_ch0_clk", &dummy_ck, CK_3XXX),
3382 CLK("usbhs-omap.0", "usb_tll_hs_usb_ch1_clk", &dummy_ck, CK_3XXX),
3383 CLK("usbhs-omap.0", "init_60m_fclk", &dummy_ck, CK_3XXX),
3384 CLK(NULL, "usim_fck", &usim_fck, CK_3430ES2PLUS | CK_36XX),
3337 CLK(NULL, "gpt1_fck", &gpt1_fck, CK_3XXX), 3385 CLK(NULL, "gpt1_fck", &gpt1_fck, CK_3XXX),
3338 CLK(NULL, "wkup_32k_fck", &wkup_32k_fck, CK_3XXX), 3386 CLK(NULL, "wkup_32k_fck", &wkup_32k_fck, CK_3XXX),
3339 CLK(NULL, "gpio1_dbck", &gpio1_dbck, CK_3XXX), 3387 CLK(NULL, "gpio1_dbck", &gpio1_dbck, CK_3XXX),
3340 CLK("omap_wdt", "fck", &wdt2_fck, CK_3XXX), 3388 CLK("omap_wdt", "fck", &wdt2_fck, CK_3XXX),
3341 CLK(NULL, "wkup_l4_ick", &wkup_l4_ick, CK_343X), 3389 CLK(NULL, "wkup_l4_ick", &wkup_l4_ick, CK_34XX | CK_36XX),
3342 CLK(NULL, "usim_ick", &usim_ick, CK_3430ES2), 3390 CLK(NULL, "usim_ick", &usim_ick, CK_3430ES2PLUS | CK_36XX),
3343 CLK("omap_wdt", "ick", &wdt2_ick, CK_3XXX), 3391 CLK("omap_wdt", "ick", &wdt2_ick, CK_3XXX),
3344 CLK(NULL, "wdt1_ick", &wdt1_ick, CK_3XXX), 3392 CLK(NULL, "wdt1_ick", &wdt1_ick, CK_3XXX),
3345 CLK(NULL, "gpio1_ick", &gpio1_ick, CK_3XXX), 3393 CLK(NULL, "gpio1_ick", &gpio1_ick, CK_3XXX),
3346 CLK(NULL, "omap_32ksync_ick", &omap_32ksync_ick, CK_3XXX), 3394 CLK(NULL, "omap_32ksync_ick", &omap_32ksync_ick, CK_3XXX),
3347 CLK(NULL, "gpt12_ick", &gpt12_ick, CK_3XXX), 3395 CLK(NULL, "gpt12_ick", &gpt12_ick, CK_3XXX),
3348 CLK(NULL, "gpt1_ick", &gpt1_ick, CK_3XXX), 3396 CLK(NULL, "gpt1_ick", &gpt1_ick, CK_3XXX),
3397 CLK("omap-mcbsp.2", "prcm_fck", &per_96m_fck, CK_3XXX),
3398 CLK("omap-mcbsp.3", "prcm_fck", &per_96m_fck, CK_3XXX),
3399 CLK("omap-mcbsp.4", "prcm_fck", &per_96m_fck, CK_3XXX),
3349 CLK(NULL, "per_96m_fck", &per_96m_fck, CK_3XXX), 3400 CLK(NULL, "per_96m_fck", &per_96m_fck, CK_3XXX),
3350 CLK(NULL, "per_48m_fck", &per_48m_fck, CK_3XXX), 3401 CLK(NULL, "per_48m_fck", &per_48m_fck, CK_3XXX),
3351 CLK(NULL, "uart3_fck", &uart3_fck, CK_3XXX), 3402 CLK(NULL, "uart3_fck", &uart3_fck, CK_3XXX),
3403 CLK(NULL, "uart4_fck", &uart4_fck, CK_36XX),
3352 CLK(NULL, "gpt2_fck", &gpt2_fck, CK_3XXX), 3404 CLK(NULL, "gpt2_fck", &gpt2_fck, CK_3XXX),
3353 CLK(NULL, "gpt3_fck", &gpt3_fck, CK_3XXX), 3405 CLK(NULL, "gpt3_fck", &gpt3_fck, CK_3XXX),
3354 CLK(NULL, "gpt4_fck", &gpt4_fck, CK_3XXX), 3406 CLK(NULL, "gpt4_fck", &gpt4_fck, CK_3XXX),
@@ -3372,6 +3424,7 @@ static struct omap_clk omap3xxx_clks[] = {
3372 CLK(NULL, "gpio2_ick", &gpio2_ick, CK_3XXX), 3424 CLK(NULL, "gpio2_ick", &gpio2_ick, CK_3XXX),
3373 CLK(NULL, "wdt3_ick", &wdt3_ick, CK_3XXX), 3425 CLK(NULL, "wdt3_ick", &wdt3_ick, CK_3XXX),
3374 CLK(NULL, "uart3_ick", &uart3_ick, CK_3XXX), 3426 CLK(NULL, "uart3_ick", &uart3_ick, CK_3XXX),
3427 CLK(NULL, "uart4_ick", &uart4_ick, CK_36XX),
3375 CLK(NULL, "gpt9_ick", &gpt9_ick, CK_3XXX), 3428 CLK(NULL, "gpt9_ick", &gpt9_ick, CK_3XXX),
3376 CLK(NULL, "gpt8_ick", &gpt8_ick, CK_3XXX), 3429 CLK(NULL, "gpt8_ick", &gpt8_ick, CK_3XXX),
3377 CLK(NULL, "gpt7_ick", &gpt7_ick, CK_3XXX), 3430 CLK(NULL, "gpt7_ick", &gpt7_ick, CK_3XXX),
@@ -3392,9 +3445,9 @@ static struct omap_clk omap3xxx_clks[] = {
3392 CLK(NULL, "atclk_fck", &atclk_fck, CK_3XXX), 3445 CLK(NULL, "atclk_fck", &atclk_fck, CK_3XXX),
3393 CLK(NULL, "traceclk_src_fck", &traceclk_src_fck, CK_3XXX), 3446 CLK(NULL, "traceclk_src_fck", &traceclk_src_fck, CK_3XXX),
3394 CLK(NULL, "traceclk_fck", &traceclk_fck, CK_3XXX), 3447 CLK(NULL, "traceclk_fck", &traceclk_fck, CK_3XXX),
3395 CLK(NULL, "sr1_fck", &sr1_fck, CK_343X), 3448 CLK(NULL, "sr1_fck", &sr1_fck, CK_34XX | CK_36XX),
3396 CLK(NULL, "sr2_fck", &sr2_fck, CK_343X), 3449 CLK(NULL, "sr2_fck", &sr2_fck, CK_34XX | CK_36XX),
3397 CLK(NULL, "sr_l4_ick", &sr_l4_ick, CK_343X), 3450 CLK(NULL, "sr_l4_ick", &sr_l4_ick, CK_34XX | CK_36XX),
3398 CLK(NULL, "secure_32k_fck", &secure_32k_fck, CK_3XXX), 3451 CLK(NULL, "secure_32k_fck", &secure_32k_fck, CK_3XXX),
3399 CLK(NULL, "gpt12_fck", &gpt12_fck, CK_3XXX), 3452 CLK(NULL, "gpt12_fck", &gpt12_fck, CK_3XXX),
3400 CLK(NULL, "wdt1_fck", &wdt1_fck, CK_3XXX), 3453 CLK(NULL, "wdt1_fck", &wdt1_fck, CK_3XXX),
@@ -3405,8 +3458,8 @@ static struct omap_clk omap3xxx_clks[] = {
3405 CLK("davinci_emac", "phy_clk", &emac_fck, CK_AM35XX), 3458 CLK("davinci_emac", "phy_clk", &emac_fck, CK_AM35XX),
3406 CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX), 3459 CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX),
3407 CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX), 3460 CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX),
3408 CLK("musb_hdrc", "ick", &hsotgusb_ick_am35xx, CK_AM35XX), 3461 CLK("musb-am35x", "ick", &hsotgusb_ick_am35xx, CK_AM35XX),
3409 CLK("musb_hdrc", "fck", &hsotgusb_fck_am35xx, CK_AM35XX), 3462 CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX),
3410 CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), 3463 CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX),
3411 CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), 3464 CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX),
3412}; 3465};
@@ -3415,38 +3468,40 @@ static struct omap_clk omap3xxx_clks[] = {
3415int __init omap3xxx_clk_init(void) 3468int __init omap3xxx_clk_init(void)
3416{ 3469{
3417 struct omap_clk *c; 3470 struct omap_clk *c;
3418 u32 cpu_clkflg = CK_3XXX; 3471 u32 cpu_clkflg = 0;
3419 3472
3420 if (cpu_is_omap3517()) { 3473 if (cpu_is_omap3517()) {
3421 cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS; 3474 cpu_mask = RATE_IN_34XX;
3422 cpu_clkflg |= CK_3517; 3475 cpu_clkflg = CK_3517;
3423 } else if (cpu_is_omap3505()) { 3476 } else if (cpu_is_omap3505()) {
3424 cpu_mask = RATE_IN_3XXX | RATE_IN_3430ES2PLUS; 3477 cpu_mask = RATE_IN_34XX;
3425 cpu_clkflg |= CK_3505; 3478 cpu_clkflg = CK_3505;
3479 } else if (cpu_is_omap3630()) {
3480 cpu_mask = (RATE_IN_34XX | RATE_IN_36XX);
3481 cpu_clkflg = CK_36XX;
3482 } else if (cpu_is_ti816x()) {
3483 cpu_mask = RATE_IN_TI816X;
3484 cpu_clkflg = CK_TI816X;
3426 } else if (cpu_is_omap34xx()) { 3485 } else if (cpu_is_omap34xx()) {
3427 cpu_mask = RATE_IN_3XXX;
3428 cpu_clkflg |= CK_343X;
3429
3430 /*
3431 * Update this if there are further clock changes between ES2
3432 * and production parts
3433 */
3434 if (omap_rev() == OMAP3430_REV_ES1_0) { 3486 if (omap_rev() == OMAP3430_REV_ES1_0) {
3435 /* No 3430ES1-only rates exist, so no RATE_IN_3430ES1 */ 3487 cpu_mask = RATE_IN_3430ES1;
3436 cpu_clkflg |= CK_3430ES1; 3488 cpu_clkflg = CK_3430ES1;
3437 } else { 3489 } else {
3438 cpu_mask |= RATE_IN_3430ES2PLUS; 3490 /*
3439 cpu_clkflg |= CK_3430ES2; 3491 * Assume that anything that we haven't matched yet
3492 * has 3430ES2-type clocks.
3493 */
3494 cpu_mask = RATE_IN_3430ES2PLUS;
3495 cpu_clkflg = CK_3430ES2PLUS;
3440 } 3496 }
3497 } else {
3498 WARN(1, "clock: could not identify OMAP3 variant\n");
3441 } 3499 }
3442 3500
3443 if (omap3_has_192mhz_clk()) 3501 if (omap3_has_192mhz_clk())
3444 omap_96m_alwon_fck = omap_96m_alwon_fck_3630; 3502 omap_96m_alwon_fck = omap_96m_alwon_fck_3630;
3445 3503
3446 if (cpu_is_omap3630()) { 3504 if (cpu_is_omap3630()) {
3447 cpu_mask |= RATE_IN_36XX;
3448 cpu_clkflg |= CK_36XX;
3449
3450 /* 3505 /*
3451 * XXX This type of dynamic rewriting of the clock tree is 3506 * XXX This type of dynamic rewriting of the clock tree is
3452 * deprecated and should be revised soon. 3507 * deprecated and should be revised soon.
@@ -3491,12 +3546,14 @@ int __init omap3xxx_clk_init(void)
3491 omap2_init_clk_clkdm(c->lk.clk); 3546 omap2_init_clk_clkdm(c->lk.clk);
3492 } 3547 }
3493 3548
3549 /* Disable autoidle on all clocks; let the PM code enable it later */
3550 omap_clk_disable_autoidle_all();
3551
3494 recalculate_root_clocks(); 3552 recalculate_root_clocks();
3495 3553
3496 printk(KERN_INFO "Clocking rate (Crystal/Core/MPU): " 3554 pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n",
3497 "%ld.%01ld/%ld/%ld MHz\n", 3555 (osc_sys_ck.rate / 1000000), (osc_sys_ck.rate / 100000) % 10,
3498 (osc_sys_ck.rate / 1000000), (osc_sys_ck.rate / 100000) % 10, 3556 (core_ck.rate / 1000000), (arm_fck.rate / 1000000));
3499 (core_ck.rate / 1000000), (arm_fck.rate / 1000000));
3500 3557
3501 /* 3558 /*
3502 * Only enable those clocks we will need, let the drivers 3559 * Only enable those clocks we will need, let the drivers
@@ -3505,9 +3562,10 @@ int __init omap3xxx_clk_init(void)
3505 clk_enable_init_clocks(); 3562 clk_enable_init_clocks();
3506 3563
3507 /* 3564 /*
3508 * Lock DPLL5 and put it in autoidle. 3565 * Lock DPLL5 -- here only until other device init code can
3566 * handle this
3509 */ 3567 */
3510 if (omap_rev() >= OMAP3430_REV_ES2_0) 3568 if (!cpu_is_ti816x() && (omap_rev() >= OMAP3430_REV_ES2_0))
3511 omap3_clk_lock_dpll5(); 3569 omap3_clk_lock_dpll5();
3512 3570
3513 /* Avoid sleeping during omap3_core_dpll_m2_set_rate() */ 3571 /* Avoid sleeping during omap3_core_dpll_m2_set_rate() */
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
index e10db7a90cb2..8c965671b4d4 100644
--- a/arch/arm/mach-omap2/clock44xx_data.c
+++ b/arch/arm/mach-omap2/clock44xx_data.c
@@ -17,21 +17,30 @@
17 * This program is free software; you can redistribute it and/or modify 17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as 18 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation. 19 * published by the Free Software Foundation.
20 *
21 * XXX Some of the ES1 clocks have been removed/changed; once support
22 * is added for discriminating clocks by ES level, these should be added back
23 * in.
20 */ 24 */
21 25
22#include <linux/kernel.h> 26#include <linux/kernel.h>
23#include <linux/list.h> 27#include <linux/list.h>
24#include <linux/clk.h> 28#include <linux/clk.h>
25
26#include <plat/control.h>
27#include <plat/clkdev_omap.h> 29#include <plat/clkdev_omap.h>
28 30
29#include "clock.h" 31#include "clock.h"
30#include "clock44xx.h" 32#include "clock44xx.h"
31#include "cm.h" 33#include "cm1_44xx.h"
34#include "cm2_44xx.h"
32#include "cm-regbits-44xx.h" 35#include "cm-regbits-44xx.h"
33#include "prm.h" 36#include "prm44xx.h"
34#include "prm-regbits-44xx.h" 37#include "prm-regbits-44xx.h"
38#include "control.h"
39#include "scrm44xx.h"
40
41/* OMAP4 modulemode control */
42#define OMAP4430_MODULEMODE_HWCTRL 0
43#define OMAP4430_MODULEMODE_SWCTRL 1
35 44
36/* Root clocks */ 45/* Root clocks */
37 46
@@ -44,7 +53,9 @@ static struct clk extalt_clkin_ck = {
44static struct clk pad_clks_ck = { 53static struct clk pad_clks_ck = {
45 .name = "pad_clks_ck", 54 .name = "pad_clks_ck",
46 .rate = 12000000, 55 .rate = 12000000,
47 .ops = &clkops_null, 56 .ops = &clkops_omap2_dflt,
57 .enable_reg = OMAP4430_CM_CLKSEL_ABE,
58 .enable_bit = OMAP4430_PAD_CLKS_GATE_SHIFT,
48}; 59};
49 60
50static struct clk pad_slimbus_core_clks_ck = { 61static struct clk pad_slimbus_core_clks_ck = {
@@ -62,7 +73,9 @@ static struct clk secure_32k_clk_src_ck = {
62static struct clk slimbus_clk = { 73static struct clk slimbus_clk = {
63 .name = "slimbus_clk", 74 .name = "slimbus_clk",
64 .rate = 12000000, 75 .rate = 12000000,
65 .ops = &clkops_null, 76 .ops = &clkops_omap2_dflt,
77 .enable_reg = OMAP4430_CM_CLKSEL_ABE,
78 .enable_bit = OMAP4430_SLIMBUS_CLK_GATE_SHIFT,
66}; 79};
67 80
68static struct clk sys_32k_ck = { 81static struct clk sys_32k_ck = {
@@ -175,21 +188,27 @@ static struct clk sys_clkin_ck = {
175 .recalc = &omap2_clksel_recalc, 188 .recalc = &omap2_clksel_recalc,
176}; 189};
177 190
191static struct clk tie_low_clock_ck = {
192 .name = "tie_low_clock_ck",
193 .rate = 0,
194 .ops = &clkops_null,
195};
196
178static struct clk utmi_phy_clkout_ck = { 197static struct clk utmi_phy_clkout_ck = {
179 .name = "utmi_phy_clkout_ck", 198 .name = "utmi_phy_clkout_ck",
180 .rate = 12000000, 199 .rate = 60000000,
181 .ops = &clkops_null, 200 .ops = &clkops_null,
182}; 201};
183 202
184static struct clk xclk60mhsp1_ck = { 203static struct clk xclk60mhsp1_ck = {
185 .name = "xclk60mhsp1_ck", 204 .name = "xclk60mhsp1_ck",
186 .rate = 12000000, 205 .rate = 60000000,
187 .ops = &clkops_null, 206 .ops = &clkops_null,
188}; 207};
189 208
190static struct clk xclk60mhsp2_ck = { 209static struct clk xclk60mhsp2_ck = {
191 .name = "xclk60mhsp2_ck", 210 .name = "xclk60mhsp2_ck",
192 .rate = 12000000, 211 .rate = 60000000,
193 .ops = &clkops_null, 212 .ops = &clkops_null,
194}; 213};
195 214
@@ -201,39 +220,23 @@ static struct clk xclk60motg_ck = {
201 220
202/* Module clocks and DPLL outputs */ 221/* Module clocks and DPLL outputs */
203 222
204static const struct clksel_rate div2_1to2_rates[] = { 223static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
205 { .div = 1, .val = 0, .flags = RATE_IN_4430 }, 224 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
206 { .div = 2, .val = 1, .flags = RATE_IN_4430 }, 225 { .parent = &sys_32k_ck, .rates = div_1_1_rates },
207 { .div = 0 },
208};
209
210static const struct clksel dpll_sys_ref_clk_div[] = {
211 { .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
212 { .parent = NULL }, 226 { .parent = NULL },
213}; 227};
214 228
215static struct clk dpll_sys_ref_clk = { 229static struct clk abe_dpll_bypass_clk_mux_ck = {
216 .name = "dpll_sys_ref_clk", 230 .name = "abe_dpll_bypass_clk_mux_ck",
217 .parent = &sys_clkin_ck, 231 .parent = &sys_clkin_ck,
218 .clksel = dpll_sys_ref_clk_div,
219 .clksel_reg = OMAP4430_CM_DPLL_SYS_REF_CLKSEL,
220 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
221 .ops = &clkops_null, 232 .ops = &clkops_null,
222 .recalc = &omap2_clksel_recalc, 233 .recalc = &followparent_recalc,
223 .round_rate = &omap2_clksel_round_rate,
224 .set_rate = &omap2_clksel_set_rate,
225};
226
227static const struct clksel abe_dpll_refclk_mux_sel[] = {
228 { .parent = &dpll_sys_ref_clk, .rates = div_1_0_rates },
229 { .parent = &sys_32k_ck, .rates = div_1_1_rates },
230 { .parent = NULL },
231}; 234};
232 235
233static struct clk abe_dpll_refclk_mux_ck = { 236static struct clk abe_dpll_refclk_mux_ck = {
234 .name = "abe_dpll_refclk_mux_ck", 237 .name = "abe_dpll_refclk_mux_ck",
235 .parent = &dpll_sys_ref_clk, 238 .parent = &sys_clkin_ck,
236 .clksel = abe_dpll_refclk_mux_sel, 239 .clksel = abe_dpll_bypass_clk_mux_sel,
237 .init = &omap2_init_clksel_parent, 240 .init = &omap2_init_clksel_parent,
238 .clksel_reg = OMAP4430_CM_ABE_PLL_REF_CLKSEL, 241 .clksel_reg = OMAP4430_CM_ABE_PLL_REF_CLKSEL,
239 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK, 242 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
@@ -244,7 +247,7 @@ static struct clk abe_dpll_refclk_mux_ck = {
244/* DPLL_ABE */ 247/* DPLL_ABE */
245static struct dpll_data dpll_abe_dd = { 248static struct dpll_data dpll_abe_dd = {
246 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_ABE, 249 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_ABE,
247 .clk_bypass = &sys_clkin_ck, 250 .clk_bypass = &abe_dpll_bypass_clk_mux_ck,
248 .clk_ref = &abe_dpll_refclk_mux_ck, 251 .clk_ref = &abe_dpll_refclk_mux_ck,
249 .control_reg = OMAP4430_CM_CLKMODE_DPLL_ABE, 252 .control_reg = OMAP4430_CM_CLKMODE_DPLL_ABE,
250 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), 253 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
@@ -272,18 +275,73 @@ static struct clk dpll_abe_ck = {
272 .set_rate = &omap3_noncore_dpll_set_rate, 275 .set_rate = &omap3_noncore_dpll_set_rate,
273}; 276};
274 277
278static struct clk dpll_abe_x2_ck = {
279 .name = "dpll_abe_x2_ck",
280 .parent = &dpll_abe_ck,
281 .flags = CLOCK_CLKOUTX2,
282 .ops = &clkops_omap4_dpllmx_ops,
283 .recalc = &omap3_clkoutx2_recalc,
284 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE,
285};
286
287static const struct clksel_rate div31_1to31_rates[] = {
288 { .div = 1, .val = 1, .flags = RATE_IN_4430 },
289 { .div = 2, .val = 2, .flags = RATE_IN_4430 },
290 { .div = 3, .val = 3, .flags = RATE_IN_4430 },
291 { .div = 4, .val = 4, .flags = RATE_IN_4430 },
292 { .div = 5, .val = 5, .flags = RATE_IN_4430 },
293 { .div = 6, .val = 6, .flags = RATE_IN_4430 },
294 { .div = 7, .val = 7, .flags = RATE_IN_4430 },
295 { .div = 8, .val = 8, .flags = RATE_IN_4430 },
296 { .div = 9, .val = 9, .flags = RATE_IN_4430 },
297 { .div = 10, .val = 10, .flags = RATE_IN_4430 },
298 { .div = 11, .val = 11, .flags = RATE_IN_4430 },
299 { .div = 12, .val = 12, .flags = RATE_IN_4430 },
300 { .div = 13, .val = 13, .flags = RATE_IN_4430 },
301 { .div = 14, .val = 14, .flags = RATE_IN_4430 },
302 { .div = 15, .val = 15, .flags = RATE_IN_4430 },
303 { .div = 16, .val = 16, .flags = RATE_IN_4430 },
304 { .div = 17, .val = 17, .flags = RATE_IN_4430 },
305 { .div = 18, .val = 18, .flags = RATE_IN_4430 },
306 { .div = 19, .val = 19, .flags = RATE_IN_4430 },
307 { .div = 20, .val = 20, .flags = RATE_IN_4430 },
308 { .div = 21, .val = 21, .flags = RATE_IN_4430 },
309 { .div = 22, .val = 22, .flags = RATE_IN_4430 },
310 { .div = 23, .val = 23, .flags = RATE_IN_4430 },
311 { .div = 24, .val = 24, .flags = RATE_IN_4430 },
312 { .div = 25, .val = 25, .flags = RATE_IN_4430 },
313 { .div = 26, .val = 26, .flags = RATE_IN_4430 },
314 { .div = 27, .val = 27, .flags = RATE_IN_4430 },
315 { .div = 28, .val = 28, .flags = RATE_IN_4430 },
316 { .div = 29, .val = 29, .flags = RATE_IN_4430 },
317 { .div = 30, .val = 30, .flags = RATE_IN_4430 },
318 { .div = 31, .val = 31, .flags = RATE_IN_4430 },
319 { .div = 0 },
320};
321
322static const struct clksel dpll_abe_m2x2_div[] = {
323 { .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
324 { .parent = NULL },
325};
326
275static struct clk dpll_abe_m2x2_ck = { 327static struct clk dpll_abe_m2x2_ck = {
276 .name = "dpll_abe_m2x2_ck", 328 .name = "dpll_abe_m2x2_ck",
277 .parent = &dpll_abe_ck, 329 .parent = &dpll_abe_x2_ck,
278 .ops = &clkops_null, 330 .clksel = dpll_abe_m2x2_div,
279 .recalc = &followparent_recalc, 331 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE,
332 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
333 .ops = &clkops_omap4_dpllmx_ops,
334 .recalc = &omap2_clksel_recalc,
335 .round_rate = &omap2_clksel_round_rate,
336 .set_rate = &omap2_clksel_set_rate,
280}; 337};
281 338
282static struct clk abe_24m_fclk = { 339static struct clk abe_24m_fclk = {
283 .name = "abe_24m_fclk", 340 .name = "abe_24m_fclk",
284 .parent = &dpll_abe_m2x2_ck, 341 .parent = &dpll_abe_m2x2_ck,
285 .ops = &clkops_null, 342 .ops = &clkops_null,
286 .recalc = &followparent_recalc, 343 .fixed_div = 8,
344 .recalc = &omap_fixed_divisor_recalc,
287}; 345};
288 346
289static const struct clksel_rate div3_1to4_rates[] = { 347static const struct clksel_rate div3_1to4_rates[] = {
@@ -310,6 +368,12 @@ static struct clk abe_clk = {
310 .set_rate = &omap2_clksel_set_rate, 368 .set_rate = &omap2_clksel_set_rate,
311}; 369};
312 370
371static const struct clksel_rate div2_1to2_rates[] = {
372 { .div = 1, .val = 0, .flags = RATE_IN_4430 },
373 { .div = 2, .val = 1, .flags = RATE_IN_4430 },
374 { .div = 0 },
375};
376
313static const struct clksel aess_fclk_div[] = { 377static const struct clksel aess_fclk_div[] = {
314 { .parent = &abe_clk, .rates = div2_1to2_rates }, 378 { .parent = &abe_clk, .rates = div2_1to2_rates },
315 { .parent = NULL }, 379 { .parent = NULL },
@@ -327,67 +391,27 @@ static struct clk aess_fclk = {
327 .set_rate = &omap2_clksel_set_rate, 391 .set_rate = &omap2_clksel_set_rate,
328}; 392};
329 393
330static const struct clksel_rate div31_1to31_rates[] = { 394static struct clk dpll_abe_m3x2_ck = {
331 { .div = 1, .val = 1, .flags = RATE_IN_4430 }, 395 .name = "dpll_abe_m3x2_ck",
332 { .div = 2, .val = 2, .flags = RATE_IN_4430 }, 396 .parent = &dpll_abe_x2_ck,
333 { .div = 3, .val = 3, .flags = RATE_IN_4430 }, 397 .clksel = dpll_abe_m2x2_div,
334 { .div = 4, .val = 4, .flags = RATE_IN_4430 },
335 { .div = 5, .val = 5, .flags = RATE_IN_4430 },
336 { .div = 6, .val = 6, .flags = RATE_IN_4430 },
337 { .div = 7, .val = 7, .flags = RATE_IN_4430 },
338 { .div = 8, .val = 8, .flags = RATE_IN_4430 },
339 { .div = 9, .val = 9, .flags = RATE_IN_4430 },
340 { .div = 10, .val = 10, .flags = RATE_IN_4430 },
341 { .div = 11, .val = 11, .flags = RATE_IN_4430 },
342 { .div = 12, .val = 12, .flags = RATE_IN_4430 },
343 { .div = 13, .val = 13, .flags = RATE_IN_4430 },
344 { .div = 14, .val = 14, .flags = RATE_IN_4430 },
345 { .div = 15, .val = 15, .flags = RATE_IN_4430 },
346 { .div = 16, .val = 16, .flags = RATE_IN_4430 },
347 { .div = 17, .val = 17, .flags = RATE_IN_4430 },
348 { .div = 18, .val = 18, .flags = RATE_IN_4430 },
349 { .div = 19, .val = 19, .flags = RATE_IN_4430 },
350 { .div = 20, .val = 20, .flags = RATE_IN_4430 },
351 { .div = 21, .val = 21, .flags = RATE_IN_4430 },
352 { .div = 22, .val = 22, .flags = RATE_IN_4430 },
353 { .div = 23, .val = 23, .flags = RATE_IN_4430 },
354 { .div = 24, .val = 24, .flags = RATE_IN_4430 },
355 { .div = 25, .val = 25, .flags = RATE_IN_4430 },
356 { .div = 26, .val = 26, .flags = RATE_IN_4430 },
357 { .div = 27, .val = 27, .flags = RATE_IN_4430 },
358 { .div = 28, .val = 28, .flags = RATE_IN_4430 },
359 { .div = 29, .val = 29, .flags = RATE_IN_4430 },
360 { .div = 30, .val = 30, .flags = RATE_IN_4430 },
361 { .div = 31, .val = 31, .flags = RATE_IN_4430 },
362 { .div = 0 },
363};
364
365static const struct clksel dpll_abe_m3_div[] = {
366 { .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
367 { .parent = NULL },
368};
369
370static struct clk dpll_abe_m3_ck = {
371 .name = "dpll_abe_m3_ck",
372 .parent = &dpll_abe_ck,
373 .clksel = dpll_abe_m3_div,
374 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_ABE, 398 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_ABE,
375 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK, 399 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
376 .ops = &clkops_null, 400 .ops = &clkops_omap4_dpllmx_ops,
377 .recalc = &omap2_clksel_recalc, 401 .recalc = &omap2_clksel_recalc,
378 .round_rate = &omap2_clksel_round_rate, 402 .round_rate = &omap2_clksel_round_rate,
379 .set_rate = &omap2_clksel_set_rate, 403 .set_rate = &omap2_clksel_set_rate,
380}; 404};
381 405
382static const struct clksel core_hsd_byp_clk_mux_sel[] = { 406static const struct clksel core_hsd_byp_clk_mux_sel[] = {
383 { .parent = &dpll_sys_ref_clk, .rates = div_1_0_rates }, 407 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
384 { .parent = &dpll_abe_m3_ck, .rates = div_1_1_rates }, 408 { .parent = &dpll_abe_m3x2_ck, .rates = div_1_1_rates },
385 { .parent = NULL }, 409 { .parent = NULL },
386}; 410};
387 411
388static struct clk core_hsd_byp_clk_mux_ck = { 412static struct clk core_hsd_byp_clk_mux_ck = {
389 .name = "core_hsd_byp_clk_mux_ck", 413 .name = "core_hsd_byp_clk_mux_ck",
390 .parent = &dpll_sys_ref_clk, 414 .parent = &sys_clkin_ck,
391 .clksel = core_hsd_byp_clk_mux_sel, 415 .clksel = core_hsd_byp_clk_mux_sel,
392 .init = &omap2_init_clksel_parent, 416 .init = &omap2_init_clksel_parent,
393 .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_CORE, 417 .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_CORE,
@@ -400,7 +424,7 @@ static struct clk core_hsd_byp_clk_mux_ck = {
400static struct dpll_data dpll_core_dd = { 424static struct dpll_data dpll_core_dd = {
401 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_CORE, 425 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_CORE,
402 .clk_bypass = &core_hsd_byp_clk_mux_ck, 426 .clk_bypass = &core_hsd_byp_clk_mux_ck,
403 .clk_ref = &dpll_sys_ref_clk, 427 .clk_ref = &sys_clkin_ck,
404 .control_reg = OMAP4430_CM_CLKMODE_DPLL_CORE, 428 .control_reg = OMAP4430_CM_CLKMODE_DPLL_CORE,
405 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), 429 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
406 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_CORE, 430 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_CORE,
@@ -418,25 +442,33 @@ static struct dpll_data dpll_core_dd = {
418 442
419static struct clk dpll_core_ck = { 443static struct clk dpll_core_ck = {
420 .name = "dpll_core_ck", 444 .name = "dpll_core_ck",
421 .parent = &dpll_sys_ref_clk, 445 .parent = &sys_clkin_ck,
422 .dpll_data = &dpll_core_dd, 446 .dpll_data = &dpll_core_dd,
423 .init = &omap2_init_dpll_parent, 447 .init = &omap2_init_dpll_parent,
424 .ops = &clkops_null, 448 .ops = &clkops_omap3_core_dpll_ops,
425 .recalc = &omap3_dpll_recalc, 449 .recalc = &omap3_dpll_recalc,
426}; 450};
427 451
428static const struct clksel dpll_core_m6_div[] = { 452static struct clk dpll_core_x2_ck = {
429 { .parent = &dpll_core_ck, .rates = div31_1to31_rates }, 453 .name = "dpll_core_x2_ck",
454 .parent = &dpll_core_ck,
455 .flags = CLOCK_CLKOUTX2,
456 .ops = &clkops_null,
457 .recalc = &omap3_clkoutx2_recalc,
458};
459
460static const struct clksel dpll_core_m6x2_div[] = {
461 { .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
430 { .parent = NULL }, 462 { .parent = NULL },
431}; 463};
432 464
433static struct clk dpll_core_m6_ck = { 465static struct clk dpll_core_m6x2_ck = {
434 .name = "dpll_core_m6_ck", 466 .name = "dpll_core_m6x2_ck",
435 .parent = &dpll_core_ck, 467 .parent = &dpll_core_x2_ck,
436 .clksel = dpll_core_m6_div, 468 .clksel = dpll_core_m6x2_div,
437 .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_CORE, 469 .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_CORE,
438 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK, 470 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK,
439 .ops = &clkops_null, 471 .ops = &clkops_omap4_dpllmx_ops,
440 .recalc = &omap2_clksel_recalc, 472 .recalc = &omap2_clksel_recalc,
441 .round_rate = &omap2_clksel_round_rate, 473 .round_rate = &omap2_clksel_round_rate,
442 .set_rate = &omap2_clksel_set_rate, 474 .set_rate = &omap2_clksel_set_rate,
@@ -444,7 +476,7 @@ static struct clk dpll_core_m6_ck = {
444 476
445static const struct clksel dbgclk_mux_sel[] = { 477static const struct clksel dbgclk_mux_sel[] = {
446 { .parent = &sys_clkin_ck, .rates = div_1_0_rates }, 478 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
447 { .parent = &dpll_core_m6_ck, .rates = div_1_1_rates }, 479 { .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
448 { .parent = NULL }, 480 { .parent = NULL },
449}; 481};
450 482
@@ -455,13 +487,18 @@ static struct clk dbgclk_mux_ck = {
455 .recalc = &followparent_recalc, 487 .recalc = &followparent_recalc,
456}; 488};
457 489
490static const struct clksel dpll_core_m2_div[] = {
491 { .parent = &dpll_core_ck, .rates = div31_1to31_rates },
492 { .parent = NULL },
493};
494
458static struct clk dpll_core_m2_ck = { 495static struct clk dpll_core_m2_ck = {
459 .name = "dpll_core_m2_ck", 496 .name = "dpll_core_m2_ck",
460 .parent = &dpll_core_ck, 497 .parent = &dpll_core_ck,
461 .clksel = dpll_core_m6_div, 498 .clksel = dpll_core_m2_div,
462 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_CORE, 499 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_CORE,
463 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK, 500 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
464 .ops = &clkops_null, 501 .ops = &clkops_omap4_dpllmx_ops,
465 .recalc = &omap2_clksel_recalc, 502 .recalc = &omap2_clksel_recalc,
466 .round_rate = &omap2_clksel_round_rate, 503 .round_rate = &omap2_clksel_round_rate,
467 .set_rate = &omap2_clksel_set_rate, 504 .set_rate = &omap2_clksel_set_rate,
@@ -471,29 +508,30 @@ static struct clk ddrphy_ck = {
471 .name = "ddrphy_ck", 508 .name = "ddrphy_ck",
472 .parent = &dpll_core_m2_ck, 509 .parent = &dpll_core_m2_ck,
473 .ops = &clkops_null, 510 .ops = &clkops_null,
474 .recalc = &followparent_recalc, 511 .fixed_div = 2,
512 .recalc = &omap_fixed_divisor_recalc,
475}; 513};
476 514
477static struct clk dpll_core_m5_ck = { 515static struct clk dpll_core_m5x2_ck = {
478 .name = "dpll_core_m5_ck", 516 .name = "dpll_core_m5x2_ck",
479 .parent = &dpll_core_ck, 517 .parent = &dpll_core_x2_ck,
480 .clksel = dpll_core_m6_div, 518 .clksel = dpll_core_m6x2_div,
481 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_CORE, 519 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_CORE,
482 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK, 520 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
483 .ops = &clkops_null, 521 .ops = &clkops_omap4_dpllmx_ops,
484 .recalc = &omap2_clksel_recalc, 522 .recalc = &omap2_clksel_recalc,
485 .round_rate = &omap2_clksel_round_rate, 523 .round_rate = &omap2_clksel_round_rate,
486 .set_rate = &omap2_clksel_set_rate, 524 .set_rate = &omap2_clksel_set_rate,
487}; 525};
488 526
489static const struct clksel div_core_div[] = { 527static const struct clksel div_core_div[] = {
490 { .parent = &dpll_core_m5_ck, .rates = div2_1to2_rates }, 528 { .parent = &dpll_core_m5x2_ck, .rates = div2_1to2_rates },
491 { .parent = NULL }, 529 { .parent = NULL },
492}; 530};
493 531
494static struct clk div_core_ck = { 532static struct clk div_core_ck = {
495 .name = "div_core_ck", 533 .name = "div_core_ck",
496 .parent = &dpll_core_m5_ck, 534 .parent = &dpll_core_m5x2_ck,
497 .clksel = div_core_div, 535 .clksel = div_core_div,
498 .clksel_reg = OMAP4430_CM_CLKSEL_CORE, 536 .clksel_reg = OMAP4430_CM_CLKSEL_CORE,
499 .clksel_mask = OMAP4430_CLKSEL_CORE_MASK, 537 .clksel_mask = OMAP4430_CLKSEL_CORE_MASK,
@@ -512,13 +550,13 @@ static const struct clksel_rate div4_1to8_rates[] = {
512}; 550};
513 551
514static const struct clksel div_iva_hs_clk_div[] = { 552static const struct clksel div_iva_hs_clk_div[] = {
515 { .parent = &dpll_core_m5_ck, .rates = div4_1to8_rates }, 553 { .parent = &dpll_core_m5x2_ck, .rates = div4_1to8_rates },
516 { .parent = NULL }, 554 { .parent = NULL },
517}; 555};
518 556
519static struct clk div_iva_hs_clk = { 557static struct clk div_iva_hs_clk = {
520 .name = "div_iva_hs_clk", 558 .name = "div_iva_hs_clk",
521 .parent = &dpll_core_m5_ck, 559 .parent = &dpll_core_m5x2_ck,
522 .clksel = div_iva_hs_clk_div, 560 .clksel = div_iva_hs_clk_div,
523 .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_IVA, 561 .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_IVA,
524 .clksel_mask = OMAP4430_CLKSEL_0_1_MASK, 562 .clksel_mask = OMAP4430_CLKSEL_0_1_MASK,
@@ -530,7 +568,7 @@ static struct clk div_iva_hs_clk = {
530 568
531static struct clk div_mpu_hs_clk = { 569static struct clk div_mpu_hs_clk = {
532 .name = "div_mpu_hs_clk", 570 .name = "div_mpu_hs_clk",
533 .parent = &dpll_core_m5_ck, 571 .parent = &dpll_core_m5x2_ck,
534 .clksel = div_iva_hs_clk_div, 572 .clksel = div_iva_hs_clk_div,
535 .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_MPU, 573 .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_MPU,
536 .clksel_mask = OMAP4430_CLKSEL_0_1_MASK, 574 .clksel_mask = OMAP4430_CLKSEL_0_1_MASK,
@@ -540,13 +578,13 @@ static struct clk div_mpu_hs_clk = {
540 .set_rate = &omap2_clksel_set_rate, 578 .set_rate = &omap2_clksel_set_rate,
541}; 579};
542 580
543static struct clk dpll_core_m4_ck = { 581static struct clk dpll_core_m4x2_ck = {
544 .name = "dpll_core_m4_ck", 582 .name = "dpll_core_m4x2_ck",
545 .parent = &dpll_core_ck, 583 .parent = &dpll_core_x2_ck,
546 .clksel = dpll_core_m6_div, 584 .clksel = dpll_core_m6x2_div,
547 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_CORE, 585 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_CORE,
548 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK, 586 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
549 .ops = &clkops_null, 587 .ops = &clkops_omap4_dpllmx_ops,
550 .recalc = &omap2_clksel_recalc, 588 .recalc = &omap2_clksel_recalc,
551 .round_rate = &omap2_clksel_round_rate, 589 .round_rate = &omap2_clksel_round_rate,
552 .set_rate = &omap2_clksel_set_rate, 590 .set_rate = &omap2_clksel_set_rate,
@@ -554,65 +592,77 @@ static struct clk dpll_core_m4_ck = {
554 592
555static struct clk dll_clk_div_ck = { 593static struct clk dll_clk_div_ck = {
556 .name = "dll_clk_div_ck", 594 .name = "dll_clk_div_ck",
557 .parent = &dpll_core_m4_ck, 595 .parent = &dpll_core_m4x2_ck,
558 .ops = &clkops_null, 596 .ops = &clkops_null,
559 .recalc = &followparent_recalc, 597 .fixed_div = 2,
598 .recalc = &omap_fixed_divisor_recalc,
599};
600
601static const struct clksel dpll_abe_m2_div[] = {
602 { .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
603 { .parent = NULL },
560}; 604};
561 605
562static struct clk dpll_abe_m2_ck = { 606static struct clk dpll_abe_m2_ck = {
563 .name = "dpll_abe_m2_ck", 607 .name = "dpll_abe_m2_ck",
564 .parent = &dpll_abe_ck, 608 .parent = &dpll_abe_ck,
565 .clksel = dpll_abe_m3_div, 609 .clksel = dpll_abe_m2_div,
566 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE, 610 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE,
567 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK, 611 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
568 .ops = &clkops_null, 612 .ops = &clkops_omap4_dpllmx_ops,
569 .recalc = &omap2_clksel_recalc, 613 .recalc = &omap2_clksel_recalc,
570 .round_rate = &omap2_clksel_round_rate, 614 .round_rate = &omap2_clksel_round_rate,
571 .set_rate = &omap2_clksel_set_rate, 615 .set_rate = &omap2_clksel_set_rate,
572}; 616};
573 617
574static struct clk dpll_core_m3_ck = { 618static struct clk dpll_core_m3x2_ck = {
575 .name = "dpll_core_m3_ck", 619 .name = "dpll_core_m3x2_ck",
576 .parent = &dpll_core_ck, 620 .parent = &dpll_core_x2_ck,
577 .clksel = dpll_core_m6_div, 621 .clksel = dpll_core_m6x2_div,
578 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_CORE, 622 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_CORE,
579 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK, 623 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
580 .ops = &clkops_null, 624 .ops = &clkops_omap2_dflt,
625 .enable_reg = OMAP4430_CM_DIV_M3_DPLL_CORE,
626 .enable_bit = OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_SHIFT,
581 .recalc = &omap2_clksel_recalc, 627 .recalc = &omap2_clksel_recalc,
582 .round_rate = &omap2_clksel_round_rate, 628 .round_rate = &omap2_clksel_round_rate,
583 .set_rate = &omap2_clksel_set_rate, 629 .set_rate = &omap2_clksel_set_rate,
584}; 630};
585 631
586static struct clk dpll_core_m7_ck = { 632static struct clk dpll_core_m7x2_ck = {
587 .name = "dpll_core_m7_ck", 633 .name = "dpll_core_m7x2_ck",
588 .parent = &dpll_core_ck, 634 .parent = &dpll_core_x2_ck,
589 .clksel = dpll_core_m6_div, 635 .clksel = dpll_core_m6x2_div,
590 .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_CORE, 636 .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_CORE,
591 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK, 637 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK,
592 .ops = &clkops_null, 638 .ops = &clkops_omap4_dpllmx_ops,
593 .recalc = &omap2_clksel_recalc, 639 .recalc = &omap2_clksel_recalc,
594 .round_rate = &omap2_clksel_round_rate, 640 .round_rate = &omap2_clksel_round_rate,
595 .set_rate = &omap2_clksel_set_rate, 641 .set_rate = &omap2_clksel_set_rate,
596}; 642};
597 643
598static const struct clksel iva_hsd_byp_clk_mux_sel[] = { 644static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
599 { .parent = &dpll_sys_ref_clk, .rates = div_1_0_rates }, 645 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
600 { .parent = &div_iva_hs_clk, .rates = div_1_1_rates }, 646 { .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
601 { .parent = NULL }, 647 { .parent = NULL },
602}; 648};
603 649
604static struct clk iva_hsd_byp_clk_mux_ck = { 650static struct clk iva_hsd_byp_clk_mux_ck = {
605 .name = "iva_hsd_byp_clk_mux_ck", 651 .name = "iva_hsd_byp_clk_mux_ck",
606 .parent = &dpll_sys_ref_clk, 652 .parent = &sys_clkin_ck,
653 .clksel = iva_hsd_byp_clk_mux_sel,
654 .init = &omap2_init_clksel_parent,
655 .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_IVA,
656 .clksel_mask = OMAP4430_DPLL_BYP_CLKSEL_MASK,
607 .ops = &clkops_null, 657 .ops = &clkops_null,
608 .recalc = &followparent_recalc, 658 .recalc = &omap2_clksel_recalc,
609}; 659};
610 660
611/* DPLL_IVA */ 661/* DPLL_IVA */
612static struct dpll_data dpll_iva_dd = { 662static struct dpll_data dpll_iva_dd = {
613 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_IVA, 663 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_IVA,
614 .clk_bypass = &iva_hsd_byp_clk_mux_ck, 664 .clk_bypass = &iva_hsd_byp_clk_mux_ck,
615 .clk_ref = &dpll_sys_ref_clk, 665 .clk_ref = &sys_clkin_ck,
616 .control_reg = OMAP4430_CM_CLKMODE_DPLL_IVA, 666 .control_reg = OMAP4430_CM_CLKMODE_DPLL_IVA,
617 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), 667 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
618 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_IVA, 668 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_IVA,
@@ -630,7 +680,7 @@ static struct dpll_data dpll_iva_dd = {
630 680
631static struct clk dpll_iva_ck = { 681static struct clk dpll_iva_ck = {
632 .name = "dpll_iva_ck", 682 .name = "dpll_iva_ck",
633 .parent = &dpll_sys_ref_clk, 683 .parent = &sys_clkin_ck,
634 .dpll_data = &dpll_iva_dd, 684 .dpll_data = &dpll_iva_dd,
635 .init = &omap2_init_dpll_parent, 685 .init = &omap2_init_dpll_parent,
636 .ops = &clkops_omap3_noncore_dpll_ops, 686 .ops = &clkops_omap3_noncore_dpll_ops,
@@ -639,30 +689,38 @@ static struct clk dpll_iva_ck = {
639 .set_rate = &omap3_noncore_dpll_set_rate, 689 .set_rate = &omap3_noncore_dpll_set_rate,
640}; 690};
641 691
642static const struct clksel dpll_iva_m4_div[] = { 692static struct clk dpll_iva_x2_ck = {
643 { .parent = &dpll_iva_ck, .rates = div31_1to31_rates }, 693 .name = "dpll_iva_x2_ck",
694 .parent = &dpll_iva_ck,
695 .flags = CLOCK_CLKOUTX2,
696 .ops = &clkops_null,
697 .recalc = &omap3_clkoutx2_recalc,
698};
699
700static const struct clksel dpll_iva_m4x2_div[] = {
701 { .parent = &dpll_iva_x2_ck, .rates = div31_1to31_rates },
644 { .parent = NULL }, 702 { .parent = NULL },
645}; 703};
646 704
647static struct clk dpll_iva_m4_ck = { 705static struct clk dpll_iva_m4x2_ck = {
648 .name = "dpll_iva_m4_ck", 706 .name = "dpll_iva_m4x2_ck",
649 .parent = &dpll_iva_ck, 707 .parent = &dpll_iva_x2_ck,
650 .clksel = dpll_iva_m4_div, 708 .clksel = dpll_iva_m4x2_div,
651 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_IVA, 709 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_IVA,
652 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK, 710 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
653 .ops = &clkops_null, 711 .ops = &clkops_omap4_dpllmx_ops,
654 .recalc = &omap2_clksel_recalc, 712 .recalc = &omap2_clksel_recalc,
655 .round_rate = &omap2_clksel_round_rate, 713 .round_rate = &omap2_clksel_round_rate,
656 .set_rate = &omap2_clksel_set_rate, 714 .set_rate = &omap2_clksel_set_rate,
657}; 715};
658 716
659static struct clk dpll_iva_m5_ck = { 717static struct clk dpll_iva_m5x2_ck = {
660 .name = "dpll_iva_m5_ck", 718 .name = "dpll_iva_m5x2_ck",
661 .parent = &dpll_iva_ck, 719 .parent = &dpll_iva_x2_ck,
662 .clksel = dpll_iva_m4_div, 720 .clksel = dpll_iva_m4x2_div,
663 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_IVA, 721 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_IVA,
664 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK, 722 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
665 .ops = &clkops_null, 723 .ops = &clkops_omap4_dpllmx_ops,
666 .recalc = &omap2_clksel_recalc, 724 .recalc = &omap2_clksel_recalc,
667 .round_rate = &omap2_clksel_round_rate, 725 .round_rate = &omap2_clksel_round_rate,
668 .set_rate = &omap2_clksel_set_rate, 726 .set_rate = &omap2_clksel_set_rate,
@@ -672,7 +730,7 @@ static struct clk dpll_iva_m5_ck = {
672static struct dpll_data dpll_mpu_dd = { 730static struct dpll_data dpll_mpu_dd = {
673 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_MPU, 731 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_MPU,
674 .clk_bypass = &div_mpu_hs_clk, 732 .clk_bypass = &div_mpu_hs_clk,
675 .clk_ref = &dpll_sys_ref_clk, 733 .clk_ref = &sys_clkin_ck,
676 .control_reg = OMAP4430_CM_CLKMODE_DPLL_MPU, 734 .control_reg = OMAP4430_CM_CLKMODE_DPLL_MPU,
677 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), 735 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
678 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_MPU, 736 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_MPU,
@@ -690,7 +748,7 @@ static struct dpll_data dpll_mpu_dd = {
690 748
691static struct clk dpll_mpu_ck = { 749static struct clk dpll_mpu_ck = {
692 .name = "dpll_mpu_ck", 750 .name = "dpll_mpu_ck",
693 .parent = &dpll_sys_ref_clk, 751 .parent = &sys_clkin_ck,
694 .dpll_data = &dpll_mpu_dd, 752 .dpll_data = &dpll_mpu_dd,
695 .init = &omap2_init_dpll_parent, 753 .init = &omap2_init_dpll_parent,
696 .ops = &clkops_omap3_noncore_dpll_ops, 754 .ops = &clkops_omap3_noncore_dpll_ops,
@@ -710,7 +768,7 @@ static struct clk dpll_mpu_m2_ck = {
710 .clksel = dpll_mpu_m2_div, 768 .clksel = dpll_mpu_m2_div,
711 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_MPU, 769 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_MPU,
712 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK, 770 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
713 .ops = &clkops_null, 771 .ops = &clkops_omap4_dpllmx_ops,
714 .recalc = &omap2_clksel_recalc, 772 .recalc = &omap2_clksel_recalc,
715 .round_rate = &omap2_clksel_round_rate, 773 .round_rate = &omap2_clksel_round_rate,
716 .set_rate = &omap2_clksel_set_rate, 774 .set_rate = &omap2_clksel_set_rate,
@@ -718,20 +776,21 @@ static struct clk dpll_mpu_m2_ck = {
718 776
719static struct clk per_hs_clk_div_ck = { 777static struct clk per_hs_clk_div_ck = {
720 .name = "per_hs_clk_div_ck", 778 .name = "per_hs_clk_div_ck",
721 .parent = &dpll_abe_m3_ck, 779 .parent = &dpll_abe_m3x2_ck,
722 .ops = &clkops_null, 780 .ops = &clkops_null,
723 .recalc = &followparent_recalc, 781 .fixed_div = 2,
782 .recalc = &omap_fixed_divisor_recalc,
724}; 783};
725 784
726static const struct clksel per_hsd_byp_clk_mux_sel[] = { 785static const struct clksel per_hsd_byp_clk_mux_sel[] = {
727 { .parent = &dpll_sys_ref_clk, .rates = div_1_0_rates }, 786 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
728 { .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates }, 787 { .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
729 { .parent = NULL }, 788 { .parent = NULL },
730}; 789};
731 790
732static struct clk per_hsd_byp_clk_mux_ck = { 791static struct clk per_hsd_byp_clk_mux_ck = {
733 .name = "per_hsd_byp_clk_mux_ck", 792 .name = "per_hsd_byp_clk_mux_ck",
734 .parent = &dpll_sys_ref_clk, 793 .parent = &sys_clkin_ck,
735 .clksel = per_hsd_byp_clk_mux_sel, 794 .clksel = per_hsd_byp_clk_mux_sel,
736 .init = &omap2_init_clksel_parent, 795 .init = &omap2_init_clksel_parent,
737 .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_PER, 796 .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_PER,
@@ -744,7 +803,7 @@ static struct clk per_hsd_byp_clk_mux_ck = {
744static struct dpll_data dpll_per_dd = { 803static struct dpll_data dpll_per_dd = {
745 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_PER, 804 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_PER,
746 .clk_bypass = &per_hsd_byp_clk_mux_ck, 805 .clk_bypass = &per_hsd_byp_clk_mux_ck,
747 .clk_ref = &dpll_sys_ref_clk, 806 .clk_ref = &sys_clkin_ck,
748 .control_reg = OMAP4430_CM_CLKMODE_DPLL_PER, 807 .control_reg = OMAP4430_CM_CLKMODE_DPLL_PER,
749 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), 808 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
750 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_PER, 809 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_PER,
@@ -762,7 +821,7 @@ static struct dpll_data dpll_per_dd = {
762 821
763static struct clk dpll_per_ck = { 822static struct clk dpll_per_ck = {
764 .name = "dpll_per_ck", 823 .name = "dpll_per_ck",
765 .parent = &dpll_sys_ref_clk, 824 .parent = &sys_clkin_ck,
766 .dpll_data = &dpll_per_dd, 825 .dpll_data = &dpll_per_dd,
767 .init = &omap2_init_dpll_parent, 826 .init = &omap2_init_dpll_parent,
768 .ops = &clkops_omap3_noncore_dpll_ops, 827 .ops = &clkops_omap3_noncore_dpll_ops,
@@ -782,74 +841,95 @@ static struct clk dpll_per_m2_ck = {
782 .clksel = dpll_per_m2_div, 841 .clksel = dpll_per_m2_div,
783 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER, 842 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER,
784 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK, 843 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
785 .ops = &clkops_null, 844 .ops = &clkops_omap4_dpllmx_ops,
786 .recalc = &omap2_clksel_recalc, 845 .recalc = &omap2_clksel_recalc,
787 .round_rate = &omap2_clksel_round_rate, 846 .round_rate = &omap2_clksel_round_rate,
788 .set_rate = &omap2_clksel_set_rate, 847 .set_rate = &omap2_clksel_set_rate,
789}; 848};
790 849
850static struct clk dpll_per_x2_ck = {
851 .name = "dpll_per_x2_ck",
852 .parent = &dpll_per_ck,
853 .flags = CLOCK_CLKOUTX2,
854 .ops = &clkops_omap4_dpllmx_ops,
855 .recalc = &omap3_clkoutx2_recalc,
856 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER,
857};
858
859static const struct clksel dpll_per_m2x2_div[] = {
860 { .parent = &dpll_per_x2_ck, .rates = div31_1to31_rates },
861 { .parent = NULL },
862};
863
791static struct clk dpll_per_m2x2_ck = { 864static struct clk dpll_per_m2x2_ck = {
792 .name = "dpll_per_m2x2_ck", 865 .name = "dpll_per_m2x2_ck",
793 .parent = &dpll_per_ck, 866 .parent = &dpll_per_x2_ck,
794 .ops = &clkops_null, 867 .clksel = dpll_per_m2x2_div,
795 .recalc = &followparent_recalc, 868 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER,
869 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
870 .ops = &clkops_omap4_dpllmx_ops,
871 .recalc = &omap2_clksel_recalc,
872 .round_rate = &omap2_clksel_round_rate,
873 .set_rate = &omap2_clksel_set_rate,
796}; 874};
797 875
798static struct clk dpll_per_m3_ck = { 876static struct clk dpll_per_m3x2_ck = {
799 .name = "dpll_per_m3_ck", 877 .name = "dpll_per_m3x2_ck",
800 .parent = &dpll_per_ck, 878 .parent = &dpll_per_x2_ck,
801 .clksel = dpll_per_m2_div, 879 .clksel = dpll_per_m2x2_div,
802 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_PER, 880 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_PER,
803 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK, 881 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
804 .ops = &clkops_null, 882 .ops = &clkops_omap2_dflt,
883 .enable_reg = OMAP4430_CM_DIV_M3_DPLL_PER,
884 .enable_bit = OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_SHIFT,
805 .recalc = &omap2_clksel_recalc, 885 .recalc = &omap2_clksel_recalc,
806 .round_rate = &omap2_clksel_round_rate, 886 .round_rate = &omap2_clksel_round_rate,
807 .set_rate = &omap2_clksel_set_rate, 887 .set_rate = &omap2_clksel_set_rate,
808}; 888};
809 889
810static struct clk dpll_per_m4_ck = { 890static struct clk dpll_per_m4x2_ck = {
811 .name = "dpll_per_m4_ck", 891 .name = "dpll_per_m4x2_ck",
812 .parent = &dpll_per_ck, 892 .parent = &dpll_per_x2_ck,
813 .clksel = dpll_per_m2_div, 893 .clksel = dpll_per_m2x2_div,
814 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_PER, 894 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_PER,
815 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK, 895 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
816 .ops = &clkops_null, 896 .ops = &clkops_omap4_dpllmx_ops,
817 .recalc = &omap2_clksel_recalc, 897 .recalc = &omap2_clksel_recalc,
818 .round_rate = &omap2_clksel_round_rate, 898 .round_rate = &omap2_clksel_round_rate,
819 .set_rate = &omap2_clksel_set_rate, 899 .set_rate = &omap2_clksel_set_rate,
820}; 900};
821 901
822static struct clk dpll_per_m5_ck = { 902static struct clk dpll_per_m5x2_ck = {
823 .name = "dpll_per_m5_ck", 903 .name = "dpll_per_m5x2_ck",
824 .parent = &dpll_per_ck, 904 .parent = &dpll_per_x2_ck,
825 .clksel = dpll_per_m2_div, 905 .clksel = dpll_per_m2x2_div,
826 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_PER, 906 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_PER,
827 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK, 907 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
828 .ops = &clkops_null, 908 .ops = &clkops_omap4_dpllmx_ops,
829 .recalc = &omap2_clksel_recalc, 909 .recalc = &omap2_clksel_recalc,
830 .round_rate = &omap2_clksel_round_rate, 910 .round_rate = &omap2_clksel_round_rate,
831 .set_rate = &omap2_clksel_set_rate, 911 .set_rate = &omap2_clksel_set_rate,
832}; 912};
833 913
834static struct clk dpll_per_m6_ck = { 914static struct clk dpll_per_m6x2_ck = {
835 .name = "dpll_per_m6_ck", 915 .name = "dpll_per_m6x2_ck",
836 .parent = &dpll_per_ck, 916 .parent = &dpll_per_x2_ck,
837 .clksel = dpll_per_m2_div, 917 .clksel = dpll_per_m2x2_div,
838 .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_PER, 918 .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_PER,
839 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK, 919 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK,
840 .ops = &clkops_null, 920 .ops = &clkops_omap4_dpllmx_ops,
841 .recalc = &omap2_clksel_recalc, 921 .recalc = &omap2_clksel_recalc,
842 .round_rate = &omap2_clksel_round_rate, 922 .round_rate = &omap2_clksel_round_rate,
843 .set_rate = &omap2_clksel_set_rate, 923 .set_rate = &omap2_clksel_set_rate,
844}; 924};
845 925
846static struct clk dpll_per_m7_ck = { 926static struct clk dpll_per_m7x2_ck = {
847 .name = "dpll_per_m7_ck", 927 .name = "dpll_per_m7x2_ck",
848 .parent = &dpll_per_ck, 928 .parent = &dpll_per_x2_ck,
849 .clksel = dpll_per_m2_div, 929 .clksel = dpll_per_m2x2_div,
850 .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_PER, 930 .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_PER,
851 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK, 931 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK,
852 .ops = &clkops_null, 932 .ops = &clkops_omap4_dpllmx_ops,
853 .recalc = &omap2_clksel_recalc, 933 .recalc = &omap2_clksel_recalc,
854 .round_rate = &omap2_clksel_round_rate, 934 .round_rate = &omap2_clksel_round_rate,
855 .set_rate = &omap2_clksel_set_rate, 935 .set_rate = &omap2_clksel_set_rate,
@@ -858,8 +938,8 @@ static struct clk dpll_per_m7_ck = {
858/* DPLL_UNIPRO */ 938/* DPLL_UNIPRO */
859static struct dpll_data dpll_unipro_dd = { 939static struct dpll_data dpll_unipro_dd = {
860 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_UNIPRO, 940 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_UNIPRO,
861 .clk_bypass = &dpll_sys_ref_clk, 941 .clk_bypass = &sys_clkin_ck,
862 .clk_ref = &dpll_sys_ref_clk, 942 .clk_ref = &sys_clkin_ck,
863 .control_reg = OMAP4430_CM_CLKMODE_DPLL_UNIPRO, 943 .control_reg = OMAP4430_CM_CLKMODE_DPLL_UNIPRO,
864 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), 944 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
865 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO, 945 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO,
@@ -869,6 +949,7 @@ static struct dpll_data dpll_unipro_dd = {
869 .enable_mask = OMAP4430_DPLL_EN_MASK, 949 .enable_mask = OMAP4430_DPLL_EN_MASK,
870 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK, 950 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
871 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK, 951 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
952 .sddiv_mask = OMAP4430_DPLL_SD_DIV_MASK,
872 .max_multiplier = OMAP4430_MAX_DPLL_MULT, 953 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
873 .max_divider = OMAP4430_MAX_DPLL_DIV, 954 .max_divider = OMAP4430_MAX_DPLL_DIV,
874 .min_divider = 1, 955 .min_divider = 1,
@@ -877,7 +958,7 @@ static struct dpll_data dpll_unipro_dd = {
877 958
878static struct clk dpll_unipro_ck = { 959static struct clk dpll_unipro_ck = {
879 .name = "dpll_unipro_ck", 960 .name = "dpll_unipro_ck",
880 .parent = &dpll_sys_ref_clk, 961 .parent = &sys_clkin_ck,
881 .dpll_data = &dpll_unipro_dd, 962 .dpll_data = &dpll_unipro_dd,
882 .init = &omap2_init_dpll_parent, 963 .init = &omap2_init_dpll_parent,
883 .ops = &clkops_omap3_noncore_dpll_ops, 964 .ops = &clkops_omap3_noncore_dpll_ops,
@@ -886,18 +967,26 @@ static struct clk dpll_unipro_ck = {
886 .set_rate = &omap3_noncore_dpll_set_rate, 967 .set_rate = &omap3_noncore_dpll_set_rate,
887}; 968};
888 969
970static struct clk dpll_unipro_x2_ck = {
971 .name = "dpll_unipro_x2_ck",
972 .parent = &dpll_unipro_ck,
973 .flags = CLOCK_CLKOUTX2,
974 .ops = &clkops_null,
975 .recalc = &omap3_clkoutx2_recalc,
976};
977
889static const struct clksel dpll_unipro_m2x2_div[] = { 978static const struct clksel dpll_unipro_m2x2_div[] = {
890 { .parent = &dpll_unipro_ck, .rates = div31_1to31_rates }, 979 { .parent = &dpll_unipro_x2_ck, .rates = div31_1to31_rates },
891 { .parent = NULL }, 980 { .parent = NULL },
892}; 981};
893 982
894static struct clk dpll_unipro_m2x2_ck = { 983static struct clk dpll_unipro_m2x2_ck = {
895 .name = "dpll_unipro_m2x2_ck", 984 .name = "dpll_unipro_m2x2_ck",
896 .parent = &dpll_unipro_ck, 985 .parent = &dpll_unipro_x2_ck,
897 .clksel = dpll_unipro_m2x2_div, 986 .clksel = dpll_unipro_m2x2_div,
898 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_UNIPRO, 987 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_UNIPRO,
899 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK, 988 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
900 .ops = &clkops_null, 989 .ops = &clkops_omap4_dpllmx_ops,
901 .recalc = &omap2_clksel_recalc, 990 .recalc = &omap2_clksel_recalc,
902 .round_rate = &omap2_clksel_round_rate, 991 .round_rate = &omap2_clksel_round_rate,
903 .set_rate = &omap2_clksel_set_rate, 992 .set_rate = &omap2_clksel_set_rate,
@@ -905,16 +994,18 @@ static struct clk dpll_unipro_m2x2_ck = {
905 994
906static struct clk usb_hs_clk_div_ck = { 995static struct clk usb_hs_clk_div_ck = {
907 .name = "usb_hs_clk_div_ck", 996 .name = "usb_hs_clk_div_ck",
908 .parent = &dpll_abe_m3_ck, 997 .parent = &dpll_abe_m3x2_ck,
909 .ops = &clkops_null, 998 .ops = &clkops_null,
910 .recalc = &followparent_recalc, 999 .fixed_div = 3,
1000 .recalc = &omap_fixed_divisor_recalc,
911}; 1001};
912 1002
913/* DPLL_USB */ 1003/* DPLL_USB */
914static struct dpll_data dpll_usb_dd = { 1004static struct dpll_data dpll_usb_dd = {
915 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_USB, 1005 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_USB,
916 .clk_bypass = &usb_hs_clk_div_ck, 1006 .clk_bypass = &usb_hs_clk_div_ck,
917 .clk_ref = &dpll_sys_ref_clk, 1007 .flags = DPLL_J_TYPE,
1008 .clk_ref = &sys_clkin_ck,
918 .control_reg = OMAP4430_CM_CLKMODE_DPLL_USB, 1009 .control_reg = OMAP4430_CM_CLKMODE_DPLL_USB,
919 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), 1010 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
920 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_USB, 1011 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_USB,
@@ -927,13 +1018,12 @@ static struct dpll_data dpll_usb_dd = {
927 .max_multiplier = OMAP4430_MAX_DPLL_MULT, 1018 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
928 .max_divider = OMAP4430_MAX_DPLL_DIV, 1019 .max_divider = OMAP4430_MAX_DPLL_DIV,
929 .min_divider = 1, 1020 .min_divider = 1,
930 .flags = DPLL_J_TYPE | DPLL_NO_DCO_SEL
931}; 1021};
932 1022
933 1023
934static struct clk dpll_usb_ck = { 1024static struct clk dpll_usb_ck = {
935 .name = "dpll_usb_ck", 1025 .name = "dpll_usb_ck",
936 .parent = &dpll_sys_ref_clk, 1026 .parent = &sys_clkin_ck,
937 .dpll_data = &dpll_usb_dd, 1027 .dpll_data = &dpll_usb_dd,
938 .init = &omap2_init_dpll_parent, 1028 .init = &omap2_init_dpll_parent,
939 .ops = &clkops_omap3_noncore_dpll_ops, 1029 .ops = &clkops_omap3_noncore_dpll_ops,
@@ -945,7 +1035,8 @@ static struct clk dpll_usb_ck = {
945static struct clk dpll_usb_clkdcoldo_ck = { 1035static struct clk dpll_usb_clkdcoldo_ck = {
946 .name = "dpll_usb_clkdcoldo_ck", 1036 .name = "dpll_usb_clkdcoldo_ck",
947 .parent = &dpll_usb_ck, 1037 .parent = &dpll_usb_ck,
948 .ops = &clkops_null, 1038 .ops = &clkops_omap4_dpllmx_ops,
1039 .clksel_reg = OMAP4430_CM_CLKDCOLDO_DPLL_USB,
949 .recalc = &followparent_recalc, 1040 .recalc = &followparent_recalc,
950}; 1041};
951 1042
@@ -960,7 +1051,7 @@ static struct clk dpll_usb_m2_ck = {
960 .clksel = dpll_usb_m2_div, 1051 .clksel = dpll_usb_m2_div,
961 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_USB, 1052 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_USB,
962 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK, 1053 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK,
963 .ops = &clkops_null, 1054 .ops = &clkops_omap4_dpllmx_ops,
964 .recalc = &omap2_clksel_recalc, 1055 .recalc = &omap2_clksel_recalc,
965 .round_rate = &omap2_clksel_round_rate, 1056 .round_rate = &omap2_clksel_round_rate,
966 .set_rate = &omap2_clksel_set_rate, 1057 .set_rate = &omap2_clksel_set_rate,
@@ -968,7 +1059,7 @@ static struct clk dpll_usb_m2_ck = {
968 1059
969static const struct clksel ducati_clk_mux_sel[] = { 1060static const struct clksel ducati_clk_mux_sel[] = {
970 { .parent = &div_core_ck, .rates = div_1_0_rates }, 1061 { .parent = &div_core_ck, .rates = div_1_0_rates },
971 { .parent = &dpll_per_m6_ck, .rates = div_1_1_rates }, 1062 { .parent = &dpll_per_m6x2_ck, .rates = div_1_1_rates },
972 { .parent = NULL }, 1063 { .parent = NULL },
973}; 1064};
974 1065
@@ -987,21 +1078,24 @@ static struct clk func_12m_fclk = {
987 .name = "func_12m_fclk", 1078 .name = "func_12m_fclk",
988 .parent = &dpll_per_m2x2_ck, 1079 .parent = &dpll_per_m2x2_ck,
989 .ops = &clkops_null, 1080 .ops = &clkops_null,
990 .recalc = &followparent_recalc, 1081 .fixed_div = 16,
1082 .recalc = &omap_fixed_divisor_recalc,
991}; 1083};
992 1084
993static struct clk func_24m_clk = { 1085static struct clk func_24m_clk = {
994 .name = "func_24m_clk", 1086 .name = "func_24m_clk",
995 .parent = &dpll_per_m2_ck, 1087 .parent = &dpll_per_m2_ck,
996 .ops = &clkops_null, 1088 .ops = &clkops_null,
997 .recalc = &followparent_recalc, 1089 .fixed_div = 4,
1090 .recalc = &omap_fixed_divisor_recalc,
998}; 1091};
999 1092
1000static struct clk func_24mc_fclk = { 1093static struct clk func_24mc_fclk = {
1001 .name = "func_24mc_fclk", 1094 .name = "func_24mc_fclk",
1002 .parent = &dpll_per_m2x2_ck, 1095 .parent = &dpll_per_m2x2_ck,
1003 .ops = &clkops_null, 1096 .ops = &clkops_null,
1004 .recalc = &followparent_recalc, 1097 .fixed_div = 8,
1098 .recalc = &omap_fixed_divisor_recalc,
1005}; 1099};
1006 1100
1007static const struct clksel_rate div2_4to8_rates[] = { 1101static const struct clksel_rate div2_4to8_rates[] = {
@@ -1031,7 +1125,8 @@ static struct clk func_48mc_fclk = {
1031 .name = "func_48mc_fclk", 1125 .name = "func_48mc_fclk",
1032 .parent = &dpll_per_m2x2_ck, 1126 .parent = &dpll_per_m2x2_ck,
1033 .ops = &clkops_null, 1127 .ops = &clkops_null,
1034 .recalc = &followparent_recalc, 1128 .fixed_div = 4,
1129 .recalc = &omap_fixed_divisor_recalc,
1035}; 1130};
1036 1131
1037static const struct clksel_rate div2_2to4_rates[] = { 1132static const struct clksel_rate div2_2to4_rates[] = {
@@ -1041,13 +1136,13 @@ static const struct clksel_rate div2_2to4_rates[] = {
1041}; 1136};
1042 1137
1043static const struct clksel func_64m_fclk_div[] = { 1138static const struct clksel func_64m_fclk_div[] = {
1044 { .parent = &dpll_per_m4_ck, .rates = div2_2to4_rates }, 1139 { .parent = &dpll_per_m4x2_ck, .rates = div2_2to4_rates },
1045 { .parent = NULL }, 1140 { .parent = NULL },
1046}; 1141};
1047 1142
1048static struct clk func_64m_fclk = { 1143static struct clk func_64m_fclk = {
1049 .name = "func_64m_fclk", 1144 .name = "func_64m_fclk",
1050 .parent = &dpll_per_m4_ck, 1145 .parent = &dpll_per_m4x2_ck,
1051 .clksel = func_64m_fclk_div, 1146 .clksel = func_64m_fclk_div,
1052 .clksel_reg = OMAP4430_CM_SCALE_FCLK, 1147 .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1053 .clksel_mask = OMAP4430_SCALE_FCLK_MASK, 1148 .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
@@ -1148,7 +1243,8 @@ static struct clk lp_clk_div_ck = {
1148 .name = "lp_clk_div_ck", 1243 .name = "lp_clk_div_ck",
1149 .parent = &dpll_abe_m2x2_ck, 1244 .parent = &dpll_abe_m2x2_ck,
1150 .ops = &clkops_null, 1245 .ops = &clkops_null,
1151 .recalc = &followparent_recalc, 1246 .fixed_div = 16,
1247 .recalc = &omap_fixed_divisor_recalc,
1152}; 1248};
1153 1249
1154static const struct clksel l4_wkup_clk_mux_sel[] = { 1250static const struct clksel l4_wkup_clk_mux_sel[] = {
@@ -1216,13 +1312,14 @@ static struct clk per_abe_24m_fclk = {
1216 .name = "per_abe_24m_fclk", 1312 .name = "per_abe_24m_fclk",
1217 .parent = &dpll_abe_m2_ck, 1313 .parent = &dpll_abe_m2_ck,
1218 .ops = &clkops_null, 1314 .ops = &clkops_null,
1219 .recalc = &followparent_recalc, 1315 .fixed_div = 4,
1316 .recalc = &omap_fixed_divisor_recalc,
1220}; 1317};
1221 1318
1222static const struct clksel pmd_stm_clock_mux_sel[] = { 1319static const struct clksel pmd_stm_clock_mux_sel[] = {
1223 { .parent = &sys_clkin_ck, .rates = div_1_0_rates }, 1320 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
1224 { .parent = &dpll_core_m6_ck, .rates = div_1_1_rates }, 1321 { .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
1225 { .parent = &dpll_per_m7_ck, .rates = div_1_2_rates }, 1322 { .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
1226 { .parent = NULL }, 1323 { .parent = NULL },
1227}; 1324};
1228 1325
@@ -1240,10 +1337,15 @@ static struct clk pmd_trace_clk_mux_ck = {
1240 .recalc = &followparent_recalc, 1337 .recalc = &followparent_recalc,
1241}; 1338};
1242 1339
1340static const struct clksel syc_clk_div_div[] = {
1341 { .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
1342 { .parent = NULL },
1343};
1344
1243static struct clk syc_clk_div_ck = { 1345static struct clk syc_clk_div_ck = {
1244 .name = "syc_clk_div_ck", 1346 .name = "syc_clk_div_ck",
1245 .parent = &sys_clkin_ck, 1347 .parent = &sys_clkin_ck,
1246 .clksel = dpll_sys_ref_clk_div, 1348 .clksel = syc_clk_div_div,
1247 .clksel_reg = OMAP4430_CM_ABE_DSS_SYS_CLKSEL, 1349 .clksel_reg = OMAP4430_CM_ABE_DSS_SYS_CLKSEL,
1248 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK, 1350 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
1249 .ops = &clkops_null, 1351 .ops = &clkops_null,
@@ -1284,13 +1386,13 @@ static struct clk aess_fck = {
1284 .recalc = &followparent_recalc, 1386 .recalc = &followparent_recalc,
1285}; 1387};
1286 1388
1287static struct clk cust_efuse_fck = { 1389static struct clk bandgap_fclk = {
1288 .name = "cust_efuse_fck", 1390 .name = "bandgap_fclk",
1289 .ops = &clkops_omap2_dflt, 1391 .ops = &clkops_omap2_dflt,
1290 .enable_reg = OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL, 1392 .enable_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
1291 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 1393 .enable_bit = OMAP4430_OPTFCLKEN_BGAP_32K_SHIFT,
1292 .clkdm_name = "l4_cefuse_clkdm", 1394 .clkdm_name = "l4_wkup_clkdm",
1293 .parent = &sys_clkin_ck, 1395 .parent = &sys_32k_ck,
1294 .recalc = &followparent_recalc, 1396 .recalc = &followparent_recalc,
1295}; 1397};
1296 1398
@@ -1344,6 +1446,56 @@ static struct clk dmic_fck = {
1344 .clkdm_name = "abe_clkdm", 1446 .clkdm_name = "abe_clkdm",
1345}; 1447};
1346 1448
1449static struct clk dsp_fck = {
1450 .name = "dsp_fck",
1451 .ops = &clkops_omap2_dflt,
1452 .enable_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
1453 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1454 .clkdm_name = "tesla_clkdm",
1455 .parent = &dpll_iva_m4x2_ck,
1456 .recalc = &followparent_recalc,
1457};
1458
1459static struct clk dss_sys_clk = {
1460 .name = "dss_sys_clk",
1461 .ops = &clkops_omap2_dflt,
1462 .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1463 .enable_bit = OMAP4430_OPTFCLKEN_SYS_CLK_SHIFT,
1464 .clkdm_name = "l3_dss_clkdm",
1465 .parent = &syc_clk_div_ck,
1466 .recalc = &followparent_recalc,
1467};
1468
1469static struct clk dss_tv_clk = {
1470 .name = "dss_tv_clk",
1471 .ops = &clkops_omap2_dflt,
1472 .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1473 .enable_bit = OMAP4430_OPTFCLKEN_TV_CLK_SHIFT,
1474 .clkdm_name = "l3_dss_clkdm",
1475 .parent = &extalt_clkin_ck,
1476 .recalc = &followparent_recalc,
1477};
1478
1479static struct clk dss_dss_clk = {
1480 .name = "dss_dss_clk",
1481 .ops = &clkops_omap2_dflt,
1482 .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1483 .enable_bit = OMAP4430_OPTFCLKEN_DSSCLK_SHIFT,
1484 .clkdm_name = "l3_dss_clkdm",
1485 .parent = &dpll_per_m5x2_ck,
1486 .recalc = &followparent_recalc,
1487};
1488
1489static struct clk dss_48mhz_clk = {
1490 .name = "dss_48mhz_clk",
1491 .ops = &clkops_omap2_dflt,
1492 .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1493 .enable_bit = OMAP4430_OPTFCLKEN_48MHZ_CLK_SHIFT,
1494 .clkdm_name = "l3_dss_clkdm",
1495 .parent = &func_48mc_fclk,
1496 .recalc = &followparent_recalc,
1497};
1498
1347static struct clk dss_fck = { 1499static struct clk dss_fck = {
1348 .name = "dss_fck", 1500 .name = "dss_fck",
1349 .ops = &clkops_omap2_dflt, 1501 .ops = &clkops_omap2_dflt,
@@ -1354,18 +1506,18 @@ static struct clk dss_fck = {
1354 .recalc = &followparent_recalc, 1506 .recalc = &followparent_recalc,
1355}; 1507};
1356 1508
1357static struct clk ducati_ick = { 1509static struct clk efuse_ctrl_cust_fck = {
1358 .name = "ducati_ick", 1510 .name = "efuse_ctrl_cust_fck",
1359 .ops = &clkops_omap2_dflt, 1511 .ops = &clkops_omap2_dflt,
1360 .enable_reg = OMAP4430_CM_DUCATI_DUCATI_CLKCTRL, 1512 .enable_reg = OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL,
1361 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 1513 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1362 .clkdm_name = "ducati_clkdm", 1514 .clkdm_name = "l4_cefuse_clkdm",
1363 .parent = &ducati_clk_mux_ck, 1515 .parent = &sys_clkin_ck,
1364 .recalc = &followparent_recalc, 1516 .recalc = &followparent_recalc,
1365}; 1517};
1366 1518
1367static struct clk emif1_ick = { 1519static struct clk emif1_fck = {
1368 .name = "emif1_ick", 1520 .name = "emif1_fck",
1369 .ops = &clkops_omap2_dflt, 1521 .ops = &clkops_omap2_dflt,
1370 .enable_reg = OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL, 1522 .enable_reg = OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL,
1371 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 1523 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
@@ -1375,8 +1527,8 @@ static struct clk emif1_ick = {
1375 .recalc = &followparent_recalc, 1527 .recalc = &followparent_recalc,
1376}; 1528};
1377 1529
1378static struct clk emif2_ick = { 1530static struct clk emif2_fck = {
1379 .name = "emif2_ick", 1531 .name = "emif2_fck",
1380 .ops = &clkops_omap2_dflt, 1532 .ops = &clkops_omap2_dflt,
1381 .enable_reg = OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL, 1533 .enable_reg = OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL,
1382 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 1534 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
@@ -1387,14 +1539,14 @@ static struct clk emif2_ick = {
1387}; 1539};
1388 1540
1389static const struct clksel fdif_fclk_div[] = { 1541static const struct clksel fdif_fclk_div[] = {
1390 { .parent = &dpll_per_m4_ck, .rates = div3_1to4_rates }, 1542 { .parent = &dpll_per_m4x2_ck, .rates = div3_1to4_rates },
1391 { .parent = NULL }, 1543 { .parent = NULL },
1392}; 1544};
1393 1545
1394/* Merged fdif_fclk into fdif */ 1546/* Merged fdif_fclk into fdif */
1395static struct clk fdif_fck = { 1547static struct clk fdif_fck = {
1396 .name = "fdif_fck", 1548 .name = "fdif_fck",
1397 .parent = &dpll_per_m4_ck, 1549 .parent = &dpll_per_m4x2_ck,
1398 .clksel = fdif_fclk_div, 1550 .clksel = fdif_fclk_div,
1399 .clksel_reg = OMAP4430_CM_CAM_FDIF_CLKCTRL, 1551 .clksel_reg = OMAP4430_CM_CAM_FDIF_CLKCTRL,
1400 .clksel_mask = OMAP4430_CLKSEL_FCLK_MASK, 1552 .clksel_mask = OMAP4430_CLKSEL_FCLK_MASK,
@@ -1407,42 +1559,24 @@ static struct clk fdif_fck = {
1407 .clkdm_name = "iss_clkdm", 1559 .clkdm_name = "iss_clkdm",
1408}; 1560};
1409 1561
1410static const struct clksel per_sgx_fclk_div[] = { 1562static struct clk fpka_fck = {
1411 { .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates }, 1563 .name = "fpka_fck",
1412 { .parent = NULL }, 1564 .ops = &clkops_omap2_dflt,
1413}; 1565 .enable_reg = OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL,
1414 1566 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1415static struct clk per_sgx_fclk = { 1567 .clkdm_name = "l4_secure_clkdm",
1416 .name = "per_sgx_fclk", 1568 .parent = &l4_div_ck,
1417 .parent = &dpll_per_m2x2_ck, 1569 .recalc = &followparent_recalc,
1418 .clksel = per_sgx_fclk_div,
1419 .clksel_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1420 .clksel_mask = OMAP4430_CLKSEL_PER_192M_MASK,
1421 .ops = &clkops_null,
1422 .recalc = &omap2_clksel_recalc,
1423 .round_rate = &omap2_clksel_round_rate,
1424 .set_rate = &omap2_clksel_set_rate,
1425};
1426
1427static const struct clksel sgx_clk_mux_sel[] = {
1428 { .parent = &dpll_core_m7_ck, .rates = div_1_0_rates },
1429 { .parent = &per_sgx_fclk, .rates = div_1_1_rates },
1430 { .parent = NULL },
1431}; 1570};
1432 1571
1433/* Merged sgx_clk_mux into gfx */ 1572static struct clk gpio1_dbclk = {
1434static struct clk gfx_fck = { 1573 .name = "gpio1_dbclk",
1435 .name = "gfx_fck",
1436 .parent = &dpll_core_m7_ck,
1437 .clksel = sgx_clk_mux_sel,
1438 .init = &omap2_init_clksel_parent,
1439 .clksel_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1440 .clksel_mask = OMAP4430_CLKSEL_SGX_FCLK_MASK,
1441 .ops = &clkops_omap2_dflt, 1574 .ops = &clkops_omap2_dflt,
1442 .recalc = &omap2_clksel_recalc, 1575 .enable_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
1443 .enable_reg = OMAP4430_CM_GFX_GFX_CLKCTRL, 1576 .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1444 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 1577 .clkdm_name = "l4_wkup_clkdm",
1445 .clkdm_name = "l3_gfx_clkdm", 1578 .parent = &sys_32k_ck,
1579 .recalc = &followparent_recalc,
1446}; 1580};
1447 1581
1448static struct clk gpio1_ick = { 1582static struct clk gpio1_ick = {
@@ -1455,6 +1589,16 @@ static struct clk gpio1_ick = {
1455 .recalc = &followparent_recalc, 1589 .recalc = &followparent_recalc,
1456}; 1590};
1457 1591
1592static struct clk gpio2_dbclk = {
1593 .name = "gpio2_dbclk",
1594 .ops = &clkops_omap2_dflt,
1595 .enable_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
1596 .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1597 .clkdm_name = "l4_per_clkdm",
1598 .parent = &sys_32k_ck,
1599 .recalc = &followparent_recalc,
1600};
1601
1458static struct clk gpio2_ick = { 1602static struct clk gpio2_ick = {
1459 .name = "gpio2_ick", 1603 .name = "gpio2_ick",
1460 .ops = &clkops_omap2_dflt, 1604 .ops = &clkops_omap2_dflt,
@@ -1465,6 +1609,16 @@ static struct clk gpio2_ick = {
1465 .recalc = &followparent_recalc, 1609 .recalc = &followparent_recalc,
1466}; 1610};
1467 1611
1612static struct clk gpio3_dbclk = {
1613 .name = "gpio3_dbclk",
1614 .ops = &clkops_omap2_dflt,
1615 .enable_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
1616 .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1617 .clkdm_name = "l4_per_clkdm",
1618 .parent = &sys_32k_ck,
1619 .recalc = &followparent_recalc,
1620};
1621
1468static struct clk gpio3_ick = { 1622static struct clk gpio3_ick = {
1469 .name = "gpio3_ick", 1623 .name = "gpio3_ick",
1470 .ops = &clkops_omap2_dflt, 1624 .ops = &clkops_omap2_dflt,
@@ -1475,6 +1629,16 @@ static struct clk gpio3_ick = {
1475 .recalc = &followparent_recalc, 1629 .recalc = &followparent_recalc,
1476}; 1630};
1477 1631
1632static struct clk gpio4_dbclk = {
1633 .name = "gpio4_dbclk",
1634 .ops = &clkops_omap2_dflt,
1635 .enable_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
1636 .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1637 .clkdm_name = "l4_per_clkdm",
1638 .parent = &sys_32k_ck,
1639 .recalc = &followparent_recalc,
1640};
1641
1478static struct clk gpio4_ick = { 1642static struct clk gpio4_ick = {
1479 .name = "gpio4_ick", 1643 .name = "gpio4_ick",
1480 .ops = &clkops_omap2_dflt, 1644 .ops = &clkops_omap2_dflt,
@@ -1485,6 +1649,16 @@ static struct clk gpio4_ick = {
1485 .recalc = &followparent_recalc, 1649 .recalc = &followparent_recalc,
1486}; 1650};
1487 1651
1652static struct clk gpio5_dbclk = {
1653 .name = "gpio5_dbclk",
1654 .ops = &clkops_omap2_dflt,
1655 .enable_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
1656 .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1657 .clkdm_name = "l4_per_clkdm",
1658 .parent = &sys_32k_ck,
1659 .recalc = &followparent_recalc,
1660};
1661
1488static struct clk gpio5_ick = { 1662static struct clk gpio5_ick = {
1489 .name = "gpio5_ick", 1663 .name = "gpio5_ick",
1490 .ops = &clkops_omap2_dflt, 1664 .ops = &clkops_omap2_dflt,
@@ -1495,6 +1669,16 @@ static struct clk gpio5_ick = {
1495 .recalc = &followparent_recalc, 1669 .recalc = &followparent_recalc,
1496}; 1670};
1497 1671
1672static struct clk gpio6_dbclk = {
1673 .name = "gpio6_dbclk",
1674 .ops = &clkops_omap2_dflt,
1675 .enable_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
1676 .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1677 .clkdm_name = "l4_per_clkdm",
1678 .parent = &sys_32k_ck,
1679 .recalc = &followparent_recalc,
1680};
1681
1498static struct clk gpio6_ick = { 1682static struct clk gpio6_ick = {
1499 .name = "gpio6_ick", 1683 .name = "gpio6_ick",
1500 .ops = &clkops_omap2_dflt, 1684 .ops = &clkops_omap2_dflt,
@@ -1515,214 +1699,25 @@ static struct clk gpmc_ick = {
1515 .recalc = &followparent_recalc, 1699 .recalc = &followparent_recalc,
1516}; 1700};
1517 1701
1518static const struct clksel dmt1_clk_mux_sel[] = { 1702static const struct clksel sgx_clk_mux_sel[] = {
1519 { .parent = &sys_clkin_ck, .rates = div_1_0_rates }, 1703 { .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates },
1520 { .parent = &sys_32k_ck, .rates = div_1_1_rates }, 1704 { .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates },
1521 { .parent = NULL },
1522};
1523
1524/*
1525 * Merged dmt1_clk_mux into gptimer1
1526 * gptimer1 renamed temporarily into gpt1 to match OMAP3 convention
1527 */
1528static struct clk gpt1_fck = {
1529 .name = "gpt1_fck",
1530 .parent = &sys_clkin_ck,
1531 .clksel = dmt1_clk_mux_sel,
1532 .init = &omap2_init_clksel_parent,
1533 .clksel_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
1534 .clksel_mask = OMAP4430_CLKSEL_MASK,
1535 .ops = &clkops_omap2_dflt,
1536 .recalc = &omap2_clksel_recalc,
1537 .enable_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
1538 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1539 .clkdm_name = "l4_wkup_clkdm",
1540};
1541
1542/*
1543 * Merged cm2_dm10_mux into gptimer10
1544 * gptimer10 renamed temporarily into gpt10 to match OMAP3 convention
1545 */
1546static struct clk gpt10_fck = {
1547 .name = "gpt10_fck",
1548 .parent = &sys_clkin_ck,
1549 .clksel = dmt1_clk_mux_sel,
1550 .init = &omap2_init_clksel_parent,
1551 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
1552 .clksel_mask = OMAP4430_CLKSEL_MASK,
1553 .ops = &clkops_omap2_dflt,
1554 .recalc = &omap2_clksel_recalc,
1555 .enable_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
1556 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1557 .clkdm_name = "l4_per_clkdm",
1558};
1559
1560/*
1561 * Merged cm2_dm11_mux into gptimer11
1562 * gptimer11 renamed temporarily into gpt11 to match OMAP3 convention
1563 */
1564static struct clk gpt11_fck = {
1565 .name = "gpt11_fck",
1566 .parent = &sys_clkin_ck,
1567 .clksel = dmt1_clk_mux_sel,
1568 .init = &omap2_init_clksel_parent,
1569 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
1570 .clksel_mask = OMAP4430_CLKSEL_MASK,
1571 .ops = &clkops_omap2_dflt,
1572 .recalc = &omap2_clksel_recalc,
1573 .enable_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
1574 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1575 .clkdm_name = "l4_per_clkdm",
1576};
1577
1578/*
1579 * Merged cm2_dm2_mux into gptimer2
1580 * gptimer2 renamed temporarily into gpt2 to match OMAP3 convention
1581 */
1582static struct clk gpt2_fck = {
1583 .name = "gpt2_fck",
1584 .parent = &sys_clkin_ck,
1585 .clksel = dmt1_clk_mux_sel,
1586 .init = &omap2_init_clksel_parent,
1587 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
1588 .clksel_mask = OMAP4430_CLKSEL_MASK,
1589 .ops = &clkops_omap2_dflt,
1590 .recalc = &omap2_clksel_recalc,
1591 .enable_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
1592 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1593 .clkdm_name = "l4_per_clkdm",
1594};
1595
1596/*
1597 * Merged cm2_dm3_mux into gptimer3
1598 * gptimer3 renamed temporarily into gpt3 to match OMAP3 convention
1599 */
1600static struct clk gpt3_fck = {
1601 .name = "gpt3_fck",
1602 .parent = &sys_clkin_ck,
1603 .clksel = dmt1_clk_mux_sel,
1604 .init = &omap2_init_clksel_parent,
1605 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
1606 .clksel_mask = OMAP4430_CLKSEL_MASK,
1607 .ops = &clkops_omap2_dflt,
1608 .recalc = &omap2_clksel_recalc,
1609 .enable_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
1610 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1611 .clkdm_name = "l4_per_clkdm",
1612};
1613
1614/*
1615 * Merged cm2_dm4_mux into gptimer4
1616 * gptimer4 renamed temporarily into gpt4 to match OMAP3 convention
1617 */
1618static struct clk gpt4_fck = {
1619 .name = "gpt4_fck",
1620 .parent = &sys_clkin_ck,
1621 .clksel = dmt1_clk_mux_sel,
1622 .init = &omap2_init_clksel_parent,
1623 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
1624 .clksel_mask = OMAP4430_CLKSEL_MASK,
1625 .ops = &clkops_omap2_dflt,
1626 .recalc = &omap2_clksel_recalc,
1627 .enable_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
1628 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1629 .clkdm_name = "l4_per_clkdm",
1630};
1631
1632static const struct clksel timer5_sync_mux_sel[] = {
1633 { .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
1634 { .parent = &sys_32k_ck, .rates = div_1_1_rates },
1635 { .parent = NULL }, 1705 { .parent = NULL },
1636}; 1706};
1637 1707
1638/* 1708/* Merged sgx_clk_mux into gpu */
1639 * Merged timer5_sync_mux into gptimer5 1709static struct clk gpu_fck = {
1640 * gptimer5 renamed temporarily into gpt5 to match OMAP3 convention 1710 .name = "gpu_fck",
1641 */ 1711 .parent = &dpll_core_m7x2_ck,
1642static struct clk gpt5_fck = { 1712 .clksel = sgx_clk_mux_sel,
1643 .name = "gpt5_fck",
1644 .parent = &syc_clk_div_ck,
1645 .clksel = timer5_sync_mux_sel,
1646 .init = &omap2_init_clksel_parent,
1647 .clksel_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
1648 .clksel_mask = OMAP4430_CLKSEL_MASK,
1649 .ops = &clkops_omap2_dflt,
1650 .recalc = &omap2_clksel_recalc,
1651 .enable_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
1652 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1653 .clkdm_name = "abe_clkdm",
1654};
1655
1656/*
1657 * Merged timer6_sync_mux into gptimer6
1658 * gptimer6 renamed temporarily into gpt6 to match OMAP3 convention
1659 */
1660static struct clk gpt6_fck = {
1661 .name = "gpt6_fck",
1662 .parent = &syc_clk_div_ck,
1663 .clksel = timer5_sync_mux_sel,
1664 .init = &omap2_init_clksel_parent,
1665 .clksel_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
1666 .clksel_mask = OMAP4430_CLKSEL_MASK,
1667 .ops = &clkops_omap2_dflt,
1668 .recalc = &omap2_clksel_recalc,
1669 .enable_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
1670 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1671 .clkdm_name = "abe_clkdm",
1672};
1673
1674/*
1675 * Merged timer7_sync_mux into gptimer7
1676 * gptimer7 renamed temporarily into gpt7 to match OMAP3 convention
1677 */
1678static struct clk gpt7_fck = {
1679 .name = "gpt7_fck",
1680 .parent = &syc_clk_div_ck,
1681 .clksel = timer5_sync_mux_sel,
1682 .init = &omap2_init_clksel_parent,
1683 .clksel_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
1684 .clksel_mask = OMAP4430_CLKSEL_MASK,
1685 .ops = &clkops_omap2_dflt,
1686 .recalc = &omap2_clksel_recalc,
1687 .enable_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
1688 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1689 .clkdm_name = "abe_clkdm",
1690};
1691
1692/*
1693 * Merged timer8_sync_mux into gptimer8
1694 * gptimer8 renamed temporarily into gpt8 to match OMAP3 convention
1695 */
1696static struct clk gpt8_fck = {
1697 .name = "gpt8_fck",
1698 .parent = &syc_clk_div_ck,
1699 .clksel = timer5_sync_mux_sel,
1700 .init = &omap2_init_clksel_parent,
1701 .clksel_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
1702 .clksel_mask = OMAP4430_CLKSEL_MASK,
1703 .ops = &clkops_omap2_dflt,
1704 .recalc = &omap2_clksel_recalc,
1705 .enable_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
1706 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1707 .clkdm_name = "abe_clkdm",
1708};
1709
1710/*
1711 * Merged cm2_dm9_mux into gptimer9
1712 * gptimer9 renamed temporarily into gpt9 to match OMAP3 convention
1713 */
1714static struct clk gpt9_fck = {
1715 .name = "gpt9_fck",
1716 .parent = &sys_clkin_ck,
1717 .clksel = dmt1_clk_mux_sel,
1718 .init = &omap2_init_clksel_parent, 1713 .init = &omap2_init_clksel_parent,
1719 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL, 1714 .clksel_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1720 .clksel_mask = OMAP4430_CLKSEL_MASK, 1715 .clksel_mask = OMAP4430_CLKSEL_SGX_FCLK_MASK,
1721 .ops = &clkops_omap2_dflt, 1716 .ops = &clkops_omap2_dflt,
1722 .recalc = &omap2_clksel_recalc, 1717 .recalc = &omap2_clksel_recalc,
1723 .enable_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL, 1718 .enable_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1724 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 1719 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1725 .clkdm_name = "l4_per_clkdm", 1720 .clkdm_name = "l3_gfx_clkdm",
1726}; 1721};
1727 1722
1728static struct clk hdq1w_fck = { 1723static struct clk hdq1w_fck = {
@@ -1735,11 +1730,16 @@ static struct clk hdq1w_fck = {
1735 .recalc = &followparent_recalc, 1730 .recalc = &followparent_recalc,
1736}; 1731};
1737 1732
1733static const struct clksel hsi_fclk_div[] = {
1734 { .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
1735 { .parent = NULL },
1736};
1737
1738/* Merged hsi_fclk into hsi */ 1738/* Merged hsi_fclk into hsi */
1739static struct clk hsi_ick = { 1739static struct clk hsi_fck = {
1740 .name = "hsi_ick", 1740 .name = "hsi_fck",
1741 .parent = &dpll_per_m2x2_ck, 1741 .parent = &dpll_per_m2x2_ck,
1742 .clksel = per_sgx_fclk_div, 1742 .clksel = hsi_fclk_div,
1743 .clksel_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL, 1743 .clksel_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
1744 .clksel_mask = OMAP4430_CLKSEL_24_25_MASK, 1744 .clksel_mask = OMAP4430_CLKSEL_24_25_MASK,
1745 .ops = &clkops_omap2_dflt, 1745 .ops = &clkops_omap2_dflt,
@@ -1791,6 +1791,26 @@ static struct clk i2c4_fck = {
1791 .recalc = &followparent_recalc, 1791 .recalc = &followparent_recalc,
1792}; 1792};
1793 1793
1794static struct clk ipu_fck = {
1795 .name = "ipu_fck",
1796 .ops = &clkops_omap2_dflt,
1797 .enable_reg = OMAP4430_CM_DUCATI_DUCATI_CLKCTRL,
1798 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1799 .clkdm_name = "ducati_clkdm",
1800 .parent = &ducati_clk_mux_ck,
1801 .recalc = &followparent_recalc,
1802};
1803
1804static struct clk iss_ctrlclk = {
1805 .name = "iss_ctrlclk",
1806 .ops = &clkops_omap2_dflt,
1807 .enable_reg = OMAP4430_CM_CAM_ISS_CLKCTRL,
1808 .enable_bit = OMAP4430_OPTFCLKEN_CTRLCLK_SHIFT,
1809 .clkdm_name = "iss_clkdm",
1810 .parent = &func_96m_fclk,
1811 .recalc = &followparent_recalc,
1812};
1813
1794static struct clk iss_fck = { 1814static struct clk iss_fck = {
1795 .name = "iss_fck", 1815 .name = "iss_fck",
1796 .ops = &clkops_omap2_dflt, 1816 .ops = &clkops_omap2_dflt,
@@ -1801,18 +1821,18 @@ static struct clk iss_fck = {
1801 .recalc = &followparent_recalc, 1821 .recalc = &followparent_recalc,
1802}; 1822};
1803 1823
1804static struct clk ivahd_ick = { 1824static struct clk iva_fck = {
1805 .name = "ivahd_ick", 1825 .name = "iva_fck",
1806 .ops = &clkops_omap2_dflt, 1826 .ops = &clkops_omap2_dflt,
1807 .enable_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL, 1827 .enable_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
1808 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 1828 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1809 .clkdm_name = "ivahd_clkdm", 1829 .clkdm_name = "ivahd_clkdm",
1810 .parent = &dpll_iva_m5_ck, 1830 .parent = &dpll_iva_m5x2_ck,
1811 .recalc = &followparent_recalc, 1831 .recalc = &followparent_recalc,
1812}; 1832};
1813 1833
1814static struct clk keyboard_fck = { 1834static struct clk kbd_fck = {
1815 .name = "keyboard_fck", 1835 .name = "kbd_fck",
1816 .ops = &clkops_omap2_dflt, 1836 .ops = &clkops_omap2_dflt,
1817 .enable_reg = OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL, 1837 .enable_reg = OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL,
1818 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 1838 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
@@ -1821,22 +1841,24 @@ static struct clk keyboard_fck = {
1821 .recalc = &followparent_recalc, 1841 .recalc = &followparent_recalc,
1822}; 1842};
1823 1843
1824static struct clk l3_instr_interconnect_ick = { 1844static struct clk l3_instr_ick = {
1825 .name = "l3_instr_interconnect_ick", 1845 .name = "l3_instr_ick",
1826 .ops = &clkops_omap2_dflt, 1846 .ops = &clkops_omap2_dflt,
1827 .enable_reg = OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL, 1847 .enable_reg = OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL,
1828 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 1848 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1829 .clkdm_name = "l3_instr_clkdm", 1849 .clkdm_name = "l3_instr_clkdm",
1850 .flags = ENABLE_ON_INIT,
1830 .parent = &l3_div_ck, 1851 .parent = &l3_div_ck,
1831 .recalc = &followparent_recalc, 1852 .recalc = &followparent_recalc,
1832}; 1853};
1833 1854
1834static struct clk l3_interconnect_3_ick = { 1855static struct clk l3_main_3_ick = {
1835 .name = "l3_interconnect_3_ick", 1856 .name = "l3_main_3_ick",
1836 .ops = &clkops_omap2_dflt, 1857 .ops = &clkops_omap2_dflt,
1837 .enable_reg = OMAP4430_CM_L3INSTR_L3_3_CLKCTRL, 1858 .enable_reg = OMAP4430_CM_L3INSTR_L3_3_CLKCTRL,
1838 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 1859 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1839 .clkdm_name = "l3_instr_clkdm", 1860 .clkdm_name = "l3_instr_clkdm",
1861 .flags = ENABLE_ON_INIT,
1840 .parent = &l3_div_ck, 1862 .parent = &l3_div_ck,
1841 .recalc = &followparent_recalc, 1863 .recalc = &followparent_recalc,
1842}; 1864};
@@ -2005,6 +2027,16 @@ static struct clk mcbsp4_fck = {
2005 .clkdm_name = "l4_per_clkdm", 2027 .clkdm_name = "l4_per_clkdm",
2006}; 2028};
2007 2029
2030static struct clk mcpdm_fck = {
2031 .name = "mcpdm_fck",
2032 .ops = &clkops_omap2_dflt,
2033 .enable_reg = OMAP4430_CM1_ABE_PDM_CLKCTRL,
2034 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2035 .clkdm_name = "abe_clkdm",
2036 .parent = &pad_clks_ck,
2037 .recalc = &followparent_recalc,
2038};
2039
2008static struct clk mcspi1_fck = { 2040static struct clk mcspi1_fck = {
2009 .name = "mcspi1_fck", 2041 .name = "mcspi1_fck",
2010 .ops = &clkops_omap2_dflt, 2042 .ops = &clkops_omap2_dflt,
@@ -2105,33 +2137,34 @@ static struct clk mmc5_fck = {
2105 .recalc = &followparent_recalc, 2137 .recalc = &followparent_recalc,
2106}; 2138};
2107 2139
2108static struct clk ocp_wp1_ick = { 2140static struct clk ocp2scp_usb_phy_phy_48m = {
2109 .name = "ocp_wp1_ick", 2141 .name = "ocp2scp_usb_phy_phy_48m",
2110 .ops = &clkops_omap2_dflt, 2142 .ops = &clkops_omap2_dflt,
2111 .enable_reg = OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL, 2143 .enable_reg = OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL,
2112 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 2144 .enable_bit = OMAP4430_OPTFCLKEN_PHY_48M_SHIFT,
2113 .clkdm_name = "l3_instr_clkdm", 2145 .clkdm_name = "l3_init_clkdm",
2114 .parent = &l3_div_ck, 2146 .parent = &func_48m_fclk,
2115 .recalc = &followparent_recalc, 2147 .recalc = &followparent_recalc,
2116}; 2148};
2117 2149
2118static struct clk pdm_fck = { 2150static struct clk ocp2scp_usb_phy_ick = {
2119 .name = "pdm_fck", 2151 .name = "ocp2scp_usb_phy_ick",
2120 .ops = &clkops_omap2_dflt, 2152 .ops = &clkops_omap2_dflt,
2121 .enable_reg = OMAP4430_CM1_ABE_PDM_CLKCTRL, 2153 .enable_reg = OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL,
2122 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2154 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2123 .clkdm_name = "abe_clkdm", 2155 .clkdm_name = "l3_init_clkdm",
2124 .parent = &pad_clks_ck, 2156 .parent = &l4_div_ck,
2125 .recalc = &followparent_recalc, 2157 .recalc = &followparent_recalc,
2126}; 2158};
2127 2159
2128static struct clk pkaeip29_fck = { 2160static struct clk ocp_wp_noc_ick = {
2129 .name = "pkaeip29_fck", 2161 .name = "ocp_wp_noc_ick",
2130 .ops = &clkops_omap2_dflt, 2162 .ops = &clkops_omap2_dflt,
2131 .enable_reg = OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL, 2163 .enable_reg = OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL,
2132 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2164 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2133 .clkdm_name = "l4_secure_clkdm", 2165 .clkdm_name = "l3_instr_clkdm",
2134 .parent = &l4_div_ck, 2166 .flags = ENABLE_ON_INIT,
2167 .parent = &l3_div_ck,
2135 .recalc = &followparent_recalc, 2168 .recalc = &followparent_recalc,
2136}; 2169};
2137 2170
@@ -2145,8 +2178,8 @@ static struct clk rng_ick = {
2145 .recalc = &followparent_recalc, 2178 .recalc = &followparent_recalc,
2146}; 2179};
2147 2180
2148static struct clk sha2md51_fck = { 2181static struct clk sha2md5_fck = {
2149 .name = "sha2md51_fck", 2182 .name = "sha2md5_fck",
2150 .ops = &clkops_omap2_dflt, 2183 .ops = &clkops_omap2_dflt,
2151 .enable_reg = OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL, 2184 .enable_reg = OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL,
2152 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2185 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
@@ -2155,13 +2188,53 @@ static struct clk sha2md51_fck = {
2155 .recalc = &followparent_recalc, 2188 .recalc = &followparent_recalc,
2156}; 2189};
2157 2190
2158static struct clk sl2_ick = { 2191static struct clk sl2if_ick = {
2159 .name = "sl2_ick", 2192 .name = "sl2if_ick",
2160 .ops = &clkops_omap2_dflt, 2193 .ops = &clkops_omap2_dflt,
2161 .enable_reg = OMAP4430_CM_IVAHD_SL2_CLKCTRL, 2194 .enable_reg = OMAP4430_CM_IVAHD_SL2_CLKCTRL,
2162 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 2195 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2163 .clkdm_name = "ivahd_clkdm", 2196 .clkdm_name = "ivahd_clkdm",
2164 .parent = &dpll_iva_m5_ck, 2197 .parent = &dpll_iva_m5x2_ck,
2198 .recalc = &followparent_recalc,
2199};
2200
2201static struct clk slimbus1_fclk_1 = {
2202 .name = "slimbus1_fclk_1",
2203 .ops = &clkops_omap2_dflt,
2204 .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2205 .enable_bit = OMAP4430_OPTFCLKEN_FCLK1_SHIFT,
2206 .clkdm_name = "abe_clkdm",
2207 .parent = &func_24m_clk,
2208 .recalc = &followparent_recalc,
2209};
2210
2211static struct clk slimbus1_fclk_0 = {
2212 .name = "slimbus1_fclk_0",
2213 .ops = &clkops_omap2_dflt,
2214 .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2215 .enable_bit = OMAP4430_OPTFCLKEN_FCLK0_SHIFT,
2216 .clkdm_name = "abe_clkdm",
2217 .parent = &abe_24m_fclk,
2218 .recalc = &followparent_recalc,
2219};
2220
2221static struct clk slimbus1_fclk_2 = {
2222 .name = "slimbus1_fclk_2",
2223 .ops = &clkops_omap2_dflt,
2224 .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2225 .enable_bit = OMAP4430_OPTFCLKEN_FCLK2_SHIFT,
2226 .clkdm_name = "abe_clkdm",
2227 .parent = &pad_clks_ck,
2228 .recalc = &followparent_recalc,
2229};
2230
2231static struct clk slimbus1_slimbus_clk = {
2232 .name = "slimbus1_slimbus_clk",
2233 .ops = &clkops_omap2_dflt,
2234 .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2235 .enable_bit = OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_SHIFT,
2236 .clkdm_name = "abe_clkdm",
2237 .parent = &slimbus_clk,
2165 .recalc = &followparent_recalc, 2238 .recalc = &followparent_recalc,
2166}; 2239};
2167 2240
@@ -2175,6 +2248,36 @@ static struct clk slimbus1_fck = {
2175 .recalc = &followparent_recalc, 2248 .recalc = &followparent_recalc,
2176}; 2249};
2177 2250
2251static struct clk slimbus2_fclk_1 = {
2252 .name = "slimbus2_fclk_1",
2253 .ops = &clkops_omap2_dflt,
2254 .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2255 .enable_bit = OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_SHIFT,
2256 .clkdm_name = "l4_per_clkdm",
2257 .parent = &per_abe_24m_fclk,
2258 .recalc = &followparent_recalc,
2259};
2260
2261static struct clk slimbus2_fclk_0 = {
2262 .name = "slimbus2_fclk_0",
2263 .ops = &clkops_omap2_dflt,
2264 .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2265 .enable_bit = OMAP4430_OPTFCLKEN_PER24MC_GFCLK_SHIFT,
2266 .clkdm_name = "l4_per_clkdm",
2267 .parent = &func_24mc_fclk,
2268 .recalc = &followparent_recalc,
2269};
2270
2271static struct clk slimbus2_slimbus_clk = {
2272 .name = "slimbus2_slimbus_clk",
2273 .ops = &clkops_omap2_dflt,
2274 .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2275 .enable_bit = OMAP4430_OPTFCLKEN_SLIMBUS_CLK_SHIFT,
2276 .clkdm_name = "l4_per_clkdm",
2277 .parent = &pad_slimbus_core_clks_ck,
2278 .recalc = &followparent_recalc,
2279};
2280
2178static struct clk slimbus2_fck = { 2281static struct clk slimbus2_fck = {
2179 .name = "slimbus2_fck", 2282 .name = "slimbus2_fck",
2180 .ops = &clkops_omap2_dflt, 2283 .ops = &clkops_omap2_dflt,
@@ -2185,8 +2288,8 @@ static struct clk slimbus2_fck = {
2185 .recalc = &followparent_recalc, 2288 .recalc = &followparent_recalc,
2186}; 2289};
2187 2290
2188static struct clk sr_core_fck = { 2291static struct clk smartreflex_core_fck = {
2189 .name = "sr_core_fck", 2292 .name = "smartreflex_core_fck",
2190 .ops = &clkops_omap2_dflt, 2293 .ops = &clkops_omap2_dflt,
2191 .enable_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL, 2294 .enable_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
2192 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2295 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
@@ -2195,8 +2298,8 @@ static struct clk sr_core_fck = {
2195 .recalc = &followparent_recalc, 2298 .recalc = &followparent_recalc,
2196}; 2299};
2197 2300
2198static struct clk sr_iva_fck = { 2301static struct clk smartreflex_iva_fck = {
2199 .name = "sr_iva_fck", 2302 .name = "smartreflex_iva_fck",
2200 .ops = &clkops_omap2_dflt, 2303 .ops = &clkops_omap2_dflt,
2201 .enable_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL, 2304 .enable_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
2202 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2305 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
@@ -2205,8 +2308,8 @@ static struct clk sr_iva_fck = {
2205 .recalc = &followparent_recalc, 2308 .recalc = &followparent_recalc,
2206}; 2309};
2207 2310
2208static struct clk sr_mpu_fck = { 2311static struct clk smartreflex_mpu_fck = {
2209 .name = "sr_mpu_fck", 2312 .name = "smartreflex_mpu_fck",
2210 .ops = &clkops_omap2_dflt, 2313 .ops = &clkops_omap2_dflt,
2211 .enable_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL, 2314 .enable_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
2212 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2315 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
@@ -2215,14 +2318,175 @@ static struct clk sr_mpu_fck = {
2215 .recalc = &followparent_recalc, 2318 .recalc = &followparent_recalc,
2216}; 2319};
2217 2320
2218static struct clk tesla_ick = { 2321/* Merged dmt1_clk_mux into timer1 */
2219 .name = "tesla_ick", 2322static struct clk timer1_fck = {
2323 .name = "timer1_fck",
2324 .parent = &sys_clkin_ck,
2325 .clksel = abe_dpll_bypass_clk_mux_sel,
2326 .init = &omap2_init_clksel_parent,
2327 .clksel_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
2328 .clksel_mask = OMAP4430_CLKSEL_MASK,
2220 .ops = &clkops_omap2_dflt, 2329 .ops = &clkops_omap2_dflt,
2221 .enable_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL, 2330 .recalc = &omap2_clksel_recalc,
2222 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 2331 .enable_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
2223 .clkdm_name = "tesla_clkdm", 2332 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2224 .parent = &dpll_iva_m4_ck, 2333 .clkdm_name = "l4_wkup_clkdm",
2225 .recalc = &followparent_recalc, 2334};
2335
2336/* Merged cm2_dm10_mux into timer10 */
2337static struct clk timer10_fck = {
2338 .name = "timer10_fck",
2339 .parent = &sys_clkin_ck,
2340 .clksel = abe_dpll_bypass_clk_mux_sel,
2341 .init = &omap2_init_clksel_parent,
2342 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
2343 .clksel_mask = OMAP4430_CLKSEL_MASK,
2344 .ops = &clkops_omap2_dflt,
2345 .recalc = &omap2_clksel_recalc,
2346 .enable_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
2347 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2348 .clkdm_name = "l4_per_clkdm",
2349};
2350
2351/* Merged cm2_dm11_mux into timer11 */
2352static struct clk timer11_fck = {
2353 .name = "timer11_fck",
2354 .parent = &sys_clkin_ck,
2355 .clksel = abe_dpll_bypass_clk_mux_sel,
2356 .init = &omap2_init_clksel_parent,
2357 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
2358 .clksel_mask = OMAP4430_CLKSEL_MASK,
2359 .ops = &clkops_omap2_dflt,
2360 .recalc = &omap2_clksel_recalc,
2361 .enable_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
2362 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2363 .clkdm_name = "l4_per_clkdm",
2364};
2365
2366/* Merged cm2_dm2_mux into timer2 */
2367static struct clk timer2_fck = {
2368 .name = "timer2_fck",
2369 .parent = &sys_clkin_ck,
2370 .clksel = abe_dpll_bypass_clk_mux_sel,
2371 .init = &omap2_init_clksel_parent,
2372 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
2373 .clksel_mask = OMAP4430_CLKSEL_MASK,
2374 .ops = &clkops_omap2_dflt,
2375 .recalc = &omap2_clksel_recalc,
2376 .enable_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
2377 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2378 .clkdm_name = "l4_per_clkdm",
2379};
2380
2381/* Merged cm2_dm3_mux into timer3 */
2382static struct clk timer3_fck = {
2383 .name = "timer3_fck",
2384 .parent = &sys_clkin_ck,
2385 .clksel = abe_dpll_bypass_clk_mux_sel,
2386 .init = &omap2_init_clksel_parent,
2387 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
2388 .clksel_mask = OMAP4430_CLKSEL_MASK,
2389 .ops = &clkops_omap2_dflt,
2390 .recalc = &omap2_clksel_recalc,
2391 .enable_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
2392 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2393 .clkdm_name = "l4_per_clkdm",
2394};
2395
2396/* Merged cm2_dm4_mux into timer4 */
2397static struct clk timer4_fck = {
2398 .name = "timer4_fck",
2399 .parent = &sys_clkin_ck,
2400 .clksel = abe_dpll_bypass_clk_mux_sel,
2401 .init = &omap2_init_clksel_parent,
2402 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
2403 .clksel_mask = OMAP4430_CLKSEL_MASK,
2404 .ops = &clkops_omap2_dflt,
2405 .recalc = &omap2_clksel_recalc,
2406 .enable_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
2407 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2408 .clkdm_name = "l4_per_clkdm",
2409};
2410
2411static const struct clksel timer5_sync_mux_sel[] = {
2412 { .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
2413 { .parent = &sys_32k_ck, .rates = div_1_1_rates },
2414 { .parent = NULL },
2415};
2416
2417/* Merged timer5_sync_mux into timer5 */
2418static struct clk timer5_fck = {
2419 .name = "timer5_fck",
2420 .parent = &syc_clk_div_ck,
2421 .clksel = timer5_sync_mux_sel,
2422 .init = &omap2_init_clksel_parent,
2423 .clksel_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
2424 .clksel_mask = OMAP4430_CLKSEL_MASK,
2425 .ops = &clkops_omap2_dflt,
2426 .recalc = &omap2_clksel_recalc,
2427 .enable_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
2428 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2429 .clkdm_name = "abe_clkdm",
2430};
2431
2432/* Merged timer6_sync_mux into timer6 */
2433static struct clk timer6_fck = {
2434 .name = "timer6_fck",
2435 .parent = &syc_clk_div_ck,
2436 .clksel = timer5_sync_mux_sel,
2437 .init = &omap2_init_clksel_parent,
2438 .clksel_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
2439 .clksel_mask = OMAP4430_CLKSEL_MASK,
2440 .ops = &clkops_omap2_dflt,
2441 .recalc = &omap2_clksel_recalc,
2442 .enable_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
2443 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2444 .clkdm_name = "abe_clkdm",
2445};
2446
2447/* Merged timer7_sync_mux into timer7 */
2448static struct clk timer7_fck = {
2449 .name = "timer7_fck",
2450 .parent = &syc_clk_div_ck,
2451 .clksel = timer5_sync_mux_sel,
2452 .init = &omap2_init_clksel_parent,
2453 .clksel_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
2454 .clksel_mask = OMAP4430_CLKSEL_MASK,
2455 .ops = &clkops_omap2_dflt,
2456 .recalc = &omap2_clksel_recalc,
2457 .enable_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
2458 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2459 .clkdm_name = "abe_clkdm",
2460};
2461
2462/* Merged timer8_sync_mux into timer8 */
2463static struct clk timer8_fck = {
2464 .name = "timer8_fck",
2465 .parent = &syc_clk_div_ck,
2466 .clksel = timer5_sync_mux_sel,
2467 .init = &omap2_init_clksel_parent,
2468 .clksel_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
2469 .clksel_mask = OMAP4430_CLKSEL_MASK,
2470 .ops = &clkops_omap2_dflt,
2471 .recalc = &omap2_clksel_recalc,
2472 .enable_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
2473 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2474 .clkdm_name = "abe_clkdm",
2475};
2476
2477/* Merged cm2_dm9_mux into timer9 */
2478static struct clk timer9_fck = {
2479 .name = "timer9_fck",
2480 .parent = &sys_clkin_ck,
2481 .clksel = abe_dpll_bypass_clk_mux_sel,
2482 .init = &omap2_init_clksel_parent,
2483 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
2484 .clksel_mask = OMAP4430_CLKSEL_MASK,
2485 .ops = &clkops_omap2_dflt,
2486 .recalc = &omap2_clksel_recalc,
2487 .enable_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
2488 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2489 .clkdm_name = "l4_per_clkdm",
2226}; 2490};
2227 2491
2228static struct clk uart1_fck = { 2492static struct clk uart1_fck = {
@@ -2265,38 +2529,169 @@ static struct clk uart4_fck = {
2265 .recalc = &followparent_recalc, 2529 .recalc = &followparent_recalc,
2266}; 2530};
2267 2531
2268static struct clk unipro1_fck = { 2532static struct clk usb_host_fs_fck = {
2269 .name = "unipro1_fck", 2533 .name = "usb_host_fs_fck",
2270 .ops = &clkops_omap2_dflt, 2534 .ops = &clkops_omap2_dflt,
2271 .enable_reg = OMAP4430_CM_L3INIT_UNIPRO1_CLKCTRL, 2535 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL,
2272 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2536 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2273 .clkdm_name = "l3_init_clkdm", 2537 .clkdm_name = "l3_init_clkdm",
2274 .parent = &func_96m_fclk, 2538 .parent = &func_48mc_fclk,
2539 .recalc = &followparent_recalc,
2540};
2541
2542static const struct clksel utmi_p1_gfclk_sel[] = {
2543 { .parent = &init_60m_fclk, .rates = div_1_0_rates },
2544 { .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
2545 { .parent = NULL },
2546};
2547
2548static struct clk utmi_p1_gfclk = {
2549 .name = "utmi_p1_gfclk",
2550 .parent = &init_60m_fclk,
2551 .clksel = utmi_p1_gfclk_sel,
2552 .init = &omap2_init_clksel_parent,
2553 .clksel_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2554 .clksel_mask = OMAP4430_CLKSEL_UTMI_P1_MASK,
2555 .ops = &clkops_null,
2556 .recalc = &omap2_clksel_recalc,
2557};
2558
2559static struct clk usb_host_hs_utmi_p1_clk = {
2560 .name = "usb_host_hs_utmi_p1_clk",
2561 .ops = &clkops_omap2_dflt,
2562 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2563 .enable_bit = OMAP4430_OPTFCLKEN_UTMI_P1_CLK_SHIFT,
2564 .clkdm_name = "l3_init_clkdm",
2565 .parent = &utmi_p1_gfclk,
2275 .recalc = &followparent_recalc, 2566 .recalc = &followparent_recalc,
2276}; 2567};
2277 2568
2278static struct clk usb_host_fck = { 2569static const struct clksel utmi_p2_gfclk_sel[] = {
2279 .name = "usb_host_fck", 2570 { .parent = &init_60m_fclk, .rates = div_1_0_rates },
2571 { .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
2572 { .parent = NULL },
2573};
2574
2575static struct clk utmi_p2_gfclk = {
2576 .name = "utmi_p2_gfclk",
2577 .parent = &init_60m_fclk,
2578 .clksel = utmi_p2_gfclk_sel,
2579 .init = &omap2_init_clksel_parent,
2580 .clksel_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2581 .clksel_mask = OMAP4430_CLKSEL_UTMI_P2_MASK,
2582 .ops = &clkops_null,
2583 .recalc = &omap2_clksel_recalc,
2584};
2585
2586static struct clk usb_host_hs_utmi_p2_clk = {
2587 .name = "usb_host_hs_utmi_p2_clk",
2280 .ops = &clkops_omap2_dflt, 2588 .ops = &clkops_omap2_dflt,
2281 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL, 2589 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2282 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2590 .enable_bit = OMAP4430_OPTFCLKEN_UTMI_P2_CLK_SHIFT,
2591 .clkdm_name = "l3_init_clkdm",
2592 .parent = &utmi_p2_gfclk,
2593 .recalc = &followparent_recalc,
2594};
2595
2596static struct clk usb_host_hs_utmi_p3_clk = {
2597 .name = "usb_host_hs_utmi_p3_clk",
2598 .ops = &clkops_omap2_dflt,
2599 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2600 .enable_bit = OMAP4430_OPTFCLKEN_UTMI_P3_CLK_SHIFT,
2283 .clkdm_name = "l3_init_clkdm", 2601 .clkdm_name = "l3_init_clkdm",
2284 .parent = &init_60m_fclk, 2602 .parent = &init_60m_fclk,
2285 .recalc = &followparent_recalc, 2603 .recalc = &followparent_recalc,
2286}; 2604};
2287 2605
2288static struct clk usb_host_fs_fck = { 2606static struct clk usb_host_hs_hsic480m_p1_clk = {
2289 .name = "usb_host_fs_fck", 2607 .name = "usb_host_hs_hsic480m_p1_clk",
2290 .ops = &clkops_omap2_dflt, 2608 .ops = &clkops_omap2_dflt,
2291 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL, 2609 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2292 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2610 .enable_bit = OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_SHIFT,
2611 .clkdm_name = "l3_init_clkdm",
2612 .parent = &dpll_usb_m2_ck,
2613 .recalc = &followparent_recalc,
2614};
2615
2616static struct clk usb_host_hs_hsic60m_p1_clk = {
2617 .name = "usb_host_hs_hsic60m_p1_clk",
2618 .ops = &clkops_omap2_dflt,
2619 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2620 .enable_bit = OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_SHIFT,
2621 .clkdm_name = "l3_init_clkdm",
2622 .parent = &init_60m_fclk,
2623 .recalc = &followparent_recalc,
2624};
2625
2626static struct clk usb_host_hs_hsic60m_p2_clk = {
2627 .name = "usb_host_hs_hsic60m_p2_clk",
2628 .ops = &clkops_omap2_dflt,
2629 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2630 .enable_bit = OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_SHIFT,
2631 .clkdm_name = "l3_init_clkdm",
2632 .parent = &init_60m_fclk,
2633 .recalc = &followparent_recalc,
2634};
2635
2636static struct clk usb_host_hs_hsic480m_p2_clk = {
2637 .name = "usb_host_hs_hsic480m_p2_clk",
2638 .ops = &clkops_omap2_dflt,
2639 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2640 .enable_bit = OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_SHIFT,
2641 .clkdm_name = "l3_init_clkdm",
2642 .parent = &dpll_usb_m2_ck,
2643 .recalc = &followparent_recalc,
2644};
2645
2646static struct clk usb_host_hs_func48mclk = {
2647 .name = "usb_host_hs_func48mclk",
2648 .ops = &clkops_omap2_dflt,
2649 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2650 .enable_bit = OMAP4430_OPTFCLKEN_FUNC48MCLK_SHIFT,
2293 .clkdm_name = "l3_init_clkdm", 2651 .clkdm_name = "l3_init_clkdm",
2294 .parent = &func_48mc_fclk, 2652 .parent = &func_48mc_fclk,
2295 .recalc = &followparent_recalc, 2653 .recalc = &followparent_recalc,
2296}; 2654};
2297 2655
2298static struct clk usb_otg_ick = { 2656static struct clk usb_host_hs_fck = {
2299 .name = "usb_otg_ick", 2657 .name = "usb_host_hs_fck",
2658 .ops = &clkops_omap2_dflt,
2659 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2660 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2661 .clkdm_name = "l3_init_clkdm",
2662 .parent = &init_60m_fclk,
2663 .recalc = &followparent_recalc,
2664};
2665
2666static const struct clksel otg_60m_gfclk_sel[] = {
2667 { .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
2668 { .parent = &xclk60motg_ck, .rates = div_1_1_rates },
2669 { .parent = NULL },
2670};
2671
2672static struct clk otg_60m_gfclk = {
2673 .name = "otg_60m_gfclk",
2674 .parent = &utmi_phy_clkout_ck,
2675 .clksel = otg_60m_gfclk_sel,
2676 .init = &omap2_init_clksel_parent,
2677 .clksel_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2678 .clksel_mask = OMAP4430_CLKSEL_60M_MASK,
2679 .ops = &clkops_null,
2680 .recalc = &omap2_clksel_recalc,
2681};
2682
2683static struct clk usb_otg_hs_xclk = {
2684 .name = "usb_otg_hs_xclk",
2685 .ops = &clkops_omap2_dflt,
2686 .enable_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2687 .enable_bit = OMAP4430_OPTFCLKEN_XCLK_SHIFT,
2688 .clkdm_name = "l3_init_clkdm",
2689 .parent = &otg_60m_gfclk,
2690 .recalc = &followparent_recalc,
2691};
2692
2693static struct clk usb_otg_hs_ick = {
2694 .name = "usb_otg_hs_ick",
2300 .ops = &clkops_omap2_dflt, 2695 .ops = &clkops_omap2_dflt,
2301 .enable_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL, 2696 .enable_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2302 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 2697 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
@@ -2305,38 +2700,101 @@ static struct clk usb_otg_ick = {
2305 .recalc = &followparent_recalc, 2700 .recalc = &followparent_recalc,
2306}; 2701};
2307 2702
2308static struct clk usb_tll_ick = { 2703static struct clk usb_phy_cm_clk32k = {
2309 .name = "usb_tll_ick", 2704 .name = "usb_phy_cm_clk32k",
2705 .ops = &clkops_omap2_dflt,
2706 .enable_reg = OMAP4430_CM_ALWON_USBPHY_CLKCTRL,
2707 .enable_bit = OMAP4430_OPTFCLKEN_CLK32K_SHIFT,
2708 .clkdm_name = "l4_ao_clkdm",
2709 .parent = &sys_32k_ck,
2710 .recalc = &followparent_recalc,
2711};
2712
2713static struct clk usb_tll_hs_usb_ch2_clk = {
2714 .name = "usb_tll_hs_usb_ch2_clk",
2310 .ops = &clkops_omap2_dflt, 2715 .ops = &clkops_omap2_dflt,
2311 .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL, 2716 .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2312 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 2717 .enable_bit = OMAP4430_OPTFCLKEN_USB_CH2_CLK_SHIFT,
2313 .clkdm_name = "l3_init_clkdm", 2718 .clkdm_name = "l3_init_clkdm",
2314 .parent = &l4_div_ck, 2719 .parent = &init_60m_fclk,
2315 .recalc = &followparent_recalc, 2720 .recalc = &followparent_recalc,
2316}; 2721};
2317 2722
2318static struct clk usbphyocp2scp_ick = { 2723static struct clk usb_tll_hs_usb_ch0_clk = {
2319 .name = "usbphyocp2scp_ick", 2724 .name = "usb_tll_hs_usb_ch0_clk",
2320 .ops = &clkops_omap2_dflt, 2725 .ops = &clkops_omap2_dflt,
2321 .enable_reg = OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, 2726 .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2727 .enable_bit = OMAP4430_OPTFCLKEN_USB_CH0_CLK_SHIFT,
2728 .clkdm_name = "l3_init_clkdm",
2729 .parent = &init_60m_fclk,
2730 .recalc = &followparent_recalc,
2731};
2732
2733static struct clk usb_tll_hs_usb_ch1_clk = {
2734 .name = "usb_tll_hs_usb_ch1_clk",
2735 .ops = &clkops_omap2_dflt,
2736 .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2737 .enable_bit = OMAP4430_OPTFCLKEN_USB_CH1_CLK_SHIFT,
2738 .clkdm_name = "l3_init_clkdm",
2739 .parent = &init_60m_fclk,
2740 .recalc = &followparent_recalc,
2741};
2742
2743static struct clk usb_tll_hs_ick = {
2744 .name = "usb_tll_hs_ick",
2745 .ops = &clkops_omap2_dflt,
2746 .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2322 .enable_bit = OMAP4430_MODULEMODE_HWCTRL, 2747 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2323 .clkdm_name = "l3_init_clkdm", 2748 .clkdm_name = "l3_init_clkdm",
2324 .parent = &l4_div_ck, 2749 .parent = &l4_div_ck,
2325 .recalc = &followparent_recalc, 2750 .recalc = &followparent_recalc,
2326}; 2751};
2327 2752
2753static const struct clksel_rate div2_14to18_rates[] = {
2754 { .div = 14, .val = 0, .flags = RATE_IN_4430 },
2755 { .div = 18, .val = 1, .flags = RATE_IN_4430 },
2756 { .div = 0 },
2757};
2758
2759static const struct clksel usim_fclk_div[] = {
2760 { .parent = &dpll_per_m4x2_ck, .rates = div2_14to18_rates },
2761 { .parent = NULL },
2762};
2763
2764static struct clk usim_ck = {
2765 .name = "usim_ck",
2766 .parent = &dpll_per_m4x2_ck,
2767 .clksel = usim_fclk_div,
2768 .clksel_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2769 .clksel_mask = OMAP4430_CLKSEL_DIV_MASK,
2770 .ops = &clkops_null,
2771 .recalc = &omap2_clksel_recalc,
2772 .round_rate = &omap2_clksel_round_rate,
2773 .set_rate = &omap2_clksel_set_rate,
2774};
2775
2776static struct clk usim_fclk = {
2777 .name = "usim_fclk",
2778 .ops = &clkops_omap2_dflt,
2779 .enable_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2780 .enable_bit = OMAP4430_OPTFCLKEN_FCLK_SHIFT,
2781 .clkdm_name = "l4_wkup_clkdm",
2782 .parent = &usim_ck,
2783 .recalc = &followparent_recalc,
2784};
2785
2328static struct clk usim_fck = { 2786static struct clk usim_fck = {
2329 .name = "usim_fck", 2787 .name = "usim_fck",
2330 .ops = &clkops_omap2_dflt, 2788 .ops = &clkops_omap2_dflt,
2331 .enable_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL, 2789 .enable_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2332 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2790 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2333 .clkdm_name = "l4_wkup_clkdm", 2791 .clkdm_name = "l4_wkup_clkdm",
2334 .parent = &sys_32k_ck, 2792 .parent = &sys_32k_ck,
2335 .recalc = &followparent_recalc, 2793 .recalc = &followparent_recalc,
2336}; 2794};
2337 2795
2338static struct clk wdt2_fck = { 2796static struct clk wd_timer2_fck = {
2339 .name = "wdt2_fck", 2797 .name = "wd_timer2_fck",
2340 .ops = &clkops_omap2_dflt, 2798 .ops = &clkops_omap2_dflt,
2341 .enable_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL, 2799 .enable_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
2342 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2800 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
@@ -2345,8 +2803,8 @@ static struct clk wdt2_fck = {
2345 .recalc = &followparent_recalc, 2803 .recalc = &followparent_recalc,
2346}; 2804};
2347 2805
2348static struct clk wdt3_fck = { 2806static struct clk wd_timer3_fck = {
2349 .name = "wdt3_fck", 2807 .name = "wd_timer3_fck",
2350 .ops = &clkops_omap2_dflt, 2808 .ops = &clkops_omap2_dflt,
2351 .enable_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL, 2809 .enable_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
2352 .enable_bit = OMAP4430_MODULEMODE_SWCTRL, 2810 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
@@ -2356,23 +2814,6 @@ static struct clk wdt3_fck = {
2356}; 2814};
2357 2815
2358/* Remaining optional clocks */ 2816/* Remaining optional clocks */
2359static const struct clksel otg_60m_gfclk_sel[] = {
2360 { .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
2361 { .parent = &xclk60motg_ck, .rates = div_1_1_rates },
2362 { .parent = NULL },
2363};
2364
2365static struct clk otg_60m_gfclk_ck = {
2366 .name = "otg_60m_gfclk_ck",
2367 .parent = &utmi_phy_clkout_ck,
2368 .clksel = otg_60m_gfclk_sel,
2369 .init = &omap2_init_clksel_parent,
2370 .clksel_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2371 .clksel_mask = OMAP4430_CLKSEL_60M_MASK,
2372 .ops = &clkops_null,
2373 .recalc = &omap2_clksel_recalc,
2374};
2375
2376static const struct clksel stm_clk_div_div[] = { 2817static const struct clksel stm_clk_div_div[] = {
2377 { .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates }, 2818 { .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates },
2378 { .parent = NULL }, 2819 { .parent = NULL },
@@ -2407,60 +2848,165 @@ static struct clk trace_clk_div_ck = {
2407 .set_rate = &omap2_clksel_set_rate, 2848 .set_rate = &omap2_clksel_set_rate,
2408}; 2849};
2409 2850
2410static const struct clksel_rate div2_14to18_rates[] = { 2851/* SCRM aux clk nodes */
2411 { .div = 14, .val = 0, .flags = RATE_IN_4430 }, 2852
2412 { .div = 18, .val = 1, .flags = RATE_IN_4430 }, 2853static const struct clksel auxclk_sel[] = {
2413 { .div = 0 }, 2854 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
2855 { .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
2856 { .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
2857 { .parent = NULL },
2414}; 2858};
2415 2859
2416static const struct clksel usim_fclk_div[] = { 2860static struct clk auxclk0_ck = {
2417 { .parent = &dpll_per_m4_ck, .rates = div2_14to18_rates }, 2861 .name = "auxclk0_ck",
2862 .parent = &sys_clkin_ck,
2863 .init = &omap2_init_clksel_parent,
2864 .ops = &clkops_omap2_dflt,
2865 .clksel = auxclk_sel,
2866 .clksel_reg = OMAP4_SCRM_AUXCLK0,
2867 .clksel_mask = OMAP4_SRCSELECT_MASK,
2868 .recalc = &omap2_clksel_recalc,
2869 .enable_reg = OMAP4_SCRM_AUXCLK0,
2870 .enable_bit = OMAP4_ENABLE_SHIFT,
2871};
2872
2873static struct clk auxclk1_ck = {
2874 .name = "auxclk1_ck",
2875 .parent = &sys_clkin_ck,
2876 .init = &omap2_init_clksel_parent,
2877 .ops = &clkops_omap2_dflt,
2878 .clksel = auxclk_sel,
2879 .clksel_reg = OMAP4_SCRM_AUXCLK1,
2880 .clksel_mask = OMAP4_SRCSELECT_MASK,
2881 .recalc = &omap2_clksel_recalc,
2882 .enable_reg = OMAP4_SCRM_AUXCLK1,
2883 .enable_bit = OMAP4_ENABLE_SHIFT,
2884};
2885
2886static struct clk auxclk2_ck = {
2887 .name = "auxclk2_ck",
2888 .parent = &sys_clkin_ck,
2889 .init = &omap2_init_clksel_parent,
2890 .ops = &clkops_omap2_dflt,
2891 .clksel = auxclk_sel,
2892 .clksel_reg = OMAP4_SCRM_AUXCLK2,
2893 .clksel_mask = OMAP4_SRCSELECT_MASK,
2894 .recalc = &omap2_clksel_recalc,
2895 .enable_reg = OMAP4_SCRM_AUXCLK2,
2896 .enable_bit = OMAP4_ENABLE_SHIFT,
2897};
2898static struct clk auxclk3_ck = {
2899 .name = "auxclk3_ck",
2900 .parent = &sys_clkin_ck,
2901 .init = &omap2_init_clksel_parent,
2902 .ops = &clkops_omap2_dflt,
2903 .clksel = auxclk_sel,
2904 .clksel_reg = OMAP4_SCRM_AUXCLK3,
2905 .clksel_mask = OMAP4_SRCSELECT_MASK,
2906 .recalc = &omap2_clksel_recalc,
2907 .enable_reg = OMAP4_SCRM_AUXCLK3,
2908 .enable_bit = OMAP4_ENABLE_SHIFT,
2909};
2910
2911static struct clk auxclk4_ck = {
2912 .name = "auxclk4_ck",
2913 .parent = &sys_clkin_ck,
2914 .init = &omap2_init_clksel_parent,
2915 .ops = &clkops_omap2_dflt,
2916 .clksel = auxclk_sel,
2917 .clksel_reg = OMAP4_SCRM_AUXCLK4,
2918 .clksel_mask = OMAP4_SRCSELECT_MASK,
2919 .recalc = &omap2_clksel_recalc,
2920 .enable_reg = OMAP4_SCRM_AUXCLK4,
2921 .enable_bit = OMAP4_ENABLE_SHIFT,
2922};
2923
2924static struct clk auxclk5_ck = {
2925 .name = "auxclk5_ck",
2926 .parent = &sys_clkin_ck,
2927 .init = &omap2_init_clksel_parent,
2928 .ops = &clkops_omap2_dflt,
2929 .clksel = auxclk_sel,
2930 .clksel_reg = OMAP4_SCRM_AUXCLK5,
2931 .clksel_mask = OMAP4_SRCSELECT_MASK,
2932 .recalc = &omap2_clksel_recalc,
2933 .enable_reg = OMAP4_SCRM_AUXCLK5,
2934 .enable_bit = OMAP4_ENABLE_SHIFT,
2935};
2936
2937static const struct clksel auxclkreq_sel[] = {
2938 { .parent = &auxclk0_ck, .rates = div_1_0_rates },
2939 { .parent = &auxclk1_ck, .rates = div_1_1_rates },
2940 { .parent = &auxclk2_ck, .rates = div_1_2_rates },
2941 { .parent = &auxclk3_ck, .rates = div_1_3_rates },
2942 { .parent = &auxclk4_ck, .rates = div_1_4_rates },
2943 { .parent = &auxclk5_ck, .rates = div_1_5_rates },
2418 { .parent = NULL }, 2944 { .parent = NULL },
2419}; 2945};
2420 2946
2421static struct clk usim_fclk = { 2947static struct clk auxclkreq0_ck = {
2422 .name = "usim_fclk", 2948 .name = "auxclkreq0_ck",
2423 .parent = &dpll_per_m4_ck, 2949 .parent = &auxclk0_ck,
2424 .clksel = usim_fclk_div, 2950 .init = &omap2_init_clksel_parent,
2425 .clksel_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2426 .clksel_mask = OMAP4430_CLKSEL_DIV_MASK,
2427 .ops = &clkops_null, 2951 .ops = &clkops_null,
2952 .clksel = auxclkreq_sel,
2953 .clksel_reg = OMAP4_SCRM_AUXCLKREQ0,
2954 .clksel_mask = OMAP4_MAPPING_MASK,
2428 .recalc = &omap2_clksel_recalc, 2955 .recalc = &omap2_clksel_recalc,
2429 .round_rate = &omap2_clksel_round_rate,
2430 .set_rate = &omap2_clksel_set_rate,
2431}; 2956};
2432 2957
2433static const struct clksel utmi_p1_gfclk_sel[] = { 2958static struct clk auxclkreq1_ck = {
2434 { .parent = &init_60m_fclk, .rates = div_1_0_rates }, 2959 .name = "auxclkreq1_ck",
2435 { .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates }, 2960 .parent = &auxclk1_ck,
2436 { .parent = NULL }, 2961 .init = &omap2_init_clksel_parent,
2962 .ops = &clkops_null,
2963 .clksel = auxclkreq_sel,
2964 .clksel_reg = OMAP4_SCRM_AUXCLKREQ1,
2965 .clksel_mask = OMAP4_MAPPING_MASK,
2966 .recalc = &omap2_clksel_recalc,
2437}; 2967};
2438 2968
2439static struct clk utmi_p1_gfclk_ck = { 2969static struct clk auxclkreq2_ck = {
2440 .name = "utmi_p1_gfclk_ck", 2970 .name = "auxclkreq2_ck",
2441 .parent = &init_60m_fclk, 2971 .parent = &auxclk2_ck,
2442 .clksel = utmi_p1_gfclk_sel,
2443 .init = &omap2_init_clksel_parent, 2972 .init = &omap2_init_clksel_parent,
2444 .clksel_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2445 .clksel_mask = OMAP4430_CLKSEL_UTMI_P1_MASK,
2446 .ops = &clkops_null, 2973 .ops = &clkops_null,
2974 .clksel = auxclkreq_sel,
2975 .clksel_reg = OMAP4_SCRM_AUXCLKREQ2,
2976 .clksel_mask = OMAP4_MAPPING_MASK,
2447 .recalc = &omap2_clksel_recalc, 2977 .recalc = &omap2_clksel_recalc,
2448}; 2978};
2449 2979
2450static const struct clksel utmi_p2_gfclk_sel[] = { 2980static struct clk auxclkreq3_ck = {
2451 { .parent = &init_60m_fclk, .rates = div_1_0_rates }, 2981 .name = "auxclkreq3_ck",
2452 { .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates }, 2982 .parent = &auxclk3_ck,
2453 { .parent = NULL }, 2983 .init = &omap2_init_clksel_parent,
2984 .ops = &clkops_null,
2985 .clksel = auxclkreq_sel,
2986 .clksel_reg = OMAP4_SCRM_AUXCLKREQ3,
2987 .clksel_mask = OMAP4_MAPPING_MASK,
2988 .recalc = &omap2_clksel_recalc,
2454}; 2989};
2455 2990
2456static struct clk utmi_p2_gfclk_ck = { 2991static struct clk auxclkreq4_ck = {
2457 .name = "utmi_p2_gfclk_ck", 2992 .name = "auxclkreq4_ck",
2458 .parent = &init_60m_fclk, 2993 .parent = &auxclk4_ck,
2459 .clksel = utmi_p2_gfclk_sel,
2460 .init = &omap2_init_clksel_parent, 2994 .init = &omap2_init_clksel_parent,
2461 .clksel_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2462 .clksel_mask = OMAP4430_CLKSEL_UTMI_P2_MASK,
2463 .ops = &clkops_null, 2995 .ops = &clkops_null,
2996 .clksel = auxclkreq_sel,
2997 .clksel_reg = OMAP4_SCRM_AUXCLKREQ4,
2998 .clksel_mask = OMAP4_MAPPING_MASK,
2999 .recalc = &omap2_clksel_recalc,
3000};
3001
3002static struct clk auxclkreq5_ck = {
3003 .name = "auxclkreq5_ck",
3004 .parent = &auxclk5_ck,
3005 .init = &omap2_init_clksel_parent,
3006 .ops = &clkops_null,
3007 .clksel = auxclkreq_sel,
3008 .clksel_reg = OMAP4_SCRM_AUXCLKREQ5,
3009 .clksel_mask = OMAP4_MAPPING_MASK,
2464 .recalc = &omap2_clksel_recalc, 3010 .recalc = &omap2_clksel_recalc,
2465}; 3011};
2466 3012
@@ -2483,50 +3029,56 @@ static struct omap_clk omap44xx_clks[] = {
2483 CLK(NULL, "virt_27000000_ck", &virt_27000000_ck, CK_443X), 3029 CLK(NULL, "virt_27000000_ck", &virt_27000000_ck, CK_443X),
2484 CLK(NULL, "virt_38400000_ck", &virt_38400000_ck, CK_443X), 3030 CLK(NULL, "virt_38400000_ck", &virt_38400000_ck, CK_443X),
2485 CLK(NULL, "sys_clkin_ck", &sys_clkin_ck, CK_443X), 3031 CLK(NULL, "sys_clkin_ck", &sys_clkin_ck, CK_443X),
3032 CLK(NULL, "tie_low_clock_ck", &tie_low_clock_ck, CK_443X),
2486 CLK(NULL, "utmi_phy_clkout_ck", &utmi_phy_clkout_ck, CK_443X), 3033 CLK(NULL, "utmi_phy_clkout_ck", &utmi_phy_clkout_ck, CK_443X),
2487 CLK(NULL, "xclk60mhsp1_ck", &xclk60mhsp1_ck, CK_443X), 3034 CLK(NULL, "xclk60mhsp1_ck", &xclk60mhsp1_ck, CK_443X),
2488 CLK(NULL, "xclk60mhsp2_ck", &xclk60mhsp2_ck, CK_443X), 3035 CLK(NULL, "xclk60mhsp2_ck", &xclk60mhsp2_ck, CK_443X),
2489 CLK(NULL, "xclk60motg_ck", &xclk60motg_ck, CK_443X), 3036 CLK(NULL, "xclk60motg_ck", &xclk60motg_ck, CK_443X),
2490 CLK(NULL, "dpll_sys_ref_clk", &dpll_sys_ref_clk, CK_443X), 3037 CLK(NULL, "abe_dpll_bypass_clk_mux_ck", &abe_dpll_bypass_clk_mux_ck, CK_443X),
2491 CLK(NULL, "abe_dpll_refclk_mux_ck", &abe_dpll_refclk_mux_ck, CK_443X), 3038 CLK(NULL, "abe_dpll_refclk_mux_ck", &abe_dpll_refclk_mux_ck, CK_443X),
2492 CLK(NULL, "dpll_abe_ck", &dpll_abe_ck, CK_443X), 3039 CLK(NULL, "dpll_abe_ck", &dpll_abe_ck, CK_443X),
3040 CLK(NULL, "dpll_abe_x2_ck", &dpll_abe_x2_ck, CK_443X),
2493 CLK(NULL, "dpll_abe_m2x2_ck", &dpll_abe_m2x2_ck, CK_443X), 3041 CLK(NULL, "dpll_abe_m2x2_ck", &dpll_abe_m2x2_ck, CK_443X),
2494 CLK(NULL, "abe_24m_fclk", &abe_24m_fclk, CK_443X), 3042 CLK(NULL, "abe_24m_fclk", &abe_24m_fclk, CK_443X),
2495 CLK(NULL, "abe_clk", &abe_clk, CK_443X), 3043 CLK(NULL, "abe_clk", &abe_clk, CK_443X),
2496 CLK(NULL, "aess_fclk", &aess_fclk, CK_443X), 3044 CLK(NULL, "aess_fclk", &aess_fclk, CK_443X),
2497 CLK(NULL, "dpll_abe_m3_ck", &dpll_abe_m3_ck, CK_443X), 3045 CLK(NULL, "dpll_abe_m3x2_ck", &dpll_abe_m3x2_ck, CK_443X),
2498 CLK(NULL, "core_hsd_byp_clk_mux_ck", &core_hsd_byp_clk_mux_ck, CK_443X), 3046 CLK(NULL, "core_hsd_byp_clk_mux_ck", &core_hsd_byp_clk_mux_ck, CK_443X),
2499 CLK(NULL, "dpll_core_ck", &dpll_core_ck, CK_443X), 3047 CLK(NULL, "dpll_core_ck", &dpll_core_ck, CK_443X),
2500 CLK(NULL, "dpll_core_m6_ck", &dpll_core_m6_ck, CK_443X), 3048 CLK(NULL, "dpll_core_x2_ck", &dpll_core_x2_ck, CK_443X),
3049 CLK(NULL, "dpll_core_m6x2_ck", &dpll_core_m6x2_ck, CK_443X),
2501 CLK(NULL, "dbgclk_mux_ck", &dbgclk_mux_ck, CK_443X), 3050 CLK(NULL, "dbgclk_mux_ck", &dbgclk_mux_ck, CK_443X),
2502 CLK(NULL, "dpll_core_m2_ck", &dpll_core_m2_ck, CK_443X), 3051 CLK(NULL, "dpll_core_m2_ck", &dpll_core_m2_ck, CK_443X),
2503 CLK(NULL, "ddrphy_ck", &ddrphy_ck, CK_443X), 3052 CLK(NULL, "ddrphy_ck", &ddrphy_ck, CK_443X),
2504 CLK(NULL, "dpll_core_m5_ck", &dpll_core_m5_ck, CK_443X), 3053 CLK(NULL, "dpll_core_m5x2_ck", &dpll_core_m5x2_ck, CK_443X),
2505 CLK(NULL, "div_core_ck", &div_core_ck, CK_443X), 3054 CLK(NULL, "div_core_ck", &div_core_ck, CK_443X),
2506 CLK(NULL, "div_iva_hs_clk", &div_iva_hs_clk, CK_443X), 3055 CLK(NULL, "div_iva_hs_clk", &div_iva_hs_clk, CK_443X),
2507 CLK(NULL, "div_mpu_hs_clk", &div_mpu_hs_clk, CK_443X), 3056 CLK(NULL, "div_mpu_hs_clk", &div_mpu_hs_clk, CK_443X),
2508 CLK(NULL, "dpll_core_m4_ck", &dpll_core_m4_ck, CK_443X), 3057 CLK(NULL, "dpll_core_m4x2_ck", &dpll_core_m4x2_ck, CK_443X),
2509 CLK(NULL, "dll_clk_div_ck", &dll_clk_div_ck, CK_443X), 3058 CLK(NULL, "dll_clk_div_ck", &dll_clk_div_ck, CK_443X),
2510 CLK(NULL, "dpll_abe_m2_ck", &dpll_abe_m2_ck, CK_443X), 3059 CLK(NULL, "dpll_abe_m2_ck", &dpll_abe_m2_ck, CK_443X),
2511 CLK(NULL, "dpll_core_m3_ck", &dpll_core_m3_ck, CK_443X), 3060 CLK(NULL, "dpll_core_m3x2_ck", &dpll_core_m3x2_ck, CK_443X),
2512 CLK(NULL, "dpll_core_m7_ck", &dpll_core_m7_ck, CK_443X), 3061 CLK(NULL, "dpll_core_m7x2_ck", &dpll_core_m7x2_ck, CK_443X),
2513 CLK(NULL, "iva_hsd_byp_clk_mux_ck", &iva_hsd_byp_clk_mux_ck, CK_443X), 3062 CLK(NULL, "iva_hsd_byp_clk_mux_ck", &iva_hsd_byp_clk_mux_ck, CK_443X),
2514 CLK(NULL, "dpll_iva_ck", &dpll_iva_ck, CK_443X), 3063 CLK(NULL, "dpll_iva_ck", &dpll_iva_ck, CK_443X),
2515 CLK(NULL, "dpll_iva_m4_ck", &dpll_iva_m4_ck, CK_443X), 3064 CLK(NULL, "dpll_iva_x2_ck", &dpll_iva_x2_ck, CK_443X),
2516 CLK(NULL, "dpll_iva_m5_ck", &dpll_iva_m5_ck, CK_443X), 3065 CLK(NULL, "dpll_iva_m4x2_ck", &dpll_iva_m4x2_ck, CK_443X),
3066 CLK(NULL, "dpll_iva_m5x2_ck", &dpll_iva_m5x2_ck, CK_443X),
2517 CLK(NULL, "dpll_mpu_ck", &dpll_mpu_ck, CK_443X), 3067 CLK(NULL, "dpll_mpu_ck", &dpll_mpu_ck, CK_443X),
2518 CLK(NULL, "dpll_mpu_m2_ck", &dpll_mpu_m2_ck, CK_443X), 3068 CLK(NULL, "dpll_mpu_m2_ck", &dpll_mpu_m2_ck, CK_443X),
2519 CLK(NULL, "per_hs_clk_div_ck", &per_hs_clk_div_ck, CK_443X), 3069 CLK(NULL, "per_hs_clk_div_ck", &per_hs_clk_div_ck, CK_443X),
2520 CLK(NULL, "per_hsd_byp_clk_mux_ck", &per_hsd_byp_clk_mux_ck, CK_443X), 3070 CLK(NULL, "per_hsd_byp_clk_mux_ck", &per_hsd_byp_clk_mux_ck, CK_443X),
2521 CLK(NULL, "dpll_per_ck", &dpll_per_ck, CK_443X), 3071 CLK(NULL, "dpll_per_ck", &dpll_per_ck, CK_443X),
2522 CLK(NULL, "dpll_per_m2_ck", &dpll_per_m2_ck, CK_443X), 3072 CLK(NULL, "dpll_per_m2_ck", &dpll_per_m2_ck, CK_443X),
3073 CLK(NULL, "dpll_per_x2_ck", &dpll_per_x2_ck, CK_443X),
2523 CLK(NULL, "dpll_per_m2x2_ck", &dpll_per_m2x2_ck, CK_443X), 3074 CLK(NULL, "dpll_per_m2x2_ck", &dpll_per_m2x2_ck, CK_443X),
2524 CLK(NULL, "dpll_per_m3_ck", &dpll_per_m3_ck, CK_443X), 3075 CLK(NULL, "dpll_per_m3x2_ck", &dpll_per_m3x2_ck, CK_443X),
2525 CLK(NULL, "dpll_per_m4_ck", &dpll_per_m4_ck, CK_443X), 3076 CLK(NULL, "dpll_per_m4x2_ck", &dpll_per_m4x2_ck, CK_443X),
2526 CLK(NULL, "dpll_per_m5_ck", &dpll_per_m5_ck, CK_443X), 3077 CLK(NULL, "dpll_per_m5x2_ck", &dpll_per_m5x2_ck, CK_443X),
2527 CLK(NULL, "dpll_per_m6_ck", &dpll_per_m6_ck, CK_443X), 3078 CLK(NULL, "dpll_per_m6x2_ck", &dpll_per_m6x2_ck, CK_443X),
2528 CLK(NULL, "dpll_per_m7_ck", &dpll_per_m7_ck, CK_443X), 3079 CLK(NULL, "dpll_per_m7x2_ck", &dpll_per_m7x2_ck, CK_443X),
2529 CLK(NULL, "dpll_unipro_ck", &dpll_unipro_ck, CK_443X), 3080 CLK(NULL, "dpll_unipro_ck", &dpll_unipro_ck, CK_443X),
3081 CLK(NULL, "dpll_unipro_x2_ck", &dpll_unipro_x2_ck, CK_443X),
2530 CLK(NULL, "dpll_unipro_m2x2_ck", &dpll_unipro_m2x2_ck, CK_443X), 3082 CLK(NULL, "dpll_unipro_m2x2_ck", &dpll_unipro_m2x2_ck, CK_443X),
2531 CLK(NULL, "usb_hs_clk_div_ck", &usb_hs_clk_div_ck, CK_443X), 3083 CLK(NULL, "usb_hs_clk_div_ck", &usb_hs_clk_div_ck, CK_443X),
2532 CLK(NULL, "dpll_usb_ck", &dpll_usb_ck, CK_443X), 3084 CLK(NULL, "dpll_usb_ck", &dpll_usb_ck, CK_443X),
@@ -2557,46 +3109,48 @@ static struct omap_clk omap44xx_clks[] = {
2557 CLK(NULL, "aes1_fck", &aes1_fck, CK_443X), 3109 CLK(NULL, "aes1_fck", &aes1_fck, CK_443X),
2558 CLK(NULL, "aes2_fck", &aes2_fck, CK_443X), 3110 CLK(NULL, "aes2_fck", &aes2_fck, CK_443X),
2559 CLK(NULL, "aess_fck", &aess_fck, CK_443X), 3111 CLK(NULL, "aess_fck", &aess_fck, CK_443X),
2560 CLK(NULL, "cust_efuse_fck", &cust_efuse_fck, CK_443X), 3112 CLK(NULL, "bandgap_fclk", &bandgap_fclk, CK_443X),
2561 CLK(NULL, "des3des_fck", &des3des_fck, CK_443X), 3113 CLK(NULL, "des3des_fck", &des3des_fck, CK_443X),
2562 CLK(NULL, "dmic_sync_mux_ck", &dmic_sync_mux_ck, CK_443X), 3114 CLK(NULL, "dmic_sync_mux_ck", &dmic_sync_mux_ck, CK_443X),
2563 CLK(NULL, "dmic_fck", &dmic_fck, CK_443X), 3115 CLK(NULL, "dmic_fck", &dmic_fck, CK_443X),
2564 CLK(NULL, "dss_fck", &dss_fck, CK_443X), 3116 CLK(NULL, "dsp_fck", &dsp_fck, CK_443X),
2565 CLK(NULL, "ducati_ick", &ducati_ick, CK_443X), 3117 CLK("omapdss_dss", "sys_clk", &dss_sys_clk, CK_443X),
2566 CLK(NULL, "emif1_ick", &emif1_ick, CK_443X), 3118 CLK("omapdss_dss", "tv_clk", &dss_tv_clk, CK_443X),
2567 CLK(NULL, "emif2_ick", &emif2_ick, CK_443X), 3119 CLK("omapdss_dss", "video_clk", &dss_48mhz_clk, CK_443X),
3120 CLK("omapdss_dss", "fck", &dss_dss_clk, CK_443X),
3121 CLK("omapdss_dss", "ick", &dss_fck, CK_443X),
3122 CLK(NULL, "efuse_ctrl_cust_fck", &efuse_ctrl_cust_fck, CK_443X),
3123 CLK(NULL, "emif1_fck", &emif1_fck, CK_443X),
3124 CLK(NULL, "emif2_fck", &emif2_fck, CK_443X),
2568 CLK(NULL, "fdif_fck", &fdif_fck, CK_443X), 3125 CLK(NULL, "fdif_fck", &fdif_fck, CK_443X),
2569 CLK(NULL, "per_sgx_fclk", &per_sgx_fclk, CK_443X), 3126 CLK(NULL, "fpka_fck", &fpka_fck, CK_443X),
2570 CLK(NULL, "gfx_fck", &gfx_fck, CK_443X), 3127 CLK(NULL, "gpio1_dbclk", &gpio1_dbclk, CK_443X),
2571 CLK(NULL, "gpio1_ick", &gpio1_ick, CK_443X), 3128 CLK(NULL, "gpio1_ick", &gpio1_ick, CK_443X),
3129 CLK(NULL, "gpio2_dbclk", &gpio2_dbclk, CK_443X),
2572 CLK(NULL, "gpio2_ick", &gpio2_ick, CK_443X), 3130 CLK(NULL, "gpio2_ick", &gpio2_ick, CK_443X),
3131 CLK(NULL, "gpio3_dbclk", &gpio3_dbclk, CK_443X),
2573 CLK(NULL, "gpio3_ick", &gpio3_ick, CK_443X), 3132 CLK(NULL, "gpio3_ick", &gpio3_ick, CK_443X),
3133 CLK(NULL, "gpio4_dbclk", &gpio4_dbclk, CK_443X),
2574 CLK(NULL, "gpio4_ick", &gpio4_ick, CK_443X), 3134 CLK(NULL, "gpio4_ick", &gpio4_ick, CK_443X),
3135 CLK(NULL, "gpio5_dbclk", &gpio5_dbclk, CK_443X),
2575 CLK(NULL, "gpio5_ick", &gpio5_ick, CK_443X), 3136 CLK(NULL, "gpio5_ick", &gpio5_ick, CK_443X),
3137 CLK(NULL, "gpio6_dbclk", &gpio6_dbclk, CK_443X),
2576 CLK(NULL, "gpio6_ick", &gpio6_ick, CK_443X), 3138 CLK(NULL, "gpio6_ick", &gpio6_ick, CK_443X),
2577 CLK(NULL, "gpmc_ick", &gpmc_ick, CK_443X), 3139 CLK(NULL, "gpmc_ick", &gpmc_ick, CK_443X),
2578 CLK(NULL, "gpt1_fck", &gpt1_fck, CK_443X), 3140 CLK(NULL, "gpu_fck", &gpu_fck, CK_443X),
2579 CLK(NULL, "gpt10_fck", &gpt10_fck, CK_443X),
2580 CLK(NULL, "gpt11_fck", &gpt11_fck, CK_443X),
2581 CLK(NULL, "gpt2_fck", &gpt2_fck, CK_443X),
2582 CLK(NULL, "gpt3_fck", &gpt3_fck, CK_443X),
2583 CLK(NULL, "gpt4_fck", &gpt4_fck, CK_443X),
2584 CLK(NULL, "gpt5_fck", &gpt5_fck, CK_443X),
2585 CLK(NULL, "gpt6_fck", &gpt6_fck, CK_443X),
2586 CLK(NULL, "gpt7_fck", &gpt7_fck, CK_443X),
2587 CLK(NULL, "gpt8_fck", &gpt8_fck, CK_443X),
2588 CLK(NULL, "gpt9_fck", &gpt9_fck, CK_443X),
2589 CLK("omap2_hdq.0", "fck", &hdq1w_fck, CK_443X), 3141 CLK("omap2_hdq.0", "fck", &hdq1w_fck, CK_443X),
2590 CLK(NULL, "hsi_ick", &hsi_ick, CK_443X), 3142 CLK(NULL, "hsi_fck", &hsi_fck, CK_443X),
2591 CLK("i2c_omap.1", "fck", &i2c1_fck, CK_443X), 3143 CLK("omap_i2c.1", "fck", &i2c1_fck, CK_443X),
2592 CLK("i2c_omap.2", "fck", &i2c2_fck, CK_443X), 3144 CLK("omap_i2c.2", "fck", &i2c2_fck, CK_443X),
2593 CLK("i2c_omap.3", "fck", &i2c3_fck, CK_443X), 3145 CLK("omap_i2c.3", "fck", &i2c3_fck, CK_443X),
2594 CLK("i2c_omap.4", "fck", &i2c4_fck, CK_443X), 3146 CLK("omap_i2c.4", "fck", &i2c4_fck, CK_443X),
3147 CLK(NULL, "ipu_fck", &ipu_fck, CK_443X),
3148 CLK(NULL, "iss_ctrlclk", &iss_ctrlclk, CK_443X),
2595 CLK(NULL, "iss_fck", &iss_fck, CK_443X), 3149 CLK(NULL, "iss_fck", &iss_fck, CK_443X),
2596 CLK(NULL, "ivahd_ick", &ivahd_ick, CK_443X), 3150 CLK(NULL, "iva_fck", &iva_fck, CK_443X),
2597 CLK(NULL, "keyboard_fck", &keyboard_fck, CK_443X), 3151 CLK(NULL, "kbd_fck", &kbd_fck, CK_443X),
2598 CLK(NULL, "l3_instr_interconnect_ick", &l3_instr_interconnect_ick, CK_443X), 3152 CLK(NULL, "l3_instr_ick", &l3_instr_ick, CK_443X),
2599 CLK(NULL, "l3_interconnect_3_ick", &l3_interconnect_3_ick, CK_443X), 3153 CLK(NULL, "l3_main_3_ick", &l3_main_3_ick, CK_443X),
2600 CLK(NULL, "mcasp_sync_mux_ck", &mcasp_sync_mux_ck, CK_443X), 3154 CLK(NULL, "mcasp_sync_mux_ck", &mcasp_sync_mux_ck, CK_443X),
2601 CLK(NULL, "mcasp_fck", &mcasp_fck, CK_443X), 3155 CLK(NULL, "mcasp_fck", &mcasp_fck, CK_443X),
2602 CLK(NULL, "mcbsp1_sync_mux_ck", &mcbsp1_sync_mux_ck, CK_443X), 3156 CLK(NULL, "mcbsp1_sync_mux_ck", &mcbsp1_sync_mux_ck, CK_443X),
@@ -2607,52 +3161,82 @@ static struct omap_clk omap44xx_clks[] = {
2607 CLK("omap-mcbsp.3", "fck", &mcbsp3_fck, CK_443X), 3161 CLK("omap-mcbsp.3", "fck", &mcbsp3_fck, CK_443X),
2608 CLK(NULL, "mcbsp4_sync_mux_ck", &mcbsp4_sync_mux_ck, CK_443X), 3162 CLK(NULL, "mcbsp4_sync_mux_ck", &mcbsp4_sync_mux_ck, CK_443X),
2609 CLK("omap-mcbsp.4", "fck", &mcbsp4_fck, CK_443X), 3163 CLK("omap-mcbsp.4", "fck", &mcbsp4_fck, CK_443X),
3164 CLK(NULL, "mcpdm_fck", &mcpdm_fck, CK_443X),
2610 CLK("omap2_mcspi.1", "fck", &mcspi1_fck, CK_443X), 3165 CLK("omap2_mcspi.1", "fck", &mcspi1_fck, CK_443X),
2611 CLK("omap2_mcspi.2", "fck", &mcspi2_fck, CK_443X), 3166 CLK("omap2_mcspi.2", "fck", &mcspi2_fck, CK_443X),
2612 CLK("omap2_mcspi.3", "fck", &mcspi3_fck, CK_443X), 3167 CLK("omap2_mcspi.3", "fck", &mcspi3_fck, CK_443X),
2613 CLK("omap2_mcspi.4", "fck", &mcspi4_fck, CK_443X), 3168 CLK("omap2_mcspi.4", "fck", &mcspi4_fck, CK_443X),
2614 CLK("mmci-omap-hs.0", "fck", &mmc1_fck, CK_443X), 3169 CLK("omap_hsmmc.0", "fck", &mmc1_fck, CK_443X),
2615 CLK("mmci-omap-hs.1", "fck", &mmc2_fck, CK_443X), 3170 CLK("omap_hsmmc.1", "fck", &mmc2_fck, CK_443X),
2616 CLK("mmci-omap-hs.2", "fck", &mmc3_fck, CK_443X), 3171 CLK("omap_hsmmc.2", "fck", &mmc3_fck, CK_443X),
2617 CLK("mmci-omap-hs.3", "fck", &mmc4_fck, CK_443X), 3172 CLK("omap_hsmmc.3", "fck", &mmc4_fck, CK_443X),
2618 CLK("mmci-omap-hs.4", "fck", &mmc5_fck, CK_443X), 3173 CLK("omap_hsmmc.4", "fck", &mmc5_fck, CK_443X),
2619 CLK(NULL, "ocp_wp1_ick", &ocp_wp1_ick, CK_443X), 3174 CLK(NULL, "ocp2scp_usb_phy_phy_48m", &ocp2scp_usb_phy_phy_48m, CK_443X),
2620 CLK(NULL, "pdm_fck", &pdm_fck, CK_443X), 3175 CLK(NULL, "ocp2scp_usb_phy_ick", &ocp2scp_usb_phy_ick, CK_443X),
2621 CLK(NULL, "pkaeip29_fck", &pkaeip29_fck, CK_443X), 3176 CLK(NULL, "ocp_wp_noc_ick", &ocp_wp_noc_ick, CK_443X),
2622 CLK("omap_rng", "ick", &rng_ick, CK_443X), 3177 CLK("omap_rng", "ick", &rng_ick, CK_443X),
2623 CLK(NULL, "sha2md51_fck", &sha2md51_fck, CK_443X), 3178 CLK(NULL, "sha2md5_fck", &sha2md5_fck, CK_443X),
2624 CLK(NULL, "sl2_ick", &sl2_ick, CK_443X), 3179 CLK(NULL, "sl2if_ick", &sl2if_ick, CK_443X),
3180 CLK(NULL, "slimbus1_fclk_1", &slimbus1_fclk_1, CK_443X),
3181 CLK(NULL, "slimbus1_fclk_0", &slimbus1_fclk_0, CK_443X),
3182 CLK(NULL, "slimbus1_fclk_2", &slimbus1_fclk_2, CK_443X),
3183 CLK(NULL, "slimbus1_slimbus_clk", &slimbus1_slimbus_clk, CK_443X),
2625 CLK(NULL, "slimbus1_fck", &slimbus1_fck, CK_443X), 3184 CLK(NULL, "slimbus1_fck", &slimbus1_fck, CK_443X),
3185 CLK(NULL, "slimbus2_fclk_1", &slimbus2_fclk_1, CK_443X),
3186 CLK(NULL, "slimbus2_fclk_0", &slimbus2_fclk_0, CK_443X),
3187 CLK(NULL, "slimbus2_slimbus_clk", &slimbus2_slimbus_clk, CK_443X),
2626 CLK(NULL, "slimbus2_fck", &slimbus2_fck, CK_443X), 3188 CLK(NULL, "slimbus2_fck", &slimbus2_fck, CK_443X),
2627 CLK(NULL, "sr_core_fck", &sr_core_fck, CK_443X), 3189 CLK(NULL, "smartreflex_core_fck", &smartreflex_core_fck, CK_443X),
2628 CLK(NULL, "sr_iva_fck", &sr_iva_fck, CK_443X), 3190 CLK(NULL, "smartreflex_iva_fck", &smartreflex_iva_fck, CK_443X),
2629 CLK(NULL, "sr_mpu_fck", &sr_mpu_fck, CK_443X), 3191 CLK(NULL, "smartreflex_mpu_fck", &smartreflex_mpu_fck, CK_443X),
2630 CLK(NULL, "tesla_ick", &tesla_ick, CK_443X), 3192 CLK(NULL, "gpt1_fck", &timer1_fck, CK_443X),
3193 CLK(NULL, "gpt10_fck", &timer10_fck, CK_443X),
3194 CLK(NULL, "gpt11_fck", &timer11_fck, CK_443X),
3195 CLK(NULL, "gpt2_fck", &timer2_fck, CK_443X),
3196 CLK(NULL, "gpt3_fck", &timer3_fck, CK_443X),
3197 CLK(NULL, "gpt4_fck", &timer4_fck, CK_443X),
3198 CLK(NULL, "gpt5_fck", &timer5_fck, CK_443X),
3199 CLK(NULL, "gpt6_fck", &timer6_fck, CK_443X),
3200 CLK(NULL, "gpt7_fck", &timer7_fck, CK_443X),
3201 CLK(NULL, "gpt8_fck", &timer8_fck, CK_443X),
3202 CLK(NULL, "gpt9_fck", &timer9_fck, CK_443X),
2631 CLK(NULL, "uart1_fck", &uart1_fck, CK_443X), 3203 CLK(NULL, "uart1_fck", &uart1_fck, CK_443X),
2632 CLK(NULL, "uart2_fck", &uart2_fck, CK_443X), 3204 CLK(NULL, "uart2_fck", &uart2_fck, CK_443X),
2633 CLK(NULL, "uart3_fck", &uart3_fck, CK_443X), 3205 CLK(NULL, "uart3_fck", &uart3_fck, CK_443X),
2634 CLK(NULL, "uart4_fck", &uart4_fck, CK_443X), 3206 CLK(NULL, "uart4_fck", &uart4_fck, CK_443X),
2635 CLK(NULL, "unipro1_fck", &unipro1_fck, CK_443X),
2636 CLK(NULL, "usb_host_fck", &usb_host_fck, CK_443X),
2637 CLK(NULL, "usb_host_fs_fck", &usb_host_fs_fck, CK_443X), 3207 CLK(NULL, "usb_host_fs_fck", &usb_host_fs_fck, CK_443X),
2638 CLK("musb_hdrc", "ick", &usb_otg_ick, CK_443X), 3208 CLK("usbhs-omap.0", "fs_fck", &usb_host_fs_fck, CK_443X),
2639 CLK(NULL, "usb_tll_ick", &usb_tll_ick, CK_443X), 3209 CLK(NULL, "utmi_p1_gfclk", &utmi_p1_gfclk, CK_443X),
2640 CLK(NULL, "usbphyocp2scp_ick", &usbphyocp2scp_ick, CK_443X), 3210 CLK(NULL, "usb_host_hs_utmi_p1_clk", &usb_host_hs_utmi_p1_clk, CK_443X),
3211 CLK(NULL, "utmi_p2_gfclk", &utmi_p2_gfclk, CK_443X),
3212 CLK(NULL, "usb_host_hs_utmi_p2_clk", &usb_host_hs_utmi_p2_clk, CK_443X),
3213 CLK(NULL, "usb_host_hs_utmi_p3_clk", &usb_host_hs_utmi_p3_clk, CK_443X),
3214 CLK(NULL, "usb_host_hs_hsic480m_p1_clk", &usb_host_hs_hsic480m_p1_clk, CK_443X),
3215 CLK(NULL, "usb_host_hs_hsic60m_p1_clk", &usb_host_hs_hsic60m_p1_clk, CK_443X),
3216 CLK(NULL, "usb_host_hs_hsic60m_p2_clk", &usb_host_hs_hsic60m_p2_clk, CK_443X),
3217 CLK(NULL, "usb_host_hs_hsic480m_p2_clk", &usb_host_hs_hsic480m_p2_clk, CK_443X),
3218 CLK(NULL, "usb_host_hs_func48mclk", &usb_host_hs_func48mclk, CK_443X),
3219 CLK(NULL, "usb_host_hs_fck", &usb_host_hs_fck, CK_443X),
3220 CLK("usbhs-omap.0", "hs_fck", &usb_host_hs_fck, CK_443X),
3221 CLK("usbhs-omap.0", "usbhost_ick", &dummy_ck, CK_443X),
3222 CLK(NULL, "otg_60m_gfclk", &otg_60m_gfclk, CK_443X),
3223 CLK(NULL, "usb_otg_hs_xclk", &usb_otg_hs_xclk, CK_443X),
3224 CLK("musb-omap2430", "ick", &usb_otg_hs_ick, CK_443X),
3225 CLK(NULL, "usb_phy_cm_clk32k", &usb_phy_cm_clk32k, CK_443X),
3226 CLK(NULL, "usb_tll_hs_usb_ch2_clk", &usb_tll_hs_usb_ch2_clk, CK_443X),
3227 CLK(NULL, "usb_tll_hs_usb_ch0_clk", &usb_tll_hs_usb_ch0_clk, CK_443X),
3228 CLK(NULL, "usb_tll_hs_usb_ch1_clk", &usb_tll_hs_usb_ch1_clk, CK_443X),
3229 CLK(NULL, "usb_tll_hs_ick", &usb_tll_hs_ick, CK_443X),
3230 CLK("usbhs-omap.0", "usbtll_ick", &usb_tll_hs_ick, CK_443X),
3231 CLK("usbhs-omap.0", "usbtll_fck", &dummy_ck, CK_443X),
3232 CLK(NULL, "usim_ck", &usim_ck, CK_443X),
3233 CLK(NULL, "usim_fclk", &usim_fclk, CK_443X),
2641 CLK(NULL, "usim_fck", &usim_fck, CK_443X), 3234 CLK(NULL, "usim_fck", &usim_fck, CK_443X),
2642 CLK("omap_wdt", "fck", &wdt2_fck, CK_443X), 3235 CLK("omap_wdt", "fck", &wd_timer2_fck, CK_443X),
2643 CLK(NULL, "wdt3_fck", &wdt3_fck, CK_443X), 3236 CLK(NULL, "mailboxes_ick", &dummy_ck, CK_443X),
2644 CLK(NULL, "otg_60m_gfclk_ck", &otg_60m_gfclk_ck, CK_443X), 3237 CLK(NULL, "wd_timer3_fck", &wd_timer3_fck, CK_443X),
2645 CLK(NULL, "stm_clk_div_ck", &stm_clk_div_ck, CK_443X), 3238 CLK(NULL, "stm_clk_div_ck", &stm_clk_div_ck, CK_443X),
2646 CLK(NULL, "trace_clk_div_ck", &trace_clk_div_ck, CK_443X), 3239 CLK(NULL, "trace_clk_div_ck", &trace_clk_div_ck, CK_443X),
2647 CLK(NULL, "usim_fclk", &usim_fclk, CK_443X),
2648 CLK(NULL, "utmi_p1_gfclk_ck", &utmi_p1_gfclk_ck, CK_443X),
2649 CLK(NULL, "utmi_p2_gfclk_ck", &utmi_p2_gfclk_ck, CK_443X),
2650 CLK(NULL, "gpio1_dbck", &dummy_ck, CK_443X),
2651 CLK(NULL, "gpio2_dbck", &dummy_ck, CK_443X),
2652 CLK(NULL, "gpio3_dbck", &dummy_ck, CK_443X),
2653 CLK(NULL, "gpio4_dbck", &dummy_ck, CK_443X),
2654 CLK(NULL, "gpio5_dbck", &dummy_ck, CK_443X),
2655 CLK(NULL, "gpio6_dbck", &dummy_ck, CK_443X),
2656 CLK(NULL, "gpmc_ck", &dummy_ck, CK_443X), 3240 CLK(NULL, "gpmc_ck", &dummy_ck, CK_443X),
2657 CLK(NULL, "gpt1_ick", &dummy_ck, CK_443X), 3241 CLK(NULL, "gpt1_ick", &dummy_ck, CK_443X),
2658 CLK(NULL, "gpt2_ick", &dummy_ck, CK_443X), 3242 CLK(NULL, "gpt2_ick", &dummy_ck, CK_443X),
@@ -2665,28 +3249,40 @@ static struct omap_clk omap44xx_clks[] = {
2665 CLK(NULL, "gpt9_ick", &dummy_ck, CK_443X), 3249 CLK(NULL, "gpt9_ick", &dummy_ck, CK_443X),
2666 CLK(NULL, "gpt10_ick", &dummy_ck, CK_443X), 3250 CLK(NULL, "gpt10_ick", &dummy_ck, CK_443X),
2667 CLK(NULL, "gpt11_ick", &dummy_ck, CK_443X), 3251 CLK(NULL, "gpt11_ick", &dummy_ck, CK_443X),
2668 CLK("i2c_omap.1", "ick", &dummy_ck, CK_443X), 3252 CLK("omap_i2c.1", "ick", &dummy_ck, CK_443X),
2669 CLK("i2c_omap.2", "ick", &dummy_ck, CK_443X), 3253 CLK("omap_i2c.2", "ick", &dummy_ck, CK_443X),
2670 CLK("i2c_omap.3", "ick", &dummy_ck, CK_443X), 3254 CLK("omap_i2c.3", "ick", &dummy_ck, CK_443X),
2671 CLK("i2c_omap.4", "ick", &dummy_ck, CK_443X), 3255 CLK("omap_i2c.4", "ick", &dummy_ck, CK_443X),
3256 CLK("omap_hsmmc.0", "ick", &dummy_ck, CK_443X),
3257 CLK("omap_hsmmc.1", "ick", &dummy_ck, CK_443X),
3258 CLK("omap_hsmmc.2", "ick", &dummy_ck, CK_443X),
3259 CLK("omap_hsmmc.3", "ick", &dummy_ck, CK_443X),
3260 CLK("omap_hsmmc.4", "ick", &dummy_ck, CK_443X),
2672 CLK("omap-mcbsp.1", "ick", &dummy_ck, CK_443X), 3261 CLK("omap-mcbsp.1", "ick", &dummy_ck, CK_443X),
2673 CLK("omap-mcbsp.2", "ick", &dummy_ck, CK_443X), 3262 CLK("omap-mcbsp.2", "ick", &dummy_ck, CK_443X),
2674 CLK("omap-mcbsp.3", "ick", &dummy_ck, CK_443X), 3263 CLK("omap-mcbsp.3", "ick", &dummy_ck, CK_443X),
2675 CLK("omap-mcbsp.4", "ick", &dummy_ck, CK_443X), 3264 CLK("omap-mcbsp.4", "ick", &dummy_ck, CK_443X),
2676 CLK("omap2_mcspi.1", "ick", &dummy_ck, CK_443X), 3265 CLK("omap2_mcspi.1", "ick", &dummy_ck, CK_443X),
2677 CLK("omap2_mcspi.2", "ick", &dummy_ck, CK_443X), 3266 CLK("omap2_mcspi.2", "ick", &dummy_ck, CK_443X),
2678 CLK("omap2_mcspi.3", "ick", &dummy_ck, CK_443X), 3267 CLK("omap2_mcspi.3", "ick", &dummy_ck, CK_443X),
2679 CLK("omap2_mcspi.4", "ick", &dummy_ck, CK_443X), 3268 CLK("omap2_mcspi.4", "ick", &dummy_ck, CK_443X),
2680 CLK("mmci-omap-hs.0", "ick", &dummy_ck, CK_443X),
2681 CLK("mmci-omap-hs.1", "ick", &dummy_ck, CK_443X),
2682 CLK("mmci-omap-hs.2", "ick", &dummy_ck, CK_443X),
2683 CLK("mmci-omap-hs.3", "ick", &dummy_ck, CK_443X),
2684 CLK("mmci-omap-hs.4", "ick", &dummy_ck, CK_443X),
2685 CLK(NULL, "uart1_ick", &dummy_ck, CK_443X), 3269 CLK(NULL, "uart1_ick", &dummy_ck, CK_443X),
2686 CLK(NULL, "uart2_ick", &dummy_ck, CK_443X), 3270 CLK(NULL, "uart2_ick", &dummy_ck, CK_443X),
2687 CLK(NULL, "uart3_ick", &dummy_ck, CK_443X), 3271 CLK(NULL, "uart3_ick", &dummy_ck, CK_443X),
2688 CLK(NULL, "uart4_ick", &dummy_ck, CK_443X), 3272 CLK(NULL, "uart4_ick", &dummy_ck, CK_443X),
2689 CLK("omap_wdt", "ick", &dummy_ck, CK_443X), 3273 CLK("omap_wdt", "ick", &dummy_ck, CK_443X),
3274 CLK(NULL, "auxclk0_ck", &auxclk0_ck, CK_443X),
3275 CLK(NULL, "auxclk1_ck", &auxclk1_ck, CK_443X),
3276 CLK(NULL, "auxclk2_ck", &auxclk2_ck, CK_443X),
3277 CLK(NULL, "auxclk3_ck", &auxclk3_ck, CK_443X),
3278 CLK(NULL, "auxclk4_ck", &auxclk4_ck, CK_443X),
3279 CLK(NULL, "auxclk5_ck", &auxclk5_ck, CK_443X),
3280 CLK(NULL, "auxclkreq0_ck", &auxclkreq0_ck, CK_443X),
3281 CLK(NULL, "auxclkreq1_ck", &auxclkreq1_ck, CK_443X),
3282 CLK(NULL, "auxclkreq2_ck", &auxclkreq2_ck, CK_443X),
3283 CLK(NULL, "auxclkreq3_ck", &auxclkreq3_ck, CK_443X),
3284 CLK(NULL, "auxclkreq4_ck", &auxclkreq4_ck, CK_443X),
3285 CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck, CK_443X),
2690}; 3286};
2691 3287
2692int __init omap4xxx_clk_init(void) 3288int __init omap4xxx_clk_init(void)
@@ -2713,6 +3309,9 @@ int __init omap4xxx_clk_init(void)
2713 omap2_init_clk_clkdm(c->lk.clk); 3309 omap2_init_clk_clkdm(c->lk.clk);
2714 } 3310 }
2715 3311
3312 /* Disable autoidle on all clocks; let the PM code enable it later */
3313 omap_clk_disable_autoidle_all();
3314
2716 recalculate_root_clocks(); 3315 recalculate_root_clocks();
2717 3316
2718 /* 3317 /*
diff --git a/arch/arm/mach-omap2/clock_common_data.c b/arch/arm/mach-omap2/clock_common_data.c
index 1cf8131205fa..6424d46be14a 100644
--- a/arch/arm/mach-omap2/clock_common_data.c
+++ b/arch/arm/mach-omap2/clock_common_data.c
@@ -37,3 +37,9 @@ const struct clksel_rate gfx_l3_rates[] = {
37 { .div = 0 } 37 { .div = 0 }
38}; 38};
39 39
40const struct clksel_rate dsp_ick_rates[] = {
41 { .div = 1, .val = 1, .flags = RATE_IN_24XX },
42 { .div = 2, .val = 2, .flags = RATE_IN_24XX },
43 { .div = 3, .val = 3, .flags = RATE_IN_243X },
44 { .div = 0 },
45};
diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c
index 5d80cb897489..6cb6c03293df 100644
--- a/arch/arm/mach-omap2/clockdomain.c
+++ b/arch/arm/mach-omap2/clockdomain.c
@@ -13,7 +13,6 @@
13 */ 13 */
14#undef DEBUG 14#undef DEBUG
15 15
16#include <linux/module.h>
17#include <linux/kernel.h> 16#include <linux/kernel.h>
18#include <linux/device.h> 17#include <linux/device.h>
19#include <linux/list.h> 18#include <linux/list.h>
@@ -27,14 +26,8 @@
27 26
28#include <linux/bitops.h> 27#include <linux/bitops.h>
29 28
30#include "prm.h"
31#include "prm-regbits-24xx.h"
32#include "cm.h"
33
34#include <plat/clock.h> 29#include <plat/clock.h>
35#include <plat/powerdomain.h> 30#include "clockdomain.h"
36#include <plat/clockdomain.h>
37#include <plat/prcm.h>
38 31
39/* clkdm_list contains all registered struct clockdomains */ 32/* clkdm_list contains all registered struct clockdomains */
40static LIST_HEAD(clkdm_list); 33static LIST_HEAD(clkdm_list);
@@ -42,6 +35,7 @@ static LIST_HEAD(clkdm_list);
42/* array of clockdomain deps to be added/removed when clkdm in hwsup mode */ 35/* array of clockdomain deps to be added/removed when clkdm in hwsup mode */
43static struct clkdm_autodep *autodeps; 36static struct clkdm_autodep *autodeps;
44 37
38static struct clkdm_ops *arch_clkdm;
45 39
46/* Private functions */ 40/* Private functions */
47 41
@@ -141,6 +135,9 @@ static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm,
141 * clockdomain is in hardware-supervised mode. Meant to be called 135 * clockdomain is in hardware-supervised mode. Meant to be called
142 * once at clockdomain layer initialization, since these should remain 136 * once at clockdomain layer initialization, since these should remain
143 * fixed for a particular architecture. No return value. 137 * fixed for a particular architecture. No return value.
138 *
139 * XXX autodeps are deprecated and should be removed at the earliest
140 * opportunity
144 */ 141 */
145static void _autodep_lookup(struct clkdm_autodep *autodep) 142static void _autodep_lookup(struct clkdm_autodep *autodep)
146{ 143{
@@ -168,12 +165,15 @@ static void _autodep_lookup(struct clkdm_autodep *autodep)
168 * Add the "autodep" sleep & wakeup dependencies to clockdomain 'clkdm' 165 * Add the "autodep" sleep & wakeup dependencies to clockdomain 'clkdm'
169 * in hardware-supervised mode. Meant to be called from clock framework 166 * in hardware-supervised mode. Meant to be called from clock framework
170 * when a clock inside clockdomain 'clkdm' is enabled. No return value. 167 * when a clock inside clockdomain 'clkdm' is enabled. No return value.
168 *
169 * XXX autodeps are deprecated and should be removed at the earliest
170 * opportunity
171 */ 171 */
172static void _clkdm_add_autodeps(struct clockdomain *clkdm) 172void _clkdm_add_autodeps(struct clockdomain *clkdm)
173{ 173{
174 struct clkdm_autodep *autodep; 174 struct clkdm_autodep *autodep;
175 175
176 if (!autodeps) 176 if (!autodeps || clkdm->flags & CLKDM_NO_AUTODEPS)
177 return; 177 return;
178 178
179 for (autodep = autodeps; autodep->clkdm.ptr; autodep++) { 179 for (autodep = autodeps; autodep->clkdm.ptr; autodep++) {
@@ -199,12 +199,15 @@ static void _clkdm_add_autodeps(struct clockdomain *clkdm)
199 * Remove the "autodep" sleep & wakeup dependencies from clockdomain 'clkdm' 199 * Remove the "autodep" sleep & wakeup dependencies from clockdomain 'clkdm'
200 * in hardware-supervised mode. Meant to be called from clock framework 200 * in hardware-supervised mode. Meant to be called from clock framework
201 * when a clock inside clockdomain 'clkdm' is disabled. No return value. 201 * when a clock inside clockdomain 'clkdm' is disabled. No return value.
202 *
203 * XXX autodeps are deprecated and should be removed at the earliest
204 * opportunity
202 */ 205 */
203static void _clkdm_del_autodeps(struct clockdomain *clkdm) 206void _clkdm_del_autodeps(struct clockdomain *clkdm)
204{ 207{
205 struct clkdm_autodep *autodep; 208 struct clkdm_autodep *autodep;
206 209
207 if (!autodeps) 210 if (!autodeps || clkdm->flags & CLKDM_NO_AUTODEPS)
208 return; 211 return;
209 212
210 for (autodep = autodeps; autodep->clkdm.ptr; autodep++) { 213 for (autodep = autodeps; autodep->clkdm.ptr; autodep++) {
@@ -223,138 +226,39 @@ static void _clkdm_del_autodeps(struct clockdomain *clkdm)
223 } 226 }
224} 227}
225 228
226/*
227 * _omap2_clkdm_set_hwsup - set the hwsup idle transition bit
228 * @clkdm: struct clockdomain *
229 * @enable: int 0 to disable, 1 to enable
230 *
231 * Internal helper for actually switching the bit that controls hwsup
232 * idle transitions for clkdm.
233 */
234static void _omap2_clkdm_set_hwsup(struct clockdomain *clkdm, int enable)
235{
236 u32 bits, v;
237
238 if (cpu_is_omap24xx()) {
239 if (enable)
240 bits = OMAP24XX_CLKSTCTRL_ENABLE_AUTO;
241 else
242 bits = OMAP24XX_CLKSTCTRL_DISABLE_AUTO;
243 } else if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
244 if (enable)
245 bits = OMAP34XX_CLKSTCTRL_ENABLE_AUTO;
246 else
247 bits = OMAP34XX_CLKSTCTRL_DISABLE_AUTO;
248 } else {
249 BUG();
250 }
251
252 bits = bits << __ffs(clkdm->clktrctrl_mask);
253
254 v = __raw_readl(clkdm->clkstctrl_reg);
255 v &= ~(clkdm->clktrctrl_mask);
256 v |= bits;
257 __raw_writel(v, clkdm->clkstctrl_reg);
258
259}
260
261/** 229/**
262 * _init_wkdep_usecount - initialize wkdep usecounts to match hardware 230 * _resolve_clkdm_deps() - resolve clkdm_names in @clkdm_deps to clkdms
263 * @clkdm: clockdomain to initialize wkdep usecounts 231 * @clkdm: clockdomain that we are resolving dependencies for
232 * @clkdm_deps: ptr to array of struct clkdm_deps to resolve
264 * 233 *
265 * Initialize the wakeup dependency usecount variables for clockdomain @clkdm. 234 * Iterates through @clkdm_deps, looking up the struct clockdomain named by
266 * If a wakeup dependency is present in the hardware, the usecount will be 235 * clkdm_name and storing the clockdomain pointer in the struct clkdm_dep.
267 * set to 1; otherwise, it will be set to 0. Software should clear all 236 * No return value.
268 * software wakeup dependencies prior to calling this function if it wishes
269 * to ensure that all usecounts start at 0. No return value.
270 */ 237 */
271static void _init_wkdep_usecount(struct clockdomain *clkdm) 238static void _resolve_clkdm_deps(struct clockdomain *clkdm,
239 struct clkdm_dep *clkdm_deps)
272{ 240{
273 u32 v;
274 struct clkdm_dep *cd; 241 struct clkdm_dep *cd;
275 242
276 if (!clkdm->wkdep_srcs) 243 for (cd = clkdm_deps; cd && cd->clkdm_name; cd++) {
277 return;
278
279 for (cd = clkdm->wkdep_srcs; cd->clkdm_name; cd++) {
280 if (!omap_chip_is(cd->omap_chip)) 244 if (!omap_chip_is(cd->omap_chip))
281 continue; 245 continue;
282 246 if (cd->clkdm)
283 if (!cd->clkdm && cd->clkdm_name)
284 cd->clkdm = _clkdm_lookup(cd->clkdm_name);
285
286 if (!cd->clkdm) {
287 WARN(!cd->clkdm, "clockdomain: %s: wkdep clkdm %s not "
288 "found\n", clkdm->name, cd->clkdm_name);
289 continue; 247 continue;
290 } 248 cd->clkdm = _clkdm_lookup(cd->clkdm_name);
291
292 v = prm_read_mod_bits_shift(clkdm->pwrdm.ptr->prcm_offs,
293 PM_WKDEP,
294 (1 << cd->clkdm->dep_bit));
295 249
296 if (v) 250 WARN(!cd->clkdm, "clockdomain: %s: could not find clkdm %s while resolving dependencies - should never happen",
297 pr_debug("clockdomain: %s: wakeup dependency already " 251 clkdm->name, cd->clkdm_name);
298 "set to wake up when %s wakes\n",
299 clkdm->name, cd->clkdm->name);
300
301 atomic_set(&cd->wkdep_usecount, (v) ? 1 : 0);
302 } 252 }
303} 253}
304 254
305/**
306 * _init_sleepdep_usecount - initialize sleepdep usecounts to match hardware
307 * @clkdm: clockdomain to initialize sleepdep usecounts
308 *
309 * Initialize the sleep dependency usecount variables for clockdomain @clkdm.
310 * If a sleep dependency is present in the hardware, the usecount will be
311 * set to 1; otherwise, it will be set to 0. Software should clear all
312 * software sleep dependencies prior to calling this function if it wishes
313 * to ensure that all usecounts start at 0. No return value.
314 */
315static void _init_sleepdep_usecount(struct clockdomain *clkdm)
316{
317 u32 v;
318 struct clkdm_dep *cd;
319
320 if (!cpu_is_omap34xx())
321 return;
322
323 if (!clkdm->sleepdep_srcs)
324 return;
325
326 for (cd = clkdm->sleepdep_srcs; cd->clkdm_name; cd++) {
327 if (!omap_chip_is(cd->omap_chip))
328 continue;
329
330 if (!cd->clkdm && cd->clkdm_name)
331 cd->clkdm = _clkdm_lookup(cd->clkdm_name);
332
333 if (!cd->clkdm) {
334 WARN(!cd->clkdm, "clockdomain: %s: sleepdep clkdm %s "
335 "not found\n", clkdm->name, cd->clkdm_name);
336 continue;
337 }
338
339 v = prm_read_mod_bits_shift(clkdm->pwrdm.ptr->prcm_offs,
340 OMAP3430_CM_SLEEPDEP,
341 (1 << cd->clkdm->dep_bit));
342
343 if (v)
344 pr_debug("clockdomain: %s: sleep dependency already "
345 "set to prevent from idling until %s "
346 "idles\n", clkdm->name, cd->clkdm->name);
347
348 atomic_set(&cd->sleepdep_usecount, (v) ? 1 : 0);
349 }
350};
351
352/* Public functions */ 255/* Public functions */
353 256
354/** 257/**
355 * clkdm_init - set up the clockdomain layer 258 * clkdm_init - set up the clockdomain layer
356 * @clkdms: optional pointer to an array of clockdomains to register 259 * @clkdms: optional pointer to an array of clockdomains to register
357 * @init_autodeps: optional pointer to an array of autodeps to register 260 * @init_autodeps: optional pointer to an array of autodeps to register
261 * @custom_funcs: func pointers for arch specific implementations
358 * 262 *
359 * Set up internal state. If a pointer to an array of clockdomains 263 * Set up internal state. If a pointer to an array of clockdomains
360 * @clkdms was supplied, loop through the list of clockdomains, 264 * @clkdms was supplied, loop through the list of clockdomains,
@@ -363,12 +267,18 @@ static void _init_sleepdep_usecount(struct clockdomain *clkdm)
363 * @init_autodeps was provided, register those. No return value. 267 * @init_autodeps was provided, register those. No return value.
364 */ 268 */
365void clkdm_init(struct clockdomain **clkdms, 269void clkdm_init(struct clockdomain **clkdms,
366 struct clkdm_autodep *init_autodeps) 270 struct clkdm_autodep *init_autodeps,
271 struct clkdm_ops *custom_funcs)
367{ 272{
368 struct clockdomain **c = NULL; 273 struct clockdomain **c = NULL;
369 struct clockdomain *clkdm; 274 struct clockdomain *clkdm;
370 struct clkdm_autodep *autodep = NULL; 275 struct clkdm_autodep *autodep = NULL;
371 276
277 if (!custom_funcs)
278 WARN(1, "No custom clkdm functions registered\n");
279 else
280 arch_clkdm = custom_funcs;
281
372 if (clkdms) 282 if (clkdms)
373 for (c = clkdms; *c; c++) 283 for (c = clkdms; *c; c++)
374 _clkdm_register(*c); 284 _clkdm_register(*c);
@@ -379,12 +289,20 @@ void clkdm_init(struct clockdomain **clkdms,
379 _autodep_lookup(autodep); 289 _autodep_lookup(autodep);
380 290
381 /* 291 /*
382 * Ensure that the *dep_usecount registers reflect the current 292 * Put all clockdomains into software-supervised mode; PM code
383 * state of the PRCM. 293 * should later enable hardware-supervised mode as appropriate
384 */ 294 */
385 list_for_each_entry(clkdm, &clkdm_list, node) { 295 list_for_each_entry(clkdm, &clkdm_list, node) {
386 _init_wkdep_usecount(clkdm); 296 if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP)
387 _init_sleepdep_usecount(clkdm); 297 clkdm_wakeup(clkdm);
298 else if (clkdm->flags & CLKDM_CAN_DISABLE_AUTO)
299 clkdm_deny_idle(clkdm);
300
301 _resolve_clkdm_deps(clkdm, clkdm->wkdep_srcs);
302 clkdm_clear_all_wkdeps(clkdm);
303
304 _resolve_clkdm_deps(clkdm, clkdm->sleepdep_srcs);
305 clkdm_clear_all_sleepdeps(clkdm);
388 } 306 }
389} 307}
390 308
@@ -480,26 +398,32 @@ struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm)
480int clkdm_add_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) 398int clkdm_add_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
481{ 399{
482 struct clkdm_dep *cd; 400 struct clkdm_dep *cd;
401 int ret = 0;
483 402
484 if (!clkdm1 || !clkdm2) 403 if (!clkdm1 || !clkdm2)
485 return -EINVAL; 404 return -EINVAL;
486 405
487 cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs); 406 cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs);
488 if (IS_ERR(cd)) { 407 if (IS_ERR(cd))
408 ret = PTR_ERR(cd);
409
410 if (!arch_clkdm || !arch_clkdm->clkdm_add_wkdep)
411 ret = -EINVAL;
412
413 if (ret) {
489 pr_debug("clockdomain: hardware cannot set/clear wake up of " 414 pr_debug("clockdomain: hardware cannot set/clear wake up of "
490 "%s when %s wakes up\n", clkdm1->name, clkdm2->name); 415 "%s when %s wakes up\n", clkdm1->name, clkdm2->name);
491 return PTR_ERR(cd); 416 return ret;
492 } 417 }
493 418
494 if (atomic_inc_return(&cd->wkdep_usecount) == 1) { 419 if (atomic_inc_return(&cd->wkdep_usecount) == 1) {
495 pr_debug("clockdomain: hardware will wake up %s when %s wakes " 420 pr_debug("clockdomain: hardware will wake up %s when %s wakes "
496 "up\n", clkdm1->name, clkdm2->name); 421 "up\n", clkdm1->name, clkdm2->name);
497 422
498 prm_set_mod_reg_bits((1 << clkdm2->dep_bit), 423 ret = arch_clkdm->clkdm_add_wkdep(clkdm1, clkdm2);
499 clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP);
500 } 424 }
501 425
502 return 0; 426 return ret;
503} 427}
504 428
505/** 429/**
@@ -515,26 +439,32 @@ int clkdm_add_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
515int clkdm_del_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) 439int clkdm_del_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
516{ 440{
517 struct clkdm_dep *cd; 441 struct clkdm_dep *cd;
442 int ret = 0;
518 443
519 if (!clkdm1 || !clkdm2) 444 if (!clkdm1 || !clkdm2)
520 return -EINVAL; 445 return -EINVAL;
521 446
522 cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs); 447 cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs);
523 if (IS_ERR(cd)) { 448 if (IS_ERR(cd))
449 ret = PTR_ERR(cd);
450
451 if (!arch_clkdm || !arch_clkdm->clkdm_del_wkdep)
452 ret = -EINVAL;
453
454 if (ret) {
524 pr_debug("clockdomain: hardware cannot set/clear wake up of " 455 pr_debug("clockdomain: hardware cannot set/clear wake up of "
525 "%s when %s wakes up\n", clkdm1->name, clkdm2->name); 456 "%s when %s wakes up\n", clkdm1->name, clkdm2->name);
526 return PTR_ERR(cd); 457 return ret;
527 } 458 }
528 459
529 if (atomic_dec_return(&cd->wkdep_usecount) == 0) { 460 if (atomic_dec_return(&cd->wkdep_usecount) == 0) {
530 pr_debug("clockdomain: hardware will no longer wake up %s " 461 pr_debug("clockdomain: hardware will no longer wake up %s "
531 "after %s wakes up\n", clkdm1->name, clkdm2->name); 462 "after %s wakes up\n", clkdm1->name, clkdm2->name);
532 463
533 prm_clear_mod_reg_bits((1 << clkdm2->dep_bit), 464 ret = arch_clkdm->clkdm_del_wkdep(clkdm1, clkdm2);
534 clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP);
535 } 465 }
536 466
537 return 0; 467 return ret;
538} 468}
539 469
540/** 470/**
@@ -554,20 +484,26 @@ int clkdm_del_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
554int clkdm_read_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) 484int clkdm_read_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
555{ 485{
556 struct clkdm_dep *cd; 486 struct clkdm_dep *cd;
487 int ret = 0;
557 488
558 if (!clkdm1 || !clkdm2) 489 if (!clkdm1 || !clkdm2)
559 return -EINVAL; 490 return -EINVAL;
560 491
561 cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs); 492 cd = _clkdm_deps_lookup(clkdm2, clkdm1->wkdep_srcs);
562 if (IS_ERR(cd)) { 493 if (IS_ERR(cd))
494 ret = PTR_ERR(cd);
495
496 if (!arch_clkdm || !arch_clkdm->clkdm_read_wkdep)
497 ret = -EINVAL;
498
499 if (ret) {
563 pr_debug("clockdomain: hardware cannot set/clear wake up of " 500 pr_debug("clockdomain: hardware cannot set/clear wake up of "
564 "%s when %s wakes up\n", clkdm1->name, clkdm2->name); 501 "%s when %s wakes up\n", clkdm1->name, clkdm2->name);
565 return PTR_ERR(cd); 502 return ret;
566 } 503 }
567 504
568 /* XXX It's faster to return the atomic wkdep_usecount */ 505 /* XXX It's faster to return the atomic wkdep_usecount */
569 return prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP, 506 return arch_clkdm->clkdm_read_wkdep(clkdm1, clkdm2);
570 (1 << clkdm2->dep_bit));
571} 507}
572 508
573/** 509/**
@@ -582,24 +518,13 @@ int clkdm_read_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
582 */ 518 */
583int clkdm_clear_all_wkdeps(struct clockdomain *clkdm) 519int clkdm_clear_all_wkdeps(struct clockdomain *clkdm)
584{ 520{
585 struct clkdm_dep *cd;
586 u32 mask = 0;
587
588 if (!clkdm) 521 if (!clkdm)
589 return -EINVAL; 522 return -EINVAL;
590 523
591 for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) { 524 if (!arch_clkdm || !arch_clkdm->clkdm_clear_all_wkdeps)
592 if (!omap_chip_is(cd->omap_chip)) 525 return -EINVAL;
593 continue;
594
595 /* PRM accesses are slow, so minimize them */
596 mask |= 1 << cd->clkdm->dep_bit;
597 atomic_set(&cd->wkdep_usecount, 0);
598 }
599
600 prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs, PM_WKDEP);
601 526
602 return 0; 527 return arch_clkdm->clkdm_clear_all_wkdeps(clkdm);
603} 528}
604 529
605/** 530/**
@@ -617,31 +542,33 @@ int clkdm_clear_all_wkdeps(struct clockdomain *clkdm)
617int clkdm_add_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) 542int clkdm_add_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
618{ 543{
619 struct clkdm_dep *cd; 544 struct clkdm_dep *cd;
620 545 int ret = 0;
621 if (!cpu_is_omap34xx())
622 return -EINVAL;
623 546
624 if (!clkdm1 || !clkdm2) 547 if (!clkdm1 || !clkdm2)
625 return -EINVAL; 548 return -EINVAL;
626 549
627 cd = _clkdm_deps_lookup(clkdm2, clkdm1->sleepdep_srcs); 550 cd = _clkdm_deps_lookup(clkdm2, clkdm1->sleepdep_srcs);
628 if (IS_ERR(cd)) { 551 if (IS_ERR(cd))
552 ret = PTR_ERR(cd);
553
554 if (!arch_clkdm || !arch_clkdm->clkdm_add_sleepdep)
555 ret = -EINVAL;
556
557 if (ret) {
629 pr_debug("clockdomain: hardware cannot set/clear sleep " 558 pr_debug("clockdomain: hardware cannot set/clear sleep "
630 "dependency affecting %s from %s\n", clkdm1->name, 559 "dependency affecting %s from %s\n", clkdm1->name,
631 clkdm2->name); 560 clkdm2->name);
632 return PTR_ERR(cd); 561 return ret;
633 } 562 }
634 563
635 if (atomic_inc_return(&cd->sleepdep_usecount) == 1) { 564 if (atomic_inc_return(&cd->sleepdep_usecount) == 1) {
636 pr_debug("clockdomain: will prevent %s from sleeping if %s " 565 pr_debug("clockdomain: will prevent %s from sleeping if %s "
637 "is active\n", clkdm1->name, clkdm2->name); 566 "is active\n", clkdm1->name, clkdm2->name);
638 567
639 cm_set_mod_reg_bits((1 << clkdm2->dep_bit), 568 ret = arch_clkdm->clkdm_add_sleepdep(clkdm1, clkdm2);
640 clkdm1->pwrdm.ptr->prcm_offs,
641 OMAP3430_CM_SLEEPDEP);
642 } 569 }
643 570
644 return 0; 571 return ret;
645} 572}
646 573
647/** 574/**
@@ -659,19 +586,23 @@ int clkdm_add_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
659int clkdm_del_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) 586int clkdm_del_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
660{ 587{
661 struct clkdm_dep *cd; 588 struct clkdm_dep *cd;
662 589 int ret = 0;
663 if (!cpu_is_omap34xx())
664 return -EINVAL;
665 590
666 if (!clkdm1 || !clkdm2) 591 if (!clkdm1 || !clkdm2)
667 return -EINVAL; 592 return -EINVAL;
668 593
669 cd = _clkdm_deps_lookup(clkdm2, clkdm1->sleepdep_srcs); 594 cd = _clkdm_deps_lookup(clkdm2, clkdm1->sleepdep_srcs);
670 if (IS_ERR(cd)) { 595 if (IS_ERR(cd))
596 ret = PTR_ERR(cd);
597
598 if (!arch_clkdm || !arch_clkdm->clkdm_del_sleepdep)
599 ret = -EINVAL;
600
601 if (ret) {
671 pr_debug("clockdomain: hardware cannot set/clear sleep " 602 pr_debug("clockdomain: hardware cannot set/clear sleep "
672 "dependency affecting %s from %s\n", clkdm1->name, 603 "dependency affecting %s from %s\n", clkdm1->name,
673 clkdm2->name); 604 clkdm2->name);
674 return PTR_ERR(cd); 605 return ret;
675 } 606 }
676 607
677 if (atomic_dec_return(&cd->sleepdep_usecount) == 0) { 608 if (atomic_dec_return(&cd->sleepdep_usecount) == 0) {
@@ -679,12 +610,10 @@ int clkdm_del_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
679 "sleeping if %s is active\n", clkdm1->name, 610 "sleeping if %s is active\n", clkdm1->name,
680 clkdm2->name); 611 clkdm2->name);
681 612
682 cm_clear_mod_reg_bits((1 << clkdm2->dep_bit), 613 ret = arch_clkdm->clkdm_del_sleepdep(clkdm1, clkdm2);
683 clkdm1->pwrdm.ptr->prcm_offs,
684 OMAP3430_CM_SLEEPDEP);
685 } 614 }
686 615
687 return 0; 616 return ret;
688} 617}
689 618
690/** 619/**
@@ -706,25 +635,27 @@ int clkdm_del_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
706int clkdm_read_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2) 635int clkdm_read_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
707{ 636{
708 struct clkdm_dep *cd; 637 struct clkdm_dep *cd;
709 638 int ret = 0;
710 if (!cpu_is_omap34xx())
711 return -EINVAL;
712 639
713 if (!clkdm1 || !clkdm2) 640 if (!clkdm1 || !clkdm2)
714 return -EINVAL; 641 return -EINVAL;
715 642
716 cd = _clkdm_deps_lookup(clkdm2, clkdm1->sleepdep_srcs); 643 cd = _clkdm_deps_lookup(clkdm2, clkdm1->sleepdep_srcs);
717 if (IS_ERR(cd)) { 644 if (IS_ERR(cd))
645 ret = PTR_ERR(cd);
646
647 if (!arch_clkdm || !arch_clkdm->clkdm_read_sleepdep)
648 ret = -EINVAL;
649
650 if (ret) {
718 pr_debug("clockdomain: hardware cannot set/clear sleep " 651 pr_debug("clockdomain: hardware cannot set/clear sleep "
719 "dependency affecting %s from %s\n", clkdm1->name, 652 "dependency affecting %s from %s\n", clkdm1->name,
720 clkdm2->name); 653 clkdm2->name);
721 return PTR_ERR(cd); 654 return ret;
722 } 655 }
723 656
724 /* XXX It's faster to return the atomic sleepdep_usecount */ 657 /* XXX It's faster to return the atomic sleepdep_usecount */
725 return prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs, 658 return arch_clkdm->clkdm_read_sleepdep(clkdm1, clkdm2);
726 OMAP3430_CM_SLEEPDEP,
727 (1 << clkdm2->dep_bit));
728} 659}
729 660
730/** 661/**
@@ -739,54 +670,17 @@ int clkdm_read_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2)
739 */ 670 */
740int clkdm_clear_all_sleepdeps(struct clockdomain *clkdm) 671int clkdm_clear_all_sleepdeps(struct clockdomain *clkdm)
741{ 672{
742 struct clkdm_dep *cd;
743 u32 mask = 0;
744
745 if (!cpu_is_omap34xx())
746 return -EINVAL;
747
748 if (!clkdm) 673 if (!clkdm)
749 return -EINVAL; 674 return -EINVAL;
750 675
751 for (cd = clkdm->sleepdep_srcs; cd && cd->clkdm_name; cd++) { 676 if (!arch_clkdm || !arch_clkdm->clkdm_clear_all_sleepdeps)
752 if (!omap_chip_is(cd->omap_chip))
753 continue;
754
755 /* PRM accesses are slow, so minimize them */
756 mask |= 1 << cd->clkdm->dep_bit;
757 atomic_set(&cd->sleepdep_usecount, 0);
758 }
759
760 prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs,
761 OMAP3430_CM_SLEEPDEP);
762
763 return 0;
764}
765
766/**
767 * omap2_clkdm_clktrctrl_read - read the clkdm's current state transition mode
768 * @clkdm: struct clkdm * of a clockdomain
769 *
770 * Return the clockdomain @clkdm current state transition mode from the
771 * corresponding domain CM_CLKSTCTRL register. Returns -EINVAL if @clkdm
772 * is NULL or the current mode upon success.
773 */
774static int omap2_clkdm_clktrctrl_read(struct clockdomain *clkdm)
775{
776 u32 v;
777
778 if (!clkdm)
779 return -EINVAL; 677 return -EINVAL;
780 678
781 v = __raw_readl(clkdm->clkstctrl_reg); 679 return arch_clkdm->clkdm_clear_all_sleepdeps(clkdm);
782 v &= clkdm->clktrctrl_mask;
783 v >>= __ffs(clkdm->clktrctrl_mask);
784
785 return v;
786} 680}
787 681
788/** 682/**
789 * omap2_clkdm_sleep - force clockdomain sleep transition 683 * clkdm_sleep - force clockdomain sleep transition
790 * @clkdm: struct clockdomain * 684 * @clkdm: struct clockdomain *
791 * 685 *
792 * Instruct the CM to force a sleep transition on the specified 686 * Instruct the CM to force a sleep transition on the specified
@@ -794,7 +688,7 @@ static int omap2_clkdm_clktrctrl_read(struct clockdomain *clkdm)
794 * clockdomain does not support software-initiated sleep; 0 upon 688 * clockdomain does not support software-initiated sleep; 0 upon
795 * success. 689 * success.
796 */ 690 */
797int omap2_clkdm_sleep(struct clockdomain *clkdm) 691int clkdm_sleep(struct clockdomain *clkdm)
798{ 692{
799 if (!clkdm) 693 if (!clkdm)
800 return -EINVAL; 694 return -EINVAL;
@@ -805,32 +699,16 @@ int omap2_clkdm_sleep(struct clockdomain *clkdm)
805 return -EINVAL; 699 return -EINVAL;
806 } 700 }
807 701
808 pr_debug("clockdomain: forcing sleep on %s\n", clkdm->name); 702 if (!arch_clkdm || !arch_clkdm->clkdm_sleep)
809 703 return -EINVAL;
810 if (cpu_is_omap24xx()) {
811
812 cm_set_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
813 clkdm->pwrdm.ptr->prcm_offs, OMAP2_PM_PWSTCTRL);
814
815 } else if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
816
817 u32 bits = (OMAP34XX_CLKSTCTRL_FORCE_SLEEP <<
818 __ffs(clkdm->clktrctrl_mask));
819
820 u32 v = __raw_readl(clkdm->clkstctrl_reg);
821 v &= ~(clkdm->clktrctrl_mask);
822 v |= bits;
823 __raw_writel(v, clkdm->clkstctrl_reg);
824 704
825 } else { 705 pr_debug("clockdomain: forcing sleep on %s\n", clkdm->name);
826 BUG();
827 };
828 706
829 return 0; 707 return arch_clkdm->clkdm_sleep(clkdm);
830} 708}
831 709
832/** 710/**
833 * omap2_clkdm_wakeup - force clockdomain wakeup transition 711 * clkdm_wakeup - force clockdomain wakeup transition
834 * @clkdm: struct clockdomain * 712 * @clkdm: struct clockdomain *
835 * 713 *
836 * Instruct the CM to force a wakeup transition on the specified 714 * Instruct the CM to force a wakeup transition on the specified
@@ -838,7 +716,7 @@ int omap2_clkdm_sleep(struct clockdomain *clkdm)
838 * clockdomain does not support software-controlled wakeup; 0 upon 716 * clockdomain does not support software-controlled wakeup; 0 upon
839 * success. 717 * success.
840 */ 718 */
841int omap2_clkdm_wakeup(struct clockdomain *clkdm) 719int clkdm_wakeup(struct clockdomain *clkdm)
842{ 720{
843 if (!clkdm) 721 if (!clkdm)
844 return -EINVAL; 722 return -EINVAL;
@@ -849,32 +727,16 @@ int omap2_clkdm_wakeup(struct clockdomain *clkdm)
849 return -EINVAL; 727 return -EINVAL;
850 } 728 }
851 729
852 pr_debug("clockdomain: forcing wakeup on %s\n", clkdm->name); 730 if (!arch_clkdm || !arch_clkdm->clkdm_wakeup)
853 731 return -EINVAL;
854 if (cpu_is_omap24xx()) {
855
856 cm_clear_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
857 clkdm->pwrdm.ptr->prcm_offs, OMAP2_PM_PWSTCTRL);
858
859 } else if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
860
861 u32 bits = (OMAP34XX_CLKSTCTRL_FORCE_WAKEUP <<
862 __ffs(clkdm->clktrctrl_mask));
863
864 u32 v = __raw_readl(clkdm->clkstctrl_reg);
865 v &= ~(clkdm->clktrctrl_mask);
866 v |= bits;
867 __raw_writel(v, clkdm->clkstctrl_reg);
868 732
869 } else { 733 pr_debug("clockdomain: forcing wakeup on %s\n", clkdm->name);
870 BUG();
871 };
872 734
873 return 0; 735 return arch_clkdm->clkdm_wakeup(clkdm);
874} 736}
875 737
876/** 738/**
877 * omap2_clkdm_allow_idle - enable hwsup idle transitions for clkdm 739 * clkdm_allow_idle - enable hwsup idle transitions for clkdm
878 * @clkdm: struct clockdomain * 740 * @clkdm: struct clockdomain *
879 * 741 *
880 * Allow the hardware to automatically switch the clockdomain @clkdm into 742 * Allow the hardware to automatically switch the clockdomain @clkdm into
@@ -883,7 +745,7 @@ int omap2_clkdm_wakeup(struct clockdomain *clkdm)
883 * framework, wkdep/sleepdep autodependencies are added; this is so 745 * framework, wkdep/sleepdep autodependencies are added; this is so
884 * device drivers can read and write to the device. No return value. 746 * device drivers can read and write to the device. No return value.
885 */ 747 */
886void omap2_clkdm_allow_idle(struct clockdomain *clkdm) 748void clkdm_allow_idle(struct clockdomain *clkdm)
887{ 749{
888 if (!clkdm) 750 if (!clkdm)
889 return; 751 return;
@@ -894,28 +756,18 @@ void omap2_clkdm_allow_idle(struct clockdomain *clkdm)
894 return; 756 return;
895 } 757 }
896 758
759 if (!arch_clkdm || !arch_clkdm->clkdm_allow_idle)
760 return;
761
897 pr_debug("clockdomain: enabling automatic idle transitions for %s\n", 762 pr_debug("clockdomain: enabling automatic idle transitions for %s\n",
898 clkdm->name); 763 clkdm->name);
899 764
900 /* 765 arch_clkdm->clkdm_allow_idle(clkdm);
901 * XXX This should be removed once TI adds wakeup/sleep
902 * dependency code and data for OMAP4.
903 */
904 if (cpu_is_omap44xx()) {
905 WARN_ONCE(1, "clockdomain: OMAP4 wakeup/sleep dependency "
906 "support is not yet implemented\n");
907 } else {
908 if (atomic_read(&clkdm->usecount) > 0)
909 _clkdm_add_autodeps(clkdm);
910 }
911
912 _omap2_clkdm_set_hwsup(clkdm, 1);
913
914 pwrdm_clkdm_state_switch(clkdm); 766 pwrdm_clkdm_state_switch(clkdm);
915} 767}
916 768
917/** 769/**
918 * omap2_clkdm_deny_idle - disable hwsup idle transitions for clkdm 770 * clkdm_deny_idle - disable hwsup idle transitions for clkdm
919 * @clkdm: struct clockdomain * 771 * @clkdm: struct clockdomain *
920 * 772 *
921 * Prevent the hardware from automatically switching the clockdomain 773 * Prevent the hardware from automatically switching the clockdomain
@@ -923,7 +775,7 @@ void omap2_clkdm_allow_idle(struct clockdomain *clkdm)
923 * downstream clocks enabled in the clock framework, wkdep/sleepdep 775 * downstream clocks enabled in the clock framework, wkdep/sleepdep
924 * autodependencies are removed. No return value. 776 * autodependencies are removed. No return value.
925 */ 777 */
926void omap2_clkdm_deny_idle(struct clockdomain *clkdm) 778void clkdm_deny_idle(struct clockdomain *clkdm)
927{ 779{
928 if (!clkdm) 780 if (!clkdm)
929 return; 781 return;
@@ -934,29 +786,20 @@ void omap2_clkdm_deny_idle(struct clockdomain *clkdm)
934 return; 786 return;
935 } 787 }
936 788
789 if (!arch_clkdm || !arch_clkdm->clkdm_deny_idle)
790 return;
791
937 pr_debug("clockdomain: disabling automatic idle transitions for %s\n", 792 pr_debug("clockdomain: disabling automatic idle transitions for %s\n",
938 clkdm->name); 793 clkdm->name);
939 794
940 _omap2_clkdm_set_hwsup(clkdm, 0); 795 arch_clkdm->clkdm_deny_idle(clkdm);
941
942 /*
943 * XXX This should be removed once TI adds wakeup/sleep
944 * dependency code and data for OMAP4.
945 */
946 if (cpu_is_omap44xx()) {
947 WARN_ONCE(1, "clockdomain: OMAP4 wakeup/sleep dependency "
948 "support is not yet implemented\n");
949 } else {
950 if (atomic_read(&clkdm->usecount) > 0)
951 _clkdm_del_autodeps(clkdm);
952 }
953} 796}
954 797
955 798
956/* Clockdomain-to-clock framework interface code */ 799/* Clockdomain-to-clock framework interface code */
957 800
958/** 801/**
959 * omap2_clkdm_clk_enable - add an enabled downstream clock to this clkdm 802 * clkdm_clk_enable - add an enabled downstream clock to this clkdm
960 * @clkdm: struct clockdomain * 803 * @clkdm: struct clockdomain *
961 * @clk: struct clk * of the enabled downstream clock 804 * @clk: struct clk * of the enabled downstream clock
962 * 805 *
@@ -969,10 +812,8 @@ void omap2_clkdm_deny_idle(struct clockdomain *clkdm)
969 * by on-chip processors. Returns -EINVAL if passed null pointers; 812 * by on-chip processors. Returns -EINVAL if passed null pointers;
970 * returns 0 upon success or if the clockdomain is in hwsup idle mode. 813 * returns 0 upon success or if the clockdomain is in hwsup idle mode.
971 */ 814 */
972int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) 815int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
973{ 816{
974 int v;
975
976 /* 817 /*
977 * XXX Rewrite this code to maintain a list of enabled 818 * XXX Rewrite this code to maintain a list of enabled
978 * downstream clocks for debugging purposes? 819 * downstream clocks for debugging purposes?
@@ -981,6 +822,9 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
981 if (!clkdm || !clk) 822 if (!clkdm || !clk)
982 return -EINVAL; 823 return -EINVAL;
983 824
825 if (!arch_clkdm || !arch_clkdm->clkdm_clk_enable)
826 return -EINVAL;
827
984 if (atomic_inc_return(&clkdm->usecount) > 1) 828 if (atomic_inc_return(&clkdm->usecount) > 1)
985 return 0; 829 return 0;
986 830
@@ -989,21 +833,7 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
989 pr_debug("clockdomain: clkdm %s: clk %s now enabled\n", clkdm->name, 833 pr_debug("clockdomain: clkdm %s: clk %s now enabled\n", clkdm->name,
990 clk->name); 834 clk->name);
991 835
992 if (!clkdm->clkstctrl_reg) 836 arch_clkdm->clkdm_clk_enable(clkdm);
993 return 0;
994
995 v = omap2_clkdm_clktrctrl_read(clkdm);
996
997 if ((cpu_is_omap34xx() && v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ||
998 (cpu_is_omap24xx() && v == OMAP24XX_CLKSTCTRL_ENABLE_AUTO)) {
999 /* Disable HW transitions when we are changing deps */
1000 _omap2_clkdm_set_hwsup(clkdm, 0);
1001 _clkdm_add_autodeps(clkdm);
1002 _omap2_clkdm_set_hwsup(clkdm, 1);
1003 } else {
1004 omap2_clkdm_wakeup(clkdm);
1005 }
1006
1007 pwrdm_wait_transition(clkdm->pwrdm.ptr); 837 pwrdm_wait_transition(clkdm->pwrdm.ptr);
1008 pwrdm_clkdm_state_switch(clkdm); 838 pwrdm_clkdm_state_switch(clkdm);
1009 839
@@ -1011,7 +841,7 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
1011} 841}
1012 842
1013/** 843/**
1014 * omap2_clkdm_clk_disable - remove an enabled downstream clock from this clkdm 844 * clkdm_clk_disable - remove an enabled downstream clock from this clkdm
1015 * @clkdm: struct clockdomain * 845 * @clkdm: struct clockdomain *
1016 * @clk: struct clk * of the disabled downstream clock 846 * @clk: struct clk * of the disabled downstream clock
1017 * 847 *
@@ -1024,10 +854,8 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk)
1024 * is enabled; or returns 0 upon success or if the clockdomain is in 854 * is enabled; or returns 0 upon success or if the clockdomain is in
1025 * hwsup idle mode. 855 * hwsup idle mode.
1026 */ 856 */
1027int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) 857int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk)
1028{ 858{
1029 int v;
1030
1031 /* 859 /*
1032 * XXX Rewrite this code to maintain a list of enabled 860 * XXX Rewrite this code to maintain a list of enabled
1033 * downstream clocks for debugging purposes? 861 * downstream clocks for debugging purposes?
@@ -1036,6 +864,9 @@ int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk)
1036 if (!clkdm || !clk) 864 if (!clkdm || !clk)
1037 return -EINVAL; 865 return -EINVAL;
1038 866
867 if (!arch_clkdm || !arch_clkdm->clkdm_clk_disable)
868 return -EINVAL;
869
1039#ifdef DEBUG 870#ifdef DEBUG
1040 if (atomic_read(&clkdm->usecount) == 0) { 871 if (atomic_read(&clkdm->usecount) == 0) {
1041 WARN_ON(1); /* underflow */ 872 WARN_ON(1); /* underflow */
@@ -1051,21 +882,7 @@ int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk)
1051 pr_debug("clockdomain: clkdm %s: clk %s now disabled\n", clkdm->name, 882 pr_debug("clockdomain: clkdm %s: clk %s now disabled\n", clkdm->name,
1052 clk->name); 883 clk->name);
1053 884
1054 if (!clkdm->clkstctrl_reg) 885 arch_clkdm->clkdm_clk_disable(clkdm);
1055 return 0;
1056
1057 v = omap2_clkdm_clktrctrl_read(clkdm);
1058
1059 if ((cpu_is_omap34xx() && v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ||
1060 (cpu_is_omap24xx() && v == OMAP24XX_CLKSTCTRL_ENABLE_AUTO)) {
1061 /* Disable HW transitions when we are changing deps */
1062 _omap2_clkdm_set_hwsup(clkdm, 0);
1063 _clkdm_del_autodeps(clkdm);
1064 _omap2_clkdm_set_hwsup(clkdm, 1);
1065 } else {
1066 omap2_clkdm_sleep(clkdm);
1067 }
1068
1069 pwrdm_clkdm_state_switch(clkdm); 886 pwrdm_clkdm_state_switch(clkdm);
1070 887
1071 return 0; 888 return 0;
diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h
new file mode 100644
index 000000000000..5823584d9cd7
--- /dev/null
+++ b/arch/arm/mach-omap2/clockdomain.h
@@ -0,0 +1,197 @@
1/*
2 * arch/arm/plat-omap/include/mach/clockdomain.h
3 *
4 * OMAP2/3 clockdomain framework functions
5 *
6 * Copyright (C) 2008 Texas Instruments, Inc.
7 * Copyright (C) 2008-2011 Nokia Corporation
8 *
9 * Paul Walmsley
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAIN_H
17#define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAIN_H
18
19#include <linux/init.h>
20
21#include "powerdomain.h"
22#include <plat/clock.h>
23#include <plat/cpu.h>
24
25/*
26 * Clockdomain flags
27 *
28 * XXX Document CLKDM_CAN_* flags
29 *
30 * CLKDM_NO_AUTODEPS: Prevent "autodeps" from being added/removed from this
31 * clockdomain. (Currently, this applies to OMAP3 clockdomains only.)
32 */
33#define CLKDM_CAN_FORCE_SLEEP (1 << 0)
34#define CLKDM_CAN_FORCE_WAKEUP (1 << 1)
35#define CLKDM_CAN_ENABLE_AUTO (1 << 2)
36#define CLKDM_CAN_DISABLE_AUTO (1 << 3)
37#define CLKDM_NO_AUTODEPS (1 << 4)
38
39#define CLKDM_CAN_HWSUP (CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_DISABLE_AUTO)
40#define CLKDM_CAN_SWSUP (CLKDM_CAN_FORCE_SLEEP | CLKDM_CAN_FORCE_WAKEUP)
41#define CLKDM_CAN_HWSUP_SWSUP (CLKDM_CAN_SWSUP | CLKDM_CAN_HWSUP)
42
43/**
44 * struct clkdm_autodep - clkdm deps to add when entering/exiting hwsup mode
45 * @clkdm: clockdomain to add wkdep+sleepdep on - set name member only
46 * @omap_chip: OMAP chip types that this autodep is valid on
47 *
48 * A clockdomain that should have wkdeps and sleepdeps added when a
49 * clockdomain should stay active in hwsup mode; and conversely,
50 * removed when the clockdomain should be allowed to go inactive in
51 * hwsup mode.
52 *
53 * Autodeps are deprecated and should be removed after
54 * omap_hwmod-based fine-grained module idle control is added.
55 */
56struct clkdm_autodep {
57 union {
58 const char *name;
59 struct clockdomain *ptr;
60 } clkdm;
61 const struct omap_chip_id omap_chip;
62};
63
64/**
65 * struct clkdm_dep - encode dependencies between clockdomains
66 * @clkdm_name: clockdomain name
67 * @clkdm: pointer to the struct clockdomain of @clkdm_name
68 * @omap_chip: OMAP chip types that this dependency is valid on
69 * @wkdep_usecount: Number of wakeup dependencies causing this clkdm to wake
70 * @sleepdep_usecount: Number of sleep deps that could prevent clkdm from idle
71 *
72 * Statically defined. @clkdm is resolved from @clkdm_name at runtime and
73 * should not be pre-initialized.
74 *
75 * XXX Should also include hardware (fixed) dependencies.
76 */
77struct clkdm_dep {
78 const char *clkdm_name;
79 struct clockdomain *clkdm;
80 atomic_t wkdep_usecount;
81 atomic_t sleepdep_usecount;
82 const struct omap_chip_id omap_chip;
83};
84
85/**
86 * struct clockdomain - OMAP clockdomain
87 * @name: clockdomain name
88 * @pwrdm: powerdomain containing this clockdomain
89 * @clktrctrl_reg: CLKSTCTRL reg for the given clock domain
90 * @clktrctrl_mask: CLKTRCTRL/AUTOSTATE field mask in CM_CLKSTCTRL reg
91 * @flags: Clockdomain capability flags
92 * @dep_bit: Bit shift of this clockdomain's PM_WKDEP/CM_SLEEPDEP bit
93 * @prcm_partition: (OMAP4 only) PRCM partition ID for this clkdm's registers
94 * @cm_inst: (OMAP4 only) CM instance register offset
95 * @clkdm_offs: (OMAP4 only) CM clockdomain register offset
96 * @wkdep_srcs: Clockdomains that can be told to wake this powerdomain up
97 * @sleepdep_srcs: Clockdomains that can be told to keep this clkdm from inact
98 * @omap_chip: OMAP chip types that this clockdomain is valid on
99 * @usecount: Usecount tracking
100 * @node: list_head to link all clockdomains together
101 *
102 * @prcm_partition should be a macro from mach-omap2/prcm44xx.h (OMAP4 only)
103 * @cm_inst should be a macro ending in _INST from the OMAP4 CM instance
104 * definitions (OMAP4 only)
105 * @clkdm_offs should be a macro ending in _CDOFFS from the OMAP4 CM instance
106 * definitions (OMAP4 only)
107 */
108struct clockdomain {
109 const char *name;
110 union {
111 const char *name;
112 struct powerdomain *ptr;
113 } pwrdm;
114 const u16 clktrctrl_mask;
115 const u8 flags;
116 const u8 dep_bit;
117 const u8 prcm_partition;
118 const s16 cm_inst;
119 const u16 clkdm_offs;
120 struct clkdm_dep *wkdep_srcs;
121 struct clkdm_dep *sleepdep_srcs;
122 const struct omap_chip_id omap_chip;
123 atomic_t usecount;
124 struct list_head node;
125};
126
127/**
128 * struct clkdm_ops - Arch specific function implementations
129 * @clkdm_add_wkdep: Add a wakeup dependency between clk domains
130 * @clkdm_del_wkdep: Delete a wakeup dependency between clk domains
131 * @clkdm_read_wkdep: Read wakeup dependency state between clk domains
132 * @clkdm_clear_all_wkdeps: Remove all wakeup dependencies from the clk domain
133 * @clkdm_add_sleepdep: Add a sleep dependency between clk domains
134 * @clkdm_del_sleepdep: Delete a sleep dependency between clk domains
135 * @clkdm_read_sleepdep: Read sleep dependency state between clk domains
136 * @clkdm_clear_all_sleepdeps: Remove all sleep dependencies from the clk domain
137 * @clkdm_sleep: Force a clockdomain to sleep
138 * @clkdm_wakeup: Force a clockdomain to wakeup
139 * @clkdm_allow_idle: Enable hw supervised idle transitions for clock domain
140 * @clkdm_deny_idle: Disable hw supervised idle transitions for clock domain
141 * @clkdm_clk_enable: Put the clkdm in right state for a clock enable
142 * @clkdm_clk_disable: Put the clkdm in right state for a clock disable
143 */
144struct clkdm_ops {
145 int (*clkdm_add_wkdep)(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
146 int (*clkdm_del_wkdep)(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
147 int (*clkdm_read_wkdep)(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
148 int (*clkdm_clear_all_wkdeps)(struct clockdomain *clkdm);
149 int (*clkdm_add_sleepdep)(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
150 int (*clkdm_del_sleepdep)(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
151 int (*clkdm_read_sleepdep)(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
152 int (*clkdm_clear_all_sleepdeps)(struct clockdomain *clkdm);
153 int (*clkdm_sleep)(struct clockdomain *clkdm);
154 int (*clkdm_wakeup)(struct clockdomain *clkdm);
155 void (*clkdm_allow_idle)(struct clockdomain *clkdm);
156 void (*clkdm_deny_idle)(struct clockdomain *clkdm);
157 int (*clkdm_clk_enable)(struct clockdomain *clkdm);
158 int (*clkdm_clk_disable)(struct clockdomain *clkdm);
159};
160
161void clkdm_init(struct clockdomain **clkdms, struct clkdm_autodep *autodeps,
162 struct clkdm_ops *custom_funcs);
163struct clockdomain *clkdm_lookup(const char *name);
164
165int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user),
166 void *user);
167struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm);
168
169int clkdm_add_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
170int clkdm_del_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
171int clkdm_read_wkdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
172int clkdm_clear_all_wkdeps(struct clockdomain *clkdm);
173int clkdm_add_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
174int clkdm_del_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
175int clkdm_read_sleepdep(struct clockdomain *clkdm1, struct clockdomain *clkdm2);
176int clkdm_clear_all_sleepdeps(struct clockdomain *clkdm);
177
178void clkdm_allow_idle(struct clockdomain *clkdm);
179void clkdm_deny_idle(struct clockdomain *clkdm);
180
181int clkdm_wakeup(struct clockdomain *clkdm);
182int clkdm_sleep(struct clockdomain *clkdm);
183
184int clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk);
185int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk);
186
187extern void __init omap2xxx_clockdomains_init(void);
188extern void __init omap3xxx_clockdomains_init(void);
189extern void __init omap44xx_clockdomains_init(void);
190extern void _clkdm_add_autodeps(struct clockdomain *clkdm);
191extern void _clkdm_del_autodeps(struct clockdomain *clkdm);
192
193extern struct clkdm_ops omap2_clkdm_operations;
194extern struct clkdm_ops omap3_clkdm_operations;
195extern struct clkdm_ops omap4_clkdm_operations;
196
197#endif
diff --git a/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c b/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
new file mode 100644
index 000000000000..48d0db7e6069
--- /dev/null
+++ b/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
@@ -0,0 +1,274 @@
1/*
2 * OMAP2 and OMAP3 clockdomain control
3 *
4 * Copyright (C) 2008-2010 Texas Instruments, Inc.
5 * Copyright (C) 2008-2010 Nokia Corporation
6 *
7 * Derived from mach-omap2/clockdomain.c written by Paul Walmsley
8 * Rajendra Nayak <rnayak@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/types.h>
16#include <plat/prcm.h>
17#include "prm.h"
18#include "prm2xxx_3xxx.h"
19#include "cm.h"
20#include "cm2xxx_3xxx.h"
21#include "cm-regbits-24xx.h"
22#include "cm-regbits-34xx.h"
23#include "prm-regbits-24xx.h"
24#include "clockdomain.h"
25
26static int omap2_clkdm_add_wkdep(struct clockdomain *clkdm1,
27 struct clockdomain *clkdm2)
28{
29 omap2_prm_set_mod_reg_bits((1 << clkdm2->dep_bit),
30 clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP);
31 return 0;
32}
33
34static int omap2_clkdm_del_wkdep(struct clockdomain *clkdm1,
35 struct clockdomain *clkdm2)
36{
37 omap2_prm_clear_mod_reg_bits((1 << clkdm2->dep_bit),
38 clkdm1->pwrdm.ptr->prcm_offs, PM_WKDEP);
39 return 0;
40}
41
42static int omap2_clkdm_read_wkdep(struct clockdomain *clkdm1,
43 struct clockdomain *clkdm2)
44{
45 return omap2_prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs,
46 PM_WKDEP, (1 << clkdm2->dep_bit));
47}
48
49static int omap2_clkdm_clear_all_wkdeps(struct clockdomain *clkdm)
50{
51 struct clkdm_dep *cd;
52 u32 mask = 0;
53
54 for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) {
55 if (!omap_chip_is(cd->omap_chip))
56 continue;
57 if (!cd->clkdm)
58 continue; /* only happens if data is erroneous */
59
60 /* PRM accesses are slow, so minimize them */
61 mask |= 1 << cd->clkdm->dep_bit;
62 atomic_set(&cd->wkdep_usecount, 0);
63 }
64
65 omap2_prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs,
66 PM_WKDEP);
67 return 0;
68}
69
70static int omap3_clkdm_add_sleepdep(struct clockdomain *clkdm1,
71 struct clockdomain *clkdm2)
72{
73 omap2_cm_set_mod_reg_bits((1 << clkdm2->dep_bit),
74 clkdm1->pwrdm.ptr->prcm_offs,
75 OMAP3430_CM_SLEEPDEP);
76 return 0;
77}
78
79static int omap3_clkdm_del_sleepdep(struct clockdomain *clkdm1,
80 struct clockdomain *clkdm2)
81{
82 omap2_cm_clear_mod_reg_bits((1 << clkdm2->dep_bit),
83 clkdm1->pwrdm.ptr->prcm_offs,
84 OMAP3430_CM_SLEEPDEP);
85 return 0;
86}
87
88static int omap3_clkdm_read_sleepdep(struct clockdomain *clkdm1,
89 struct clockdomain *clkdm2)
90{
91 return omap2_prm_read_mod_bits_shift(clkdm1->pwrdm.ptr->prcm_offs,
92 OMAP3430_CM_SLEEPDEP, (1 << clkdm2->dep_bit));
93}
94
95static int omap3_clkdm_clear_all_sleepdeps(struct clockdomain *clkdm)
96{
97 struct clkdm_dep *cd;
98 u32 mask = 0;
99
100 for (cd = clkdm->sleepdep_srcs; cd && cd->clkdm_name; cd++) {
101 if (!omap_chip_is(cd->omap_chip))
102 continue;
103 if (!cd->clkdm)
104 continue; /* only happens if data is erroneous */
105
106 /* PRM accesses are slow, so minimize them */
107 mask |= 1 << cd->clkdm->dep_bit;
108 atomic_set(&cd->sleepdep_usecount, 0);
109 }
110 omap2_prm_clear_mod_reg_bits(mask, clkdm->pwrdm.ptr->prcm_offs,
111 OMAP3430_CM_SLEEPDEP);
112 return 0;
113}
114
115static int omap2_clkdm_sleep(struct clockdomain *clkdm)
116{
117 omap2_cm_set_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
118 clkdm->pwrdm.ptr->prcm_offs,
119 OMAP2_PM_PWSTCTRL);
120 return 0;
121}
122
123static int omap2_clkdm_wakeup(struct clockdomain *clkdm)
124{
125 omap2_cm_clear_mod_reg_bits(OMAP24XX_FORCESTATE_MASK,
126 clkdm->pwrdm.ptr->prcm_offs,
127 OMAP2_PM_PWSTCTRL);
128 return 0;
129}
130
131static void omap2_clkdm_allow_idle(struct clockdomain *clkdm)
132{
133 if (atomic_read(&clkdm->usecount) > 0)
134 _clkdm_add_autodeps(clkdm);
135
136 omap2xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
137 clkdm->clktrctrl_mask);
138}
139
140static void omap2_clkdm_deny_idle(struct clockdomain *clkdm)
141{
142 omap2xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
143 clkdm->clktrctrl_mask);
144
145 if (atomic_read(&clkdm->usecount) > 0)
146 _clkdm_del_autodeps(clkdm);
147}
148
149static void _enable_hwsup(struct clockdomain *clkdm)
150{
151 if (cpu_is_omap24xx())
152 omap2xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
153 clkdm->clktrctrl_mask);
154 else if (cpu_is_omap34xx())
155 omap3xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
156 clkdm->clktrctrl_mask);
157}
158
159static void _disable_hwsup(struct clockdomain *clkdm)
160{
161 if (cpu_is_omap24xx())
162 omap2xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
163 clkdm->clktrctrl_mask);
164 else if (cpu_is_omap34xx())
165 omap3xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
166 clkdm->clktrctrl_mask);
167}
168
169
170static int omap2_clkdm_clk_enable(struct clockdomain *clkdm)
171{
172 bool hwsup = false;
173
174 if (!clkdm->clktrctrl_mask)
175 return 0;
176
177 hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs,
178 clkdm->clktrctrl_mask);
179
180 if (hwsup) {
181 /* Disable HW transitions when we are changing deps */
182 _disable_hwsup(clkdm);
183 _clkdm_add_autodeps(clkdm);
184 _enable_hwsup(clkdm);
185 } else {
186 clkdm_wakeup(clkdm);
187 }
188
189 return 0;
190}
191
192static int omap2_clkdm_clk_disable(struct clockdomain *clkdm)
193{
194 bool hwsup = false;
195
196 if (!clkdm->clktrctrl_mask)
197 return 0;
198
199 hwsup = omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs,
200 clkdm->clktrctrl_mask);
201
202 if (hwsup) {
203 /* Disable HW transitions when we are changing deps */
204 _disable_hwsup(clkdm);
205 _clkdm_del_autodeps(clkdm);
206 _enable_hwsup(clkdm);
207 } else {
208 clkdm_sleep(clkdm);
209 }
210
211 return 0;
212}
213
214static int omap3_clkdm_sleep(struct clockdomain *clkdm)
215{
216 omap3xxx_cm_clkdm_force_sleep(clkdm->pwrdm.ptr->prcm_offs,
217 clkdm->clktrctrl_mask);
218 return 0;
219}
220
221static int omap3_clkdm_wakeup(struct clockdomain *clkdm)
222{
223 omap3xxx_cm_clkdm_force_wakeup(clkdm->pwrdm.ptr->prcm_offs,
224 clkdm->clktrctrl_mask);
225 return 0;
226}
227
228static void omap3_clkdm_allow_idle(struct clockdomain *clkdm)
229{
230 if (atomic_read(&clkdm->usecount) > 0)
231 _clkdm_add_autodeps(clkdm);
232
233 omap3xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
234 clkdm->clktrctrl_mask);
235}
236
237static void omap3_clkdm_deny_idle(struct clockdomain *clkdm)
238{
239 omap3xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs,
240 clkdm->clktrctrl_mask);
241
242 if (atomic_read(&clkdm->usecount) > 0)
243 _clkdm_del_autodeps(clkdm);
244}
245
246struct clkdm_ops omap2_clkdm_operations = {
247 .clkdm_add_wkdep = omap2_clkdm_add_wkdep,
248 .clkdm_del_wkdep = omap2_clkdm_del_wkdep,
249 .clkdm_read_wkdep = omap2_clkdm_read_wkdep,
250 .clkdm_clear_all_wkdeps = omap2_clkdm_clear_all_wkdeps,
251 .clkdm_sleep = omap2_clkdm_sleep,
252 .clkdm_wakeup = omap2_clkdm_wakeup,
253 .clkdm_allow_idle = omap2_clkdm_allow_idle,
254 .clkdm_deny_idle = omap2_clkdm_deny_idle,
255 .clkdm_clk_enable = omap2_clkdm_clk_enable,
256 .clkdm_clk_disable = omap2_clkdm_clk_disable,
257};
258
259struct clkdm_ops omap3_clkdm_operations = {
260 .clkdm_add_wkdep = omap2_clkdm_add_wkdep,
261 .clkdm_del_wkdep = omap2_clkdm_del_wkdep,
262 .clkdm_read_wkdep = omap2_clkdm_read_wkdep,
263 .clkdm_clear_all_wkdeps = omap2_clkdm_clear_all_wkdeps,
264 .clkdm_add_sleepdep = omap3_clkdm_add_sleepdep,
265 .clkdm_del_sleepdep = omap3_clkdm_del_sleepdep,
266 .clkdm_read_sleepdep = omap3_clkdm_read_sleepdep,
267 .clkdm_clear_all_sleepdeps = omap3_clkdm_clear_all_sleepdeps,
268 .clkdm_sleep = omap3_clkdm_sleep,
269 .clkdm_wakeup = omap3_clkdm_wakeup,
270 .clkdm_allow_idle = omap3_clkdm_allow_idle,
271 .clkdm_deny_idle = omap3_clkdm_deny_idle,
272 .clkdm_clk_enable = omap2_clkdm_clk_enable,
273 .clkdm_clk_disable = omap2_clkdm_clk_disable,
274};
diff --git a/arch/arm/mach-omap2/clockdomain44xx.c b/arch/arm/mach-omap2/clockdomain44xx.c
new file mode 100644
index 000000000000..a1a4ecd26544
--- /dev/null
+++ b/arch/arm/mach-omap2/clockdomain44xx.c
@@ -0,0 +1,137 @@
1/*
2 * OMAP4 clockdomain control
3 *
4 * Copyright (C) 2008-2010 Texas Instruments, Inc.
5 * Copyright (C) 2008-2010 Nokia Corporation
6 *
7 * Derived from mach-omap2/clockdomain.c written by Paul Walmsley
8 * Rajendra Nayak <rnayak@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/kernel.h>
16#include "clockdomain.h"
17#include "cminst44xx.h"
18#include "cm44xx.h"
19
20static int omap4_clkdm_add_wkup_sleep_dep(struct clockdomain *clkdm1,
21 struct clockdomain *clkdm2)
22{
23 omap4_cminst_set_inst_reg_bits((1 << clkdm2->dep_bit),
24 clkdm1->prcm_partition,
25 clkdm1->cm_inst, clkdm1->clkdm_offs +
26 OMAP4_CM_STATICDEP);
27 return 0;
28}
29
30static int omap4_clkdm_del_wkup_sleep_dep(struct clockdomain *clkdm1,
31 struct clockdomain *clkdm2)
32{
33 omap4_cminst_clear_inst_reg_bits((1 << clkdm2->dep_bit),
34 clkdm1->prcm_partition,
35 clkdm1->cm_inst, clkdm1->clkdm_offs +
36 OMAP4_CM_STATICDEP);
37 return 0;
38}
39
40static int omap4_clkdm_read_wkup_sleep_dep(struct clockdomain *clkdm1,
41 struct clockdomain *clkdm2)
42{
43 return omap4_cminst_read_inst_reg_bits(clkdm1->prcm_partition,
44 clkdm1->cm_inst, clkdm1->clkdm_offs +
45 OMAP4_CM_STATICDEP,
46 (1 << clkdm2->dep_bit));
47}
48
49static int omap4_clkdm_clear_all_wkup_sleep_deps(struct clockdomain *clkdm)
50{
51 struct clkdm_dep *cd;
52 u32 mask = 0;
53
54 for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) {
55 if (!omap_chip_is(cd->omap_chip))
56 continue;
57 if (!cd->clkdm)
58 continue; /* only happens if data is erroneous */
59
60 mask |= 1 << cd->clkdm->dep_bit;
61 atomic_set(&cd->wkdep_usecount, 0);
62 }
63
64 omap4_cminst_clear_inst_reg_bits(mask, clkdm->prcm_partition,
65 clkdm->cm_inst, clkdm->clkdm_offs +
66 OMAP4_CM_STATICDEP);
67 return 0;
68}
69
70static int omap4_clkdm_sleep(struct clockdomain *clkdm)
71{
72 omap4_cminst_clkdm_force_sleep(clkdm->prcm_partition,
73 clkdm->cm_inst, clkdm->clkdm_offs);
74 return 0;
75}
76
77static int omap4_clkdm_wakeup(struct clockdomain *clkdm)
78{
79 omap4_cminst_clkdm_force_wakeup(clkdm->prcm_partition,
80 clkdm->cm_inst, clkdm->clkdm_offs);
81 return 0;
82}
83
84static void omap4_clkdm_allow_idle(struct clockdomain *clkdm)
85{
86 omap4_cminst_clkdm_enable_hwsup(clkdm->prcm_partition,
87 clkdm->cm_inst, clkdm->clkdm_offs);
88}
89
90static void omap4_clkdm_deny_idle(struct clockdomain *clkdm)
91{
92 omap4_cminst_clkdm_disable_hwsup(clkdm->prcm_partition,
93 clkdm->cm_inst, clkdm->clkdm_offs);
94}
95
96static int omap4_clkdm_clk_enable(struct clockdomain *clkdm)
97{
98 bool hwsup = false;
99
100 hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
101 clkdm->cm_inst, clkdm->clkdm_offs);
102
103 if (!hwsup)
104 clkdm_wakeup(clkdm);
105
106 return 0;
107}
108
109static int omap4_clkdm_clk_disable(struct clockdomain *clkdm)
110{
111 bool hwsup = false;
112
113 hwsup = omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
114 clkdm->cm_inst, clkdm->clkdm_offs);
115
116 if (!hwsup)
117 clkdm_sleep(clkdm);
118
119 return 0;
120}
121
122struct clkdm_ops omap4_clkdm_operations = {
123 .clkdm_add_wkdep = omap4_clkdm_add_wkup_sleep_dep,
124 .clkdm_del_wkdep = omap4_clkdm_del_wkup_sleep_dep,
125 .clkdm_read_wkdep = omap4_clkdm_read_wkup_sleep_dep,
126 .clkdm_clear_all_wkdeps = omap4_clkdm_clear_all_wkup_sleep_deps,
127 .clkdm_add_sleepdep = omap4_clkdm_add_wkup_sleep_dep,
128 .clkdm_del_sleepdep = omap4_clkdm_del_wkup_sleep_dep,
129 .clkdm_read_sleepdep = omap4_clkdm_read_wkup_sleep_dep,
130 .clkdm_clear_all_sleepdeps = omap4_clkdm_clear_all_wkup_sleep_deps,
131 .clkdm_sleep = omap4_clkdm_sleep,
132 .clkdm_wakeup = omap4_clkdm_wakeup,
133 .clkdm_allow_idle = omap4_clkdm_allow_idle,
134 .clkdm_deny_idle = omap4_clkdm_deny_idle,
135 .clkdm_clk_enable = omap4_clkdm_clk_enable,
136 .clkdm_clk_disable = omap4_clkdm_clk_disable,
137};
diff --git a/arch/arm/mach-omap2/clockdomains.h b/arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c
index 8fc19ff2cd89..13bde95b6790 100644
--- a/arch/arm/mach-omap2/clockdomains.h
+++ b/arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c
@@ -4,7 +4,7 @@
4 * Copyright (C) 2008-2009 Texas Instruments, Inc. 4 * Copyright (C) 2008-2009 Texas Instruments, Inc.
5 * Copyright (C) 2008-2010 Nokia Corporation 5 * Copyright (C) 2008-2010 Nokia Corporation
6 * 6 *
7 * Written by Paul Walmsley and Jouni Högander 7 * Paul Walmsley, Jouni Högander
8 * 8 *
9 * This file contains clockdomains and clockdomain wakeup/sleep 9 * This file contains clockdomains and clockdomain wakeup/sleep
10 * dependencies for the OMAP2/3 chips. Some notes: 10 * dependencies for the OMAP2/3 chips. Some notes:
@@ -32,12 +32,17 @@
32 * from the Power domain framework 32 * from the Power domain framework
33 */ 33 */
34 34
35#ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H 35#include <linux/kernel.h>
36#define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H 36#include <linux/io.h>
37 37
38#include <plat/clockdomain.h> 38#include "clockdomain.h"
39#include "cm.h" 39#include "prm2xxx_3xxx.h"
40#include "prm.h" 40#include "cm2xxx_3xxx.h"
41#include "cm-regbits-24xx.h"
42#include "cm-regbits-34xx.h"
43#include "cm-regbits-44xx.h"
44#include "prm-regbits-24xx.h"
45#include "prm-regbits-34xx.h"
41 46
42/* 47/*
43 * Clockdomain dependencies for wkdeps/sleepdeps 48 * Clockdomain dependencies for wkdeps/sleepdeps
@@ -165,12 +170,11 @@ static struct clkdm_dep core_24xx_wkdeps[] = {
165 { NULL }, 170 { NULL },
166}; 171};
167 172
168#endif 173#endif /* CONFIG_ARCH_OMAP2 */
169
170 174
171/* 2430-specific possible wakeup dependencies */ 175/* 2430-specific possible wakeup dependencies */
172 176
173#ifdef CONFIG_ARCH_OMAP2430 177#ifdef CONFIG_SOC_OMAP2430
174 178
175/* 2430 PM_WKDEP_MDM: CORE, MPU, WKUP */ 179/* 2430 PM_WKDEP_MDM: CORE, MPU, WKUP */
176static struct clkdm_dep mdm_2430_wkdeps[] = { 180static struct clkdm_dep mdm_2430_wkdeps[] = {
@@ -193,7 +197,7 @@ static struct clkdm_dep mdm_2430_wkdeps[] = {
193 { NULL }, 197 { NULL },
194}; 198};
195 199
196#endif /* CONFIG_ARCH_OMAP2430 */ 200#endif /* CONFIG_SOC_OMAP2430 */
197 201
198 202
199/* OMAP3-specific possible dependencies */ 203/* OMAP3-specific possible dependencies */
@@ -425,8 +429,6 @@ static struct clkdm_dep gfx_sgx_sleepdeps[] = {
425 * sys_clkout/sys_clkout2. 429 * sys_clkout/sys_clkout2.
426 */ 430 */
427 431
428#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
429
430/* This is an implicit clockdomain - it is never defined as such in TRM */ 432/* This is an implicit clockdomain - it is never defined as such in TRM */
431static struct clockdomain wkup_clkdm = { 433static struct clockdomain wkup_clkdm = {
432 .name = "wkup_clkdm", 434 .name = "wkup_clkdm",
@@ -447,19 +449,16 @@ static struct clockdomain cm_clkdm = {
447 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430), 449 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
448}; 450};
449 451
450#endif
451
452/* 452/*
453 * 2420-only clockdomains 453 * 2420-only clockdomains
454 */ 454 */
455 455
456#if defined(CONFIG_ARCH_OMAP2420) 456#if defined(CONFIG_SOC_OMAP2420)
457 457
458static struct clockdomain mpu_2420_clkdm = { 458static struct clockdomain mpu_2420_clkdm = {
459 .name = "mpu_clkdm", 459 .name = "mpu_clkdm",
460 .pwrdm = { .name = "mpu_pwrdm" }, 460 .pwrdm = { .name = "mpu_pwrdm" },
461 .flags = CLKDM_CAN_HWSUP, 461 .flags = CLKDM_CAN_HWSUP,
462 .clkstctrl_reg = OMAP2420_CM_REGADDR(MPU_MOD, OMAP2_CM_CLKSTCTRL),
463 .wkdep_srcs = mpu_24xx_wkdeps, 462 .wkdep_srcs = mpu_24xx_wkdeps,
464 .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK, 463 .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
465 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), 464 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
@@ -469,8 +468,6 @@ static struct clockdomain iva1_2420_clkdm = {
469 .name = "iva1_clkdm", 468 .name = "iva1_clkdm",
470 .pwrdm = { .name = "dsp_pwrdm" }, 469 .pwrdm = { .name = "dsp_pwrdm" },
471 .flags = CLKDM_CAN_HWSUP_SWSUP, 470 .flags = CLKDM_CAN_HWSUP_SWSUP,
472 .clkstctrl_reg = OMAP2420_CM_REGADDR(OMAP24XX_DSP_MOD,
473 OMAP2_CM_CLKSTCTRL),
474 .dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT, 471 .dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
475 .wkdep_srcs = dsp_24xx_wkdeps, 472 .wkdep_srcs = dsp_24xx_wkdeps,
476 .clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK, 473 .clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,
@@ -481,8 +478,6 @@ static struct clockdomain dsp_2420_clkdm = {
481 .name = "dsp_clkdm", 478 .name = "dsp_clkdm",
482 .pwrdm = { .name = "dsp_pwrdm" }, 479 .pwrdm = { .name = "dsp_pwrdm" },
483 .flags = CLKDM_CAN_HWSUP_SWSUP, 480 .flags = CLKDM_CAN_HWSUP_SWSUP,
484 .clkstctrl_reg = OMAP2420_CM_REGADDR(OMAP24XX_DSP_MOD,
485 OMAP2_CM_CLKSTCTRL),
486 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK, 481 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
487 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), 482 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
488}; 483};
@@ -491,7 +486,6 @@ static struct clockdomain gfx_2420_clkdm = {
491 .name = "gfx_clkdm", 486 .name = "gfx_clkdm",
492 .pwrdm = { .name = "gfx_pwrdm" }, 487 .pwrdm = { .name = "gfx_pwrdm" },
493 .flags = CLKDM_CAN_HWSUP_SWSUP, 488 .flags = CLKDM_CAN_HWSUP_SWSUP,
494 .clkstctrl_reg = OMAP2420_CM_REGADDR(GFX_MOD, OMAP2_CM_CLKSTCTRL),
495 .wkdep_srcs = gfx_sgx_wkdeps, 489 .wkdep_srcs = gfx_sgx_wkdeps,
496 .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK, 490 .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
497 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), 491 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
@@ -501,7 +495,6 @@ static struct clockdomain core_l3_2420_clkdm = {
501 .name = "core_l3_clkdm", 495 .name = "core_l3_clkdm",
502 .pwrdm = { .name = "core_pwrdm" }, 496 .pwrdm = { .name = "core_pwrdm" },
503 .flags = CLKDM_CAN_HWSUP, 497 .flags = CLKDM_CAN_HWSUP,
504 .clkstctrl_reg = OMAP2420_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
505 .wkdep_srcs = core_24xx_wkdeps, 498 .wkdep_srcs = core_24xx_wkdeps,
506 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK, 499 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
507 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), 500 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
@@ -511,7 +504,6 @@ static struct clockdomain core_l4_2420_clkdm = {
511 .name = "core_l4_clkdm", 504 .name = "core_l4_clkdm",
512 .pwrdm = { .name = "core_pwrdm" }, 505 .pwrdm = { .name = "core_pwrdm" },
513 .flags = CLKDM_CAN_HWSUP, 506 .flags = CLKDM_CAN_HWSUP,
514 .clkstctrl_reg = OMAP2420_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
515 .wkdep_srcs = core_24xx_wkdeps, 507 .wkdep_srcs = core_24xx_wkdeps,
516 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK, 508 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
517 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), 509 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
@@ -521,26 +513,23 @@ static struct clockdomain dss_2420_clkdm = {
521 .name = "dss_clkdm", 513 .name = "dss_clkdm",
522 .pwrdm = { .name = "core_pwrdm" }, 514 .pwrdm = { .name = "core_pwrdm" },
523 .flags = CLKDM_CAN_HWSUP, 515 .flags = CLKDM_CAN_HWSUP,
524 .clkstctrl_reg = OMAP2420_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
525 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK, 516 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
526 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), 517 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
527}; 518};
528 519
529#endif /* CONFIG_ARCH_OMAP2420 */ 520#endif /* CONFIG_SOC_OMAP2420 */
530 521
531 522
532/* 523/*
533 * 2430-only clockdomains 524 * 2430-only clockdomains
534 */ 525 */
535 526
536#if defined(CONFIG_ARCH_OMAP2430) 527#if defined(CONFIG_SOC_OMAP2430)
537 528
538static struct clockdomain mpu_2430_clkdm = { 529static struct clockdomain mpu_2430_clkdm = {
539 .name = "mpu_clkdm", 530 .name = "mpu_clkdm",
540 .pwrdm = { .name = "mpu_pwrdm" }, 531 .pwrdm = { .name = "mpu_pwrdm" },
541 .flags = CLKDM_CAN_HWSUP_SWSUP, 532 .flags = CLKDM_CAN_HWSUP_SWSUP,
542 .clkstctrl_reg = OMAP2430_CM_REGADDR(MPU_MOD,
543 OMAP2_CM_CLKSTCTRL),
544 .wkdep_srcs = mpu_24xx_wkdeps, 533 .wkdep_srcs = mpu_24xx_wkdeps,
545 .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK, 534 .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
546 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), 535 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
@@ -551,8 +540,6 @@ static struct clockdomain mdm_clkdm = {
551 .name = "mdm_clkdm", 540 .name = "mdm_clkdm",
552 .pwrdm = { .name = "mdm_pwrdm" }, 541 .pwrdm = { .name = "mdm_pwrdm" },
553 .flags = CLKDM_CAN_HWSUP_SWSUP, 542 .flags = CLKDM_CAN_HWSUP_SWSUP,
554 .clkstctrl_reg = OMAP2430_CM_REGADDR(OMAP2430_MDM_MOD,
555 OMAP2_CM_CLKSTCTRL),
556 .dep_bit = OMAP2430_PM_WKDEP_MPU_EN_MDM_SHIFT, 543 .dep_bit = OMAP2430_PM_WKDEP_MPU_EN_MDM_SHIFT,
557 .wkdep_srcs = mdm_2430_wkdeps, 544 .wkdep_srcs = mdm_2430_wkdeps,
558 .clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK, 545 .clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK,
@@ -563,8 +550,6 @@ static struct clockdomain dsp_2430_clkdm = {
563 .name = "dsp_clkdm", 550 .name = "dsp_clkdm",
564 .pwrdm = { .name = "dsp_pwrdm" }, 551 .pwrdm = { .name = "dsp_pwrdm" },
565 .flags = CLKDM_CAN_HWSUP_SWSUP, 552 .flags = CLKDM_CAN_HWSUP_SWSUP,
566 .clkstctrl_reg = OMAP2430_CM_REGADDR(OMAP24XX_DSP_MOD,
567 OMAP2_CM_CLKSTCTRL),
568 .dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT, 553 .dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
569 .wkdep_srcs = dsp_24xx_wkdeps, 554 .wkdep_srcs = dsp_24xx_wkdeps,
570 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK, 555 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
@@ -575,7 +560,6 @@ static struct clockdomain gfx_2430_clkdm = {
575 .name = "gfx_clkdm", 560 .name = "gfx_clkdm",
576 .pwrdm = { .name = "gfx_pwrdm" }, 561 .pwrdm = { .name = "gfx_pwrdm" },
577 .flags = CLKDM_CAN_HWSUP_SWSUP, 562 .flags = CLKDM_CAN_HWSUP_SWSUP,
578 .clkstctrl_reg = OMAP2430_CM_REGADDR(GFX_MOD, OMAP2_CM_CLKSTCTRL),
579 .wkdep_srcs = gfx_sgx_wkdeps, 563 .wkdep_srcs = gfx_sgx_wkdeps,
580 .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK, 564 .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
581 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), 565 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
@@ -590,7 +574,6 @@ static struct clockdomain core_l3_2430_clkdm = {
590 .name = "core_l3_clkdm", 574 .name = "core_l3_clkdm",
591 .pwrdm = { .name = "core_pwrdm" }, 575 .pwrdm = { .name = "core_pwrdm" },
592 .flags = CLKDM_CAN_HWSUP, 576 .flags = CLKDM_CAN_HWSUP,
593 .clkstctrl_reg = OMAP2430_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
594 .dep_bit = OMAP24XX_EN_CORE_SHIFT, 577 .dep_bit = OMAP24XX_EN_CORE_SHIFT,
595 .wkdep_srcs = core_24xx_wkdeps, 578 .wkdep_srcs = core_24xx_wkdeps,
596 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK, 579 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
@@ -606,7 +589,6 @@ static struct clockdomain core_l4_2430_clkdm = {
606 .name = "core_l4_clkdm", 589 .name = "core_l4_clkdm",
607 .pwrdm = { .name = "core_pwrdm" }, 590 .pwrdm = { .name = "core_pwrdm" },
608 .flags = CLKDM_CAN_HWSUP, 591 .flags = CLKDM_CAN_HWSUP,
609 .clkstctrl_reg = OMAP2430_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
610 .dep_bit = OMAP24XX_EN_CORE_SHIFT, 592 .dep_bit = OMAP24XX_EN_CORE_SHIFT,
611 .wkdep_srcs = core_24xx_wkdeps, 593 .wkdep_srcs = core_24xx_wkdeps,
612 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK, 594 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
@@ -617,12 +599,11 @@ static struct clockdomain dss_2430_clkdm = {
617 .name = "dss_clkdm", 599 .name = "dss_clkdm",
618 .pwrdm = { .name = "core_pwrdm" }, 600 .pwrdm = { .name = "core_pwrdm" },
619 .flags = CLKDM_CAN_HWSUP, 601 .flags = CLKDM_CAN_HWSUP,
620 .clkstctrl_reg = OMAP2430_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
621 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK, 602 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
622 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), 603 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
623}; 604};
624 605
625#endif /* CONFIG_ARCH_OMAP2430 */ 606#endif /* CONFIG_SOC_OMAP2430 */
626 607
627 608
628/* 609/*
@@ -635,7 +616,6 @@ static struct clockdomain mpu_3xxx_clkdm = {
635 .name = "mpu_clkdm", 616 .name = "mpu_clkdm",
636 .pwrdm = { .name = "mpu_pwrdm" }, 617 .pwrdm = { .name = "mpu_pwrdm" },
637 .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP, 618 .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
638 .clkstctrl_reg = OMAP34XX_CM_REGADDR(MPU_MOD, OMAP2_CM_CLKSTCTRL),
639 .dep_bit = OMAP3430_EN_MPU_SHIFT, 619 .dep_bit = OMAP3430_EN_MPU_SHIFT,
640 .wkdep_srcs = mpu_3xxx_wkdeps, 620 .wkdep_srcs = mpu_3xxx_wkdeps,
641 .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, 621 .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
@@ -646,8 +626,6 @@ static struct clockdomain neon_clkdm = {
646 .name = "neon_clkdm", 626 .name = "neon_clkdm",
647 .pwrdm = { .name = "neon_pwrdm" }, 627 .pwrdm = { .name = "neon_pwrdm" },
648 .flags = CLKDM_CAN_HWSUP_SWSUP, 628 .flags = CLKDM_CAN_HWSUP_SWSUP,
649 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_NEON_MOD,
650 OMAP2_CM_CLKSTCTRL),
651 .wkdep_srcs = neon_wkdeps, 629 .wkdep_srcs = neon_wkdeps,
652 .clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK, 630 .clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
653 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 631 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@ -657,8 +635,6 @@ static struct clockdomain iva2_clkdm = {
657 .name = "iva2_clkdm", 635 .name = "iva2_clkdm",
658 .pwrdm = { .name = "iva2_pwrdm" }, 636 .pwrdm = { .name = "iva2_pwrdm" },
659 .flags = CLKDM_CAN_HWSUP_SWSUP, 637 .flags = CLKDM_CAN_HWSUP_SWSUP,
660 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_IVA2_MOD,
661 OMAP2_CM_CLKSTCTRL),
662 .dep_bit = OMAP3430_PM_WKDEP_MPU_EN_IVA2_SHIFT, 638 .dep_bit = OMAP3430_PM_WKDEP_MPU_EN_IVA2_SHIFT,
663 .wkdep_srcs = iva2_wkdeps, 639 .wkdep_srcs = iva2_wkdeps,
664 .clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK, 640 .clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
@@ -669,7 +645,6 @@ static struct clockdomain gfx_3430es1_clkdm = {
669 .name = "gfx_clkdm", 645 .name = "gfx_clkdm",
670 .pwrdm = { .name = "gfx_pwrdm" }, 646 .pwrdm = { .name = "gfx_pwrdm" },
671 .flags = CLKDM_CAN_HWSUP_SWSUP, 647 .flags = CLKDM_CAN_HWSUP_SWSUP,
672 .clkstctrl_reg = OMAP34XX_CM_REGADDR(GFX_MOD, OMAP2_CM_CLKSTCTRL),
673 .wkdep_srcs = gfx_sgx_wkdeps, 648 .wkdep_srcs = gfx_sgx_wkdeps,
674 .sleepdep_srcs = gfx_sgx_sleepdeps, 649 .sleepdep_srcs = gfx_sgx_sleepdeps,
675 .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK, 650 .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
@@ -680,8 +655,6 @@ static struct clockdomain sgx_clkdm = {
680 .name = "sgx_clkdm", 655 .name = "sgx_clkdm",
681 .pwrdm = { .name = "sgx_pwrdm" }, 656 .pwrdm = { .name = "sgx_pwrdm" },
682 .flags = CLKDM_CAN_HWSUP_SWSUP, 657 .flags = CLKDM_CAN_HWSUP_SWSUP,
683 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430ES2_SGX_MOD,
684 OMAP2_CM_CLKSTCTRL),
685 .wkdep_srcs = gfx_sgx_wkdeps, 658 .wkdep_srcs = gfx_sgx_wkdeps,
686 .sleepdep_srcs = gfx_sgx_sleepdeps, 659 .sleepdep_srcs = gfx_sgx_sleepdeps,
687 .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, 660 .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
@@ -699,7 +672,6 @@ static struct clockdomain d2d_clkdm = {
699 .name = "d2d_clkdm", 672 .name = "d2d_clkdm",
700 .pwrdm = { .name = "core_pwrdm" }, 673 .pwrdm = { .name = "core_pwrdm" },
701 .flags = CLKDM_CAN_HWSUP_SWSUP, 674 .flags = CLKDM_CAN_HWSUP_SWSUP,
702 .clkstctrl_reg = OMAP34XX_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
703 .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK, 675 .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
704 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 676 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
705}; 677};
@@ -713,7 +685,6 @@ static struct clockdomain core_l3_3xxx_clkdm = {
713 .name = "core_l3_clkdm", 685 .name = "core_l3_clkdm",
714 .pwrdm = { .name = "core_pwrdm" }, 686 .pwrdm = { .name = "core_pwrdm" },
715 .flags = CLKDM_CAN_HWSUP, 687 .flags = CLKDM_CAN_HWSUP,
716 .clkstctrl_reg = OMAP34XX_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
717 .dep_bit = OMAP3430_EN_CORE_SHIFT, 688 .dep_bit = OMAP3430_EN_CORE_SHIFT,
718 .clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK, 689 .clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK,
719 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 690 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@ -728,7 +699,6 @@ static struct clockdomain core_l4_3xxx_clkdm = {
728 .name = "core_l4_clkdm", 699 .name = "core_l4_clkdm",
729 .pwrdm = { .name = "core_pwrdm" }, 700 .pwrdm = { .name = "core_pwrdm" },
730 .flags = CLKDM_CAN_HWSUP, 701 .flags = CLKDM_CAN_HWSUP,
731 .clkstctrl_reg = OMAP34XX_CM_REGADDR(CORE_MOD, OMAP2_CM_CLKSTCTRL),
732 .dep_bit = OMAP3430_EN_CORE_SHIFT, 702 .dep_bit = OMAP3430_EN_CORE_SHIFT,
733 .clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK, 703 .clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK,
734 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 704 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@ -739,8 +709,6 @@ static struct clockdomain dss_3xxx_clkdm = {
739 .name = "dss_clkdm", 709 .name = "dss_clkdm",
740 .pwrdm = { .name = "dss_pwrdm" }, 710 .pwrdm = { .name = "dss_pwrdm" },
741 .flags = CLKDM_CAN_HWSUP_SWSUP, 711 .flags = CLKDM_CAN_HWSUP_SWSUP,
742 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD,
743 OMAP2_CM_CLKSTCTRL),
744 .dep_bit = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT, 712 .dep_bit = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT,
745 .wkdep_srcs = dss_wkdeps, 713 .wkdep_srcs = dss_wkdeps,
746 .sleepdep_srcs = dss_sleepdeps, 714 .sleepdep_srcs = dss_sleepdeps,
@@ -752,8 +720,6 @@ static struct clockdomain cam_clkdm = {
752 .name = "cam_clkdm", 720 .name = "cam_clkdm",
753 .pwrdm = { .name = "cam_pwrdm" }, 721 .pwrdm = { .name = "cam_pwrdm" },
754 .flags = CLKDM_CAN_HWSUP_SWSUP, 722 .flags = CLKDM_CAN_HWSUP_SWSUP,
755 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_CAM_MOD,
756 OMAP2_CM_CLKSTCTRL),
757 .wkdep_srcs = cam_wkdeps, 723 .wkdep_srcs = cam_wkdeps,
758 .sleepdep_srcs = cam_sleepdeps, 724 .sleepdep_srcs = cam_sleepdeps,
759 .clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK, 725 .clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK,
@@ -764,8 +730,6 @@ static struct clockdomain usbhost_clkdm = {
764 .name = "usbhost_clkdm", 730 .name = "usbhost_clkdm",
765 .pwrdm = { .name = "usbhost_pwrdm" }, 731 .pwrdm = { .name = "usbhost_pwrdm" },
766 .flags = CLKDM_CAN_HWSUP_SWSUP, 732 .flags = CLKDM_CAN_HWSUP_SWSUP,
767 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430ES2_USBHOST_MOD,
768 OMAP2_CM_CLKSTCTRL),
769 .wkdep_srcs = usbhost_wkdeps, 733 .wkdep_srcs = usbhost_wkdeps,
770 .sleepdep_srcs = usbhost_sleepdeps, 734 .sleepdep_srcs = usbhost_sleepdeps,
771 .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, 735 .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
@@ -776,8 +740,6 @@ static struct clockdomain per_clkdm = {
776 .name = "per_clkdm", 740 .name = "per_clkdm",
777 .pwrdm = { .name = "per_pwrdm" }, 741 .pwrdm = { .name = "per_pwrdm" },
778 .flags = CLKDM_CAN_HWSUP_SWSUP, 742 .flags = CLKDM_CAN_HWSUP_SWSUP,
779 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_PER_MOD,
780 OMAP2_CM_CLKSTCTRL),
781 .dep_bit = OMAP3430_EN_PER_SHIFT, 743 .dep_bit = OMAP3430_EN_PER_SHIFT,
782 .wkdep_srcs = per_wkdeps, 744 .wkdep_srcs = per_wkdeps,
783 .sleepdep_srcs = per_sleepdeps, 745 .sleepdep_srcs = per_sleepdeps,
@@ -793,8 +755,6 @@ static struct clockdomain emu_clkdm = {
793 .name = "emu_clkdm", 755 .name = "emu_clkdm",
794 .pwrdm = { .name = "emu_pwrdm" }, 756 .pwrdm = { .name = "emu_pwrdm" },
795 .flags = /* CLKDM_CAN_ENABLE_AUTO | */CLKDM_CAN_SWSUP, 757 .flags = /* CLKDM_CAN_ENABLE_AUTO | */CLKDM_CAN_SWSUP,
796 .clkstctrl_reg = OMAP34XX_CM_REGADDR(OMAP3430_EMU_MOD,
797 OMAP2_CM_CLKSTCTRL),
798 .clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK, 758 .clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
799 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 759 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
800}; 760};
@@ -831,8 +791,6 @@ static struct clockdomain dpll5_clkdm = {
831 791
832#endif /* CONFIG_ARCH_OMAP3 */ 792#endif /* CONFIG_ARCH_OMAP3 */
833 793
834#include "clockdomains44xx.h"
835
836/* 794/*
837 * Clockdomain hwsup dependencies (OMAP3 only) 795 * Clockdomain hwsup dependencies (OMAP3 only)
838 */ 796 */
@@ -851,19 +809,12 @@ static struct clkdm_autodep clkdm_autodeps[] = {
851 } 809 }
852}; 810};
853 811
854/* 812static struct clockdomain *clockdomains_omap2[] __initdata = {
855 * List of clockdomain pointers per platform
856 */
857
858static struct clockdomain *clockdomains_omap[] = {
859
860#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
861 &wkup_clkdm, 813 &wkup_clkdm,
862 &cm_clkdm, 814 &cm_clkdm,
863 &prm_clkdm, 815 &prm_clkdm,
864#endif
865 816
866#ifdef CONFIG_ARCH_OMAP2420 817#ifdef CONFIG_SOC_OMAP2420
867 &mpu_2420_clkdm, 818 &mpu_2420_clkdm,
868 &iva1_2420_clkdm, 819 &iva1_2420_clkdm,
869 &dsp_2420_clkdm, 820 &dsp_2420_clkdm,
@@ -873,7 +824,7 @@ static struct clockdomain *clockdomains_omap[] = {
873 &dss_2420_clkdm, 824 &dss_2420_clkdm,
874#endif 825#endif
875 826
876#ifdef CONFIG_ARCH_OMAP2430 827#ifdef CONFIG_SOC_OMAP2430
877 &mpu_2430_clkdm, 828 &mpu_2430_clkdm,
878 &mdm_clkdm, 829 &mdm_clkdm,
879 &dsp_2430_clkdm, 830 &dsp_2430_clkdm,
@@ -903,35 +854,15 @@ static struct clockdomain *clockdomains_omap[] = {
903 &dpll4_clkdm, 854 &dpll4_clkdm,
904 &dpll5_clkdm, 855 &dpll5_clkdm,
905#endif 856#endif
906
907#ifdef CONFIG_ARCH_OMAP4
908 &l4_cefuse_44xx_clkdm,
909 &l4_cfg_44xx_clkdm,
910 &tesla_44xx_clkdm,
911 &l3_gfx_44xx_clkdm,
912 &ivahd_44xx_clkdm,
913 &l4_secure_44xx_clkdm,
914 &l4_per_44xx_clkdm,
915 &abe_44xx_clkdm,
916 &l3_instr_44xx_clkdm,
917 &l3_init_44xx_clkdm,
918 &mpuss_44xx_clkdm,
919 &mpu0_44xx_clkdm,
920 &mpu1_44xx_clkdm,
921 &l3_emif_44xx_clkdm,
922 &l4_ao_44xx_clkdm,
923 &ducati_44xx_clkdm,
924 &l3_2_44xx_clkdm,
925 &l3_1_44xx_clkdm,
926 &l3_d2d_44xx_clkdm,
927 &iss_44xx_clkdm,
928 &l3_dss_44xx_clkdm,
929 &l4_wkup_44xx_clkdm,
930 &emu_sys_44xx_clkdm,
931 &l3_dma_44xx_clkdm,
932#endif
933
934 NULL, 857 NULL,
935}; 858};
936 859
937#endif 860void __init omap2xxx_clockdomains_init(void)
861{
862 clkdm_init(clockdomains_omap2, clkdm_autodeps, &omap2_clkdm_operations);
863}
864
865void __init omap3xxx_clockdomains_init(void)
866{
867 clkdm_init(clockdomains_omap2, clkdm_autodeps, &omap3_clkdm_operations);
868}
diff --git a/arch/arm/mach-omap2/clockdomains44xx.h b/arch/arm/mach-omap2/clockdomains44xx.h
deleted file mode 100644
index 7e5ba0f67925..000000000000
--- a/arch/arm/mach-omap2/clockdomains44xx.h
+++ /dev/null
@@ -1,250 +0,0 @@
1/*
2 * OMAP4 Clock domains framework
3 *
4 * Copyright (C) 2009 Texas Instruments, Inc.
5 * Copyright (C) 2009 Nokia Corporation
6 *
7 * Abhijit Pagare (abhijitpagare@ti.com)
8 * Benoit Cousson (b-cousson@ti.com)
9 *
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20
21/*
22 * To-Do List
23 * -> Populate the Sleep/Wakeup dependencies for the domains
24 */
25
26#ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS44XX_H
27#define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS44XX_H
28
29#include <plat/clockdomain.h>
30
31#if defined(CONFIG_ARCH_OMAP4)
32
33static struct clockdomain l4_cefuse_44xx_clkdm = {
34 .name = "l4_cefuse_clkdm",
35 .pwrdm = { .name = "cefuse_pwrdm" },
36 .clkstctrl_reg = OMAP4430_CM_CEFUSE_CLKSTCTRL,
37 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
38 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
39 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
40};
41
42static struct clockdomain l4_cfg_44xx_clkdm = {
43 .name = "l4_cfg_clkdm",
44 .pwrdm = { .name = "core_pwrdm" },
45 .clkstctrl_reg = OMAP4430_CM_L4CFG_CLKSTCTRL,
46 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
47 .flags = CLKDM_CAN_HWSUP,
48 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
49};
50
51static struct clockdomain tesla_44xx_clkdm = {
52 .name = "tesla_clkdm",
53 .pwrdm = { .name = "tesla_pwrdm" },
54 .clkstctrl_reg = OMAP4430_CM_TESLA_CLKSTCTRL,
55 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
56 .flags = CLKDM_CAN_HWSUP_SWSUP,
57 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
58};
59
60static struct clockdomain l3_gfx_44xx_clkdm = {
61 .name = "l3_gfx_clkdm",
62 .pwrdm = { .name = "gfx_pwrdm" },
63 .clkstctrl_reg = OMAP4430_CM_GFX_CLKSTCTRL,
64 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
65 .flags = CLKDM_CAN_HWSUP_SWSUP,
66 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
67};
68
69static struct clockdomain ivahd_44xx_clkdm = {
70 .name = "ivahd_clkdm",
71 .pwrdm = { .name = "ivahd_pwrdm" },
72 .clkstctrl_reg = OMAP4430_CM_IVAHD_CLKSTCTRL,
73 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
74 .flags = CLKDM_CAN_HWSUP_SWSUP,
75 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
76};
77
78static struct clockdomain l4_secure_44xx_clkdm = {
79 .name = "l4_secure_clkdm",
80 .pwrdm = { .name = "l4per_pwrdm" },
81 .clkstctrl_reg = OMAP4430_CM_L4SEC_CLKSTCTRL,
82 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
83 .flags = CLKDM_CAN_HWSUP_SWSUP,
84 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
85};
86
87static struct clockdomain l4_per_44xx_clkdm = {
88 .name = "l4_per_clkdm",
89 .pwrdm = { .name = "l4per_pwrdm" },
90 .clkstctrl_reg = OMAP4430_CM_L4PER_CLKSTCTRL,
91 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
92 .flags = CLKDM_CAN_HWSUP_SWSUP,
93 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
94};
95
96static struct clockdomain abe_44xx_clkdm = {
97 .name = "abe_clkdm",
98 .pwrdm = { .name = "abe_pwrdm" },
99 .clkstctrl_reg = OMAP4430_CM1_ABE_CLKSTCTRL,
100 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
101 .flags = CLKDM_CAN_HWSUP_SWSUP,
102 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
103};
104
105static struct clockdomain l3_instr_44xx_clkdm = {
106 .name = "l3_instr_clkdm",
107 .pwrdm = { .name = "core_pwrdm" },
108 .clkstctrl_reg = OMAP4430_CM_L3INSTR_CLKSTCTRL,
109 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
110 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
111};
112
113static struct clockdomain l3_init_44xx_clkdm = {
114 .name = "l3_init_clkdm",
115 .pwrdm = { .name = "l3init_pwrdm" },
116 .clkstctrl_reg = OMAP4430_CM_L3INIT_CLKSTCTRL,
117 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
118 .flags = CLKDM_CAN_HWSUP_SWSUP,
119 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
120};
121
122static struct clockdomain mpuss_44xx_clkdm = {
123 .name = "mpuss_clkdm",
124 .pwrdm = { .name = "mpu_pwrdm" },
125 .clkstctrl_reg = OMAP4430_CM_MPU_CLKSTCTRL,
126 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
127 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
128 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
129};
130
131static struct clockdomain mpu0_44xx_clkdm = {
132 .name = "mpu0_clkdm",
133 .pwrdm = { .name = "cpu0_pwrdm" },
134 .clkstctrl_reg = OMAP4430_CM_CPU0_CLKSTCTRL,
135 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
136 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
137 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
138};
139
140static struct clockdomain mpu1_44xx_clkdm = {
141 .name = "mpu1_clkdm",
142 .pwrdm = { .name = "cpu1_pwrdm" },
143 .clkstctrl_reg = OMAP4430_CM_CPU1_CLKSTCTRL,
144 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
145 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
146 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
147};
148
149static struct clockdomain l3_emif_44xx_clkdm = {
150 .name = "l3_emif_clkdm",
151 .pwrdm = { .name = "core_pwrdm" },
152 .clkstctrl_reg = OMAP4430_CM_MEMIF_CLKSTCTRL,
153 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
154 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
155 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
156};
157
158static struct clockdomain l4_ao_44xx_clkdm = {
159 .name = "l4_ao_clkdm",
160 .pwrdm = { .name = "always_on_core_pwrdm" },
161 .clkstctrl_reg = OMAP4430_CM_ALWON_CLKSTCTRL,
162 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
163 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
164 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
165};
166
167static struct clockdomain ducati_44xx_clkdm = {
168 .name = "ducati_clkdm",
169 .pwrdm = { .name = "core_pwrdm" },
170 .clkstctrl_reg = OMAP4430_CM_DUCATI_CLKSTCTRL,
171 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
172 .flags = CLKDM_CAN_HWSUP_SWSUP,
173 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
174};
175
176static struct clockdomain l3_2_44xx_clkdm = {
177 .name = "l3_2_clkdm",
178 .pwrdm = { .name = "core_pwrdm" },
179 .clkstctrl_reg = OMAP4430_CM_L3_2_CLKSTCTRL,
180 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
181 .flags = CLKDM_CAN_HWSUP,
182 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
183};
184
185static struct clockdomain l3_1_44xx_clkdm = {
186 .name = "l3_1_clkdm",
187 .pwrdm = { .name = "core_pwrdm" },
188 .clkstctrl_reg = OMAP4430_CM_L3_1_CLKSTCTRL,
189 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
190 .flags = CLKDM_CAN_HWSUP,
191 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
192};
193
194static struct clockdomain l3_d2d_44xx_clkdm = {
195 .name = "l3_d2d_clkdm",
196 .pwrdm = { .name = "core_pwrdm" },
197 .clkstctrl_reg = OMAP4430_CM_D2D_CLKSTCTRL,
198 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
199 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
200 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
201};
202
203static struct clockdomain iss_44xx_clkdm = {
204 .name = "iss_clkdm",
205 .pwrdm = { .name = "cam_pwrdm" },
206 .clkstctrl_reg = OMAP4430_CM_CAM_CLKSTCTRL,
207 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
208 .flags = CLKDM_CAN_HWSUP_SWSUP,
209 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
210};
211
212static struct clockdomain l3_dss_44xx_clkdm = {
213 .name = "l3_dss_clkdm",
214 .pwrdm = { .name = "dss_pwrdm" },
215 .clkstctrl_reg = OMAP4430_CM_DSS_CLKSTCTRL,
216 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
217 .flags = CLKDM_CAN_HWSUP_SWSUP,
218 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
219};
220
221static struct clockdomain l4_wkup_44xx_clkdm = {
222 .name = "l4_wkup_clkdm",
223 .pwrdm = { .name = "wkup_pwrdm" },
224 .clkstctrl_reg = OMAP4430_CM_WKUP_CLKSTCTRL,
225 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
226 .flags = CLKDM_CAN_HWSUP,
227 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
228};
229
230static struct clockdomain emu_sys_44xx_clkdm = {
231 .name = "emu_sys_clkdm",
232 .pwrdm = { .name = "emu_pwrdm" },
233 .clkstctrl_reg = OMAP4430_CM_EMU_CLKSTCTRL,
234 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
235 .flags = CLKDM_CAN_HWSUP,
236 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
237};
238
239static struct clockdomain l3_dma_44xx_clkdm = {
240 .name = "l3_dma_clkdm",
241 .pwrdm = { .name = "core_pwrdm" },
242 .clkstctrl_reg = OMAP4430_CM_SDMA_CLKSTCTRL,
243 .clktrctrl_mask = OMAP4430_CLKTRCTRL_MASK,
244 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
245 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
246};
247
248#endif
249
250#endif
diff --git a/arch/arm/mach-omap2/clockdomains44xx_data.c b/arch/arm/mach-omap2/clockdomains44xx_data.c
new file mode 100644
index 000000000000..a607ec196e8b
--- /dev/null
+++ b/arch/arm/mach-omap2/clockdomains44xx_data.c
@@ -0,0 +1,689 @@
1/*
2 * OMAP4 Clock domains framework
3 *
4 * Copyright (C) 2009 Texas Instruments, Inc.
5 * Copyright (C) 2009 Nokia Corporation
6 *
7 * Abhijit Pagare (abhijitpagare@ti.com)
8 * Benoit Cousson (b-cousson@ti.com)
9 *
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20
21#include <linux/kernel.h>
22#include <linux/io.h>
23
24#include "clockdomain.h"
25#include "cm1_44xx.h"
26#include "cm2_44xx.h"
27
28#include "cm-regbits-44xx.h"
29#include "prm44xx.h"
30#include "prcm44xx.h"
31#include "prcm_mpu44xx.h"
32
33/* Static Dependencies for OMAP4 Clock Domains */
34
35static struct clkdm_dep ducati_wkup_sleep_deps[] = {
36 {
37 .clkdm_name = "abe_clkdm",
38 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
39 },
40 {
41 .clkdm_name = "ivahd_clkdm",
42 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
43 },
44 {
45 .clkdm_name = "l3_1_clkdm",
46 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
47 },
48 {
49 .clkdm_name = "l3_2_clkdm",
50 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
51 },
52 {
53 .clkdm_name = "l3_dss_clkdm",
54 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
55 },
56 {
57 .clkdm_name = "l3_emif_clkdm",
58 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
59 },
60 {
61 .clkdm_name = "l3_gfx_clkdm",
62 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
63 },
64 {
65 .clkdm_name = "l3_init_clkdm",
66 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
67 },
68 {
69 .clkdm_name = "l4_cfg_clkdm",
70 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
71 },
72 {
73 .clkdm_name = "l4_per_clkdm",
74 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
75 },
76 {
77 .clkdm_name = "l4_secure_clkdm",
78 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
79 },
80 {
81 .clkdm_name = "l4_wkup_clkdm",
82 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
83 },
84 {
85 .clkdm_name = "tesla_clkdm",
86 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
87 },
88 { NULL },
89};
90
91static struct clkdm_dep iss_wkup_sleep_deps[] = {
92 {
93 .clkdm_name = "ivahd_clkdm",
94 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
95 },
96 {
97 .clkdm_name = "l3_1_clkdm",
98 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
99 },
100 {
101 .clkdm_name = "l3_emif_clkdm",
102 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
103 },
104 { NULL },
105};
106
107static struct clkdm_dep ivahd_wkup_sleep_deps[] = {
108 {
109 .clkdm_name = "l3_1_clkdm",
110 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
111 },
112 {
113 .clkdm_name = "l3_emif_clkdm",
114 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
115 },
116 { NULL },
117};
118
119static struct clkdm_dep l3_d2d_wkup_sleep_deps[] = {
120 {
121 .clkdm_name = "abe_clkdm",
122 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
123 },
124 {
125 .clkdm_name = "ivahd_clkdm",
126 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
127 },
128 {
129 .clkdm_name = "l3_1_clkdm",
130 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
131 },
132 {
133 .clkdm_name = "l3_2_clkdm",
134 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
135 },
136 {
137 .clkdm_name = "l3_emif_clkdm",
138 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
139 },
140 {
141 .clkdm_name = "l3_init_clkdm",
142 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
143 },
144 {
145 .clkdm_name = "l4_cfg_clkdm",
146 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
147 },
148 {
149 .clkdm_name = "l4_per_clkdm",
150 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
151 },
152 { NULL },
153};
154
155static struct clkdm_dep l3_dma_wkup_sleep_deps[] = {
156 {
157 .clkdm_name = "abe_clkdm",
158 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
159 },
160 {
161 .clkdm_name = "ducati_clkdm",
162 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
163 },
164 {
165 .clkdm_name = "ivahd_clkdm",
166 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
167 },
168 {
169 .clkdm_name = "l3_1_clkdm",
170 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
171 },
172 {
173 .clkdm_name = "l3_dss_clkdm",
174 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
175 },
176 {
177 .clkdm_name = "l3_emif_clkdm",
178 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
179 },
180 {
181 .clkdm_name = "l3_init_clkdm",
182 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
183 },
184 {
185 .clkdm_name = "l4_cfg_clkdm",
186 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
187 },
188 {
189 .clkdm_name = "l4_per_clkdm",
190 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
191 },
192 {
193 .clkdm_name = "l4_secure_clkdm",
194 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
195 },
196 {
197 .clkdm_name = "l4_wkup_clkdm",
198 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
199 },
200 { NULL },
201};
202
203static struct clkdm_dep l3_dss_wkup_sleep_deps[] = {
204 {
205 .clkdm_name = "ivahd_clkdm",
206 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
207 },
208 {
209 .clkdm_name = "l3_2_clkdm",
210 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
211 },
212 {
213 .clkdm_name = "l3_emif_clkdm",
214 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
215 },
216 { NULL },
217};
218
219static struct clkdm_dep l3_gfx_wkup_sleep_deps[] = {
220 {
221 .clkdm_name = "ivahd_clkdm",
222 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
223 },
224 {
225 .clkdm_name = "l3_1_clkdm",
226 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
227 },
228 {
229 .clkdm_name = "l3_emif_clkdm",
230 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
231 },
232 { NULL },
233};
234
235static struct clkdm_dep l3_init_wkup_sleep_deps[] = {
236 {
237 .clkdm_name = "abe_clkdm",
238 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
239 },
240 {
241 .clkdm_name = "ivahd_clkdm",
242 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
243 },
244 {
245 .clkdm_name = "l3_emif_clkdm",
246 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
247 },
248 {
249 .clkdm_name = "l4_cfg_clkdm",
250 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
251 },
252 {
253 .clkdm_name = "l4_per_clkdm",
254 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
255 },
256 {
257 .clkdm_name = "l4_secure_clkdm",
258 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
259 },
260 {
261 .clkdm_name = "l4_wkup_clkdm",
262 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
263 },
264 { NULL },
265};
266
267static struct clkdm_dep l4_secure_wkup_sleep_deps[] = {
268 {
269 .clkdm_name = "l3_1_clkdm",
270 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
271 },
272 {
273 .clkdm_name = "l3_emif_clkdm",
274 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
275 },
276 {
277 .clkdm_name = "l4_per_clkdm",
278 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
279 },
280 { NULL },
281};
282
283static struct clkdm_dep mpuss_wkup_sleep_deps[] = {
284 {
285 .clkdm_name = "abe_clkdm",
286 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
287 },
288 {
289 .clkdm_name = "ducati_clkdm",
290 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
291 },
292 {
293 .clkdm_name = "ivahd_clkdm",
294 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
295 },
296 {
297 .clkdm_name = "l3_1_clkdm",
298 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
299 },
300 {
301 .clkdm_name = "l3_2_clkdm",
302 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
303 },
304 {
305 .clkdm_name = "l3_dss_clkdm",
306 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
307 },
308 {
309 .clkdm_name = "l3_emif_clkdm",
310 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
311 },
312 {
313 .clkdm_name = "l3_gfx_clkdm",
314 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
315 },
316 {
317 .clkdm_name = "l3_init_clkdm",
318 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
319 },
320 {
321 .clkdm_name = "l4_cfg_clkdm",
322 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
323 },
324 {
325 .clkdm_name = "l4_per_clkdm",
326 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
327 },
328 {
329 .clkdm_name = "l4_secure_clkdm",
330 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
331 },
332 {
333 .clkdm_name = "l4_wkup_clkdm",
334 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
335 },
336 {
337 .clkdm_name = "tesla_clkdm",
338 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
339 },
340 { NULL },
341};
342
343static struct clkdm_dep tesla_wkup_sleep_deps[] = {
344 {
345 .clkdm_name = "abe_clkdm",
346 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
347 },
348 {
349 .clkdm_name = "ivahd_clkdm",
350 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
351 },
352 {
353 .clkdm_name = "l3_1_clkdm",
354 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
355 },
356 {
357 .clkdm_name = "l3_2_clkdm",
358 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
359 },
360 {
361 .clkdm_name = "l3_emif_clkdm",
362 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
363 },
364 {
365 .clkdm_name = "l3_init_clkdm",
366 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
367 },
368 {
369 .clkdm_name = "l4_cfg_clkdm",
370 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
371 },
372 {
373 .clkdm_name = "l4_per_clkdm",
374 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
375 },
376 {
377 .clkdm_name = "l4_wkup_clkdm",
378 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430)
379 },
380 { NULL },
381};
382
383static struct clockdomain l4_cefuse_44xx_clkdm = {
384 .name = "l4_cefuse_clkdm",
385 .pwrdm = { .name = "cefuse_pwrdm" },
386 .prcm_partition = OMAP4430_CM2_PARTITION,
387 .cm_inst = OMAP4430_CM2_CEFUSE_INST,
388 .clkdm_offs = OMAP4430_CM2_CEFUSE_CEFUSE_CDOFFS,
389 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
390 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
391};
392
393static struct clockdomain l4_cfg_44xx_clkdm = {
394 .name = "l4_cfg_clkdm",
395 .pwrdm = { .name = "core_pwrdm" },
396 .prcm_partition = OMAP4430_CM2_PARTITION,
397 .cm_inst = OMAP4430_CM2_CORE_INST,
398 .clkdm_offs = OMAP4430_CM2_CORE_L4CFG_CDOFFS,
399 .dep_bit = OMAP4430_L4CFG_STATDEP_SHIFT,
400 .flags = CLKDM_CAN_HWSUP,
401 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
402};
403
404static struct clockdomain tesla_44xx_clkdm = {
405 .name = "tesla_clkdm",
406 .pwrdm = { .name = "tesla_pwrdm" },
407 .prcm_partition = OMAP4430_CM1_PARTITION,
408 .cm_inst = OMAP4430_CM1_TESLA_INST,
409 .clkdm_offs = OMAP4430_CM1_TESLA_TESLA_CDOFFS,
410 .dep_bit = OMAP4430_TESLA_STATDEP_SHIFT,
411 .wkdep_srcs = tesla_wkup_sleep_deps,
412 .sleepdep_srcs = tesla_wkup_sleep_deps,
413 .flags = CLKDM_CAN_HWSUP_SWSUP,
414 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
415};
416
417static struct clockdomain l3_gfx_44xx_clkdm = {
418 .name = "l3_gfx_clkdm",
419 .pwrdm = { .name = "gfx_pwrdm" },
420 .prcm_partition = OMAP4430_CM2_PARTITION,
421 .cm_inst = OMAP4430_CM2_GFX_INST,
422 .clkdm_offs = OMAP4430_CM2_GFX_GFX_CDOFFS,
423 .dep_bit = OMAP4430_GFX_STATDEP_SHIFT,
424 .wkdep_srcs = l3_gfx_wkup_sleep_deps,
425 .sleepdep_srcs = l3_gfx_wkup_sleep_deps,
426 .flags = CLKDM_CAN_HWSUP_SWSUP,
427 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
428};
429
430static struct clockdomain ivahd_44xx_clkdm = {
431 .name = "ivahd_clkdm",
432 .pwrdm = { .name = "ivahd_pwrdm" },
433 .prcm_partition = OMAP4430_CM2_PARTITION,
434 .cm_inst = OMAP4430_CM2_IVAHD_INST,
435 .clkdm_offs = OMAP4430_CM2_IVAHD_IVAHD_CDOFFS,
436 .dep_bit = OMAP4430_IVAHD_STATDEP_SHIFT,
437 .wkdep_srcs = ivahd_wkup_sleep_deps,
438 .sleepdep_srcs = ivahd_wkup_sleep_deps,
439 .flags = CLKDM_CAN_HWSUP_SWSUP,
440 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
441};
442
443static struct clockdomain l4_secure_44xx_clkdm = {
444 .name = "l4_secure_clkdm",
445 .pwrdm = { .name = "l4per_pwrdm" },
446 .prcm_partition = OMAP4430_CM2_PARTITION,
447 .cm_inst = OMAP4430_CM2_L4PER_INST,
448 .clkdm_offs = OMAP4430_CM2_L4PER_L4SEC_CDOFFS,
449 .dep_bit = OMAP4430_L4SEC_STATDEP_SHIFT,
450 .wkdep_srcs = l4_secure_wkup_sleep_deps,
451 .sleepdep_srcs = l4_secure_wkup_sleep_deps,
452 .flags = CLKDM_CAN_HWSUP_SWSUP,
453 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
454};
455
456static struct clockdomain l4_per_44xx_clkdm = {
457 .name = "l4_per_clkdm",
458 .pwrdm = { .name = "l4per_pwrdm" },
459 .prcm_partition = OMAP4430_CM2_PARTITION,
460 .cm_inst = OMAP4430_CM2_L4PER_INST,
461 .clkdm_offs = OMAP4430_CM2_L4PER_L4PER_CDOFFS,
462 .dep_bit = OMAP4430_L4PER_STATDEP_SHIFT,
463 .flags = CLKDM_CAN_HWSUP_SWSUP,
464 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
465};
466
467static struct clockdomain abe_44xx_clkdm = {
468 .name = "abe_clkdm",
469 .pwrdm = { .name = "abe_pwrdm" },
470 .prcm_partition = OMAP4430_CM1_PARTITION,
471 .cm_inst = OMAP4430_CM1_ABE_INST,
472 .clkdm_offs = OMAP4430_CM1_ABE_ABE_CDOFFS,
473 .dep_bit = OMAP4430_ABE_STATDEP_SHIFT,
474 .flags = CLKDM_CAN_HWSUP_SWSUP,
475 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
476};
477
478static struct clockdomain l3_instr_44xx_clkdm = {
479 .name = "l3_instr_clkdm",
480 .pwrdm = { .name = "core_pwrdm" },
481 .prcm_partition = OMAP4430_CM2_PARTITION,
482 .cm_inst = OMAP4430_CM2_CORE_INST,
483 .clkdm_offs = OMAP4430_CM2_CORE_L3INSTR_CDOFFS,
484 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
485};
486
487static struct clockdomain l3_init_44xx_clkdm = {
488 .name = "l3_init_clkdm",
489 .pwrdm = { .name = "l3init_pwrdm" },
490 .prcm_partition = OMAP4430_CM2_PARTITION,
491 .cm_inst = OMAP4430_CM2_L3INIT_INST,
492 .clkdm_offs = OMAP4430_CM2_L3INIT_L3INIT_CDOFFS,
493 .dep_bit = OMAP4430_L3INIT_STATDEP_SHIFT,
494 .wkdep_srcs = l3_init_wkup_sleep_deps,
495 .sleepdep_srcs = l3_init_wkup_sleep_deps,
496 .flags = CLKDM_CAN_HWSUP_SWSUP,
497 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
498};
499
500static struct clockdomain mpuss_44xx_clkdm = {
501 .name = "mpuss_clkdm",
502 .pwrdm = { .name = "mpu_pwrdm" },
503 .prcm_partition = OMAP4430_CM1_PARTITION,
504 .cm_inst = OMAP4430_CM1_MPU_INST,
505 .clkdm_offs = OMAP4430_CM1_MPU_MPU_CDOFFS,
506 .wkdep_srcs = mpuss_wkup_sleep_deps,
507 .sleepdep_srcs = mpuss_wkup_sleep_deps,
508 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
509 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
510};
511
512static struct clockdomain mpu0_44xx_clkdm = {
513 .name = "mpu0_clkdm",
514 .pwrdm = { .name = "cpu0_pwrdm" },
515 .prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
516 .cm_inst = OMAP4430_PRCM_MPU_CPU0_INST,
517 .clkdm_offs = OMAP4430_PRCM_MPU_CPU0_CPU0_CDOFFS,
518 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
519 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
520};
521
522static struct clockdomain mpu1_44xx_clkdm = {
523 .name = "mpu1_clkdm",
524 .pwrdm = { .name = "cpu1_pwrdm" },
525 .prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
526 .cm_inst = OMAP4430_PRCM_MPU_CPU1_INST,
527 .clkdm_offs = OMAP4430_PRCM_MPU_CPU1_CPU1_CDOFFS,
528 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
529 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
530};
531
532static struct clockdomain l3_emif_44xx_clkdm = {
533 .name = "l3_emif_clkdm",
534 .pwrdm = { .name = "core_pwrdm" },
535 .prcm_partition = OMAP4430_CM2_PARTITION,
536 .cm_inst = OMAP4430_CM2_CORE_INST,
537 .clkdm_offs = OMAP4430_CM2_CORE_MEMIF_CDOFFS,
538 .dep_bit = OMAP4430_MEMIF_STATDEP_SHIFT,
539 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
540 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
541};
542
543static struct clockdomain l4_ao_44xx_clkdm = {
544 .name = "l4_ao_clkdm",
545 .pwrdm = { .name = "always_on_core_pwrdm" },
546 .prcm_partition = OMAP4430_CM2_PARTITION,
547 .cm_inst = OMAP4430_CM2_ALWAYS_ON_INST,
548 .clkdm_offs = OMAP4430_CM2_ALWAYS_ON_ALWON_CDOFFS,
549 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
550 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
551};
552
553static struct clockdomain ducati_44xx_clkdm = {
554 .name = "ducati_clkdm",
555 .pwrdm = { .name = "core_pwrdm" },
556 .prcm_partition = OMAP4430_CM2_PARTITION,
557 .cm_inst = OMAP4430_CM2_CORE_INST,
558 .clkdm_offs = OMAP4430_CM2_CORE_DUCATI_CDOFFS,
559 .dep_bit = OMAP4430_DUCATI_STATDEP_SHIFT,
560 .wkdep_srcs = ducati_wkup_sleep_deps,
561 .sleepdep_srcs = ducati_wkup_sleep_deps,
562 .flags = CLKDM_CAN_HWSUP_SWSUP,
563 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
564};
565
566static struct clockdomain l3_2_44xx_clkdm = {
567 .name = "l3_2_clkdm",
568 .pwrdm = { .name = "core_pwrdm" },
569 .prcm_partition = OMAP4430_CM2_PARTITION,
570 .cm_inst = OMAP4430_CM2_CORE_INST,
571 .clkdm_offs = OMAP4430_CM2_CORE_L3_2_CDOFFS,
572 .dep_bit = OMAP4430_L3_2_STATDEP_SHIFT,
573 .flags = CLKDM_CAN_HWSUP,
574 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
575};
576
577static struct clockdomain l3_1_44xx_clkdm = {
578 .name = "l3_1_clkdm",
579 .pwrdm = { .name = "core_pwrdm" },
580 .prcm_partition = OMAP4430_CM2_PARTITION,
581 .cm_inst = OMAP4430_CM2_CORE_INST,
582 .clkdm_offs = OMAP4430_CM2_CORE_L3_1_CDOFFS,
583 .dep_bit = OMAP4430_L3_1_STATDEP_SHIFT,
584 .flags = CLKDM_CAN_HWSUP,
585 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
586};
587
588static struct clockdomain l3_d2d_44xx_clkdm = {
589 .name = "l3_d2d_clkdm",
590 .pwrdm = { .name = "core_pwrdm" },
591 .prcm_partition = OMAP4430_CM2_PARTITION,
592 .cm_inst = OMAP4430_CM2_CORE_INST,
593 .clkdm_offs = OMAP4430_CM2_CORE_D2D_CDOFFS,
594 .wkdep_srcs = l3_d2d_wkup_sleep_deps,
595 .sleepdep_srcs = l3_d2d_wkup_sleep_deps,
596 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
597 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
598};
599
600static struct clockdomain iss_44xx_clkdm = {
601 .name = "iss_clkdm",
602 .pwrdm = { .name = "cam_pwrdm" },
603 .prcm_partition = OMAP4430_CM2_PARTITION,
604 .cm_inst = OMAP4430_CM2_CAM_INST,
605 .clkdm_offs = OMAP4430_CM2_CAM_CAM_CDOFFS,
606 .wkdep_srcs = iss_wkup_sleep_deps,
607 .sleepdep_srcs = iss_wkup_sleep_deps,
608 .flags = CLKDM_CAN_HWSUP_SWSUP,
609 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
610};
611
612static struct clockdomain l3_dss_44xx_clkdm = {
613 .name = "l3_dss_clkdm",
614 .pwrdm = { .name = "dss_pwrdm" },
615 .prcm_partition = OMAP4430_CM2_PARTITION,
616 .cm_inst = OMAP4430_CM2_DSS_INST,
617 .clkdm_offs = OMAP4430_CM2_DSS_DSS_CDOFFS,
618 .dep_bit = OMAP4430_DSS_STATDEP_SHIFT,
619 .wkdep_srcs = l3_dss_wkup_sleep_deps,
620 .sleepdep_srcs = l3_dss_wkup_sleep_deps,
621 .flags = CLKDM_CAN_HWSUP_SWSUP,
622 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
623};
624
625static struct clockdomain l4_wkup_44xx_clkdm = {
626 .name = "l4_wkup_clkdm",
627 .pwrdm = { .name = "wkup_pwrdm" },
628 .prcm_partition = OMAP4430_PRM_PARTITION,
629 .cm_inst = OMAP4430_PRM_WKUP_CM_INST,
630 .clkdm_offs = OMAP4430_PRM_WKUP_CM_WKUP_CDOFFS,
631 .dep_bit = OMAP4430_L4WKUP_STATDEP_SHIFT,
632 .flags = CLKDM_CAN_HWSUP,
633 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
634};
635
636static struct clockdomain emu_sys_44xx_clkdm = {
637 .name = "emu_sys_clkdm",
638 .pwrdm = { .name = "emu_pwrdm" },
639 .prcm_partition = OMAP4430_PRM_PARTITION,
640 .cm_inst = OMAP4430_PRM_EMU_CM_INST,
641 .clkdm_offs = OMAP4430_PRM_EMU_CM_EMU_CDOFFS,
642 .flags = CLKDM_CAN_HWSUP,
643 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
644};
645
646static struct clockdomain l3_dma_44xx_clkdm = {
647 .name = "l3_dma_clkdm",
648 .pwrdm = { .name = "core_pwrdm" },
649 .prcm_partition = OMAP4430_CM2_PARTITION,
650 .cm_inst = OMAP4430_CM2_CORE_INST,
651 .clkdm_offs = OMAP4430_CM2_CORE_SDMA_CDOFFS,
652 .wkdep_srcs = l3_dma_wkup_sleep_deps,
653 .sleepdep_srcs = l3_dma_wkup_sleep_deps,
654 .flags = CLKDM_CAN_FORCE_WAKEUP | CLKDM_CAN_HWSUP,
655 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
656};
657
658static struct clockdomain *clockdomains_omap44xx[] __initdata = {
659 &l4_cefuse_44xx_clkdm,
660 &l4_cfg_44xx_clkdm,
661 &tesla_44xx_clkdm,
662 &l3_gfx_44xx_clkdm,
663 &ivahd_44xx_clkdm,
664 &l4_secure_44xx_clkdm,
665 &l4_per_44xx_clkdm,
666 &abe_44xx_clkdm,
667 &l3_instr_44xx_clkdm,
668 &l3_init_44xx_clkdm,
669 &mpuss_44xx_clkdm,
670 &mpu0_44xx_clkdm,
671 &mpu1_44xx_clkdm,
672 &l3_emif_44xx_clkdm,
673 &l4_ao_44xx_clkdm,
674 &ducati_44xx_clkdm,
675 &l3_2_44xx_clkdm,
676 &l3_1_44xx_clkdm,
677 &l3_d2d_44xx_clkdm,
678 &iss_44xx_clkdm,
679 &l3_dss_44xx_clkdm,
680 &l4_wkup_44xx_clkdm,
681 &emu_sys_44xx_clkdm,
682 &l3_dma_44xx_clkdm,
683 NULL,
684};
685
686void __init omap44xx_clockdomains_init(void)
687{
688 clkdm_init(clockdomains_omap44xx, NULL, &omap4_clkdm_operations);
689}
diff --git a/arch/arm/mach-omap2/cm-regbits-24xx.h b/arch/arm/mach-omap2/cm-regbits-24xx.h
index da51cc3ed7eb..686290437568 100644
--- a/arch/arm/mach-omap2/cm-regbits-24xx.h
+++ b/arch/arm/mach-omap2/cm-regbits-24xx.h
@@ -14,8 +14,6 @@
14 * published by the Free Software Foundation. 14 * published by the Free Software Foundation.
15 */ 15 */
16 16
17#include "cm.h"
18
19/* Bits shared between registers */ 17/* Bits shared between registers */
20 18
21/* CM_FCLKEN1_CORE and CM_ICLKEN1_CORE shared bits */ 19/* CM_FCLKEN1_CORE and CM_ICLKEN1_CORE shared bits */
@@ -126,8 +124,12 @@
126#define OMAP24XX_ST_HDQ_MASK (1 << 23) 124#define OMAP24XX_ST_HDQ_MASK (1 << 23)
127#define OMAP2420_ST_I2C2_SHIFT 20 125#define OMAP2420_ST_I2C2_SHIFT 20
128#define OMAP2420_ST_I2C2_MASK (1 << 20) 126#define OMAP2420_ST_I2C2_MASK (1 << 20)
127#define OMAP2430_ST_I2CHS1_SHIFT 19
128#define OMAP2430_ST_I2CHS1_MASK (1 << 19)
129#define OMAP2420_ST_I2C1_SHIFT 19 129#define OMAP2420_ST_I2C1_SHIFT 19
130#define OMAP2420_ST_I2C1_MASK (1 << 19) 130#define OMAP2420_ST_I2C1_MASK (1 << 19)
131#define OMAP2430_ST_I2CHS2_SHIFT 20
132#define OMAP2430_ST_I2CHS2_MASK (1 << 20)
131#define OMAP24XX_ST_MCBSP2_SHIFT 16 133#define OMAP24XX_ST_MCBSP2_SHIFT 16
132#define OMAP24XX_ST_MCBSP2_MASK (1 << 16) 134#define OMAP24XX_ST_MCBSP2_MASK (1 << 16)
133#define OMAP24XX_ST_MCBSP1_SHIFT 15 135#define OMAP24XX_ST_MCBSP1_SHIFT 15
@@ -208,8 +210,11 @@
208#define OMAP24XX_AUTO_USB_MASK (1 << 0) 210#define OMAP24XX_AUTO_USB_MASK (1 << 0)
209 211
210/* CM_AUTOIDLE3_CORE */ 212/* CM_AUTOIDLE3_CORE */
213#define OMAP24XX_AUTO_SDRC_SHIFT 2
211#define OMAP24XX_AUTO_SDRC_MASK (1 << 2) 214#define OMAP24XX_AUTO_SDRC_MASK (1 << 2)
215#define OMAP24XX_AUTO_GPMC_SHIFT 1
212#define OMAP24XX_AUTO_GPMC_MASK (1 << 1) 216#define OMAP24XX_AUTO_GPMC_MASK (1 << 1)
217#define OMAP24XX_AUTO_SDMA_SHIFT 0
213#define OMAP24XX_AUTO_SDMA_MASK (1 << 0) 218#define OMAP24XX_AUTO_SDMA_MASK (1 << 0)
214 219
215/* CM_AUTOIDLE4_CORE */ 220/* CM_AUTOIDLE4_CORE */
@@ -432,4 +437,9 @@
432#define OMAP2430_AUTOSTATE_MDM_SHIFT 0 437#define OMAP2430_AUTOSTATE_MDM_SHIFT 0
433#define OMAP2430_AUTOSTATE_MDM_MASK (1 << 0) 438#define OMAP2430_AUTOSTATE_MDM_MASK (1 << 0)
434 439
440/* OMAP24XX CM_CLKSTCTRL_*.AUTOSTATE_* register bit values */
441#define OMAP24XX_CLKSTCTRL_DISABLE_AUTO 0x0
442#define OMAP24XX_CLKSTCTRL_ENABLE_AUTO 0x1
443
444
435#endif 445#endif
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h
index fe82b79d5f3b..b91275908f33 100644
--- a/arch/arm/mach-omap2/cm-regbits-34xx.h
+++ b/arch/arm/mach-omap2/cm-regbits-34xx.h
@@ -14,8 +14,6 @@
14 * published by the Free Software Foundation. 14 * published by the Free Software Foundation.
15 */ 15 */
16 16
17#include "cm.h"
18
19/* Bits shared between registers */ 17/* Bits shared between registers */
20 18
21/* CM_FCLKEN1_CORE and CM_ICLKEN1_CORE shared bits */ 19/* CM_FCLKEN1_CORE and CM_ICLKEN1_CORE shared bits */
@@ -649,6 +647,8 @@
649#define OMAP3430_ST_MCBSP2_MASK (1 << 0) 647#define OMAP3430_ST_MCBSP2_MASK (1 << 0)
650 648
651/* CM_AUTOIDLE_PER */ 649/* CM_AUTOIDLE_PER */
650#define OMAP3630_AUTO_UART4_MASK (1 << 18)
651#define OMAP3630_AUTO_UART4_SHIFT 18
652#define OMAP3430_AUTO_GPIO6_MASK (1 << 17) 652#define OMAP3430_AUTO_GPIO6_MASK (1 << 17)
653#define OMAP3430_AUTO_GPIO6_SHIFT 17 653#define OMAP3430_AUTO_GPIO6_SHIFT 17
654#define OMAP3430_AUTO_GPIO5_MASK (1 << 16) 654#define OMAP3430_AUTO_GPIO5_MASK (1 << 16)
@@ -798,4 +798,15 @@
798#define OMAP3430ES2_CLKACTIVITY_USBHOST_SHIFT 0 798#define OMAP3430ES2_CLKACTIVITY_USBHOST_SHIFT 0
799#define OMAP3430ES2_CLKACTIVITY_USBHOST_MASK (1 << 0) 799#define OMAP3430ES2_CLKACTIVITY_USBHOST_MASK (1 << 0)
800 800
801/*
802 *
803 */
804
805/* OMAP3XXX CM_CLKSTCTRL_*.CLKTRCTRL_* register bit values */
806#define OMAP34XX_CLKSTCTRL_DISABLE_AUTO 0x0
807#define OMAP34XX_CLKSTCTRL_FORCE_SLEEP 0x1
808#define OMAP34XX_CLKSTCTRL_FORCE_WAKEUP 0x2
809#define OMAP34XX_CLKSTCTRL_ENABLE_AUTO 0x3
810
811
801#endif 812#endif
diff --git a/arch/arm/mach-omap2/cm-regbits-44xx.h b/arch/arm/mach-omap2/cm-regbits-44xx.h
index ac8458e43252..9d47a05b17b4 100644
--- a/arch/arm/mach-omap2/cm-regbits-44xx.h
+++ b/arch/arm/mach-omap2/cm-regbits-44xx.h
@@ -1,8 +1,8 @@
1/* 1/*
2 * OMAP44xx Clock Management register bits 2 * OMAP44xx Clock Management register bits
3 * 3 *
4 * Copyright (C) 2009 Texas Instruments, Inc. 4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2009 Nokia Corporation 5 * Copyright (C) 2009-2010 Nokia Corporation
6 * 6 *
7 * Paul Walmsley (paul@pwsan.com) 7 * Paul Walmsley (paul@pwsan.com)
8 * Rajendra Nayak (rnayak@ti.com) 8 * Rajendra Nayak (rnayak@ti.com)
@@ -22,456 +22,459 @@
22#ifndef __ARCH_ARM_MACH_OMAP2_CM_REGBITS_44XX_H 22#ifndef __ARCH_ARM_MACH_OMAP2_CM_REGBITS_44XX_H
23#define __ARCH_ARM_MACH_OMAP2_CM_REGBITS_44XX_H 23#define __ARCH_ARM_MACH_OMAP2_CM_REGBITS_44XX_H
24 24
25#include "cm.h" 25/*
26 26 * Used by CM_L3_1_DYNAMICDEP, CM_L3_1_DYNAMICDEP_RESTORE, CM_MPU_DYNAMICDEP,
27 27 * CM_TESLA_DYNAMICDEP
28/* Used by CM_L3_1_DYNAMICDEP, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP */ 28 */
29#define OMAP4430_ABE_DYNDEP_SHIFT 3 29#define OMAP4430_ABE_DYNDEP_SHIFT 3
30#define OMAP4430_ABE_DYNDEP_MASK BITFIELD(3, 3) 30#define OMAP4430_ABE_DYNDEP_MASK (1 << 3)
31 31
32/* 32/*
33 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 33 * Used by CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE, CM_DUCATI_STATICDEP,
34 * CM_L3INIT_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_MPU_STATICDEP, 34 * CM_L3INIT_STATICDEP, CM_MPU_STATICDEP, CM_SDMA_STATICDEP,
35 * CM_TESLA_STATICDEP 35 * CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
36 */ 36 */
37#define OMAP4430_ABE_STATDEP_SHIFT 3 37#define OMAP4430_ABE_STATDEP_SHIFT 3
38#define OMAP4430_ABE_STATDEP_MASK BITFIELD(3, 3) 38#define OMAP4430_ABE_STATDEP_MASK (1 << 3)
39 39
40/* Used by CM_L4CFG_DYNAMICDEP */ 40/* Used by CM_L4CFG_DYNAMICDEP, CM_L4CFG_DYNAMICDEP_RESTORE */
41#define OMAP4430_ALWONCORE_DYNDEP_SHIFT 16 41#define OMAP4430_ALWONCORE_DYNDEP_SHIFT 16
42#define OMAP4430_ALWONCORE_DYNDEP_MASK BITFIELD(16, 16) 42#define OMAP4430_ALWONCORE_DYNDEP_MASK (1 << 16)
43 43
44/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_TESLA_STATICDEP */ 44/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_TESLA_STATICDEP */
45#define OMAP4430_ALWONCORE_STATDEP_SHIFT 16 45#define OMAP4430_ALWONCORE_STATDEP_SHIFT 16
46#define OMAP4430_ALWONCORE_STATDEP_MASK BITFIELD(16, 16) 46#define OMAP4430_ALWONCORE_STATDEP_MASK (1 << 16)
47 47
48/* 48/*
49 * Used by CM_AUTOIDLE_DPLL_PER, CM_AUTOIDLE_DPLL_UNIPRO, CM_AUTOIDLE_DPLL_USB, 49 * Used by CM_AUTOIDLE_DPLL_ABE, CM_AUTOIDLE_DPLL_CORE,
50 * CM_AUTOIDLE_DPLL_CORE_RESTORE, CM_AUTOIDLE_DPLL_ABE, CM_AUTOIDLE_DPLL_CORE, 50 * CM_AUTOIDLE_DPLL_CORE_RESTORE, CM_AUTOIDLE_DPLL_DDRPHY,
51 * CM_AUTOIDLE_DPLL_DDRPHY, CM_AUTOIDLE_DPLL_IVA, CM_AUTOIDLE_DPLL_MPU 51 * CM_AUTOIDLE_DPLL_IVA, CM_AUTOIDLE_DPLL_MPU, CM_AUTOIDLE_DPLL_PER,
52 * CM_AUTOIDLE_DPLL_UNIPRO, CM_AUTOIDLE_DPLL_USB
52 */ 53 */
53#define OMAP4430_AUTO_DPLL_MODE_SHIFT 0 54#define OMAP4430_AUTO_DPLL_MODE_SHIFT 0
54#define OMAP4430_AUTO_DPLL_MODE_MASK BITFIELD(0, 2) 55#define OMAP4430_AUTO_DPLL_MODE_MASK (0x7 << 0)
55 56
56/* Used by CM_L4CFG_DYNAMICDEP */ 57/* Used by CM_L4CFG_DYNAMICDEP, CM_L4CFG_DYNAMICDEP_RESTORE */
57#define OMAP4430_CEFUSE_DYNDEP_SHIFT 17 58#define OMAP4430_CEFUSE_DYNDEP_SHIFT 17
58#define OMAP4430_CEFUSE_DYNDEP_MASK BITFIELD(17, 17) 59#define OMAP4430_CEFUSE_DYNDEP_MASK (1 << 17)
59 60
60/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_TESLA_STATICDEP */ 61/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_TESLA_STATICDEP */
61#define OMAP4430_CEFUSE_STATDEP_SHIFT 17 62#define OMAP4430_CEFUSE_STATDEP_SHIFT 17
62#define OMAP4430_CEFUSE_STATDEP_MASK BITFIELD(17, 17) 63#define OMAP4430_CEFUSE_STATDEP_MASK (1 << 17)
63 64
64/* Used by CM1_ABE_CLKSTCTRL */ 65/* Used by CM1_ABE_CLKSTCTRL */
65#define OMAP4430_CLKACTIVITY_ABE_24M_GFCLK_SHIFT 13 66#define OMAP4430_CLKACTIVITY_ABE_24M_GFCLK_SHIFT 13
66#define OMAP4430_CLKACTIVITY_ABE_24M_GFCLK_MASK BITFIELD(13, 13) 67#define OMAP4430_CLKACTIVITY_ABE_24M_GFCLK_MASK (1 << 13)
67 68
68/* Used by CM1_ABE_CLKSTCTRL */ 69/* Used by CM1_ABE_CLKSTCTRL */
69#define OMAP4430_CLKACTIVITY_ABE_ALWON_32K_CLK_SHIFT 12 70#define OMAP4430_CLKACTIVITY_ABE_ALWON_32K_CLK_SHIFT 12
70#define OMAP4430_CLKACTIVITY_ABE_ALWON_32K_CLK_MASK BITFIELD(12, 12) 71#define OMAP4430_CLKACTIVITY_ABE_ALWON_32K_CLK_MASK (1 << 12)
71 72
72/* Used by CM_WKUP_CLKSTCTRL */ 73/* Used by CM_WKUP_CLKSTCTRL */
73#define OMAP4430_CLKACTIVITY_ABE_LP_CLK_SHIFT 9 74#define OMAP4430_CLKACTIVITY_ABE_LP_CLK_SHIFT 9
74#define OMAP4430_CLKACTIVITY_ABE_LP_CLK_MASK BITFIELD(9, 9) 75#define OMAP4430_CLKACTIVITY_ABE_LP_CLK_MASK (1 << 9)
75 76
76/* Used by CM1_ABE_CLKSTCTRL */ 77/* Used by CM1_ABE_CLKSTCTRL */
77#define OMAP4430_CLKACTIVITY_ABE_SYSCLK_SHIFT 11 78#define OMAP4430_CLKACTIVITY_ABE_SYSCLK_SHIFT 11
78#define OMAP4430_CLKACTIVITY_ABE_SYSCLK_MASK BITFIELD(11, 11) 79#define OMAP4430_CLKACTIVITY_ABE_SYSCLK_MASK (1 << 11)
79 80
80/* Used by CM1_ABE_CLKSTCTRL */ 81/* Used by CM1_ABE_CLKSTCTRL */
81#define OMAP4430_CLKACTIVITY_ABE_X2_CLK_SHIFT 8 82#define OMAP4430_CLKACTIVITY_ABE_X2_CLK_SHIFT 8
82#define OMAP4430_CLKACTIVITY_ABE_X2_CLK_MASK BITFIELD(8, 8) 83#define OMAP4430_CLKACTIVITY_ABE_X2_CLK_MASK (1 << 8)
83 84
84/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */ 85/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */
85#define OMAP4430_CLKACTIVITY_ASYNC_DLL_CLK_SHIFT 11 86#define OMAP4430_CLKACTIVITY_ASYNC_DLL_CLK_SHIFT 11
86#define OMAP4430_CLKACTIVITY_ASYNC_DLL_CLK_MASK BITFIELD(11, 11) 87#define OMAP4430_CLKACTIVITY_ASYNC_DLL_CLK_MASK (1 << 11)
87 88
88/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */ 89/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */
89#define OMAP4430_CLKACTIVITY_ASYNC_PHY1_CLK_SHIFT 12 90#define OMAP4430_CLKACTIVITY_ASYNC_PHY1_CLK_SHIFT 12
90#define OMAP4430_CLKACTIVITY_ASYNC_PHY1_CLK_MASK BITFIELD(12, 12) 91#define OMAP4430_CLKACTIVITY_ASYNC_PHY1_CLK_MASK (1 << 12)
91 92
92/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */ 93/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */
93#define OMAP4430_CLKACTIVITY_ASYNC_PHY2_CLK_SHIFT 13 94#define OMAP4430_CLKACTIVITY_ASYNC_PHY2_CLK_SHIFT 13
94#define OMAP4430_CLKACTIVITY_ASYNC_PHY2_CLK_MASK BITFIELD(13, 13) 95#define OMAP4430_CLKACTIVITY_ASYNC_PHY2_CLK_MASK (1 << 13)
95 96
96/* Used by CM_CAM_CLKSTCTRL */ 97/* Used by CM_CAM_CLKSTCTRL */
97#define OMAP4430_CLKACTIVITY_CAM_PHY_CTRL_GCLK_SHIFT 9 98#define OMAP4430_CLKACTIVITY_CAM_PHY_CTRL_GCLK_SHIFT 9
98#define OMAP4430_CLKACTIVITY_CAM_PHY_CTRL_GCLK_MASK BITFIELD(9, 9) 99#define OMAP4430_CLKACTIVITY_CAM_PHY_CTRL_GCLK_MASK (1 << 9)
100
101/* Used by CM_ALWON_CLKSTCTRL */
102#define OMAP4430_CLKACTIVITY_CORE_ALWON_32K_GFCLK_SHIFT 12
103#define OMAP4430_CLKACTIVITY_CORE_ALWON_32K_GFCLK_MASK (1 << 12)
99 104
100/* Used by CM_EMU_CLKSTCTRL */ 105/* Used by CM_EMU_CLKSTCTRL */
101#define OMAP4430_CLKACTIVITY_CORE_DPLL_EMU_CLK_SHIFT 9 106#define OMAP4430_CLKACTIVITY_CORE_DPLL_EMU_CLK_SHIFT 9
102#define OMAP4430_CLKACTIVITY_CORE_DPLL_EMU_CLK_MASK BITFIELD(9, 9) 107#define OMAP4430_CLKACTIVITY_CORE_DPLL_EMU_CLK_MASK (1 << 9)
103 108
104/* Used by CM_CEFUSE_CLKSTCTRL */ 109/* Used by CM_CEFUSE_CLKSTCTRL */
105#define OMAP4430_CLKACTIVITY_CUST_EFUSE_SYS_CLK_SHIFT 9 110#define OMAP4430_CLKACTIVITY_CUST_EFUSE_SYS_CLK_SHIFT 9
106#define OMAP4430_CLKACTIVITY_CUST_EFUSE_SYS_CLK_MASK BITFIELD(9, 9) 111#define OMAP4430_CLKACTIVITY_CUST_EFUSE_SYS_CLK_MASK (1 << 9)
107 112
108/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */ 113/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */
109#define OMAP4430_CLKACTIVITY_DLL_CLK_SHIFT 9 114#define OMAP4430_CLKACTIVITY_DLL_CLK_SHIFT 9
110#define OMAP4430_CLKACTIVITY_DLL_CLK_MASK BITFIELD(9, 9) 115#define OMAP4430_CLKACTIVITY_DLL_CLK_MASK (1 << 9)
111 116
112/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 117/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
113#define OMAP4430_CLKACTIVITY_DMT10_GFCLK_SHIFT 9 118#define OMAP4430_CLKACTIVITY_DMT10_GFCLK_SHIFT 9
114#define OMAP4430_CLKACTIVITY_DMT10_GFCLK_MASK BITFIELD(9, 9) 119#define OMAP4430_CLKACTIVITY_DMT10_GFCLK_MASK (1 << 9)
115 120
116/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 121/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
117#define OMAP4430_CLKACTIVITY_DMT11_GFCLK_SHIFT 10 122#define OMAP4430_CLKACTIVITY_DMT11_GFCLK_SHIFT 10
118#define OMAP4430_CLKACTIVITY_DMT11_GFCLK_MASK BITFIELD(10, 10) 123#define OMAP4430_CLKACTIVITY_DMT11_GFCLK_MASK (1 << 10)
119 124
120/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 125/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
121#define OMAP4430_CLKACTIVITY_DMT2_GFCLK_SHIFT 11 126#define OMAP4430_CLKACTIVITY_DMT2_GFCLK_SHIFT 11
122#define OMAP4430_CLKACTIVITY_DMT2_GFCLK_MASK BITFIELD(11, 11) 127#define OMAP4430_CLKACTIVITY_DMT2_GFCLK_MASK (1 << 11)
123 128
124/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 129/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
125#define OMAP4430_CLKACTIVITY_DMT3_GFCLK_SHIFT 12 130#define OMAP4430_CLKACTIVITY_DMT3_GFCLK_SHIFT 12
126#define OMAP4430_CLKACTIVITY_DMT3_GFCLK_MASK BITFIELD(12, 12) 131#define OMAP4430_CLKACTIVITY_DMT3_GFCLK_MASK (1 << 12)
127 132
128/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 133/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
129#define OMAP4430_CLKACTIVITY_DMT4_GFCLK_SHIFT 13 134#define OMAP4430_CLKACTIVITY_DMT4_GFCLK_SHIFT 13
130#define OMAP4430_CLKACTIVITY_DMT4_GFCLK_MASK BITFIELD(13, 13) 135#define OMAP4430_CLKACTIVITY_DMT4_GFCLK_MASK (1 << 13)
131 136
132/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 137/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
133#define OMAP4430_CLKACTIVITY_DMT9_GFCLK_SHIFT 14 138#define OMAP4430_CLKACTIVITY_DMT9_GFCLK_SHIFT 14
134#define OMAP4430_CLKACTIVITY_DMT9_GFCLK_MASK BITFIELD(14, 14) 139#define OMAP4430_CLKACTIVITY_DMT9_GFCLK_MASK (1 << 14)
135 140
136/* Used by CM_DSS_CLKSTCTRL */ 141/* Used by CM_DSS_CLKSTCTRL */
137#define OMAP4430_CLKACTIVITY_DSS_ALWON_SYS_CLK_SHIFT 10 142#define OMAP4430_CLKACTIVITY_DSS_ALWON_SYS_CLK_SHIFT 10
138#define OMAP4430_CLKACTIVITY_DSS_ALWON_SYS_CLK_MASK BITFIELD(10, 10) 143#define OMAP4430_CLKACTIVITY_DSS_ALWON_SYS_CLK_MASK (1 << 10)
139 144
140/* Used by CM_DSS_CLKSTCTRL */ 145/* Used by CM_DSS_CLKSTCTRL */
141#define OMAP4430_CLKACTIVITY_DSS_FCLK_SHIFT 9 146#define OMAP4430_CLKACTIVITY_DSS_FCLK_SHIFT 9
142#define OMAP4430_CLKACTIVITY_DSS_FCLK_MASK BITFIELD(9, 9) 147#define OMAP4430_CLKACTIVITY_DSS_FCLK_MASK (1 << 9)
143 148
144/* Used by CM_DUCATI_CLKSTCTRL */ 149/* Used by CM_DUCATI_CLKSTCTRL */
145#define OMAP4430_CLKACTIVITY_DUCATI_GCLK_SHIFT 8 150#define OMAP4430_CLKACTIVITY_DUCATI_GCLK_SHIFT 8
146#define OMAP4430_CLKACTIVITY_DUCATI_GCLK_MASK BITFIELD(8, 8) 151#define OMAP4430_CLKACTIVITY_DUCATI_GCLK_MASK (1 << 8)
147
148/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
149#define OMAP4430_CLKACTIVITY_EMAC_50MHZ_CLK_SHIFT 10
150#define OMAP4430_CLKACTIVITY_EMAC_50MHZ_CLK_MASK BITFIELD(10, 10)
151 152
152/* Used by CM_EMU_CLKSTCTRL */ 153/* Used by CM_EMU_CLKSTCTRL */
153#define OMAP4430_CLKACTIVITY_EMU_SYS_CLK_SHIFT 8 154#define OMAP4430_CLKACTIVITY_EMU_SYS_CLK_SHIFT 8
154#define OMAP4430_CLKACTIVITY_EMU_SYS_CLK_MASK BITFIELD(8, 8) 155#define OMAP4430_CLKACTIVITY_EMU_SYS_CLK_MASK (1 << 8)
155 156
156/* Used by CM_CAM_CLKSTCTRL */ 157/* Used by CM_CAM_CLKSTCTRL */
157#define OMAP4430_CLKACTIVITY_FDIF_GFCLK_SHIFT 10 158#define OMAP4430_CLKACTIVITY_FDIF_GFCLK_SHIFT 10
158#define OMAP4430_CLKACTIVITY_FDIF_GFCLK_MASK BITFIELD(10, 10) 159#define OMAP4430_CLKACTIVITY_FDIF_GFCLK_MASK (1 << 10)
159 160
160/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 161/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
161#define OMAP4430_CLKACTIVITY_FUNC_12M_GFCLK_SHIFT 15 162#define OMAP4430_CLKACTIVITY_FUNC_12M_GFCLK_SHIFT 15
162#define OMAP4430_CLKACTIVITY_FUNC_12M_GFCLK_MASK BITFIELD(15, 15) 163#define OMAP4430_CLKACTIVITY_FUNC_12M_GFCLK_MASK (1 << 15)
163 164
164/* Used by CM1_ABE_CLKSTCTRL */ 165/* Used by CM1_ABE_CLKSTCTRL */
165#define OMAP4430_CLKACTIVITY_FUNC_24M_GFCLK_SHIFT 10 166#define OMAP4430_CLKACTIVITY_FUNC_24M_GFCLK_SHIFT 10
166#define OMAP4430_CLKACTIVITY_FUNC_24M_GFCLK_MASK BITFIELD(10, 10) 167#define OMAP4430_CLKACTIVITY_FUNC_24M_GFCLK_MASK (1 << 10)
167 168
168/* Used by CM_DSS_CLKSTCTRL */ 169/* Used by CM_DSS_CLKSTCTRL */
169#define OMAP4430_CLKACTIVITY_HDMI_PHY_48MHZ_GFCLK_SHIFT 11 170#define OMAP4430_CLKACTIVITY_HDMI_PHY_48MHZ_GFCLK_SHIFT 11
170#define OMAP4430_CLKACTIVITY_HDMI_PHY_48MHZ_GFCLK_MASK BITFIELD(11, 11) 171#define OMAP4430_CLKACTIVITY_HDMI_PHY_48MHZ_GFCLK_MASK (1 << 11)
171 172
172/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 173/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
173#define OMAP4430_CLKACTIVITY_HSIC_P1_480M_GFCLK_SHIFT 20 174#define OMAP4430_CLKACTIVITY_HSIC_P1_480M_GFCLK_SHIFT 20
174#define OMAP4430_CLKACTIVITY_HSIC_P1_480M_GFCLK_MASK BITFIELD(20, 20) 175#define OMAP4430_CLKACTIVITY_HSIC_P1_480M_GFCLK_MASK (1 << 20)
175 176
176/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 177/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
177#define OMAP4430_CLKACTIVITY_HSIC_P1_GFCLK_SHIFT 26 178#define OMAP4430_CLKACTIVITY_HSIC_P1_GFCLK_SHIFT 26
178#define OMAP4430_CLKACTIVITY_HSIC_P1_GFCLK_MASK BITFIELD(26, 26) 179#define OMAP4430_CLKACTIVITY_HSIC_P1_GFCLK_MASK (1 << 26)
179 180
180/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 181/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
181#define OMAP4430_CLKACTIVITY_HSIC_P2_480M_GFCLK_SHIFT 21 182#define OMAP4430_CLKACTIVITY_HSIC_P2_480M_GFCLK_SHIFT 21
182#define OMAP4430_CLKACTIVITY_HSIC_P2_480M_GFCLK_MASK BITFIELD(21, 21) 183#define OMAP4430_CLKACTIVITY_HSIC_P2_480M_GFCLK_MASK (1 << 21)
183 184
184/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 185/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
185#define OMAP4430_CLKACTIVITY_HSIC_P2_GFCLK_SHIFT 27 186#define OMAP4430_CLKACTIVITY_HSIC_P2_GFCLK_SHIFT 27
186#define OMAP4430_CLKACTIVITY_HSIC_P2_GFCLK_MASK BITFIELD(27, 27) 187#define OMAP4430_CLKACTIVITY_HSIC_P2_GFCLK_MASK (1 << 27)
187
188/* Used by CM_L3INIT_CLKSTCTRL */
189#define OMAP4430_CLKACTIVITY_INIT_32K_GFCLK_SHIFT 31
190#define OMAP4430_CLKACTIVITY_INIT_32K_GFCLK_MASK BITFIELD(31, 31)
191 188
192/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 189/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
193#define OMAP4430_CLKACTIVITY_INIT_48MC_GFCLK_SHIFT 13 190#define OMAP4430_CLKACTIVITY_INIT_48MC_GFCLK_SHIFT 13
194#define OMAP4430_CLKACTIVITY_INIT_48MC_GFCLK_MASK BITFIELD(13, 13) 191#define OMAP4430_CLKACTIVITY_INIT_48MC_GFCLK_MASK (1 << 13)
195 192
196/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 193/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
197#define OMAP4430_CLKACTIVITY_INIT_48M_GFCLK_SHIFT 12 194#define OMAP4430_CLKACTIVITY_INIT_48M_GFCLK_SHIFT 12
198#define OMAP4430_CLKACTIVITY_INIT_48M_GFCLK_MASK BITFIELD(12, 12) 195#define OMAP4430_CLKACTIVITY_INIT_48M_GFCLK_MASK (1 << 12)
199 196
200/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 197/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
201#define OMAP4430_CLKACTIVITY_INIT_60M_P1_GFCLK_SHIFT 28 198#define OMAP4430_CLKACTIVITY_INIT_60M_P1_GFCLK_SHIFT 28
202#define OMAP4430_CLKACTIVITY_INIT_60M_P1_GFCLK_MASK BITFIELD(28, 28) 199#define OMAP4430_CLKACTIVITY_INIT_60M_P1_GFCLK_MASK (1 << 28)
203 200
204/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 201/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
205#define OMAP4430_CLKACTIVITY_INIT_60M_P2_GFCLK_SHIFT 29 202#define OMAP4430_CLKACTIVITY_INIT_60M_P2_GFCLK_SHIFT 29
206#define OMAP4430_CLKACTIVITY_INIT_60M_P2_GFCLK_MASK BITFIELD(29, 29) 203#define OMAP4430_CLKACTIVITY_INIT_60M_P2_GFCLK_MASK (1 << 29)
207 204
208/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 205/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
209#define OMAP4430_CLKACTIVITY_INIT_96M_GFCLK_SHIFT 11 206#define OMAP4430_CLKACTIVITY_INIT_96M_GFCLK_SHIFT 11
210#define OMAP4430_CLKACTIVITY_INIT_96M_GFCLK_MASK BITFIELD(11, 11) 207#define OMAP4430_CLKACTIVITY_INIT_96M_GFCLK_MASK (1 << 11)
211 208
212/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 209/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
213#define OMAP4430_CLKACTIVITY_INIT_HSI_GFCLK_SHIFT 16 210#define OMAP4430_CLKACTIVITY_INIT_HSI_GFCLK_SHIFT 16
214#define OMAP4430_CLKACTIVITY_INIT_HSI_GFCLK_MASK BITFIELD(16, 16) 211#define OMAP4430_CLKACTIVITY_INIT_HSI_GFCLK_MASK (1 << 16)
215 212
216/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 213/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
217#define OMAP4430_CLKACTIVITY_INIT_HSMMC1_GFCLK_SHIFT 17 214#define OMAP4430_CLKACTIVITY_INIT_HSMMC1_GFCLK_SHIFT 17
218#define OMAP4430_CLKACTIVITY_INIT_HSMMC1_GFCLK_MASK BITFIELD(17, 17) 215#define OMAP4430_CLKACTIVITY_INIT_HSMMC1_GFCLK_MASK (1 << 17)
219 216
220/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 217/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
221#define OMAP4430_CLKACTIVITY_INIT_HSMMC2_GFCLK_SHIFT 18 218#define OMAP4430_CLKACTIVITY_INIT_HSMMC2_GFCLK_SHIFT 18
222#define OMAP4430_CLKACTIVITY_INIT_HSMMC2_GFCLK_MASK BITFIELD(18, 18) 219#define OMAP4430_CLKACTIVITY_INIT_HSMMC2_GFCLK_MASK (1 << 18)
223 220
224/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 221/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
225#define OMAP4430_CLKACTIVITY_INIT_HSMMC6_GFCLK_SHIFT 19 222#define OMAP4430_CLKACTIVITY_INIT_HSMMC6_GFCLK_SHIFT 19
226#define OMAP4430_CLKACTIVITY_INIT_HSMMC6_GFCLK_MASK BITFIELD(19, 19) 223#define OMAP4430_CLKACTIVITY_INIT_HSMMC6_GFCLK_MASK (1 << 19)
227 224
228/* Used by CM_CAM_CLKSTCTRL */ 225/* Used by CM_CAM_CLKSTCTRL */
229#define OMAP4430_CLKACTIVITY_ISS_GCLK_SHIFT 8 226#define OMAP4430_CLKACTIVITY_ISS_GCLK_SHIFT 8
230#define OMAP4430_CLKACTIVITY_ISS_GCLK_MASK BITFIELD(8, 8) 227#define OMAP4430_CLKACTIVITY_ISS_GCLK_MASK (1 << 8)
231 228
232/* Used by CM_IVAHD_CLKSTCTRL */ 229/* Used by CM_IVAHD_CLKSTCTRL */
233#define OMAP4430_CLKACTIVITY_IVAHD_ROOT_CLK_SHIFT 8 230#define OMAP4430_CLKACTIVITY_IVAHD_ROOT_CLK_SHIFT 8
234#define OMAP4430_CLKACTIVITY_IVAHD_ROOT_CLK_MASK BITFIELD(8, 8) 231#define OMAP4430_CLKACTIVITY_IVAHD_ROOT_CLK_MASK (1 << 8)
235 232
236/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 233/* Used by CM_D2D_CLKSTCTRL */
237#define OMAP4430_CLKACTIVITY_L3INIT_DPLL_ALWON_CLK_SHIFT 14 234#define OMAP4430_CLKACTIVITY_L3X2_D2D_GICLK_SHIFT 10
238#define OMAP4430_CLKACTIVITY_L3INIT_DPLL_ALWON_CLK_MASK BITFIELD(14, 14) 235#define OMAP4430_CLKACTIVITY_L3X2_D2D_GICLK_MASK (1 << 10)
239 236
240/* Used by CM_L3_1_CLKSTCTRL, CM_L3_1_CLKSTCTRL_RESTORE */ 237/* Used by CM_L3_1_CLKSTCTRL, CM_L3_1_CLKSTCTRL_RESTORE */
241#define OMAP4430_CLKACTIVITY_L3_1_GICLK_SHIFT 8 238#define OMAP4430_CLKACTIVITY_L3_1_GICLK_SHIFT 8
242#define OMAP4430_CLKACTIVITY_L3_1_GICLK_MASK BITFIELD(8, 8) 239#define OMAP4430_CLKACTIVITY_L3_1_GICLK_MASK (1 << 8)
243 240
244/* Used by CM_L3_2_CLKSTCTRL, CM_L3_2_CLKSTCTRL_RESTORE */ 241/* Used by CM_L3_2_CLKSTCTRL, CM_L3_2_CLKSTCTRL_RESTORE */
245#define OMAP4430_CLKACTIVITY_L3_2_GICLK_SHIFT 8 242#define OMAP4430_CLKACTIVITY_L3_2_GICLK_SHIFT 8
246#define OMAP4430_CLKACTIVITY_L3_2_GICLK_MASK BITFIELD(8, 8) 243#define OMAP4430_CLKACTIVITY_L3_2_GICLK_MASK (1 << 8)
247 244
248/* Used by CM_D2D_CLKSTCTRL */ 245/* Used by CM_D2D_CLKSTCTRL */
249#define OMAP4430_CLKACTIVITY_L3_D2D_GICLK_SHIFT 8 246#define OMAP4430_CLKACTIVITY_L3_D2D_GICLK_SHIFT 8
250#define OMAP4430_CLKACTIVITY_L3_D2D_GICLK_MASK BITFIELD(8, 8) 247#define OMAP4430_CLKACTIVITY_L3_D2D_GICLK_MASK (1 << 8)
251 248
252/* Used by CM_SDMA_CLKSTCTRL */ 249/* Used by CM_SDMA_CLKSTCTRL */
253#define OMAP4430_CLKACTIVITY_L3_DMA_GICLK_SHIFT 8 250#define OMAP4430_CLKACTIVITY_L3_DMA_GICLK_SHIFT 8
254#define OMAP4430_CLKACTIVITY_L3_DMA_GICLK_MASK BITFIELD(8, 8) 251#define OMAP4430_CLKACTIVITY_L3_DMA_GICLK_MASK (1 << 8)
255 252
256/* Used by CM_DSS_CLKSTCTRL */ 253/* Used by CM_DSS_CLKSTCTRL */
257#define OMAP4430_CLKACTIVITY_L3_DSS_GICLK_SHIFT 8 254#define OMAP4430_CLKACTIVITY_L3_DSS_GICLK_SHIFT 8
258#define OMAP4430_CLKACTIVITY_L3_DSS_GICLK_MASK BITFIELD(8, 8) 255#define OMAP4430_CLKACTIVITY_L3_DSS_GICLK_MASK (1 << 8)
259 256
260/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */ 257/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */
261#define OMAP4430_CLKACTIVITY_L3_EMIF_GICLK_SHIFT 8 258#define OMAP4430_CLKACTIVITY_L3_EMIF_GICLK_SHIFT 8
262#define OMAP4430_CLKACTIVITY_L3_EMIF_GICLK_MASK BITFIELD(8, 8) 259#define OMAP4430_CLKACTIVITY_L3_EMIF_GICLK_MASK (1 << 8)
263 260
264/* Used by CM_GFX_CLKSTCTRL */ 261/* Used by CM_GFX_CLKSTCTRL */
265#define OMAP4430_CLKACTIVITY_L3_GFX_GICLK_SHIFT 8 262#define OMAP4430_CLKACTIVITY_L3_GFX_GICLK_SHIFT 8
266#define OMAP4430_CLKACTIVITY_L3_GFX_GICLK_MASK BITFIELD(8, 8) 263#define OMAP4430_CLKACTIVITY_L3_GFX_GICLK_MASK (1 << 8)
267 264
268/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 265/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
269#define OMAP4430_CLKACTIVITY_L3_INIT_GICLK_SHIFT 8 266#define OMAP4430_CLKACTIVITY_L3_INIT_GICLK_SHIFT 8
270#define OMAP4430_CLKACTIVITY_L3_INIT_GICLK_MASK BITFIELD(8, 8) 267#define OMAP4430_CLKACTIVITY_L3_INIT_GICLK_MASK (1 << 8)
271 268
272/* Used by CM_L3INSTR_CLKSTCTRL */ 269/* Used by CM_L3INSTR_CLKSTCTRL */
273#define OMAP4430_CLKACTIVITY_L3_INSTR_GICLK_SHIFT 8 270#define OMAP4430_CLKACTIVITY_L3_INSTR_GICLK_SHIFT 8
274#define OMAP4430_CLKACTIVITY_L3_INSTR_GICLK_MASK BITFIELD(8, 8) 271#define OMAP4430_CLKACTIVITY_L3_INSTR_GICLK_MASK (1 << 8)
275 272
276/* Used by CM_L4SEC_CLKSTCTRL */ 273/* Used by CM_L4SEC_CLKSTCTRL */
277#define OMAP4430_CLKACTIVITY_L3_SECURE_GICLK_SHIFT 8 274#define OMAP4430_CLKACTIVITY_L3_SECURE_GICLK_SHIFT 8
278#define OMAP4430_CLKACTIVITY_L3_SECURE_GICLK_MASK BITFIELD(8, 8) 275#define OMAP4430_CLKACTIVITY_L3_SECURE_GICLK_MASK (1 << 8)
279 276
280/* Used by CM_ALWON_CLKSTCTRL */ 277/* Used by CM_ALWON_CLKSTCTRL */
281#define OMAP4430_CLKACTIVITY_L4_AO_ICLK_SHIFT 8 278#define OMAP4430_CLKACTIVITY_L4_AO_ICLK_SHIFT 8
282#define OMAP4430_CLKACTIVITY_L4_AO_ICLK_MASK BITFIELD(8, 8) 279#define OMAP4430_CLKACTIVITY_L4_AO_ICLK_MASK (1 << 8)
283 280
284/* Used by CM_CEFUSE_CLKSTCTRL */ 281/* Used by CM_CEFUSE_CLKSTCTRL */
285#define OMAP4430_CLKACTIVITY_L4_CEFUSE_GICLK_SHIFT 8 282#define OMAP4430_CLKACTIVITY_L4_CEFUSE_GICLK_SHIFT 8
286#define OMAP4430_CLKACTIVITY_L4_CEFUSE_GICLK_MASK BITFIELD(8, 8) 283#define OMAP4430_CLKACTIVITY_L4_CEFUSE_GICLK_MASK (1 << 8)
287 284
288/* Used by CM_L4CFG_CLKSTCTRL, CM_L4CFG_CLKSTCTRL_RESTORE */ 285/* Used by CM_L4CFG_CLKSTCTRL, CM_L4CFG_CLKSTCTRL_RESTORE */
289#define OMAP4430_CLKACTIVITY_L4_CFG_GICLK_SHIFT 8 286#define OMAP4430_CLKACTIVITY_L4_CFG_GICLK_SHIFT 8
290#define OMAP4430_CLKACTIVITY_L4_CFG_GICLK_MASK BITFIELD(8, 8) 287#define OMAP4430_CLKACTIVITY_L4_CFG_GICLK_MASK (1 << 8)
291 288
292/* Used by CM_D2D_CLKSTCTRL */ 289/* Used by CM_D2D_CLKSTCTRL */
293#define OMAP4430_CLKACTIVITY_L4_D2D_GICLK_SHIFT 9 290#define OMAP4430_CLKACTIVITY_L4_D2D_GICLK_SHIFT 9
294#define OMAP4430_CLKACTIVITY_L4_D2D_GICLK_MASK BITFIELD(9, 9) 291#define OMAP4430_CLKACTIVITY_L4_D2D_GICLK_MASK (1 << 9)
295 292
296/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 293/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
297#define OMAP4430_CLKACTIVITY_L4_INIT_GICLK_SHIFT 9 294#define OMAP4430_CLKACTIVITY_L4_INIT_GICLK_SHIFT 9
298#define OMAP4430_CLKACTIVITY_L4_INIT_GICLK_MASK BITFIELD(9, 9) 295#define OMAP4430_CLKACTIVITY_L4_INIT_GICLK_MASK (1 << 9)
299 296
300/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 297/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
301#define OMAP4430_CLKACTIVITY_L4_PER_GICLK_SHIFT 8 298#define OMAP4430_CLKACTIVITY_L4_PER_GICLK_SHIFT 8
302#define OMAP4430_CLKACTIVITY_L4_PER_GICLK_MASK BITFIELD(8, 8) 299#define OMAP4430_CLKACTIVITY_L4_PER_GICLK_MASK (1 << 8)
303 300
304/* Used by CM_L4SEC_CLKSTCTRL */ 301/* Used by CM_L4SEC_CLKSTCTRL */
305#define OMAP4430_CLKACTIVITY_L4_SECURE_GICLK_SHIFT 9 302#define OMAP4430_CLKACTIVITY_L4_SECURE_GICLK_SHIFT 9
306#define OMAP4430_CLKACTIVITY_L4_SECURE_GICLK_MASK BITFIELD(9, 9) 303#define OMAP4430_CLKACTIVITY_L4_SECURE_GICLK_MASK (1 << 9)
307 304
308/* Used by CM_WKUP_CLKSTCTRL */ 305/* Used by CM_WKUP_CLKSTCTRL */
309#define OMAP4430_CLKACTIVITY_L4_WKUP_GICLK_SHIFT 12 306#define OMAP4430_CLKACTIVITY_L4_WKUP_GICLK_SHIFT 12
310#define OMAP4430_CLKACTIVITY_L4_WKUP_GICLK_MASK BITFIELD(12, 12) 307#define OMAP4430_CLKACTIVITY_L4_WKUP_GICLK_MASK (1 << 12)
311 308
312/* Used by CM_MPU_CLKSTCTRL, CM_MPU_CLKSTCTRL_RESTORE */ 309/* Used by CM_MPU_CLKSTCTRL, CM_MPU_CLKSTCTRL_RESTORE */
313#define OMAP4430_CLKACTIVITY_MPU_DPLL_CLK_SHIFT 8 310#define OMAP4430_CLKACTIVITY_MPU_DPLL_CLK_SHIFT 8
314#define OMAP4430_CLKACTIVITY_MPU_DPLL_CLK_MASK BITFIELD(8, 8) 311#define OMAP4430_CLKACTIVITY_MPU_DPLL_CLK_MASK (1 << 8)
315 312
316/* Used by CM1_ABE_CLKSTCTRL */ 313/* Used by CM1_ABE_CLKSTCTRL */
317#define OMAP4430_CLKACTIVITY_OCP_ABE_GICLK_SHIFT 9 314#define OMAP4430_CLKACTIVITY_OCP_ABE_GICLK_SHIFT 9
318#define OMAP4430_CLKACTIVITY_OCP_ABE_GICLK_MASK BITFIELD(9, 9) 315#define OMAP4430_CLKACTIVITY_OCP_ABE_GICLK_MASK (1 << 9)
319 316
320/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 317/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
321#define OMAP4430_CLKACTIVITY_PER_24MC_GFCLK_SHIFT 16 318#define OMAP4430_CLKACTIVITY_PER_24MC_GFCLK_SHIFT 16
322#define OMAP4430_CLKACTIVITY_PER_24MC_GFCLK_MASK BITFIELD(16, 16) 319#define OMAP4430_CLKACTIVITY_PER_24MC_GFCLK_MASK (1 << 16)
323 320
324/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 321/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
325#define OMAP4430_CLKACTIVITY_PER_32K_GFCLK_SHIFT 17 322#define OMAP4430_CLKACTIVITY_PER_32K_GFCLK_SHIFT 17
326#define OMAP4430_CLKACTIVITY_PER_32K_GFCLK_MASK BITFIELD(17, 17) 323#define OMAP4430_CLKACTIVITY_PER_32K_GFCLK_MASK (1 << 17)
327 324
328/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 325/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
329#define OMAP4430_CLKACTIVITY_PER_48M_GFCLK_SHIFT 18 326#define OMAP4430_CLKACTIVITY_PER_48M_GFCLK_SHIFT 18
330#define OMAP4430_CLKACTIVITY_PER_48M_GFCLK_MASK BITFIELD(18, 18) 327#define OMAP4430_CLKACTIVITY_PER_48M_GFCLK_MASK (1 << 18)
331 328
332/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 329/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
333#define OMAP4430_CLKACTIVITY_PER_96M_GFCLK_SHIFT 19 330#define OMAP4430_CLKACTIVITY_PER_96M_GFCLK_SHIFT 19
334#define OMAP4430_CLKACTIVITY_PER_96M_GFCLK_MASK BITFIELD(19, 19) 331#define OMAP4430_CLKACTIVITY_PER_96M_GFCLK_MASK (1 << 19)
335 332
336/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 333/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
337#define OMAP4430_CLKACTIVITY_PER_ABE_24M_GFCLK_SHIFT 25 334#define OMAP4430_CLKACTIVITY_PER_ABE_24M_GFCLK_SHIFT 25
338#define OMAP4430_CLKACTIVITY_PER_ABE_24M_GFCLK_MASK BITFIELD(25, 25) 335#define OMAP4430_CLKACTIVITY_PER_ABE_24M_GFCLK_MASK (1 << 25)
339
340/* Used by CM_EMU_CLKSTCTRL */
341#define OMAP4430_CLKACTIVITY_PER_DPLL_EMU_CLK_SHIFT 10
342#define OMAP4430_CLKACTIVITY_PER_DPLL_EMU_CLK_MASK BITFIELD(10, 10)
343 336
344/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 337/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
345#define OMAP4430_CLKACTIVITY_PER_MCASP2_GFCLK_SHIFT 20 338#define OMAP4430_CLKACTIVITY_PER_MCASP2_GFCLK_SHIFT 20
346#define OMAP4430_CLKACTIVITY_PER_MCASP2_GFCLK_MASK BITFIELD(20, 20) 339#define OMAP4430_CLKACTIVITY_PER_MCASP2_GFCLK_MASK (1 << 20)
347 340
348/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 341/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
349#define OMAP4430_CLKACTIVITY_PER_MCASP3_GFCLK_SHIFT 21 342#define OMAP4430_CLKACTIVITY_PER_MCASP3_GFCLK_SHIFT 21
350#define OMAP4430_CLKACTIVITY_PER_MCASP3_GFCLK_MASK BITFIELD(21, 21) 343#define OMAP4430_CLKACTIVITY_PER_MCASP3_GFCLK_MASK (1 << 21)
351 344
352/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 345/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
353#define OMAP4430_CLKACTIVITY_PER_MCBSP4_GFCLK_SHIFT 22 346#define OMAP4430_CLKACTIVITY_PER_MCBSP4_GFCLK_SHIFT 22
354#define OMAP4430_CLKACTIVITY_PER_MCBSP4_GFCLK_MASK BITFIELD(22, 22) 347#define OMAP4430_CLKACTIVITY_PER_MCBSP4_GFCLK_MASK (1 << 22)
355 348
356/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */ 349/* Used by CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE */
357#define OMAP4430_CLKACTIVITY_PER_SYS_GFCLK_SHIFT 24 350#define OMAP4430_CLKACTIVITY_PER_SYS_GFCLK_SHIFT 24
358#define OMAP4430_CLKACTIVITY_PER_SYS_GFCLK_MASK BITFIELD(24, 24) 351#define OMAP4430_CLKACTIVITY_PER_SYS_GFCLK_MASK (1 << 24)
359 352
360/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */ 353/* Used by CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE */
361#define OMAP4430_CLKACTIVITY_PHY_ROOT_CLK_SHIFT 10 354#define OMAP4430_CLKACTIVITY_PHY_ROOT_CLK_SHIFT 10
362#define OMAP4430_CLKACTIVITY_PHY_ROOT_CLK_MASK BITFIELD(10, 10) 355#define OMAP4430_CLKACTIVITY_PHY_ROOT_CLK_MASK (1 << 10)
363 356
364/* Used by CM_GFX_CLKSTCTRL */ 357/* Used by CM_GFX_CLKSTCTRL */
365#define OMAP4430_CLKACTIVITY_SGX_GFCLK_SHIFT 9 358#define OMAP4430_CLKACTIVITY_SGX_GFCLK_SHIFT 9
366#define OMAP4430_CLKACTIVITY_SGX_GFCLK_MASK BITFIELD(9, 9) 359#define OMAP4430_CLKACTIVITY_SGX_GFCLK_MASK (1 << 9)
367 360
368/* Used by CM_ALWON_CLKSTCTRL */ 361/* Used by CM_ALWON_CLKSTCTRL */
369#define OMAP4430_CLKACTIVITY_SR_CORE_SYSCLK_SHIFT 11 362#define OMAP4430_CLKACTIVITY_SR_CORE_SYSCLK_SHIFT 11
370#define OMAP4430_CLKACTIVITY_SR_CORE_SYSCLK_MASK BITFIELD(11, 11) 363#define OMAP4430_CLKACTIVITY_SR_CORE_SYSCLK_MASK (1 << 11)
371 364
372/* Used by CM_ALWON_CLKSTCTRL */ 365/* Used by CM_ALWON_CLKSTCTRL */
373#define OMAP4430_CLKACTIVITY_SR_IVA_SYSCLK_SHIFT 10 366#define OMAP4430_CLKACTIVITY_SR_IVA_SYSCLK_SHIFT 10
374#define OMAP4430_CLKACTIVITY_SR_IVA_SYSCLK_MASK BITFIELD(10, 10) 367#define OMAP4430_CLKACTIVITY_SR_IVA_SYSCLK_MASK (1 << 10)
375 368
376/* Used by CM_ALWON_CLKSTCTRL */ 369/* Used by CM_ALWON_CLKSTCTRL */
377#define OMAP4430_CLKACTIVITY_SR_MPU_SYSCLK_SHIFT 9 370#define OMAP4430_CLKACTIVITY_SR_MPU_SYSCLK_SHIFT 9
378#define OMAP4430_CLKACTIVITY_SR_MPU_SYSCLK_MASK BITFIELD(9, 9) 371#define OMAP4430_CLKACTIVITY_SR_MPU_SYSCLK_MASK (1 << 9)
379 372
380/* Used by CM_WKUP_CLKSTCTRL */ 373/* Used by CM_WKUP_CLKSTCTRL */
381#define OMAP4430_CLKACTIVITY_SYS_CLK_SHIFT 8 374#define OMAP4430_CLKACTIVITY_SYS_CLK_SHIFT 8
382#define OMAP4430_CLKACTIVITY_SYS_CLK_MASK BITFIELD(8, 8) 375#define OMAP4430_CLKACTIVITY_SYS_CLK_MASK (1 << 8)
383 376
384/* Used by CM_TESLA_CLKSTCTRL */ 377/* Used by CM_TESLA_CLKSTCTRL */
385#define OMAP4430_CLKACTIVITY_TESLA_ROOT_CLK_SHIFT 8 378#define OMAP4430_CLKACTIVITY_TESLA_ROOT_CLK_SHIFT 8
386#define OMAP4430_CLKACTIVITY_TESLA_ROOT_CLK_MASK BITFIELD(8, 8) 379#define OMAP4430_CLKACTIVITY_TESLA_ROOT_CLK_MASK (1 << 8)
387 380
388/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 381/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
389#define OMAP4430_CLKACTIVITY_TLL_CH0_GFCLK_SHIFT 22 382#define OMAP4430_CLKACTIVITY_TLL_CH0_GFCLK_SHIFT 22
390#define OMAP4430_CLKACTIVITY_TLL_CH0_GFCLK_MASK BITFIELD(22, 22) 383#define OMAP4430_CLKACTIVITY_TLL_CH0_GFCLK_MASK (1 << 22)
391 384
392/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 385/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
393#define OMAP4430_CLKACTIVITY_TLL_CH1_GFCLK_SHIFT 23 386#define OMAP4430_CLKACTIVITY_TLL_CH1_GFCLK_SHIFT 23
394#define OMAP4430_CLKACTIVITY_TLL_CH1_GFCLK_MASK BITFIELD(23, 23) 387#define OMAP4430_CLKACTIVITY_TLL_CH1_GFCLK_MASK (1 << 23)
395 388
396/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 389/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
397#define OMAP4430_CLKACTIVITY_TLL_CH2_GFCLK_SHIFT 24 390#define OMAP4430_CLKACTIVITY_TLL_CH2_GFCLK_SHIFT 24
398#define OMAP4430_CLKACTIVITY_TLL_CH2_GFCLK_MASK BITFIELD(24, 24) 391#define OMAP4430_CLKACTIVITY_TLL_CH2_GFCLK_MASK (1 << 24)
392
393/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
394#define OMAP4430_CLKACTIVITY_UNIPRO_DPLL_CLK_SHIFT 10
395#define OMAP4430_CLKACTIVITY_UNIPRO_DPLL_CLK_MASK (1 << 10)
396
397/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
398#define OMAP4430_CLKACTIVITY_USB_DPLL_CLK_SHIFT 14
399#define OMAP4430_CLKACTIVITY_USB_DPLL_CLK_MASK (1 << 14)
399 400
400/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 401/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
401#define OMAP4430_CLKACTIVITY_USB_DPLL_HS_CLK_SHIFT 15 402#define OMAP4430_CLKACTIVITY_USB_DPLL_HS_CLK_SHIFT 15
402#define OMAP4430_CLKACTIVITY_USB_DPLL_HS_CLK_MASK BITFIELD(15, 15) 403#define OMAP4430_CLKACTIVITY_USB_DPLL_HS_CLK_MASK (1 << 15)
403 404
404/* Used by CM_WKUP_CLKSTCTRL */ 405/* Used by CM_WKUP_CLKSTCTRL */
405#define OMAP4430_CLKACTIVITY_USIM_GFCLK_SHIFT 10 406#define OMAP4430_CLKACTIVITY_USIM_GFCLK_SHIFT 10
406#define OMAP4430_CLKACTIVITY_USIM_GFCLK_MASK BITFIELD(10, 10) 407#define OMAP4430_CLKACTIVITY_USIM_GFCLK_MASK (1 << 10)
407 408
408/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 409/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
409#define OMAP4430_CLKACTIVITY_UTMI_P3_GFCLK_SHIFT 30 410#define OMAP4430_CLKACTIVITY_UTMI_P3_GFCLK_SHIFT 30
410#define OMAP4430_CLKACTIVITY_UTMI_P3_GFCLK_MASK BITFIELD(30, 30) 411#define OMAP4430_CLKACTIVITY_UTMI_P3_GFCLK_MASK (1 << 30)
411 412
412/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */ 413/* Used by CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE */
413#define OMAP4430_CLKACTIVITY_UTMI_ROOT_GFCLK_SHIFT 25 414#define OMAP4430_CLKACTIVITY_UTMI_ROOT_GFCLK_SHIFT 25
414#define OMAP4430_CLKACTIVITY_UTMI_ROOT_GFCLK_MASK BITFIELD(25, 25) 415#define OMAP4430_CLKACTIVITY_UTMI_ROOT_GFCLK_MASK (1 << 25)
415 416
416/* Used by CM_WKUP_CLKSTCTRL */ 417/* Used by CM_WKUP_CLKSTCTRL */
417#define OMAP4430_CLKACTIVITY_WKUP_32K_GFCLK_SHIFT 11 418#define OMAP4430_CLKACTIVITY_WKUP_32K_GFCLK_SHIFT 11
418#define OMAP4430_CLKACTIVITY_WKUP_32K_GFCLK_MASK BITFIELD(11, 11) 419#define OMAP4430_CLKACTIVITY_WKUP_32K_GFCLK_MASK (1 << 11)
419 420
420/* 421/*
421 * Used by CM_WKUP_TIMER1_CLKCTRL, CM_L4PER_DMTIMER10_CLKCTRL, 422 * Used by CM1_ABE_TIMER5_CLKCTRL, CM1_ABE_TIMER6_CLKCTRL,
423 * CM1_ABE_TIMER7_CLKCTRL, CM1_ABE_TIMER8_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL,
424 * CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_MMC6_CLKCTRL, CM_L4PER_DMTIMER10_CLKCTRL,
422 * CM_L4PER_DMTIMER11_CLKCTRL, CM_L4PER_DMTIMER2_CLKCTRL, 425 * CM_L4PER_DMTIMER11_CLKCTRL, CM_L4PER_DMTIMER2_CLKCTRL,
423 * CM_L4PER_DMTIMER3_CLKCTRL, CM_L4PER_DMTIMER4_CLKCTRL, 426 * CM_L4PER_DMTIMER3_CLKCTRL, CM_L4PER_DMTIMER4_CLKCTRL,
424 * CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_MCASP2_CLKCTRL, CM_L4PER_MCASP3_CLKCTRL, 427 * CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_MCASP2_CLKCTRL, CM_L4PER_MCASP3_CLKCTRL,
425 * CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, CM_L3INIT_MMC6_CLKCTRL, 428 * CM_WKUP_TIMER1_CLKCTRL
426 * CM1_ABE_TIMER5_CLKCTRL, CM1_ABE_TIMER6_CLKCTRL, CM1_ABE_TIMER7_CLKCTRL,
427 * CM1_ABE_TIMER8_CLKCTRL
428 */ 429 */
429#define OMAP4430_CLKSEL_SHIFT 24 430#define OMAP4430_CLKSEL_SHIFT 24
430#define OMAP4430_CLKSEL_MASK BITFIELD(24, 24) 431#define OMAP4430_CLKSEL_MASK (1 << 24)
431 432
432/* 433/*
433 * Renamed from CLKSEL Used by CM_ABE_DSS_SYS_CLKSEL, CM_ABE_PLL_REF_CLKSEL, 434 * Renamed from CLKSEL Used by CM_ABE_DSS_SYS_CLKSEL, CM_ABE_PLL_REF_CLKSEL,
434 * CM_DPLL_SYS_REF_CLKSEL, CM_L4_WKUP_CLKSEL, CM_CLKSEL_DUCATI_ISS_ROOT, 435 * CM_L4_WKUP_CLKSEL, CM_CLKSEL_DUCATI_ISS_ROOT, CM_CLKSEL_USB_60MHZ
435 * CM_CLKSEL_USB_60MHZ
436 */ 436 */
437#define OMAP4430_CLKSEL_0_0_SHIFT 0 437#define OMAP4430_CLKSEL_0_0_SHIFT 0
438#define OMAP4430_CLKSEL_0_0_MASK BITFIELD(0, 0) 438#define OMAP4430_CLKSEL_0_0_MASK (1 << 0)
439 439
440/* Renamed from CLKSEL Used by CM_BYPCLK_DPLL_IVA, CM_BYPCLK_DPLL_MPU */ 440/* Renamed from CLKSEL Used by CM_BYPCLK_DPLL_IVA, CM_BYPCLK_DPLL_MPU */
441#define OMAP4430_CLKSEL_0_1_SHIFT 0 441#define OMAP4430_CLKSEL_0_1_SHIFT 0
442#define OMAP4430_CLKSEL_0_1_MASK BITFIELD(0, 1) 442#define OMAP4430_CLKSEL_0_1_MASK (0x3 << 0)
443 443
444/* Renamed from CLKSEL Used by CM_L3INIT_HSI_CLKCTRL */ 444/* Renamed from CLKSEL Used by CM_L3INIT_HSI_CLKCTRL */
445#define OMAP4430_CLKSEL_24_25_SHIFT 24 445#define OMAP4430_CLKSEL_24_25_SHIFT 24
446#define OMAP4430_CLKSEL_24_25_MASK BITFIELD(24, 25) 446#define OMAP4430_CLKSEL_24_25_MASK (0x3 << 24)
447 447
448/* Used by CM_L3INIT_USB_OTG_CLKCTRL */ 448/* Used by CM_L3INIT_USB_OTG_CLKCTRL */
449#define OMAP4430_CLKSEL_60M_SHIFT 24 449#define OMAP4430_CLKSEL_60M_SHIFT 24
450#define OMAP4430_CLKSEL_60M_MASK BITFIELD(24, 24) 450#define OMAP4430_CLKSEL_60M_MASK (1 << 24)
451 451
452/* Used by CM1_ABE_AESS_CLKCTRL */ 452/* Used by CM1_ABE_AESS_CLKCTRL */
453#define OMAP4430_CLKSEL_AESS_FCLK_SHIFT 24 453#define OMAP4430_CLKSEL_AESS_FCLK_SHIFT 24
454#define OMAP4430_CLKSEL_AESS_FCLK_MASK BITFIELD(24, 24) 454#define OMAP4430_CLKSEL_AESS_FCLK_MASK (1 << 24)
455 455
456/* Used by CM_CLKSEL_CORE_RESTORE, CM_CLKSEL_CORE */ 456/* Used by CM_CLKSEL_CORE, CM_CLKSEL_CORE_RESTORE */
457#define OMAP4430_CLKSEL_CORE_SHIFT 0 457#define OMAP4430_CLKSEL_CORE_SHIFT 0
458#define OMAP4430_CLKSEL_CORE_MASK BITFIELD(0, 0) 458#define OMAP4430_CLKSEL_CORE_MASK (1 << 0)
459 459
460/* Renamed from CLKSEL_CORE Used by CM_SHADOW_FREQ_CONFIG2 */ 460/*
461 * Renamed from CLKSEL_CORE Used by CM_SHADOW_FREQ_CONFIG2_RESTORE,
462 * CM_SHADOW_FREQ_CONFIG2
463 */
461#define OMAP4430_CLKSEL_CORE_1_1_SHIFT 1 464#define OMAP4430_CLKSEL_CORE_1_1_SHIFT 1
462#define OMAP4430_CLKSEL_CORE_1_1_MASK BITFIELD(1, 1) 465#define OMAP4430_CLKSEL_CORE_1_1_MASK (1 << 1)
463 466
464/* Used by CM_WKUP_USIM_CLKCTRL */ 467/* Used by CM_WKUP_USIM_CLKCTRL */
465#define OMAP4430_CLKSEL_DIV_SHIFT 24 468#define OMAP4430_CLKSEL_DIV_SHIFT 24
466#define OMAP4430_CLKSEL_DIV_MASK BITFIELD(24, 24) 469#define OMAP4430_CLKSEL_DIV_MASK (1 << 24)
467 470
468/* Used by CM_CAM_FDIF_CLKCTRL */ 471/* Used by CM_CAM_FDIF_CLKCTRL */
469#define OMAP4430_CLKSEL_FCLK_SHIFT 24 472#define OMAP4430_CLKSEL_FCLK_SHIFT 24
470#define OMAP4430_CLKSEL_FCLK_MASK BITFIELD(24, 25) 473#define OMAP4430_CLKSEL_FCLK_MASK (0x3 << 24)
471 474
472/* Used by CM_L4PER_MCBSP4_CLKCTRL */ 475/* Used by CM_L4PER_MCBSP4_CLKCTRL */
473#define OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT 25 476#define OMAP4430_CLKSEL_INTERNAL_SOURCE_SHIFT 25
474#define OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK BITFIELD(25, 25) 477#define OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK (1 << 25)
475 478
476/* 479/*
477 * Renamed from CLKSEL_INTERNAL_SOURCE Used by CM1_ABE_DMIC_CLKCTRL, 480 * Renamed from CLKSEL_INTERNAL_SOURCE Used by CM1_ABE_DMIC_CLKCTRL,
@@ -479,836 +482,869 @@
479 * CM1_ABE_MCBSP3_CLKCTRL 482 * CM1_ABE_MCBSP3_CLKCTRL
480 */ 483 */
481#define OMAP4430_CLKSEL_INTERNAL_SOURCE_CM1_ABE_DMIC_SHIFT 26 484#define OMAP4430_CLKSEL_INTERNAL_SOURCE_CM1_ABE_DMIC_SHIFT 26
482#define OMAP4430_CLKSEL_INTERNAL_SOURCE_CM1_ABE_DMIC_MASK BITFIELD(26, 27) 485#define OMAP4430_CLKSEL_INTERNAL_SOURCE_CM1_ABE_DMIC_MASK (0x3 << 26)
483 486
484/* Used by CM_CLKSEL_CORE_RESTORE, CM_CLKSEL_CORE */ 487/* Used by CM_CLKSEL_CORE, CM_CLKSEL_CORE_RESTORE */
485#define OMAP4430_CLKSEL_L3_SHIFT 4 488#define OMAP4430_CLKSEL_L3_SHIFT 4
486#define OMAP4430_CLKSEL_L3_MASK BITFIELD(4, 4) 489#define OMAP4430_CLKSEL_L3_MASK (1 << 4)
487 490
488/* Renamed from CLKSEL_L3 Used by CM_SHADOW_FREQ_CONFIG2 */ 491/*
492 * Renamed from CLKSEL_L3 Used by CM_SHADOW_FREQ_CONFIG2_RESTORE,
493 * CM_SHADOW_FREQ_CONFIG2
494 */
489#define OMAP4430_CLKSEL_L3_SHADOW_SHIFT 2 495#define OMAP4430_CLKSEL_L3_SHADOW_SHIFT 2
490#define OMAP4430_CLKSEL_L3_SHADOW_MASK BITFIELD(2, 2) 496#define OMAP4430_CLKSEL_L3_SHADOW_MASK (1 << 2)
491 497
492/* Used by CM_CLKSEL_CORE_RESTORE, CM_CLKSEL_CORE */ 498/* Used by CM_CLKSEL_CORE, CM_CLKSEL_CORE_RESTORE */
493#define OMAP4430_CLKSEL_L4_SHIFT 8 499#define OMAP4430_CLKSEL_L4_SHIFT 8
494#define OMAP4430_CLKSEL_L4_MASK BITFIELD(8, 8) 500#define OMAP4430_CLKSEL_L4_MASK (1 << 8)
495 501
496/* Used by CM_CLKSEL_ABE */ 502/* Used by CM_CLKSEL_ABE */
497#define OMAP4430_CLKSEL_OPP_SHIFT 0 503#define OMAP4430_CLKSEL_OPP_SHIFT 0
498#define OMAP4430_CLKSEL_OPP_MASK BITFIELD(0, 1) 504#define OMAP4430_CLKSEL_OPP_MASK (0x3 << 0)
499
500/* Used by CM_GFX_GFX_CLKCTRL */
501#define OMAP4430_CLKSEL_PER_192M_SHIFT 25
502#define OMAP4430_CLKSEL_PER_192M_MASK BITFIELD(25, 26)
503 505
504/* Used by CM_EMU_DEBUGSS_CLKCTRL */ 506/* Used by CM_EMU_DEBUGSS_CLKCTRL */
505#define OMAP4430_CLKSEL_PMD_STM_CLK_SHIFT 27 507#define OMAP4430_CLKSEL_PMD_STM_CLK_SHIFT 27
506#define OMAP4430_CLKSEL_PMD_STM_CLK_MASK BITFIELD(27, 29) 508#define OMAP4430_CLKSEL_PMD_STM_CLK_MASK (0x7 << 27)
507 509
508/* Used by CM_EMU_DEBUGSS_CLKCTRL */ 510/* Used by CM_EMU_DEBUGSS_CLKCTRL */
509#define OMAP4430_CLKSEL_PMD_TRACE_CLK_SHIFT 24 511#define OMAP4430_CLKSEL_PMD_TRACE_CLK_SHIFT 24
510#define OMAP4430_CLKSEL_PMD_TRACE_CLK_MASK BITFIELD(24, 26) 512#define OMAP4430_CLKSEL_PMD_TRACE_CLK_MASK (0x7 << 24)
511 513
512/* Used by CM_GFX_GFX_CLKCTRL */ 514/* Used by CM_GFX_GFX_CLKCTRL */
513#define OMAP4430_CLKSEL_SGX_FCLK_SHIFT 24 515#define OMAP4430_CLKSEL_SGX_FCLK_SHIFT 24
514#define OMAP4430_CLKSEL_SGX_FCLK_MASK BITFIELD(24, 24) 516#define OMAP4430_CLKSEL_SGX_FCLK_MASK (1 << 24)
515 517
516/* 518/*
517 * Used by CM1_ABE_DMIC_CLKCTRL, CM1_ABE_MCASP_CLKCTRL, CM1_ABE_MCBSP1_CLKCTRL, 519 * Used by CM1_ABE_DMIC_CLKCTRL, CM1_ABE_MCASP_CLKCTRL, CM1_ABE_MCBSP1_CLKCTRL,
518 * CM1_ABE_MCBSP2_CLKCTRL, CM1_ABE_MCBSP3_CLKCTRL 520 * CM1_ABE_MCBSP2_CLKCTRL, CM1_ABE_MCBSP3_CLKCTRL
519 */ 521 */
520#define OMAP4430_CLKSEL_SOURCE_SHIFT 24 522#define OMAP4430_CLKSEL_SOURCE_SHIFT 24
521#define OMAP4430_CLKSEL_SOURCE_MASK BITFIELD(24, 25) 523#define OMAP4430_CLKSEL_SOURCE_MASK (0x3 << 24)
522 524
523/* Renamed from CLKSEL_SOURCE Used by CM_L4PER_MCBSP4_CLKCTRL */ 525/* Renamed from CLKSEL_SOURCE Used by CM_L4PER_MCBSP4_CLKCTRL */
524#define OMAP4430_CLKSEL_SOURCE_24_24_SHIFT 24 526#define OMAP4430_CLKSEL_SOURCE_24_24_SHIFT 24
525#define OMAP4430_CLKSEL_SOURCE_24_24_MASK BITFIELD(24, 24) 527#define OMAP4430_CLKSEL_SOURCE_24_24_MASK (1 << 24)
526 528
527/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 529/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
528#define OMAP4430_CLKSEL_UTMI_P1_SHIFT 24 530#define OMAP4430_CLKSEL_UTMI_P1_SHIFT 24
529#define OMAP4430_CLKSEL_UTMI_P1_MASK BITFIELD(24, 24) 531#define OMAP4430_CLKSEL_UTMI_P1_MASK (1 << 24)
530 532
531/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 533/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
532#define OMAP4430_CLKSEL_UTMI_P2_SHIFT 25 534#define OMAP4430_CLKSEL_UTMI_P2_SHIFT 25
533#define OMAP4430_CLKSEL_UTMI_P2_MASK BITFIELD(25, 25) 535#define OMAP4430_CLKSEL_UTMI_P2_MASK (1 << 25)
534 536
535/* 537/*
536 * Used by CM_WKUP_CLKSTCTRL, CM_EMU_CLKSTCTRL, CM_D2D_CLKSTCTRL, 538 * Used by CM1_ABE_CLKSTCTRL, CM_ALWON_CLKSTCTRL, CM_CAM_CLKSTCTRL,
537 * CM_DUCATI_CLKSTCTRL, CM_L3INSTR_CLKSTCTRL, CM_L3_1_CLKSTCTRL, 539 * CM_CEFUSE_CLKSTCTRL, CM_D2D_CLKSTCTRL, CM_DSS_CLKSTCTRL,
538 * CM_L3_2_CLKSTCTRL, CM_L4CFG_CLKSTCTRL, CM_MEMIF_CLKSTCTRL, 540 * CM_DUCATI_CLKSTCTRL, CM_EMU_CLKSTCTRL, CM_GFX_CLKSTCTRL, CM_IVAHD_CLKSTCTRL,
539 * CM_SDMA_CLKSTCTRL, CM_GFX_CLKSTCTRL, CM_L4PER_CLKSTCTRL, CM_L4SEC_CLKSTCTRL, 541 * CM_L3INIT_CLKSTCTRL, CM_L3INIT_CLKSTCTRL_RESTORE, CM_L3INSTR_CLKSTCTRL,
540 * CM_L3INIT_CLKSTCTRL, CM_CAM_CLKSTCTRL, CM_CEFUSE_CLKSTCTRL, 542 * CM_L3_1_CLKSTCTRL, CM_L3_1_CLKSTCTRL_RESTORE, CM_L3_2_CLKSTCTRL,
541 * CM_L3INIT_CLKSTCTRL_RESTORE, CM_L3_1_CLKSTCTRL_RESTORE, 543 * CM_L3_2_CLKSTCTRL_RESTORE, CM_L4CFG_CLKSTCTRL, CM_L4CFG_CLKSTCTRL_RESTORE,
542 * CM_L3_2_CLKSTCTRL_RESTORE, CM_L4CFG_CLKSTCTRL_RESTORE, 544 * CM_L4PER_CLKSTCTRL, CM_L4PER_CLKSTCTRL_RESTORE, CM_L4SEC_CLKSTCTRL,
543 * CM_L4PER_CLKSTCTRL_RESTORE, CM_MEMIF_CLKSTCTRL_RESTORE, CM_ALWON_CLKSTCTRL, 545 * CM_MEMIF_CLKSTCTRL, CM_MEMIF_CLKSTCTRL_RESTORE, CM_MPU_CLKSTCTRL,
544 * CM_IVAHD_CLKSTCTRL, CM_DSS_CLKSTCTRL, CM_MPU_CLKSTCTRL, CM_TESLA_CLKSTCTRL, 546 * CM_MPU_CLKSTCTRL_RESTORE, CM_SDMA_CLKSTCTRL, CM_TESLA_CLKSTCTRL,
545 * CM1_ABE_CLKSTCTRL, CM_MPU_CLKSTCTRL_RESTORE 547 * CM_WKUP_CLKSTCTRL
546 */ 548 */
547#define OMAP4430_CLKTRCTRL_SHIFT 0 549#define OMAP4430_CLKTRCTRL_SHIFT 0
548#define OMAP4430_CLKTRCTRL_MASK BITFIELD(0, 1) 550#define OMAP4430_CLKTRCTRL_MASK (0x3 << 0)
549 551
550/* Used by CM_EMU_OVERRIDE_DPLL_CORE */ 552/* Used by CM_EMU_OVERRIDE_DPLL_CORE */
551#define OMAP4430_CORE_DPLL_EMU_DIV_SHIFT 0 553#define OMAP4430_CORE_DPLL_EMU_DIV_SHIFT 0
552#define OMAP4430_CORE_DPLL_EMU_DIV_MASK BITFIELD(0, 6) 554#define OMAP4430_CORE_DPLL_EMU_DIV_MASK (0x7f << 0)
553 555
554/* Used by CM_EMU_OVERRIDE_DPLL_CORE */ 556/* Used by CM_EMU_OVERRIDE_DPLL_CORE */
555#define OMAP4430_CORE_DPLL_EMU_MULT_SHIFT 8 557#define OMAP4430_CORE_DPLL_EMU_MULT_SHIFT 8
556#define OMAP4430_CORE_DPLL_EMU_MULT_MASK BITFIELD(8, 18) 558#define OMAP4430_CORE_DPLL_EMU_MULT_MASK (0x7ff << 8)
559
560/* Used by REVISION_CM1, REVISION_CM2 */
561#define OMAP4430_CUSTOM_SHIFT 6
562#define OMAP4430_CUSTOM_MASK (0x3 << 6)
557 563
558/* Used by CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP */ 564/*
565 * Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP,
566 * CM_L4CFG_DYNAMICDEP_RESTORE
567 */
559#define OMAP4430_D2D_DYNDEP_SHIFT 18 568#define OMAP4430_D2D_DYNDEP_SHIFT 18
560#define OMAP4430_D2D_DYNDEP_MASK BITFIELD(18, 18) 569#define OMAP4430_D2D_DYNDEP_MASK (1 << 18)
561 570
562/* Used by CM_MPU_STATICDEP */ 571/* Used by CM_MPU_STATICDEP */
563#define OMAP4430_D2D_STATDEP_SHIFT 18 572#define OMAP4430_D2D_STATDEP_SHIFT 18
564#define OMAP4430_D2D_STATDEP_MASK BITFIELD(18, 18) 573#define OMAP4430_D2D_STATDEP_MASK (1 << 18)
565 574
566/* 575/*
567 * Used by CM_SSC_DELTAMSTEP_DPLL_PER, CM_SSC_DELTAMSTEP_DPLL_UNIPRO, 576 * Used by CM_SSC_DELTAMSTEP_DPLL_ABE, CM_SSC_DELTAMSTEP_DPLL_CORE,
568 * CM_SSC_DELTAMSTEP_DPLL_USB, CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE, 577 * CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE, CM_SSC_DELTAMSTEP_DPLL_DDRPHY,
569 * CM_SSC_DELTAMSTEP_DPLL_ABE, CM_SSC_DELTAMSTEP_DPLL_CORE, 578 * CM_SSC_DELTAMSTEP_DPLL_IVA, CM_SSC_DELTAMSTEP_DPLL_MPU,
570 * CM_SSC_DELTAMSTEP_DPLL_DDRPHY, CM_SSC_DELTAMSTEP_DPLL_IVA, 579 * CM_SSC_DELTAMSTEP_DPLL_PER, CM_SSC_DELTAMSTEP_DPLL_UNIPRO,
571 * CM_SSC_DELTAMSTEP_DPLL_MPU 580 * CM_SSC_DELTAMSTEP_DPLL_USB
572 */ 581 */
573#define OMAP4430_DELTAMSTEP_SHIFT 0 582#define OMAP4430_DELTAMSTEP_SHIFT 0
574#define OMAP4430_DELTAMSTEP_MASK BITFIELD(0, 19) 583#define OMAP4430_DELTAMSTEP_MASK (0xfffff << 0)
575 584
576/* Used by CM_SHADOW_FREQ_CONFIG1_RESTORE, CM_SHADOW_FREQ_CONFIG1 */ 585/* Used by CM_SHADOW_FREQ_CONFIG1, CM_SHADOW_FREQ_CONFIG1_RESTORE */
577#define OMAP4430_DLL_OVERRIDE_SHIFT 2 586#define OMAP4430_DLL_OVERRIDE_SHIFT 2
578#define OMAP4430_DLL_OVERRIDE_MASK BITFIELD(2, 2) 587#define OMAP4430_DLL_OVERRIDE_MASK (1 << 2)
579 588
580/* Renamed from DLL_OVERRIDE Used by CM_DLL_CTRL */ 589/* Renamed from DLL_OVERRIDE Used by CM_DLL_CTRL */
581#define OMAP4430_DLL_OVERRIDE_0_0_SHIFT 0 590#define OMAP4430_DLL_OVERRIDE_0_0_SHIFT 0
582#define OMAP4430_DLL_OVERRIDE_0_0_MASK BITFIELD(0, 0) 591#define OMAP4430_DLL_OVERRIDE_0_0_MASK (1 << 0)
583 592
584/* Used by CM_SHADOW_FREQ_CONFIG1_RESTORE, CM_SHADOW_FREQ_CONFIG1 */ 593/* Used by CM_SHADOW_FREQ_CONFIG1, CM_SHADOW_FREQ_CONFIG1_RESTORE */
585#define OMAP4430_DLL_RESET_SHIFT 3 594#define OMAP4430_DLL_RESET_SHIFT 3
586#define OMAP4430_DLL_RESET_MASK BITFIELD(3, 3) 595#define OMAP4430_DLL_RESET_MASK (1 << 3)
587 596
588/* 597/*
589 * Used by CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO, CM_CLKSEL_DPLL_USB, 598 * Used by CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE,
590 * CM_CLKSEL_DPLL_CORE_RESTORE, CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE, 599 * CM_CLKSEL_DPLL_CORE_RESTORE, CM_CLKSEL_DPLL_DDRPHY, CM_CLKSEL_DPLL_IVA,
591 * CM_CLKSEL_DPLL_DDRPHY, CM_CLKSEL_DPLL_IVA, CM_CLKSEL_DPLL_MPU 600 * CM_CLKSEL_DPLL_MPU, CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO,
601 * CM_CLKSEL_DPLL_USB
592 */ 602 */
593#define OMAP4430_DPLL_BYP_CLKSEL_SHIFT 23 603#define OMAP4430_DPLL_BYP_CLKSEL_SHIFT 23
594#define OMAP4430_DPLL_BYP_CLKSEL_MASK BITFIELD(23, 23) 604#define OMAP4430_DPLL_BYP_CLKSEL_MASK (1 << 23)
595 605
596/* Used by CM_CLKDCOLDO_DPLL_USB */ 606/* Used by CM_CLKDCOLDO_DPLL_USB */
597#define OMAP4430_DPLL_CLKDCOLDO_GATE_CTRL_SHIFT 8 607#define OMAP4430_DPLL_CLKDCOLDO_GATE_CTRL_SHIFT 8
598#define OMAP4430_DPLL_CLKDCOLDO_GATE_CTRL_MASK BITFIELD(8, 8) 608#define OMAP4430_DPLL_CLKDCOLDO_GATE_CTRL_MASK (1 << 8)
599 609
600/* Used by CM_CLKSEL_DPLL_CORE_RESTORE, CM_CLKSEL_DPLL_CORE */ 610/* Used by CM_CLKSEL_DPLL_CORE, CM_CLKSEL_DPLL_CORE_RESTORE */
601#define OMAP4430_DPLL_CLKOUTHIF_CLKSEL_SHIFT 20 611#define OMAP4430_DPLL_CLKOUTHIF_CLKSEL_SHIFT 20
602#define OMAP4430_DPLL_CLKOUTHIF_CLKSEL_MASK BITFIELD(20, 20) 612#define OMAP4430_DPLL_CLKOUTHIF_CLKSEL_MASK (1 << 20)
603 613
604/* 614/*
605 * Used by CM_DIV_M3_DPLL_PER, CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_ABE, 615 * Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE,
606 * CM_DIV_M3_DPLL_CORE 616 * CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_PER
607 */ 617 */
608#define OMAP4430_DPLL_CLKOUTHIF_DIV_SHIFT 0 618#define OMAP4430_DPLL_CLKOUTHIF_DIV_SHIFT 0
609#define OMAP4430_DPLL_CLKOUTHIF_DIV_MASK BITFIELD(0, 4) 619#define OMAP4430_DPLL_CLKOUTHIF_DIV_MASK (0x1f << 0)
610 620
611/* 621/*
612 * Used by CM_DIV_M3_DPLL_PER, CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_ABE, 622 * Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE,
613 * CM_DIV_M3_DPLL_CORE 623 * CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_PER
614 */ 624 */
615#define OMAP4430_DPLL_CLKOUTHIF_DIVCHACK_SHIFT 5 625#define OMAP4430_DPLL_CLKOUTHIF_DIVCHACK_SHIFT 5
616#define OMAP4430_DPLL_CLKOUTHIF_DIVCHACK_MASK BITFIELD(5, 5) 626#define OMAP4430_DPLL_CLKOUTHIF_DIVCHACK_MASK (1 << 5)
617 627
618/* 628/*
619 * Used by CM_DIV_M3_DPLL_PER, CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_ABE, 629 * Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE,
620 * CM_DIV_M3_DPLL_CORE 630 * CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_PER
621 */ 631 */
622#define OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_SHIFT 8 632#define OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_SHIFT 8
623#define OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_MASK BITFIELD(8, 8) 633#define OMAP4430_DPLL_CLKOUTHIF_GATE_CTRL_MASK (1 << 8)
624 634
625/* Used by CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO, CM_DIV_M2_DPLL_ABE */ 635/* Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO */
626#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_SHIFT 10 636#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_SHIFT 10
627#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK BITFIELD(10, 10) 637#define OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK (1 << 10)
628 638
629/* 639/*
630 * Used by CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO, 640 * Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE,
631 * CM_DIV_M2_DPLL_CORE_RESTORE, CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE, 641 * CM_DIV_M2_DPLL_CORE_RESTORE, CM_DIV_M2_DPLL_DDRPHY, CM_DIV_M2_DPLL_MPU,
632 * CM_DIV_M2_DPLL_DDRPHY, CM_DIV_M2_DPLL_MPU 642 * CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO
633 */ 643 */
634#define OMAP4430_DPLL_CLKOUT_DIV_SHIFT 0 644#define OMAP4430_DPLL_CLKOUT_DIV_SHIFT 0
635#define OMAP4430_DPLL_CLKOUT_DIV_MASK BITFIELD(0, 4) 645#define OMAP4430_DPLL_CLKOUT_DIV_MASK (0x1f << 0)
636 646
637/* Renamed from DPLL_CLKOUT_DIV Used by CM_DIV_M2_DPLL_USB */ 647/* Renamed from DPLL_CLKOUT_DIV Used by CM_DIV_M2_DPLL_USB */
638#define OMAP4430_DPLL_CLKOUT_DIV_0_6_SHIFT 0 648#define OMAP4430_DPLL_CLKOUT_DIV_0_6_SHIFT 0
639#define OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK BITFIELD(0, 6) 649#define OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK (0x7f << 0)
640 650
641/* 651/*
642 * Used by CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO, 652 * Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE,
643 * CM_DIV_M2_DPLL_CORE_RESTORE, CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE, 653 * CM_DIV_M2_DPLL_CORE_RESTORE, CM_DIV_M2_DPLL_DDRPHY, CM_DIV_M2_DPLL_MPU,
644 * CM_DIV_M2_DPLL_DDRPHY, CM_DIV_M2_DPLL_MPU 654 * CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO
645 */ 655 */
646#define OMAP4430_DPLL_CLKOUT_DIVCHACK_SHIFT 5 656#define OMAP4430_DPLL_CLKOUT_DIVCHACK_SHIFT 5
647#define OMAP4430_DPLL_CLKOUT_DIVCHACK_MASK BITFIELD(5, 5) 657#define OMAP4430_DPLL_CLKOUT_DIVCHACK_MASK (1 << 5)
648 658
649/* Renamed from DPLL_CLKOUT_DIVCHACK Used by CM_DIV_M2_DPLL_USB */ 659/* Renamed from DPLL_CLKOUT_DIVCHACK Used by CM_DIV_M2_DPLL_USB */
650#define OMAP4430_DPLL_CLKOUT_DIVCHACK_M2_USB_SHIFT 7 660#define OMAP4430_DPLL_CLKOUT_DIVCHACK_M2_USB_SHIFT 7
651#define OMAP4430_DPLL_CLKOUT_DIVCHACK_M2_USB_MASK BITFIELD(7, 7) 661#define OMAP4430_DPLL_CLKOUT_DIVCHACK_M2_USB_MASK (1 << 7)
652 662
653/* 663/*
654 * Used by CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_USB, CM_DIV_M2_DPLL_CORE_RESTORE, 664 * Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE,
655 * CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE, CM_DIV_M2_DPLL_DDRPHY, 665 * CM_DIV_M2_DPLL_CORE_RESTORE, CM_DIV_M2_DPLL_DDRPHY, CM_DIV_M2_DPLL_MPU,
656 * CM_DIV_M2_DPLL_MPU 666 * CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_USB
657 */ 667 */
658#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_SHIFT 8 668#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_SHIFT 8
659#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK BITFIELD(8, 8) 669#define OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK (1 << 8)
660 670
661/* Used by CM_SHADOW_FREQ_CONFIG1_RESTORE, CM_SHADOW_FREQ_CONFIG1 */ 671/* Used by CM_SHADOW_FREQ_CONFIG1, CM_SHADOW_FREQ_CONFIG1_RESTORE */
662#define OMAP4430_DPLL_CORE_DPLL_EN_SHIFT 8 672#define OMAP4430_DPLL_CORE_DPLL_EN_SHIFT 8
663#define OMAP4430_DPLL_CORE_DPLL_EN_MASK BITFIELD(8, 10) 673#define OMAP4430_DPLL_CORE_DPLL_EN_MASK (0x7 << 8)
664 674
665/* Used by CM_SHADOW_FREQ_CONFIG1_RESTORE, CM_SHADOW_FREQ_CONFIG1 */ 675/* Used by CM_SHADOW_FREQ_CONFIG1, CM_SHADOW_FREQ_CONFIG1_RESTORE */
666#define OMAP4430_DPLL_CORE_M2_DIV_SHIFT 11 676#define OMAP4430_DPLL_CORE_M2_DIV_SHIFT 11
667#define OMAP4430_DPLL_CORE_M2_DIV_MASK BITFIELD(11, 15) 677#define OMAP4430_DPLL_CORE_M2_DIV_MASK (0x1f << 11)
668 678
669/* Used by CM_SHADOW_FREQ_CONFIG2 */ 679/* Used by CM_SHADOW_FREQ_CONFIG2, CM_SHADOW_FREQ_CONFIG2_RESTORE */
670#define OMAP4430_DPLL_CORE_M5_DIV_SHIFT 3 680#define OMAP4430_DPLL_CORE_M5_DIV_SHIFT 3
671#define OMAP4430_DPLL_CORE_M5_DIV_MASK BITFIELD(3, 7) 681#define OMAP4430_DPLL_CORE_M5_DIV_MASK (0x1f << 3)
672
673/* Used by CM_SHADOW_FREQ_CONFIG1_RESTORE, CM_SHADOW_FREQ_CONFIG1 */
674#define OMAP4430_DPLL_CORE_SYS_REF_CLKSEL_SHIFT 1
675#define OMAP4430_DPLL_CORE_SYS_REF_CLKSEL_MASK BITFIELD(1, 1)
676 682
677/* 683/*
678 * Used by CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO, 684 * Used by CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE,
679 * CM_CLKSEL_DPLL_CORE_RESTORE, CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE, 685 * CM_CLKSEL_DPLL_CORE_RESTORE, CM_CLKSEL_DPLL_DDRPHY, CM_CLKSEL_DPLL_IVA,
680 * CM_CLKSEL_DPLL_DDRPHY, CM_CLKSEL_DPLL_IVA, CM_CLKSEL_DPLL_MPU 686 * CM_CLKSEL_DPLL_MPU, CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO
681 */ 687 */
682#define OMAP4430_DPLL_DIV_SHIFT 0 688#define OMAP4430_DPLL_DIV_SHIFT 0
683#define OMAP4430_DPLL_DIV_MASK BITFIELD(0, 6) 689#define OMAP4430_DPLL_DIV_MASK (0x7f << 0)
684 690
685/* Renamed from DPLL_DIV Used by CM_CLKSEL_DPLL_USB */ 691/* Renamed from DPLL_DIV Used by CM_CLKSEL_DPLL_USB */
686#define OMAP4430_DPLL_DIV_0_7_SHIFT 0 692#define OMAP4430_DPLL_DIV_0_7_SHIFT 0
687#define OMAP4430_DPLL_DIV_0_7_MASK BITFIELD(0, 7) 693#define OMAP4430_DPLL_DIV_0_7_MASK (0xff << 0)
688 694
689/* 695/*
690 * Used by CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_USB, 696 * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE,
691 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, 697 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA,
692 * CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU 698 * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER
693 */ 699 */
694#define OMAP4430_DPLL_DRIFTGUARD_EN_SHIFT 8 700#define OMAP4430_DPLL_DRIFTGUARD_EN_SHIFT 8
695#define OMAP4430_DPLL_DRIFTGUARD_EN_MASK BITFIELD(8, 8) 701#define OMAP4430_DPLL_DRIFTGUARD_EN_MASK (1 << 8)
696 702
697/* Renamed from DPLL_DRIFTGUARD_EN Used by CM_CLKMODE_DPLL_UNIPRO */ 703/* Renamed from DPLL_DRIFTGUARD_EN Used by CM_CLKMODE_DPLL_UNIPRO */
698#define OMAP4430_DPLL_DRIFTGUARD_EN_3_3_SHIFT 3 704#define OMAP4430_DPLL_DRIFTGUARD_EN_3_3_SHIFT 3
699#define OMAP4430_DPLL_DRIFTGUARD_EN_3_3_MASK BITFIELD(3, 3) 705#define OMAP4430_DPLL_DRIFTGUARD_EN_3_3_MASK (1 << 3)
700 706
701/* 707/*
702 * Used by CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB, 708 * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE,
703 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, 709 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA,
704 * CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU 710 * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO,
711 * CM_CLKMODE_DPLL_USB
705 */ 712 */
706#define OMAP4430_DPLL_EN_SHIFT 0 713#define OMAP4430_DPLL_EN_SHIFT 0
707#define OMAP4430_DPLL_EN_MASK BITFIELD(0, 2) 714#define OMAP4430_DPLL_EN_MASK (0x7 << 0)
708 715
709/* 716/*
710 * Used by CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO, 717 * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE,
711 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, 718 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA,
712 * CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU 719 * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO
713 */ 720 */
714#define OMAP4430_DPLL_LPMODE_EN_SHIFT 10 721#define OMAP4430_DPLL_LPMODE_EN_SHIFT 10
715#define OMAP4430_DPLL_LPMODE_EN_MASK BITFIELD(10, 10) 722#define OMAP4430_DPLL_LPMODE_EN_MASK (1 << 10)
716 723
717/* 724/*
718 * Used by CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO, 725 * Used by CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE,
719 * CM_CLKSEL_DPLL_CORE_RESTORE, CM_CLKSEL_DPLL_ABE, CM_CLKSEL_DPLL_CORE, 726 * CM_CLKSEL_DPLL_CORE_RESTORE, CM_CLKSEL_DPLL_DDRPHY, CM_CLKSEL_DPLL_IVA,
720 * CM_CLKSEL_DPLL_DDRPHY, CM_CLKSEL_DPLL_IVA, CM_CLKSEL_DPLL_MPU 727 * CM_CLKSEL_DPLL_MPU, CM_CLKSEL_DPLL_PER, CM_CLKSEL_DPLL_UNIPRO
721 */ 728 */
722#define OMAP4430_DPLL_MULT_SHIFT 8 729#define OMAP4430_DPLL_MULT_SHIFT 8
723#define OMAP4430_DPLL_MULT_MASK BITFIELD(8, 18) 730#define OMAP4430_DPLL_MULT_MASK (0x7ff << 8)
724 731
725/* Renamed from DPLL_MULT Used by CM_CLKSEL_DPLL_USB */ 732/* Renamed from DPLL_MULT Used by CM_CLKSEL_DPLL_USB */
726#define OMAP4430_DPLL_MULT_USB_SHIFT 8 733#define OMAP4430_DPLL_MULT_USB_SHIFT 8
727#define OMAP4430_DPLL_MULT_USB_MASK BITFIELD(8, 19) 734#define OMAP4430_DPLL_MULT_USB_MASK (0xfff << 8)
728 735
729/* 736/*
730 * Used by CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO, 737 * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE,
731 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, 738 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA,
732 * CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU 739 * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO
733 */ 740 */
734#define OMAP4430_DPLL_REGM4XEN_SHIFT 11 741#define OMAP4430_DPLL_REGM4XEN_SHIFT 11
735#define OMAP4430_DPLL_REGM4XEN_MASK BITFIELD(11, 11) 742#define OMAP4430_DPLL_REGM4XEN_MASK (1 << 11)
736 743
737/* Used by CM_CLKSEL_DPLL_USB */ 744/* Used by CM_CLKSEL_DPLL_USB */
738#define OMAP4430_DPLL_SD_DIV_SHIFT 24 745#define OMAP4430_DPLL_SD_DIV_SHIFT 24
739#define OMAP4430_DPLL_SD_DIV_MASK BITFIELD(24, 31) 746#define OMAP4430_DPLL_SD_DIV_MASK (0xff << 24)
740 747
741/* 748/*
742 * Used by CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB, 749 * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE,
743 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, 750 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA,
744 * CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU 751 * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO,
752 * CM_CLKMODE_DPLL_USB
745 */ 753 */
746#define OMAP4430_DPLL_SSC_ACK_SHIFT 13 754#define OMAP4430_DPLL_SSC_ACK_SHIFT 13
747#define OMAP4430_DPLL_SSC_ACK_MASK BITFIELD(13, 13) 755#define OMAP4430_DPLL_SSC_ACK_MASK (1 << 13)
748 756
749/* 757/*
750 * Used by CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB, 758 * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE,
751 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, 759 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA,
752 * CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU 760 * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO,
761 * CM_CLKMODE_DPLL_USB
753 */ 762 */
754#define OMAP4430_DPLL_SSC_DOWNSPREAD_SHIFT 14 763#define OMAP4430_DPLL_SSC_DOWNSPREAD_SHIFT 14
755#define OMAP4430_DPLL_SSC_DOWNSPREAD_MASK BITFIELD(14, 14) 764#define OMAP4430_DPLL_SSC_DOWNSPREAD_MASK (1 << 14)
756 765
757/* 766/*
758 * Used by CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO, CM_CLKMODE_DPLL_USB, 767 * Used by CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE,
759 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_ABE, CM_CLKMODE_DPLL_CORE, 768 * CM_CLKMODE_DPLL_CORE_RESTORE, CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA,
760 * CM_CLKMODE_DPLL_DDRPHY, CM_CLKMODE_DPLL_IVA, CM_CLKMODE_DPLL_MPU 769 * CM_CLKMODE_DPLL_MPU, CM_CLKMODE_DPLL_PER, CM_CLKMODE_DPLL_UNIPRO,
770 * CM_CLKMODE_DPLL_USB
761 */ 771 */
762#define OMAP4430_DPLL_SSC_EN_SHIFT 12 772#define OMAP4430_DPLL_SSC_EN_SHIFT 12
763#define OMAP4430_DPLL_SSC_EN_MASK BITFIELD(12, 12) 773#define OMAP4430_DPLL_SSC_EN_MASK (1 << 12)
764 774
765/* Used by CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, CM_L4PER_DYNAMICDEP */ 775/*
776 * Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP,
777 * CM_L4CFG_DYNAMICDEP_RESTORE, CM_L4PER_DYNAMICDEP, CM_L4PER_DYNAMICDEP_RESTORE
778 */
766#define OMAP4430_DSS_DYNDEP_SHIFT 8 779#define OMAP4430_DSS_DYNDEP_SHIFT 8
767#define OMAP4430_DSS_DYNDEP_MASK BITFIELD(8, 8) 780#define OMAP4430_DSS_DYNDEP_MASK (1 << 8)
768 781
769/* 782/*
770 * Used by CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, 783 * Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_SDMA_STATICDEP,
771 * CM_MPU_STATICDEP 784 * CM_SDMA_STATICDEP_RESTORE
772 */ 785 */
773#define OMAP4430_DSS_STATDEP_SHIFT 8 786#define OMAP4430_DSS_STATDEP_SHIFT 8
774#define OMAP4430_DSS_STATDEP_MASK BITFIELD(8, 8) 787#define OMAP4430_DSS_STATDEP_MASK (1 << 8)
775 788
776/* Used by CM_L3_2_DYNAMICDEP */ 789/* Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE */
777#define OMAP4430_DUCATI_DYNDEP_SHIFT 0 790#define OMAP4430_DUCATI_DYNDEP_SHIFT 0
778#define OMAP4430_DUCATI_DYNDEP_MASK BITFIELD(0, 0) 791#define OMAP4430_DUCATI_DYNDEP_MASK (1 << 0)
779 792
780/* Used by CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_MPU_STATICDEP */ 793/* Used by CM_MPU_STATICDEP, CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE */
781#define OMAP4430_DUCATI_STATDEP_SHIFT 0 794#define OMAP4430_DUCATI_STATDEP_SHIFT 0
782#define OMAP4430_DUCATI_STATDEP_MASK BITFIELD(0, 0) 795#define OMAP4430_DUCATI_STATDEP_MASK (1 << 0)
783 796
784/* Used by CM_SHADOW_FREQ_CONFIG1_RESTORE, CM_SHADOW_FREQ_CONFIG1 */ 797/* Used by CM_SHADOW_FREQ_CONFIG1, CM_SHADOW_FREQ_CONFIG1_RESTORE */
785#define OMAP4430_FREQ_UPDATE_SHIFT 0 798#define OMAP4430_FREQ_UPDATE_SHIFT 0
786#define OMAP4430_FREQ_UPDATE_MASK BITFIELD(0, 0) 799#define OMAP4430_FREQ_UPDATE_MASK (1 << 0)
800
801/* Used by REVISION_CM1, REVISION_CM2 */
802#define OMAP4430_FUNC_SHIFT 16
803#define OMAP4430_FUNC_MASK (0xfff << 16)
787 804
788/* Used by CM_L3_2_DYNAMICDEP */ 805/* Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE */
789#define OMAP4430_GFX_DYNDEP_SHIFT 10 806#define OMAP4430_GFX_DYNDEP_SHIFT 10
790#define OMAP4430_GFX_DYNDEP_MASK BITFIELD(10, 10) 807#define OMAP4430_GFX_DYNDEP_MASK (1 << 10)
791 808
792/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */ 809/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */
793#define OMAP4430_GFX_STATDEP_SHIFT 10 810#define OMAP4430_GFX_STATDEP_SHIFT 10
794#define OMAP4430_GFX_STATDEP_MASK BITFIELD(10, 10) 811#define OMAP4430_GFX_STATDEP_MASK (1 << 10)
795 812
796/* Used by CM_SHADOW_FREQ_CONFIG2 */ 813/* Used by CM_SHADOW_FREQ_CONFIG2, CM_SHADOW_FREQ_CONFIG2_RESTORE */
797#define OMAP4430_GPMC_FREQ_UPDATE_SHIFT 0 814#define OMAP4430_GPMC_FREQ_UPDATE_SHIFT 0
798#define OMAP4430_GPMC_FREQ_UPDATE_MASK BITFIELD(0, 0) 815#define OMAP4430_GPMC_FREQ_UPDATE_MASK (1 << 0)
799 816
800/* 817/*
801 * Used by CM_DIV_M4_DPLL_PER, CM_DIV_M4_DPLL_CORE_RESTORE, 818 * Used by CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_CORE_RESTORE,
802 * CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA 819 * CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA, CM_DIV_M4_DPLL_PER
803 */ 820 */
804#define OMAP4430_HSDIVIDER_CLKOUT1_DIV_SHIFT 0 821#define OMAP4430_HSDIVIDER_CLKOUT1_DIV_SHIFT 0
805#define OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK BITFIELD(0, 4) 822#define OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK (0x1f << 0)
806 823
807/* 824/*
808 * Used by CM_DIV_M4_DPLL_PER, CM_DIV_M4_DPLL_CORE_RESTORE, 825 * Used by CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_CORE_RESTORE,
809 * CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA 826 * CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA, CM_DIV_M4_DPLL_PER
810 */ 827 */
811#define OMAP4430_HSDIVIDER_CLKOUT1_DIVCHACK_SHIFT 5 828#define OMAP4430_HSDIVIDER_CLKOUT1_DIVCHACK_SHIFT 5
812#define OMAP4430_HSDIVIDER_CLKOUT1_DIVCHACK_MASK BITFIELD(5, 5) 829#define OMAP4430_HSDIVIDER_CLKOUT1_DIVCHACK_MASK (1 << 5)
813 830
814/* 831/*
815 * Used by CM_DIV_M4_DPLL_PER, CM_DIV_M4_DPLL_CORE_RESTORE, 832 * Used by CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_CORE_RESTORE,
816 * CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA 833 * CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA, CM_DIV_M4_DPLL_PER
817 */ 834 */
818#define OMAP4430_HSDIVIDER_CLKOUT1_GATE_CTRL_SHIFT 8 835#define OMAP4430_HSDIVIDER_CLKOUT1_GATE_CTRL_SHIFT 8
819#define OMAP4430_HSDIVIDER_CLKOUT1_GATE_CTRL_MASK BITFIELD(8, 8) 836#define OMAP4430_HSDIVIDER_CLKOUT1_GATE_CTRL_MASK (1 << 8)
820 837
821/* 838/*
822 * Used by CM_DIV_M4_DPLL_PER, CM_DIV_M4_DPLL_CORE_RESTORE, 839 * Used by CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_CORE_RESTORE,
823 * CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA 840 * CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA, CM_DIV_M4_DPLL_PER
824 */ 841 */
825#define OMAP4430_HSDIVIDER_CLKOUT1_PWDN_SHIFT 12 842#define OMAP4430_HSDIVIDER_CLKOUT1_PWDN_SHIFT 12
826#define OMAP4430_HSDIVIDER_CLKOUT1_PWDN_MASK BITFIELD(12, 12) 843#define OMAP4430_HSDIVIDER_CLKOUT1_PWDN_MASK (1 << 12)
827 844
828/* 845/*
829 * Used by CM_DIV_M5_DPLL_PER, CM_DIV_M5_DPLL_CORE_RESTORE, 846 * Used by CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_CORE_RESTORE,
830 * CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA 847 * CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA, CM_DIV_M5_DPLL_PER
831 */ 848 */
832#define OMAP4430_HSDIVIDER_CLKOUT2_DIV_SHIFT 0 849#define OMAP4430_HSDIVIDER_CLKOUT2_DIV_SHIFT 0
833#define OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK BITFIELD(0, 4) 850#define OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK (0x1f << 0)
834 851
835/* 852/*
836 * Used by CM_DIV_M5_DPLL_PER, CM_DIV_M5_DPLL_CORE_RESTORE, 853 * Used by CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_CORE_RESTORE,
837 * CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA 854 * CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA, CM_DIV_M5_DPLL_PER
838 */ 855 */
839#define OMAP4430_HSDIVIDER_CLKOUT2_DIVCHACK_SHIFT 5 856#define OMAP4430_HSDIVIDER_CLKOUT2_DIVCHACK_SHIFT 5
840#define OMAP4430_HSDIVIDER_CLKOUT2_DIVCHACK_MASK BITFIELD(5, 5) 857#define OMAP4430_HSDIVIDER_CLKOUT2_DIVCHACK_MASK (1 << 5)
841 858
842/* 859/*
843 * Used by CM_DIV_M5_DPLL_PER, CM_DIV_M5_DPLL_CORE_RESTORE, 860 * Used by CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_CORE_RESTORE,
844 * CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA 861 * CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA, CM_DIV_M5_DPLL_PER
845 */ 862 */
846#define OMAP4430_HSDIVIDER_CLKOUT2_GATE_CTRL_SHIFT 8 863#define OMAP4430_HSDIVIDER_CLKOUT2_GATE_CTRL_SHIFT 8
847#define OMAP4430_HSDIVIDER_CLKOUT2_GATE_CTRL_MASK BITFIELD(8, 8) 864#define OMAP4430_HSDIVIDER_CLKOUT2_GATE_CTRL_MASK (1 << 8)
848 865
849/* 866/*
850 * Used by CM_DIV_M5_DPLL_PER, CM_DIV_M5_DPLL_CORE_RESTORE, 867 * Used by CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_CORE_RESTORE,
851 * CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA 868 * CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA, CM_DIV_M5_DPLL_PER
852 */ 869 */
853#define OMAP4430_HSDIVIDER_CLKOUT2_PWDN_SHIFT 12 870#define OMAP4430_HSDIVIDER_CLKOUT2_PWDN_SHIFT 12
854#define OMAP4430_HSDIVIDER_CLKOUT2_PWDN_MASK BITFIELD(12, 12) 871#define OMAP4430_HSDIVIDER_CLKOUT2_PWDN_MASK (1 << 12)
855 872
856/* 873/*
857 * Used by CM_DIV_M6_DPLL_PER, CM_DIV_M6_DPLL_CORE_RESTORE, 874 * Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_CORE_RESTORE,
858 * CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY 875 * CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER
859 */ 876 */
860#define OMAP4430_HSDIVIDER_CLKOUT3_DIV_SHIFT 0 877#define OMAP4430_HSDIVIDER_CLKOUT3_DIV_SHIFT 0
861#define OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK BITFIELD(0, 4) 878#define OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK (0x1f << 0)
862 879
863/* 880/*
864 * Used by CM_DIV_M6_DPLL_PER, CM_DIV_M6_DPLL_CORE_RESTORE, 881 * Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_CORE_RESTORE,
865 * CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY 882 * CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER
866 */ 883 */
867#define OMAP4430_HSDIVIDER_CLKOUT3_DIVCHACK_SHIFT 5 884#define OMAP4430_HSDIVIDER_CLKOUT3_DIVCHACK_SHIFT 5
868#define OMAP4430_HSDIVIDER_CLKOUT3_DIVCHACK_MASK BITFIELD(5, 5) 885#define OMAP4430_HSDIVIDER_CLKOUT3_DIVCHACK_MASK (1 << 5)
869 886
870/* 887/*
871 * Used by CM_DIV_M6_DPLL_PER, CM_DIV_M6_DPLL_CORE_RESTORE, 888 * Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_CORE_RESTORE,
872 * CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY 889 * CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER
873 */ 890 */
874#define OMAP4430_HSDIVIDER_CLKOUT3_GATE_CTRL_SHIFT 8 891#define OMAP4430_HSDIVIDER_CLKOUT3_GATE_CTRL_SHIFT 8
875#define OMAP4430_HSDIVIDER_CLKOUT3_GATE_CTRL_MASK BITFIELD(8, 8) 892#define OMAP4430_HSDIVIDER_CLKOUT3_GATE_CTRL_MASK (1 << 8)
876 893
877/* 894/*
878 * Used by CM_DIV_M6_DPLL_PER, CM_DIV_M6_DPLL_CORE_RESTORE, 895 * Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_CORE_RESTORE,
879 * CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY 896 * CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER
880 */ 897 */
881#define OMAP4430_HSDIVIDER_CLKOUT3_PWDN_SHIFT 12 898#define OMAP4430_HSDIVIDER_CLKOUT3_PWDN_SHIFT 12
882#define OMAP4430_HSDIVIDER_CLKOUT3_PWDN_MASK BITFIELD(12, 12) 899#define OMAP4430_HSDIVIDER_CLKOUT3_PWDN_MASK (1 << 12)
883 900
884/* 901/*
885 * Used by CM_DIV_M7_DPLL_PER, CM_DIV_M7_DPLL_CORE_RESTORE, 902 * Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_CORE_RESTORE,
886 * CM_DIV_M7_DPLL_CORE 903 * CM_DIV_M7_DPLL_PER
887 */ 904 */
888#define OMAP4430_HSDIVIDER_CLKOUT4_DIV_SHIFT 0 905#define OMAP4430_HSDIVIDER_CLKOUT4_DIV_SHIFT 0
889#define OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK BITFIELD(0, 4) 906#define OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK (0x1f << 0)
890 907
891/* 908/*
892 * Used by CM_DIV_M7_DPLL_PER, CM_DIV_M7_DPLL_CORE_RESTORE, 909 * Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_CORE_RESTORE,
893 * CM_DIV_M7_DPLL_CORE 910 * CM_DIV_M7_DPLL_PER
894 */ 911 */
895#define OMAP4430_HSDIVIDER_CLKOUT4_DIVCHACK_SHIFT 5 912#define OMAP4430_HSDIVIDER_CLKOUT4_DIVCHACK_SHIFT 5
896#define OMAP4430_HSDIVIDER_CLKOUT4_DIVCHACK_MASK BITFIELD(5, 5) 913#define OMAP4430_HSDIVIDER_CLKOUT4_DIVCHACK_MASK (1 << 5)
897 914
898/* 915/*
899 * Used by CM_DIV_M7_DPLL_PER, CM_DIV_M7_DPLL_CORE_RESTORE, 916 * Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_CORE_RESTORE,
900 * CM_DIV_M7_DPLL_CORE 917 * CM_DIV_M7_DPLL_PER
901 */ 918 */
902#define OMAP4430_HSDIVIDER_CLKOUT4_GATE_CTRL_SHIFT 8 919#define OMAP4430_HSDIVIDER_CLKOUT4_GATE_CTRL_SHIFT 8
903#define OMAP4430_HSDIVIDER_CLKOUT4_GATE_CTRL_MASK BITFIELD(8, 8) 920#define OMAP4430_HSDIVIDER_CLKOUT4_GATE_CTRL_MASK (1 << 8)
904 921
905/* 922/*
906 * Used by CM_DIV_M7_DPLL_PER, CM_DIV_M7_DPLL_CORE_RESTORE, 923 * Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_CORE_RESTORE,
907 * CM_DIV_M7_DPLL_CORE 924 * CM_DIV_M7_DPLL_PER
908 */ 925 */
909#define OMAP4430_HSDIVIDER_CLKOUT4_PWDN_SHIFT 12 926#define OMAP4430_HSDIVIDER_CLKOUT4_PWDN_SHIFT 12
910#define OMAP4430_HSDIVIDER_CLKOUT4_PWDN_MASK BITFIELD(12, 12) 927#define OMAP4430_HSDIVIDER_CLKOUT4_PWDN_MASK (1 << 12)
911 928
912/* 929/*
913 * Used by PRM_PRM_PROFILING_CLKCTRL, CM_WKUP_GPIO1_CLKCTRL, 930 * Used by CM1_ABE_AESS_CLKCTRL, CM1_ABE_DMIC_CLKCTRL, CM1_ABE_L4ABE_CLKCTRL,
914 * CM_WKUP_KEYBOARD_CLKCTRL, CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_RTC_CLKCTRL, 931 * CM1_ABE_MCASP_CLKCTRL, CM1_ABE_MCBSP1_CLKCTRL, CM1_ABE_MCBSP2_CLKCTRL,
915 * CM_WKUP_SARRAM_CLKCTRL, CM_WKUP_SYNCTIMER_CLKCTRL, CM_WKUP_TIMER12_CLKCTRL, 932 * CM1_ABE_MCBSP3_CLKCTRL, CM1_ABE_PDM_CLKCTRL, CM1_ABE_SLIMBUS_CLKCTRL,
916 * CM_WKUP_TIMER1_CLKCTRL, CM_WKUP_USIM_CLKCTRL, CM_WKUP_WDT1_CLKCTRL, 933 * CM1_ABE_TIMER5_CLKCTRL, CM1_ABE_TIMER6_CLKCTRL, CM1_ABE_TIMER7_CLKCTRL,
917 * CM_WKUP_WDT2_CLKCTRL, CM_EMU_DEBUGSS_CLKCTRL, CM_D2D_MODEM_ICR_CLKCTRL, 934 * CM1_ABE_TIMER8_CLKCTRL, CM1_ABE_WDT3_CLKCTRL, CM_ALWON_MDMINTC_CLKCTRL,
918 * CM_D2D_SAD2D_CLKCTRL, CM_D2D_SAD2D_FW_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL, 935 * CM_ALWON_SR_CORE_CLKCTRL, CM_ALWON_SR_IVA_CLKCTRL, CM_ALWON_SR_MPU_CLKCTRL,
919 * CM_L3INSTR_L3_3_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL, 936 * CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL,
920 * CM_L3INSTR_OCP_WP1_CLKCTRL, CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, 937 * CM_CM1_PROFILING_CLKCTRL, CM_CM1_PROFILING_CLKCTRL_RESTORE,
921 * CM_L3_2_L3_2_CLKCTRL, CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, 938 * CM_CM2_PROFILING_CLKCTRL, CM_CM2_PROFILING_CLKCTRL_RESTORE,
922 * CM_L4CFG_L4_CFG_CLKCTRL, CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, 939 * CM_D2D_MODEM_ICR_CLKCTRL, CM_D2D_SAD2D_CLKCTRL, CM_D2D_SAD2D_FW_CLKCTRL,
923 * CM_MEMIF_DMM_CLKCTRL, CM_MEMIF_EMIF_1_CLKCTRL, CM_MEMIF_EMIF_2_CLKCTRL, 940 * CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL,
924 * CM_MEMIF_EMIF_FW_CLKCTRL, CM_MEMIF_EMIF_H1_CLKCTRL, 941 * CM_EMU_DEBUGSS_CLKCTRL, CM_GFX_GFX_CLKCTRL, CM_IVAHD_IVAHD_CLKCTRL,
925 * CM_MEMIF_EMIF_H2_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, CM_GFX_GFX_CLKCTRL, 942 * CM_IVAHD_SL2_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL,
926 * CM_L4PER_ADC_CLKCTRL, CM_L4PER_DMTIMER10_CLKCTRL,
927 * CM_L4PER_DMTIMER11_CLKCTRL, CM_L4PER_DMTIMER2_CLKCTRL,
928 * CM_L4PER_DMTIMER3_CLKCTRL, CM_L4PER_DMTIMER4_CLKCTRL,
929 * CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_ELM_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL,
930 * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL,
931 * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_HDQ1W_CLKCTRL, CM_L4PER_HECC1_CLKCTRL,
932 * CM_L4PER_HECC2_CLKCTRL, CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL,
933 * CM_L4PER_I2C3_CLKCTRL, CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL,
934 * CM_L4PER_L4PER_CLKCTRL, CM_L4PER_MCASP2_CLKCTRL, CM_L4PER_MCASP3_CLKCTRL,
935 * CM_L4PER_MCBSP4_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL,
936 * CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MGATE_CLKCTRL,
937 * CM_L4PER_MMCSD3_CLKCTRL, CM_L4PER_MMCSD4_CLKCTRL, CM_L4PER_MMCSD5_CLKCTRL,
938 * CM_L4PER_MSPROHG_CLKCTRL, CM_L4PER_SLIMBUS2_CLKCTRL, CM_L4PER_UART1_CLKCTRL,
939 * CM_L4PER_UART2_CLKCTRL, CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL,
940 * CM_L4SEC_AES1_CLKCTRL, CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL,
941 * CM_L4SEC_DES3DES_CLKCTRL, CM_L4SEC_PKAEIP29_CLKCTRL, CM_L4SEC_RNG_CLKCTRL,
942 * CM_L4SEC_SHA2MD51_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL,
943 * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, 943 * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL,
944 * CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL, 944 * CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL,
945 * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL, 945 * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL,
946 * CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL, 946 * CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL,
947 * CM_L3INIT_USB_HOST_FS_CLKCTRL, CM_L3INIT_USB_OTG_CLKCTRL, 947 * CM_L3INIT_USB_HOST_CLKCTRL_RESTORE, CM_L3INIT_USB_HOST_FS_CLKCTRL,
948 * CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_XHPI_CLKCTRL, CM_CAM_FDIF_CLKCTRL, 948 * CM_L3INIT_USB_OTG_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL,
949 * CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL, 949 * CM_L3INIT_USB_TLL_CLKCTRL_RESTORE, CM_L3INIT_XHPI_CLKCTRL,
950 * CM_L3INIT_USB_HOST_CLKCTRL_RESTORE, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE, 950 * CM_L3INSTR_L3_3_CLKCTRL, CM_L3INSTR_L3_3_CLKCTRL_RESTORE,
951 * CM_L3INSTR_L3_3_CLKCTRL_RESTORE, CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE, 951 * CM_L3INSTR_L3_INSTR_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE,
952 * CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE, CM_L4PER_GPIO2_CLKCTRL_RESTORE, 952 * CM_L3INSTR_OCP_WP1_CLKCTRL, CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE,
953 * CM_L4PER_GPIO3_CLKCTRL_RESTORE, CM_L4PER_GPIO4_CLKCTRL_RESTORE, 953 * CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, CM_L3_2_L3_2_CLKCTRL,
954 * CM_L4PER_GPIO5_CLKCTRL_RESTORE, CM_L4PER_GPIO6_CLKCTRL_RESTORE, 954 * CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, CM_L4CFG_L4_CFG_CLKCTRL,
955 * CM_ALWON_MDMINTC_CLKCTRL, CM_ALWON_SR_CORE_CLKCTRL, CM_ALWON_SR_IVA_CLKCTRL, 955 * CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, CM_L4PER_ADC_CLKCTRL,
956 * CM_ALWON_SR_MPU_CLKCTRL, CM_IVAHD_IVAHD_CLKCTRL, CM_IVAHD_SL2_CLKCTRL, 956 * CM_L4PER_DMTIMER10_CLKCTRL, CM_L4PER_DMTIMER11_CLKCTRL,
957 * CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_CM2_PROFILING_CLKCTRL, 957 * CM_L4PER_DMTIMER2_CLKCTRL, CM_L4PER_DMTIMER3_CLKCTRL,
958 * CM_MPU_MPU_CLKCTRL, CM_TESLA_TESLA_CLKCTRL, CM1_ABE_AESS_CLKCTRL, 958 * CM_L4PER_DMTIMER4_CLKCTRL, CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_ELM_CLKCTRL,
959 * CM1_ABE_DMIC_CLKCTRL, CM1_ABE_L4ABE_CLKCTRL, CM1_ABE_MCASP_CLKCTRL, 959 * CM_L4PER_GPIO2_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL_RESTORE,
960 * CM1_ABE_MCBSP1_CLKCTRL, CM1_ABE_MCBSP2_CLKCTRL, CM1_ABE_MCBSP3_CLKCTRL, 960 * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO3_CLKCTRL_RESTORE,
961 * CM1_ABE_PDM_CLKCTRL, CM1_ABE_SLIMBUS_CLKCTRL, CM1_ABE_TIMER5_CLKCTRL, 961 * CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL_RESTORE,
962 * CM1_ABE_TIMER6_CLKCTRL, CM1_ABE_TIMER7_CLKCTRL, CM1_ABE_TIMER8_CLKCTRL, 962 * CM_L4PER_GPIO5_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL_RESTORE,
963 * CM1_ABE_WDT3_CLKCTRL, CM_CM1_PROFILING_CLKCTRL 963 * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_GPIO6_CLKCTRL_RESTORE,
964 * CM_L4PER_HDQ1W_CLKCTRL, CM_L4PER_HECC1_CLKCTRL, CM_L4PER_HECC2_CLKCTRL,
965 * CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL, CM_L4PER_I2C3_CLKCTRL,
966 * CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL, CM_L4PER_L4PER_CLKCTRL,
967 * CM_L4PER_MCASP2_CLKCTRL, CM_L4PER_MCASP3_CLKCTRL, CM_L4PER_MCBSP4_CLKCTRL,
968 * CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL, CM_L4PER_MCSPI3_CLKCTRL,
969 * CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MGATE_CLKCTRL, CM_L4PER_MMCSD3_CLKCTRL,
970 * CM_L4PER_MMCSD4_CLKCTRL, CM_L4PER_MMCSD5_CLKCTRL, CM_L4PER_MSPROHG_CLKCTRL,
971 * CM_L4PER_SLIMBUS2_CLKCTRL, CM_L4PER_UART1_CLKCTRL, CM_L4PER_UART2_CLKCTRL,
972 * CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL, CM_L4SEC_AES1_CLKCTRL,
973 * CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL,
974 * CM_L4SEC_PKAEIP29_CLKCTRL, CM_L4SEC_RNG_CLKCTRL, CM_L4SEC_SHA2MD51_CLKCTRL,
975 * CM_MEMIF_DMM_CLKCTRL, CM_MEMIF_EMIF_1_CLKCTRL, CM_MEMIF_EMIF_2_CLKCTRL,
976 * CM_MEMIF_EMIF_FW_CLKCTRL, CM_MEMIF_EMIF_H1_CLKCTRL,
977 * CM_MEMIF_EMIF_H2_CLKCTRL, CM_MPU_MPU_CLKCTRL, CM_SDMA_SDMA_CLKCTRL,
978 * CM_TESLA_TESLA_CLKCTRL, CM_WKUP_GPIO1_CLKCTRL, CM_WKUP_KEYBOARD_CLKCTRL,
979 * CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_RTC_CLKCTRL, CM_WKUP_SARRAM_CLKCTRL,
980 * CM_WKUP_SYNCTIMER_CLKCTRL, CM_WKUP_TIMER12_CLKCTRL, CM_WKUP_TIMER1_CLKCTRL,
981 * CM_WKUP_USIM_CLKCTRL, CM_WKUP_WDT1_CLKCTRL, CM_WKUP_WDT2_CLKCTRL
964 */ 982 */
965#define OMAP4430_IDLEST_SHIFT 16 983#define OMAP4430_IDLEST_SHIFT 16
966#define OMAP4430_IDLEST_MASK BITFIELD(16, 17) 984#define OMAP4430_IDLEST_MASK (0x3 << 16)
967 985
968/* Used by CM_DUCATI_DYNAMICDEP, CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP */ 986/*
987 * Used by CM_DUCATI_DYNAMICDEP, CM_L3_2_DYNAMICDEP,
988 * CM_L3_2_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP, CM_L4CFG_DYNAMICDEP_RESTORE
989 */
969#define OMAP4430_ISS_DYNDEP_SHIFT 9 990#define OMAP4430_ISS_DYNDEP_SHIFT 9
970#define OMAP4430_ISS_DYNDEP_MASK BITFIELD(9, 9) 991#define OMAP4430_ISS_DYNDEP_MASK (1 << 9)
971 992
972/* 993/*
973 * Used by CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, 994 * Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP, CM_SDMA_STATICDEP,
974 * CM_MPU_STATICDEP, CM_TESLA_STATICDEP 995 * CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
975 */ 996 */
976#define OMAP4430_ISS_STATDEP_SHIFT 9 997#define OMAP4430_ISS_STATDEP_SHIFT 9
977#define OMAP4430_ISS_STATDEP_MASK BITFIELD(9, 9) 998#define OMAP4430_ISS_STATDEP_MASK (1 << 9)
978 999
979/* Used by CM_L3_2_DYNAMICDEP, CM_TESLA_DYNAMICDEP */ 1000/* Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE, CM_TESLA_DYNAMICDEP */
980#define OMAP4430_IVAHD_DYNDEP_SHIFT 2 1001#define OMAP4430_IVAHD_DYNDEP_SHIFT 2
981#define OMAP4430_IVAHD_DYNDEP_MASK BITFIELD(2, 2) 1002#define OMAP4430_IVAHD_DYNDEP_MASK (1 << 2)
982 1003
983/* 1004/*
984 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 1005 * Used by CM_CAM_STATICDEP, CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE,
985 * CM_GFX_STATICDEP, CM_L3INIT_STATICDEP, CM_CAM_STATICDEP, 1006 * CM_DSS_STATICDEP, CM_DUCATI_STATICDEP, CM_GFX_STATICDEP,
986 * CM_SDMA_STATICDEP_RESTORE, CM_DSS_STATICDEP, CM_MPU_STATICDEP, 1007 * CM_L3INIT_STATICDEP, CM_MPU_STATICDEP, CM_SDMA_STATICDEP,
987 * CM_TESLA_STATICDEP 1008 * CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
988 */ 1009 */
989#define OMAP4430_IVAHD_STATDEP_SHIFT 2 1010#define OMAP4430_IVAHD_STATDEP_SHIFT 2
990#define OMAP4430_IVAHD_STATDEP_MASK BITFIELD(2, 2) 1011#define OMAP4430_IVAHD_STATDEP_MASK (1 << 2)
991 1012
992/* Used by CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, CM_L4PER_DYNAMICDEP */ 1013/*
1014 * Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP,
1015 * CM_L4CFG_DYNAMICDEP_RESTORE, CM_L4PER_DYNAMICDEP, CM_L4PER_DYNAMICDEP_RESTORE
1016 */
993#define OMAP4430_L3INIT_DYNDEP_SHIFT 7 1017#define OMAP4430_L3INIT_DYNDEP_SHIFT 7
994#define OMAP4430_L3INIT_DYNDEP_MASK BITFIELD(7, 7) 1018#define OMAP4430_L3INIT_DYNDEP_MASK (1 << 7)
995 1019
996/* 1020/*
997 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 1021 * Used by CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE, CM_DUCATI_STATICDEP,
998 * CM_SDMA_STATICDEP_RESTORE, CM_MPU_STATICDEP, CM_TESLA_STATICDEP 1022 * CM_MPU_STATICDEP, CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE,
1023 * CM_TESLA_STATICDEP
999 */ 1024 */
1000#define OMAP4430_L3INIT_STATDEP_SHIFT 7 1025#define OMAP4430_L3INIT_STATDEP_SHIFT 7
1001#define OMAP4430_L3INIT_STATDEP_MASK BITFIELD(7, 7) 1026#define OMAP4430_L3INIT_STATDEP_MASK (1 << 7)
1002 1027
1003/* 1028/*
1004 * Used by CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, CM_L3INIT_DYNAMICDEP, 1029 * Used by CM_DSS_DYNAMICDEP, CM_L3INIT_DYNAMICDEP, CM_L3_2_DYNAMICDEP,
1005 * CM_DSS_DYNAMICDEP, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP 1030 * CM_L3_2_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP,
1031 * CM_L4CFG_DYNAMICDEP_RESTORE, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP
1006 */ 1032 */
1007#define OMAP4430_L3_1_DYNDEP_SHIFT 5 1033#define OMAP4430_L3_1_DYNDEP_SHIFT 5
1008#define OMAP4430_L3_1_DYNDEP_MASK BITFIELD(5, 5) 1034#define OMAP4430_L3_1_DYNDEP_MASK (1 << 5)
1009 1035
1010/* 1036/*
1011 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 1037 * Used by CM_CAM_STATICDEP, CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE,
1012 * CM_GFX_STATICDEP, CM_L4SEC_STATICDEP, CM_L3INIT_STATICDEP, CM_CAM_STATICDEP, 1038 * CM_DSS_STATICDEP, CM_DUCATI_STATICDEP, CM_GFX_STATICDEP, CM_IVAHD_STATICDEP,
1013 * CM_SDMA_STATICDEP_RESTORE, CM_IVAHD_STATICDEP, CM_DSS_STATICDEP, 1039 * CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP, CM_MPU_STATICDEP,
1014 * CM_MPU_STATICDEP, CM_TESLA_STATICDEP 1040 * CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
1015 */ 1041 */
1016#define OMAP4430_L3_1_STATDEP_SHIFT 5 1042#define OMAP4430_L3_1_STATDEP_SHIFT 5
1017#define OMAP4430_L3_1_STATDEP_MASK BITFIELD(5, 5) 1043#define OMAP4430_L3_1_STATDEP_MASK (1 << 5)
1018 1044
1019/* 1045/*
1020 * Used by CM_EMU_DYNAMICDEP, CM_D2D_DYNAMICDEP, CM_DUCATI_DYNAMICDEP, 1046 * Used by CM_CAM_DYNAMICDEP, CM_D2D_DYNAMICDEP, CM_D2D_DYNAMICDEP_RESTORE,
1021 * CM_L3_1_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, CM_SDMA_DYNAMICDEP, 1047 * CM_DUCATI_DYNAMICDEP, CM_EMU_DYNAMICDEP, CM_GFX_DYNAMICDEP,
1022 * CM_GFX_DYNAMICDEP, CM_L4SEC_DYNAMICDEP, CM_L3INIT_DYNAMICDEP, 1048 * CM_IVAHD_DYNAMICDEP, CM_L3INIT_DYNAMICDEP, CM_L3_1_DYNAMICDEP,
1023 * CM_CAM_DYNAMICDEP, CM_IVAHD_DYNAMICDEP 1049 * CM_L3_1_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP,
1050 * CM_L4CFG_DYNAMICDEP_RESTORE, CM_L4SEC_DYNAMICDEP, CM_SDMA_DYNAMICDEP
1024 */ 1051 */
1025#define OMAP4430_L3_2_DYNDEP_SHIFT 6 1052#define OMAP4430_L3_2_DYNDEP_SHIFT 6
1026#define OMAP4430_L3_2_DYNDEP_MASK BITFIELD(6, 6) 1053#define OMAP4430_L3_2_DYNDEP_MASK (1 << 6)
1027 1054
1028/* 1055/*
1029 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 1056 * Used by CM_CAM_STATICDEP, CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE,
1030 * CM_GFX_STATICDEP, CM_L4SEC_STATICDEP, CM_L3INIT_STATICDEP, CM_CAM_STATICDEP, 1057 * CM_DSS_STATICDEP, CM_DUCATI_STATICDEP, CM_GFX_STATICDEP, CM_IVAHD_STATICDEP,
1031 * CM_SDMA_STATICDEP_RESTORE, CM_IVAHD_STATICDEP, CM_DSS_STATICDEP, 1058 * CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP, CM_MPU_STATICDEP,
1032 * CM_MPU_STATICDEP, CM_TESLA_STATICDEP 1059 * CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
1033 */ 1060 */
1034#define OMAP4430_L3_2_STATDEP_SHIFT 6 1061#define OMAP4430_L3_2_STATDEP_SHIFT 6
1035#define OMAP4430_L3_2_STATDEP_MASK BITFIELD(6, 6) 1062#define OMAP4430_L3_2_STATDEP_MASK (1 << 6)
1036 1063
1037/* Used by CM_L3_1_DYNAMICDEP */ 1064/* Used by CM_L3_1_DYNAMICDEP, CM_L3_1_DYNAMICDEP_RESTORE */
1038#define OMAP4430_L4CFG_DYNDEP_SHIFT 12 1065#define OMAP4430_L4CFG_DYNDEP_SHIFT 12
1039#define OMAP4430_L4CFG_DYNDEP_MASK BITFIELD(12, 12) 1066#define OMAP4430_L4CFG_DYNDEP_MASK (1 << 12)
1040 1067
1041/* 1068/*
1042 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 1069 * Used by CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE, CM_DUCATI_STATICDEP,
1043 * CM_L3INIT_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_MPU_STATICDEP, 1070 * CM_L3INIT_STATICDEP, CM_MPU_STATICDEP, CM_SDMA_STATICDEP,
1044 * CM_TESLA_STATICDEP 1071 * CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
1045 */ 1072 */
1046#define OMAP4430_L4CFG_STATDEP_SHIFT 12 1073#define OMAP4430_L4CFG_STATDEP_SHIFT 12
1047#define OMAP4430_L4CFG_STATDEP_MASK BITFIELD(12, 12) 1074#define OMAP4430_L4CFG_STATDEP_MASK (1 << 12)
1048 1075
1049/* Used by CM_L3_2_DYNAMICDEP */ 1076/* Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE */
1050#define OMAP4430_L4PER_DYNDEP_SHIFT 13 1077#define OMAP4430_L4PER_DYNDEP_SHIFT 13
1051#define OMAP4430_L4PER_DYNDEP_MASK BITFIELD(13, 13) 1078#define OMAP4430_L4PER_DYNDEP_MASK (1 << 13)
1052 1079
1053/* 1080/*
1054 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 1081 * Used by CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE, CM_DUCATI_STATICDEP,
1055 * CM_L4SEC_STATICDEP, CM_L3INIT_STATICDEP, CM_SDMA_STATICDEP_RESTORE, 1082 * CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP, CM_MPU_STATICDEP,
1056 * CM_MPU_STATICDEP, CM_TESLA_STATICDEP 1083 * CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
1057 */ 1084 */
1058#define OMAP4430_L4PER_STATDEP_SHIFT 13 1085#define OMAP4430_L4PER_STATDEP_SHIFT 13
1059#define OMAP4430_L4PER_STATDEP_MASK BITFIELD(13, 13) 1086#define OMAP4430_L4PER_STATDEP_MASK (1 << 13)
1060 1087
1061/* Used by CM_L3_2_DYNAMICDEP, CM_L4PER_DYNAMICDEP */ 1088/*
1089 * Used by CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE, CM_L4PER_DYNAMICDEP,
1090 * CM_L4PER_DYNAMICDEP_RESTORE
1091 */
1062#define OMAP4430_L4SEC_DYNDEP_SHIFT 14 1092#define OMAP4430_L4SEC_DYNDEP_SHIFT 14
1063#define OMAP4430_L4SEC_DYNDEP_MASK BITFIELD(14, 14) 1093#define OMAP4430_L4SEC_DYNDEP_MASK (1 << 14)
1064 1094
1065/* 1095/*
1066 * Used by CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, CM_L3INIT_STATICDEP, 1096 * Used by CM_DUCATI_STATICDEP, CM_L3INIT_STATICDEP, CM_MPU_STATICDEP,
1067 * CM_SDMA_STATICDEP_RESTORE, CM_MPU_STATICDEP 1097 * CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE
1068 */ 1098 */
1069#define OMAP4430_L4SEC_STATDEP_SHIFT 14 1099#define OMAP4430_L4SEC_STATDEP_SHIFT 14
1070#define OMAP4430_L4SEC_STATDEP_MASK BITFIELD(14, 14) 1100#define OMAP4430_L4SEC_STATDEP_MASK (1 << 14)
1071 1101
1072/* Used by CM_L4CFG_DYNAMICDEP */ 1102/* Used by CM_L4CFG_DYNAMICDEP, CM_L4CFG_DYNAMICDEP_RESTORE */
1073#define OMAP4430_L4WKUP_DYNDEP_SHIFT 15 1103#define OMAP4430_L4WKUP_DYNDEP_SHIFT 15
1074#define OMAP4430_L4WKUP_DYNDEP_MASK BITFIELD(15, 15) 1104#define OMAP4430_L4WKUP_DYNDEP_MASK (1 << 15)
1075 1105
1076/* 1106/*
1077 * Used by CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, CM_L3INIT_STATICDEP, 1107 * Used by CM_DUCATI_STATICDEP, CM_L3INIT_STATICDEP, CM_MPU_STATICDEP,
1078 * CM_SDMA_STATICDEP_RESTORE, CM_MPU_STATICDEP, CM_TESLA_STATICDEP 1108 * CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
1079 */ 1109 */
1080#define OMAP4430_L4WKUP_STATDEP_SHIFT 15 1110#define OMAP4430_L4WKUP_STATDEP_SHIFT 15
1081#define OMAP4430_L4WKUP_STATDEP_MASK BITFIELD(15, 15) 1111#define OMAP4430_L4WKUP_STATDEP_MASK (1 << 15)
1082 1112
1083/* 1113/*
1084 * Used by CM_D2D_DYNAMICDEP, CM_L3_1_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, 1114 * Used by CM_D2D_DYNAMICDEP, CM_D2D_DYNAMICDEP_RESTORE, CM_L3_1_DYNAMICDEP,
1085 * CM_MPU_DYNAMICDEP 1115 * CM_L3_1_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP,
1116 * CM_L4CFG_DYNAMICDEP_RESTORE, CM_MPU_DYNAMICDEP
1086 */ 1117 */
1087#define OMAP4430_MEMIF_DYNDEP_SHIFT 4 1118#define OMAP4430_MEMIF_DYNDEP_SHIFT 4
1088#define OMAP4430_MEMIF_DYNDEP_MASK BITFIELD(4, 4) 1119#define OMAP4430_MEMIF_DYNDEP_MASK (1 << 4)
1089 1120
1090/* 1121/*
1091 * Used by CM_D2D_STATICDEP, CM_DUCATI_STATICDEP, CM_SDMA_STATICDEP, 1122 * Used by CM_CAM_STATICDEP, CM_D2D_STATICDEP, CM_D2D_STATICDEP_RESTORE,
1092 * CM_GFX_STATICDEP, CM_L4SEC_STATICDEP, CM_L3INIT_STATICDEP, CM_CAM_STATICDEP, 1123 * CM_DSS_STATICDEP, CM_DUCATI_STATICDEP, CM_GFX_STATICDEP, CM_IVAHD_STATICDEP,
1093 * CM_SDMA_STATICDEP_RESTORE, CM_IVAHD_STATICDEP, CM_DSS_STATICDEP, 1124 * CM_L3INIT_STATICDEP, CM_L4SEC_STATICDEP, CM_MPU_STATICDEP,
1094 * CM_MPU_STATICDEP, CM_TESLA_STATICDEP 1125 * CM_SDMA_STATICDEP, CM_SDMA_STATICDEP_RESTORE, CM_TESLA_STATICDEP
1095 */ 1126 */
1096#define OMAP4430_MEMIF_STATDEP_SHIFT 4 1127#define OMAP4430_MEMIF_STATDEP_SHIFT 4
1097#define OMAP4430_MEMIF_STATDEP_MASK BITFIELD(4, 4) 1128#define OMAP4430_MEMIF_STATDEP_MASK (1 << 4)
1098 1129
1099/* 1130/*
1100 * Used by CM_SSC_MODFREQDIV_DPLL_PER, CM_SSC_MODFREQDIV_DPLL_UNIPRO, 1131 * Used by CM_SSC_MODFREQDIV_DPLL_ABE, CM_SSC_MODFREQDIV_DPLL_CORE,
1101 * CM_SSC_MODFREQDIV_DPLL_USB, CM_SSC_MODFREQDIV_DPLL_CORE_RESTORE, 1132 * CM_SSC_MODFREQDIV_DPLL_CORE_RESTORE, CM_SSC_MODFREQDIV_DPLL_DDRPHY,
1102 * CM_SSC_MODFREQDIV_DPLL_ABE, CM_SSC_MODFREQDIV_DPLL_CORE, 1133 * CM_SSC_MODFREQDIV_DPLL_IVA, CM_SSC_MODFREQDIV_DPLL_MPU,
1103 * CM_SSC_MODFREQDIV_DPLL_DDRPHY, CM_SSC_MODFREQDIV_DPLL_IVA, 1134 * CM_SSC_MODFREQDIV_DPLL_PER, CM_SSC_MODFREQDIV_DPLL_UNIPRO,
1104 * CM_SSC_MODFREQDIV_DPLL_MPU 1135 * CM_SSC_MODFREQDIV_DPLL_USB
1105 */ 1136 */
1106#define OMAP4430_MODFREQDIV_EXPONENT_SHIFT 8 1137#define OMAP4430_MODFREQDIV_EXPONENT_SHIFT 8
1107#define OMAP4430_MODFREQDIV_EXPONENT_MASK BITFIELD(8, 10) 1138#define OMAP4430_MODFREQDIV_EXPONENT_MASK (0x7 << 8)
1108 1139
1109/* 1140/*
1110 * Used by CM_SSC_MODFREQDIV_DPLL_PER, CM_SSC_MODFREQDIV_DPLL_UNIPRO, 1141 * Used by CM_SSC_MODFREQDIV_DPLL_ABE, CM_SSC_MODFREQDIV_DPLL_CORE,
1111 * CM_SSC_MODFREQDIV_DPLL_USB, CM_SSC_MODFREQDIV_DPLL_CORE_RESTORE, 1142 * CM_SSC_MODFREQDIV_DPLL_CORE_RESTORE, CM_SSC_MODFREQDIV_DPLL_DDRPHY,
1112 * CM_SSC_MODFREQDIV_DPLL_ABE, CM_SSC_MODFREQDIV_DPLL_CORE, 1143 * CM_SSC_MODFREQDIV_DPLL_IVA, CM_SSC_MODFREQDIV_DPLL_MPU,
1113 * CM_SSC_MODFREQDIV_DPLL_DDRPHY, CM_SSC_MODFREQDIV_DPLL_IVA, 1144 * CM_SSC_MODFREQDIV_DPLL_PER, CM_SSC_MODFREQDIV_DPLL_UNIPRO,
1114 * CM_SSC_MODFREQDIV_DPLL_MPU 1145 * CM_SSC_MODFREQDIV_DPLL_USB
1115 */ 1146 */
1116#define OMAP4430_MODFREQDIV_MANTISSA_SHIFT 0 1147#define OMAP4430_MODFREQDIV_MANTISSA_SHIFT 0
1117#define OMAP4430_MODFREQDIV_MANTISSA_MASK BITFIELD(0, 6) 1148#define OMAP4430_MODFREQDIV_MANTISSA_MASK (0x7f << 0)
1118 1149
1119/* 1150/*
1120 * Used by PRM_PRM_PROFILING_CLKCTRL, CM_WKUP_GPIO1_CLKCTRL, 1151 * Used by CM1_ABE_AESS_CLKCTRL, CM1_ABE_DMIC_CLKCTRL, CM1_ABE_L4ABE_CLKCTRL,
1121 * CM_WKUP_KEYBOARD_CLKCTRL, CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_RTC_CLKCTRL, 1152 * CM1_ABE_MCASP_CLKCTRL, CM1_ABE_MCBSP1_CLKCTRL, CM1_ABE_MCBSP2_CLKCTRL,
1122 * CM_WKUP_SARRAM_CLKCTRL, CM_WKUP_SYNCTIMER_CLKCTRL, CM_WKUP_TIMER12_CLKCTRL, 1153 * CM1_ABE_MCBSP3_CLKCTRL, CM1_ABE_PDM_CLKCTRL, CM1_ABE_SLIMBUS_CLKCTRL,
1123 * CM_WKUP_TIMER1_CLKCTRL, CM_WKUP_USIM_CLKCTRL, CM_WKUP_WDT1_CLKCTRL, 1154 * CM1_ABE_TIMER5_CLKCTRL, CM1_ABE_TIMER6_CLKCTRL, CM1_ABE_TIMER7_CLKCTRL,
1124 * CM_WKUP_WDT2_CLKCTRL, CM_EMU_DEBUGSS_CLKCTRL, CM_D2D_MODEM_ICR_CLKCTRL, 1155 * CM1_ABE_TIMER8_CLKCTRL, CM1_ABE_WDT3_CLKCTRL, CM_ALWON_MDMINTC_CLKCTRL,
1125 * CM_D2D_SAD2D_CLKCTRL, CM_D2D_SAD2D_FW_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL, 1156 * CM_ALWON_SR_CORE_CLKCTRL, CM_ALWON_SR_IVA_CLKCTRL, CM_ALWON_SR_MPU_CLKCTRL,
1126 * CM_L3INSTR_L3_3_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL, 1157 * CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL,
1127 * CM_L3INSTR_OCP_WP1_CLKCTRL, CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, 1158 * CM_CM1_PROFILING_CLKCTRL, CM_CM1_PROFILING_CLKCTRL_RESTORE,
1128 * CM_L3_2_L3_2_CLKCTRL, CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, 1159 * CM_CM2_PROFILING_CLKCTRL, CM_CM2_PROFILING_CLKCTRL_RESTORE,
1129 * CM_L4CFG_L4_CFG_CLKCTRL, CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, 1160 * CM_D2D_MODEM_ICR_CLKCTRL, CM_D2D_SAD2D_CLKCTRL, CM_D2D_SAD2D_FW_CLKCTRL,
1130 * CM_MEMIF_DMM_CLKCTRL, CM_MEMIF_EMIF_1_CLKCTRL, CM_MEMIF_EMIF_2_CLKCTRL, 1161 * CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_DUCATI_DUCATI_CLKCTRL,
1131 * CM_MEMIF_EMIF_FW_CLKCTRL, CM_MEMIF_EMIF_H1_CLKCTRL, 1162 * CM_EMU_DEBUGSS_CLKCTRL, CM_GFX_GFX_CLKCTRL, CM_IVAHD_IVAHD_CLKCTRL,
1132 * CM_MEMIF_EMIF_H2_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, CM_GFX_GFX_CLKCTRL, 1163 * CM_IVAHD_SL2_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL,
1133 * CM_L4PER_ADC_CLKCTRL, CM_L4PER_DMTIMER10_CLKCTRL,
1134 * CM_L4PER_DMTIMER11_CLKCTRL, CM_L4PER_DMTIMER2_CLKCTRL,
1135 * CM_L4PER_DMTIMER3_CLKCTRL, CM_L4PER_DMTIMER4_CLKCTRL,
1136 * CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_ELM_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL,
1137 * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL,
1138 * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_HDQ1W_CLKCTRL, CM_L4PER_HECC1_CLKCTRL,
1139 * CM_L4PER_HECC2_CLKCTRL, CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL,
1140 * CM_L4PER_I2C3_CLKCTRL, CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL,
1141 * CM_L4PER_L4PER_CLKCTRL, CM_L4PER_MCASP2_CLKCTRL, CM_L4PER_MCASP3_CLKCTRL,
1142 * CM_L4PER_MCBSP4_CLKCTRL, CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL,
1143 * CM_L4PER_MCSPI3_CLKCTRL, CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MGATE_CLKCTRL,
1144 * CM_L4PER_MMCSD3_CLKCTRL, CM_L4PER_MMCSD4_CLKCTRL, CM_L4PER_MMCSD5_CLKCTRL,
1145 * CM_L4PER_MSPROHG_CLKCTRL, CM_L4PER_SLIMBUS2_CLKCTRL, CM_L4PER_UART1_CLKCTRL,
1146 * CM_L4PER_UART2_CLKCTRL, CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL,
1147 * CM_L4SEC_AES1_CLKCTRL, CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL,
1148 * CM_L4SEC_DES3DES_CLKCTRL, CM_L4SEC_PKAEIP29_CLKCTRL, CM_L4SEC_RNG_CLKCTRL,
1149 * CM_L4SEC_SHA2MD51_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL,
1150 * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, 1164 * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL,
1151 * CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL, 1165 * CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL,
1152 * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL, 1166 * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL,
1153 * CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL, 1167 * CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL,
1154 * CM_L3INIT_USB_HOST_FS_CLKCTRL, CM_L3INIT_USB_OTG_CLKCTRL, 1168 * CM_L3INIT_USB_HOST_CLKCTRL_RESTORE, CM_L3INIT_USB_HOST_FS_CLKCTRL,
1155 * CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_XHPI_CLKCTRL, CM_CAM_FDIF_CLKCTRL, 1169 * CM_L3INIT_USB_OTG_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL,
1156 * CM_CAM_ISS_CLKCTRL, CM_CEFUSE_CEFUSE_CLKCTRL, 1170 * CM_L3INIT_USB_TLL_CLKCTRL_RESTORE, CM_L3INIT_XHPI_CLKCTRL,
1157 * CM_L3INIT_USB_HOST_CLKCTRL_RESTORE, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE, 1171 * CM_L3INSTR_L3_3_CLKCTRL, CM_L3INSTR_L3_3_CLKCTRL_RESTORE,
1158 * CM_L3INSTR_L3_3_CLKCTRL_RESTORE, CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE, 1172 * CM_L3INSTR_L3_INSTR_CLKCTRL, CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE,
1159 * CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE, CM_L4PER_GPIO2_CLKCTRL_RESTORE, 1173 * CM_L3INSTR_OCP_WP1_CLKCTRL, CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE,
1160 * CM_L4PER_GPIO3_CLKCTRL_RESTORE, CM_L4PER_GPIO4_CLKCTRL_RESTORE, 1174 * CM_L3_1_L3_1_CLKCTRL, CM_L3_2_GPMC_CLKCTRL, CM_L3_2_L3_2_CLKCTRL,
1161 * CM_L4PER_GPIO5_CLKCTRL_RESTORE, CM_L4PER_GPIO6_CLKCTRL_RESTORE, 1175 * CM_L3_2_OCMC_RAM_CLKCTRL, CM_L4CFG_HW_SEM_CLKCTRL, CM_L4CFG_L4_CFG_CLKCTRL,
1162 * CM_ALWON_MDMINTC_CLKCTRL, CM_ALWON_SR_CORE_CLKCTRL, CM_ALWON_SR_IVA_CLKCTRL, 1176 * CM_L4CFG_MAILBOX_CLKCTRL, CM_L4CFG_SAR_ROM_CLKCTRL, CM_L4PER_ADC_CLKCTRL,
1163 * CM_ALWON_SR_MPU_CLKCTRL, CM_IVAHD_IVAHD_CLKCTRL, CM_IVAHD_SL2_CLKCTRL, 1177 * CM_L4PER_DMTIMER10_CLKCTRL, CM_L4PER_DMTIMER11_CLKCTRL,
1164 * CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, CM_CM2_PROFILING_CLKCTRL, 1178 * CM_L4PER_DMTIMER2_CLKCTRL, CM_L4PER_DMTIMER3_CLKCTRL,
1165 * CM_MPU_MPU_CLKCTRL, CM_TESLA_TESLA_CLKCTRL, CM1_ABE_AESS_CLKCTRL, 1179 * CM_L4PER_DMTIMER4_CLKCTRL, CM_L4PER_DMTIMER9_CLKCTRL, CM_L4PER_ELM_CLKCTRL,
1166 * CM1_ABE_DMIC_CLKCTRL, CM1_ABE_L4ABE_CLKCTRL, CM1_ABE_MCASP_CLKCTRL, 1180 * CM_L4PER_GPIO2_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL_RESTORE,
1167 * CM1_ABE_MCBSP1_CLKCTRL, CM1_ABE_MCBSP2_CLKCTRL, CM1_ABE_MCBSP3_CLKCTRL, 1181 * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO3_CLKCTRL_RESTORE,
1168 * CM1_ABE_PDM_CLKCTRL, CM1_ABE_SLIMBUS_CLKCTRL, CM1_ABE_TIMER5_CLKCTRL, 1182 * CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL_RESTORE,
1169 * CM1_ABE_TIMER6_CLKCTRL, CM1_ABE_TIMER7_CLKCTRL, CM1_ABE_TIMER8_CLKCTRL, 1183 * CM_L4PER_GPIO5_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL_RESTORE,
1170 * CM1_ABE_WDT3_CLKCTRL, CM_CM1_PROFILING_CLKCTRL 1184 * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_GPIO6_CLKCTRL_RESTORE,
1185 * CM_L4PER_HDQ1W_CLKCTRL, CM_L4PER_HECC1_CLKCTRL, CM_L4PER_HECC2_CLKCTRL,
1186 * CM_L4PER_I2C1_CLKCTRL, CM_L4PER_I2C2_CLKCTRL, CM_L4PER_I2C3_CLKCTRL,
1187 * CM_L4PER_I2C4_CLKCTRL, CM_L4PER_I2C5_CLKCTRL, CM_L4PER_L4PER_CLKCTRL,
1188 * CM_L4PER_MCASP2_CLKCTRL, CM_L4PER_MCASP3_CLKCTRL, CM_L4PER_MCBSP4_CLKCTRL,
1189 * CM_L4PER_MCSPI1_CLKCTRL, CM_L4PER_MCSPI2_CLKCTRL, CM_L4PER_MCSPI3_CLKCTRL,
1190 * CM_L4PER_MCSPI4_CLKCTRL, CM_L4PER_MGATE_CLKCTRL, CM_L4PER_MMCSD3_CLKCTRL,
1191 * CM_L4PER_MMCSD4_CLKCTRL, CM_L4PER_MMCSD5_CLKCTRL, CM_L4PER_MSPROHG_CLKCTRL,
1192 * CM_L4PER_SLIMBUS2_CLKCTRL, CM_L4PER_UART1_CLKCTRL, CM_L4PER_UART2_CLKCTRL,
1193 * CM_L4PER_UART3_CLKCTRL, CM_L4PER_UART4_CLKCTRL, CM_L4SEC_AES1_CLKCTRL,
1194 * CM_L4SEC_AES2_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL, CM_L4SEC_DES3DES_CLKCTRL,
1195 * CM_L4SEC_PKAEIP29_CLKCTRL, CM_L4SEC_RNG_CLKCTRL, CM_L4SEC_SHA2MD51_CLKCTRL,
1196 * CM_MEMIF_DMM_CLKCTRL, CM_MEMIF_EMIF_1_CLKCTRL, CM_MEMIF_EMIF_2_CLKCTRL,
1197 * CM_MEMIF_EMIF_FW_CLKCTRL, CM_MEMIF_EMIF_H1_CLKCTRL,
1198 * CM_MEMIF_EMIF_H2_CLKCTRL, CM_MPU_MPU_CLKCTRL, CM_SDMA_SDMA_CLKCTRL,
1199 * CM_TESLA_TESLA_CLKCTRL, CM_WKUP_GPIO1_CLKCTRL, CM_WKUP_KEYBOARD_CLKCTRL,
1200 * CM_WKUP_L4WKUP_CLKCTRL, CM_WKUP_RTC_CLKCTRL, CM_WKUP_SARRAM_CLKCTRL,
1201 * CM_WKUP_SYNCTIMER_CLKCTRL, CM_WKUP_TIMER12_CLKCTRL, CM_WKUP_TIMER1_CLKCTRL,
1202 * CM_WKUP_USIM_CLKCTRL, CM_WKUP_WDT1_CLKCTRL, CM_WKUP_WDT2_CLKCTRL
1171 */ 1203 */
1172#define OMAP4430_MODULEMODE_SHIFT 0 1204#define OMAP4430_MODULEMODE_SHIFT 0
1173#define OMAP4430_MODULEMODE_MASK BITFIELD(0, 1) 1205#define OMAP4430_MODULEMODE_MASK (0x3 << 0)
1174 1206
1175/* Used by CM_DSS_DSS_CLKCTRL */ 1207/* Used by CM_DSS_DSS_CLKCTRL */
1176#define OMAP4430_OPTFCLKEN_48MHZ_CLK_SHIFT 9 1208#define OMAP4430_OPTFCLKEN_48MHZ_CLK_SHIFT 9
1177#define OMAP4430_OPTFCLKEN_48MHZ_CLK_MASK BITFIELD(9, 9) 1209#define OMAP4430_OPTFCLKEN_48MHZ_CLK_MASK (1 << 9)
1178 1210
1179/* Used by CM_WKUP_BANDGAP_CLKCTRL */ 1211/* Used by CM_WKUP_BANDGAP_CLKCTRL */
1180#define OMAP4430_OPTFCLKEN_BGAP_32K_SHIFT 8 1212#define OMAP4430_OPTFCLKEN_BGAP_32K_SHIFT 8
1181#define OMAP4430_OPTFCLKEN_BGAP_32K_MASK BITFIELD(8, 8) 1213#define OMAP4430_OPTFCLKEN_BGAP_32K_MASK (1 << 8)
1182 1214
1183/* Used by CM_L3INIT_USBPHYOCP2SCP_CLKCTRL */ 1215/* Used by CM_ALWON_USBPHY_CLKCTRL */
1184#define OMAP4430_OPTFCLKEN_CLK32K_SHIFT 9 1216#define OMAP4430_OPTFCLKEN_CLK32K_SHIFT 8
1185#define OMAP4430_OPTFCLKEN_CLK32K_MASK BITFIELD(9, 9) 1217#define OMAP4430_OPTFCLKEN_CLK32K_MASK (1 << 8)
1186 1218
1187/* Used by CM_CAM_ISS_CLKCTRL */ 1219/* Used by CM_CAM_ISS_CLKCTRL */
1188#define OMAP4430_OPTFCLKEN_CTRLCLK_SHIFT 8 1220#define OMAP4430_OPTFCLKEN_CTRLCLK_SHIFT 8
1189#define OMAP4430_OPTFCLKEN_CTRLCLK_MASK BITFIELD(8, 8) 1221#define OMAP4430_OPTFCLKEN_CTRLCLK_MASK (1 << 8)
1190 1222
1191/* 1223/*
1192 * Used by CM_WKUP_GPIO1_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL, 1224 * Used by CM_L4PER_GPIO2_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL_RESTORE,
1193 * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL, 1225 * CM_L4PER_GPIO3_CLKCTRL, CM_L4PER_GPIO3_CLKCTRL_RESTORE,
1194 * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_GPIO2_CLKCTRL_RESTORE, 1226 * CM_L4PER_GPIO4_CLKCTRL, CM_L4PER_GPIO4_CLKCTRL_RESTORE,
1195 * CM_L4PER_GPIO3_CLKCTRL_RESTORE, CM_L4PER_GPIO4_CLKCTRL_RESTORE, 1227 * CM_L4PER_GPIO5_CLKCTRL, CM_L4PER_GPIO5_CLKCTRL_RESTORE,
1196 * CM_L4PER_GPIO5_CLKCTRL_RESTORE, CM_L4PER_GPIO6_CLKCTRL_RESTORE 1228 * CM_L4PER_GPIO6_CLKCTRL, CM_L4PER_GPIO6_CLKCTRL_RESTORE, CM_WKUP_GPIO1_CLKCTRL
1197 */ 1229 */
1198#define OMAP4430_OPTFCLKEN_DBCLK_SHIFT 8 1230#define OMAP4430_OPTFCLKEN_DBCLK_SHIFT 8
1199#define OMAP4430_OPTFCLKEN_DBCLK_MASK BITFIELD(8, 8) 1231#define OMAP4430_OPTFCLKEN_DBCLK_MASK (1 << 8)
1200 1232
1201/* Used by CM_MEMIF_DLL_CLKCTRL, CM_MEMIF_DLL_H_CLKCTRL */ 1233/* Used by CM_MEMIF_DLL_CLKCTRL, CM_MEMIF_DLL_H_CLKCTRL */
1202#define OMAP4430_OPTFCLKEN_DLL_CLK_SHIFT 8 1234#define OMAP4430_OPTFCLKEN_DLL_CLK_SHIFT 8
1203#define OMAP4430_OPTFCLKEN_DLL_CLK_MASK BITFIELD(8, 8) 1235#define OMAP4430_OPTFCLKEN_DLL_CLK_MASK (1 << 8)
1204 1236
1205/* Used by CM_DSS_DSS_CLKCTRL */ 1237/* Used by CM_DSS_DSS_CLKCTRL */
1206#define OMAP4430_OPTFCLKEN_DSSCLK_SHIFT 8 1238#define OMAP4430_OPTFCLKEN_DSSCLK_SHIFT 8
1207#define OMAP4430_OPTFCLKEN_DSSCLK_MASK BITFIELD(8, 8) 1239#define OMAP4430_OPTFCLKEN_DSSCLK_MASK (1 << 8)
1240
1241/* Used by CM_WKUP_USIM_CLKCTRL */
1242#define OMAP4430_OPTFCLKEN_FCLK_SHIFT 8
1243#define OMAP4430_OPTFCLKEN_FCLK_MASK (1 << 8)
1208 1244
1209/* Used by CM1_ABE_SLIMBUS_CLKCTRL */ 1245/* Used by CM1_ABE_SLIMBUS_CLKCTRL */
1210#define OMAP4430_OPTFCLKEN_FCLK0_SHIFT 8 1246#define OMAP4430_OPTFCLKEN_FCLK0_SHIFT 8
1211#define OMAP4430_OPTFCLKEN_FCLK0_MASK BITFIELD(8, 8) 1247#define OMAP4430_OPTFCLKEN_FCLK0_MASK (1 << 8)
1212 1248
1213/* Used by CM1_ABE_SLIMBUS_CLKCTRL */ 1249/* Used by CM1_ABE_SLIMBUS_CLKCTRL */
1214#define OMAP4430_OPTFCLKEN_FCLK1_SHIFT 9 1250#define OMAP4430_OPTFCLKEN_FCLK1_SHIFT 9
1215#define OMAP4430_OPTFCLKEN_FCLK1_MASK BITFIELD(9, 9) 1251#define OMAP4430_OPTFCLKEN_FCLK1_MASK (1 << 9)
1216 1252
1217/* Used by CM1_ABE_SLIMBUS_CLKCTRL */ 1253/* Used by CM1_ABE_SLIMBUS_CLKCTRL */
1218#define OMAP4430_OPTFCLKEN_FCLK2_SHIFT 10 1254#define OMAP4430_OPTFCLKEN_FCLK2_SHIFT 10
1219#define OMAP4430_OPTFCLKEN_FCLK2_MASK BITFIELD(10, 10) 1255#define OMAP4430_OPTFCLKEN_FCLK2_MASK (1 << 10)
1220 1256
1221/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1257/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1222#define OMAP4430_OPTFCLKEN_FUNC48MCLK_SHIFT 15 1258#define OMAP4430_OPTFCLKEN_FUNC48MCLK_SHIFT 15
1223#define OMAP4430_OPTFCLKEN_FUNC48MCLK_MASK BITFIELD(15, 15) 1259#define OMAP4430_OPTFCLKEN_FUNC48MCLK_MASK (1 << 15)
1224 1260
1225/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1261/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1226#define OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_SHIFT 13 1262#define OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_SHIFT 13
1227#define OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_MASK BITFIELD(13, 13) 1263#define OMAP4430_OPTFCLKEN_HSIC480M_P1_CLK_MASK (1 << 13)
1228 1264
1229/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1265/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1230#define OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_SHIFT 14 1266#define OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_SHIFT 14
1231#define OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_MASK BITFIELD(14, 14) 1267#define OMAP4430_OPTFCLKEN_HSIC480M_P2_CLK_MASK (1 << 14)
1232 1268
1233/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1269/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1234#define OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_SHIFT 11 1270#define OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_SHIFT 11
1235#define OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_MASK BITFIELD(11, 11) 1271#define OMAP4430_OPTFCLKEN_HSIC60M_P1_CLK_MASK (1 << 11)
1236 1272
1237/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1273/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1238#define OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_SHIFT 12 1274#define OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_SHIFT 12
1239#define OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_MASK BITFIELD(12, 12) 1275#define OMAP4430_OPTFCLKEN_HSIC60M_P2_CLK_MASK (1 << 12)
1240 1276
1241/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */ 1277/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */
1242#define OMAP4430_OPTFCLKEN_PER24MC_GFCLK_SHIFT 8 1278#define OMAP4430_OPTFCLKEN_PER24MC_GFCLK_SHIFT 8
1243#define OMAP4430_OPTFCLKEN_PER24MC_GFCLK_MASK BITFIELD(8, 8) 1279#define OMAP4430_OPTFCLKEN_PER24MC_GFCLK_MASK (1 << 8)
1244 1280
1245/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */ 1281/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */
1246#define OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_SHIFT 9 1282#define OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_SHIFT 9
1247#define OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_MASK BITFIELD(9, 9) 1283#define OMAP4430_OPTFCLKEN_PERABE24M_GFCLK_MASK (1 << 9)
1248 1284
1249/* Used by CM_L3INIT_USBPHYOCP2SCP_CLKCTRL */ 1285/* Used by CM_L3INIT_USBPHYOCP2SCP_CLKCTRL */
1250#define OMAP4430_OPTFCLKEN_PHY_48M_SHIFT 8 1286#define OMAP4430_OPTFCLKEN_PHY_48M_SHIFT 8
1251#define OMAP4430_OPTFCLKEN_PHY_48M_MASK BITFIELD(8, 8) 1287#define OMAP4430_OPTFCLKEN_PHY_48M_MASK (1 << 8)
1252 1288
1253/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */ 1289/* Used by CM_L4PER_SLIMBUS2_CLKCTRL */
1254#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_SHIFT 10 1290#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_SHIFT 10
1255#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_MASK BITFIELD(10, 10) 1291#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_MASK (1 << 10)
1256 1292
1257/* Renamed from OPTFCLKEN_SLIMBUS_CLK Used by CM1_ABE_SLIMBUS_CLKCTRL */ 1293/* Renamed from OPTFCLKEN_SLIMBUS_CLK Used by CM1_ABE_SLIMBUS_CLKCTRL */
1258#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_SHIFT 11 1294#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_SHIFT 11
1259#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_MASK BITFIELD(11, 11) 1295#define OMAP4430_OPTFCLKEN_SLIMBUS_CLK_11_11_MASK (1 << 11)
1260 1296
1261/* Used by CM_DSS_DSS_CLKCTRL */ 1297/* Used by CM_DSS_DSS_CLKCTRL */
1262#define OMAP4430_OPTFCLKEN_SYS_CLK_SHIFT 10 1298#define OMAP4430_OPTFCLKEN_SYS_CLK_SHIFT 10
1263#define OMAP4430_OPTFCLKEN_SYS_CLK_MASK BITFIELD(10, 10) 1299#define OMAP4430_OPTFCLKEN_SYS_CLK_MASK (1 << 10)
1264 1300
1265/* Used by CM_DSS_DSS_CLKCTRL */ 1301/* Used by CM_DSS_DSS_CLKCTRL */
1266#define OMAP4430_OPTFCLKEN_TV_CLK_SHIFT 11 1302#define OMAP4430_OPTFCLKEN_TV_CLK_SHIFT 11
1267#define OMAP4430_OPTFCLKEN_TV_CLK_MASK BITFIELD(11, 11) 1303#define OMAP4430_OPTFCLKEN_TV_CLK_MASK (1 << 11)
1268 1304
1269/* Used by CM_L3INIT_UNIPRO1_CLKCTRL */ 1305/* Used by CM_L3INIT_UNIPRO1_CLKCTRL */
1270#define OMAP4430_OPTFCLKEN_TXPHYCLK_SHIFT 8 1306#define OMAP4430_OPTFCLKEN_TXPHYCLK_SHIFT 8
1271#define OMAP4430_OPTFCLKEN_TXPHYCLK_MASK BITFIELD(8, 8) 1307#define OMAP4430_OPTFCLKEN_TXPHYCLK_MASK (1 << 8)
1272 1308
1273/* Used by CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE */ 1309/* Used by CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE */
1274#define OMAP4430_OPTFCLKEN_USB_CH0_CLK_SHIFT 8 1310#define OMAP4430_OPTFCLKEN_USB_CH0_CLK_SHIFT 8
1275#define OMAP4430_OPTFCLKEN_USB_CH0_CLK_MASK BITFIELD(8, 8) 1311#define OMAP4430_OPTFCLKEN_USB_CH0_CLK_MASK (1 << 8)
1276 1312
1277/* Used by CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE */ 1313/* Used by CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE */
1278#define OMAP4430_OPTFCLKEN_USB_CH1_CLK_SHIFT 9 1314#define OMAP4430_OPTFCLKEN_USB_CH1_CLK_SHIFT 9
1279#define OMAP4430_OPTFCLKEN_USB_CH1_CLK_MASK BITFIELD(9, 9) 1315#define OMAP4430_OPTFCLKEN_USB_CH1_CLK_MASK (1 << 9)
1280 1316
1281/* Used by CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE */ 1317/* Used by CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE */
1282#define OMAP4430_OPTFCLKEN_USB_CH2_CLK_SHIFT 10 1318#define OMAP4430_OPTFCLKEN_USB_CH2_CLK_SHIFT 10
1283#define OMAP4430_OPTFCLKEN_USB_CH2_CLK_MASK BITFIELD(10, 10) 1319#define OMAP4430_OPTFCLKEN_USB_CH2_CLK_MASK (1 << 10)
1284 1320
1285/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1321/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1286#define OMAP4430_OPTFCLKEN_UTMI_P1_CLK_SHIFT 8 1322#define OMAP4430_OPTFCLKEN_UTMI_P1_CLK_SHIFT 8
1287#define OMAP4430_OPTFCLKEN_UTMI_P1_CLK_MASK BITFIELD(8, 8) 1323#define OMAP4430_OPTFCLKEN_UTMI_P1_CLK_MASK (1 << 8)
1288 1324
1289/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1325/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1290#define OMAP4430_OPTFCLKEN_UTMI_P2_CLK_SHIFT 9 1326#define OMAP4430_OPTFCLKEN_UTMI_P2_CLK_SHIFT 9
1291#define OMAP4430_OPTFCLKEN_UTMI_P2_CLK_MASK BITFIELD(9, 9) 1327#define OMAP4430_OPTFCLKEN_UTMI_P2_CLK_MASK (1 << 9)
1292 1328
1293/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */ 1329/* Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE */
1294#define OMAP4430_OPTFCLKEN_UTMI_P3_CLK_SHIFT 10 1330#define OMAP4430_OPTFCLKEN_UTMI_P3_CLK_SHIFT 10
1295#define OMAP4430_OPTFCLKEN_UTMI_P3_CLK_MASK BITFIELD(10, 10) 1331#define OMAP4430_OPTFCLKEN_UTMI_P3_CLK_MASK (1 << 10)
1296 1332
1297/* Used by CM_L3INIT_USB_OTG_CLKCTRL */ 1333/* Used by CM_L3INIT_USB_OTG_CLKCTRL */
1298#define OMAP4430_OPTFCLKEN_XCLK_SHIFT 8 1334#define OMAP4430_OPTFCLKEN_XCLK_SHIFT 8
1299#define OMAP4430_OPTFCLKEN_XCLK_MASK BITFIELD(8, 8) 1335#define OMAP4430_OPTFCLKEN_XCLK_MASK (1 << 8)
1300 1336
1301/* Used by CM_EMU_OVERRIDE_DPLL_PER, CM_EMU_OVERRIDE_DPLL_CORE */ 1337/* Used by CM_EMU_OVERRIDE_DPLL_CORE */
1302#define OMAP4430_OVERRIDE_ENABLE_SHIFT 19 1338#define OMAP4430_OVERRIDE_ENABLE_SHIFT 19
1303#define OMAP4430_OVERRIDE_ENABLE_MASK BITFIELD(19, 19) 1339#define OMAP4430_OVERRIDE_ENABLE_MASK (1 << 19)
1304 1340
1305/* Used by CM_CLKSEL_ABE */ 1341/* Used by CM_CLKSEL_ABE */
1306#define OMAP4430_PAD_CLKS_GATE_SHIFT 8 1342#define OMAP4430_PAD_CLKS_GATE_SHIFT 8
1307#define OMAP4430_PAD_CLKS_GATE_MASK BITFIELD(8, 8) 1343#define OMAP4430_PAD_CLKS_GATE_MASK (1 << 8)
1308 1344
1309/* Used by CM_CORE_DVFS_CURRENT, CM_IVA_DVFS_CURRENT */ 1345/* Used by CM_CORE_DVFS_CURRENT, CM_IVA_DVFS_CURRENT */
1310#define OMAP4430_PERF_CURRENT_SHIFT 0 1346#define OMAP4430_PERF_CURRENT_SHIFT 0
1311#define OMAP4430_PERF_CURRENT_MASK BITFIELD(0, 7) 1347#define OMAP4430_PERF_CURRENT_MASK (0xff << 0)
1312 1348
1313/* 1349/*
1314 * Used by CM_CORE_DVFS_PERF1, CM_CORE_DVFS_PERF2, CM_CORE_DVFS_PERF3, 1350 * Used by CM_CORE_DVFS_PERF1, CM_CORE_DVFS_PERF2, CM_CORE_DVFS_PERF3,
@@ -1316,159 +1352,173 @@
1316 * CM_IVA_DVFS_PERF_TESLA 1352 * CM_IVA_DVFS_PERF_TESLA
1317 */ 1353 */
1318#define OMAP4430_PERF_REQ_SHIFT 0 1354#define OMAP4430_PERF_REQ_SHIFT 0
1319#define OMAP4430_PERF_REQ_MASK BITFIELD(0, 7) 1355#define OMAP4430_PERF_REQ_MASK (0xff << 0)
1320
1321/* Used by CM_EMU_OVERRIDE_DPLL_PER */
1322#define OMAP4430_PER_DPLL_EMU_DIV_SHIFT 0
1323#define OMAP4430_PER_DPLL_EMU_DIV_MASK BITFIELD(0, 6)
1324
1325/* Used by CM_EMU_OVERRIDE_DPLL_PER */
1326#define OMAP4430_PER_DPLL_EMU_MULT_SHIFT 8
1327#define OMAP4430_PER_DPLL_EMU_MULT_MASK BITFIELD(8, 18)
1328 1356
1329/* Used by CM_RESTORE_ST */ 1357/* Used by CM_RESTORE_ST */
1330#define OMAP4430_PHASE1_COMPLETED_SHIFT 0 1358#define OMAP4430_PHASE1_COMPLETED_SHIFT 0
1331#define OMAP4430_PHASE1_COMPLETED_MASK BITFIELD(0, 0) 1359#define OMAP4430_PHASE1_COMPLETED_MASK (1 << 0)
1332 1360
1333/* Used by CM_RESTORE_ST */ 1361/* Used by CM_RESTORE_ST */
1334#define OMAP4430_PHASE2A_COMPLETED_SHIFT 1 1362#define OMAP4430_PHASE2A_COMPLETED_SHIFT 1
1335#define OMAP4430_PHASE2A_COMPLETED_MASK BITFIELD(1, 1) 1363#define OMAP4430_PHASE2A_COMPLETED_MASK (1 << 1)
1336 1364
1337/* Used by CM_RESTORE_ST */ 1365/* Used by CM_RESTORE_ST */
1338#define OMAP4430_PHASE2B_COMPLETED_SHIFT 2 1366#define OMAP4430_PHASE2B_COMPLETED_SHIFT 2
1339#define OMAP4430_PHASE2B_COMPLETED_MASK BITFIELD(2, 2) 1367#define OMAP4430_PHASE2B_COMPLETED_MASK (1 << 2)
1340 1368
1341/* Used by CM_EMU_DEBUGSS_CLKCTRL */ 1369/* Used by CM_EMU_DEBUGSS_CLKCTRL */
1342#define OMAP4430_PMD_STM_MUX_CTRL_SHIFT 20 1370#define OMAP4430_PMD_STM_MUX_CTRL_SHIFT 20
1343#define OMAP4430_PMD_STM_MUX_CTRL_MASK BITFIELD(20, 21) 1371#define OMAP4430_PMD_STM_MUX_CTRL_MASK (0x3 << 20)
1344 1372
1345/* Used by CM_EMU_DEBUGSS_CLKCTRL */ 1373/* Used by CM_EMU_DEBUGSS_CLKCTRL */
1346#define OMAP4430_PMD_TRACE_MUX_CTRL_SHIFT 22 1374#define OMAP4430_PMD_TRACE_MUX_CTRL_SHIFT 22
1347#define OMAP4430_PMD_TRACE_MUX_CTRL_MASK BITFIELD(22, 23) 1375#define OMAP4430_PMD_TRACE_MUX_CTRL_MASK (0x3 << 22)
1348 1376
1349/* Used by CM_DYN_DEP_PRESCAL */ 1377/* Used by CM_DYN_DEP_PRESCAL, CM_DYN_DEP_PRESCAL_RESTORE */
1350#define OMAP4430_PRESCAL_SHIFT 0 1378#define OMAP4430_PRESCAL_SHIFT 0
1351#define OMAP4430_PRESCAL_MASK BITFIELD(0, 5) 1379#define OMAP4430_PRESCAL_MASK (0x3f << 0)
1352 1380
1353/* Used by REVISION_CM2, REVISION_CM1 */ 1381/* Used by REVISION_CM1, REVISION_CM2 */
1354#define OMAP4430_REV_SHIFT 0 1382#define OMAP4430_R_RTL_SHIFT 11
1355#define OMAP4430_REV_MASK BITFIELD(0, 7) 1383#define OMAP4430_R_RTL_MASK (0x1f << 11)
1356 1384
1357/* 1385/*
1358 * Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL, 1386 * Used by CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE,
1359 * CM_L3INIT_USB_HOST_CLKCTRL_RESTORE, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE 1387 * CM_L3INIT_USB_TLL_CLKCTRL, CM_L3INIT_USB_TLL_CLKCTRL_RESTORE
1360 */ 1388 */
1361#define OMAP4430_SAR_MODE_SHIFT 4 1389#define OMAP4430_SAR_MODE_SHIFT 4
1362#define OMAP4430_SAR_MODE_MASK BITFIELD(4, 4) 1390#define OMAP4430_SAR_MODE_MASK (1 << 4)
1363 1391
1364/* Used by CM_SCALE_FCLK */ 1392/* Used by CM_SCALE_FCLK */
1365#define OMAP4430_SCALE_FCLK_SHIFT 0 1393#define OMAP4430_SCALE_FCLK_SHIFT 0
1366#define OMAP4430_SCALE_FCLK_MASK BITFIELD(0, 0) 1394#define OMAP4430_SCALE_FCLK_MASK (1 << 0)
1395
1396/* Used by REVISION_CM1, REVISION_CM2 */
1397#define OMAP4430_SCHEME_SHIFT 30
1398#define OMAP4430_SCHEME_MASK (0x3 << 30)
1367 1399
1368/* Used by CM_L4CFG_DYNAMICDEP */ 1400/* Used by CM_L4CFG_DYNAMICDEP, CM_L4CFG_DYNAMICDEP_RESTORE */
1369#define OMAP4430_SDMA_DYNDEP_SHIFT 11 1401#define OMAP4430_SDMA_DYNDEP_SHIFT 11
1370#define OMAP4430_SDMA_DYNDEP_MASK BITFIELD(11, 11) 1402#define OMAP4430_SDMA_DYNDEP_MASK (1 << 11)
1371 1403
1372/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */ 1404/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */
1373#define OMAP4430_SDMA_STATDEP_SHIFT 11 1405#define OMAP4430_SDMA_STATDEP_SHIFT 11
1374#define OMAP4430_SDMA_STATDEP_MASK BITFIELD(11, 11) 1406#define OMAP4430_SDMA_STATDEP_MASK (1 << 11)
1375 1407
1376/* Used by CM_CLKSEL_ABE */ 1408/* Used by CM_CLKSEL_ABE */
1377#define OMAP4430_SLIMBUS_CLK_GATE_SHIFT 10 1409#define OMAP4430_SLIMBUS_CLK_GATE_SHIFT 10
1378#define OMAP4430_SLIMBUS_CLK_GATE_MASK BITFIELD(10, 10) 1410#define OMAP4430_SLIMBUS_CLK_GATE_MASK (1 << 10)
1379 1411
1380/* 1412/*
1381 * Used by CM_EMU_DEBUGSS_CLKCTRL, CM_D2D_SAD2D_CLKCTRL, 1413 * Used by CM1_ABE_AESS_CLKCTRL, CM_CAM_FDIF_CLKCTRL, CM_CAM_ISS_CLKCTRL,
1382 * CM_DUCATI_DUCATI_CLKCTRL, CM_SDMA_SDMA_CLKCTRL, CM_GFX_GFX_CLKCTRL, 1414 * CM_D2D_SAD2D_CLKCTRL, CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL,
1383 * CM_L4SEC_CRYPTODMA_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL, 1415 * CM_DUCATI_DUCATI_CLKCTRL, CM_EMU_DEBUGSS_CLKCTRL, CM_GFX_GFX_CLKCTRL,
1416 * CM_IVAHD_IVAHD_CLKCTRL, CM_L3INIT_CCPTX_CLKCTRL, CM_L3INIT_EMAC_CLKCTRL,
1384 * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL, 1417 * CM_L3INIT_HSI_CLKCTRL, CM_L3INIT_MMC1_CLKCTRL, CM_L3INIT_MMC2_CLKCTRL,
1385 * CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL, 1418 * CM_L3INIT_MMC6_CLKCTRL, CM_L3INIT_P1500_CLKCTRL, CM_L3INIT_PCIESS_CLKCTRL,
1386 * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL, 1419 * CM_L3INIT_SATA_CLKCTRL, CM_L3INIT_TPPSS_CLKCTRL, CM_L3INIT_UNIPRO1_CLKCTRL,
1387 * CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_FS_CLKCTRL, 1420 * CM_L3INIT_USB_HOST_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE,
1388 * CM_L3INIT_USB_OTG_CLKCTRL, CM_L3INIT_XHPI_CLKCTRL, CM_CAM_FDIF_CLKCTRL, 1421 * CM_L3INIT_USB_HOST_FS_CLKCTRL, CM_L3INIT_USB_OTG_CLKCTRL,
1389 * CM_CAM_ISS_CLKCTRL, CM_L3INIT_USB_HOST_CLKCTRL_RESTORE, 1422 * CM_L3INIT_XHPI_CLKCTRL, CM_L4SEC_CRYPTODMA_CLKCTRL, CM_MPU_MPU_CLKCTRL,
1390 * CM_IVAHD_IVAHD_CLKCTRL, CM_DSS_DEISS_CLKCTRL, CM_DSS_DSS_CLKCTRL, 1423 * CM_SDMA_SDMA_CLKCTRL, CM_TESLA_TESLA_CLKCTRL
1391 * CM_MPU_MPU_CLKCTRL, CM_TESLA_TESLA_CLKCTRL, CM1_ABE_AESS_CLKCTRL
1392 */ 1424 */
1393#define OMAP4430_STBYST_SHIFT 18 1425#define OMAP4430_STBYST_SHIFT 18
1394#define OMAP4430_STBYST_MASK BITFIELD(18, 18) 1426#define OMAP4430_STBYST_MASK (1 << 18)
1395 1427
1396/* 1428/*
1397 * Used by CM_IDLEST_DPLL_PER, CM_IDLEST_DPLL_UNIPRO, CM_IDLEST_DPLL_USB, 1429 * Used by CM_IDLEST_DPLL_ABE, CM_IDLEST_DPLL_CORE, CM_IDLEST_DPLL_DDRPHY,
1398 * CM_IDLEST_DPLL_ABE, CM_IDLEST_DPLL_CORE, CM_IDLEST_DPLL_DDRPHY, 1430 * CM_IDLEST_DPLL_IVA, CM_IDLEST_DPLL_MPU, CM_IDLEST_DPLL_PER,
1399 * CM_IDLEST_DPLL_IVA, CM_IDLEST_DPLL_MPU 1431 * CM_IDLEST_DPLL_UNIPRO, CM_IDLEST_DPLL_USB
1400 */ 1432 */
1401#define OMAP4430_ST_DPLL_CLK_SHIFT 0 1433#define OMAP4430_ST_DPLL_CLK_SHIFT 0
1402#define OMAP4430_ST_DPLL_CLK_MASK BITFIELD(0, 0) 1434#define OMAP4430_ST_DPLL_CLK_MASK (1 << 0)
1403 1435
1404/* Used by CM_CLKDCOLDO_DPLL_USB */ 1436/* Used by CM_CLKDCOLDO_DPLL_USB */
1405#define OMAP4430_ST_DPLL_CLKDCOLDO_SHIFT 9 1437#define OMAP4430_ST_DPLL_CLKDCOLDO_SHIFT 9
1406#define OMAP4430_ST_DPLL_CLKDCOLDO_MASK BITFIELD(9, 9) 1438#define OMAP4430_ST_DPLL_CLKDCOLDO_MASK (1 << 9)
1407 1439
1408/* 1440/*
1409 * Used by CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_USB, CM_DIV_M2_DPLL_CORE_RESTORE, 1441 * Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE,
1410 * CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_CORE, CM_DIV_M2_DPLL_DDRPHY, 1442 * CM_DIV_M2_DPLL_CORE_RESTORE, CM_DIV_M2_DPLL_DDRPHY, CM_DIV_M2_DPLL_MPU,
1411 * CM_DIV_M2_DPLL_MPU 1443 * CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_USB
1412 */ 1444 */
1413#define OMAP4430_ST_DPLL_CLKOUT_SHIFT 9 1445#define OMAP4430_ST_DPLL_CLKOUT_SHIFT 9
1414#define OMAP4430_ST_DPLL_CLKOUT_MASK BITFIELD(9, 9) 1446#define OMAP4430_ST_DPLL_CLKOUT_MASK (1 << 9)
1415 1447
1416/* 1448/*
1417 * Used by CM_DIV_M3_DPLL_PER, CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_ABE, 1449 * Used by CM_DIV_M3_DPLL_ABE, CM_DIV_M3_DPLL_CORE,
1418 * CM_DIV_M3_DPLL_CORE 1450 * CM_DIV_M3_DPLL_CORE_RESTORE, CM_DIV_M3_DPLL_PER
1419 */ 1451 */
1420#define OMAP4430_ST_DPLL_CLKOUTHIF_SHIFT 9 1452#define OMAP4430_ST_DPLL_CLKOUTHIF_SHIFT 9
1421#define OMAP4430_ST_DPLL_CLKOUTHIF_MASK BITFIELD(9, 9) 1453#define OMAP4430_ST_DPLL_CLKOUTHIF_MASK (1 << 9)
1422 1454
1423/* Used by CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO, CM_DIV_M2_DPLL_ABE */ 1455/* Used by CM_DIV_M2_DPLL_ABE, CM_DIV_M2_DPLL_PER, CM_DIV_M2_DPLL_UNIPRO */
1424#define OMAP4430_ST_DPLL_CLKOUTX2_SHIFT 11 1456#define OMAP4430_ST_DPLL_CLKOUTX2_SHIFT 11
1425#define OMAP4430_ST_DPLL_CLKOUTX2_MASK BITFIELD(11, 11) 1457#define OMAP4430_ST_DPLL_CLKOUTX2_MASK (1 << 11)
1426 1458
1427/* 1459/*
1428 * Used by CM_DIV_M4_DPLL_PER, CM_DIV_M4_DPLL_CORE_RESTORE, 1460 * Used by CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_CORE_RESTORE,
1429 * CM_DIV_M4_DPLL_CORE, CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA 1461 * CM_DIV_M4_DPLL_DDRPHY, CM_DIV_M4_DPLL_IVA, CM_DIV_M4_DPLL_PER
1430 */ 1462 */
1431#define OMAP4430_ST_HSDIVIDER_CLKOUT1_SHIFT 9 1463#define OMAP4430_ST_HSDIVIDER_CLKOUT1_SHIFT 9
1432#define OMAP4430_ST_HSDIVIDER_CLKOUT1_MASK BITFIELD(9, 9) 1464#define OMAP4430_ST_HSDIVIDER_CLKOUT1_MASK (1 << 9)
1433 1465
1434/* 1466/*
1435 * Used by CM_DIV_M5_DPLL_PER, CM_DIV_M5_DPLL_CORE_RESTORE, 1467 * Used by CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_CORE_RESTORE,
1436 * CM_DIV_M5_DPLL_CORE, CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA 1468 * CM_DIV_M5_DPLL_DDRPHY, CM_DIV_M5_DPLL_IVA, CM_DIV_M5_DPLL_PER
1437 */ 1469 */
1438#define OMAP4430_ST_HSDIVIDER_CLKOUT2_SHIFT 9 1470#define OMAP4430_ST_HSDIVIDER_CLKOUT2_SHIFT 9
1439#define OMAP4430_ST_HSDIVIDER_CLKOUT2_MASK BITFIELD(9, 9) 1471#define OMAP4430_ST_HSDIVIDER_CLKOUT2_MASK (1 << 9)
1440 1472
1441/* 1473/*
1442 * Used by CM_DIV_M6_DPLL_PER, CM_DIV_M6_DPLL_CORE_RESTORE, 1474 * Used by CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_CORE_RESTORE,
1443 * CM_DIV_M6_DPLL_CORE, CM_DIV_M6_DPLL_DDRPHY 1475 * CM_DIV_M6_DPLL_DDRPHY, CM_DIV_M6_DPLL_PER
1444 */ 1476 */
1445#define OMAP4430_ST_HSDIVIDER_CLKOUT3_SHIFT 9 1477#define OMAP4430_ST_HSDIVIDER_CLKOUT3_SHIFT 9
1446#define OMAP4430_ST_HSDIVIDER_CLKOUT3_MASK BITFIELD(9, 9) 1478#define OMAP4430_ST_HSDIVIDER_CLKOUT3_MASK (1 << 9)
1447 1479
1448/* 1480/*
1449 * Used by CM_DIV_M7_DPLL_PER, CM_DIV_M7_DPLL_CORE_RESTORE, 1481 * Used by CM_DIV_M7_DPLL_CORE, CM_DIV_M7_DPLL_CORE_RESTORE,
1450 * CM_DIV_M7_DPLL_CORE 1482 * CM_DIV_M7_DPLL_PER
1451 */ 1483 */
1452#define OMAP4430_ST_HSDIVIDER_CLKOUT4_SHIFT 9 1484#define OMAP4430_ST_HSDIVIDER_CLKOUT4_SHIFT 9
1453#define OMAP4430_ST_HSDIVIDER_CLKOUT4_MASK BITFIELD(9, 9) 1485#define OMAP4430_ST_HSDIVIDER_CLKOUT4_MASK (1 << 9)
1486
1487/*
1488 * Used by CM_IDLEST_DPLL_ABE, CM_IDLEST_DPLL_CORE, CM_IDLEST_DPLL_DDRPHY,
1489 * CM_IDLEST_DPLL_IVA, CM_IDLEST_DPLL_MPU, CM_IDLEST_DPLL_PER,
1490 * CM_IDLEST_DPLL_UNIPRO, CM_IDLEST_DPLL_USB
1491 */
1492#define OMAP4430_ST_MN_BYPASS_SHIFT 8
1493#define OMAP4430_ST_MN_BYPASS_MASK (1 << 8)
1454 1494
1455/* Used by CM_SYS_CLKSEL */ 1495/* Used by CM_SYS_CLKSEL */
1456#define OMAP4430_SYS_CLKSEL_SHIFT 0 1496#define OMAP4430_SYS_CLKSEL_SHIFT 0
1457#define OMAP4430_SYS_CLKSEL_MASK BITFIELD(0, 2) 1497#define OMAP4430_SYS_CLKSEL_MASK (0x7 << 0)
1458 1498
1459/* Used by CM_L4CFG_DYNAMICDEP */ 1499/* Used by CM_L4CFG_DYNAMICDEP, CM_L4CFG_DYNAMICDEP_RESTORE */
1460#define OMAP4430_TESLA_DYNDEP_SHIFT 1 1500#define OMAP4430_TESLA_DYNDEP_SHIFT 1
1461#define OMAP4430_TESLA_DYNDEP_MASK BITFIELD(1, 1) 1501#define OMAP4430_TESLA_DYNDEP_MASK (1 << 1)
1462 1502
1463/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */ 1503/* Used by CM_DUCATI_STATICDEP, CM_MPU_STATICDEP */
1464#define OMAP4430_TESLA_STATDEP_SHIFT 1 1504#define OMAP4430_TESLA_STATDEP_SHIFT 1
1465#define OMAP4430_TESLA_STATDEP_MASK BITFIELD(1, 1) 1505#define OMAP4430_TESLA_STATDEP_MASK (1 << 1)
1466 1506
1467/* 1507/*
1468 * Used by CM_EMU_DYNAMICDEP, CM_D2D_DYNAMICDEP, CM_DUCATI_DYNAMICDEP, 1508 * Used by CM_D2D_DYNAMICDEP, CM_D2D_DYNAMICDEP_RESTORE, CM_DUCATI_DYNAMICDEP,
1469 * CM_L3_1_DYNAMICDEP, CM_L3_2_DYNAMICDEP, CM_L4CFG_DYNAMICDEP, 1509 * CM_EMU_DYNAMICDEP, CM_L3_1_DYNAMICDEP, CM_L3_1_DYNAMICDEP_RESTORE,
1470 * CM_L4PER_DYNAMICDEP, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP 1510 * CM_L3_2_DYNAMICDEP, CM_L3_2_DYNAMICDEP_RESTORE, CM_L4CFG_DYNAMICDEP,
1511 * CM_L4CFG_DYNAMICDEP_RESTORE, CM_L4PER_DYNAMICDEP,
1512 * CM_L4PER_DYNAMICDEP_RESTORE, CM_MPU_DYNAMICDEP, CM_TESLA_DYNAMICDEP
1471 */ 1513 */
1472#define OMAP4430_WINDOWSIZE_SHIFT 24 1514#define OMAP4430_WINDOWSIZE_SHIFT 24
1473#define OMAP4430_WINDOWSIZE_MASK BITFIELD(24, 27) 1515#define OMAP4430_WINDOWSIZE_MASK (0xf << 24)
1516
1517/* Used by REVISION_CM1, REVISION_CM2 */
1518#define OMAP4430_X_MAJOR_SHIFT 8
1519#define OMAP4430_X_MAJOR_MASK (0x7 << 8)
1520
1521/* Used by REVISION_CM1, REVISION_CM2 */
1522#define OMAP4430_Y_MINOR_SHIFT 0
1523#define OMAP4430_Y_MINOR_MASK (0x3f << 0)
1474#endif 1524#endif
diff --git a/arch/arm/mach-omap2/cm.c b/arch/arm/mach-omap2/cm.c
deleted file mode 100644
index 721c3b66740a..000000000000
--- a/arch/arm/mach-omap2/cm.c
+++ /dev/null
@@ -1,68 +0,0 @@
1/*
2 * OMAP2/3 CM module functions
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/module.h>
14#include <linux/types.h>
15#include <linux/delay.h>
16#include <linux/spinlock.h>
17#include <linux/list.h>
18#include <linux/errno.h>
19#include <linux/err.h>
20#include <linux/io.h>
21
22#include <asm/atomic.h>
23
24#include <plat/common.h>
25
26#include "cm.h"
27#include "cm-regbits-24xx.h"
28#include "cm-regbits-34xx.h"
29
30static const u8 cm_idlest_offs[] = {
31 CM_IDLEST1, CM_IDLEST2, OMAP2430_CM_IDLEST3
32};
33
34/**
35 * omap2_cm_wait_idlest_ready - wait for a module to leave idle or standby
36 * @prcm_mod: PRCM module offset
37 * @idlest_id: CM_IDLESTx register ID (i.e., x = 1, 2, 3)
38 * @idlest_shift: shift of the bit in the CM_IDLEST* register to check
39 *
40 * XXX document
41 */
42int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id, u8 idlest_shift)
43{
44 int ena = 0, i = 0;
45 u8 cm_idlest_reg;
46 u32 mask;
47
48 if (!idlest_id || (idlest_id > ARRAY_SIZE(cm_idlest_offs)))
49 return -EINVAL;
50
51 cm_idlest_reg = cm_idlest_offs[idlest_id - 1];
52
53 mask = 1 << idlest_shift;
54
55 if (cpu_is_omap24xx())
56 ena = mask;
57 else if (cpu_is_omap34xx())
58 ena = 0;
59 else
60 BUG();
61
62 /* XXX should be OMAP2 CM */
63 omap_test_timeout(((cm_read_mod_reg(prcm_mod, cm_idlest_reg) & mask) == ena),
64 MAX_MODULE_READY_TIME, i);
65
66 return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
67}
68
diff --git a/arch/arm/mach-omap2/cm.h b/arch/arm/mach-omap2/cm.h
index a02ca30423dc..a7bc096bd407 100644
--- a/arch/arm/mach-omap2/cm.h
+++ b/arch/arm/mach-omap2/cm.h
@@ -1,8 +1,5 @@
1#ifndef __ARCH_ASM_MACH_OMAP2_CM_H
2#define __ARCH_ASM_MACH_OMAP2_CM_H
3
4/* 1/*
5 * OMAP2/3 Clock Management (CM) register definitions 2 * OMAP2+ Clock Management prototypes
6 * 3 *
7 * Copyright (C) 2007-2009 Texas Instruments, Inc. 4 * Copyright (C) 2007-2009 Texas Instruments, Inc.
8 * Copyright (C) 2007-2009 Nokia Corporation 5 * Copyright (C) 2007-2009 Nokia Corporation
@@ -13,136 +10,8 @@
13 * it under the terms of the GNU General Public License version 2 as 10 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation. 11 * published by the Free Software Foundation.
15 */ 12 */
16 13#ifndef __ARCH_ASM_MACH_OMAP2_CM_H
17#include "prcm-common.h" 14#define __ARCH_ASM_MACH_OMAP2_CM_H
18
19#define OMAP2420_CM_REGADDR(module, reg) \
20 OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE + (module) + (reg))
21#define OMAP2430_CM_REGADDR(module, reg) \
22 OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE + (module) + (reg))
23#define OMAP34XX_CM_REGADDR(module, reg) \
24 OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE + (module) + (reg))
25#define OMAP44XX_CM1_REGADDR(module, reg) \
26 OMAP2_L4_IO_ADDRESS(OMAP4430_CM1_BASE + (module) + (reg))
27#define OMAP44XX_CM2_REGADDR(module, reg) \
28 OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE + (module) + (reg))
29
30#include "cm44xx.h"
31
32/*
33 * Architecture-specific global CM registers
34 * Use cm_{read,write}_reg() with these registers.
35 * These registers appear once per CM module.
36 */
37
38#define OMAP3430_CM_REVISION OMAP34XX_CM_REGADDR(OCP_MOD, 0x0000)
39#define OMAP3430_CM_SYSCONFIG OMAP34XX_CM_REGADDR(OCP_MOD, 0x0010)
40#define OMAP3430_CM_POLCTRL OMAP34XX_CM_REGADDR(OCP_MOD, 0x009c)
41
42#define OMAP3_CM_CLKOUT_CTRL_OFFSET 0x0070
43#define OMAP3430_CM_CLKOUT_CTRL OMAP_CM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
44
45/*
46 * Module specific CM registers from CM_BASE + domain offset
47 * Use cm_{read,write}_mod_reg() with these registers.
48 * These register offsets generally appear in more than one PRCM submodule.
49 */
50
51/* Common between 24xx and 34xx */
52
53#define CM_FCLKEN 0x0000
54#define CM_FCLKEN1 CM_FCLKEN
55#define CM_CLKEN CM_FCLKEN
56#define CM_ICLKEN 0x0010
57#define CM_ICLKEN1 CM_ICLKEN
58#define CM_ICLKEN2 0x0014
59#define CM_ICLKEN3 0x0018
60#define CM_IDLEST 0x0020
61#define CM_IDLEST1 CM_IDLEST
62#define CM_IDLEST2 0x0024
63#define CM_AUTOIDLE 0x0030
64#define CM_AUTOIDLE1 CM_AUTOIDLE
65#define CM_AUTOIDLE2 0x0034
66#define CM_AUTOIDLE3 0x0038
67#define CM_CLKSEL 0x0040
68#define CM_CLKSEL1 CM_CLKSEL
69#define CM_CLKSEL2 0x0044
70#define OMAP2_CM_CLKSTCTRL 0x0048
71#define OMAP4_CM_CLKSTCTRL 0x0000
72
73
74/* Architecture-specific registers */
75
76#define OMAP24XX_CM_FCLKEN2 0x0004
77#define OMAP24XX_CM_ICLKEN4 0x001c
78#define OMAP24XX_CM_AUTOIDLE4 0x003c
79
80#define OMAP2430_CM_IDLEST3 0x0028
81
82#define OMAP3430_CM_CLKEN_PLL 0x0004
83#define OMAP3430ES2_CM_CLKEN2 0x0004
84#define OMAP3430ES2_CM_FCLKEN3 0x0008
85#define OMAP3430_CM_IDLEST_PLL CM_IDLEST2
86#define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2
87#define OMAP3430ES2_CM_AUTOIDLE2_PLL CM_AUTOIDLE2
88#define OMAP3430_CM_CLKSEL1 CM_CLKSEL
89#define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL
90#define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2
91#define OMAP3430_CM_SLEEPDEP CM_CLKSEL2
92#define OMAP3430_CM_CLKSEL3 OMAP2_CM_CLKSTCTRL
93#define OMAP3430_CM_CLKSTST 0x004c
94#define OMAP3430ES2_CM_CLKSEL4 0x004c
95#define OMAP3430ES2_CM_CLKSEL5 0x0050
96#define OMAP3430_CM_CLKSEL2_EMU 0x0050
97#define OMAP3430_CM_CLKSEL3_EMU 0x0054
98
99/* CM2.CEFUSE_CM2 register offsets */
100
101/* OMAP4 modulemode control */
102#define OMAP4430_MODULEMODE_HWCTRL 0
103#define OMAP4430_MODULEMODE_SWCTRL 1
104
105/* Clock management domain register get/set */
106
107#ifndef __ASSEMBLER__
108
109extern u32 cm_read_mod_reg(s16 module, u16 idx);
110extern void cm_write_mod_reg(u32 val, s16 module, u16 idx);
111extern u32 cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx);
112
113extern int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id,
114 u8 idlest_shift);
115extern int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg);
116
117static inline u32 cm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
118{
119 return cm_rmw_mod_reg_bits(bits, bits, module, idx);
120}
121
122static inline u32 cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
123{
124 return cm_rmw_mod_reg_bits(bits, 0x0, module, idx);
125}
126
127#endif
128
129/* CM register bits shared between 24XX and 3430 */
130
131/* CM_CLKSEL_GFX */
132#define OMAP_CLKSEL_GFX_SHIFT 0
133#define OMAP_CLKSEL_GFX_MASK (0x7 << 0)
134
135/* CM_ICLKEN_GFX */
136#define OMAP_EN_GFX_SHIFT 0
137#define OMAP_EN_GFX_MASK (1 << 0)
138
139/* CM_IDLEST_GFX */
140#define OMAP_ST_GFX_MASK (1 << 0)
141
142
143/* CM_IDLEST indicator */
144#define OMAP24XX_CM_IDLEST_VAL 0
145#define OMAP34XX_CM_IDLEST_VAL 1
146 15
147/* 16/*
148 * MAX_MODULE_READY_TIME: max duration in microseconds to wait for the 17 * MAX_MODULE_READY_TIME: max duration in microseconds to wait for the
diff --git a/arch/arm/mach-omap2/cm1_44xx.h b/arch/arm/mach-omap2/cm1_44xx.h
new file mode 100644
index 000000000000..e2d7a56b2ad6
--- /dev/null
+++ b/arch/arm/mach-omap2/cm1_44xx.h
@@ -0,0 +1,261 @@
1/*
2 * OMAP44xx CM1 instance offset macros
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2009-2010 Nokia Corporation
6 *
7 * Paul Walmsley (paul@pwsan.com)
8 * Rajendra Nayak (rnayak@ti.com)
9 * Benoit Cousson (b-cousson@ti.com)
10 *
11 * This file is automatically generated from the OMAP hardware databases.
12 * We respectfully ask that any modifications to this file be coordinated
13 * with the public linux-omap@vger.kernel.org mailing list and the
14 * authors above to ensure that the autogeneration scripts are kept
15 * up-to-date with the file contents.
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation.
20 *
21 * XXX This file needs to be updated to align on one of "OMAP4", "OMAP44XX",
22 * or "OMAP4430".
23 */
24
25#ifndef __ARCH_ARM_MACH_OMAP2_CM1_44XX_H
26#define __ARCH_ARM_MACH_OMAP2_CM1_44XX_H
27
28/* CM1 base address */
29#define OMAP4430_CM1_BASE 0x4a004000
30
31#define OMAP44XX_CM1_REGADDR(inst, reg) \
32 OMAP2_L4_IO_ADDRESS(OMAP4430_CM1_BASE + (inst) + (reg))
33
34/* CM1 instances */
35#define OMAP4430_CM1_OCP_SOCKET_INST 0x0000
36#define OMAP4430_CM1_CKGEN_INST 0x0100
37#define OMAP4430_CM1_MPU_INST 0x0300
38#define OMAP4430_CM1_TESLA_INST 0x0400
39#define OMAP4430_CM1_ABE_INST 0x0500
40#define OMAP4430_CM1_RESTORE_INST 0x0e00
41#define OMAP4430_CM1_INSTR_INST 0x0f00
42
43/* CM1 clockdomain register offsets (from instance start) */
44#define OMAP4430_CM1_ABE_ABE_CDOFFS 0x0000
45#define OMAP4430_CM1_MPU_MPU_CDOFFS 0x0000
46#define OMAP4430_CM1_TESLA_TESLA_CDOFFS 0x0000
47
48/* CM1 */
49
50/* CM1.OCP_SOCKET_CM1 register offsets */
51#define OMAP4_REVISION_CM1_OFFSET 0x0000
52#define OMAP4430_REVISION_CM1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_INST, 0x0000)
53#define OMAP4_CM_CM1_PROFILING_CLKCTRL_OFFSET 0x0040
54#define OMAP4430_CM_CM1_PROFILING_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_INST, 0x0040)
55
56/* CM1.CKGEN_CM1 register offsets */
57#define OMAP4_CM_CLKSEL_CORE_OFFSET 0x0000
58#define OMAP4430_CM_CLKSEL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0000)
59#define OMAP4_CM_CLKSEL_ABE_OFFSET 0x0008
60#define OMAP4430_CM_CLKSEL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0008)
61#define OMAP4_CM_DLL_CTRL_OFFSET 0x0010
62#define OMAP4430_CM_DLL_CTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0010)
63#define OMAP4_CM_CLKMODE_DPLL_CORE_OFFSET 0x0020
64#define OMAP4430_CM_CLKMODE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0020)
65#define OMAP4_CM_IDLEST_DPLL_CORE_OFFSET 0x0024
66#define OMAP4430_CM_IDLEST_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0024)
67#define OMAP4_CM_AUTOIDLE_DPLL_CORE_OFFSET 0x0028
68#define OMAP4430_CM_AUTOIDLE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0028)
69#define OMAP4_CM_CLKSEL_DPLL_CORE_OFFSET 0x002c
70#define OMAP4430_CM_CLKSEL_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x002c)
71#define OMAP4_CM_DIV_M2_DPLL_CORE_OFFSET 0x0030
72#define OMAP4430_CM_DIV_M2_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0030)
73#define OMAP4_CM_DIV_M3_DPLL_CORE_OFFSET 0x0034
74#define OMAP4430_CM_DIV_M3_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0034)
75#define OMAP4_CM_DIV_M4_DPLL_CORE_OFFSET 0x0038
76#define OMAP4430_CM_DIV_M4_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0038)
77#define OMAP4_CM_DIV_M5_DPLL_CORE_OFFSET 0x003c
78#define OMAP4430_CM_DIV_M5_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x003c)
79#define OMAP4_CM_DIV_M6_DPLL_CORE_OFFSET 0x0040
80#define OMAP4430_CM_DIV_M6_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0040)
81#define OMAP4_CM_DIV_M7_DPLL_CORE_OFFSET 0x0044
82#define OMAP4430_CM_DIV_M7_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0044)
83#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_CORE_OFFSET 0x0048
84#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0048)
85#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_CORE_OFFSET 0x004c
86#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x004c)
87#define OMAP4_CM_EMU_OVERRIDE_DPLL_CORE_OFFSET 0x0050
88#define OMAP4430_CM_EMU_OVERRIDE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0050)
89#define OMAP4_CM_CLKMODE_DPLL_MPU_OFFSET 0x0060
90#define OMAP4430_CM_CLKMODE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0060)
91#define OMAP4_CM_IDLEST_DPLL_MPU_OFFSET 0x0064
92#define OMAP4430_CM_IDLEST_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0064)
93#define OMAP4_CM_AUTOIDLE_DPLL_MPU_OFFSET 0x0068
94#define OMAP4430_CM_AUTOIDLE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0068)
95#define OMAP4_CM_CLKSEL_DPLL_MPU_OFFSET 0x006c
96#define OMAP4430_CM_CLKSEL_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x006c)
97#define OMAP4_CM_DIV_M2_DPLL_MPU_OFFSET 0x0070
98#define OMAP4430_CM_DIV_M2_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0070)
99#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_MPU_OFFSET 0x0088
100#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0088)
101#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_MPU_OFFSET 0x008c
102#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x008c)
103#define OMAP4_CM_BYPCLK_DPLL_MPU_OFFSET 0x009c
104#define OMAP4430_CM_BYPCLK_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x009c)
105#define OMAP4_CM_CLKMODE_DPLL_IVA_OFFSET 0x00a0
106#define OMAP4430_CM_CLKMODE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00a0)
107#define OMAP4_CM_IDLEST_DPLL_IVA_OFFSET 0x00a4
108#define OMAP4430_CM_IDLEST_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00a4)
109#define OMAP4_CM_AUTOIDLE_DPLL_IVA_OFFSET 0x00a8
110#define OMAP4430_CM_AUTOIDLE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00a8)
111#define OMAP4_CM_CLKSEL_DPLL_IVA_OFFSET 0x00ac
112#define OMAP4430_CM_CLKSEL_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00ac)
113#define OMAP4_CM_DIV_M4_DPLL_IVA_OFFSET 0x00b8
114#define OMAP4430_CM_DIV_M4_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00b8)
115#define OMAP4_CM_DIV_M5_DPLL_IVA_OFFSET 0x00bc
116#define OMAP4430_CM_DIV_M5_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00bc)
117#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_IVA_OFFSET 0x00c8
118#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00c8)
119#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_IVA_OFFSET 0x00cc
120#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00cc)
121#define OMAP4_CM_BYPCLK_DPLL_IVA_OFFSET 0x00dc
122#define OMAP4430_CM_BYPCLK_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00dc)
123#define OMAP4_CM_CLKMODE_DPLL_ABE_OFFSET 0x00e0
124#define OMAP4430_CM_CLKMODE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00e0)
125#define OMAP4_CM_IDLEST_DPLL_ABE_OFFSET 0x00e4
126#define OMAP4430_CM_IDLEST_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00e4)
127#define OMAP4_CM_AUTOIDLE_DPLL_ABE_OFFSET 0x00e8
128#define OMAP4430_CM_AUTOIDLE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00e8)
129#define OMAP4_CM_CLKSEL_DPLL_ABE_OFFSET 0x00ec
130#define OMAP4430_CM_CLKSEL_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00ec)
131#define OMAP4_CM_DIV_M2_DPLL_ABE_OFFSET 0x00f0
132#define OMAP4430_CM_DIV_M2_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00f0)
133#define OMAP4_CM_DIV_M3_DPLL_ABE_OFFSET 0x00f4
134#define OMAP4430_CM_DIV_M3_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x00f4)
135#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_ABE_OFFSET 0x0108
136#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0108)
137#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_ABE_OFFSET 0x010c
138#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x010c)
139#define OMAP4_CM_CLKMODE_DPLL_DDRPHY_OFFSET 0x0120
140#define OMAP4430_CM_CLKMODE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0120)
141#define OMAP4_CM_IDLEST_DPLL_DDRPHY_OFFSET 0x0124
142#define OMAP4430_CM_IDLEST_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0124)
143#define OMAP4_CM_AUTOIDLE_DPLL_DDRPHY_OFFSET 0x0128
144#define OMAP4430_CM_AUTOIDLE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0128)
145#define OMAP4_CM_CLKSEL_DPLL_DDRPHY_OFFSET 0x012c
146#define OMAP4430_CM_CLKSEL_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x012c)
147#define OMAP4_CM_DIV_M2_DPLL_DDRPHY_OFFSET 0x0130
148#define OMAP4430_CM_DIV_M2_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0130)
149#define OMAP4_CM_DIV_M4_DPLL_DDRPHY_OFFSET 0x0138
150#define OMAP4430_CM_DIV_M4_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0138)
151#define OMAP4_CM_DIV_M5_DPLL_DDRPHY_OFFSET 0x013c
152#define OMAP4430_CM_DIV_M5_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x013c)
153#define OMAP4_CM_DIV_M6_DPLL_DDRPHY_OFFSET 0x0140
154#define OMAP4430_CM_DIV_M6_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0140)
155#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_DDRPHY_OFFSET 0x0148
156#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0148)
157#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_DDRPHY_OFFSET 0x014c
158#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x014c)
159#define OMAP4_CM_SHADOW_FREQ_CONFIG1_OFFSET 0x0160
160#define OMAP4430_CM_SHADOW_FREQ_CONFIG1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0160)
161#define OMAP4_CM_SHADOW_FREQ_CONFIG2_OFFSET 0x0164
162#define OMAP4430_CM_SHADOW_FREQ_CONFIG2 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0164)
163#define OMAP4_CM_DYN_DEP_PRESCAL_OFFSET 0x0170
164#define OMAP4430_CM_DYN_DEP_PRESCAL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0170)
165#define OMAP4_CM_RESTORE_ST_OFFSET 0x0180
166#define OMAP4430_CM_RESTORE_ST OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_INST, 0x0180)
167
168/* CM1.MPU_CM1 register offsets */
169#define OMAP4_CM_MPU_CLKSTCTRL_OFFSET 0x0000
170#define OMAP4430_CM_MPU_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0000)
171#define OMAP4_CM_MPU_STATICDEP_OFFSET 0x0004
172#define OMAP4430_CM_MPU_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0004)
173#define OMAP4_CM_MPU_DYNAMICDEP_OFFSET 0x0008
174#define OMAP4430_CM_MPU_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0008)
175#define OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET 0x0020
176#define OMAP4430_CM_MPU_MPU_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_INST, 0x0020)
177
178/* CM1.TESLA_CM1 register offsets */
179#define OMAP4_CM_TESLA_CLKSTCTRL_OFFSET 0x0000
180#define OMAP4430_CM_TESLA_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0000)
181#define OMAP4_CM_TESLA_STATICDEP_OFFSET 0x0004
182#define OMAP4430_CM_TESLA_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0004)
183#define OMAP4_CM_TESLA_DYNAMICDEP_OFFSET 0x0008
184#define OMAP4430_CM_TESLA_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0008)
185#define OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET 0x0020
186#define OMAP4430_CM_TESLA_TESLA_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_INST, 0x0020)
187
188/* CM1.ABE_CM1 register offsets */
189#define OMAP4_CM1_ABE_CLKSTCTRL_OFFSET 0x0000
190#define OMAP4430_CM1_ABE_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0000)
191#define OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET 0x0020
192#define OMAP4430_CM1_ABE_L4ABE_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0020)
193#define OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET 0x0028
194#define OMAP4430_CM1_ABE_AESS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0028)
195#define OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET 0x0030
196#define OMAP4430_CM1_ABE_PDM_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0030)
197#define OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET 0x0038
198#define OMAP4430_CM1_ABE_DMIC_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0038)
199#define OMAP4_CM1_ABE_MCASP_CLKCTRL_OFFSET 0x0040
200#define OMAP4430_CM1_ABE_MCASP_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0040)
201#define OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET 0x0048
202#define OMAP4430_CM1_ABE_MCBSP1_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0048)
203#define OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET 0x0050
204#define OMAP4430_CM1_ABE_MCBSP2_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0050)
205#define OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET 0x0058
206#define OMAP4430_CM1_ABE_MCBSP3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0058)
207#define OMAP4_CM1_ABE_SLIMBUS_CLKCTRL_OFFSET 0x0060
208#define OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0060)
209#define OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET 0x0068
210#define OMAP4430_CM1_ABE_TIMER5_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0068)
211#define OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET 0x0070
212#define OMAP4430_CM1_ABE_TIMER6_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0070)
213#define OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET 0x0078
214#define OMAP4430_CM1_ABE_TIMER7_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0078)
215#define OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET 0x0080
216#define OMAP4430_CM1_ABE_TIMER8_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0080)
217#define OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET 0x0088
218#define OMAP4430_CM1_ABE_WDT3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_INST, 0x0088)
219
220/* CM1.RESTORE_CM1 register offsets */
221#define OMAP4_CM_CLKSEL_CORE_RESTORE_OFFSET 0x0000
222#define OMAP4430_CM_CLKSEL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0000)
223#define OMAP4_CM_DIV_M2_DPLL_CORE_RESTORE_OFFSET 0x0004
224#define OMAP4430_CM_DIV_M2_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0004)
225#define OMAP4_CM_DIV_M3_DPLL_CORE_RESTORE_OFFSET 0x0008
226#define OMAP4430_CM_DIV_M3_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0008)
227#define OMAP4_CM_DIV_M4_DPLL_CORE_RESTORE_OFFSET 0x000c
228#define OMAP4430_CM_DIV_M4_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x000c)
229#define OMAP4_CM_DIV_M5_DPLL_CORE_RESTORE_OFFSET 0x0010
230#define OMAP4430_CM_DIV_M5_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0010)
231#define OMAP4_CM_DIV_M6_DPLL_CORE_RESTORE_OFFSET 0x0014
232#define OMAP4430_CM_DIV_M6_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0014)
233#define OMAP4_CM_DIV_M7_DPLL_CORE_RESTORE_OFFSET 0x0018
234#define OMAP4430_CM_DIV_M7_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0018)
235#define OMAP4_CM_CLKSEL_DPLL_CORE_RESTORE_OFFSET 0x001c
236#define OMAP4430_CM_CLKSEL_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x001c)
237#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE_OFFSET 0x0020
238#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0020)
239#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_CORE_RESTORE_OFFSET 0x0024
240#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0024)
241#define OMAP4_CM_CLKMODE_DPLL_CORE_RESTORE_OFFSET 0x0028
242#define OMAP4430_CM_CLKMODE_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0028)
243#define OMAP4_CM_SHADOW_FREQ_CONFIG2_RESTORE_OFFSET 0x002c
244#define OMAP4430_CM_SHADOW_FREQ_CONFIG2_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x002c)
245#define OMAP4_CM_SHADOW_FREQ_CONFIG1_RESTORE_OFFSET 0x0030
246#define OMAP4430_CM_SHADOW_FREQ_CONFIG1_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0030)
247#define OMAP4_CM_AUTOIDLE_DPLL_CORE_RESTORE_OFFSET 0x0034
248#define OMAP4430_CM_AUTOIDLE_DPLL_CORE_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0034)
249#define OMAP4_CM_MPU_CLKSTCTRL_RESTORE_OFFSET 0x0038
250#define OMAP4430_CM_MPU_CLKSTCTRL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0038)
251#define OMAP4_CM_CM1_PROFILING_CLKCTRL_RESTORE_OFFSET 0x003c
252#define OMAP4430_CM_CM1_PROFILING_CLKCTRL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x003c)
253#define OMAP4_CM_DYN_DEP_PRESCAL_RESTORE_OFFSET 0x0040
254#define OMAP4430_CM_DYN_DEP_PRESCAL_RESTORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_RESTORE_INST, 0x0040)
255
256/* Function prototypes */
257extern u32 omap4_cm1_read_inst_reg(s16 inst, u16 idx);
258extern void omap4_cm1_write_inst_reg(u32 val, s16 inst, u16 idx);
259extern u32 omap4_cm1_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
260
261#endif
diff --git a/arch/arm/mach-omap2/cm2_44xx.h b/arch/arm/mach-omap2/cm2_44xx.h
new file mode 100644
index 000000000000..aa4745044065
--- /dev/null
+++ b/arch/arm/mach-omap2/cm2_44xx.h
@@ -0,0 +1,508 @@
1/*
2 * OMAP44xx CM2 instance offset macros
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2009-2010 Nokia Corporation
6 *
7 * Paul Walmsley (paul@pwsan.com)
8 * Rajendra Nayak (rnayak@ti.com)
9 * Benoit Cousson (b-cousson@ti.com)
10 *
11 * This file is automatically generated from the OMAP hardware databases.
12 * We respectfully ask that any modifications to this file be coordinated
13 * with the public linux-omap@vger.kernel.org mailing list and the
14 * authors above to ensure that the autogeneration scripts are kept
15 * up-to-date with the file contents.
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation.
20 *
21 * XXX This file needs to be updated to align on one of "OMAP4", "OMAP44XX",
22 * or "OMAP4430".
23 */
24
25#ifndef __ARCH_ARM_MACH_OMAP2_CM2_44XX_H
26#define __ARCH_ARM_MACH_OMAP2_CM2_44XX_H
27
28/* CM2 base address */
29#define OMAP4430_CM2_BASE 0x4a008000
30
31#define OMAP44XX_CM2_REGADDR(inst, reg) \
32 OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE + (inst) + (reg))
33
34/* CM2 instances */
35#define OMAP4430_CM2_OCP_SOCKET_INST 0x0000
36#define OMAP4430_CM2_CKGEN_INST 0x0100
37#define OMAP4430_CM2_ALWAYS_ON_INST 0x0600
38#define OMAP4430_CM2_CORE_INST 0x0700
39#define OMAP4430_CM2_IVAHD_INST 0x0f00
40#define OMAP4430_CM2_CAM_INST 0x1000
41#define OMAP4430_CM2_DSS_INST 0x1100
42#define OMAP4430_CM2_GFX_INST 0x1200
43#define OMAP4430_CM2_L3INIT_INST 0x1300
44#define OMAP4430_CM2_L4PER_INST 0x1400
45#define OMAP4430_CM2_CEFUSE_INST 0x1600
46#define OMAP4430_CM2_RESTORE_INST 0x1e00
47#define OMAP4430_CM2_INSTR_INST 0x1f00
48
49/* CM2 clockdomain register offsets (from instance start) */
50#define OMAP4430_CM2_ALWAYS_ON_ALWON_CDOFFS 0x0000
51#define OMAP4430_CM2_CORE_L3_1_CDOFFS 0x0000
52#define OMAP4430_CM2_CORE_L3_2_CDOFFS 0x0100
53#define OMAP4430_CM2_CORE_DUCATI_CDOFFS 0x0200
54#define OMAP4430_CM2_CORE_SDMA_CDOFFS 0x0300
55#define OMAP4430_CM2_CORE_MEMIF_CDOFFS 0x0400
56#define OMAP4430_CM2_CORE_D2D_CDOFFS 0x0500
57#define OMAP4430_CM2_CORE_L4CFG_CDOFFS 0x0600
58#define OMAP4430_CM2_CORE_L3INSTR_CDOFFS 0x0700
59#define OMAP4430_CM2_IVAHD_IVAHD_CDOFFS 0x0000
60#define OMAP4430_CM2_CAM_CAM_CDOFFS 0x0000
61#define OMAP4430_CM2_DSS_DSS_CDOFFS 0x0000
62#define OMAP4430_CM2_GFX_GFX_CDOFFS 0x0000
63#define OMAP4430_CM2_L3INIT_L3INIT_CDOFFS 0x0000
64#define OMAP4430_CM2_L4PER_L4PER_CDOFFS 0x0000
65#define OMAP4430_CM2_L4PER_L4SEC_CDOFFS 0x0180
66#define OMAP4430_CM2_CEFUSE_CEFUSE_CDOFFS 0x0000
67
68
69/* CM2 */
70
71/* CM2.OCP_SOCKET_CM2 register offsets */
72#define OMAP4_REVISION_CM2_OFFSET 0x0000
73#define OMAP4430_REVISION_CM2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_INST, 0x0000)
74#define OMAP4_CM_CM2_PROFILING_CLKCTRL_OFFSET 0x0040
75#define OMAP4430_CM_CM2_PROFILING_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_INST, 0x0040)
76
77/* CM2.CKGEN_CM2 register offsets */
78#define OMAP4_CM_CLKSEL_DUCATI_ISS_ROOT_OFFSET 0x0000
79#define OMAP4430_CM_CLKSEL_DUCATI_ISS_ROOT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0000)
80#define OMAP4_CM_CLKSEL_USB_60MHZ_OFFSET 0x0004
81#define OMAP4430_CM_CLKSEL_USB_60MHZ OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0004)
82#define OMAP4_CM_SCALE_FCLK_OFFSET 0x0008
83#define OMAP4430_CM_SCALE_FCLK OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0008)
84#define OMAP4_CM_CORE_DVFS_PERF1_OFFSET 0x0010
85#define OMAP4430_CM_CORE_DVFS_PERF1 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0010)
86#define OMAP4_CM_CORE_DVFS_PERF2_OFFSET 0x0014
87#define OMAP4430_CM_CORE_DVFS_PERF2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0014)
88#define OMAP4_CM_CORE_DVFS_PERF3_OFFSET 0x0018
89#define OMAP4430_CM_CORE_DVFS_PERF3 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0018)
90#define OMAP4_CM_CORE_DVFS_PERF4_OFFSET 0x001c
91#define OMAP4430_CM_CORE_DVFS_PERF4 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x001c)
92#define OMAP4_CM_CORE_DVFS_CURRENT_OFFSET 0x0024
93#define OMAP4430_CM_CORE_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0024)
94#define OMAP4_CM_IVA_DVFS_PERF_TESLA_OFFSET 0x0028
95#define OMAP4430_CM_IVA_DVFS_PERF_TESLA OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0028)
96#define OMAP4_CM_IVA_DVFS_PERF_IVAHD_OFFSET 0x002c
97#define OMAP4430_CM_IVA_DVFS_PERF_IVAHD OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x002c)
98#define OMAP4_CM_IVA_DVFS_PERF_ABE_OFFSET 0x0030
99#define OMAP4430_CM_IVA_DVFS_PERF_ABE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0030)
100#define OMAP4_CM_IVA_DVFS_CURRENT_OFFSET 0x0038
101#define OMAP4430_CM_IVA_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0038)
102#define OMAP4_CM_CLKMODE_DPLL_PER_OFFSET 0x0040
103#define OMAP4430_CM_CLKMODE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0040)
104#define OMAP4_CM_IDLEST_DPLL_PER_OFFSET 0x0044
105#define OMAP4430_CM_IDLEST_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0044)
106#define OMAP4_CM_AUTOIDLE_DPLL_PER_OFFSET 0x0048
107#define OMAP4430_CM_AUTOIDLE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0048)
108#define OMAP4_CM_CLKSEL_DPLL_PER_OFFSET 0x004c
109#define OMAP4430_CM_CLKSEL_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x004c)
110#define OMAP4_CM_DIV_M2_DPLL_PER_OFFSET 0x0050
111#define OMAP4430_CM_DIV_M2_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0050)
112#define OMAP4_CM_DIV_M3_DPLL_PER_OFFSET 0x0054
113#define OMAP4430_CM_DIV_M3_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0054)
114#define OMAP4_CM_DIV_M4_DPLL_PER_OFFSET 0x0058
115#define OMAP4430_CM_DIV_M4_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0058)
116#define OMAP4_CM_DIV_M5_DPLL_PER_OFFSET 0x005c
117#define OMAP4430_CM_DIV_M5_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x005c)
118#define OMAP4_CM_DIV_M6_DPLL_PER_OFFSET 0x0060
119#define OMAP4430_CM_DIV_M6_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0060)
120#define OMAP4_CM_DIV_M7_DPLL_PER_OFFSET 0x0064
121#define OMAP4430_CM_DIV_M7_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0064)
122#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_PER_OFFSET 0x0068
123#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0068)
124#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_PER_OFFSET 0x006c
125#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x006c)
126#define OMAP4_CM_CLKMODE_DPLL_USB_OFFSET 0x0080
127#define OMAP4430_CM_CLKMODE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0080)
128#define OMAP4_CM_IDLEST_DPLL_USB_OFFSET 0x0084
129#define OMAP4430_CM_IDLEST_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0084)
130#define OMAP4_CM_AUTOIDLE_DPLL_USB_OFFSET 0x0088
131#define OMAP4430_CM_AUTOIDLE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0088)
132#define OMAP4_CM_CLKSEL_DPLL_USB_OFFSET 0x008c
133#define OMAP4430_CM_CLKSEL_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x008c)
134#define OMAP4_CM_DIV_M2_DPLL_USB_OFFSET 0x0090
135#define OMAP4430_CM_DIV_M2_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x0090)
136#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_USB_OFFSET 0x00a8
137#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00a8)
138#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_USB_OFFSET 0x00ac
139#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00ac)
140#define OMAP4_CM_CLKDCOLDO_DPLL_USB_OFFSET 0x00b4
141#define OMAP4430_CM_CLKDCOLDO_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00b4)
142#define OMAP4_CM_CLKMODE_DPLL_UNIPRO_OFFSET 0x00c0
143#define OMAP4430_CM_CLKMODE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00c0)
144#define OMAP4_CM_IDLEST_DPLL_UNIPRO_OFFSET 0x00c4
145#define OMAP4430_CM_IDLEST_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00c4)
146#define OMAP4_CM_AUTOIDLE_DPLL_UNIPRO_OFFSET 0x00c8
147#define OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00c8)
148#define OMAP4_CM_CLKSEL_DPLL_UNIPRO_OFFSET 0x00cc
149#define OMAP4430_CM_CLKSEL_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00cc)
150#define OMAP4_CM_DIV_M2_DPLL_UNIPRO_OFFSET 0x00d0
151#define OMAP4430_CM_DIV_M2_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00d0)
152#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_UNIPRO_OFFSET 0x00e8
153#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00e8)
154#define OMAP4_CM_SSC_INSTFREQDIV_DPLL_UNIPRO_OFFSET 0x00ec
155#define OMAP4430_CM_SSC_INSTFREQDIV_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_INST, 0x00ec)
156
157/* CM2.ALWAYS_ON_CM2 register offsets */
158#define OMAP4_CM_ALWON_CLKSTCTRL_OFFSET 0x0000
159#define OMAP4430_CM_ALWON_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0000)
160#define OMAP4_CM_ALWON_MDMINTC_CLKCTRL_OFFSET 0x0020
161#define OMAP4430_CM_ALWON_MDMINTC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0020)
162#define OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET 0x0028
163#define OMAP4430_CM_ALWON_SR_MPU_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0028)
164#define OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET 0x0030
165#define OMAP4430_CM_ALWON_SR_IVA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0030)
166#define OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET 0x0038
167#define OMAP4430_CM_ALWON_SR_CORE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0038)
168#define OMAP4_CM_ALWON_USBPHY_CLKCTRL_OFFSET 0x0040
169#define OMAP4430_CM_ALWON_USBPHY_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_INST, 0x0040)
170
171/* CM2.CORE_CM2 register offsets */
172#define OMAP4_CM_L3_1_CLKSTCTRL_OFFSET 0x0000
173#define OMAP4430_CM_L3_1_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0000)
174#define OMAP4_CM_L3_1_DYNAMICDEP_OFFSET 0x0008
175#define OMAP4430_CM_L3_1_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0008)
176#define OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET 0x0020
177#define OMAP4430_CM_L3_1_L3_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0020)
178#define OMAP4_CM_L3_2_CLKSTCTRL_OFFSET 0x0100
179#define OMAP4430_CM_L3_2_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0100)
180#define OMAP4_CM_L3_2_DYNAMICDEP_OFFSET 0x0108
181#define OMAP4430_CM_L3_2_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0108)
182#define OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET 0x0120
183#define OMAP4430_CM_L3_2_L3_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0120)
184#define OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET 0x0128
185#define OMAP4430_CM_L3_2_GPMC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0128)
186#define OMAP4_CM_L3_2_OCMC_RAM_CLKCTRL_OFFSET 0x0130
187#define OMAP4430_CM_L3_2_OCMC_RAM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0130)
188#define OMAP4_CM_DUCATI_CLKSTCTRL_OFFSET 0x0200
189#define OMAP4430_CM_DUCATI_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0200)
190#define OMAP4_CM_DUCATI_STATICDEP_OFFSET 0x0204
191#define OMAP4430_CM_DUCATI_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0204)
192#define OMAP4_CM_DUCATI_DYNAMICDEP_OFFSET 0x0208
193#define OMAP4430_CM_DUCATI_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0208)
194#define OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET 0x0220
195#define OMAP4430_CM_DUCATI_DUCATI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0220)
196#define OMAP4_CM_SDMA_CLKSTCTRL_OFFSET 0x0300
197#define OMAP4430_CM_SDMA_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0300)
198#define OMAP4_CM_SDMA_STATICDEP_OFFSET 0x0304
199#define OMAP4430_CM_SDMA_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0304)
200#define OMAP4_CM_SDMA_DYNAMICDEP_OFFSET 0x0308
201#define OMAP4430_CM_SDMA_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0308)
202#define OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET 0x0320
203#define OMAP4430_CM_SDMA_SDMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0320)
204#define OMAP4_CM_MEMIF_CLKSTCTRL_OFFSET 0x0400
205#define OMAP4430_CM_MEMIF_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0400)
206#define OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET 0x0420
207#define OMAP4430_CM_MEMIF_DMM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0420)
208#define OMAP4_CM_MEMIF_EMIF_FW_CLKCTRL_OFFSET 0x0428
209#define OMAP4430_CM_MEMIF_EMIF_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0428)
210#define OMAP4_CM_MEMIF_EMIF_1_CLKCTRL_OFFSET 0x0430
211#define OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0430)
212#define OMAP4_CM_MEMIF_EMIF_2_CLKCTRL_OFFSET 0x0438
213#define OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0438)
214#define OMAP4_CM_MEMIF_DLL_CLKCTRL_OFFSET 0x0440
215#define OMAP4430_CM_MEMIF_DLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0440)
216#define OMAP4_CM_MEMIF_EMIF_H1_CLKCTRL_OFFSET 0x0450
217#define OMAP4430_CM_MEMIF_EMIF_H1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0450)
218#define OMAP4_CM_MEMIF_EMIF_H2_CLKCTRL_OFFSET 0x0458
219#define OMAP4430_CM_MEMIF_EMIF_H2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0458)
220#define OMAP4_CM_MEMIF_DLL_H_CLKCTRL_OFFSET 0x0460
221#define OMAP4430_CM_MEMIF_DLL_H_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0460)
222#define OMAP4_CM_D2D_CLKSTCTRL_OFFSET 0x0500
223#define OMAP4430_CM_D2D_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0500)
224#define OMAP4_CM_D2D_STATICDEP_OFFSET 0x0504
225#define OMAP4430_CM_D2D_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0504)
226#define OMAP4_CM_D2D_DYNAMICDEP_OFFSET 0x0508
227#define OMAP4430_CM_D2D_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0508)
228#define OMAP4_CM_D2D_SAD2D_CLKCTRL_OFFSET 0x0520
229#define OMAP4430_CM_D2D_SAD2D_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0520)
230#define OMAP4_CM_D2D_INSTEM_ICR_CLKCTRL_OFFSET 0x0528
231#define OMAP4430_CM_D2D_INSTEM_ICR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0528)
232#define OMAP4_CM_D2D_SAD2D_FW_CLKCTRL_OFFSET 0x0530
233#define OMAP4430_CM_D2D_SAD2D_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0530)
234#define OMAP4_CM_L4CFG_CLKSTCTRL_OFFSET 0x0600
235#define OMAP4430_CM_L4CFG_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0600)
236#define OMAP4_CM_L4CFG_DYNAMICDEP_OFFSET 0x0608
237#define OMAP4430_CM_L4CFG_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0608)
238#define OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET 0x0620
239#define OMAP4430_CM_L4CFG_L4_CFG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0620)
240#define OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET 0x0628
241#define OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0628)
242#define OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET 0x0630
243#define OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0630)
244#define OMAP4_CM_L4CFG_SAR_ROM_CLKCTRL_OFFSET 0x0638
245#define OMAP4430_CM_L4CFG_SAR_ROM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0638)
246#define OMAP4_CM_L3INSTR_CLKSTCTRL_OFFSET 0x0700
247#define OMAP4430_CM_L3INSTR_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0700)
248#define OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET 0x0720
249#define OMAP4430_CM_L3INSTR_L3_3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0720)
250#define OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET 0x0728
251#define OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0728)
252#define OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_OFFSET 0x0740
253#define OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_INST, 0x0740)
254
255/* CM2.IVAHD_CM2 register offsets */
256#define OMAP4_CM_IVAHD_CLKSTCTRL_OFFSET 0x0000
257#define OMAP4430_CM_IVAHD_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0000)
258#define OMAP4_CM_IVAHD_STATICDEP_OFFSET 0x0004
259#define OMAP4430_CM_IVAHD_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0004)
260#define OMAP4_CM_IVAHD_DYNAMICDEP_OFFSET 0x0008
261#define OMAP4430_CM_IVAHD_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0008)
262#define OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET 0x0020
263#define OMAP4430_CM_IVAHD_IVAHD_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0020)
264#define OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET 0x0028
265#define OMAP4430_CM_IVAHD_SL2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_INST, 0x0028)
266
267/* CM2.CAM_CM2 register offsets */
268#define OMAP4_CM_CAM_CLKSTCTRL_OFFSET 0x0000
269#define OMAP4430_CM_CAM_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0000)
270#define OMAP4_CM_CAM_STATICDEP_OFFSET 0x0004
271#define OMAP4430_CM_CAM_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0004)
272#define OMAP4_CM_CAM_DYNAMICDEP_OFFSET 0x0008
273#define OMAP4430_CM_CAM_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0008)
274#define OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET 0x0020
275#define OMAP4430_CM_CAM_ISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0020)
276#define OMAP4_CM_CAM_FDIF_CLKCTRL_OFFSET 0x0028
277#define OMAP4430_CM_CAM_FDIF_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_INST, 0x0028)
278
279/* CM2.DSS_CM2 register offsets */
280#define OMAP4_CM_DSS_CLKSTCTRL_OFFSET 0x0000
281#define OMAP4430_CM_DSS_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0000)
282#define OMAP4_CM_DSS_STATICDEP_OFFSET 0x0004
283#define OMAP4430_CM_DSS_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0004)
284#define OMAP4_CM_DSS_DYNAMICDEP_OFFSET 0x0008
285#define OMAP4430_CM_DSS_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0008)
286#define OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET 0x0020
287#define OMAP4430_CM_DSS_DSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0020)
288#define OMAP4_CM_DSS_DEISS_CLKCTRL_OFFSET 0x0028
289#define OMAP4430_CM_DSS_DEISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_INST, 0x0028)
290
291/* CM2.GFX_CM2 register offsets */
292#define OMAP4_CM_GFX_CLKSTCTRL_OFFSET 0x0000
293#define OMAP4430_CM_GFX_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0000)
294#define OMAP4_CM_GFX_STATICDEP_OFFSET 0x0004
295#define OMAP4430_CM_GFX_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0004)
296#define OMAP4_CM_GFX_DYNAMICDEP_OFFSET 0x0008
297#define OMAP4430_CM_GFX_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0008)
298#define OMAP4_CM_GFX_GFX_CLKCTRL_OFFSET 0x0020
299#define OMAP4430_CM_GFX_GFX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_INST, 0x0020)
300
301/* CM2.L3INIT_CM2 register offsets */
302#define OMAP4_CM_L3INIT_CLKSTCTRL_OFFSET 0x0000
303#define OMAP4430_CM_L3INIT_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0000)
304#define OMAP4_CM_L3INIT_STATICDEP_OFFSET 0x0004
305#define OMAP4430_CM_L3INIT_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0004)
306#define OMAP4_CM_L3INIT_DYNAMICDEP_OFFSET 0x0008
307#define OMAP4430_CM_L3INIT_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0008)
308#define OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET 0x0028
309#define OMAP4430_CM_L3INIT_MMC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0028)
310#define OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET 0x0030
311#define OMAP4430_CM_L3INIT_MMC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0030)
312#define OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET 0x0038
313#define OMAP4430_CM_L3INIT_HSI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0038)
314#define OMAP4_CM_L3INIT_UNIPRO1_CLKCTRL_OFFSET 0x0040
315#define OMAP4430_CM_L3INIT_UNIPRO1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0040)
316#define OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET 0x0058
317#define OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0058)
318#define OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET 0x0060
319#define OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0060)
320#define OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET 0x0068
321#define OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0068)
322#define OMAP4_CM_L3INIT_P1500_CLKCTRL_OFFSET 0x0078
323#define OMAP4430_CM_L3INIT_P1500_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0078)
324#define OMAP4_CM_L3INIT_EMAC_CLKCTRL_OFFSET 0x0080
325#define OMAP4430_CM_L3INIT_EMAC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0080)
326#define OMAP4_CM_L3INIT_SATA_CLKCTRL_OFFSET 0x0088
327#define OMAP4430_CM_L3INIT_SATA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0088)
328#define OMAP4_CM_L3INIT_TPPSS_CLKCTRL_OFFSET 0x0090
329#define OMAP4430_CM_L3INIT_TPPSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0090)
330#define OMAP4_CM_L3INIT_PCIESS_CLKCTRL_OFFSET 0x0098
331#define OMAP4430_CM_L3INIT_PCIESS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x0098)
332#define OMAP4_CM_L3INIT_CCPTX_CLKCTRL_OFFSET 0x00a8
333#define OMAP4430_CM_L3INIT_CCPTX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00a8)
334#define OMAP4_CM_L3INIT_XHPI_CLKCTRL_OFFSET 0x00c0
335#define OMAP4430_CM_L3INIT_XHPI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00c0)
336#define OMAP4_CM_L3INIT_MMC6_CLKCTRL_OFFSET 0x00c8
337#define OMAP4430_CM_L3INIT_MMC6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00c8)
338#define OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET 0x00d0
339#define OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00d0)
340#define OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET 0x00e0
341#define OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_INST, 0x00e0)
342
343/* CM2.L4PER_CM2 register offsets */
344#define OMAP4_CM_L4PER_CLKSTCTRL_OFFSET 0x0000
345#define OMAP4430_CM_L4PER_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0000)
346#define OMAP4_CM_L4PER_DYNAMICDEP_OFFSET 0x0008
347#define OMAP4430_CM_L4PER_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0008)
348#define OMAP4_CM_L4PER_ADC_CLKCTRL_OFFSET 0x0020
349#define OMAP4430_CM_L4PER_ADC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0020)
350#define OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET 0x0028
351#define OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0028)
352#define OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET 0x0030
353#define OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0030)
354#define OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET 0x0038
355#define OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0038)
356#define OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET 0x0040
357#define OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0040)
358#define OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET 0x0048
359#define OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0048)
360#define OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET 0x0050
361#define OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0050)
362#define OMAP4_CM_L4PER_ELM_CLKCTRL_OFFSET 0x0058
363#define OMAP4430_CM_L4PER_ELM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0058)
364#define OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET 0x0060
365#define OMAP4430_CM_L4PER_GPIO2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0060)
366#define OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET 0x0068
367#define OMAP4430_CM_L4PER_GPIO3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0068)
368#define OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET 0x0070
369#define OMAP4430_CM_L4PER_GPIO4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0070)
370#define OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET 0x0078
371#define OMAP4430_CM_L4PER_GPIO5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0078)
372#define OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET 0x0080
373#define OMAP4430_CM_L4PER_GPIO6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0080)
374#define OMAP4_CM_L4PER_HDQ1W_CLKCTRL_OFFSET 0x0088
375#define OMAP4430_CM_L4PER_HDQ1W_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0088)
376#define OMAP4_CM_L4PER_HECC1_CLKCTRL_OFFSET 0x0090
377#define OMAP4430_CM_L4PER_HECC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0090)
378#define OMAP4_CM_L4PER_HECC2_CLKCTRL_OFFSET 0x0098
379#define OMAP4430_CM_L4PER_HECC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0098)
380#define OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET 0x00a0
381#define OMAP4430_CM_L4PER_I2C1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00a0)
382#define OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET 0x00a8
383#define OMAP4430_CM_L4PER_I2C2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00a8)
384#define OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET 0x00b0
385#define OMAP4430_CM_L4PER_I2C3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00b0)
386#define OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET 0x00b8
387#define OMAP4430_CM_L4PER_I2C4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00b8)
388#define OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET 0x00c0
389#define OMAP4430_CM_L4PER_L4PER_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00c0)
390#define OMAP4_CM_L4PER_MCASP2_CLKCTRL_OFFSET 0x00d0
391#define OMAP4430_CM_L4PER_MCASP2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00d0)
392#define OMAP4_CM_L4PER_MCASP3_CLKCTRL_OFFSET 0x00d8
393#define OMAP4430_CM_L4PER_MCASP3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00d8)
394#define OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET 0x00e0
395#define OMAP4430_CM_L4PER_MCBSP4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00e0)
396#define OMAP4_CM_L4PER_MGATE_CLKCTRL_OFFSET 0x00e8
397#define OMAP4430_CM_L4PER_MGATE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00e8)
398#define OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET 0x00f0
399#define OMAP4430_CM_L4PER_MCSPI1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00f0)
400#define OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET 0x00f8
401#define OMAP4430_CM_L4PER_MCSPI2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x00f8)
402#define OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET 0x0100
403#define OMAP4430_CM_L4PER_MCSPI3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0100)
404#define OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET 0x0108
405#define OMAP4430_CM_L4PER_MCSPI4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0108)
406#define OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET 0x0120
407#define OMAP4430_CM_L4PER_MMCSD3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0120)
408#define OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET 0x0128
409#define OMAP4430_CM_L4PER_MMCSD4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0128)
410#define OMAP4_CM_L4PER_MSPROHG_CLKCTRL_OFFSET 0x0130
411#define OMAP4430_CM_L4PER_MSPROHG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0130)
412#define OMAP4_CM_L4PER_SLIMBUS2_CLKCTRL_OFFSET 0x0138
413#define OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0138)
414#define OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET 0x0140
415#define OMAP4430_CM_L4PER_UART1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0140)
416#define OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET 0x0148
417#define OMAP4430_CM_L4PER_UART2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0148)
418#define OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET 0x0150
419#define OMAP4430_CM_L4PER_UART3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0150)
420#define OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET 0x0158
421#define OMAP4430_CM_L4PER_UART4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0158)
422#define OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET 0x0160
423#define OMAP4430_CM_L4PER_MMCSD5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0160)
424#define OMAP4_CM_L4PER_I2C5_CLKCTRL_OFFSET 0x0168
425#define OMAP4430_CM_L4PER_I2C5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0168)
426#define OMAP4_CM_L4SEC_CLKSTCTRL_OFFSET 0x0180
427#define OMAP4430_CM_L4SEC_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0180)
428#define OMAP4_CM_L4SEC_STATICDEP_OFFSET 0x0184
429#define OMAP4430_CM_L4SEC_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0184)
430#define OMAP4_CM_L4SEC_DYNAMICDEP_OFFSET 0x0188
431#define OMAP4430_CM_L4SEC_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x0188)
432#define OMAP4_CM_L4SEC_AES1_CLKCTRL_OFFSET 0x01a0
433#define OMAP4430_CM_L4SEC_AES1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01a0)
434#define OMAP4_CM_L4SEC_AES2_CLKCTRL_OFFSET 0x01a8
435#define OMAP4430_CM_L4SEC_AES2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01a8)
436#define OMAP4_CM_L4SEC_DES3DES_CLKCTRL_OFFSET 0x01b0
437#define OMAP4430_CM_L4SEC_DES3DES_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01b0)
438#define OMAP4_CM_L4SEC_PKAEIP29_CLKCTRL_OFFSET 0x01b8
439#define OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01b8)
440#define OMAP4_CM_L4SEC_RNG_CLKCTRL_OFFSET 0x01c0
441#define OMAP4430_CM_L4SEC_RNG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01c0)
442#define OMAP4_CM_L4SEC_SHA2MD51_CLKCTRL_OFFSET 0x01c8
443#define OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01c8)
444#define OMAP4_CM_L4SEC_CRYPTODMA_CLKCTRL_OFFSET 0x01d8
445#define OMAP4430_CM_L4SEC_CRYPTODMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_INST, 0x01d8)
446
447/* CM2.CEFUSE_CM2 register offsets */
448#define OMAP4_CM_CEFUSE_CLKSTCTRL_OFFSET 0x0000
449#define OMAP4430_CM_CEFUSE_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_INST, 0x0000)
450#define OMAP4_CM_CEFUSE_CEFUSE_CLKCTRL_OFFSET 0x0020
451#define OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_INST, 0x0020)
452
453/* CM2.RESTORE_CM2 register offsets */
454#define OMAP4_CM_L3_1_CLKSTCTRL_RESTORE_OFFSET 0x0000
455#define OMAP4430_CM_L3_1_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0000)
456#define OMAP4_CM_L3_2_CLKSTCTRL_RESTORE_OFFSET 0x0004
457#define OMAP4430_CM_L3_2_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0004)
458#define OMAP4_CM_L4CFG_CLKSTCTRL_RESTORE_OFFSET 0x0008
459#define OMAP4430_CM_L4CFG_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0008)
460#define OMAP4_CM_MEMIF_CLKSTCTRL_RESTORE_OFFSET 0x000c
461#define OMAP4430_CM_MEMIF_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x000c)
462#define OMAP4_CM_L4PER_CLKSTCTRL_RESTORE_OFFSET 0x0010
463#define OMAP4430_CM_L4PER_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0010)
464#define OMAP4_CM_L3INIT_CLKSTCTRL_RESTORE_OFFSET 0x0014
465#define OMAP4430_CM_L3INIT_CLKSTCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0014)
466#define OMAP4_CM_L3INSTR_L3_3_CLKCTRL_RESTORE_OFFSET 0x0018
467#define OMAP4430_CM_L3INSTR_L3_3_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0018)
468#define OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE_OFFSET 0x001c
469#define OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x001c)
470#define OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE_OFFSET 0x0020
471#define OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0020)
472#define OMAP4_CM_CM2_PROFILING_CLKCTRL_RESTORE_OFFSET 0x0024
473#define OMAP4430_CM_CM2_PROFILING_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0024)
474#define OMAP4_CM_D2D_STATICDEP_RESTORE_OFFSET 0x0028
475#define OMAP4430_CM_D2D_STATICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0028)
476#define OMAP4_CM_L3_1_DYNAMICDEP_RESTORE_OFFSET 0x002c
477#define OMAP4430_CM_L3_1_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x002c)
478#define OMAP4_CM_L3_2_DYNAMICDEP_RESTORE_OFFSET 0x0030
479#define OMAP4430_CM_L3_2_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0030)
480#define OMAP4_CM_D2D_DYNAMICDEP_RESTORE_OFFSET 0x0034
481#define OMAP4430_CM_D2D_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0034)
482#define OMAP4_CM_L4CFG_DYNAMICDEP_RESTORE_OFFSET 0x0038
483#define OMAP4430_CM_L4CFG_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0038)
484#define OMAP4_CM_L4PER_DYNAMICDEP_RESTORE_OFFSET 0x003c
485#define OMAP4430_CM_L4PER_DYNAMICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x003c)
486#define OMAP4_CM_L4PER_GPIO2_CLKCTRL_RESTORE_OFFSET 0x0040
487#define OMAP4430_CM_L4PER_GPIO2_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0040)
488#define OMAP4_CM_L4PER_GPIO3_CLKCTRL_RESTORE_OFFSET 0x0044
489#define OMAP4430_CM_L4PER_GPIO3_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0044)
490#define OMAP4_CM_L4PER_GPIO4_CLKCTRL_RESTORE_OFFSET 0x0048
491#define OMAP4430_CM_L4PER_GPIO4_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0048)
492#define OMAP4_CM_L4PER_GPIO5_CLKCTRL_RESTORE_OFFSET 0x004c
493#define OMAP4430_CM_L4PER_GPIO5_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x004c)
494#define OMAP4_CM_L4PER_GPIO6_CLKCTRL_RESTORE_OFFSET 0x0050
495#define OMAP4430_CM_L4PER_GPIO6_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0050)
496#define OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_RESTORE_OFFSET 0x0054
497#define OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0054)
498#define OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_RESTORE_OFFSET 0x0058
499#define OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x0058)
500#define OMAP4_CM_SDMA_STATICDEP_RESTORE_OFFSET 0x005c
501#define OMAP4430_CM_SDMA_STATICDEP_RESTORE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_RESTORE_INST, 0x005c)
502
503/* Function prototypes */
504extern u32 omap4_cm2_read_inst_reg(s16 inst, u16 idx);
505extern void omap4_cm2_write_inst_reg(u32 val, s16 inst, u16 idx);
506extern u32 omap4_cm2_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
507
508#endif
diff --git a/arch/arm/mach-omap2/cm2xxx_3xxx.c b/arch/arm/mach-omap2/cm2xxx_3xxx.c
new file mode 100644
index 000000000000..38830d8d4783
--- /dev/null
+++ b/arch/arm/mach-omap2/cm2xxx_3xxx.c
@@ -0,0 +1,557 @@
1/*
2 * OMAP2/3 CM module functions
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/types.h>
14#include <linux/delay.h>
15#include <linux/spinlock.h>
16#include <linux/list.h>
17#include <linux/errno.h>
18#include <linux/err.h>
19#include <linux/io.h>
20
21#include <plat/common.h>
22
23#include "cm.h"
24#include "cm2xxx_3xxx.h"
25#include "cm-regbits-24xx.h"
26#include "cm-regbits-34xx.h"
27
28/* CM_AUTOIDLE_PLL.AUTO_* bit values for DPLLs */
29#define DPLL_AUTOIDLE_DISABLE 0x0
30#define OMAP2XXX_DPLL_AUTOIDLE_LOW_POWER_STOP 0x3
31
32/* CM_AUTOIDLE_PLL.AUTO_* bit values for APLLs (OMAP2xxx only) */
33#define OMAP2XXX_APLL_AUTOIDLE_DISABLE 0x0
34#define OMAP2XXX_APLL_AUTOIDLE_LOW_POWER_STOP 0x3
35
36static const u8 cm_idlest_offs[] = {
37 CM_IDLEST1, CM_IDLEST2, OMAP2430_CM_IDLEST3
38};
39
40u32 omap2_cm_read_mod_reg(s16 module, u16 idx)
41{
42 return __raw_readl(cm_base + module + idx);
43}
44
45void omap2_cm_write_mod_reg(u32 val, s16 module, u16 idx)
46{
47 __raw_writel(val, cm_base + module + idx);
48}
49
50/* Read-modify-write a register in a CM module. Caller must lock */
51u32 omap2_cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
52{
53 u32 v;
54
55 v = omap2_cm_read_mod_reg(module, idx);
56 v &= ~mask;
57 v |= bits;
58 omap2_cm_write_mod_reg(v, module, idx);
59
60 return v;
61}
62
63u32 omap2_cm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
64{
65 return omap2_cm_rmw_mod_reg_bits(bits, bits, module, idx);
66}
67
68u32 omap2_cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
69{
70 return omap2_cm_rmw_mod_reg_bits(bits, 0x0, module, idx);
71}
72
73/*
74 *
75 */
76
77static void _write_clktrctrl(u8 c, s16 module, u32 mask)
78{
79 u32 v;
80
81 v = omap2_cm_read_mod_reg(module, OMAP2_CM_CLKSTCTRL);
82 v &= ~mask;
83 v |= c << __ffs(mask);
84 omap2_cm_write_mod_reg(v, module, OMAP2_CM_CLKSTCTRL);
85}
86
87bool omap2_cm_is_clkdm_in_hwsup(s16 module, u32 mask)
88{
89 u32 v;
90 bool ret = 0;
91
92 BUG_ON(!cpu_is_omap24xx() && !cpu_is_omap34xx());
93
94 v = omap2_cm_read_mod_reg(module, OMAP2_CM_CLKSTCTRL);
95 v &= mask;
96 v >>= __ffs(mask);
97
98 if (cpu_is_omap24xx())
99 ret = (v == OMAP24XX_CLKSTCTRL_ENABLE_AUTO) ? 1 : 0;
100 else
101 ret = (v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ? 1 : 0;
102
103 return ret;
104}
105
106void omap2xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask)
107{
108 _write_clktrctrl(OMAP24XX_CLKSTCTRL_ENABLE_AUTO, module, mask);
109}
110
111void omap2xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask)
112{
113 _write_clktrctrl(OMAP24XX_CLKSTCTRL_DISABLE_AUTO, module, mask);
114}
115
116void omap3xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask)
117{
118 _write_clktrctrl(OMAP34XX_CLKSTCTRL_ENABLE_AUTO, module, mask);
119}
120
121void omap3xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask)
122{
123 _write_clktrctrl(OMAP34XX_CLKSTCTRL_DISABLE_AUTO, module, mask);
124}
125
126void omap3xxx_cm_clkdm_force_sleep(s16 module, u32 mask)
127{
128 _write_clktrctrl(OMAP34XX_CLKSTCTRL_FORCE_SLEEP, module, mask);
129}
130
131void omap3xxx_cm_clkdm_force_wakeup(s16 module, u32 mask)
132{
133 _write_clktrctrl(OMAP34XX_CLKSTCTRL_FORCE_WAKEUP, module, mask);
134}
135
136/*
137 * DPLL autoidle control
138 */
139
140static void _omap2xxx_set_dpll_autoidle(u8 m)
141{
142 u32 v;
143
144 v = omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE);
145 v &= ~OMAP24XX_AUTO_DPLL_MASK;
146 v |= m << OMAP24XX_AUTO_DPLL_SHIFT;
147 omap2_cm_write_mod_reg(v, PLL_MOD, CM_AUTOIDLE);
148}
149
150void omap2xxx_cm_set_dpll_disable_autoidle(void)
151{
152 _omap2xxx_set_dpll_autoidle(OMAP2XXX_DPLL_AUTOIDLE_LOW_POWER_STOP);
153}
154
155void omap2xxx_cm_set_dpll_auto_low_power_stop(void)
156{
157 _omap2xxx_set_dpll_autoidle(DPLL_AUTOIDLE_DISABLE);
158}
159
160/*
161 * APLL autoidle control
162 */
163
164static void _omap2xxx_set_apll_autoidle(u8 m, u32 mask)
165{
166 u32 v;
167
168 v = omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE);
169 v &= ~mask;
170 v |= m << __ffs(mask);
171 omap2_cm_write_mod_reg(v, PLL_MOD, CM_AUTOIDLE);
172}
173
174void omap2xxx_cm_set_apll54_disable_autoidle(void)
175{
176 _omap2xxx_set_apll_autoidle(OMAP2XXX_APLL_AUTOIDLE_LOW_POWER_STOP,
177 OMAP24XX_AUTO_54M_MASK);
178}
179
180void omap2xxx_cm_set_apll54_auto_low_power_stop(void)
181{
182 _omap2xxx_set_apll_autoidle(OMAP2XXX_APLL_AUTOIDLE_DISABLE,
183 OMAP24XX_AUTO_54M_MASK);
184}
185
186void omap2xxx_cm_set_apll96_disable_autoidle(void)
187{
188 _omap2xxx_set_apll_autoidle(OMAP2XXX_APLL_AUTOIDLE_LOW_POWER_STOP,
189 OMAP24XX_AUTO_96M_MASK);
190}
191
192void omap2xxx_cm_set_apll96_auto_low_power_stop(void)
193{
194 _omap2xxx_set_apll_autoidle(OMAP2XXX_APLL_AUTOIDLE_DISABLE,
195 OMAP24XX_AUTO_96M_MASK);
196}
197
198/*
199 *
200 */
201
202/**
203 * omap2_cm_wait_idlest_ready - wait for a module to leave idle or standby
204 * @prcm_mod: PRCM module offset
205 * @idlest_id: CM_IDLESTx register ID (i.e., x = 1, 2, 3)
206 * @idlest_shift: shift of the bit in the CM_IDLEST* register to check
207 *
208 * XXX document
209 */
210int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id, u8 idlest_shift)
211{
212 int ena = 0, i = 0;
213 u8 cm_idlest_reg;
214 u32 mask;
215
216 if (!idlest_id || (idlest_id > ARRAY_SIZE(cm_idlest_offs)))
217 return -EINVAL;
218
219 cm_idlest_reg = cm_idlest_offs[idlest_id - 1];
220
221 mask = 1 << idlest_shift;
222
223 if (cpu_is_omap24xx())
224 ena = mask;
225 else if (cpu_is_omap34xx())
226 ena = 0;
227 else
228 BUG();
229
230 omap_test_timeout(((omap2_cm_read_mod_reg(prcm_mod, cm_idlest_reg) & mask) == ena),
231 MAX_MODULE_READY_TIME, i);
232
233 return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
234}
235
236/*
237 * Context save/restore code - OMAP3 only
238 */
239#ifdef CONFIG_ARCH_OMAP3
240struct omap3_cm_regs {
241 u32 iva2_cm_clksel1;
242 u32 iva2_cm_clksel2;
243 u32 cm_sysconfig;
244 u32 sgx_cm_clksel;
245 u32 dss_cm_clksel;
246 u32 cam_cm_clksel;
247 u32 per_cm_clksel;
248 u32 emu_cm_clksel;
249 u32 emu_cm_clkstctrl;
250 u32 pll_cm_autoidle;
251 u32 pll_cm_autoidle2;
252 u32 pll_cm_clksel4;
253 u32 pll_cm_clksel5;
254 u32 pll_cm_clken2;
255 u32 cm_polctrl;
256 u32 iva2_cm_fclken;
257 u32 iva2_cm_clken_pll;
258 u32 core_cm_fclken1;
259 u32 core_cm_fclken3;
260 u32 sgx_cm_fclken;
261 u32 wkup_cm_fclken;
262 u32 dss_cm_fclken;
263 u32 cam_cm_fclken;
264 u32 per_cm_fclken;
265 u32 usbhost_cm_fclken;
266 u32 core_cm_iclken1;
267 u32 core_cm_iclken2;
268 u32 core_cm_iclken3;
269 u32 sgx_cm_iclken;
270 u32 wkup_cm_iclken;
271 u32 dss_cm_iclken;
272 u32 cam_cm_iclken;
273 u32 per_cm_iclken;
274 u32 usbhost_cm_iclken;
275 u32 iva2_cm_autoidle2;
276 u32 mpu_cm_autoidle2;
277 u32 iva2_cm_clkstctrl;
278 u32 mpu_cm_clkstctrl;
279 u32 core_cm_clkstctrl;
280 u32 sgx_cm_clkstctrl;
281 u32 dss_cm_clkstctrl;
282 u32 cam_cm_clkstctrl;
283 u32 per_cm_clkstctrl;
284 u32 neon_cm_clkstctrl;
285 u32 usbhost_cm_clkstctrl;
286 u32 core_cm_autoidle1;
287 u32 core_cm_autoidle2;
288 u32 core_cm_autoidle3;
289 u32 wkup_cm_autoidle;
290 u32 dss_cm_autoidle;
291 u32 cam_cm_autoidle;
292 u32 per_cm_autoidle;
293 u32 usbhost_cm_autoidle;
294 u32 sgx_cm_sleepdep;
295 u32 dss_cm_sleepdep;
296 u32 cam_cm_sleepdep;
297 u32 per_cm_sleepdep;
298 u32 usbhost_cm_sleepdep;
299 u32 cm_clkout_ctrl;
300};
301
302static struct omap3_cm_regs cm_context;
303
304void omap3_cm_save_context(void)
305{
306 cm_context.iva2_cm_clksel1 =
307 omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL1);
308 cm_context.iva2_cm_clksel2 =
309 omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL2);
310 cm_context.cm_sysconfig = __raw_readl(OMAP3430_CM_SYSCONFIG);
311 cm_context.sgx_cm_clksel =
312 omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_CLKSEL);
313 cm_context.dss_cm_clksel =
314 omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_CLKSEL);
315 cm_context.cam_cm_clksel =
316 omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_CLKSEL);
317 cm_context.per_cm_clksel =
318 omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_CLKSEL);
319 cm_context.emu_cm_clksel =
320 omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, CM_CLKSEL1);
321 cm_context.emu_cm_clkstctrl =
322 omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, OMAP2_CM_CLKSTCTRL);
323 /*
324 * As per erratum i671, ROM code does not respect the PER DPLL
325 * programming scheme if CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL == 1.
326 * In this case, even though this register has been saved in
327 * scratchpad contents, we need to restore AUTO_PERIPH_DPLL
328 * by ourselves. So, we need to save it anyway.
329 */
330 cm_context.pll_cm_autoidle =
331 omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE);
332 cm_context.pll_cm_autoidle2 =
333 omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE2);
334 cm_context.pll_cm_clksel4 =
335 omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL4);
336 cm_context.pll_cm_clksel5 =
337 omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL5);
338 cm_context.pll_cm_clken2 =
339 omap2_cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKEN2);
340 cm_context.cm_polctrl = __raw_readl(OMAP3430_CM_POLCTRL);
341 cm_context.iva2_cm_fclken =
342 omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_FCLKEN);
343 cm_context.iva2_cm_clken_pll =
344 omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL);
345 cm_context.core_cm_fclken1 =
346 omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
347 cm_context.core_cm_fclken3 =
348 omap2_cm_read_mod_reg(CORE_MOD, OMAP3430ES2_CM_FCLKEN3);
349 cm_context.sgx_cm_fclken =
350 omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_FCLKEN);
351 cm_context.wkup_cm_fclken =
352 omap2_cm_read_mod_reg(WKUP_MOD, CM_FCLKEN);
353 cm_context.dss_cm_fclken =
354 omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_FCLKEN);
355 cm_context.cam_cm_fclken =
356 omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_FCLKEN);
357 cm_context.per_cm_fclken =
358 omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_FCLKEN);
359 cm_context.usbhost_cm_fclken =
360 omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
361 cm_context.core_cm_iclken1 =
362 omap2_cm_read_mod_reg(CORE_MOD, CM_ICLKEN1);
363 cm_context.core_cm_iclken2 =
364 omap2_cm_read_mod_reg(CORE_MOD, CM_ICLKEN2);
365 cm_context.core_cm_iclken3 =
366 omap2_cm_read_mod_reg(CORE_MOD, CM_ICLKEN3);
367 cm_context.sgx_cm_iclken =
368 omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_ICLKEN);
369 cm_context.wkup_cm_iclken =
370 omap2_cm_read_mod_reg(WKUP_MOD, CM_ICLKEN);
371 cm_context.dss_cm_iclken =
372 omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_ICLKEN);
373 cm_context.cam_cm_iclken =
374 omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_ICLKEN);
375 cm_context.per_cm_iclken =
376 omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_ICLKEN);
377 cm_context.usbhost_cm_iclken =
378 omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
379 cm_context.iva2_cm_autoidle2 =
380 omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_AUTOIDLE2);
381 cm_context.mpu_cm_autoidle2 =
382 omap2_cm_read_mod_reg(MPU_MOD, CM_AUTOIDLE2);
383 cm_context.iva2_cm_clkstctrl =
384 omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL);
385 cm_context.mpu_cm_clkstctrl =
386 omap2_cm_read_mod_reg(MPU_MOD, OMAP2_CM_CLKSTCTRL);
387 cm_context.core_cm_clkstctrl =
388 omap2_cm_read_mod_reg(CORE_MOD, OMAP2_CM_CLKSTCTRL);
389 cm_context.sgx_cm_clkstctrl =
390 omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, OMAP2_CM_CLKSTCTRL);
391 cm_context.dss_cm_clkstctrl =
392 omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP2_CM_CLKSTCTRL);
393 cm_context.cam_cm_clkstctrl =
394 omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP2_CM_CLKSTCTRL);
395 cm_context.per_cm_clkstctrl =
396 omap2_cm_read_mod_reg(OMAP3430_PER_MOD, OMAP2_CM_CLKSTCTRL);
397 cm_context.neon_cm_clkstctrl =
398 omap2_cm_read_mod_reg(OMAP3430_NEON_MOD, OMAP2_CM_CLKSTCTRL);
399 cm_context.usbhost_cm_clkstctrl =
400 omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD,
401 OMAP2_CM_CLKSTCTRL);
402 cm_context.core_cm_autoidle1 =
403 omap2_cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE1);
404 cm_context.core_cm_autoidle2 =
405 omap2_cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE2);
406 cm_context.core_cm_autoidle3 =
407 omap2_cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE3);
408 cm_context.wkup_cm_autoidle =
409 omap2_cm_read_mod_reg(WKUP_MOD, CM_AUTOIDLE);
410 cm_context.dss_cm_autoidle =
411 omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_AUTOIDLE);
412 cm_context.cam_cm_autoidle =
413 omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_AUTOIDLE);
414 cm_context.per_cm_autoidle =
415 omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_AUTOIDLE);
416 cm_context.usbhost_cm_autoidle =
417 omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
418 cm_context.sgx_cm_sleepdep =
419 omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD,
420 OMAP3430_CM_SLEEPDEP);
421 cm_context.dss_cm_sleepdep =
422 omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP3430_CM_SLEEPDEP);
423 cm_context.cam_cm_sleepdep =
424 omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP3430_CM_SLEEPDEP);
425 cm_context.per_cm_sleepdep =
426 omap2_cm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_CM_SLEEPDEP);
427 cm_context.usbhost_cm_sleepdep =
428 omap2_cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD,
429 OMAP3430_CM_SLEEPDEP);
430 cm_context.cm_clkout_ctrl =
431 omap2_cm_read_mod_reg(OMAP3430_CCR_MOD,
432 OMAP3_CM_CLKOUT_CTRL_OFFSET);
433}
434
435void omap3_cm_restore_context(void)
436{
437 omap2_cm_write_mod_reg(cm_context.iva2_cm_clksel1, OMAP3430_IVA2_MOD,
438 CM_CLKSEL1);
439 omap2_cm_write_mod_reg(cm_context.iva2_cm_clksel2, OMAP3430_IVA2_MOD,
440 CM_CLKSEL2);
441 __raw_writel(cm_context.cm_sysconfig, OMAP3430_CM_SYSCONFIG);
442 omap2_cm_write_mod_reg(cm_context.sgx_cm_clksel, OMAP3430ES2_SGX_MOD,
443 CM_CLKSEL);
444 omap2_cm_write_mod_reg(cm_context.dss_cm_clksel, OMAP3430_DSS_MOD,
445 CM_CLKSEL);
446 omap2_cm_write_mod_reg(cm_context.cam_cm_clksel, OMAP3430_CAM_MOD,
447 CM_CLKSEL);
448 omap2_cm_write_mod_reg(cm_context.per_cm_clksel, OMAP3430_PER_MOD,
449 CM_CLKSEL);
450 omap2_cm_write_mod_reg(cm_context.emu_cm_clksel, OMAP3430_EMU_MOD,
451 CM_CLKSEL1);
452 omap2_cm_write_mod_reg(cm_context.emu_cm_clkstctrl, OMAP3430_EMU_MOD,
453 OMAP2_CM_CLKSTCTRL);
454 /*
455 * As per erratum i671, ROM code does not respect the PER DPLL
456 * programming scheme if CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL == 1.
457 * In this case, we need to restore AUTO_PERIPH_DPLL by ourselves.
458 */
459 omap2_cm_write_mod_reg(cm_context.pll_cm_autoidle, PLL_MOD,
460 CM_AUTOIDLE);
461 omap2_cm_write_mod_reg(cm_context.pll_cm_autoidle2, PLL_MOD,
462 CM_AUTOIDLE2);
463 omap2_cm_write_mod_reg(cm_context.pll_cm_clksel4, PLL_MOD,
464 OMAP3430ES2_CM_CLKSEL4);
465 omap2_cm_write_mod_reg(cm_context.pll_cm_clksel5, PLL_MOD,
466 OMAP3430ES2_CM_CLKSEL5);
467 omap2_cm_write_mod_reg(cm_context.pll_cm_clken2, PLL_MOD,
468 OMAP3430ES2_CM_CLKEN2);
469 __raw_writel(cm_context.cm_polctrl, OMAP3430_CM_POLCTRL);
470 omap2_cm_write_mod_reg(cm_context.iva2_cm_fclken, OMAP3430_IVA2_MOD,
471 CM_FCLKEN);
472 omap2_cm_write_mod_reg(cm_context.iva2_cm_clken_pll, OMAP3430_IVA2_MOD,
473 OMAP3430_CM_CLKEN_PLL);
474 omap2_cm_write_mod_reg(cm_context.core_cm_fclken1, CORE_MOD,
475 CM_FCLKEN1);
476 omap2_cm_write_mod_reg(cm_context.core_cm_fclken3, CORE_MOD,
477 OMAP3430ES2_CM_FCLKEN3);
478 omap2_cm_write_mod_reg(cm_context.sgx_cm_fclken, OMAP3430ES2_SGX_MOD,
479 CM_FCLKEN);
480 omap2_cm_write_mod_reg(cm_context.wkup_cm_fclken, WKUP_MOD, CM_FCLKEN);
481 omap2_cm_write_mod_reg(cm_context.dss_cm_fclken, OMAP3430_DSS_MOD,
482 CM_FCLKEN);
483 omap2_cm_write_mod_reg(cm_context.cam_cm_fclken, OMAP3430_CAM_MOD,
484 CM_FCLKEN);
485 omap2_cm_write_mod_reg(cm_context.per_cm_fclken, OMAP3430_PER_MOD,
486 CM_FCLKEN);
487 omap2_cm_write_mod_reg(cm_context.usbhost_cm_fclken,
488 OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
489 omap2_cm_write_mod_reg(cm_context.core_cm_iclken1, CORE_MOD,
490 CM_ICLKEN1);
491 omap2_cm_write_mod_reg(cm_context.core_cm_iclken2, CORE_MOD,
492 CM_ICLKEN2);
493 omap2_cm_write_mod_reg(cm_context.core_cm_iclken3, CORE_MOD,
494 CM_ICLKEN3);
495 omap2_cm_write_mod_reg(cm_context.sgx_cm_iclken, OMAP3430ES2_SGX_MOD,
496 CM_ICLKEN);
497 omap2_cm_write_mod_reg(cm_context.wkup_cm_iclken, WKUP_MOD, CM_ICLKEN);
498 omap2_cm_write_mod_reg(cm_context.dss_cm_iclken, OMAP3430_DSS_MOD,
499 CM_ICLKEN);
500 omap2_cm_write_mod_reg(cm_context.cam_cm_iclken, OMAP3430_CAM_MOD,
501 CM_ICLKEN);
502 omap2_cm_write_mod_reg(cm_context.per_cm_iclken, OMAP3430_PER_MOD,
503 CM_ICLKEN);
504 omap2_cm_write_mod_reg(cm_context.usbhost_cm_iclken,
505 OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
506 omap2_cm_write_mod_reg(cm_context.iva2_cm_autoidle2, OMAP3430_IVA2_MOD,
507 CM_AUTOIDLE2);
508 omap2_cm_write_mod_reg(cm_context.mpu_cm_autoidle2, MPU_MOD,
509 CM_AUTOIDLE2);
510 omap2_cm_write_mod_reg(cm_context.iva2_cm_clkstctrl, OMAP3430_IVA2_MOD,
511 OMAP2_CM_CLKSTCTRL);
512 omap2_cm_write_mod_reg(cm_context.mpu_cm_clkstctrl, MPU_MOD,
513 OMAP2_CM_CLKSTCTRL);
514 omap2_cm_write_mod_reg(cm_context.core_cm_clkstctrl, CORE_MOD,
515 OMAP2_CM_CLKSTCTRL);
516 omap2_cm_write_mod_reg(cm_context.sgx_cm_clkstctrl, OMAP3430ES2_SGX_MOD,
517 OMAP2_CM_CLKSTCTRL);
518 omap2_cm_write_mod_reg(cm_context.dss_cm_clkstctrl, OMAP3430_DSS_MOD,
519 OMAP2_CM_CLKSTCTRL);
520 omap2_cm_write_mod_reg(cm_context.cam_cm_clkstctrl, OMAP3430_CAM_MOD,
521 OMAP2_CM_CLKSTCTRL);
522 omap2_cm_write_mod_reg(cm_context.per_cm_clkstctrl, OMAP3430_PER_MOD,
523 OMAP2_CM_CLKSTCTRL);
524 omap2_cm_write_mod_reg(cm_context.neon_cm_clkstctrl, OMAP3430_NEON_MOD,
525 OMAP2_CM_CLKSTCTRL);
526 omap2_cm_write_mod_reg(cm_context.usbhost_cm_clkstctrl,
527 OMAP3430ES2_USBHOST_MOD, OMAP2_CM_CLKSTCTRL);
528 omap2_cm_write_mod_reg(cm_context.core_cm_autoidle1, CORE_MOD,
529 CM_AUTOIDLE1);
530 omap2_cm_write_mod_reg(cm_context.core_cm_autoidle2, CORE_MOD,
531 CM_AUTOIDLE2);
532 omap2_cm_write_mod_reg(cm_context.core_cm_autoidle3, CORE_MOD,
533 CM_AUTOIDLE3);
534 omap2_cm_write_mod_reg(cm_context.wkup_cm_autoidle, WKUP_MOD,
535 CM_AUTOIDLE);
536 omap2_cm_write_mod_reg(cm_context.dss_cm_autoidle, OMAP3430_DSS_MOD,
537 CM_AUTOIDLE);
538 omap2_cm_write_mod_reg(cm_context.cam_cm_autoidle, OMAP3430_CAM_MOD,
539 CM_AUTOIDLE);
540 omap2_cm_write_mod_reg(cm_context.per_cm_autoidle, OMAP3430_PER_MOD,
541 CM_AUTOIDLE);
542 omap2_cm_write_mod_reg(cm_context.usbhost_cm_autoidle,
543 OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
544 omap2_cm_write_mod_reg(cm_context.sgx_cm_sleepdep, OMAP3430ES2_SGX_MOD,
545 OMAP3430_CM_SLEEPDEP);
546 omap2_cm_write_mod_reg(cm_context.dss_cm_sleepdep, OMAP3430_DSS_MOD,
547 OMAP3430_CM_SLEEPDEP);
548 omap2_cm_write_mod_reg(cm_context.cam_cm_sleepdep, OMAP3430_CAM_MOD,
549 OMAP3430_CM_SLEEPDEP);
550 omap2_cm_write_mod_reg(cm_context.per_cm_sleepdep, OMAP3430_PER_MOD,
551 OMAP3430_CM_SLEEPDEP);
552 omap2_cm_write_mod_reg(cm_context.usbhost_cm_sleepdep,
553 OMAP3430ES2_USBHOST_MOD, OMAP3430_CM_SLEEPDEP);
554 omap2_cm_write_mod_reg(cm_context.cm_clkout_ctrl, OMAP3430_CCR_MOD,
555 OMAP3_CM_CLKOUT_CTRL_OFFSET);
556}
557#endif
diff --git a/arch/arm/mach-omap2/cm2xxx_3xxx.h b/arch/arm/mach-omap2/cm2xxx_3xxx.h
new file mode 100644
index 000000000000..088bbad73db5
--- /dev/null
+++ b/arch/arm/mach-omap2/cm2xxx_3xxx.h
@@ -0,0 +1,155 @@
1/*
2 * OMAP2/3 Clock Management (CM) register definitions
3 *
4 * Copyright (C) 2007-2009 Texas Instruments, Inc.
5 * Copyright (C) 2007-2010 Nokia Corporation
6 * Paul Walmsley
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 * The CM hardware modules on the OMAP2/3 are quite similar to each
13 * other. The CM modules/instances on OMAP4 are quite different, so
14 * they are handled in a separate file.
15 */
16#ifndef __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H
17#define __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H
18
19#include "prcm-common.h"
20
21#define OMAP2420_CM_REGADDR(module, reg) \
22 OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE + (module) + (reg))
23#define OMAP2430_CM_REGADDR(module, reg) \
24 OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE + (module) + (reg))
25#define OMAP34XX_CM_REGADDR(module, reg) \
26 OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE + (module) + (reg))
27
28
29/*
30 * OMAP3-specific global CM registers
31 * Use cm_{read,write}_reg() with these registers.
32 * These registers appear once per CM module.
33 */
34
35#define OMAP3430_CM_REVISION OMAP34XX_CM_REGADDR(OCP_MOD, 0x0000)
36#define OMAP3430_CM_SYSCONFIG OMAP34XX_CM_REGADDR(OCP_MOD, 0x0010)
37#define OMAP3430_CM_POLCTRL OMAP34XX_CM_REGADDR(OCP_MOD, 0x009c)
38
39#define OMAP3_CM_CLKOUT_CTRL_OFFSET 0x0070
40#define OMAP3430_CM_CLKOUT_CTRL OMAP_CM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
41
42/*
43 * Module specific CM register offsets from CM_BASE + domain offset
44 * Use cm_{read,write}_mod_reg() with these registers.
45 * These register offsets generally appear in more than one PRCM submodule.
46 */
47
48/* Common between OMAP2 and OMAP3 */
49
50#define CM_FCLKEN 0x0000
51#define CM_FCLKEN1 CM_FCLKEN
52#define CM_CLKEN CM_FCLKEN
53#define CM_ICLKEN 0x0010
54#define CM_ICLKEN1 CM_ICLKEN
55#define CM_ICLKEN2 0x0014
56#define CM_ICLKEN3 0x0018
57#define CM_IDLEST 0x0020
58#define CM_IDLEST1 CM_IDLEST
59#define CM_IDLEST2 0x0024
60#define CM_AUTOIDLE 0x0030
61#define CM_AUTOIDLE1 CM_AUTOIDLE
62#define CM_AUTOIDLE2 0x0034
63#define CM_AUTOIDLE3 0x0038
64#define CM_CLKSEL 0x0040
65#define CM_CLKSEL1 CM_CLKSEL
66#define CM_CLKSEL2 0x0044
67#define OMAP2_CM_CLKSTCTRL 0x0048
68
69/* OMAP2-specific register offsets */
70
71#define OMAP24XX_CM_FCLKEN2 0x0004
72#define OMAP24XX_CM_ICLKEN4 0x001c
73#define OMAP24XX_CM_AUTOIDLE4 0x003c
74
75#define OMAP2430_CM_IDLEST3 0x0028
76
77/* OMAP3-specific register offsets */
78
79#define OMAP3430_CM_CLKEN_PLL 0x0004
80#define OMAP3430ES2_CM_CLKEN2 0x0004
81#define OMAP3430ES2_CM_FCLKEN3 0x0008
82#define OMAP3430_CM_IDLEST_PLL CM_IDLEST2
83#define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2
84#define OMAP3430ES2_CM_AUTOIDLE2_PLL CM_AUTOIDLE2
85#define OMAP3430_CM_CLKSEL1 CM_CLKSEL
86#define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL
87#define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2
88#define OMAP3430_CM_SLEEPDEP CM_CLKSEL2
89#define OMAP3430_CM_CLKSEL3 OMAP2_CM_CLKSTCTRL
90#define OMAP3430_CM_CLKSTST 0x004c
91#define OMAP3430ES2_CM_CLKSEL4 0x004c
92#define OMAP3430ES2_CM_CLKSEL5 0x0050
93#define OMAP3430_CM_CLKSEL2_EMU 0x0050
94#define OMAP3430_CM_CLKSEL3_EMU 0x0054
95
96
97/* CM_IDLEST bit field values to indicate deasserted IdleReq */
98
99#define OMAP24XX_CM_IDLEST_VAL 0
100#define OMAP34XX_CM_IDLEST_VAL 1
101
102
103/* Clock management domain register get/set */
104
105#ifndef __ASSEMBLER__
106
107extern u32 omap2_cm_read_mod_reg(s16 module, u16 idx);
108extern void omap2_cm_write_mod_reg(u32 val, s16 module, u16 idx);
109extern u32 omap2_cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx);
110
111extern int omap2_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id,
112 u8 idlest_shift);
113extern u32 omap2_cm_set_mod_reg_bits(u32 bits, s16 module, s16 idx);
114extern u32 omap2_cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx);
115
116extern bool omap2_cm_is_clkdm_in_hwsup(s16 module, u32 mask);
117extern void omap2xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask);
118extern void omap2xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask);
119
120extern void omap3xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask);
121extern void omap3xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask);
122extern void omap3xxx_cm_clkdm_force_sleep(s16 module, u32 mask);
123extern void omap3xxx_cm_clkdm_force_wakeup(s16 module, u32 mask);
124
125extern void omap2xxx_cm_set_dpll_disable_autoidle(void);
126extern void omap2xxx_cm_set_dpll_auto_low_power_stop(void);
127
128extern void omap2xxx_cm_set_apll54_disable_autoidle(void);
129extern void omap2xxx_cm_set_apll54_auto_low_power_stop(void);
130extern void omap2xxx_cm_set_apll96_disable_autoidle(void);
131extern void omap2xxx_cm_set_apll96_auto_low_power_stop(void);
132
133#endif
134
135/* CM register bits shared between 24XX and 3430 */
136
137/* CM_CLKSEL_GFX */
138#define OMAP_CLKSEL_GFX_SHIFT 0
139#define OMAP_CLKSEL_GFX_MASK (0x7 << 0)
140
141/* CM_ICLKEN_GFX */
142#define OMAP_EN_GFX_SHIFT 0
143#define OMAP_EN_GFX_MASK (1 << 0)
144
145/* CM_IDLEST_GFX */
146#define OMAP_ST_GFX_MASK (1 << 0)
147
148
149/* Function prototypes */
150# ifndef __ASSEMBLER__
151extern void omap3_cm_save_context(void);
152extern void omap3_cm_restore_context(void);
153# endif
154
155#endif
diff --git a/arch/arm/mach-omap2/cm44xx.c b/arch/arm/mach-omap2/cm44xx.c
new file mode 100644
index 000000000000..e96f53ea01a1
--- /dev/null
+++ b/arch/arm/mach-omap2/cm44xx.c
@@ -0,0 +1,52 @@
1/*
2 * OMAP4 CM1, CM2 module low-level functions
3 *
4 * Copyright (C) 2010 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * These functions are intended to be used only by the cminst44xx.c file.
12 * XXX Perhaps we should just move them there and make them static.
13 */
14
15#include <linux/kernel.h>
16#include <linux/types.h>
17#include <linux/errno.h>
18#include <linux/err.h>
19#include <linux/io.h>
20
21#include <plat/common.h>
22
23#include "cm.h"
24#include "cm1_44xx.h"
25#include "cm2_44xx.h"
26#include "cm-regbits-44xx.h"
27
28/* CM1 hardware module low-level functions */
29
30/* Read a register in CM1 */
31u32 omap4_cm1_read_inst_reg(s16 inst, u16 reg)
32{
33 return __raw_readl(OMAP44XX_CM1_REGADDR(inst, reg));
34}
35
36/* Write into a register in CM1 */
37void omap4_cm1_write_inst_reg(u32 val, s16 inst, u16 reg)
38{
39 __raw_writel(val, OMAP44XX_CM1_REGADDR(inst, reg));
40}
41
42/* Read a register in CM2 */
43u32 omap4_cm2_read_inst_reg(s16 inst, u16 reg)
44{
45 return __raw_readl(OMAP44XX_CM2_REGADDR(inst, reg));
46}
47
48/* Write into a register in CM2 */
49void omap4_cm2_write_inst_reg(u32 val, s16 inst, u16 reg)
50{
51 __raw_writel(val, OMAP44XX_CM2_REGADDR(inst, reg));
52}
diff --git a/arch/arm/mach-omap2/cm44xx.h b/arch/arm/mach-omap2/cm44xx.h
index 336d94889e5b..0b87ec82b41c 100644
--- a/arch/arm/mach-omap2/cm44xx.h
+++ b/arch/arm/mach-omap2/cm44xx.h
@@ -1,581 +1,32 @@
1/* 1/*
2 * OMAP44xx CM1 & CM2 instance offset macros 2 * OMAP4 Clock Management (CM) definitions
3 * 3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc. 4 * Copyright (C) 2007-2009 Texas Instruments, Inc.
5 * Copyright (C) 2009-2010 Nokia Corporation 5 * Copyright (C) 2007-2009 Nokia Corporation
6 * 6 *
7 * Paul Walmsley (paul@pwsan.com) 7 * Written by Paul Walmsley
8 * Rajendra Nayak (rnayak@ti.com)
9 * Benoit Cousson (b-cousson@ti.com)
10 *
11 * This file is automatically generated from the OMAP hardware databases.
12 * We respectfully ask that any modifications to this file be coordinated
13 * with the public linux-omap@vger.kernel.org mailing list and the
14 * authors above to ensure that the autogeneration scripts are kept
15 * up-to-date with the file contents.
16 * 8 *
17 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as 10 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation. 11 * published by the Free Software Foundation.
12 *
13 * OMAP4 has two separate CM blocks, CM1 and CM2. This file contains
14 * macros and function prototypes that are applicable to both.
20 */ 15 */
16#ifndef __ARCH_ASM_MACH_OMAP2_CM44XX_H
17#define __ARCH_ASM_MACH_OMAP2_CM44XX_H
21 18
22#ifndef __ARCH_ARM_MACH_OMAP2_CM44XX_H
23#define __ARCH_ARM_MACH_OMAP2_CM44XX_H
24
25
26/* CM1 */
27
28/* CM1.OCP_SOCKET_CM1 register offsets */
29#define OMAP4_REVISION_CM1_OFFSET 0x0000
30#define OMAP4430_REVISION_CM1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_MOD, 0x0000)
31#define OMAP4_CM_CM1_PROFILING_CLKCTRL_OFFSET 0x0040
32#define OMAP4430_CM_CM1_PROFILING_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_OCP_SOCKET_MOD, 0x0040)
33
34/* CM1.CKGEN_CM1 register offsets */
35#define OMAP4_CM_CLKSEL_CORE_OFFSET 0x0000
36#define OMAP4430_CM_CLKSEL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0000)
37#define OMAP4_CM_CLKSEL_ABE_OFFSET 0x0008
38#define OMAP4430_CM_CLKSEL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0008)
39#define OMAP4_CM_DLL_CTRL_OFFSET 0x0010
40#define OMAP4430_CM_DLL_CTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0010)
41#define OMAP4_CM_CLKMODE_DPLL_CORE_OFFSET 0x0020
42#define OMAP4430_CM_CLKMODE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0020)
43#define OMAP4_CM_IDLEST_DPLL_CORE_OFFSET 0x0024
44#define OMAP4430_CM_IDLEST_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0024)
45#define OMAP4_CM_AUTOIDLE_DPLL_CORE_OFFSET 0x0028
46#define OMAP4430_CM_AUTOIDLE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0028)
47#define OMAP4_CM_CLKSEL_DPLL_CORE_OFFSET 0x002c
48#define OMAP4430_CM_CLKSEL_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x002c)
49#define OMAP4_CM_DIV_M2_DPLL_CORE_OFFSET 0x0030
50#define OMAP4430_CM_DIV_M2_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0030)
51#define OMAP4_CM_DIV_M3_DPLL_CORE_OFFSET 0x0034
52#define OMAP4430_CM_DIV_M3_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0034)
53#define OMAP4_CM_DIV_M4_DPLL_CORE_OFFSET 0x0038
54#define OMAP4430_CM_DIV_M4_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0038)
55#define OMAP4_CM_DIV_M5_DPLL_CORE_OFFSET 0x003c
56#define OMAP4430_CM_DIV_M5_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x003c)
57#define OMAP4_CM_DIV_M6_DPLL_CORE_OFFSET 0x0040
58#define OMAP4430_CM_DIV_M6_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0040)
59#define OMAP4_CM_DIV_M7_DPLL_CORE_OFFSET 0x0044
60#define OMAP4430_CM_DIV_M7_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0044)
61#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_CORE_OFFSET 0x0048
62#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0048)
63#define OMAP4_CM_SSC_MODFREQDIV_DPLL_CORE_OFFSET 0x004c
64#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x004c)
65#define OMAP4_CM_EMU_OVERRIDE_DPLL_CORE_OFFSET 0x0050
66#define OMAP4430_CM_EMU_OVERRIDE_DPLL_CORE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0050)
67#define OMAP4_CM_CLKMODE_DPLL_MPU_OFFSET 0x0060
68#define OMAP4430_CM_CLKMODE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0060)
69#define OMAP4_CM_IDLEST_DPLL_MPU_OFFSET 0x0064
70#define OMAP4430_CM_IDLEST_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0064)
71#define OMAP4_CM_AUTOIDLE_DPLL_MPU_OFFSET 0x0068
72#define OMAP4430_CM_AUTOIDLE_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0068)
73#define OMAP4_CM_CLKSEL_DPLL_MPU_OFFSET 0x006c
74#define OMAP4430_CM_CLKSEL_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x006c)
75#define OMAP4_CM_DIV_M2_DPLL_MPU_OFFSET 0x0070
76#define OMAP4430_CM_DIV_M2_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0070)
77#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_MPU_OFFSET 0x0088
78#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0088)
79#define OMAP4_CM_SSC_MODFREQDIV_DPLL_MPU_OFFSET 0x008c
80#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x008c)
81#define OMAP4_CM_BYPCLK_DPLL_MPU_OFFSET 0x009c
82#define OMAP4430_CM_BYPCLK_DPLL_MPU OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x009c)
83#define OMAP4_CM_CLKMODE_DPLL_IVA_OFFSET 0x00a0
84#define OMAP4430_CM_CLKMODE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00a0)
85#define OMAP4_CM_IDLEST_DPLL_IVA_OFFSET 0x00a4
86#define OMAP4430_CM_IDLEST_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00a4)
87#define OMAP4_CM_AUTOIDLE_DPLL_IVA_OFFSET 0x00a8
88#define OMAP4430_CM_AUTOIDLE_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00a8)
89#define OMAP4_CM_CLKSEL_DPLL_IVA_OFFSET 0x00ac
90#define OMAP4430_CM_CLKSEL_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00ac)
91#define OMAP4_CM_DIV_M4_DPLL_IVA_OFFSET 0x00b8
92#define OMAP4430_CM_DIV_M4_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00b8)
93#define OMAP4_CM_DIV_M5_DPLL_IVA_OFFSET 0x00bc
94#define OMAP4430_CM_DIV_M5_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00bc)
95#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_IVA_OFFSET 0x00c8
96#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00c8)
97#define OMAP4_CM_SSC_MODFREQDIV_DPLL_IVA_OFFSET 0x00cc
98#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00cc)
99#define OMAP4_CM_BYPCLK_DPLL_IVA_OFFSET 0x00dc
100#define OMAP4430_CM_BYPCLK_DPLL_IVA OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00dc)
101#define OMAP4_CM_CLKMODE_DPLL_ABE_OFFSET 0x00e0
102#define OMAP4430_CM_CLKMODE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00e0)
103#define OMAP4_CM_IDLEST_DPLL_ABE_OFFSET 0x00e4
104#define OMAP4430_CM_IDLEST_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00e4)
105#define OMAP4_CM_AUTOIDLE_DPLL_ABE_OFFSET 0x00e8
106#define OMAP4430_CM_AUTOIDLE_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00e8)
107#define OMAP4_CM_CLKSEL_DPLL_ABE_OFFSET 0x00ec
108#define OMAP4430_CM_CLKSEL_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00ec)
109#define OMAP4_CM_DIV_M2_DPLL_ABE_OFFSET 0x00f0
110#define OMAP4430_CM_DIV_M2_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00f0)
111#define OMAP4_CM_DIV_M3_DPLL_ABE_OFFSET 0x00f4
112#define OMAP4430_CM_DIV_M3_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x00f4)
113#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_ABE_OFFSET 0x0108
114#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0108)
115#define OMAP4_CM_SSC_MODFREQDIV_DPLL_ABE_OFFSET 0x010c
116#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_ABE OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x010c)
117#define OMAP4_CM_CLKMODE_DPLL_DDRPHY_OFFSET 0x0120
118#define OMAP4430_CM_CLKMODE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0120)
119#define OMAP4_CM_IDLEST_DPLL_DDRPHY_OFFSET 0x0124
120#define OMAP4430_CM_IDLEST_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0124)
121#define OMAP4_CM_AUTOIDLE_DPLL_DDRPHY_OFFSET 0x0128
122#define OMAP4430_CM_AUTOIDLE_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0128)
123#define OMAP4_CM_CLKSEL_DPLL_DDRPHY_OFFSET 0x012c
124#define OMAP4430_CM_CLKSEL_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x012c)
125#define OMAP4_CM_DIV_M2_DPLL_DDRPHY_OFFSET 0x0130
126#define OMAP4430_CM_DIV_M2_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0130)
127#define OMAP4_CM_DIV_M4_DPLL_DDRPHY_OFFSET 0x0138
128#define OMAP4430_CM_DIV_M4_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0138)
129#define OMAP4_CM_DIV_M5_DPLL_DDRPHY_OFFSET 0x013c
130#define OMAP4430_CM_DIV_M5_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x013c)
131#define OMAP4_CM_DIV_M6_DPLL_DDRPHY_OFFSET 0x0140
132#define OMAP4430_CM_DIV_M6_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0140)
133#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_DDRPHY_OFFSET 0x0148
134#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0148)
135#define OMAP4_CM_SSC_MODFREQDIV_DPLL_DDRPHY_OFFSET 0x014c
136#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_DDRPHY OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x014c)
137#define OMAP4_CM_SHADOW_FREQ_CONFIG1_OFFSET 0x0160
138#define OMAP4430_CM_SHADOW_FREQ_CONFIG1 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0160)
139#define OMAP4_CM_SHADOW_FREQ_CONFIG2_OFFSET 0x0164
140#define OMAP4430_CM_SHADOW_FREQ_CONFIG2 OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0164)
141#define OMAP4_CM_DYN_DEP_PRESCAL_OFFSET 0x0170
142#define OMAP4430_CM_DYN_DEP_PRESCAL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0170)
143#define OMAP4_CM_RESTORE_ST_OFFSET 0x0180
144#define OMAP4430_CM_RESTORE_ST OMAP44XX_CM1_REGADDR(OMAP4430_CM1_CKGEN_MOD, 0x0180)
145
146/* CM1.MPU_CM1 register offsets */
147#define OMAP4_CM_MPU_CLKSTCTRL_OFFSET 0x0000
148#define OMAP4430_CM_MPU_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0000)
149#define OMAP4_CM_MPU_STATICDEP_OFFSET 0x0004
150#define OMAP4430_CM_MPU_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0004)
151#define OMAP4_CM_MPU_DYNAMICDEP_OFFSET 0x0008
152#define OMAP4430_CM_MPU_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0008)
153#define OMAP4_CM_MPU_MPU_CLKCTRL_OFFSET 0x0020
154#define OMAP4430_CM_MPU_MPU_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_MPU_MOD, 0x0020)
155
156/* CM1.TESLA_CM1 register offsets */
157#define OMAP4_CM_TESLA_CLKSTCTRL_OFFSET 0x0000
158#define OMAP4430_CM_TESLA_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0000)
159#define OMAP4_CM_TESLA_STATICDEP_OFFSET 0x0004
160#define OMAP4430_CM_TESLA_STATICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0004)
161#define OMAP4_CM_TESLA_DYNAMICDEP_OFFSET 0x0008
162#define OMAP4430_CM_TESLA_DYNAMICDEP OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0008)
163#define OMAP4_CM_TESLA_TESLA_CLKCTRL_OFFSET 0x0020
164#define OMAP4430_CM_TESLA_TESLA_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_TESLA_MOD, 0x0020)
165
166/* CM1.ABE_CM1 register offsets */
167#define OMAP4_CM1_ABE_CLKSTCTRL_OFFSET 0x0000
168#define OMAP4430_CM1_ABE_CLKSTCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0000)
169#define OMAP4_CM1_ABE_L4ABE_CLKCTRL_OFFSET 0x0020
170#define OMAP4430_CM1_ABE_L4ABE_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0020)
171#define OMAP4_CM1_ABE_AESS_CLKCTRL_OFFSET 0x0028
172#define OMAP4430_CM1_ABE_AESS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0028)
173#define OMAP4_CM1_ABE_PDM_CLKCTRL_OFFSET 0x0030
174#define OMAP4430_CM1_ABE_PDM_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0030)
175#define OMAP4_CM1_ABE_DMIC_CLKCTRL_OFFSET 0x0038
176#define OMAP4430_CM1_ABE_DMIC_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0038)
177#define OMAP4_CM1_ABE_MCASP_CLKCTRL_OFFSET 0x0040
178#define OMAP4430_CM1_ABE_MCASP_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0040)
179#define OMAP4_CM1_ABE_MCBSP1_CLKCTRL_OFFSET 0x0048
180#define OMAP4430_CM1_ABE_MCBSP1_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0048)
181#define OMAP4_CM1_ABE_MCBSP2_CLKCTRL_OFFSET 0x0050
182#define OMAP4430_CM1_ABE_MCBSP2_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0050)
183#define OMAP4_CM1_ABE_MCBSP3_CLKCTRL_OFFSET 0x0058
184#define OMAP4430_CM1_ABE_MCBSP3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0058)
185#define OMAP4_CM1_ABE_SLIMBUS_CLKCTRL_OFFSET 0x0060
186#define OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0060)
187#define OMAP4_CM1_ABE_TIMER5_CLKCTRL_OFFSET 0x0068
188#define OMAP4430_CM1_ABE_TIMER5_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0068)
189#define OMAP4_CM1_ABE_TIMER6_CLKCTRL_OFFSET 0x0070
190#define OMAP4430_CM1_ABE_TIMER6_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0070)
191#define OMAP4_CM1_ABE_TIMER7_CLKCTRL_OFFSET 0x0078
192#define OMAP4430_CM1_ABE_TIMER7_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0078)
193#define OMAP4_CM1_ABE_TIMER8_CLKCTRL_OFFSET 0x0080
194#define OMAP4430_CM1_ABE_TIMER8_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0080)
195#define OMAP4_CM1_ABE_WDT3_CLKCTRL_OFFSET 0x0088
196#define OMAP4430_CM1_ABE_WDT3_CLKCTRL OMAP44XX_CM1_REGADDR(OMAP4430_CM1_ABE_MOD, 0x0088)
197
198/* CM2 */
199
200/* CM2.OCP_SOCKET_CM2 register offsets */
201#define OMAP4_REVISION_CM2_OFFSET 0x0000
202#define OMAP4430_REVISION_CM2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_MOD, 0x0000)
203#define OMAP4_CM_CM2_PROFILING_CLKCTRL_OFFSET 0x0040
204#define OMAP4430_CM_CM2_PROFILING_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_OCP_SOCKET_MOD, 0x0040)
205
206/* CM2.CKGEN_CM2 register offsets */
207#define OMAP4_CM_CLKSEL_DUCATI_ISS_ROOT_OFFSET 0x0000
208#define OMAP4430_CM_CLKSEL_DUCATI_ISS_ROOT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0000)
209#define OMAP4_CM_CLKSEL_USB_60MHZ_OFFSET 0x0004
210#define OMAP4430_CM_CLKSEL_USB_60MHZ OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0004)
211#define OMAP4_CM_SCALE_FCLK_OFFSET 0x0008
212#define OMAP4430_CM_SCALE_FCLK OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0008)
213#define OMAP4_CM_CORE_DVFS_PERF1_OFFSET 0x0010
214#define OMAP4430_CM_CORE_DVFS_PERF1 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0010)
215#define OMAP4_CM_CORE_DVFS_PERF2_OFFSET 0x0014
216#define OMAP4430_CM_CORE_DVFS_PERF2 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0014)
217#define OMAP4_CM_CORE_DVFS_PERF3_OFFSET 0x0018
218#define OMAP4430_CM_CORE_DVFS_PERF3 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0018)
219#define OMAP4_CM_CORE_DVFS_PERF4_OFFSET 0x001c
220#define OMAP4430_CM_CORE_DVFS_PERF4 OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x001c)
221#define OMAP4_CM_CORE_DVFS_CURRENT_OFFSET 0x0024
222#define OMAP4430_CM_CORE_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0024)
223#define OMAP4_CM_IVA_DVFS_PERF_TESLA_OFFSET 0x0028
224#define OMAP4430_CM_IVA_DVFS_PERF_TESLA OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0028)
225#define OMAP4_CM_IVA_DVFS_PERF_IVAHD_OFFSET 0x002c
226#define OMAP4430_CM_IVA_DVFS_PERF_IVAHD OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x002c)
227#define OMAP4_CM_IVA_DVFS_PERF_ABE_OFFSET 0x0030
228#define OMAP4430_CM_IVA_DVFS_PERF_ABE OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0030)
229#define OMAP4_CM_IVA_DVFS_CURRENT_OFFSET 0x0038
230#define OMAP4430_CM_IVA_DVFS_CURRENT OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0038)
231#define OMAP4_CM_CLKMODE_DPLL_PER_OFFSET 0x0040
232#define OMAP4430_CM_CLKMODE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0040)
233#define OMAP4_CM_IDLEST_DPLL_PER_OFFSET 0x0044
234#define OMAP4430_CM_IDLEST_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0044)
235#define OMAP4_CM_AUTOIDLE_DPLL_PER_OFFSET 0x0048
236#define OMAP4430_CM_AUTOIDLE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0048)
237#define OMAP4_CM_CLKSEL_DPLL_PER_OFFSET 0x004c
238#define OMAP4430_CM_CLKSEL_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x004c)
239#define OMAP4_CM_DIV_M2_DPLL_PER_OFFSET 0x0050
240#define OMAP4430_CM_DIV_M2_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0050)
241#define OMAP4_CM_DIV_M3_DPLL_PER_OFFSET 0x0054
242#define OMAP4430_CM_DIV_M3_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0054)
243#define OMAP4_CM_DIV_M4_DPLL_PER_OFFSET 0x0058
244#define OMAP4430_CM_DIV_M4_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0058)
245#define OMAP4_CM_DIV_M5_DPLL_PER_OFFSET 0x005c
246#define OMAP4430_CM_DIV_M5_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x005c)
247#define OMAP4_CM_DIV_M6_DPLL_PER_OFFSET 0x0060
248#define OMAP4430_CM_DIV_M6_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0060)
249#define OMAP4_CM_DIV_M7_DPLL_PER_OFFSET 0x0064
250#define OMAP4430_CM_DIV_M7_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0064)
251#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_PER_OFFSET 0x0068
252#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0068)
253#define OMAP4_CM_SSC_MODFREQDIV_DPLL_PER_OFFSET 0x006c
254#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x006c)
255#define OMAP4_CM_EMU_OVERRIDE_DPLL_PER_OFFSET 0x0070
256#define OMAP4430_CM_EMU_OVERRIDE_DPLL_PER OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0070)
257#define OMAP4_CM_CLKMODE_DPLL_USB_OFFSET 0x0080
258#define OMAP4430_CM_CLKMODE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0080)
259#define OMAP4_CM_IDLEST_DPLL_USB_OFFSET 0x0084
260#define OMAP4430_CM_IDLEST_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0084)
261#define OMAP4_CM_AUTOIDLE_DPLL_USB_OFFSET 0x0088
262#define OMAP4430_CM_AUTOIDLE_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0088)
263#define OMAP4_CM_CLKSEL_DPLL_USB_OFFSET 0x008c
264#define OMAP4430_CM_CLKSEL_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x008c)
265#define OMAP4_CM_DIV_M2_DPLL_USB_OFFSET 0x0090
266#define OMAP4430_CM_DIV_M2_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x0090)
267#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_USB_OFFSET 0x00a8
268#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00a8)
269#define OMAP4_CM_SSC_MODFREQDIV_DPLL_USB_OFFSET 0x00ac
270#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00ac)
271#define OMAP4_CM_CLKDCOLDO_DPLL_USB_OFFSET 0x00b4
272#define OMAP4430_CM_CLKDCOLDO_DPLL_USB OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00b4)
273#define OMAP4_CM_CLKMODE_DPLL_UNIPRO_OFFSET 0x00c0
274#define OMAP4430_CM_CLKMODE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00c0)
275#define OMAP4_CM_IDLEST_DPLL_UNIPRO_OFFSET 0x00c4
276#define OMAP4430_CM_IDLEST_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00c4)
277#define OMAP4_CM_AUTOIDLE_DPLL_UNIPRO_OFFSET 0x00c8
278#define OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00c8)
279#define OMAP4_CM_CLKSEL_DPLL_UNIPRO_OFFSET 0x00cc
280#define OMAP4430_CM_CLKSEL_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00cc)
281#define OMAP4_CM_DIV_M2_DPLL_UNIPRO_OFFSET 0x00d0
282#define OMAP4430_CM_DIV_M2_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00d0)
283#define OMAP4_CM_SSC_DELTAMSTEP_DPLL_UNIPRO_OFFSET 0x00e8
284#define OMAP4430_CM_SSC_DELTAMSTEP_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00e8)
285#define OMAP4_CM_SSC_MODFREQDIV_DPLL_UNIPRO_OFFSET 0x00ec
286#define OMAP4430_CM_SSC_MODFREQDIV_DPLL_UNIPRO OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CKGEN_MOD, 0x00ec)
287
288/* CM2.ALWAYS_ON_CM2 register offsets */
289#define OMAP4_CM_ALWON_CLKSTCTRL_OFFSET 0x0000
290#define OMAP4430_CM_ALWON_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0000)
291#define OMAP4_CM_ALWON_MDMINTC_CLKCTRL_OFFSET 0x0020
292#define OMAP4430_CM_ALWON_MDMINTC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0020)
293#define OMAP4_CM_ALWON_SR_MPU_CLKCTRL_OFFSET 0x0028
294#define OMAP4430_CM_ALWON_SR_MPU_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0028)
295#define OMAP4_CM_ALWON_SR_IVA_CLKCTRL_OFFSET 0x0030
296#define OMAP4430_CM_ALWON_SR_IVA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0030)
297#define OMAP4_CM_ALWON_SR_CORE_CLKCTRL_OFFSET 0x0038
298#define OMAP4430_CM_ALWON_SR_CORE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_ALWAYS_ON_MOD, 0x0038)
299
300/* CM2.CORE_CM2 register offsets */
301#define OMAP4_CM_L3_1_CLKSTCTRL_OFFSET 0x0000
302#define OMAP4430_CM_L3_1_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0000)
303#define OMAP4_CM_L3_1_DYNAMICDEP_OFFSET 0x0008
304#define OMAP4430_CM_L3_1_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0008)
305#define OMAP4_CM_L3_1_L3_1_CLKCTRL_OFFSET 0x0020
306#define OMAP4430_CM_L3_1_L3_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0020)
307#define OMAP4_CM_L3_2_CLKSTCTRL_OFFSET 0x0100
308#define OMAP4430_CM_L3_2_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0100)
309#define OMAP4_CM_L3_2_DYNAMICDEP_OFFSET 0x0108
310#define OMAP4430_CM_L3_2_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0108)
311#define OMAP4_CM_L3_2_L3_2_CLKCTRL_OFFSET 0x0120
312#define OMAP4430_CM_L3_2_L3_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0120)
313#define OMAP4_CM_L3_2_GPMC_CLKCTRL_OFFSET 0x0128
314#define OMAP4430_CM_L3_2_GPMC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0128)
315#define OMAP4_CM_L3_2_OCMC_RAM_CLKCTRL_OFFSET 0x0130
316#define OMAP4430_CM_L3_2_OCMC_RAM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0130)
317#define OMAP4_CM_DUCATI_CLKSTCTRL_OFFSET 0x0200
318#define OMAP4430_CM_DUCATI_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0200)
319#define OMAP4_CM_DUCATI_STATICDEP_OFFSET 0x0204
320#define OMAP4430_CM_DUCATI_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0204)
321#define OMAP4_CM_DUCATI_DYNAMICDEP_OFFSET 0x0208
322#define OMAP4430_CM_DUCATI_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0208)
323#define OMAP4_CM_DUCATI_DUCATI_CLKCTRL_OFFSET 0x0220
324#define OMAP4430_CM_DUCATI_DUCATI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0220)
325#define OMAP4_CM_SDMA_CLKSTCTRL_OFFSET 0x0300
326#define OMAP4430_CM_SDMA_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0300)
327#define OMAP4_CM_SDMA_STATICDEP_OFFSET 0x0304
328#define OMAP4430_CM_SDMA_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0304)
329#define OMAP4_CM_SDMA_DYNAMICDEP_OFFSET 0x0308
330#define OMAP4430_CM_SDMA_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0308)
331#define OMAP4_CM_SDMA_SDMA_CLKCTRL_OFFSET 0x0320
332#define OMAP4430_CM_SDMA_SDMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0320)
333#define OMAP4_CM_MEMIF_CLKSTCTRL_OFFSET 0x0400
334#define OMAP4430_CM_MEMIF_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0400)
335#define OMAP4_CM_MEMIF_DMM_CLKCTRL_OFFSET 0x0420
336#define OMAP4430_CM_MEMIF_DMM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0420)
337#define OMAP4_CM_MEMIF_EMIF_FW_CLKCTRL_OFFSET 0x0428
338#define OMAP4430_CM_MEMIF_EMIF_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0428)
339#define OMAP4_CM_MEMIF_EMIF_1_CLKCTRL_OFFSET 0x0430
340#define OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0430)
341#define OMAP4_CM_MEMIF_EMIF_2_CLKCTRL_OFFSET 0x0438
342#define OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0438)
343#define OMAP4_CM_MEMIF_DLL_CLKCTRL_OFFSET 0x0440
344#define OMAP4430_CM_MEMIF_DLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0440)
345#define OMAP4_CM_MEMIF_EMIF_H1_CLKCTRL_OFFSET 0x0450
346#define OMAP4430_CM_MEMIF_EMIF_H1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0450)
347#define OMAP4_CM_MEMIF_EMIF_H2_CLKCTRL_OFFSET 0x0458
348#define OMAP4430_CM_MEMIF_EMIF_H2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0458)
349#define OMAP4_CM_MEMIF_DLL_H_CLKCTRL_OFFSET 0x0460
350#define OMAP4430_CM_MEMIF_DLL_H_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0460)
351#define OMAP4_CM_D2D_CLKSTCTRL_OFFSET 0x0500
352#define OMAP4430_CM_D2D_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0500)
353#define OMAP4_CM_D2D_STATICDEP_OFFSET 0x0504
354#define OMAP4430_CM_D2D_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0504)
355#define OMAP4_CM_D2D_DYNAMICDEP_OFFSET 0x0508
356#define OMAP4430_CM_D2D_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0508)
357#define OMAP4_CM_D2D_SAD2D_CLKCTRL_OFFSET 0x0520
358#define OMAP4430_CM_D2D_SAD2D_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0520)
359#define OMAP4_CM_D2D_MODEM_ICR_CLKCTRL_OFFSET 0x0528
360#define OMAP4430_CM_D2D_MODEM_ICR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0528)
361#define OMAP4_CM_D2D_SAD2D_FW_CLKCTRL_OFFSET 0x0530
362#define OMAP4430_CM_D2D_SAD2D_FW_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0530)
363#define OMAP4_CM_L4CFG_CLKSTCTRL_OFFSET 0x0600
364#define OMAP4430_CM_L4CFG_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0600)
365#define OMAP4_CM_L4CFG_DYNAMICDEP_OFFSET 0x0608
366#define OMAP4430_CM_L4CFG_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0608)
367#define OMAP4_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET 0x0620
368#define OMAP4430_CM_L4CFG_L4_CFG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0620)
369#define OMAP4_CM_L4CFG_HW_SEM_CLKCTRL_OFFSET 0x0628
370#define OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0628)
371#define OMAP4_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET 0x0630
372#define OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0630)
373#define OMAP4_CM_L4CFG_SAR_ROM_CLKCTRL_OFFSET 0x0638
374#define OMAP4430_CM_L4CFG_SAR_ROM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0638)
375#define OMAP4_CM_L3INSTR_CLKSTCTRL_OFFSET 0x0700
376#define OMAP4430_CM_L3INSTR_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0700)
377#define OMAP4_CM_L3INSTR_L3_3_CLKCTRL_OFFSET 0x0720
378#define OMAP4430_CM_L3INSTR_L3_3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0720)
379#define OMAP4_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET 0x0728
380#define OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0728)
381#define OMAP4_CM_L3INSTR_OCP_WP1_CLKCTRL_OFFSET 0x0740
382#define OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CORE_MOD, 0x0740)
383
384/* CM2.IVAHD_CM2 register offsets */
385#define OMAP4_CM_IVAHD_CLKSTCTRL_OFFSET 0x0000
386#define OMAP4430_CM_IVAHD_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0000)
387#define OMAP4_CM_IVAHD_STATICDEP_OFFSET 0x0004
388#define OMAP4430_CM_IVAHD_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0004)
389#define OMAP4_CM_IVAHD_DYNAMICDEP_OFFSET 0x0008
390#define OMAP4430_CM_IVAHD_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0008)
391#define OMAP4_CM_IVAHD_IVAHD_CLKCTRL_OFFSET 0x0020
392#define OMAP4430_CM_IVAHD_IVAHD_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0020)
393#define OMAP4_CM_IVAHD_SL2_CLKCTRL_OFFSET 0x0028
394#define OMAP4430_CM_IVAHD_SL2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_IVAHD_MOD, 0x0028)
395
396/* CM2.CAM_CM2 register offsets */
397#define OMAP4_CM_CAM_CLKSTCTRL_OFFSET 0x0000
398#define OMAP4430_CM_CAM_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0000)
399#define OMAP4_CM_CAM_STATICDEP_OFFSET 0x0004
400#define OMAP4430_CM_CAM_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0004)
401#define OMAP4_CM_CAM_DYNAMICDEP_OFFSET 0x0008
402#define OMAP4430_CM_CAM_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0008)
403#define OMAP4_CM_CAM_ISS_CLKCTRL_OFFSET 0x0020
404#define OMAP4430_CM_CAM_ISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0020)
405#define OMAP4_CM_CAM_FDIF_CLKCTRL_OFFSET 0x0028
406#define OMAP4430_CM_CAM_FDIF_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CAM_MOD, 0x0028)
407 19
408/* CM2.DSS_CM2 register offsets */ 20#include "prcm-common.h"
409#define OMAP4_CM_DSS_CLKSTCTRL_OFFSET 0x0000 21#include "cm.h"
410#define OMAP4430_CM_DSS_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0000)
411#define OMAP4_CM_DSS_STATICDEP_OFFSET 0x0004
412#define OMAP4430_CM_DSS_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0004)
413#define OMAP4_CM_DSS_DYNAMICDEP_OFFSET 0x0008
414#define OMAP4430_CM_DSS_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0008)
415#define OMAP4_CM_DSS_DSS_CLKCTRL_OFFSET 0x0020
416#define OMAP4430_CM_DSS_DSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0020)
417#define OMAP4_CM_DSS_DEISS_CLKCTRL_OFFSET 0x0028
418#define OMAP4430_CM_DSS_DEISS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_DSS_MOD, 0x0028)
419 22
420/* CM2.GFX_CM2 register offsets */ 23#define OMAP4_CM_CLKSTCTRL 0x0000
421#define OMAP4_CM_GFX_CLKSTCTRL_OFFSET 0x0000 24#define OMAP4_CM_STATICDEP 0x0004
422#define OMAP4430_CM_GFX_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0000)
423#define OMAP4_CM_GFX_STATICDEP_OFFSET 0x0004
424#define OMAP4430_CM_GFX_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0004)
425#define OMAP4_CM_GFX_DYNAMICDEP_OFFSET 0x0008
426#define OMAP4430_CM_GFX_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0008)
427#define OMAP4_CM_GFX_GFX_CLKCTRL_OFFSET 0x0020
428#define OMAP4430_CM_GFX_GFX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_GFX_MOD, 0x0020)
429 25
430/* CM2.L3INIT_CM2 register offsets */ 26/* Function prototypes */
431#define OMAP4_CM_L3INIT_CLKSTCTRL_OFFSET 0x0000 27# ifndef __ASSEMBLER__
432#define OMAP4430_CM_L3INIT_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0000)
433#define OMAP4_CM_L3INIT_STATICDEP_OFFSET 0x0004
434#define OMAP4430_CM_L3INIT_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0004)
435#define OMAP4_CM_L3INIT_DYNAMICDEP_OFFSET 0x0008
436#define OMAP4430_CM_L3INIT_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0008)
437#define OMAP4_CM_L3INIT_MMC1_CLKCTRL_OFFSET 0x0028
438#define OMAP4430_CM_L3INIT_MMC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0028)
439#define OMAP4_CM_L3INIT_MMC2_CLKCTRL_OFFSET 0x0030
440#define OMAP4430_CM_L3INIT_MMC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0030)
441#define OMAP4_CM_L3INIT_HSI_CLKCTRL_OFFSET 0x0038
442#define OMAP4430_CM_L3INIT_HSI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0038)
443#define OMAP4_CM_L3INIT_UNIPRO1_CLKCTRL_OFFSET 0x0040
444#define OMAP4430_CM_L3INIT_UNIPRO1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0040)
445#define OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET 0x0058
446#define OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0058)
447#define OMAP4_CM_L3INIT_USB_OTG_CLKCTRL_OFFSET 0x0060
448#define OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0060)
449#define OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET 0x0068
450#define OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0068)
451#define OMAP4_CM_L3INIT_P1500_CLKCTRL_OFFSET 0x0078
452#define OMAP4430_CM_L3INIT_P1500_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0078)
453#define OMAP4_CM_L3INIT_EMAC_CLKCTRL_OFFSET 0x0080
454#define OMAP4430_CM_L3INIT_EMAC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0080)
455#define OMAP4_CM_L3INIT_SATA_CLKCTRL_OFFSET 0x0088
456#define OMAP4430_CM_L3INIT_SATA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0088)
457#define OMAP4_CM_L3INIT_TPPSS_CLKCTRL_OFFSET 0x0090
458#define OMAP4430_CM_L3INIT_TPPSS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0090)
459#define OMAP4_CM_L3INIT_PCIESS_CLKCTRL_OFFSET 0x0098
460#define OMAP4430_CM_L3INIT_PCIESS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x0098)
461#define OMAP4_CM_L3INIT_CCPTX_CLKCTRL_OFFSET 0x00a8
462#define OMAP4430_CM_L3INIT_CCPTX_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00a8)
463#define OMAP4_CM_L3INIT_XHPI_CLKCTRL_OFFSET 0x00c0
464#define OMAP4430_CM_L3INIT_XHPI_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00c0)
465#define OMAP4_CM_L3INIT_MMC6_CLKCTRL_OFFSET 0x00c8
466#define OMAP4430_CM_L3INIT_MMC6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00c8)
467#define OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET 0x00d0
468#define OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00d0)
469#define OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET 0x00e0
470#define OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L3INIT_MOD, 0x00e0)
471 28
472/* CM2.L4PER_CM2 register offsets */ 29extern int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg);
473#define OMAP4_CM_L4PER_CLKSTCTRL_OFFSET 0x0000
474#define OMAP4430_CM_L4PER_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0000)
475#define OMAP4_CM_L4PER_DYNAMICDEP_OFFSET 0x0008
476#define OMAP4430_CM_L4PER_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0008)
477#define OMAP4_CM_L4PER_ADC_CLKCTRL_OFFSET 0x0020
478#define OMAP4430_CM_L4PER_ADC_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0020)
479#define OMAP4_CM_L4PER_DMTIMER10_CLKCTRL_OFFSET 0x0028
480#define OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0028)
481#define OMAP4_CM_L4PER_DMTIMER11_CLKCTRL_OFFSET 0x0030
482#define OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0030)
483#define OMAP4_CM_L4PER_DMTIMER2_CLKCTRL_OFFSET 0x0038
484#define OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0038)
485#define OMAP4_CM_L4PER_DMTIMER3_CLKCTRL_OFFSET 0x0040
486#define OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0040)
487#define OMAP4_CM_L4PER_DMTIMER4_CLKCTRL_OFFSET 0x0048
488#define OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0048)
489#define OMAP4_CM_L4PER_DMTIMER9_CLKCTRL_OFFSET 0x0050
490#define OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0050)
491#define OMAP4_CM_L4PER_ELM_CLKCTRL_OFFSET 0x0058
492#define OMAP4430_CM_L4PER_ELM_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0058)
493#define OMAP4_CM_L4PER_GPIO2_CLKCTRL_OFFSET 0x0060
494#define OMAP4430_CM_L4PER_GPIO2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0060)
495#define OMAP4_CM_L4PER_GPIO3_CLKCTRL_OFFSET 0x0068
496#define OMAP4430_CM_L4PER_GPIO3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0068)
497#define OMAP4_CM_L4PER_GPIO4_CLKCTRL_OFFSET 0x0070
498#define OMAP4430_CM_L4PER_GPIO4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0070)
499#define OMAP4_CM_L4PER_GPIO5_CLKCTRL_OFFSET 0x0078
500#define OMAP4430_CM_L4PER_GPIO5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0078)
501#define OMAP4_CM_L4PER_GPIO6_CLKCTRL_OFFSET 0x0080
502#define OMAP4430_CM_L4PER_GPIO6_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0080)
503#define OMAP4_CM_L4PER_HDQ1W_CLKCTRL_OFFSET 0x0088
504#define OMAP4430_CM_L4PER_HDQ1W_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0088)
505#define OMAP4_CM_L4PER_HECC1_CLKCTRL_OFFSET 0x0090
506#define OMAP4430_CM_L4PER_HECC1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0090)
507#define OMAP4_CM_L4PER_HECC2_CLKCTRL_OFFSET 0x0098
508#define OMAP4430_CM_L4PER_HECC2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0098)
509#define OMAP4_CM_L4PER_I2C1_CLKCTRL_OFFSET 0x00a0
510#define OMAP4430_CM_L4PER_I2C1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00a0)
511#define OMAP4_CM_L4PER_I2C2_CLKCTRL_OFFSET 0x00a8
512#define OMAP4430_CM_L4PER_I2C2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00a8)
513#define OMAP4_CM_L4PER_I2C3_CLKCTRL_OFFSET 0x00b0
514#define OMAP4430_CM_L4PER_I2C3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00b0)
515#define OMAP4_CM_L4PER_I2C4_CLKCTRL_OFFSET 0x00b8
516#define OMAP4430_CM_L4PER_I2C4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00b8)
517#define OMAP4_CM_L4PER_L4PER_CLKCTRL_OFFSET 0x00c0
518#define OMAP4430_CM_L4PER_L4PER_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00c0)
519#define OMAP4_CM_L4PER_MCASP2_CLKCTRL_OFFSET 0x00d0
520#define OMAP4430_CM_L4PER_MCASP2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00d0)
521#define OMAP4_CM_L4PER_MCASP3_CLKCTRL_OFFSET 0x00d8
522#define OMAP4430_CM_L4PER_MCASP3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00d8)
523#define OMAP4_CM_L4PER_MCBSP4_CLKCTRL_OFFSET 0x00e0
524#define OMAP4430_CM_L4PER_MCBSP4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00e0)
525#define OMAP4_CM_L4PER_MGATE_CLKCTRL_OFFSET 0x00e8
526#define OMAP4430_CM_L4PER_MGATE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00e8)
527#define OMAP4_CM_L4PER_MCSPI1_CLKCTRL_OFFSET 0x00f0
528#define OMAP4430_CM_L4PER_MCSPI1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00f0)
529#define OMAP4_CM_L4PER_MCSPI2_CLKCTRL_OFFSET 0x00f8
530#define OMAP4430_CM_L4PER_MCSPI2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x00f8)
531#define OMAP4_CM_L4PER_MCSPI3_CLKCTRL_OFFSET 0x0100
532#define OMAP4430_CM_L4PER_MCSPI3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0100)
533#define OMAP4_CM_L4PER_MCSPI4_CLKCTRL_OFFSET 0x0108
534#define OMAP4430_CM_L4PER_MCSPI4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0108)
535#define OMAP4_CM_L4PER_MMCSD3_CLKCTRL_OFFSET 0x0120
536#define OMAP4430_CM_L4PER_MMCSD3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0120)
537#define OMAP4_CM_L4PER_MMCSD4_CLKCTRL_OFFSET 0x0128
538#define OMAP4430_CM_L4PER_MMCSD4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0128)
539#define OMAP4_CM_L4PER_MSPROHG_CLKCTRL_OFFSET 0x0130
540#define OMAP4430_CM_L4PER_MSPROHG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0130)
541#define OMAP4_CM_L4PER_SLIMBUS2_CLKCTRL_OFFSET 0x0138
542#define OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0138)
543#define OMAP4_CM_L4PER_UART1_CLKCTRL_OFFSET 0x0140
544#define OMAP4430_CM_L4PER_UART1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0140)
545#define OMAP4_CM_L4PER_UART2_CLKCTRL_OFFSET 0x0148
546#define OMAP4430_CM_L4PER_UART2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0148)
547#define OMAP4_CM_L4PER_UART3_CLKCTRL_OFFSET 0x0150
548#define OMAP4430_CM_L4PER_UART3_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0150)
549#define OMAP4_CM_L4PER_UART4_CLKCTRL_OFFSET 0x0158
550#define OMAP4430_CM_L4PER_UART4_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0158)
551#define OMAP4_CM_L4PER_MMCSD5_CLKCTRL_OFFSET 0x0160
552#define OMAP4430_CM_L4PER_MMCSD5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0160)
553#define OMAP4_CM_L4PER_I2C5_CLKCTRL_OFFSET 0x0168
554#define OMAP4430_CM_L4PER_I2C5_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0168)
555#define OMAP4_CM_L4SEC_CLKSTCTRL_OFFSET 0x0180
556#define OMAP4430_CM_L4SEC_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0180)
557#define OMAP4_CM_L4SEC_STATICDEP_OFFSET 0x0184
558#define OMAP4430_CM_L4SEC_STATICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0184)
559#define OMAP4_CM_L4SEC_DYNAMICDEP_OFFSET 0x0188
560#define OMAP4430_CM_L4SEC_DYNAMICDEP OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x0188)
561#define OMAP4_CM_L4SEC_AES1_CLKCTRL_OFFSET 0x01a0
562#define OMAP4430_CM_L4SEC_AES1_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01a0)
563#define OMAP4_CM_L4SEC_AES2_CLKCTRL_OFFSET 0x01a8
564#define OMAP4430_CM_L4SEC_AES2_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01a8)
565#define OMAP4_CM_L4SEC_DES3DES_CLKCTRL_OFFSET 0x01b0
566#define OMAP4430_CM_L4SEC_DES3DES_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01b0)
567#define OMAP4_CM_L4SEC_PKAEIP29_CLKCTRL_OFFSET 0x01b8
568#define OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01b8)
569#define OMAP4_CM_L4SEC_RNG_CLKCTRL_OFFSET 0x01c0
570#define OMAP4430_CM_L4SEC_RNG_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01c0)
571#define OMAP4_CM_L4SEC_SHA2MD51_CLKCTRL_OFFSET 0x01c8
572#define OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01c8)
573#define OMAP4_CM_L4SEC_CRYPTODMA_CLKCTRL_OFFSET 0x01d8
574#define OMAP4430_CM_L4SEC_CRYPTODMA_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_L4PER_MOD, 0x01d8)
575 30
576/* CM2.CEFUSE_CM2 register offsets */ 31# endif
577#define OMAP4_CM_CEFUSE_CLKSTCTRL_OFFSET 0x0000
578#define OMAP4430_CM_CEFUSE_CLKSTCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_MOD, 0x0000)
579#define OMAP4_CM_CEFUSE_CEFUSE_CLKCTRL_OFFSET 0x0020
580#define OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL OMAP44XX_CM2_REGADDR(OMAP4430_CM2_CEFUSE_MOD, 0x0020)
581#endif 32#endif
diff --git a/arch/arm/mach-omap2/cm4xxx.c b/arch/arm/mach-omap2/cm4xxx.c
deleted file mode 100644
index b101091e95d6..000000000000
--- a/arch/arm/mach-omap2/cm4xxx.c
+++ /dev/null
@@ -1,61 +0,0 @@
1/*
2 * OMAP4 CM module functions
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/module.h>
14#include <linux/types.h>
15#include <linux/delay.h>
16#include <linux/spinlock.h>
17#include <linux/list.h>
18#include <linux/errno.h>
19#include <linux/err.h>
20#include <linux/io.h>
21
22#include <asm/atomic.h>
23
24#include <plat/common.h>
25
26#include "cm.h"
27#include "cm-regbits-44xx.h"
28
29/**
30 * omap4_cm_wait_module_ready - wait for a module to be in 'func' state
31 * @clkctrl_reg: CLKCTRL module address
32 *
33 * Wait for the module IDLEST to be functional. If the idle state is in any
34 * the non functional state (trans, idle or disabled), module and thus the
35 * sysconfig cannot be accessed and will probably lead to an "imprecise
36 * external abort"
37 *
38 * Module idle state:
39 * 0x0 func: Module is fully functional, including OCP
40 * 0x1 trans: Module is performing transition: wakeup, or sleep, or sleep
41 * abortion
42 * 0x2 idle: Module is in Idle mode (only OCP part). It is functional if
43 * using separate functional clock
44 * 0x3 disabled: Module is disabled and cannot be accessed
45 *
46 * TODO: Need to handle module accessible in idle state
47 */
48int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg)
49{
50 int i = 0;
51
52 if (!clkctrl_reg)
53 return 0;
54
55 omap_test_timeout(((__raw_readl(clkctrl_reg) &
56 OMAP4430_IDLEST_MASK) == 0),
57 MAX_MODULE_READY_TIME, i);
58
59 return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
60}
61
diff --git a/arch/arm/mach-omap2/cminst44xx.c b/arch/arm/mach-omap2/cminst44xx.c
new file mode 100644
index 000000000000..a482bfa0a954
--- /dev/null
+++ b/arch/arm/mach-omap2/cminst44xx.c
@@ -0,0 +1,235 @@
1/*
2 * OMAP4 CM instance functions
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This is needed since CM instances can be in the PRM, PRCM_MPU, CM1,
12 * or CM2 hardware modules. For example, the EMU_CM CM instance is in
13 * the PRM hardware module. What a mess...
14 */
15
16#include <linux/kernel.h>
17#include <linux/types.h>
18#include <linux/errno.h>
19#include <linux/err.h>
20#include <linux/io.h>
21
22#include <plat/common.h>
23
24#include "cm.h"
25#include "cm1_44xx.h"
26#include "cm2_44xx.h"
27#include "cm44xx.h"
28#include "cminst44xx.h"
29#include "cm-regbits-34xx.h"
30#include "cm-regbits-44xx.h"
31#include "prcm44xx.h"
32#include "prm44xx.h"
33#include "prcm_mpu44xx.h"
34
35static u32 _cm_bases[OMAP4_MAX_PRCM_PARTITIONS] = {
36 [OMAP4430_INVALID_PRCM_PARTITION] = 0,
37 [OMAP4430_PRM_PARTITION] = OMAP4430_PRM_BASE,
38 [OMAP4430_CM1_PARTITION] = OMAP4430_CM1_BASE,
39 [OMAP4430_CM2_PARTITION] = OMAP4430_CM2_BASE,
40 [OMAP4430_SCRM_PARTITION] = 0,
41 [OMAP4430_PRCM_MPU_PARTITION] = OMAP4430_PRCM_MPU_BASE,
42};
43
44/* Read a register in a CM instance */
45u32 omap4_cminst_read_inst_reg(u8 part, s16 inst, u16 idx)
46{
47 BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
48 part == OMAP4430_INVALID_PRCM_PARTITION ||
49 !_cm_bases[part]);
50 return __raw_readl(OMAP2_L4_IO_ADDRESS(_cm_bases[part] + inst + idx));
51}
52
53/* Write into a register in a CM instance */
54void omap4_cminst_write_inst_reg(u32 val, u8 part, s16 inst, u16 idx)
55{
56 BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
57 part == OMAP4430_INVALID_PRCM_PARTITION ||
58 !_cm_bases[part]);
59 __raw_writel(val, OMAP2_L4_IO_ADDRESS(_cm_bases[part] + inst + idx));
60}
61
62/* Read-modify-write a register in CM1. Caller must lock */
63u32 omap4_cminst_rmw_inst_reg_bits(u32 mask, u32 bits, u8 part, s16 inst,
64 s16 idx)
65{
66 u32 v;
67
68 v = omap4_cminst_read_inst_reg(part, inst, idx);
69 v &= ~mask;
70 v |= bits;
71 omap4_cminst_write_inst_reg(v, part, inst, idx);
72
73 return v;
74}
75
76u32 omap4_cminst_set_inst_reg_bits(u32 bits, u8 part, s16 inst, s16 idx)
77{
78 return omap4_cminst_rmw_inst_reg_bits(bits, bits, part, inst, idx);
79}
80
81u32 omap4_cminst_clear_inst_reg_bits(u32 bits, u8 part, s16 inst, s16 idx)
82{
83 return omap4_cminst_rmw_inst_reg_bits(bits, 0x0, part, inst, idx);
84}
85
86u32 omap4_cminst_read_inst_reg_bits(u8 part, u16 inst, s16 idx, u32 mask)
87{
88 u32 v;
89
90 v = omap4_cminst_read_inst_reg(part, inst, idx);
91 v &= mask;
92 v >>= __ffs(mask);
93
94 return v;
95}
96
97/*
98 *
99 */
100
101/**
102 * _clktrctrl_write - write @c to a CM_CLKSTCTRL.CLKTRCTRL register bitfield
103 * @c: CLKTRCTRL register bitfield (LSB = bit 0, i.e., unshifted)
104 * @part: PRCM partition ID that the CM_CLKSTCTRL register exists in
105 * @inst: CM instance register offset (*_INST macro)
106 * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
107 *
108 * @c must be the unshifted value for CLKTRCTRL - i.e., this function
109 * will handle the shift itself.
110 */
111static void _clktrctrl_write(u8 c, u8 part, s16 inst, u16 cdoffs)
112{
113 u32 v;
114
115 v = omap4_cminst_read_inst_reg(part, inst, cdoffs + OMAP4_CM_CLKSTCTRL);
116 v &= ~OMAP4430_CLKTRCTRL_MASK;
117 v |= c << OMAP4430_CLKTRCTRL_SHIFT;
118 omap4_cminst_write_inst_reg(v, part, inst, cdoffs + OMAP4_CM_CLKSTCTRL);
119}
120
121/**
122 * omap4_cminst_is_clkdm_in_hwsup - is a clockdomain in hwsup idle mode?
123 * @part: PRCM partition ID that the CM_CLKSTCTRL register exists in
124 * @inst: CM instance register offset (*_INST macro)
125 * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
126 *
127 * Returns true if the clockdomain referred to by (@part, @inst, @cdoffs)
128 * is in hardware-supervised idle mode, or 0 otherwise.
129 */
130bool omap4_cminst_is_clkdm_in_hwsup(u8 part, s16 inst, u16 cdoffs)
131{
132 u32 v;
133
134 v = omap4_cminst_read_inst_reg(part, inst, cdoffs + OMAP4_CM_CLKSTCTRL);
135 v &= OMAP4430_CLKTRCTRL_MASK;
136 v >>= OMAP4430_CLKTRCTRL_SHIFT;
137
138 return (v == OMAP34XX_CLKSTCTRL_ENABLE_AUTO) ? true : false;
139}
140
141/**
142 * omap4_cminst_clkdm_enable_hwsup - put a clockdomain in hwsup-idle mode
143 * @part: PRCM partition ID that the clockdomain registers exist in
144 * @inst: CM instance register offset (*_INST macro)
145 * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
146 *
147 * Put a clockdomain referred to by (@part, @inst, @cdoffs) into
148 * hardware-supervised idle mode. No return value.
149 */
150void omap4_cminst_clkdm_enable_hwsup(u8 part, s16 inst, u16 cdoffs)
151{
152 _clktrctrl_write(OMAP34XX_CLKSTCTRL_ENABLE_AUTO, part, inst, cdoffs);
153}
154
155/**
156 * omap4_cminst_clkdm_disable_hwsup - put a clockdomain in swsup-idle mode
157 * @part: PRCM partition ID that the clockdomain registers exist in
158 * @inst: CM instance register offset (*_INST macro)
159 * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
160 *
161 * Put a clockdomain referred to by (@part, @inst, @cdoffs) into
162 * software-supervised idle mode, i.e., controlled manually by the
163 * Linux OMAP clockdomain code. No return value.
164 */
165void omap4_cminst_clkdm_disable_hwsup(u8 part, s16 inst, u16 cdoffs)
166{
167 _clktrctrl_write(OMAP34XX_CLKSTCTRL_DISABLE_AUTO, part, inst, cdoffs);
168}
169
170/**
171 * omap4_cminst_clkdm_force_sleep - try to put a clockdomain into idle
172 * @part: PRCM partition ID that the clockdomain registers exist in
173 * @inst: CM instance register offset (*_INST macro)
174 * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
175 *
176 * Put a clockdomain referred to by (@part, @inst, @cdoffs) into idle
177 * No return value.
178 */
179void omap4_cminst_clkdm_force_sleep(u8 part, s16 inst, u16 cdoffs)
180{
181 _clktrctrl_write(OMAP34XX_CLKSTCTRL_FORCE_SLEEP, part, inst, cdoffs);
182}
183
184/**
185 * omap4_cminst_clkdm_force_sleep - try to take a clockdomain out of idle
186 * @part: PRCM partition ID that the clockdomain registers exist in
187 * @inst: CM instance register offset (*_INST macro)
188 * @cdoffs: Clockdomain register offset (*_CDOFFS macro)
189 *
190 * Take a clockdomain referred to by (@part, @inst, @cdoffs) out of idle,
191 * waking it up. No return value.
192 */
193void omap4_cminst_clkdm_force_wakeup(u8 part, s16 inst, u16 cdoffs)
194{
195 _clktrctrl_write(OMAP34XX_CLKSTCTRL_FORCE_WAKEUP, part, inst, cdoffs);
196}
197
198/*
199 *
200 */
201
202/**
203 * omap4_cm_wait_module_ready - wait for a module to be in 'func' state
204 * @clkctrl_reg: CLKCTRL module address
205 *
206 * Wait for the module IDLEST to be functional. If the idle state is in any
207 * the non functional state (trans, idle or disabled), module and thus the
208 * sysconfig cannot be accessed and will probably lead to an "imprecise
209 * external abort"
210 *
211 * Module idle state:
212 * 0x0 func: Module is fully functional, including OCP
213 * 0x1 trans: Module is performing transition: wakeup, or sleep, or sleep
214 * abortion
215 * 0x2 idle: Module is in Idle mode (only OCP part). It is functional if
216 * using separate functional clock
217 * 0x3 disabled: Module is disabled and cannot be accessed
218 *
219 */
220int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg)
221{
222 int i = 0;
223
224 if (!clkctrl_reg)
225 return 0;
226
227 omap_test_timeout((
228 ((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) == 0) ||
229 (((__raw_readl(clkctrl_reg) & OMAP4430_IDLEST_MASK) >>
230 OMAP4430_IDLEST_SHIFT) == 0x2)),
231 MAX_MODULE_READY_TIME, i);
232
233 return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;
234}
235
diff --git a/arch/arm/mach-omap2/cminst44xx.h b/arch/arm/mach-omap2/cminst44xx.h
new file mode 100644
index 000000000000..2b32c181a2ee
--- /dev/null
+++ b/arch/arm/mach-omap2/cminst44xx.h
@@ -0,0 +1,37 @@
1/*
2 * OMAP4 Clock Management (CM) function prototypes
3 *
4 * Copyright (C) 2010 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#ifndef __ARCH_ASM_MACH_OMAP2_CMINST44XX_H
12#define __ARCH_ASM_MACH_OMAP2_CMINST44XX_H
13
14extern bool omap4_cminst_is_clkdm_in_hwsup(u8 part, s16 inst, u16 cdoffs);
15extern void omap4_cminst_clkdm_enable_hwsup(u8 part, s16 inst, u16 cdoffs);
16extern void omap4_cminst_clkdm_disable_hwsup(u8 part, s16 inst, u16 cdoffs);
17extern void omap4_cminst_clkdm_force_sleep(u8 part, s16 inst, u16 cdoffs);
18extern void omap4_cminst_clkdm_force_wakeup(u8 part, s16 inst, u16 cdoffs);
19
20/*
21 * In an ideal world, we would not export these low-level functions,
22 * but this will probably take some time to fix properly
23 */
24extern u32 omap4_cminst_read_inst_reg(u8 part, s16 inst, u16 idx);
25extern void omap4_cminst_write_inst_reg(u32 val, u8 part, s16 inst, u16 idx);
26extern u32 omap4_cminst_rmw_inst_reg_bits(u32 mask, u32 bits, u8 part,
27 s16 inst, s16 idx);
28extern u32 omap4_cminst_set_inst_reg_bits(u32 bits, u8 part, s16 inst,
29 s16 idx);
30extern u32 omap4_cminst_clear_inst_reg_bits(u32 bits, u8 part, s16 inst,
31 s16 idx);
32extern u32 omap4_cminst_read_inst_reg_bits(u8 part, u16 inst, s16 idx,
33 u32 mask);
34
35extern int omap4_cm_wait_module_ready(void __iomem *clkctrl_reg);
36
37#endif
diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c
new file mode 100644
index 000000000000..94ccf464677b
--- /dev/null
+++ b/arch/arm/mach-omap2/common-board-devices.c
@@ -0,0 +1,163 @@
1/*
2 * common-board-devices.c
3 *
4 * Copyright (C) 2011 CompuLab, Ltd.
5 * Author: Mike Rapoport <mike@compulab.co.il>
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * version 2 as published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19 * 02110-1301 USA
20 *
21 */
22
23#include <linux/i2c.h>
24#include <linux/i2c/twl.h>
25
26#include <linux/gpio.h>
27#include <linux/spi/spi.h>
28#include <linux/spi/ads7846.h>
29
30#include <plat/i2c.h>
31#include <plat/mcspi.h>
32#include <plat/nand.h>
33
34#include "common-board-devices.h"
35
36static struct i2c_board_info __initdata pmic_i2c_board_info = {
37 .addr = 0x48,
38 .flags = I2C_CLIENT_WAKE,
39};
40
41void __init omap_pmic_init(int bus, u32 clkrate,
42 const char *pmic_type, int pmic_irq,
43 struct twl4030_platform_data *pmic_data)
44{
45 strncpy(pmic_i2c_board_info.type, pmic_type,
46 sizeof(pmic_i2c_board_info.type));
47 pmic_i2c_board_info.irq = pmic_irq;
48 pmic_i2c_board_info.platform_data = pmic_data;
49
50 omap_register_i2c_bus(bus, clkrate, &pmic_i2c_board_info, 1);
51}
52
53#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
54 defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
55static struct omap2_mcspi_device_config ads7846_mcspi_config = {
56 .turbo_mode = 0,
57 .single_channel = 1, /* 0: slave, 1: master */
58};
59
60static struct ads7846_platform_data ads7846_config = {
61 .x_max = 0x0fff,
62 .y_max = 0x0fff,
63 .x_plate_ohms = 180,
64 .pressure_max = 255,
65 .debounce_max = 10,
66 .debounce_tol = 3,
67 .debounce_rep = 1,
68 .gpio_pendown = -EINVAL,
69 .keep_vref_on = 1,
70};
71
72static struct spi_board_info ads7846_spi_board_info __initdata = {
73 .modalias = "ads7846",
74 .bus_num = -EINVAL,
75 .chip_select = 0,
76 .max_speed_hz = 1500000,
77 .controller_data = &ads7846_mcspi_config,
78 .irq = -EINVAL,
79 .platform_data = &ads7846_config,
80};
81
82void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
83 struct ads7846_platform_data *board_pdata)
84{
85 struct spi_board_info *spi_bi = &ads7846_spi_board_info;
86 int err;
87
88 if (board_pdata && board_pdata->get_pendown_state) {
89 err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
90 if (err) {
91 pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
92 return;
93 }
94 gpio_export(gpio_pendown, 0);
95
96 if (gpio_debounce)
97 gpio_set_debounce(gpio_pendown, gpio_debounce);
98 }
99
100 ads7846_config.gpio_pendown = gpio_pendown;
101
102 spi_bi->bus_num = bus_num;
103 spi_bi->irq = OMAP_GPIO_IRQ(gpio_pendown);
104
105 if (board_pdata)
106 spi_bi->platform_data = board_pdata;
107
108 spi_register_board_info(&ads7846_spi_board_info, 1);
109}
110#else
111void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
112 struct ads7846_platform_data *board_pdata)
113{
114}
115#endif
116
117#if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE)
118static struct omap_nand_platform_data nand_data = {
119 .dma_channel = -1, /* disable DMA in OMAP NAND driver */
120};
121
122void __init omap_nand_flash_init(int options, struct mtd_partition *parts,
123 int nr_parts)
124{
125 u8 cs = 0;
126 u8 nandcs = GPMC_CS_NUM + 1;
127
128 /* find out the chip-select on which NAND exists */
129 while (cs < GPMC_CS_NUM) {
130 u32 ret = 0;
131 ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
132
133 if ((ret & 0xC00) == 0x800) {
134 printk(KERN_INFO "Found NAND on CS%d\n", cs);
135 if (nandcs > GPMC_CS_NUM)
136 nandcs = cs;
137 }
138 cs++;
139 }
140
141 if (nandcs > GPMC_CS_NUM) {
142 printk(KERN_INFO "NAND: Unable to find configuration "
143 "in GPMC\n ");
144 return;
145 }
146
147 if (nandcs < GPMC_CS_NUM) {
148 nand_data.cs = nandcs;
149 nand_data.parts = parts;
150 nand_data.nr_parts = nr_parts;
151 nand_data.options = options;
152
153 printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
154 if (gpmc_nand_init(&nand_data) < 0)
155 printk(KERN_ERR "Unable to register NAND device\n");
156 }
157}
158#else
159void __init omap_nand_flash_init(int options, struct mtd_partition *parts,
160 int nr_parts)
161{
162}
163#endif
diff --git a/arch/arm/mach-omap2/common-board-devices.h b/arch/arm/mach-omap2/common-board-devices.h
new file mode 100644
index 000000000000..679719051df5
--- /dev/null
+++ b/arch/arm/mach-omap2/common-board-devices.h
@@ -0,0 +1,37 @@
1#ifndef __OMAP_COMMON_BOARD_DEVICES__
2#define __OMAP_COMMON_BOARD_DEVICES__
3
4#define NAND_BLOCK_SIZE SZ_128K
5
6struct twl4030_platform_data;
7struct mtd_partition;
8
9void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq,
10 struct twl4030_platform_data *pmic_data);
11
12static inline void omap2_pmic_init(const char *pmic_type,
13 struct twl4030_platform_data *pmic_data)
14{
15 omap_pmic_init(2, 2600, pmic_type, INT_24XX_SYS_NIRQ, pmic_data);
16}
17
18static inline void omap3_pmic_init(const char *pmic_type,
19 struct twl4030_platform_data *pmic_data)
20{
21 omap_pmic_init(1, 2600, pmic_type, INT_34XX_SYS_NIRQ, pmic_data);
22}
23
24static inline void omap4_pmic_init(const char *pmic_type,
25 struct twl4030_platform_data *pmic_data)
26{
27 /* Phoenix Audio IC needs I2C1 to start with 400 KHz or less */
28 omap_pmic_init(1, 400, pmic_type, OMAP44XX_IRQ_SYS_1N, pmic_data);
29}
30
31struct ads7846_platform_data;
32
33void omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
34 struct ads7846_platform_data *board_pdata);
35void omap_nand_flash_init(int opts, struct mtd_partition *parts, int n_parts);
36
37#endif /* __OMAP_COMMON_BOARD_DEVICES__ */
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c
new file mode 100644
index 000000000000..3f20cbb9967b
--- /dev/null
+++ b/arch/arm/mach-omap2/common.c
@@ -0,0 +1,142 @@
1/*
2 * linux/arch/arm/mach-omap2/common.c
3 *
4 * Code common to all OMAP2+ machines.
5 *
6 * Copyright (C) 2009 Texas Instruments
7 * Copyright (C) 2010 Nokia Corporation
8 * Tony Lindgren <tony@atomide.com>
9 * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15#include <linux/kernel.h>
16#include <linux/init.h>
17#include <linux/clk.h>
18#include <linux/io.h>
19
20#include <plat/common.h>
21#include <plat/board.h>
22#include <plat/mux.h>
23
24#include <plat/clock.h>
25
26#include "sdrc.h"
27#include "control.h"
28
29/* Global address base setup code */
30
31#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
32
33static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
34{
35 omap2_set_globals_tap(omap2_globals);
36 omap2_set_globals_sdrc(omap2_globals);
37 omap2_set_globals_control(omap2_globals);
38 omap2_set_globals_prcm(omap2_globals);
39}
40
41#endif
42
43#if defined(CONFIG_SOC_OMAP2420)
44
45static struct omap_globals omap242x_globals = {
46 .class = OMAP242X_CLASS,
47 .tap = OMAP2_L4_IO_ADDRESS(0x48014000),
48 .sdrc = OMAP2420_SDRC_BASE,
49 .sms = OMAP2420_SMS_BASE,
50 .ctrl = OMAP242X_CTRL_BASE,
51 .prm = OMAP2420_PRM_BASE,
52 .cm = OMAP2420_CM_BASE,
53};
54
55void __init omap2_set_globals_242x(void)
56{
57 __omap2_set_globals(&omap242x_globals);
58}
59#endif
60
61#if defined(CONFIG_SOC_OMAP2430)
62
63static struct omap_globals omap243x_globals = {
64 .class = OMAP243X_CLASS,
65 .tap = OMAP2_L4_IO_ADDRESS(0x4900a000),
66 .sdrc = OMAP243X_SDRC_BASE,
67 .sms = OMAP243X_SMS_BASE,
68 .ctrl = OMAP243X_CTRL_BASE,
69 .prm = OMAP2430_PRM_BASE,
70 .cm = OMAP2430_CM_BASE,
71};
72
73void __init omap2_set_globals_243x(void)
74{
75 __omap2_set_globals(&omap243x_globals);
76}
77#endif
78
79#if defined(CONFIG_ARCH_OMAP3)
80
81static struct omap_globals omap3_globals = {
82 .class = OMAP343X_CLASS,
83 .tap = OMAP2_L4_IO_ADDRESS(0x4830A000),
84 .sdrc = OMAP343X_SDRC_BASE,
85 .sms = OMAP343X_SMS_BASE,
86 .ctrl = OMAP343X_CTRL_BASE,
87 .prm = OMAP3430_PRM_BASE,
88 .cm = OMAP3430_CM_BASE,
89};
90
91void __init omap2_set_globals_3xxx(void)
92{
93 __omap2_set_globals(&omap3_globals);
94}
95
96void __init omap3_map_io(void)
97{
98 omap2_set_globals_3xxx();
99 omap34xx_map_common_io();
100}
101
102/*
103 * Adjust TAP register base such that omap3_check_revision accesses the correct
104 * TI816X register for checking device ID (it adds 0x204 to tap base while
105 * TI816X DEVICE ID register is at offset 0x600 from control base).
106 */
107#define TI816X_TAP_BASE (TI816X_CTRL_BASE + \
108 TI816X_CONTROL_DEVICE_ID - 0x204)
109
110static struct omap_globals ti816x_globals = {
111 .class = OMAP343X_CLASS,
112 .tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE),
113 .ctrl = TI816X_CTRL_BASE,
114 .prm = TI816X_PRCM_BASE,
115 .cm = TI816X_PRCM_BASE,
116};
117
118void __init omap2_set_globals_ti816x(void)
119{
120 __omap2_set_globals(&ti816x_globals);
121}
122#endif
123
124#if defined(CONFIG_ARCH_OMAP4)
125static struct omap_globals omap4_globals = {
126 .class = OMAP443X_CLASS,
127 .tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
128 .ctrl = OMAP443X_SCM_BASE,
129 .ctrl_pad = OMAP443X_CTRL_BASE,
130 .prm = OMAP4430_PRM_BASE,
131 .cm = OMAP4430_CM_BASE,
132 .cm2 = OMAP4430_CM2_BASE,
133};
134
135void __init omap2_set_globals_443x(void)
136{
137 omap2_set_globals_tap(&omap4_globals);
138 omap2_set_globals_control(&omap4_globals);
139 omap2_set_globals_prcm(&omap4_globals);
140}
141#endif
142
diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c
index a8d20eef2306..da53ba3917ca 100644
--- a/arch/arm/mach-omap2/control.c
+++ b/arch/arm/mach-omap2/control.c
@@ -16,15 +16,22 @@
16#include <linux/io.h> 16#include <linux/io.h>
17 17
18#include <plat/common.h> 18#include <plat/common.h>
19#include <plat/control.h>
20#include <plat/sdrc.h> 19#include <plat/sdrc.h>
20
21#include "cm-regbits-34xx.h" 21#include "cm-regbits-34xx.h"
22#include "prm-regbits-34xx.h" 22#include "prm-regbits-34xx.h"
23#include "cm.h" 23#include "prm2xxx_3xxx.h"
24#include "prm.h" 24#include "cm2xxx_3xxx.h"
25#include "sdrc.h" 25#include "sdrc.h"
26#include "pm.h"
27#include "control.h"
28
29/* Used by omap3_ctrl_save_padconf() */
30#define START_PADCONF_SAVE 0x2
31#define PADCONF_SAVE_DONE 0x1
26 32
27static void __iomem *omap2_ctrl_base; 33static void __iomem *omap2_ctrl_base;
34static void __iomem *omap4_ctrl_pad_base;
28 35
29#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) 36#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
30struct omap3_scratchpad { 37struct omap3_scratchpad {
@@ -131,12 +138,14 @@ struct omap3_control_regs {
131 u32 sramldo4; 138 u32 sramldo4;
132 u32 sramldo5; 139 u32 sramldo5;
133 u32 csi; 140 u32 csi;
141 u32 padconf_sys_nirq;
134}; 142};
135 143
136static struct omap3_control_regs control_context; 144static struct omap3_control_regs control_context;
137#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */ 145#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */
138 146
139#define OMAP_CTRL_REGADDR(reg) (omap2_ctrl_base + (reg)) 147#define OMAP_CTRL_REGADDR(reg) (omap2_ctrl_base + (reg))
148#define OMAP4_CTRL_PAD_REGADDR(reg) (omap4_ctrl_pad_base + (reg))
140 149
141void __init omap2_set_globals_control(struct omap_globals *omap2_globals) 150void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
142{ 151{
@@ -145,6 +154,12 @@ void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
145 omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K); 154 omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K);
146 WARN_ON(!omap2_ctrl_base); 155 WARN_ON(!omap2_ctrl_base);
147 } 156 }
157
158 /* Static mapping, never released */
159 if (omap2_globals->ctrl_pad) {
160 omap4_ctrl_pad_base = ioremap(omap2_globals->ctrl_pad, SZ_4K);
161 WARN_ON(!omap4_ctrl_pad_base);
162 }
148} 163}
149 164
150void __iomem *omap_ctrl_base_get(void) 165void __iomem *omap_ctrl_base_get(void)
@@ -182,6 +197,54 @@ void omap_ctrl_writel(u32 val, u16 offset)
182 __raw_writel(val, OMAP_CTRL_REGADDR(offset)); 197 __raw_writel(val, OMAP_CTRL_REGADDR(offset));
183} 198}
184 199
200/*
201 * On OMAP4 control pad are not addressable from control
202 * core base. So the common omap_ctrl_read/write APIs breaks
203 * Hence export separate APIs to manage the omap4 pad control
204 * registers. This APIs will work only for OMAP4
205 */
206
207u32 omap4_ctrl_pad_readl(u16 offset)
208{
209 return __raw_readl(OMAP4_CTRL_PAD_REGADDR(offset));
210}
211
212void omap4_ctrl_pad_writel(u32 val, u16 offset)
213{
214 __raw_writel(val, OMAP4_CTRL_PAD_REGADDR(offset));
215}
216
217#ifdef CONFIG_ARCH_OMAP3
218
219/**
220 * omap3_ctrl_write_boot_mode - set scratchpad boot mode for the next boot
221 * @bootmode: 8-bit value to pass to some boot code
222 *
223 * Set the bootmode in the scratchpad RAM. This is used after the
224 * system restarts. Not sure what actually uses this - it may be the
225 * bootloader, rather than the boot ROM - contrary to the preserved
226 * comment below. No return value.
227 */
228void omap3_ctrl_write_boot_mode(u8 bootmode)
229{
230 u32 l;
231
232 l = ('B' << 24) | ('M' << 16) | bootmode;
233
234 /*
235 * Reserve the first word in scratchpad for communicating
236 * with the boot ROM. A pointer to a data structure
237 * describing the boot process can be stored there,
238 * cf. OMAP34xx TRM, Initialization / Software Booting
239 * Configuration.
240 *
241 * XXX This should use some omap_ctrl_writel()-type function
242 */
243 __raw_writel(l, OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD + 4));
244}
245
246#endif
247
185#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) 248#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
186/* 249/*
187 * Clears the scratchpad contents in case of cold boot- 250 * Clears the scratchpad contents in case of cold boot-
@@ -190,31 +253,41 @@ void omap_ctrl_writel(u32 val, u16 offset)
190void omap3_clear_scratchpad_contents(void) 253void omap3_clear_scratchpad_contents(void)
191{ 254{
192 u32 max_offset = OMAP343X_SCRATCHPAD_ROM_OFFSET; 255 u32 max_offset = OMAP343X_SCRATCHPAD_ROM_OFFSET;
193 u32 *v_addr; 256 void __iomem *v_addr;
194 u32 offset = 0; 257 u32 offset = 0;
195 v_addr = OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD_ROM); 258 v_addr = OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD_ROM);
196 if (prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) & 259 if (omap2_prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) &
197 OMAP3430_GLOBAL_COLD_RST_MASK) { 260 OMAP3430_GLOBAL_COLD_RST_MASK) {
198 for ( ; offset <= max_offset; offset += 0x4) 261 for ( ; offset <= max_offset; offset += 0x4)
199 __raw_writel(0x0, (v_addr + offset)); 262 __raw_writel(0x0, (v_addr + offset));
200 prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK, 263 omap2_prm_set_mod_reg_bits(OMAP3430_GLOBAL_COLD_RST_MASK,
201 OMAP3430_GR_MOD, 264 OMAP3430_GR_MOD,
202 OMAP3_PRM_RSTST_OFFSET); 265 OMAP3_PRM_RSTST_OFFSET);
203 } 266 }
204} 267}
205 268
206/* Populate the scratchpad structure with restore structure */ 269/* Populate the scratchpad structure with restore structure */
207void omap3_save_scratchpad_contents(void) 270void omap3_save_scratchpad_contents(void)
208{ 271{
209 void * __iomem scratchpad_address; 272 void __iomem *scratchpad_address;
210 u32 arm_context_addr; 273 u32 arm_context_addr;
211 struct omap3_scratchpad scratchpad_contents; 274 struct omap3_scratchpad scratchpad_contents;
212 struct omap3_scratchpad_prcm_block prcm_block_contents; 275 struct omap3_scratchpad_prcm_block prcm_block_contents;
213 struct omap3_scratchpad_sdrc_block sdrc_block_contents; 276 struct omap3_scratchpad_sdrc_block sdrc_block_contents;
214 277
215 /* Populate the Scratchpad contents */ 278 /*
279 * Populate the Scratchpad contents
280 *
281 * The "get_*restore_pointer" functions are used to provide a
282 * physical restore address where the ROM code jumps while waking
283 * up from MPU OFF/OSWR state.
284 * The restore pointer is stored into the scratchpad.
285 */
216 scratchpad_contents.boot_config_ptr = 0x0; 286 scratchpad_contents.boot_config_ptr = 0x0;
217 if (omap_rev() != OMAP3430_REV_ES3_0 && 287 if (cpu_is_omap3630())
288 scratchpad_contents.public_restore_ptr =
289 virt_to_phys(get_omap3630_restore_pointer());
290 else if (omap_rev() != OMAP3430_REV_ES3_0 &&
218 omap_rev() != OMAP3430_REV_ES3_1) 291 omap_rev() != OMAP3430_REV_ES3_1)
219 scratchpad_contents.public_restore_ptr = 292 scratchpad_contents.public_restore_ptr =
220 virt_to_phys(get_restore_pointer()); 293 virt_to_phys(get_restore_pointer());
@@ -231,32 +304,40 @@ void omap3_save_scratchpad_contents(void)
231 scratchpad_contents.sdrc_block_offset = 0x64; 304 scratchpad_contents.sdrc_block_offset = 0x64;
232 305
233 /* Populate the PRCM block contents */ 306 /* Populate the PRCM block contents */
234 prcm_block_contents.prm_clksrc_ctrl = prm_read_mod_reg(OMAP3430_GR_MOD, 307 prcm_block_contents.prm_clksrc_ctrl =
235 OMAP3_PRM_CLKSRC_CTRL_OFFSET); 308 omap2_prm_read_mod_reg(OMAP3430_GR_MOD,
236 prcm_block_contents.prm_clksel = prm_read_mod_reg(OMAP3430_CCR_MOD, 309 OMAP3_PRM_CLKSRC_CTRL_OFFSET);
237 OMAP3_PRM_CLKSEL_OFFSET); 310 prcm_block_contents.prm_clksel =
311 omap2_prm_read_mod_reg(OMAP3430_CCR_MOD,
312 OMAP3_PRM_CLKSEL_OFFSET);
238 prcm_block_contents.cm_clksel_core = 313 prcm_block_contents.cm_clksel_core =
239 cm_read_mod_reg(CORE_MOD, CM_CLKSEL); 314 omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL);
240 prcm_block_contents.cm_clksel_wkup = 315 prcm_block_contents.cm_clksel_wkup =
241 cm_read_mod_reg(WKUP_MOD, CM_CLKSEL); 316 omap2_cm_read_mod_reg(WKUP_MOD, CM_CLKSEL);
242 prcm_block_contents.cm_clken_pll = 317 prcm_block_contents.cm_clken_pll =
243 cm_read_mod_reg(PLL_MOD, CM_CLKEN); 318 omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN);
319 /*
320 * As per erratum i671, ROM code does not respect the PER DPLL
321 * programming scheme if CM_AUTOIDLE_PLL..AUTO_PERIPH_DPLL == 1.
322 * Then, in anycase, clear these bits to avoid extra latencies.
323 */
244 prcm_block_contents.cm_autoidle_pll = 324 prcm_block_contents.cm_autoidle_pll =
245 cm_read_mod_reg(PLL_MOD, OMAP3430_CM_AUTOIDLE_PLL); 325 omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE) &
326 ~OMAP3430_AUTO_PERIPH_DPLL_MASK;
246 prcm_block_contents.cm_clksel1_pll = 327 prcm_block_contents.cm_clksel1_pll =
247 cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL1_PLL); 328 omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL1_PLL);
248 prcm_block_contents.cm_clksel2_pll = 329 prcm_block_contents.cm_clksel2_pll =
249 cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL2_PLL); 330 omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL2_PLL);
250 prcm_block_contents.cm_clksel3_pll = 331 prcm_block_contents.cm_clksel3_pll =
251 cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL3); 332 omap2_cm_read_mod_reg(PLL_MOD, OMAP3430_CM_CLKSEL3);
252 prcm_block_contents.cm_clken_pll_mpu = 333 prcm_block_contents.cm_clken_pll_mpu =
253 cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKEN_PLL); 334 omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKEN_PLL);
254 prcm_block_contents.cm_autoidle_pll_mpu = 335 prcm_block_contents.cm_autoidle_pll_mpu =
255 cm_read_mod_reg(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL); 336 omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL);
256 prcm_block_contents.cm_clksel1_pll_mpu = 337 prcm_block_contents.cm_clksel1_pll_mpu =
257 cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL); 338 omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL);
258 prcm_block_contents.cm_clksel2_pll_mpu = 339 prcm_block_contents.cm_clksel2_pll_mpu =
259 cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL); 340 omap2_cm_read_mod_reg(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL);
260 prcm_block_contents.prcm_block_size = 0x0; 341 prcm_block_contents.prcm_block_size = 0x0;
261 342
262 /* Populate the SDRC block contents */ 343 /* Populate the SDRC block contents */
@@ -389,6 +470,8 @@ void omap3_control_save_context(void)
389 control_context.sramldo4 = omap_ctrl_readl(OMAP343X_CONTROL_SRAMLDO4); 470 control_context.sramldo4 = omap_ctrl_readl(OMAP343X_CONTROL_SRAMLDO4);
390 control_context.sramldo5 = omap_ctrl_readl(OMAP343X_CONTROL_SRAMLDO5); 471 control_context.sramldo5 = omap_ctrl_readl(OMAP343X_CONTROL_SRAMLDO5);
391 control_context.csi = omap_ctrl_readl(OMAP343X_CONTROL_CSI); 472 control_context.csi = omap_ctrl_readl(OMAP343X_CONTROL_CSI);
473 control_context.padconf_sys_nirq =
474 omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_SYSNIRQ);
392 return; 475 return;
393} 476}
394 477
@@ -445,6 +528,43 @@ void omap3_control_restore_context(void)
445 omap_ctrl_writel(control_context.sramldo4, OMAP343X_CONTROL_SRAMLDO4); 528 omap_ctrl_writel(control_context.sramldo4, OMAP343X_CONTROL_SRAMLDO4);
446 omap_ctrl_writel(control_context.sramldo5, OMAP343X_CONTROL_SRAMLDO5); 529 omap_ctrl_writel(control_context.sramldo5, OMAP343X_CONTROL_SRAMLDO5);
447 omap_ctrl_writel(control_context.csi, OMAP343X_CONTROL_CSI); 530 omap_ctrl_writel(control_context.csi, OMAP343X_CONTROL_CSI);
531 omap_ctrl_writel(control_context.padconf_sys_nirq,
532 OMAP343X_CONTROL_PADCONF_SYSNIRQ);
448 return; 533 return;
449} 534}
535
536void omap3630_ctrl_disable_rta(void)
537{
538 if (!cpu_is_omap3630())
539 return;
540 omap_ctrl_writel(OMAP36XX_RTA_DISABLE, OMAP36XX_CONTROL_MEM_RTA_CTRL);
541}
542
543/**
544 * omap3_ctrl_save_padconf - save padconf registers to scratchpad RAM
545 *
546 * Tell the SCM to start saving the padconf registers, then wait for
547 * the process to complete. Returns 0 unconditionally, although it
548 * should also eventually be able to return -ETIMEDOUT, if the save
549 * does not complete.
550 *
551 * XXX This function is missing a timeout. What should it be?
552 */
553int omap3_ctrl_save_padconf(void)
554{
555 u32 cpo;
556
557 /* Save the padconf registers */
558 cpo = omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_OFF);
559 cpo |= START_PADCONF_SAVE;
560 omap_ctrl_writel(cpo, OMAP343X_CONTROL_PADCONF_OFF);
561
562 /* wait for the save to complete */
563 while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
564 & PADCONF_SAVE_DONE))
565 udelay(1);
566
567 return 0;
568}
569
450#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */ 570#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */
diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h
new file mode 100644
index 000000000000..a016c8b59e00
--- /dev/null
+++ b/arch/arm/mach-omap2/control.h
@@ -0,0 +1,412 @@
1/*
2 * arch/arm/mach-omap2/control.h
3 *
4 * OMAP2/3/4 System Control Module definitions
5 *
6 * Copyright (C) 2007-2010 Texas Instruments, Inc.
7 * Copyright (C) 2007-2008, 2010 Nokia Corporation
8 *
9 * Written by Paul Walmsley
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation.
14 */
15
16#ifndef __ARCH_ARM_MACH_OMAP2_CONTROL_H
17#define __ARCH_ARM_MACH_OMAP2_CONTROL_H
18
19#include <mach/io.h>
20#include <mach/ctrl_module_core_44xx.h>
21#include <mach/ctrl_module_wkup_44xx.h>
22#include <mach/ctrl_module_pad_core_44xx.h>
23#include <mach/ctrl_module_pad_wkup_44xx.h>
24
25#ifndef __ASSEMBLY__
26#define OMAP242X_CTRL_REGADDR(reg) \
27 OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg))
28#define OMAP243X_CTRL_REGADDR(reg) \
29 OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg))
30#define OMAP343X_CTRL_REGADDR(reg) \
31 OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg))
32#else
33#define OMAP242X_CTRL_REGADDR(reg) \
34 OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg))
35#define OMAP243X_CTRL_REGADDR(reg) \
36 OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg))
37#define OMAP343X_CTRL_REGADDR(reg) \
38 OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg))
39#endif /* __ASSEMBLY__ */
40
41/*
42 * As elsewhere, the "OMAP2_" prefix indicates that the macro is valid for
43 * OMAP24XX and OMAP34XX.
44 */
45
46/* Control submodule offsets */
47
48#define OMAP2_CONTROL_INTERFACE 0x000
49#define OMAP2_CONTROL_PADCONFS 0x030
50#define OMAP2_CONTROL_GENERAL 0x270
51#define OMAP343X_CONTROL_MEM_WKUP 0x600
52#define OMAP343X_CONTROL_PADCONFS_WKUP 0xa00
53#define OMAP343X_CONTROL_GENERAL_WKUP 0xa60
54
55/* TI816X spefic control submodules */
56#define TI816X_CONTROL_DEVCONF 0x600
57
58/* Control register offsets - read/write with omap_ctrl_{read,write}{bwl}() */
59
60#define OMAP2_CONTROL_SYSCONFIG (OMAP2_CONTROL_INTERFACE + 0x10)
61
62/* CONTROL_GENERAL register offsets common to OMAP2 & 3 */
63#define OMAP2_CONTROL_DEVCONF0 (OMAP2_CONTROL_GENERAL + 0x0004)
64#define OMAP2_CONTROL_MSUSPENDMUX_0 (OMAP2_CONTROL_GENERAL + 0x0020)
65#define OMAP2_CONTROL_MSUSPENDMUX_1 (OMAP2_CONTROL_GENERAL + 0x0024)
66#define OMAP2_CONTROL_MSUSPENDMUX_2 (OMAP2_CONTROL_GENERAL + 0x0028)
67#define OMAP2_CONTROL_MSUSPENDMUX_3 (OMAP2_CONTROL_GENERAL + 0x002c)
68#define OMAP2_CONTROL_MSUSPENDMUX_4 (OMAP2_CONTROL_GENERAL + 0x0030)
69#define OMAP2_CONTROL_MSUSPENDMUX_5 (OMAP2_CONTROL_GENERAL + 0x0034)
70#define OMAP2_CONTROL_SEC_CTRL (OMAP2_CONTROL_GENERAL + 0x0040)
71#define OMAP2_CONTROL_RPUB_KEY_H_0 (OMAP2_CONTROL_GENERAL + 0x0090)
72#define OMAP2_CONTROL_RPUB_KEY_H_1 (OMAP2_CONTROL_GENERAL + 0x0094)
73#define OMAP2_CONTROL_RPUB_KEY_H_2 (OMAP2_CONTROL_GENERAL + 0x0098)
74#define OMAP2_CONTROL_RPUB_KEY_H_3 (OMAP2_CONTROL_GENERAL + 0x009c)
75
76/* 242x-only CONTROL_GENERAL register offsets */
77#define OMAP242X_CONTROL_DEVCONF OMAP2_CONTROL_DEVCONF0 /* match TRM */
78#define OMAP242X_CONTROL_OCM_RAM_PERM (OMAP2_CONTROL_GENERAL + 0x0068)
79
80/* 243x-only CONTROL_GENERAL register offsets */
81/* CONTROL_IVA2_BOOT{ADDR,MOD} are at the same place on 343x - noted below */
82#define OMAP243X_CONTROL_DEVCONF1 (OMAP2_CONTROL_GENERAL + 0x0078)
83#define OMAP243X_CONTROL_CSIRXFE (OMAP2_CONTROL_GENERAL + 0x007c)
84#define OMAP243X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190)
85#define OMAP243X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194)
86#define OMAP243X_CONTROL_IVA2_GEMCFG (OMAP2_CONTROL_GENERAL + 0x0198)
87#define OMAP243X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x0230)
88
89/* 24xx-only CONTROL_GENERAL register offsets */
90#define OMAP24XX_CONTROL_DEBOBS (OMAP2_CONTROL_GENERAL + 0x0000)
91#define OMAP24XX_CONTROL_EMU_SUPPORT (OMAP2_CONTROL_GENERAL + 0x0008)
92#define OMAP24XX_CONTROL_SEC_TEST (OMAP2_CONTROL_GENERAL + 0x0044)
93#define OMAP24XX_CONTROL_PSA_CTRL (OMAP2_CONTROL_GENERAL + 0x0048)
94#define OMAP24XX_CONTROL_PSA_CMD (OMAP2_CONTROL_GENERAL + 0x004c)
95#define OMAP24XX_CONTROL_PSA_VALUE (OMAP2_CONTROL_GENERAL + 0x0050)
96#define OMAP24XX_CONTROL_SEC_EMU (OMAP2_CONTROL_GENERAL + 0x0060)
97#define OMAP24XX_CONTROL_SEC_TAP (OMAP2_CONTROL_GENERAL + 0x0064)
98#define OMAP24XX_CONTROL_OCM_PUB_RAM_ADD (OMAP2_CONTROL_GENERAL + 0x006c)
99#define OMAP24XX_CONTROL_EXT_SEC_RAM_START_ADD (OMAP2_CONTROL_GENERAL + 0x0070)
100#define OMAP24XX_CONTROL_EXT_SEC_RAM_STOP_ADD (OMAP2_CONTROL_GENERAL + 0x0074)
101#define OMAP24XX_CONTROL_SEC_STATUS (OMAP2_CONTROL_GENERAL + 0x0080)
102#define OMAP24XX_CONTROL_SEC_ERR_STATUS (OMAP2_CONTROL_GENERAL + 0x0084)
103#define OMAP24XX_CONTROL_STATUS (OMAP2_CONTROL_GENERAL + 0x0088)
104#define OMAP24XX_CONTROL_GENERAL_PURPOSE_STATUS (OMAP2_CONTROL_GENERAL + 0x008c)
105#define OMAP24XX_CONTROL_RAND_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00a0)
106#define OMAP24XX_CONTROL_RAND_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00a4)
107#define OMAP24XX_CONTROL_RAND_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00a8)
108#define OMAP24XX_CONTROL_RAND_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00ac)
109#define OMAP24XX_CONTROL_CUST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00b0)
110#define OMAP24XX_CONTROL_CUST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00b4)
111#define OMAP24XX_CONTROL_TEST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00c0)
112#define OMAP24XX_CONTROL_TEST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00c4)
113#define OMAP24XX_CONTROL_TEST_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00c8)
114#define OMAP24XX_CONTROL_TEST_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00cc)
115#define OMAP24XX_CONTROL_TEST_KEY_4 (OMAP2_CONTROL_GENERAL + 0x00d0)
116#define OMAP24XX_CONTROL_TEST_KEY_5 (OMAP2_CONTROL_GENERAL + 0x00d4)
117#define OMAP24XX_CONTROL_TEST_KEY_6 (OMAP2_CONTROL_GENERAL + 0x00d8)
118#define OMAP24XX_CONTROL_TEST_KEY_7 (OMAP2_CONTROL_GENERAL + 0x00dc)
119#define OMAP24XX_CONTROL_TEST_KEY_8 (OMAP2_CONTROL_GENERAL + 0x00e0)
120#define OMAP24XX_CONTROL_TEST_KEY_9 (OMAP2_CONTROL_GENERAL + 0x00e4)
121
122#define OMAP343X_CONTROL_PADCONF_SYSNIRQ (OMAP2_CONTROL_INTERFACE + 0x01b0)
123
124/* 34xx-only CONTROL_GENERAL register offsets */
125#define OMAP343X_CONTROL_PADCONF_OFF (OMAP2_CONTROL_GENERAL + 0x0000)
126#define OMAP343X_CONTROL_MEM_DFTRW0 (OMAP2_CONTROL_GENERAL + 0x0008)
127#define OMAP343X_CONTROL_MEM_DFTRW1 (OMAP2_CONTROL_GENERAL + 0x000c)
128#define OMAP343X_CONTROL_DEVCONF1 (OMAP2_CONTROL_GENERAL + 0x0068)
129#define OMAP343X_CONTROL_CSIRXFE (OMAP2_CONTROL_GENERAL + 0x006c)
130#define OMAP343X_CONTROL_SEC_STATUS (OMAP2_CONTROL_GENERAL + 0x0070)
131#define OMAP343X_CONTROL_SEC_ERR_STATUS (OMAP2_CONTROL_GENERAL + 0x0074)
132#define OMAP343X_CONTROL_SEC_ERR_STATUS_DEBUG (OMAP2_CONTROL_GENERAL + 0x0078)
133#define OMAP343X_CONTROL_STATUS (OMAP2_CONTROL_GENERAL + 0x0080)
134#define OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS (OMAP2_CONTROL_GENERAL + 0x0084)
135#define OMAP343X_CONTROL_RPUB_KEY_H_4 (OMAP2_CONTROL_GENERAL + 0x00a0)
136#define OMAP343X_CONTROL_RAND_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00a8)
137#define OMAP343X_CONTROL_RAND_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00ac)
138#define OMAP343X_CONTROL_RAND_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00b0)
139#define OMAP343X_CONTROL_RAND_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00b4)
140#define OMAP343X_CONTROL_TEST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00c8)
141#define OMAP343X_CONTROL_TEST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00cc)
142#define OMAP343X_CONTROL_TEST_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00d0)
143#define OMAP343X_CONTROL_TEST_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00d4)
144#define OMAP343X_CONTROL_TEST_KEY_4 (OMAP2_CONTROL_GENERAL + 0x00d8)
145#define OMAP343X_CONTROL_TEST_KEY_5 (OMAP2_CONTROL_GENERAL + 0x00dc)
146#define OMAP343X_CONTROL_TEST_KEY_6 (OMAP2_CONTROL_GENERAL + 0x00e0)
147#define OMAP343X_CONTROL_TEST_KEY_7 (OMAP2_CONTROL_GENERAL + 0x00e4)
148#define OMAP343X_CONTROL_TEST_KEY_8 (OMAP2_CONTROL_GENERAL + 0x00e8)
149#define OMAP343X_CONTROL_TEST_KEY_9 (OMAP2_CONTROL_GENERAL + 0x00ec)
150#define OMAP343X_CONTROL_TEST_KEY_10 (OMAP2_CONTROL_GENERAL + 0x00f0)
151#define OMAP343X_CONTROL_TEST_KEY_11 (OMAP2_CONTROL_GENERAL + 0x00f4)
152#define OMAP343X_CONTROL_TEST_KEY_12 (OMAP2_CONTROL_GENERAL + 0x00f8)
153#define OMAP343X_CONTROL_TEST_KEY_13 (OMAP2_CONTROL_GENERAL + 0x00fc)
154#define OMAP343X_CONTROL_FUSE_OPP1_VDD1 (OMAP2_CONTROL_GENERAL + 0x0110)
155#define OMAP343X_CONTROL_FUSE_OPP2_VDD1 (OMAP2_CONTROL_GENERAL + 0x0114)
156#define OMAP343X_CONTROL_FUSE_OPP3_VDD1 (OMAP2_CONTROL_GENERAL + 0x0118)
157#define OMAP343X_CONTROL_FUSE_OPP4_VDD1 (OMAP2_CONTROL_GENERAL + 0x011c)
158#define OMAP343X_CONTROL_FUSE_OPP5_VDD1 (OMAP2_CONTROL_GENERAL + 0x0120)
159#define OMAP343X_CONTROL_FUSE_OPP1_VDD2 (OMAP2_CONTROL_GENERAL + 0x0124)
160#define OMAP343X_CONTROL_FUSE_OPP2_VDD2 (OMAP2_CONTROL_GENERAL + 0x0128)
161#define OMAP343X_CONTROL_FUSE_OPP3_VDD2 (OMAP2_CONTROL_GENERAL + 0x012c)
162#define OMAP343X_CONTROL_FUSE_SR (OMAP2_CONTROL_GENERAL + 0x0130)
163#define OMAP343X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190)
164#define OMAP343X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194)
165#define OMAP343X_CONTROL_DEBOBS(i) (OMAP2_CONTROL_GENERAL + 0x01B0 \
166 + ((i) >> 1) * 4 + (!((i) & 1)) * 2)
167#define OMAP343X_CONTROL_PROG_IO0 (OMAP2_CONTROL_GENERAL + 0x01D4)
168#define OMAP343X_CONTROL_PROG_IO1 (OMAP2_CONTROL_GENERAL + 0x01D8)
169#define OMAP343X_CONTROL_DSS_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E0)
170#define OMAP343X_CONTROL_CORE_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E4)
171#define OMAP343X_CONTROL_PER_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01E8)
172#define OMAP343X_CONTROL_USBHOST_DPLL_SPREADING (OMAP2_CONTROL_GENERAL + 0x01EC)
173#define OMAP343X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x02B0)
174#define OMAP343X_CONTROL_TEMP_SENSOR (OMAP2_CONTROL_GENERAL + 0x02B4)
175#define OMAP343X_CONTROL_SRAMLDO4 (OMAP2_CONTROL_GENERAL + 0x02B8)
176#define OMAP343X_CONTROL_SRAMLDO5 (OMAP2_CONTROL_GENERAL + 0x02C0)
177#define OMAP343X_CONTROL_CSI (OMAP2_CONTROL_GENERAL + 0x02C4)
178
179/* OMAP3630 only CONTROL_GENERAL register offsets */
180#define OMAP3630_CONTROL_FUSE_OPP1G_VDD1 (OMAP2_CONTROL_GENERAL + 0x0110)
181#define OMAP3630_CONTROL_FUSE_OPP50_VDD1 (OMAP2_CONTROL_GENERAL + 0x0114)
182#define OMAP3630_CONTROL_FUSE_OPP100_VDD1 (OMAP2_CONTROL_GENERAL + 0x0118)
183#define OMAP3630_CONTROL_FUSE_OPP120_VDD1 (OMAP2_CONTROL_GENERAL + 0x0120)
184#define OMAP3630_CONTROL_FUSE_OPP50_VDD2 (OMAP2_CONTROL_GENERAL + 0x0128)
185#define OMAP3630_CONTROL_FUSE_OPP100_VDD2 (OMAP2_CONTROL_GENERAL + 0x012C)
186
187/* OMAP44xx control efuse offsets */
188#define OMAP44XX_CONTROL_FUSE_IVA_OPP50 0x22C
189#define OMAP44XX_CONTROL_FUSE_IVA_OPP100 0x22F
190#define OMAP44XX_CONTROL_FUSE_IVA_OPPTURBO 0x232
191#define OMAP44XX_CONTROL_FUSE_IVA_OPPNITRO 0x235
192#define OMAP44XX_CONTROL_FUSE_MPU_OPP50 0x240
193#define OMAP44XX_CONTROL_FUSE_MPU_OPP100 0x243
194#define OMAP44XX_CONTROL_FUSE_MPU_OPPTURBO 0x246
195#define OMAP44XX_CONTROL_FUSE_MPU_OPPNITRO 0x249
196#define OMAP44XX_CONTROL_FUSE_CORE_OPP50 0x254
197#define OMAP44XX_CONTROL_FUSE_CORE_OPP100 0x257
198
199/* AM35XX only CONTROL_GENERAL register offsets */
200#define AM35XX_CONTROL_MSUSPENDMUX_6 (OMAP2_CONTROL_GENERAL + 0x0038)
201#define AM35XX_CONTROL_DEVCONF2 (OMAP2_CONTROL_GENERAL + 0x0310)
202#define AM35XX_CONTROL_DEVCONF3 (OMAP2_CONTROL_GENERAL + 0x0314)
203#define AM35XX_CONTROL_CBA_PRIORITY (OMAP2_CONTROL_GENERAL + 0x0320)
204#define AM35XX_CONTROL_LVL_INTR_CLEAR (OMAP2_CONTROL_GENERAL + 0x0324)
205#define AM35XX_CONTROL_IP_SW_RESET (OMAP2_CONTROL_GENERAL + 0x0328)
206#define AM35XX_CONTROL_IPSS_CLK_CTRL (OMAP2_CONTROL_GENERAL + 0x032C)
207
208/* 34xx PADCONF register offsets */
209#define OMAP343X_PADCONF_ETK(i) (OMAP2_CONTROL_PADCONFS + 0x5a8 + \
210 (i)*2)
211#define OMAP343X_PADCONF_ETK_CLK OMAP343X_PADCONF_ETK(0)
212#define OMAP343X_PADCONF_ETK_CTL OMAP343X_PADCONF_ETK(1)
213#define OMAP343X_PADCONF_ETK_D0 OMAP343X_PADCONF_ETK(2)
214#define OMAP343X_PADCONF_ETK_D1 OMAP343X_PADCONF_ETK(3)
215#define OMAP343X_PADCONF_ETK_D2 OMAP343X_PADCONF_ETK(4)
216#define OMAP343X_PADCONF_ETK_D3 OMAP343X_PADCONF_ETK(5)
217#define OMAP343X_PADCONF_ETK_D4 OMAP343X_PADCONF_ETK(6)
218#define OMAP343X_PADCONF_ETK_D5 OMAP343X_PADCONF_ETK(7)
219#define OMAP343X_PADCONF_ETK_D6 OMAP343X_PADCONF_ETK(8)
220#define OMAP343X_PADCONF_ETK_D7 OMAP343X_PADCONF_ETK(9)
221#define OMAP343X_PADCONF_ETK_D8 OMAP343X_PADCONF_ETK(10)
222#define OMAP343X_PADCONF_ETK_D9 OMAP343X_PADCONF_ETK(11)
223#define OMAP343X_PADCONF_ETK_D10 OMAP343X_PADCONF_ETK(12)
224#define OMAP343X_PADCONF_ETK_D11 OMAP343X_PADCONF_ETK(13)
225#define OMAP343X_PADCONF_ETK_D12 OMAP343X_PADCONF_ETK(14)
226#define OMAP343X_PADCONF_ETK_D13 OMAP343X_PADCONF_ETK(15)
227#define OMAP343X_PADCONF_ETK_D14 OMAP343X_PADCONF_ETK(16)
228#define OMAP343X_PADCONF_ETK_D15 OMAP343X_PADCONF_ETK(17)
229
230/* 34xx GENERAL_WKUP regist offsets */
231#define OMAP343X_CONTROL_WKUP_DEBOBSMUX(i) (OMAP343X_CONTROL_GENERAL_WKUP + \
232 0x008 + (i))
233#define OMAP343X_CONTROL_WKUP_DEBOBS0 (OMAP343X_CONTROL_GENERAL_WKUP + 0x008)
234#define OMAP343X_CONTROL_WKUP_DEBOBS1 (OMAP343X_CONTROL_GENERAL_WKUP + 0x00C)
235#define OMAP343X_CONTROL_WKUP_DEBOBS2 (OMAP343X_CONTROL_GENERAL_WKUP + 0x010)
236#define OMAP343X_CONTROL_WKUP_DEBOBS3 (OMAP343X_CONTROL_GENERAL_WKUP + 0x014)
237#define OMAP343X_CONTROL_WKUP_DEBOBS4 (OMAP343X_CONTROL_GENERAL_WKUP + 0x018)
238
239/* 36xx-only RTA - Retention till Access control registers and bits */
240#define OMAP36XX_CONTROL_MEM_RTA_CTRL 0x40C
241#define OMAP36XX_RTA_DISABLE 0x0
242
243/* 34xx D2D idle-related pins, handled by PM core */
244#define OMAP3_PADCONF_SAD2D_MSTANDBY 0x250
245#define OMAP3_PADCONF_SAD2D_IDLEACK 0x254
246
247/* TI816X CONTROL_DEVCONF register offsets */
248#define TI816X_CONTROL_DEVICE_ID (TI816X_CONTROL_DEVCONF + 0x000)
249
250/*
251 * REVISIT: This list of registers is not comprehensive - there are more
252 * that should be added.
253 */
254
255/*
256 * Control module register bit defines - these should eventually go into
257 * their own regbits file. Some of these will be complicated, depending
258 * on the device type (general-purpose, emulator, test, secure, bad, other)
259 * and the security mode (secure, non-secure, don't care)
260 */
261/* CONTROL_DEVCONF0 bits */
262#define OMAP2_MMCSDIO1ADPCLKISEL (1 << 24) /* MMC1 loop back clock */
263#define OMAP24XX_USBSTANDBYCTRL (1 << 15)
264#define OMAP2_MCBSP2_CLKS_MASK (1 << 6)
265#define OMAP2_MCBSP1_FSR_MASK (1 << 4)
266#define OMAP2_MCBSP1_CLKR_MASK (1 << 3)
267#define OMAP2_MCBSP1_CLKS_MASK (1 << 2)
268
269/* CONTROL_DEVCONF1 bits */
270#define OMAP243X_MMC1_ACTIVE_OVERWRITE (1 << 31)
271#define OMAP2_MMCSDIO2ADPCLKISEL (1 << 6) /* MMC2 loop back clock */
272#define OMAP2_MCBSP5_CLKS_MASK (1 << 4) /* > 242x */
273#define OMAP2_MCBSP4_CLKS_MASK (1 << 2) /* > 242x */
274#define OMAP2_MCBSP3_CLKS_MASK (1 << 0) /* > 242x */
275
276/* CONTROL_STATUS bits */
277#define OMAP2_DEVICETYPE_MASK (0x7 << 8)
278#define OMAP2_SYSBOOT_5_MASK (1 << 5)
279#define OMAP2_SYSBOOT_4_MASK (1 << 4)
280#define OMAP2_SYSBOOT_3_MASK (1 << 3)
281#define OMAP2_SYSBOOT_2_MASK (1 << 2)
282#define OMAP2_SYSBOOT_1_MASK (1 << 1)
283#define OMAP2_SYSBOOT_0_MASK (1 << 0)
284
285/* CONTROL_PBIAS_LITE bits */
286#define OMAP343X_PBIASLITESUPPLY_HIGH1 (1 << 15)
287#define OMAP343X_PBIASLITEVMODEERROR1 (1 << 11)
288#define OMAP343X_PBIASSPEEDCTRL1 (1 << 10)
289#define OMAP343X_PBIASLITEPWRDNZ1 (1 << 9)
290#define OMAP343X_PBIASLITEVMODE1 (1 << 8)
291#define OMAP343X_PBIASLITESUPPLY_HIGH0 (1 << 7)
292#define OMAP343X_PBIASLITEVMODEERROR0 (1 << 3)
293#define OMAP2_PBIASSPEEDCTRL0 (1 << 2)
294#define OMAP2_PBIASLITEPWRDNZ0 (1 << 1)
295#define OMAP2_PBIASLITEVMODE0 (1 << 0)
296
297/* CONTROL_PROG_IO1 bits */
298#define OMAP3630_PRG_SDMMC1_SPEEDCTRL (1 << 20)
299
300/* CONTROL_IVA2_BOOTMOD bits */
301#define OMAP3_IVA2_BOOTMOD_SHIFT 0
302#define OMAP3_IVA2_BOOTMOD_MASK (0xf << 0)
303#define OMAP3_IVA2_BOOTMOD_IDLE (0x1 << 0)
304
305/* CONTROL_PADCONF_X bits */
306#define OMAP3_PADCONF_WAKEUPEVENT0 (1 << 15)
307#define OMAP3_PADCONF_WAKEUPENABLE0 (1 << 14)
308
309#define OMAP343X_SCRATCHPAD_ROM (OMAP343X_CTRL_BASE + 0x860)
310#define OMAP343X_SCRATCHPAD (OMAP343X_CTRL_BASE + 0x910)
311#define OMAP343X_SCRATCHPAD_ROM_OFFSET 0x19C
312#define OMAP343X_SCRATCHPAD_REGADDR(reg) OMAP2_L4_IO_ADDRESS(\
313 OMAP343X_SCRATCHPAD + reg)
314
315/* AM35XX_CONTROL_IPSS_CLK_CTRL bits */
316#define AM35XX_USBOTG_VBUSP_CLK_SHIFT 0
317#define AM35XX_CPGMAC_VBUSP_CLK_SHIFT 1
318#define AM35XX_VPFE_VBUSP_CLK_SHIFT 2
319#define AM35XX_HECC_VBUSP_CLK_SHIFT 3
320#define AM35XX_USBOTG_FCLK_SHIFT 8
321#define AM35XX_CPGMAC_FCLK_SHIFT 9
322#define AM35XX_VPFE_FCLK_SHIFT 10
323
324/*AM35XX CONTROL_LVL_INTR_CLEAR bits*/
325#define AM35XX_CPGMAC_C0_MISC_PULSE_CLR BIT(0)
326#define AM35XX_CPGMAC_C0_RX_PULSE_CLR BIT(1)
327#define AM35XX_CPGMAC_C0_RX_THRESH_CLR BIT(2)
328#define AM35XX_CPGMAC_C0_TX_PULSE_CLR BIT(3)
329#define AM35XX_USBOTGSS_INT_CLR BIT(4)
330#define AM35XX_VPFE_CCDC_VD0_INT_CLR BIT(5)
331#define AM35XX_VPFE_CCDC_VD1_INT_CLR BIT(6)
332#define AM35XX_VPFE_CCDC_VD2_INT_CLR BIT(7)
333
334/*AM35XX CONTROL_IP_SW_RESET bits*/
335#define AM35XX_USBOTGSS_SW_RST BIT(0)
336#define AM35XX_CPGMACSS_SW_RST BIT(1)
337#define AM35XX_VPFE_VBUSP_SW_RST BIT(2)
338#define AM35XX_HECC_SW_RST BIT(3)
339#define AM35XX_VPFE_PCLK_SW_RST BIT(4)
340
341/*
342 * CONTROL OMAP STATUS register to identify OMAP3 features
343 */
344#define OMAP3_CONTROL_OMAP_STATUS 0x044c
345
346#define OMAP3_SGX_SHIFT 13
347#define OMAP3_SGX_MASK (3 << OMAP3_SGX_SHIFT)
348#define FEAT_SGX_FULL 0
349#define FEAT_SGX_HALF 1
350#define FEAT_SGX_NONE 2
351
352#define OMAP3_IVA_SHIFT 12
353#define OMAP3_IVA_MASK (1 << OMAP3_IVA_SHIFT)
354#define FEAT_IVA 0
355#define FEAT_IVA_NONE 1
356
357#define OMAP3_L2CACHE_SHIFT 10
358#define OMAP3_L2CACHE_MASK (3 << OMAP3_L2CACHE_SHIFT)
359#define FEAT_L2CACHE_NONE 0
360#define FEAT_L2CACHE_64KB 1
361#define FEAT_L2CACHE_128KB 2
362#define FEAT_L2CACHE_256KB 3
363
364#define OMAP3_ISP_SHIFT 5
365#define OMAP3_ISP_MASK (1 << OMAP3_ISP_SHIFT)
366#define FEAT_ISP 0
367#define FEAT_ISP_NONE 1
368
369#define OMAP3_NEON_SHIFT 4
370#define OMAP3_NEON_MASK (1 << OMAP3_NEON_SHIFT)
371#define FEAT_NEON 0
372#define FEAT_NEON_NONE 1
373
374
375#ifndef __ASSEMBLY__
376#ifdef CONFIG_ARCH_OMAP2PLUS
377extern void __iomem *omap_ctrl_base_get(void);
378extern u8 omap_ctrl_readb(u16 offset);
379extern u16 omap_ctrl_readw(u16 offset);
380extern u32 omap_ctrl_readl(u16 offset);
381extern u32 omap4_ctrl_pad_readl(u16 offset);
382extern void omap_ctrl_writeb(u8 val, u16 offset);
383extern void omap_ctrl_writew(u16 val, u16 offset);
384extern void omap_ctrl_writel(u32 val, u16 offset);
385extern void omap4_ctrl_pad_writel(u32 val, u16 offset);
386
387extern void omap3_save_scratchpad_contents(void);
388extern void omap3_clear_scratchpad_contents(void);
389extern u32 *get_restore_pointer(void);
390extern u32 *get_es3_restore_pointer(void);
391extern u32 *get_omap3630_restore_pointer(void);
392extern u32 omap3_arm_context[128];
393extern void omap3_control_save_context(void);
394extern void omap3_control_restore_context(void);
395extern void omap3_ctrl_write_boot_mode(u8 bootmode);
396extern void omap3630_ctrl_disable_rta(void);
397extern int omap3_ctrl_save_padconf(void);
398#else
399#define omap_ctrl_base_get() 0
400#define omap_ctrl_readb(x) 0
401#define omap_ctrl_readw(x) 0
402#define omap_ctrl_readl(x) 0
403#define omap4_ctrl_pad_readl(x) 0
404#define omap_ctrl_writeb(x, y) WARN_ON(1)
405#define omap_ctrl_writew(x, y) WARN_ON(1)
406#define omap_ctrl_writel(x, y) WARN_ON(1)
407#define omap4_ctrl_pad_writel(x, y) WARN_ON(1)
408#endif
409#endif /* __ASSEMBLY__ */
410
411#endif /* __ARCH_ARM_MACH_OMAP2_CONTROL_H */
412
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c
index 3d3d035db9af..4bf6e6e8b100 100644
--- a/arch/arm/mach-omap2/cpuidle34xx.c
+++ b/arch/arm/mach-omap2/cpuidle34xx.c
@@ -27,41 +27,15 @@
27 27
28#include <plat/prcm.h> 28#include <plat/prcm.h>
29#include <plat/irqs.h> 29#include <plat/irqs.h>
30#include <plat/powerdomain.h> 30#include "powerdomain.h"
31#include <plat/clockdomain.h> 31#include "clockdomain.h"
32#include <plat/control.h>
33#include <plat/serial.h> 32#include <plat/serial.h>
34 33
35#include "pm.h" 34#include "pm.h"
35#include "control.h"
36 36
37#ifdef CONFIG_CPU_IDLE 37#ifdef CONFIG_CPU_IDLE
38 38
39#define OMAP3_MAX_STATES 7
40#define OMAP3_STATE_C1 0 /* C1 - MPU WFI + Core active */
41#define OMAP3_STATE_C2 1 /* C2 - MPU WFI + Core inactive */
42#define OMAP3_STATE_C3 2 /* C3 - MPU CSWR + Core inactive */
43#define OMAP3_STATE_C4 3 /* C4 - MPU OFF + Core iactive */
44#define OMAP3_STATE_C5 4 /* C5 - MPU RET + Core RET */
45#define OMAP3_STATE_C6 5 /* C6 - MPU OFF + Core RET */
46#define OMAP3_STATE_C7 6 /* C7 - MPU OFF + Core OFF */
47
48#define OMAP3_STATE_MAX OMAP3_STATE_C7
49
50struct omap3_processor_cx {
51 u8 valid;
52 u8 type;
53 u32 sleep_latency;
54 u32 wakeup_latency;
55 u32 mpu_state;
56 u32 core_state;
57 u32 threshold;
58 u32 flags;
59};
60
61struct omap3_processor_cx omap3_power_states[OMAP3_MAX_STATES];
62struct omap3_processor_cx current_cx_state;
63struct powerdomain *mpu_pd, *core_pd;
64
65/* 39/*
66 * The latencies/thresholds for various C states have 40 * The latencies/thresholds for various C states have
67 * to be configured from the respective board files. 41 * to be configured from the respective board files.
@@ -71,39 +45,43 @@ struct powerdomain *mpu_pd, *core_pd;
71 */ 45 */
72static struct cpuidle_params cpuidle_params_table[] = { 46static struct cpuidle_params cpuidle_params_table[] = {
73 /* C1 */ 47 /* C1 */
74 {1, 2, 2, 5}, 48 {2 + 2, 5, 1},
75 /* C2 */ 49 /* C2 */
76 {1, 10, 10, 30}, 50 {10 + 10, 30, 1},
77 /* C3 */ 51 /* C3 */
78 {1, 50, 50, 300}, 52 {50 + 50, 300, 1},
79 /* C4 */ 53 /* C4 */
80 {1, 1500, 1800, 4000}, 54 {1500 + 1800, 4000, 1},
81 /* C5 */ 55 /* C5 */
82 {1, 2500, 7500, 12000}, 56 {2500 + 7500, 12000, 1},
83 /* C6 */ 57 /* C6 */
84 {1, 3000, 8500, 15000}, 58 {3000 + 8500, 15000, 1},
85 /* C7 */ 59 /* C7 */
86 {1, 10000, 30000, 300000}, 60 {10000 + 30000, 300000, 1},
87}; 61};
62#define OMAP3_NUM_STATES ARRAY_SIZE(cpuidle_params_table)
88 63
89static int omap3_idle_bm_check(void) 64/* Mach specific information to be recorded in the C-state driver_data */
90{ 65struct omap3_idle_statedata {
91 if (!omap3_can_sleep()) 66 u32 mpu_state;
92 return 1; 67 u32 core_state;
93 return 0; 68 u8 valid;
94} 69};
70struct omap3_idle_statedata omap3_idle_data[OMAP3_NUM_STATES];
71
72struct powerdomain *mpu_pd, *core_pd, *per_pd, *cam_pd;
95 73
96static int _cpuidle_allow_idle(struct powerdomain *pwrdm, 74static int _cpuidle_allow_idle(struct powerdomain *pwrdm,
97 struct clockdomain *clkdm) 75 struct clockdomain *clkdm)
98{ 76{
99 omap2_clkdm_allow_idle(clkdm); 77 clkdm_allow_idle(clkdm);
100 return 0; 78 return 0;
101} 79}
102 80
103static int _cpuidle_deny_idle(struct powerdomain *pwrdm, 81static int _cpuidle_deny_idle(struct powerdomain *pwrdm,
104 struct clockdomain *clkdm) 82 struct clockdomain *clkdm)
105{ 83{
106 omap2_clkdm_deny_idle(clkdm); 84 clkdm_deny_idle(clkdm);
107 return 0; 85 return 0;
108} 86}
109 87
@@ -118,12 +96,10 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm,
118static int omap3_enter_idle(struct cpuidle_device *dev, 96static int omap3_enter_idle(struct cpuidle_device *dev,
119 struct cpuidle_state *state) 97 struct cpuidle_state *state)
120{ 98{
121 struct omap3_processor_cx *cx = cpuidle_get_statedata(state); 99 struct omap3_idle_statedata *cx = cpuidle_get_statedata(state);
122 struct timespec ts_preidle, ts_postidle, ts_idle; 100 struct timespec ts_preidle, ts_postidle, ts_idle;
123 u32 mpu_state = cx->mpu_state, core_state = cx->core_state; 101 u32 mpu_state = cx->mpu_state, core_state = cx->core_state;
124 102
125 current_cx_state = *cx;
126
127 /* Used to keep track of the total time in idle */ 103 /* Used to keep track of the total time in idle */
128 getnstimeofday(&ts_preidle); 104 getnstimeofday(&ts_preidle);
129 105
@@ -136,7 +112,8 @@ static int omap3_enter_idle(struct cpuidle_device *dev,
136 if (omap_irq_pending() || need_resched()) 112 if (omap_irq_pending() || need_resched())
137 goto return_sleep_time; 113 goto return_sleep_time;
138 114
139 if (cx->type == OMAP3_STATE_C1) { 115 /* Deny idle for C1 */
116 if (state == &dev->states[0]) {
140 pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle); 117 pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle);
141 pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle); 118 pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle);
142 } 119 }
@@ -144,7 +121,8 @@ static int omap3_enter_idle(struct cpuidle_device *dev,
144 /* Execute ARM wfi */ 121 /* Execute ARM wfi */
145 omap_sram_idle(); 122 omap_sram_idle();
146 123
147 if (cx->type == OMAP3_STATE_C1) { 124 /* Re-allow idle for C1 */
125 if (state == &dev->states[0]) {
148 pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle); 126 pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle);
149 pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle); 127 pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle);
150 } 128 }
@@ -160,41 +138,53 @@ return_sleep_time:
160} 138}
161 139
162/** 140/**
163 * next_valid_state - Find next valid c-state 141 * next_valid_state - Find next valid C-state
164 * @dev: cpuidle device 142 * @dev: cpuidle device
165 * @state: Currently selected c-state 143 * @state: Currently selected C-state
166 * 144 *
167 * If the current state is valid, it is returned back to the caller. 145 * If the current state is valid, it is returned back to the caller.
168 * Else, this function searches for a lower c-state which is still 146 * Else, this function searches for a lower c-state which is still
169 * valid (as defined in omap3_power_states[]). 147 * valid.
148 *
149 * A state is valid if the 'valid' field is enabled and
150 * if it satisfies the enable_off_mode condition.
170 */ 151 */
171static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev, 152static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev,
172 struct cpuidle_state *curr) 153 struct cpuidle_state *curr)
173{ 154{
174 struct cpuidle_state *next = NULL; 155 struct cpuidle_state *next = NULL;
175 struct omap3_processor_cx *cx; 156 struct omap3_idle_statedata *cx = cpuidle_get_statedata(curr);
157 u32 mpu_deepest_state = PWRDM_POWER_RET;
158 u32 core_deepest_state = PWRDM_POWER_RET;
176 159
177 cx = (struct omap3_processor_cx *)cpuidle_get_statedata(curr); 160 if (enable_off_mode) {
161 mpu_deepest_state = PWRDM_POWER_OFF;
162 /*
163 * Erratum i583: valable for ES rev < Es1.2 on 3630.
164 * CORE OFF mode is not supported in a stable form, restrict
165 * instead the CORE state to RET.
166 */
167 if (!IS_PM34XX_ERRATUM(PM_SDRC_WAKEUP_ERRATUM_i583))
168 core_deepest_state = PWRDM_POWER_OFF;
169 }
178 170
179 /* Check if current state is valid */ 171 /* Check if current state is valid */
180 if (cx->valid) { 172 if ((cx->valid) &&
173 (cx->mpu_state >= mpu_deepest_state) &&
174 (cx->core_state >= core_deepest_state)) {
181 return curr; 175 return curr;
182 } else { 176 } else {
183 u8 idx = OMAP3_STATE_MAX; 177 int idx = OMAP3_NUM_STATES - 1;
184 178
185 /* 179 /* Reach the current state starting at highest C-state */
186 * Reach the current state starting at highest C-state 180 for (; idx >= 0; idx--) {
187 */
188 for (; idx >= OMAP3_STATE_C1; idx--) {
189 if (&dev->states[idx] == curr) { 181 if (&dev->states[idx] == curr) {
190 next = &dev->states[idx]; 182 next = &dev->states[idx];
191 break; 183 break;
192 } 184 }
193 } 185 }
194 186
195 /* 187 /* Should never hit this condition */
196 * Should never hit this condition.
197 */
198 WARN_ON(next == NULL); 188 WARN_ON(next == NULL);
199 189
200 /* 190 /*
@@ -202,17 +192,17 @@ static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev,
202 * Start search from the next (lower) state. 192 * Start search from the next (lower) state.
203 */ 193 */
204 idx--; 194 idx--;
205 for (; idx >= OMAP3_STATE_C1; idx--) { 195 for (; idx >= 0; idx--) {
206 struct omap3_processor_cx *cx;
207
208 cx = cpuidle_get_statedata(&dev->states[idx]); 196 cx = cpuidle_get_statedata(&dev->states[idx]);
209 if (cx->valid) { 197 if ((cx->valid) &&
198 (cx->mpu_state >= mpu_deepest_state) &&
199 (cx->core_state >= core_deepest_state)) {
210 next = &dev->states[idx]; 200 next = &dev->states[idx];
211 break; 201 break;
212 } 202 }
213 } 203 }
214 /* 204 /*
215 * C1 and C2 are always valid. 205 * C1 is always valid.
216 * So, no need to check for 'next==NULL' outside this loop. 206 * So, no need to check for 'next==NULL' outside this loop.
217 */ 207 */
218 } 208 }
@@ -225,50 +215,70 @@ static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev,
225 * @dev: cpuidle device 215 * @dev: cpuidle device
226 * @state: The target state to be programmed 216 * @state: The target state to be programmed
227 * 217 *
228 * Used for C states with CPUIDLE_FLAG_CHECK_BM flag set. This 218 * This function checks for any pending activity and then programs
229 * function checks for any pending activity and then programs the 219 * the device to the specified or a safer state.
230 * device to the specified or a safer state.
231 */ 220 */
232static int omap3_enter_idle_bm(struct cpuidle_device *dev, 221static int omap3_enter_idle_bm(struct cpuidle_device *dev,
233 struct cpuidle_state *state) 222 struct cpuidle_state *state)
234{ 223{
235 struct cpuidle_state *new_state = next_valid_state(dev, state); 224 struct cpuidle_state *new_state;
225 u32 core_next_state, per_next_state = 0, per_saved_state = 0, cam_state;
226 struct omap3_idle_statedata *cx;
227 int ret;
236 228
237 if ((state->flags & CPUIDLE_FLAG_CHECK_BM) && omap3_idle_bm_check()) { 229 if (!omap3_can_sleep()) {
238 BUG_ON(!dev->safe_state);
239 new_state = dev->safe_state; 230 new_state = dev->safe_state;
231 goto select_state;
240 } 232 }
241 233
242 dev->last_state = new_state; 234 /*
243 return omap3_enter_idle(dev, new_state); 235 * Prevent idle completely if CAM is active.
244} 236 * CAM does not have wakeup capability in OMAP3.
245 237 */
246DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev); 238 cam_state = pwrdm_read_pwrst(cam_pd);
239 if (cam_state == PWRDM_POWER_ON) {
240 new_state = dev->safe_state;
241 goto select_state;
242 }
247 243
248/** 244 /*
249 * omap3_cpuidle_update_states - Update the cpuidle states. 245 * FIXME: we currently manage device-specific idle states
250 * 246 * for PER and CORE in combination with CPU-specific
251 * Currently, this function toggles the validity of idle states based upon 247 * idle states. This is wrong, and device-specific
252 * the flag 'enable_off_mode'. When the flag is set all states are valid. 248 * idle management needs to be separated out into
253 * Else, states leading to OFF state set to be invalid. 249 * its own code.
254 */ 250 */
255void omap3_cpuidle_update_states(void) 251
256{ 252 /*
257 int i; 253 * Prevent PER off if CORE is not in retention or off as this
254 * would disable PER wakeups completely.
255 */
256 cx = cpuidle_get_statedata(state);
257 core_next_state = cx->core_state;
258 per_next_state = per_saved_state = pwrdm_read_next_pwrst(per_pd);
259 if ((per_next_state == PWRDM_POWER_OFF) &&
260 (core_next_state > PWRDM_POWER_RET))
261 per_next_state = PWRDM_POWER_RET;
262
263 /* Are we changing PER target state? */
264 if (per_next_state != per_saved_state)
265 pwrdm_set_next_pwrst(per_pd, per_next_state);
266
267 new_state = next_valid_state(dev, state);
268
269select_state:
270 dev->last_state = new_state;
271 ret = omap3_enter_idle(dev, new_state);
258 272
259 for (i = OMAP3_STATE_C1; i < OMAP3_MAX_STATES; i++) { 273 /* Restore original PER state if it was modified */
260 struct omap3_processor_cx *cx = &omap3_power_states[i]; 274 if (per_next_state != per_saved_state)
275 pwrdm_set_next_pwrst(per_pd, per_saved_state);
261 276
262 if (enable_off_mode) { 277 return ret;
263 cx->valid = 1;
264 } else {
265 if ((cx->mpu_state == PWRDM_POWER_OFF) ||
266 (cx->core_state == PWRDM_POWER_OFF))
267 cx->valid = 0;
268 }
269 }
270} 278}
271 279
280DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev);
281
272void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params) 282void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
273{ 283{
274 int i; 284 int i;
@@ -276,186 +286,109 @@ void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
276 if (!cpuidle_board_params) 286 if (!cpuidle_board_params)
277 return; 287 return;
278 288
279 for (i = OMAP3_STATE_C1; i < OMAP3_MAX_STATES; i++) { 289 for (i = 0; i < OMAP3_NUM_STATES; i++) {
280 cpuidle_params_table[i].valid = 290 cpuidle_params_table[i].valid = cpuidle_board_params[i].valid;
281 cpuidle_board_params[i].valid; 291 cpuidle_params_table[i].exit_latency =
282 cpuidle_params_table[i].sleep_latency = 292 cpuidle_board_params[i].exit_latency;
283 cpuidle_board_params[i].sleep_latency; 293 cpuidle_params_table[i].target_residency =
284 cpuidle_params_table[i].wake_latency = 294 cpuidle_board_params[i].target_residency;
285 cpuidle_board_params[i].wake_latency;
286 cpuidle_params_table[i].threshold =
287 cpuidle_board_params[i].threshold;
288 } 295 }
289 return; 296 return;
290} 297}
291 298
292/* omap3_init_power_states - Initialises the OMAP3 specific C states.
293 *
294 * Below is the desciption of each C state.
295 * C1 . MPU WFI + Core active
296 * C2 . MPU WFI + Core inactive
297 * C3 . MPU CSWR + Core inactive
298 * C4 . MPU OFF + Core inactive
299 * C5 . MPU CSWR + Core CSWR
300 * C6 . MPU OFF + Core CSWR
301 * C7 . MPU OFF + Core OFF
302 */
303void omap_init_power_states(void)
304{
305 /* C1 . MPU WFI + Core active */
306 omap3_power_states[OMAP3_STATE_C1].valid =
307 cpuidle_params_table[OMAP3_STATE_C1].valid;
308 omap3_power_states[OMAP3_STATE_C1].type = OMAP3_STATE_C1;
309 omap3_power_states[OMAP3_STATE_C1].sleep_latency =
310 cpuidle_params_table[OMAP3_STATE_C1].sleep_latency;
311 omap3_power_states[OMAP3_STATE_C1].wakeup_latency =
312 cpuidle_params_table[OMAP3_STATE_C1].wake_latency;
313 omap3_power_states[OMAP3_STATE_C1].threshold =
314 cpuidle_params_table[OMAP3_STATE_C1].threshold;
315 omap3_power_states[OMAP3_STATE_C1].mpu_state = PWRDM_POWER_ON;
316 omap3_power_states[OMAP3_STATE_C1].core_state = PWRDM_POWER_ON;
317 omap3_power_states[OMAP3_STATE_C1].flags = CPUIDLE_FLAG_TIME_VALID;
318
319 /* C2 . MPU WFI + Core inactive */
320 omap3_power_states[OMAP3_STATE_C2].valid =
321 cpuidle_params_table[OMAP3_STATE_C2].valid;
322 omap3_power_states[OMAP3_STATE_C2].type = OMAP3_STATE_C2;
323 omap3_power_states[OMAP3_STATE_C2].sleep_latency =
324 cpuidle_params_table[OMAP3_STATE_C2].sleep_latency;
325 omap3_power_states[OMAP3_STATE_C2].wakeup_latency =
326 cpuidle_params_table[OMAP3_STATE_C2].wake_latency;
327 omap3_power_states[OMAP3_STATE_C2].threshold =
328 cpuidle_params_table[OMAP3_STATE_C2].threshold;
329 omap3_power_states[OMAP3_STATE_C2].mpu_state = PWRDM_POWER_ON;
330 omap3_power_states[OMAP3_STATE_C2].core_state = PWRDM_POWER_ON;
331 omap3_power_states[OMAP3_STATE_C2].flags = CPUIDLE_FLAG_TIME_VALID;
332
333 /* C3 . MPU CSWR + Core inactive */
334 omap3_power_states[OMAP3_STATE_C3].valid =
335 cpuidle_params_table[OMAP3_STATE_C3].valid;
336 omap3_power_states[OMAP3_STATE_C3].type = OMAP3_STATE_C3;
337 omap3_power_states[OMAP3_STATE_C3].sleep_latency =
338 cpuidle_params_table[OMAP3_STATE_C3].sleep_latency;
339 omap3_power_states[OMAP3_STATE_C3].wakeup_latency =
340 cpuidle_params_table[OMAP3_STATE_C3].wake_latency;
341 omap3_power_states[OMAP3_STATE_C3].threshold =
342 cpuidle_params_table[OMAP3_STATE_C3].threshold;
343 omap3_power_states[OMAP3_STATE_C3].mpu_state = PWRDM_POWER_RET;
344 omap3_power_states[OMAP3_STATE_C3].core_state = PWRDM_POWER_ON;
345 omap3_power_states[OMAP3_STATE_C3].flags = CPUIDLE_FLAG_TIME_VALID |
346 CPUIDLE_FLAG_CHECK_BM;
347
348 /* C4 . MPU OFF + Core inactive */
349 omap3_power_states[OMAP3_STATE_C4].valid =
350 cpuidle_params_table[OMAP3_STATE_C4].valid;
351 omap3_power_states[OMAP3_STATE_C4].type = OMAP3_STATE_C4;
352 omap3_power_states[OMAP3_STATE_C4].sleep_latency =
353 cpuidle_params_table[OMAP3_STATE_C4].sleep_latency;
354 omap3_power_states[OMAP3_STATE_C4].wakeup_latency =
355 cpuidle_params_table[OMAP3_STATE_C4].wake_latency;
356 omap3_power_states[OMAP3_STATE_C4].threshold =
357 cpuidle_params_table[OMAP3_STATE_C4].threshold;
358 omap3_power_states[OMAP3_STATE_C4].mpu_state = PWRDM_POWER_OFF;
359 omap3_power_states[OMAP3_STATE_C4].core_state = PWRDM_POWER_ON;
360 omap3_power_states[OMAP3_STATE_C4].flags = CPUIDLE_FLAG_TIME_VALID |
361 CPUIDLE_FLAG_CHECK_BM;
362
363 /* C5 . MPU CSWR + Core CSWR*/
364 omap3_power_states[OMAP3_STATE_C5].valid =
365 cpuidle_params_table[OMAP3_STATE_C5].valid;
366 omap3_power_states[OMAP3_STATE_C5].type = OMAP3_STATE_C5;
367 omap3_power_states[OMAP3_STATE_C5].sleep_latency =
368 cpuidle_params_table[OMAP3_STATE_C5].sleep_latency;
369 omap3_power_states[OMAP3_STATE_C5].wakeup_latency =
370 cpuidle_params_table[OMAP3_STATE_C5].wake_latency;
371 omap3_power_states[OMAP3_STATE_C5].threshold =
372 cpuidle_params_table[OMAP3_STATE_C5].threshold;
373 omap3_power_states[OMAP3_STATE_C5].mpu_state = PWRDM_POWER_RET;
374 omap3_power_states[OMAP3_STATE_C5].core_state = PWRDM_POWER_RET;
375 omap3_power_states[OMAP3_STATE_C5].flags = CPUIDLE_FLAG_TIME_VALID |
376 CPUIDLE_FLAG_CHECK_BM;
377
378 /* C6 . MPU OFF + Core CSWR */
379 omap3_power_states[OMAP3_STATE_C6].valid =
380 cpuidle_params_table[OMAP3_STATE_C6].valid;
381 omap3_power_states[OMAP3_STATE_C6].type = OMAP3_STATE_C6;
382 omap3_power_states[OMAP3_STATE_C6].sleep_latency =
383 cpuidle_params_table[OMAP3_STATE_C6].sleep_latency;
384 omap3_power_states[OMAP3_STATE_C6].wakeup_latency =
385 cpuidle_params_table[OMAP3_STATE_C6].wake_latency;
386 omap3_power_states[OMAP3_STATE_C6].threshold =
387 cpuidle_params_table[OMAP3_STATE_C6].threshold;
388 omap3_power_states[OMAP3_STATE_C6].mpu_state = PWRDM_POWER_OFF;
389 omap3_power_states[OMAP3_STATE_C6].core_state = PWRDM_POWER_RET;
390 omap3_power_states[OMAP3_STATE_C6].flags = CPUIDLE_FLAG_TIME_VALID |
391 CPUIDLE_FLAG_CHECK_BM;
392
393 /* C7 . MPU OFF + Core OFF */
394 omap3_power_states[OMAP3_STATE_C7].valid =
395 cpuidle_params_table[OMAP3_STATE_C7].valid;
396 omap3_power_states[OMAP3_STATE_C7].type = OMAP3_STATE_C7;
397 omap3_power_states[OMAP3_STATE_C7].sleep_latency =
398 cpuidle_params_table[OMAP3_STATE_C7].sleep_latency;
399 omap3_power_states[OMAP3_STATE_C7].wakeup_latency =
400 cpuidle_params_table[OMAP3_STATE_C7].wake_latency;
401 omap3_power_states[OMAP3_STATE_C7].threshold =
402 cpuidle_params_table[OMAP3_STATE_C7].threshold;
403 omap3_power_states[OMAP3_STATE_C7].mpu_state = PWRDM_POWER_OFF;
404 omap3_power_states[OMAP3_STATE_C7].core_state = PWRDM_POWER_OFF;
405 omap3_power_states[OMAP3_STATE_C7].flags = CPUIDLE_FLAG_TIME_VALID |
406 CPUIDLE_FLAG_CHECK_BM;
407}
408
409struct cpuidle_driver omap3_idle_driver = { 299struct cpuidle_driver omap3_idle_driver = {
410 .name = "omap3_idle", 300 .name = "omap3_idle",
411 .owner = THIS_MODULE, 301 .owner = THIS_MODULE,
412}; 302};
413 303
304/* Helper to fill the C-state common data and register the driver_data */
305static inline struct omap3_idle_statedata *_fill_cstate(
306 struct cpuidle_device *dev,
307 int idx, const char *descr)
308{
309 struct omap3_idle_statedata *cx = &omap3_idle_data[idx];
310 struct cpuidle_state *state = &dev->states[idx];
311
312 state->exit_latency = cpuidle_params_table[idx].exit_latency;
313 state->target_residency = cpuidle_params_table[idx].target_residency;
314 state->flags = CPUIDLE_FLAG_TIME_VALID;
315 state->enter = omap3_enter_idle_bm;
316 cx->valid = cpuidle_params_table[idx].valid;
317 sprintf(state->name, "C%d", idx + 1);
318 strncpy(state->desc, descr, CPUIDLE_DESC_LEN);
319 cpuidle_set_statedata(state, cx);
320
321 return cx;
322}
323
414/** 324/**
415 * omap3_idle_init - Init routine for OMAP3 idle 325 * omap3_idle_init - Init routine for OMAP3 idle
416 * 326 *
417 * Registers the OMAP3 specific cpuidle driver with the cpuidle 327 * Registers the OMAP3 specific cpuidle driver to the cpuidle
418 * framework with the valid set of states. 328 * framework with the valid set of states.
419 */ 329 */
420int __init omap3_idle_init(void) 330int __init omap3_idle_init(void)
421{ 331{
422 int i, count = 0;
423 struct omap3_processor_cx *cx;
424 struct cpuidle_state *state;
425 struct cpuidle_device *dev; 332 struct cpuidle_device *dev;
333 struct omap3_idle_statedata *cx;
426 334
427 mpu_pd = pwrdm_lookup("mpu_pwrdm"); 335 mpu_pd = pwrdm_lookup("mpu_pwrdm");
428 core_pd = pwrdm_lookup("core_pwrdm"); 336 core_pd = pwrdm_lookup("core_pwrdm");
337 per_pd = pwrdm_lookup("per_pwrdm");
338 cam_pd = pwrdm_lookup("cam_pwrdm");
429 339
430 omap_init_power_states();
431 cpuidle_register_driver(&omap3_idle_driver); 340 cpuidle_register_driver(&omap3_idle_driver);
432
433 dev = &per_cpu(omap3_idle_dev, smp_processor_id()); 341 dev = &per_cpu(omap3_idle_dev, smp_processor_id());
434 342
435 for (i = OMAP3_STATE_C1; i < OMAP3_MAX_STATES; i++) { 343 /* C1 . MPU WFI + Core active */
436 cx = &omap3_power_states[i]; 344 cx = _fill_cstate(dev, 0, "MPU ON + CORE ON");
437 state = &dev->states[count]; 345 (&dev->states[0])->enter = omap3_enter_idle;
438 346 dev->safe_state = &dev->states[0];
439 if (!cx->valid) 347 cx->valid = 1; /* C1 is always valid */
440 continue; 348 cx->mpu_state = PWRDM_POWER_ON;
441 cpuidle_set_statedata(state, cx); 349 cx->core_state = PWRDM_POWER_ON;
442 state->exit_latency = cx->sleep_latency + cx->wakeup_latency;
443 state->target_residency = cx->threshold;
444 state->flags = cx->flags;
445 state->enter = (state->flags & CPUIDLE_FLAG_CHECK_BM) ?
446 omap3_enter_idle_bm : omap3_enter_idle;
447 if (cx->type == OMAP3_STATE_C1)
448 dev->safe_state = state;
449 sprintf(state->name, "C%d", count+1);
450 count++;
451 }
452 350
453 if (!count) 351 /* C2 . MPU WFI + Core inactive */
454 return -EINVAL; 352 cx = _fill_cstate(dev, 1, "MPU ON + CORE ON");
455 dev->state_count = count; 353 cx->mpu_state = PWRDM_POWER_ON;
354 cx->core_state = PWRDM_POWER_ON;
456 355
457 omap3_cpuidle_update_states(); 356 /* C3 . MPU CSWR + Core inactive */
357 cx = _fill_cstate(dev, 2, "MPU RET + CORE ON");
358 cx->mpu_state = PWRDM_POWER_RET;
359 cx->core_state = PWRDM_POWER_ON;
360
361 /* C4 . MPU OFF + Core inactive */
362 cx = _fill_cstate(dev, 3, "MPU OFF + CORE ON");
363 cx->mpu_state = PWRDM_POWER_OFF;
364 cx->core_state = PWRDM_POWER_ON;
365
366 /* C5 . MPU RET + Core RET */
367 cx = _fill_cstate(dev, 4, "MPU RET + CORE RET");
368 cx->mpu_state = PWRDM_POWER_RET;
369 cx->core_state = PWRDM_POWER_RET;
370
371 /* C6 . MPU OFF + Core RET */
372 cx = _fill_cstate(dev, 5, "MPU OFF + CORE RET");
373 cx->mpu_state = PWRDM_POWER_OFF;
374 cx->core_state = PWRDM_POWER_RET;
375
376 /* C7 . MPU OFF + Core OFF */
377 cx = _fill_cstate(dev, 6, "MPU OFF + CORE OFF");
378 /*
379 * Erratum i583: implementation for ES rev < Es1.2 on 3630. We cannot
380 * enable OFF mode in a stable form for previous revisions.
381 * We disable C7 state as a result.
382 */
383 if (IS_PM34XX_ERRATUM(PM_SDRC_WAKEUP_ERRATUM_i583)) {
384 cx->valid = 0;
385 pr_warn("%s: core off state C7 disabled due to i583\n",
386 __func__);
387 }
388 cx->mpu_state = PWRDM_POWER_OFF;
389 cx->core_state = PWRDM_POWER_OFF;
458 390
391 dev->state_count = OMAP3_NUM_STATES;
459 if (cpuidle_register_device(dev)) { 392 if (cpuidle_register_device(dev)) {
460 printk(KERN_ERR "%s: CPUidle register device failed\n", 393 printk(KERN_ERR "%s: CPUidle register device failed\n",
461 __func__); 394 __func__);
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index 2dbb265bedd4..5b8ca680ed93 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -9,12 +9,13 @@
9 * (at your option) any later version. 9 * (at your option) any later version.
10 */ 10 */
11 11
12#include <linux/module.h>
13#include <linux/kernel.h> 12#include <linux/kernel.h>
14#include <linux/init.h> 13#include <linux/init.h>
15#include <linux/platform_device.h> 14#include <linux/platform_device.h>
16#include <linux/io.h> 15#include <linux/io.h>
17#include <linux/clk.h> 16#include <linux/clk.h>
17#include <linux/err.h>
18#include <linux/slab.h>
18 19
19#include <mach/hardware.h> 20#include <mach/hardware.h>
20#include <mach/irqs.h> 21#include <mach/irqs.h>
@@ -22,18 +23,87 @@
22#include <asm/mach/map.h> 23#include <asm/mach/map.h>
23#include <asm/pmu.h> 24#include <asm/pmu.h>
24 25
25#include <plat/control.h>
26#include <plat/tc.h> 26#include <plat/tc.h>
27#include <plat/board.h> 27#include <plat/board.h>
28#include <plat/mcbsp.h>
28#include <mach/gpio.h> 29#include <mach/gpio.h>
29#include <plat/mmc.h> 30#include <plat/mmc.h>
30#include <plat/dma.h> 31#include <plat/dma.h>
32#include <plat/omap_hwmod.h>
33#include <plat/omap_device.h>
34#include <plat/omap4-keypad.h>
31 35
32#include "mux.h" 36#include "mux.h"
37#include "control.h"
38#include "devices.h"
39
40#define L3_MODULES_MAX_LEN 12
41#define L3_MODULES 3
42
43static int __init omap3_l3_init(void)
44{
45 int l;
46 struct omap_hwmod *oh;
47 struct omap_device *od;
48 char oh_name[L3_MODULES_MAX_LEN];
49
50 /*
51 * To avoid code running on other OMAPs in
52 * multi-omap builds
53 */
54 if (!(cpu_is_omap34xx()))
55 return -ENODEV;
56
57 l = snprintf(oh_name, L3_MODULES_MAX_LEN, "l3_main");
58
59 oh = omap_hwmod_lookup(oh_name);
60
61 if (!oh)
62 pr_err("could not look up %s\n", oh_name);
63
64 od = omap_device_build("omap_l3_smx", 0, oh, NULL, 0,
65 NULL, 0, 0);
66
67 WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name);
68
69 return IS_ERR(od) ? PTR_ERR(od) : 0;
70}
71postcore_initcall(omap3_l3_init);
72
73static int __init omap4_l3_init(void)
74{
75 int l, i;
76 struct omap_hwmod *oh[3];
77 struct omap_device *od;
78 char oh_name[L3_MODULES_MAX_LEN];
79
80 /*
81 * To avoid code running on other OMAPs in
82 * multi-omap builds
83 */
84 if (!(cpu_is_omap44xx()))
85 return -ENODEV;
86
87 for (i = 0; i < L3_MODULES; i++) {
88 l = snprintf(oh_name, L3_MODULES_MAX_LEN, "l3_main_%d", i+1);
89
90 oh[i] = omap_hwmod_lookup(oh_name);
91 if (!(oh[i]))
92 pr_err("could not look up %s\n", oh_name);
93 }
94
95 od = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL,
96 0, NULL, 0, 0);
97
98 WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name);
99
100 return IS_ERR(od) ? PTR_ERR(od) : 0;
101}
102postcore_initcall(omap4_l3_init);
33 103
34#if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) 104#if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
35 105
36static struct resource cam_resources[] = { 106static struct resource omap2cam_resources[] = {
37 { 107 {
38 .start = OMAP24XX_CAMERA_BASE, 108 .start = OMAP24XX_CAMERA_BASE,
39 .end = OMAP24XX_CAMERA_BASE + 0xfff, 109 .end = OMAP24XX_CAMERA_BASE + 0xfff,
@@ -45,19 +115,13 @@ static struct resource cam_resources[] = {
45 } 115 }
46}; 116};
47 117
48static struct platform_device omap_cam_device = { 118static struct platform_device omap2cam_device = {
49 .name = "omap24xxcam", 119 .name = "omap24xxcam",
50 .id = -1, 120 .id = -1,
51 .num_resources = ARRAY_SIZE(cam_resources), 121 .num_resources = ARRAY_SIZE(omap2cam_resources),
52 .resource = cam_resources, 122 .resource = omap2cam_resources,
53}; 123};
54 124#endif
55static inline void omap_init_camera(void)
56{
57 platform_device_register(&omap_cam_device);
58}
59
60#elif defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE)
61 125
62static struct resource omap3isp_resources[] = { 126static struct resource omap3isp_resources[] = {
63 { 127 {
@@ -66,11 +130,6 @@ static struct resource omap3isp_resources[] = {
66 .flags = IORESOURCE_MEM, 130 .flags = IORESOURCE_MEM,
67 }, 131 },
68 { 132 {
69 .start = OMAP3430_ISP_CBUFF_BASE,
70 .end = OMAP3430_ISP_CBUFF_END,
71 .flags = IORESOURCE_MEM,
72 },
73 {
74 .start = OMAP3430_ISP_CCP2_BASE, 133 .start = OMAP3430_ISP_CCP2_BASE,
75 .end = OMAP3430_ISP_CCP2_END, 134 .end = OMAP3430_ISP_CCP2_END,
76 .flags = IORESOURCE_MEM, 135 .flags = IORESOURCE_MEM,
@@ -106,13 +165,33 @@ static struct resource omap3isp_resources[] = {
106 .flags = IORESOURCE_MEM, 165 .flags = IORESOURCE_MEM,
107 }, 166 },
108 { 167 {
109 .start = OMAP3430_ISP_CSI2A_BASE, 168 .start = OMAP3430_ISP_CSI2A_REGS1_BASE,
110 .end = OMAP3430_ISP_CSI2A_END, 169 .end = OMAP3430_ISP_CSI2A_REGS1_END,
111 .flags = IORESOURCE_MEM, 170 .flags = IORESOURCE_MEM,
112 }, 171 },
113 { 172 {
114 .start = OMAP3430_ISP_CSI2PHY_BASE, 173 .start = OMAP3430_ISP_CSIPHY2_BASE,
115 .end = OMAP3430_ISP_CSI2PHY_END, 174 .end = OMAP3430_ISP_CSIPHY2_END,
175 .flags = IORESOURCE_MEM,
176 },
177 {
178 .start = OMAP3630_ISP_CSI2A_REGS2_BASE,
179 .end = OMAP3630_ISP_CSI2A_REGS2_END,
180 .flags = IORESOURCE_MEM,
181 },
182 {
183 .start = OMAP3630_ISP_CSI2C_REGS1_BASE,
184 .end = OMAP3630_ISP_CSI2C_REGS1_END,
185 .flags = IORESOURCE_MEM,
186 },
187 {
188 .start = OMAP3630_ISP_CSIPHY1_BASE,
189 .end = OMAP3630_ISP_CSIPHY1_END,
190 .flags = IORESOURCE_MEM,
191 },
192 {
193 .start = OMAP3630_ISP_CSI2C_REGS2_BASE,
194 .end = OMAP3630_ISP_CSI2C_REGS2_END,
116 .flags = IORESOURCE_MEM, 195 .flags = IORESOURCE_MEM,
117 }, 196 },
118 { 197 {
@@ -128,106 +207,84 @@ static struct platform_device omap3isp_device = {
128 .resource = omap3isp_resources, 207 .resource = omap3isp_resources,
129}; 208};
130 209
131static inline void omap_init_camera(void) 210int omap3_init_camera(struct isp_platform_data *pdata)
132{ 211{
133 platform_device_register(&omap3isp_device); 212 omap3isp_device.dev.platform_data = pdata;
213 return platform_device_register(&omap3isp_device);
134} 214}
135#else 215
136static inline void omap_init_camera(void) 216static inline void omap_init_camera(void)
137{ 217{
138} 218#if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
219 if (cpu_is_omap24xx())
220 platform_device_register(&omap2cam_device);
139#endif 221#endif
222}
140 223
141#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE) 224struct omap_device_pm_latency omap_keyboard_latency[] = {
142
143#define MBOX_REG_SIZE 0x120
144
145#ifdef CONFIG_ARCH_OMAP2
146static struct resource omap2_mbox_resources[] = {
147 { 225 {
148 .start = OMAP24XX_MAILBOX_BASE, 226 .deactivate_func = omap_device_idle_hwmods,
149 .end = OMAP24XX_MAILBOX_BASE + MBOX_REG_SIZE - 1, 227 .activate_func = omap_device_enable_hwmods,
150 .flags = IORESOURCE_MEM, 228 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
151 },
152 {
153 .start = INT_24XX_MAIL_U0_MPU,
154 .flags = IORESOURCE_IRQ,
155 .name = "dsp",
156 },
157 {
158 .start = INT_24XX_MAIL_U3_MPU,
159 .flags = IORESOURCE_IRQ,
160 .name = "iva",
161 }, 229 },
162}; 230};
163static int omap2_mbox_resources_sz = ARRAY_SIZE(omap2_mbox_resources);
164#else
165#define omap2_mbox_resources NULL
166#define omap2_mbox_resources_sz 0
167#endif
168 231
169#ifdef CONFIG_ARCH_OMAP3 232int __init omap4_keyboard_init(struct omap4_keypad_platform_data
170static struct resource omap3_mbox_resources[] = { 233 *sdp4430_keypad_data)
171 { 234{
172 .start = OMAP34XX_MAILBOX_BASE, 235 struct omap_device *od;
173 .end = OMAP34XX_MAILBOX_BASE + MBOX_REG_SIZE - 1, 236 struct omap_hwmod *oh;
174 .flags = IORESOURCE_MEM, 237 struct omap4_keypad_platform_data *keypad_data;
175 }, 238 unsigned int id = -1;
176 { 239 char *oh_name = "kbd";
177 .start = INT_24XX_MAIL_U0_MPU, 240 char *name = "omap4-keypad";
178 .flags = IORESOURCE_IRQ, 241
179 .name = "dsp", 242 oh = omap_hwmod_lookup(oh_name);
180 }, 243 if (!oh) {
181}; 244 pr_err("Could not look up %s\n", oh_name);
182static int omap3_mbox_resources_sz = ARRAY_SIZE(omap3_mbox_resources); 245 return -ENODEV;
183#else 246 }
184#define omap3_mbox_resources NULL
185#define omap3_mbox_resources_sz 0
186#endif
187 247
188#ifdef CONFIG_ARCH_OMAP4 248 keypad_data = sdp4430_keypad_data;
189 249
190#define OMAP4_MBOX_REG_SIZE 0x130 250 od = omap_device_build(name, id, oh, keypad_data,
191static struct resource omap4_mbox_resources[] = { 251 sizeof(struct omap4_keypad_platform_data),
192 { 252 omap_keyboard_latency,
193 .start = OMAP44XX_MAILBOX_BASE, 253 ARRAY_SIZE(omap_keyboard_latency), 0);
194 .end = OMAP44XX_MAILBOX_BASE +
195 OMAP4_MBOX_REG_SIZE - 1,
196 .flags = IORESOURCE_MEM,
197 },
198 {
199 .start = OMAP44XX_IRQ_MAIL_U0,
200 .flags = IORESOURCE_IRQ,
201 .name = "mbox",
202 },
203};
204static int omap4_mbox_resources_sz = ARRAY_SIZE(omap4_mbox_resources);
205#else
206#define omap4_mbox_resources NULL
207#define omap4_mbox_resources_sz 0
208#endif
209 254
210static struct platform_device mbox_device = { 255 if (IS_ERR(od)) {
211 .name = "omap-mailbox", 256 WARN(1, "Can't build omap_device for %s:%s.\n",
212 .id = -1, 257 name, oh->name);
258 return PTR_ERR(od);
259 }
260
261 return 0;
262}
263
264#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
265static struct omap_device_pm_latency mbox_latencies[] = {
266 [0] = {
267 .activate_func = omap_device_enable_hwmods,
268 .deactivate_func = omap_device_idle_hwmods,
269 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
270 },
213}; 271};
214 272
215static inline void omap_init_mbox(void) 273static inline void omap_init_mbox(void)
216{ 274{
217 if (cpu_is_omap24xx()) { 275 struct omap_hwmod *oh;
218 mbox_device.resource = omap2_mbox_resources; 276 struct omap_device *od;
219 mbox_device.num_resources = omap2_mbox_resources_sz; 277
220 } else if (cpu_is_omap34xx()) { 278 oh = omap_hwmod_lookup("mailbox");
221 mbox_device.resource = omap3_mbox_resources; 279 if (!oh) {
222 mbox_device.num_resources = omap3_mbox_resources_sz; 280 pr_err("%s: unable to find hwmod\n", __func__);
223 } else if (cpu_is_omap44xx()) {
224 mbox_device.resource = omap4_mbox_resources;
225 mbox_device.num_resources = omap4_mbox_resources_sz;
226 } else {
227 pr_err("%s: platform not supported\n", __func__);
228 return; 281 return;
229 } 282 }
230 platform_device_register(&mbox_device); 283
284 od = omap_device_build("omap-mailbox", -1, oh, NULL, 0,
285 mbox_latencies, ARRAY_SIZE(mbox_latencies), 0);
286 WARN(IS_ERR(od), "%s: could not build device, err %ld\n",
287 __func__, PTR_ERR(od));
231} 288}
232#else 289#else
233static inline void omap_init_mbox(void) { } 290static inline void omap_init_mbox(void) { }
@@ -235,167 +292,96 @@ static inline void omap_init_mbox(void) { }
235 292
236static inline void omap_init_sti(void) {} 293static inline void omap_init_sti(void) {}
237 294
238#if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE) 295#if defined(CONFIG_SND_SOC) || defined(CONFIG_SND_SOC_MODULE)
239
240#include <plat/mcspi.h>
241
242#define OMAP2_MCSPI1_BASE 0x48098000
243#define OMAP2_MCSPI2_BASE 0x4809a000
244#define OMAP2_MCSPI3_BASE 0x480b8000
245#define OMAP2_MCSPI4_BASE 0x480ba000
246
247#define OMAP4_MCSPI1_BASE 0x48098100
248#define OMAP4_MCSPI2_BASE 0x4809a100
249#define OMAP4_MCSPI3_BASE 0x480b8100
250#define OMAP4_MCSPI4_BASE 0x480ba100
251
252static struct omap2_mcspi_platform_config omap2_mcspi1_config = {
253 .num_cs = 4,
254};
255
256static struct resource omap2_mcspi1_resources[] = {
257 {
258 .start = OMAP2_MCSPI1_BASE,
259 .end = OMAP2_MCSPI1_BASE + 0xff,
260 .flags = IORESOURCE_MEM,
261 },
262};
263
264static struct platform_device omap2_mcspi1 = {
265 .name = "omap2_mcspi",
266 .id = 1,
267 .num_resources = ARRAY_SIZE(omap2_mcspi1_resources),
268 .resource = omap2_mcspi1_resources,
269 .dev = {
270 .platform_data = &omap2_mcspi1_config,
271 },
272};
273 296
274static struct omap2_mcspi_platform_config omap2_mcspi2_config = { 297static struct platform_device omap_pcm = {
275 .num_cs = 2, 298 .name = "omap-pcm-audio",
299 .id = -1,
276}; 300};
277 301
278static struct resource omap2_mcspi2_resources[] = { 302/*
279 { 303 * OMAP2420 has 2 McBSP ports
280 .start = OMAP2_MCSPI2_BASE, 304 * OMAP2430 has 5 McBSP ports
281 .end = OMAP2_MCSPI2_BASE + 0xff, 305 * OMAP3 has 5 McBSP ports
282 .flags = IORESOURCE_MEM, 306 * OMAP4 has 4 McBSP ports
283 }, 307 */
284}; 308OMAP_MCBSP_PLATFORM_DEVICE(1);
285 309OMAP_MCBSP_PLATFORM_DEVICE(2);
286static struct platform_device omap2_mcspi2 = { 310OMAP_MCBSP_PLATFORM_DEVICE(3);
287 .name = "omap2_mcspi", 311OMAP_MCBSP_PLATFORM_DEVICE(4);
288 .id = 2, 312OMAP_MCBSP_PLATFORM_DEVICE(5);
289 .num_resources = ARRAY_SIZE(omap2_mcspi2_resources),
290 .resource = omap2_mcspi2_resources,
291 .dev = {
292 .platform_data = &omap2_mcspi2_config,
293 },
294};
295 313
296#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3) || \ 314static void omap_init_audio(void)
297 defined(CONFIG_ARCH_OMAP4) 315{
298static struct omap2_mcspi_platform_config omap2_mcspi3_config = { 316 platform_device_register(&omap_mcbsp1);
299 .num_cs = 2, 317 platform_device_register(&omap_mcbsp2);
300}; 318 if (cpu_is_omap243x() || cpu_is_omap34xx() || cpu_is_omap44xx()) {
319 platform_device_register(&omap_mcbsp3);
320 platform_device_register(&omap_mcbsp4);
321 }
322 if (cpu_is_omap243x() || cpu_is_omap34xx())
323 platform_device_register(&omap_mcbsp5);
301 324
302static struct resource omap2_mcspi3_resources[] = { 325 platform_device_register(&omap_pcm);
303 { 326}
304 .start = OMAP2_MCSPI3_BASE,
305 .end = OMAP2_MCSPI3_BASE + 0xff,
306 .flags = IORESOURCE_MEM,
307 },
308};
309 327
310static struct platform_device omap2_mcspi3 = { 328#else
311 .name = "omap2_mcspi", 329static inline void omap_init_audio(void) {}
312 .id = 3,
313 .num_resources = ARRAY_SIZE(omap2_mcspi3_resources),
314 .resource = omap2_mcspi3_resources,
315 .dev = {
316 .platform_data = &omap2_mcspi3_config,
317 },
318};
319#endif 330#endif
320 331
321#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) 332#if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
322static struct omap2_mcspi_platform_config omap2_mcspi4_config = {
323 .num_cs = 1,
324};
325 333
326static struct resource omap2_mcspi4_resources[] = { 334#include <plat/mcspi.h>
327 {
328 .start = OMAP2_MCSPI4_BASE,
329 .end = OMAP2_MCSPI4_BASE + 0xff,
330 .flags = IORESOURCE_MEM,
331 },
332};
333 335
334static struct platform_device omap2_mcspi4 = { 336struct omap_device_pm_latency omap_mcspi_latency[] = {
335 .name = "omap2_mcspi", 337 [0] = {
336 .id = 4, 338 .deactivate_func = omap_device_idle_hwmods,
337 .num_resources = ARRAY_SIZE(omap2_mcspi4_resources), 339 .activate_func = omap_device_enable_hwmods,
338 .resource = omap2_mcspi4_resources, 340 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
339 .dev = {
340 .platform_data = &omap2_mcspi4_config,
341 }, 341 },
342}; 342};
343#endif
344 343
345#ifdef CONFIG_ARCH_OMAP4 344static int omap_mcspi_init(struct omap_hwmod *oh, void *unused)
346static inline void omap4_mcspi_fixup(void)
347{ 345{
348 omap2_mcspi1_resources[0].start = OMAP4_MCSPI1_BASE; 346 struct omap_device *od;
349 omap2_mcspi1_resources[0].end = OMAP4_MCSPI1_BASE + 0xff; 347 char *name = "omap2_mcspi";
350 omap2_mcspi2_resources[0].start = OMAP4_MCSPI2_BASE; 348 struct omap2_mcspi_platform_config *pdata;
351 omap2_mcspi2_resources[0].end = OMAP4_MCSPI2_BASE + 0xff; 349 static int spi_num;
352 omap2_mcspi3_resources[0].start = OMAP4_MCSPI3_BASE; 350 struct omap2_mcspi_dev_attr *mcspi_attrib = oh->dev_attr;
353 omap2_mcspi3_resources[0].end = OMAP4_MCSPI3_BASE + 0xff; 351
354 omap2_mcspi4_resources[0].start = OMAP4_MCSPI4_BASE; 352 pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
355 omap2_mcspi4_resources[0].end = OMAP4_MCSPI4_BASE + 0xff; 353 if (!pdata) {
356} 354 pr_err("Memory allocation for McSPI device failed\n");
357#else 355 return -ENOMEM;
358static inline void omap4_mcspi_fixup(void) 356 }
359{
360}
361#endif
362 357
363#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3) || \ 358 pdata->num_cs = mcspi_attrib->num_chipselect;
364 defined(CONFIG_ARCH_OMAP4) 359 switch (oh->class->rev) {
365static inline void omap2_mcspi3_init(void) 360 case OMAP2_MCSPI_REV:
366{ 361 case OMAP3_MCSPI_REV:
367 platform_device_register(&omap2_mcspi3); 362 pdata->regs_offset = 0;
368} 363 break;
369#else 364 case OMAP4_MCSPI_REV:
370static inline void omap2_mcspi3_init(void) 365 pdata->regs_offset = OMAP4_MCSPI_REG_OFFSET;
371{ 366 break;
372} 367 default:
373#endif 368 pr_err("Invalid McSPI Revision value\n");
369 return -EINVAL;
370 }
374 371
375#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) 372 spi_num++;
376static inline void omap2_mcspi4_init(void) 373 od = omap_device_build(name, spi_num, oh, pdata,
377{ 374 sizeof(*pdata), omap_mcspi_latency,
378 platform_device_register(&omap2_mcspi4); 375 ARRAY_SIZE(omap_mcspi_latency), 0);
379} 376 WARN(IS_ERR(od), "Can't build omap_device for %s:%s\n",
380#else 377 name, oh->name);
381static inline void omap2_mcspi4_init(void) 378 kfree(pdata);
382{ 379 return 0;
383} 380}
384#endif
385 381
386static void omap_init_mcspi(void) 382static void omap_init_mcspi(void)
387{ 383{
388 if (cpu_is_omap44xx()) 384 omap_hwmod_for_each_by_class("mcspi", omap_mcspi_init, NULL);
389 omap4_mcspi_fixup();
390
391 platform_device_register(&omap2_mcspi1);
392 platform_device_register(&omap2_mcspi2);
393
394 if (cpu_is_omap2430() || cpu_is_omap343x() || cpu_is_omap44xx())
395 omap2_mcspi3_init();
396
397 if (cpu_is_omap343x() || cpu_is_omap44xx())
398 omap2_mcspi4_init();
399} 385}
400 386
401#else 387#else
@@ -498,115 +484,82 @@ static void omap_init_sham(void)
498static inline void omap_init_sham(void) { } 484static inline void omap_init_sham(void) { }
499#endif 485#endif
500 486
501/*-------------------------------------------------------------------------*/ 487#if defined(CONFIG_CRYPTO_DEV_OMAP_AES) || defined(CONFIG_CRYPTO_DEV_OMAP_AES_MODULE)
502
503#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
504 488
505#define MMCHS_SYSCONFIG 0x0010 489#ifdef CONFIG_ARCH_OMAP2
506#define MMCHS_SYSCONFIG_SWRESET (1 << 1) 490static struct resource omap2_aes_resources[] = {
507#define MMCHS_SYSSTATUS 0x0014 491 {
508#define MMCHS_SYSSTATUS_RESETDONE (1 << 0) 492 .start = OMAP24XX_SEC_AES_BASE,
493 .end = OMAP24XX_SEC_AES_BASE + 0x4C,
494 .flags = IORESOURCE_MEM,
495 },
496 {
497 .start = OMAP24XX_DMA_AES_TX,
498 .flags = IORESOURCE_DMA,
499 },
500 {
501 .start = OMAP24XX_DMA_AES_RX,
502 .flags = IORESOURCE_DMA,
503 }
504};
505static int omap2_aes_resources_sz = ARRAY_SIZE(omap2_aes_resources);
506#else
507#define omap2_aes_resources NULL
508#define omap2_aes_resources_sz 0
509#endif
509 510
510static struct platform_device dummy_pdev = { 511#ifdef CONFIG_ARCH_OMAP3
511 .dev = { 512static struct resource omap3_aes_resources[] = {
512 .bus = &platform_bus_type, 513 {
514 .start = OMAP34XX_SEC_AES_BASE,
515 .end = OMAP34XX_SEC_AES_BASE + 0x4C,
516 .flags = IORESOURCE_MEM,
513 }, 517 },
518 {
519 .start = OMAP34XX_DMA_AES2_TX,
520 .flags = IORESOURCE_DMA,
521 },
522 {
523 .start = OMAP34XX_DMA_AES2_RX,
524 .flags = IORESOURCE_DMA,
525 }
526};
527static int omap3_aes_resources_sz = ARRAY_SIZE(omap3_aes_resources);
528#else
529#define omap3_aes_resources NULL
530#define omap3_aes_resources_sz 0
531#endif
532
533static struct platform_device aes_device = {
534 .name = "omap-aes",
535 .id = -1,
514}; 536};
515 537
516/** 538static void omap_init_aes(void)
517 * omap_hsmmc_reset() - Full reset of each HS-MMC controller
518 *
519 * Ensure that each MMC controller is fully reset. Controllers
520 * left in an unknown state (by bootloader) may prevent retention
521 * or OFF-mode. This is especially important in cases where the
522 * MMC driver is not enabled, _or_ built as a module.
523 *
524 * In order for reset to work, interface, functional and debounce
525 * clocks must be enabled. The debounce clock comes from func_32k_clk
526 * and is not under SW control, so we only enable i- and f-clocks.
527 **/
528static void __init omap_hsmmc_reset(void)
529{ 539{
530 u32 i, nr_controllers; 540 if (cpu_is_omap24xx()) {
531 541 aes_device.resource = omap2_aes_resources;
532 if (cpu_is_omap242x()) 542 aes_device.num_resources = omap2_aes_resources_sz;
543 } else if (cpu_is_omap34xx()) {
544 aes_device.resource = omap3_aes_resources;
545 aes_device.num_resources = omap3_aes_resources_sz;
546 } else {
547 pr_err("%s: platform not supported\n", __func__);
533 return; 548 return;
534
535 nr_controllers = cpu_is_omap44xx() ? OMAP44XX_NR_MMC :
536 (cpu_is_omap34xx() ? OMAP34XX_NR_MMC : OMAP24XX_NR_MMC);
537
538 for (i = 0; i < nr_controllers; i++) {
539 u32 v, base = 0;
540 struct clk *iclk, *fclk;
541 struct device *dev = &dummy_pdev.dev;
542
543 switch (i) {
544 case 0:
545 base = OMAP2_MMC1_BASE;
546 break;
547 case 1:
548 base = OMAP2_MMC2_BASE;
549 break;
550 case 2:
551 base = OMAP3_MMC3_BASE;
552 break;
553 case 3:
554 if (!cpu_is_omap44xx())
555 return;
556 base = OMAP4_MMC4_BASE;
557 break;
558 case 4:
559 if (!cpu_is_omap44xx())
560 return;
561 base = OMAP4_MMC5_BASE;
562 break;
563 }
564
565 if (cpu_is_omap44xx())
566 base += OMAP4_MMC_REG_OFFSET;
567
568 dummy_pdev.id = i;
569 dev_set_name(&dummy_pdev.dev, "mmci-omap-hs.%d", i);
570 iclk = clk_get(dev, "ick");
571 if (iclk && clk_enable(iclk))
572 iclk = NULL;
573
574 fclk = clk_get(dev, "fck");
575 if (fclk && clk_enable(fclk))
576 fclk = NULL;
577
578 if (!iclk || !fclk) {
579 printk(KERN_WARNING
580 "%s: Unable to enable clocks for MMC%d, "
581 "cannot reset.\n", __func__, i);
582 break;
583 }
584
585 omap_writel(MMCHS_SYSCONFIG_SWRESET, base + MMCHS_SYSCONFIG);
586 v = omap_readl(base + MMCHS_SYSSTATUS);
587 while (!(omap_readl(base + MMCHS_SYSSTATUS) &
588 MMCHS_SYSSTATUS_RESETDONE))
589 cpu_relax();
590
591 if (fclk) {
592 clk_disable(fclk);
593 clk_put(fclk);
594 }
595 if (iclk) {
596 clk_disable(iclk);
597 clk_put(iclk);
598 }
599 } 549 }
550 platform_device_register(&aes_device);
600} 551}
552
601#else 553#else
602static inline void omap_hsmmc_reset(void) {} 554static inline void omap_init_aes(void) { }
603#endif 555#endif
604 556
605#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \ 557/*-------------------------------------------------------------------------*/
606 defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) 558
559#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
607 560
608static inline void omap2_mmc_mux(struct omap_mmc_platform_data *mmc_controller, 561static inline void omap242x_mmc_mux(struct omap_mmc_platform_data
609 int controller_nr) 562 *mmc_controller)
610{ 563{
611 if ((mmc_controller->slots[0].switch_pin > 0) && \ 564 if ((mmc_controller->slots[0].switch_pin > 0) && \
612 (mmc_controller->slots[0].switch_pin < OMAP_MAX_GPIO_LINES)) 565 (mmc_controller->slots[0].switch_pin < OMAP_MAX_GPIO_LINES))
@@ -617,163 +570,44 @@ static inline void omap2_mmc_mux(struct omap_mmc_platform_data *mmc_controller,
617 omap_mux_init_gpio(mmc_controller->slots[0].gpio_wp, 570 omap_mux_init_gpio(mmc_controller->slots[0].gpio_wp,
618 OMAP_PIN_INPUT_PULLUP); 571 OMAP_PIN_INPUT_PULLUP);
619 572
620 if (cpu_is_omap2420() && controller_nr == 0) { 573 omap_mux_init_signal("sdmmc_cmd", 0);
621 omap_mux_init_signal("sdmmc_cmd", 0); 574 omap_mux_init_signal("sdmmc_clki", 0);
622 omap_mux_init_signal("sdmmc_clki", 0); 575 omap_mux_init_signal("sdmmc_clko", 0);
623 omap_mux_init_signal("sdmmc_clko", 0); 576 omap_mux_init_signal("sdmmc_dat0", 0);
624 omap_mux_init_signal("sdmmc_dat0", 0); 577 omap_mux_init_signal("sdmmc_dat_dir0", 0);
625 omap_mux_init_signal("sdmmc_dat_dir0", 0); 578 omap_mux_init_signal("sdmmc_cmd_dir", 0);
626 omap_mux_init_signal("sdmmc_cmd_dir", 0); 579 if (mmc_controller->slots[0].caps & MMC_CAP_4_BIT_DATA) {
627 if (mmc_controller->slots[0].wires == 4) { 580 omap_mux_init_signal("sdmmc_dat1", 0);
628 omap_mux_init_signal("sdmmc_dat1", 0); 581 omap_mux_init_signal("sdmmc_dat2", 0);
629 omap_mux_init_signal("sdmmc_dat2", 0); 582 omap_mux_init_signal("sdmmc_dat3", 0);
630 omap_mux_init_signal("sdmmc_dat3", 0); 583 omap_mux_init_signal("sdmmc_dat_dir1", 0);
631 omap_mux_init_signal("sdmmc_dat_dir1", 0); 584 omap_mux_init_signal("sdmmc_dat_dir2", 0);
632 omap_mux_init_signal("sdmmc_dat_dir2", 0); 585 omap_mux_init_signal("sdmmc_dat_dir3", 0);
633 omap_mux_init_signal("sdmmc_dat_dir3", 0);
634 }
635
636 /*
637 * Use internal loop-back in MMC/SDIO Module Input Clock
638 * selection
639 */
640 if (mmc_controller->slots[0].internal_clock) {
641 u32 v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
642 v |= (1 << 24);
643 omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
644 }
645 } 586 }
646 587
647 if (cpu_is_omap34xx()) { 588 /*
648 if (controller_nr == 0) { 589 * Use internal loop-back in MMC/SDIO Module Input Clock
649 omap_mux_init_signal("sdmmc1_clk", 590 * selection
650 OMAP_PIN_INPUT_PULLUP); 591 */
651 omap_mux_init_signal("sdmmc1_cmd", 592 if (mmc_controller->slots[0].internal_clock) {
652 OMAP_PIN_INPUT_PULLUP); 593 u32 v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
653 omap_mux_init_signal("sdmmc1_dat0", 594 v |= (1 << 24);
654 OMAP_PIN_INPUT_PULLUP); 595 omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
655 if (mmc_controller->slots[0].wires == 4 ||
656 mmc_controller->slots[0].wires == 8) {
657 omap_mux_init_signal("sdmmc1_dat1",
658 OMAP_PIN_INPUT_PULLUP);
659 omap_mux_init_signal("sdmmc1_dat2",
660 OMAP_PIN_INPUT_PULLUP);
661 omap_mux_init_signal("sdmmc1_dat3",
662 OMAP_PIN_INPUT_PULLUP);
663 }
664 if (mmc_controller->slots[0].wires == 8) {
665 omap_mux_init_signal("sdmmc1_dat4",
666 OMAP_PIN_INPUT_PULLUP);
667 omap_mux_init_signal("sdmmc1_dat5",
668 OMAP_PIN_INPUT_PULLUP);
669 omap_mux_init_signal("sdmmc1_dat6",
670 OMAP_PIN_INPUT_PULLUP);
671 omap_mux_init_signal("sdmmc1_dat7",
672 OMAP_PIN_INPUT_PULLUP);
673 }
674 }
675 if (controller_nr == 1) {
676 /* MMC2 */
677 omap_mux_init_signal("sdmmc2_clk",
678 OMAP_PIN_INPUT_PULLUP);
679 omap_mux_init_signal("sdmmc2_cmd",
680 OMAP_PIN_INPUT_PULLUP);
681 omap_mux_init_signal("sdmmc2_dat0",
682 OMAP_PIN_INPUT_PULLUP);
683
684 /*
685 * For 8 wire configurations, Lines DAT4, 5, 6 and 7 need to be muxed
686 * in the board-*.c files
687 */
688 if (mmc_controller->slots[0].wires == 4 ||
689 mmc_controller->slots[0].wires == 8) {
690 omap_mux_init_signal("sdmmc2_dat1",
691 OMAP_PIN_INPUT_PULLUP);
692 omap_mux_init_signal("sdmmc2_dat2",
693 OMAP_PIN_INPUT_PULLUP);
694 omap_mux_init_signal("sdmmc2_dat3",
695 OMAP_PIN_INPUT_PULLUP);
696 }
697 if (mmc_controller->slots[0].wires == 8) {
698 omap_mux_init_signal("sdmmc2_dat4.sdmmc2_dat4",
699 OMAP_PIN_INPUT_PULLUP);
700 omap_mux_init_signal("sdmmc2_dat5.sdmmc2_dat5",
701 OMAP_PIN_INPUT_PULLUP);
702 omap_mux_init_signal("sdmmc2_dat6.sdmmc2_dat6",
703 OMAP_PIN_INPUT_PULLUP);
704 omap_mux_init_signal("sdmmc2_dat7.sdmmc2_dat7",
705 OMAP_PIN_INPUT_PULLUP);
706 }
707 }
708
709 /*
710 * For MMC3 the pins need to be muxed in the board-*.c files
711 */
712 } 596 }
713} 597}
714 598
715void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data, 599void __init omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data)
716 int nr_controllers)
717{ 600{
718 int i; 601 char *name = "mmci-omap";
719 char *name;
720 602
721 for (i = 0; i < nr_controllers; i++) { 603 if (!mmc_data[0]) {
722 unsigned long base, size; 604 pr_err("%s fails: Incomplete platform data\n", __func__);
723 unsigned int irq = 0; 605 return;
724 606 }
725 if (!mmc_data[i])
726 continue;
727
728 omap2_mmc_mux(mmc_data[i], i);
729 607
730 switch (i) { 608 omap242x_mmc_mux(mmc_data[0]);
731 case 0: 609 omap_mmc_add(name, 0, OMAP2_MMC1_BASE, OMAP2420_MMC_SIZE,
732 base = OMAP2_MMC1_BASE; 610 INT_24XX_MMC_IRQ, mmc_data[0]);
733 irq = INT_24XX_MMC_IRQ;
734 break;
735 case 1:
736 base = OMAP2_MMC2_BASE;
737 irq = INT_24XX_MMC2_IRQ;
738 break;
739 case 2:
740 if (!cpu_is_omap44xx() && !cpu_is_omap34xx())
741 return;
742 base = OMAP3_MMC3_BASE;
743 irq = INT_34XX_MMC3_IRQ;
744 break;
745 case 3:
746 if (!cpu_is_omap44xx())
747 return;
748 base = OMAP4_MMC4_BASE + OMAP4_MMC_REG_OFFSET;
749 irq = OMAP44XX_IRQ_MMC4;
750 break;
751 case 4:
752 if (!cpu_is_omap44xx())
753 return;
754 base = OMAP4_MMC5_BASE + OMAP4_MMC_REG_OFFSET;
755 irq = OMAP44XX_IRQ_MMC5;
756 break;
757 default:
758 continue;
759 }
760
761 if (cpu_is_omap2420()) {
762 size = OMAP2420_MMC_SIZE;
763 name = "mmci-omap";
764 } else if (cpu_is_omap44xx()) {
765 if (i < 3) {
766 base += OMAP4_MMC_REG_OFFSET;
767 irq += OMAP44XX_IRQ_GIC_START;
768 }
769 size = OMAP4_HSMMC_SIZE;
770 name = "mmci-omap-hs";
771 } else {
772 size = OMAP3_HSMMC_SIZE;
773 name = "mmci-omap-hs";
774 }
775 omap_mmc_add(name, i, base, size, irq, mmc_data[i]);
776 };
777} 611}
778 612
779#endif 613#endif
@@ -781,7 +615,7 @@ void __init omap2_init_mmc(struct omap_mmc_platform_data **mmc_data,
781/*-------------------------------------------------------------------------*/ 615/*-------------------------------------------------------------------------*/
782 616
783#if defined(CONFIG_HDQ_MASTER_OMAP) || defined(CONFIG_HDQ_MASTER_OMAP_MODULE) 617#if defined(CONFIG_HDQ_MASTER_OMAP) || defined(CONFIG_HDQ_MASTER_OMAP_MODULE)
784#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) 618#if defined(CONFIG_SOC_OMAP2430) || defined(CONFIG_SOC_OMAP3430)
785#define OMAP_HDQ_BASE 0x480B2000 619#define OMAP_HDQ_BASE 0x480B2000
786#endif 620#endif
787static struct resource omap_hdq_resources[] = { 621static struct resource omap_hdq_resources[] = {
@@ -843,10 +677,11 @@ static inline void omap_init_vout(void) {}
843 677
844static int __init omap2_init_devices(void) 678static int __init omap2_init_devices(void)
845{ 679{
846 /* please keep these calls, and their implementations above, 680 /*
681 * please keep these calls, and their implementations above,
847 * in alphabetical order so they're easier to sort through. 682 * in alphabetical order so they're easier to sort through.
848 */ 683 */
849 omap_hsmmc_reset(); 684 omap_init_audio();
850 omap_init_camera(); 685 omap_init_camera();
851 omap_init_mbox(); 686 omap_init_mbox();
852 omap_init_mcspi(); 687 omap_init_mcspi();
@@ -854,8 +689,45 @@ static int __init omap2_init_devices(void)
854 omap_hdq_init(); 689 omap_hdq_init();
855 omap_init_sti(); 690 omap_init_sti();
856 omap_init_sham(); 691 omap_init_sham();
692 omap_init_aes();
857 omap_init_vout(); 693 omap_init_vout();
858 694
859 return 0; 695 return 0;
860} 696}
861arch_initcall(omap2_init_devices); 697arch_initcall(omap2_init_devices);
698
699#if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE)
700static struct omap_device_pm_latency omap_wdt_latency[] = {
701 [0] = {
702 .deactivate_func = omap_device_idle_hwmods,
703 .activate_func = omap_device_enable_hwmods,
704 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
705 },
706};
707
708static int __init omap_init_wdt(void)
709{
710 int id = -1;
711 struct omap_device *od;
712 struct omap_hwmod *oh;
713 char *oh_name = "wd_timer2";
714 char *dev_name = "omap_wdt";
715
716 if (!cpu_class_is_omap2())
717 return 0;
718
719 oh = omap_hwmod_lookup(oh_name);
720 if (!oh) {
721 pr_err("Could not look up wd_timer%d hwmod\n", id);
722 return -EINVAL;
723 }
724
725 od = omap_device_build(dev_name, id, oh, NULL, 0,
726 omap_wdt_latency,
727 ARRAY_SIZE(omap_wdt_latency), 0);
728 WARN(IS_ERR(od), "Can't build omap_device for %s:%s.\n",
729 dev_name, oh->name);
730 return 0;
731}
732subsys_initcall(omap_init_wdt);
733#endif
diff --git a/arch/arm/mach-omap2/devices.h b/arch/arm/mach-omap2/devices.h
new file mode 100644
index 000000000000..f61eb6e5d136
--- /dev/null
+++ b/arch/arm/mach-omap2/devices.h
@@ -0,0 +1,19 @@
1/*
2 * arch/arm/mach-omap2/devices.h
3 *
4 * OMAP2 platform device setup/initialization
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 */
11
12#ifndef __ARCH_ARM_MACH_OMAP_DEVICES_H
13#define __ARCH_ARM_MACH_OMAP_DEVICES_H
14
15struct isp_platform_data;
16
17int omap3_init_camera(struct isp_platform_data *pdata);
18
19#endif
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
new file mode 100644
index 000000000000..543fcb8b518c
--- /dev/null
+++ b/arch/arm/mach-omap2/display.c
@@ -0,0 +1,148 @@
1/*
2 * OMAP2plus display device setup / initialization.
3 *
4 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
5 * Senthilvadivu Guruswamy
6 * Sumit Semwal
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 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
13 * kind, whether express or implied; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 */
17
18#include <linux/kernel.h>
19#include <linux/init.h>
20#include <linux/platform_device.h>
21#include <linux/io.h>
22#include <linux/clk.h>
23#include <linux/err.h>
24
25#include <video/omapdss.h>
26#include <plat/omap_hwmod.h>
27#include <plat/omap_device.h>
28
29static struct platform_device omap_display_device = {
30 .name = "omapdss",
31 .id = -1,
32 .dev = {
33 .platform_data = NULL,
34 },
35};
36
37static struct omap_device_pm_latency omap_dss_latency[] = {
38 [0] = {
39 .deactivate_func = omap_device_idle_hwmods,
40 .activate_func = omap_device_enable_hwmods,
41 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
42 },
43};
44
45/* oh_core is used for getting opt-clocks */
46static struct omap_hwmod *oh_core;
47
48static bool opt_clock_available(const char *clk_role)
49{
50 int i;
51
52 for (i = 0; i < oh_core->opt_clks_cnt; i++) {
53 if (!strcmp(oh_core->opt_clks[i].role, clk_role))
54 return true;
55 }
56 return false;
57}
58
59struct omap_dss_hwmod_data {
60 const char *oh_name;
61 const char *dev_name;
62 const int id;
63};
64
65static const struct omap_dss_hwmod_data omap2_dss_hwmod_data[] __initdata = {
66 { "dss_core", "omapdss_dss", -1 },
67 { "dss_dispc", "omapdss_dispc", -1 },
68 { "dss_rfbi", "omapdss_rfbi", -1 },
69 { "dss_venc", "omapdss_venc", -1 },
70};
71
72static const struct omap_dss_hwmod_data omap3_dss_hwmod_data[] __initdata = {
73 { "dss_core", "omapdss_dss", -1 },
74 { "dss_dispc", "omapdss_dispc", -1 },
75 { "dss_rfbi", "omapdss_rfbi", -1 },
76 { "dss_venc", "omapdss_venc", -1 },
77 { "dss_dsi1", "omapdss_dsi1", -1 },
78};
79
80static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
81 { "dss_core", "omapdss_dss", -1 },
82 { "dss_dispc", "omapdss_dispc", -1 },
83 { "dss_rfbi", "omapdss_rfbi", -1 },
84 { "dss_venc", "omapdss_venc", -1 },
85 { "dss_dsi1", "omapdss_dsi1", -1 },
86 { "dss_dsi2", "omapdss_dsi2", -1 },
87 { "dss_hdmi", "omapdss_hdmi", -1 },
88};
89
90int __init omap_display_init(struct omap_dss_board_info *board_data)
91{
92 int r = 0;
93 struct omap_hwmod *oh;
94 struct omap_device *od;
95 int i, oh_count;
96 struct omap_display_platform_data pdata;
97 const struct omap_dss_hwmod_data *curr_dss_hwmod;
98
99 memset(&pdata, 0, sizeof(pdata));
100
101 if (cpu_is_omap24xx()) {
102 curr_dss_hwmod = omap2_dss_hwmod_data;
103 oh_count = ARRAY_SIZE(omap2_dss_hwmod_data);
104 } else if (cpu_is_omap34xx()) {
105 curr_dss_hwmod = omap3_dss_hwmod_data;
106 oh_count = ARRAY_SIZE(omap3_dss_hwmod_data);
107 } else {
108 curr_dss_hwmod = omap4_dss_hwmod_data;
109 oh_count = ARRAY_SIZE(omap4_dss_hwmod_data);
110 }
111
112 /* opt_clks are always associated with dss hwmod */
113 oh_core = omap_hwmod_lookup("dss_core");
114 if (!oh_core) {
115 pr_err("Could not look up dss_core.\n");
116 return -ENODEV;
117 }
118
119 pdata.board_data = board_data;
120 pdata.board_data->get_last_off_on_transaction_id = NULL;
121 pdata.opt_clock_available = opt_clock_available;
122
123 for (i = 0; i < oh_count; i++) {
124 oh = omap_hwmod_lookup(curr_dss_hwmod[i].oh_name);
125 if (!oh) {
126 pr_err("Could not look up %s\n",
127 curr_dss_hwmod[i].oh_name);
128 return -ENODEV;
129 }
130
131 od = omap_device_build(curr_dss_hwmod[i].dev_name,
132 curr_dss_hwmod[i].id, oh, &pdata,
133 sizeof(struct omap_display_platform_data),
134 omap_dss_latency,
135 ARRAY_SIZE(omap_dss_latency), 0);
136
137 if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n",
138 curr_dss_hwmod[i].oh_name))
139 return -ENODEV;
140 }
141 omap_display_device.dev.platform_data = board_data;
142
143 r = platform_device_register(&omap_display_device);
144 if (r < 0)
145 printk(KERN_ERR "Unable to register OMAP-Display device\n");
146
147 return r;
148}
diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c
new file mode 100644
index 000000000000..c9ff0e79703d
--- /dev/null
+++ b/arch/arm/mach-omap2/dma.c
@@ -0,0 +1,297 @@
1/*
2 * OMAP2+ DMA driver
3 *
4 * Copyright (C) 2003 - 2008 Nokia Corporation
5 * Author: Juha Yrjölä <juha.yrjola@nokia.com>
6 * DMA channel linking for 1610 by Samuel Ortiz <samuel.ortiz@nokia.com>
7 * Graphics DMA and LCD DMA graphics tranformations
8 * by Imre Deak <imre.deak@nokia.com>
9 * OMAP2/3 support Copyright (C) 2004-2007 Texas Instruments, Inc.
10 * Some functions based on earlier dma-omap.c Copyright (C) 2001 RidgeRun, Inc.
11 *
12 * Copyright (C) 2009 Texas Instruments
13 * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
14 *
15 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
16 * Converted DMA library into platform driver
17 * - G, Manjunath Kondaiah <manjugk@ti.com>
18 *
19 * This program is free software; you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 2 as
21 * published by the Free Software Foundation.
22 */
23
24#include <linux/err.h>
25#include <linux/io.h>
26#include <linux/slab.h>
27#include <linux/module.h>
28#include <linux/init.h>
29#include <linux/device.h>
30
31#include <plat/omap_hwmod.h>
32#include <plat/omap_device.h>
33#include <plat/dma.h>
34
35#define OMAP2_DMA_STRIDE 0x60
36
37static u32 errata;
38static u8 dma_stride;
39
40static struct omap_dma_dev_attr *d;
41
42static enum omap_reg_offsets dma_common_ch_start, dma_common_ch_end;
43
44static u16 reg_map[] = {
45 [REVISION] = 0x00,
46 [GCR] = 0x78,
47 [IRQSTATUS_L0] = 0x08,
48 [IRQSTATUS_L1] = 0x0c,
49 [IRQSTATUS_L2] = 0x10,
50 [IRQSTATUS_L3] = 0x14,
51 [IRQENABLE_L0] = 0x18,
52 [IRQENABLE_L1] = 0x1c,
53 [IRQENABLE_L2] = 0x20,
54 [IRQENABLE_L3] = 0x24,
55 [SYSSTATUS] = 0x28,
56 [OCP_SYSCONFIG] = 0x2c,
57 [CAPS_0] = 0x64,
58 [CAPS_2] = 0x6c,
59 [CAPS_3] = 0x70,
60 [CAPS_4] = 0x74,
61
62 /* Common register offsets */
63 [CCR] = 0x80,
64 [CLNK_CTRL] = 0x84,
65 [CICR] = 0x88,
66 [CSR] = 0x8c,
67 [CSDP] = 0x90,
68 [CEN] = 0x94,
69 [CFN] = 0x98,
70 [CSEI] = 0xa4,
71 [CSFI] = 0xa8,
72 [CDEI] = 0xac,
73 [CDFI] = 0xb0,
74 [CSAC] = 0xb4,
75 [CDAC] = 0xb8,
76
77 /* Channel specific register offsets */
78 [CSSA] = 0x9c,
79 [CDSA] = 0xa0,
80 [CCEN] = 0xbc,
81 [CCFN] = 0xc0,
82 [COLOR] = 0xc4,
83
84 /* OMAP4 specific registers */
85 [CDP] = 0xd0,
86 [CNDP] = 0xd4,
87 [CCDN] = 0xd8,
88};
89
90static struct omap_device_pm_latency omap2_dma_latency[] = {
91 {
92 .deactivate_func = omap_device_idle_hwmods,
93 .activate_func = omap_device_enable_hwmods,
94 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
95 },
96};
97
98static void __iomem *dma_base;
99static inline void dma_write(u32 val, int reg, int lch)
100{
101 u8 stride;
102 u32 offset;
103
104 stride = (reg >= dma_common_ch_start) ? dma_stride : 0;
105 offset = reg_map[reg] + (stride * lch);
106 __raw_writel(val, dma_base + offset);
107}
108
109static inline u32 dma_read(int reg, int lch)
110{
111 u8 stride;
112 u32 offset, val;
113
114 stride = (reg >= dma_common_ch_start) ? dma_stride : 0;
115 offset = reg_map[reg] + (stride * lch);
116 val = __raw_readl(dma_base + offset);
117 return val;
118}
119
120static inline void omap2_disable_irq_lch(int lch)
121{
122 u32 val;
123
124 val = dma_read(IRQENABLE_L0, lch);
125 val &= ~(1 << lch);
126 dma_write(val, IRQENABLE_L0, lch);
127}
128
129static void omap2_clear_dma(int lch)
130{
131 int i = dma_common_ch_start;
132
133 for (; i <= dma_common_ch_end; i += 1)
134 dma_write(0, i, lch);
135}
136
137static void omap2_show_dma_caps(void)
138{
139 u8 revision = dma_read(REVISION, 0) & 0xff;
140 printk(KERN_INFO "OMAP DMA hardware revision %d.%d\n",
141 revision >> 4, revision & 0xf);
142 return;
143}
144
145static u32 configure_dma_errata(void)
146{
147
148 /*
149 * Errata applicable for OMAP2430ES1.0 and all omap2420
150 *
151 * I.
152 * Erratum ID: Not Available
153 * Inter Frame DMA buffering issue DMA will wrongly
154 * buffer elements if packing and bursting is enabled. This might
155 * result in data gets stalled in FIFO at the end of the block.
156 * Workaround: DMA channels must have BUFFERING_DISABLED bit set to
157 * guarantee no data will stay in the DMA FIFO in case inter frame
158 * buffering occurs
159 *
160 * II.
161 * Erratum ID: Not Available
162 * DMA may hang when several channels are used in parallel
163 * In the following configuration, DMA channel hanging can occur:
164 * a. Channel i, hardware synchronized, is enabled
165 * b. Another channel (Channel x), software synchronized, is enabled.
166 * c. Channel i is disabled before end of transfer
167 * d. Channel i is reenabled.
168 * e. Steps 1 to 4 are repeated a certain number of times.
169 * f. A third channel (Channel y), software synchronized, is enabled.
170 * Channel x and Channel y may hang immediately after step 'f'.
171 * Workaround:
172 * For any channel used - make sure NextLCH_ID is set to the value j.
173 */
174 if (cpu_is_omap2420() || (cpu_is_omap2430() &&
175 (omap_type() == OMAP2430_REV_ES1_0))) {
176
177 SET_DMA_ERRATA(DMA_ERRATA_IFRAME_BUFFERING);
178 SET_DMA_ERRATA(DMA_ERRATA_PARALLEL_CHANNELS);
179 }
180
181 /*
182 * Erratum ID: i378: OMAP2+: sDMA Channel is not disabled
183 * after a transaction error.
184 * Workaround: SW should explicitely disable the channel.
185 */
186 if (cpu_class_is_omap2())
187 SET_DMA_ERRATA(DMA_ERRATA_i378);
188
189 /*
190 * Erratum ID: i541: sDMA FIFO draining does not finish
191 * If sDMA channel is disabled on the fly, sDMA enters standby even
192 * through FIFO Drain is still in progress
193 * Workaround: Put sDMA in NoStandby more before a logical channel is
194 * disabled, then put it back to SmartStandby right after the channel
195 * finishes FIFO draining.
196 */
197 if (cpu_is_omap34xx())
198 SET_DMA_ERRATA(DMA_ERRATA_i541);
199
200 /*
201 * Erratum ID: i88 : Special programming model needed to disable DMA
202 * before end of block.
203 * Workaround: software must ensure that the DMA is configured in No
204 * Standby mode(DMAx_OCP_SYSCONFIG.MIDLEMODE = "01")
205 */
206 if (omap_type() == OMAP3430_REV_ES1_0)
207 SET_DMA_ERRATA(DMA_ERRATA_i88);
208
209 /*
210 * Erratum 3.2/3.3: sometimes 0 is returned if CSAC/CDAC is
211 * read before the DMA controller finished disabling the channel.
212 */
213 SET_DMA_ERRATA(DMA_ERRATA_3_3);
214
215 /*
216 * Erratum ID: Not Available
217 * A bug in ROM code leaves IRQ status for channels 0 and 1 uncleared
218 * after secure sram context save and restore.
219 * Work around: Hence we need to manually clear those IRQs to avoid
220 * spurious interrupts. This affects only secure devices.
221 */
222 if (cpu_is_omap34xx() && (omap_type() != OMAP2_DEVICE_TYPE_GP))
223 SET_DMA_ERRATA(DMA_ROMCODE_BUG);
224
225 return errata;
226}
227
228/* One time initializations */
229static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
230{
231 struct omap_device *od;
232 struct omap_system_dma_plat_info *p;
233 struct resource *mem;
234 char *name = "omap_dma_system";
235
236 dma_stride = OMAP2_DMA_STRIDE;
237 dma_common_ch_start = CSDP;
238 if (cpu_is_omap3630() || cpu_is_omap4430())
239 dma_common_ch_end = CCDN;
240 else
241 dma_common_ch_end = CCFN;
242
243 p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL);
244 if (!p) {
245 pr_err("%s: Unable to allocate pdata for %s:%s\n",
246 __func__, name, oh->name);
247 return -ENOMEM;
248 }
249
250 p->dma_attr = (struct omap_dma_dev_attr *)oh->dev_attr;
251 p->disable_irq_lch = omap2_disable_irq_lch;
252 p->show_dma_caps = omap2_show_dma_caps;
253 p->clear_dma = omap2_clear_dma;
254 p->dma_write = dma_write;
255 p->dma_read = dma_read;
256
257 p->clear_lch_regs = NULL;
258
259 p->errata = configure_dma_errata();
260
261 od = omap_device_build(name, 0, oh, p, sizeof(*p),
262 omap2_dma_latency, ARRAY_SIZE(omap2_dma_latency), 0);
263 kfree(p);
264 if (IS_ERR(od)) {
265 pr_err("%s: Can't build omap_device for %s:%s.\n",
266 __func__, name, oh->name);
267 return PTR_ERR(od);
268 }
269
270 mem = platform_get_resource(&od->pdev, IORESOURCE_MEM, 0);
271 if (!mem) {
272 dev_err(&od->pdev.dev, "%s: no mem resource\n", __func__);
273 return -EINVAL;
274 }
275 dma_base = ioremap(mem->start, resource_size(mem));
276 if (!dma_base) {
277 dev_err(&od->pdev.dev, "%s: ioremap fail\n", __func__);
278 return -ENOMEM;
279 }
280
281 d = oh->dev_attr;
282 d->chan = kzalloc(sizeof(struct omap_dma_lch) *
283 (d->lch_count), GFP_KERNEL);
284
285 if (!d->chan) {
286 dev_err(&od->pdev.dev, "%s: kzalloc fail\n", __func__);
287 return -ENOMEM;
288 }
289 return 0;
290}
291
292static int __init omap2_system_dma_init(void)
293{
294 return omap_hwmod_for_each_by_class("dma",
295 omap2_system_dma_init_dev, NULL);
296}
297arch_initcall(omap2_system_dma_init);
diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c
index ed8d330522f1..f77022be783d 100644
--- a/arch/arm/mach-omap2/dpll3xxx.c
+++ b/arch/arm/mach-omap2/dpll3xxx.c
@@ -26,15 +26,13 @@
26#include <linux/clk.h> 26#include <linux/clk.h>
27#include <linux/io.h> 27#include <linux/io.h>
28#include <linux/bitops.h> 28#include <linux/bitops.h>
29#include <linux/clkdev.h>
29 30
30#include <plat/cpu.h> 31#include <plat/cpu.h>
31#include <plat/clock.h> 32#include <plat/clock.h>
32#include <asm/clkdev.h>
33 33
34#include "clock.h" 34#include "clock.h"
35#include "prm.h" 35#include "cm2xxx_3xxx.h"
36#include "prm-regbits-34xx.h"
37#include "cm.h"
38#include "cm-regbits-34xx.h" 36#include "cm-regbits-34xx.h"
39 37
40/* CM_AUTOIDLE_PLL*.AUTO_* bit values */ 38/* CM_AUTOIDLE_PLL*.AUTO_* bit values */
@@ -225,10 +223,9 @@ static int _omap3_noncore_dpll_stop(struct clk *clk)
225} 223}
226 224
227/** 225/**
228 * lookup_dco_sddiv - Set j-type DPLL4 compensation variables 226 * _lookup_dco - Lookup DCO used by j-type DPLL
229 * @clk: pointer to a DPLL struct clk 227 * @clk: pointer to a DPLL struct clk
230 * @dco: digital control oscillator selector 228 * @dco: digital control oscillator selector
231 * @sd_div: target sigma-delta divider
232 * @m: DPLL multiplier to set 229 * @m: DPLL multiplier to set
233 * @n: DPLL divider to set 230 * @n: DPLL divider to set
234 * 231 *
@@ -237,11 +234,9 @@ static int _omap3_noncore_dpll_stop(struct clk *clk)
237 * XXX This code is not needed for 3430/AM35xx; can it be optimized 234 * XXX This code is not needed for 3430/AM35xx; can it be optimized
238 * out in non-multi-OMAP builds for those chips? 235 * out in non-multi-OMAP builds for those chips?
239 */ 236 */
240static void lookup_dco_sddiv(struct clk *clk, u8 *dco, u8 *sd_div, u16 m, 237static void _lookup_dco(struct clk *clk, u8 *dco, u16 m, u8 n)
241 u8 n)
242{ 238{
243 unsigned long fint, clkinp, sd; /* watch out for overflow */ 239 unsigned long fint, clkinp; /* watch out for overflow */
244 int mod1, mod2;
245 240
246 clkinp = clk->parent->rate; 241 clkinp = clk->parent->rate;
247 fint = (clkinp / n) * m; 242 fint = (clkinp / n) * m;
@@ -250,6 +245,27 @@ static void lookup_dco_sddiv(struct clk *clk, u8 *dco, u8 *sd_div, u16 m,
250 *dco = 2; 245 *dco = 2;
251 else 246 else
252 *dco = 4; 247 *dco = 4;
248}
249
250/**
251 * _lookup_sddiv - Calculate sigma delta divider for j-type DPLL
252 * @clk: pointer to a DPLL struct clk
253 * @sd_div: target sigma-delta divider
254 * @m: DPLL multiplier to set
255 * @n: DPLL divider to set
256 *
257 * See 36xx TRM section 3.5.3.3.3.2 "Type B DPLL (Low-Jitter)"
258 *
259 * XXX This code is not needed for 3430/AM35xx; can it be optimized
260 * out in non-multi-OMAP builds for those chips?
261 */
262static void _lookup_sddiv(struct clk *clk, u8 *sd_div, u16 m, u8 n)
263{
264 unsigned long clkinp, sd; /* watch out for overflow */
265 int mod1, mod2;
266
267 clkinp = clk->parent->rate;
268
253 /* 269 /*
254 * target sigma-delta to near 250MHz 270 * target sigma-delta to near 250MHz
255 * sd = ceil[(m/(n+1)) * (clkinp_MHz / 250)] 271 * sd = ceil[(m/(n+1)) * (clkinp_MHz / 250)]
@@ -278,6 +294,7 @@ static void lookup_dco_sddiv(struct clk *clk, u8 *dco, u8 *sd_div, u16 m,
278static int omap3_noncore_dpll_program(struct clk *clk, u16 m, u8 n, u16 freqsel) 294static int omap3_noncore_dpll_program(struct clk *clk, u16 m, u8 n, u16 freqsel)
279{ 295{
280 struct dpll_data *dd = clk->dpll_data; 296 struct dpll_data *dd = clk->dpll_data;
297 u8 dco, sd_div;
281 u32 v; 298 u32 v;
282 299
283 /* 3430 ES2 TRM: 4.7.6.9 DPLL Programming Sequence */ 300 /* 3430 ES2 TRM: 4.7.6.9 DPLL Programming Sequence */
@@ -300,18 +317,16 @@ static int omap3_noncore_dpll_program(struct clk *clk, u16 m, u8 n, u16 freqsel)
300 v |= m << __ffs(dd->mult_mask); 317 v |= m << __ffs(dd->mult_mask);
301 v |= (n - 1) << __ffs(dd->div1_mask); 318 v |= (n - 1) << __ffs(dd->div1_mask);
302 319
303 /* 320 /* Configure dco and sd_div for dplls that have these fields */
304 * XXX This code is not needed for 3430/AM35XX; can it be optimized 321 if (dd->dco_mask) {
305 * out in non-multi-OMAP builds for those chips? 322 _lookup_dco(clk, &dco, m, n);
306 */ 323 v &= ~(dd->dco_mask);
307 if ((dd->flags & DPLL_J_TYPE) && !(dd->flags & DPLL_NO_DCO_SEL)) { 324 v |= dco << __ffs(dd->dco_mask);
308 u8 dco, sd_div; 325 }
309 lookup_dco_sddiv(clk, &dco, &sd_div, m, n); 326 if (dd->sddiv_mask) {
310 /* XXX This probably will need revision for OMAP4 */ 327 _lookup_sddiv(clk, &sd_div, m, n);
311 v &= ~(OMAP3630_PERIPH_DPLL_DCO_SEL_MASK 328 v &= ~(dd->sddiv_mask);
312 | OMAP3630_PERIPH_DPLL_SD_DIV_MASK); 329 v |= sd_div << __ffs(dd->sddiv_mask);
313 v |= dco << __ffs(OMAP3630_PERIPH_DPLL_DCO_SEL_MASK);
314 v |= sd_div << __ffs(OMAP3630_PERIPH_DPLL_SD_DIV_MASK);
315 } 330 }
316 331
317 __raw_writel(v, dd->mult_div1_reg); 332 __raw_writel(v, dd->mult_div1_reg);
diff --git a/arch/arm/mach-omap2/dpll44xx.c b/arch/arm/mach-omap2/dpll44xx.c
new file mode 100644
index 000000000000..4e4da6160d05
--- /dev/null
+++ b/arch/arm/mach-omap2/dpll44xx.c
@@ -0,0 +1,84 @@
1/*
2 * OMAP4-specific DPLL control functions
3 *
4 * Copyright (C) 2011 Texas Instruments, Inc.
5 * Rajendra Nayak
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/errno.h>
14#include <linux/clk.h>
15#include <linux/io.h>
16#include <linux/bitops.h>
17
18#include <plat/cpu.h>
19#include <plat/clock.h>
20
21#include "clock.h"
22#include "cm-regbits-44xx.h"
23
24/* Supported only on OMAP4 */
25int omap4_dpllmx_gatectrl_read(struct clk *clk)
26{
27 u32 v;
28 u32 mask;
29
30 if (!clk || !clk->clksel_reg || !cpu_is_omap44xx())
31 return -EINVAL;
32
33 mask = clk->flags & CLOCK_CLKOUTX2 ?
34 OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
35 OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
36
37 v = __raw_readl(clk->clksel_reg);
38 v &= mask;
39 v >>= __ffs(mask);
40
41 return v;
42}
43
44void omap4_dpllmx_allow_gatectrl(struct clk *clk)
45{
46 u32 v;
47 u32 mask;
48
49 if (!clk || !clk->clksel_reg || !cpu_is_omap44xx())
50 return;
51
52 mask = clk->flags & CLOCK_CLKOUTX2 ?
53 OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
54 OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
55
56 v = __raw_readl(clk->clksel_reg);
57 /* Clear the bit to allow gatectrl */
58 v &= ~mask;
59 __raw_writel(v, clk->clksel_reg);
60}
61
62void omap4_dpllmx_deny_gatectrl(struct clk *clk)
63{
64 u32 v;
65 u32 mask;
66
67 if (!clk || !clk->clksel_reg || !cpu_is_omap44xx())
68 return;
69
70 mask = clk->flags & CLOCK_CLKOUTX2 ?
71 OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
72 OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
73
74 v = __raw_readl(clk->clksel_reg);
75 /* Set the bit to deny gatectrl */
76 v |= mask;
77 __raw_writel(v, clk->clksel_reg);
78}
79
80const struct clkops clkops_omap4_dpllmx_ops = {
81 .allow_idle = omap4_dpllmx_allow_gatectrl,
82 .deny_idle = omap4_dpllmx_deny_gatectrl,
83};
84
diff --git a/arch/arm/mach-omap2/dsp.c b/arch/arm/mach-omap2/dsp.c
new file mode 100644
index 000000000000..911cd2e68d46
--- /dev/null
+++ b/arch/arm/mach-omap2/dsp.c
@@ -0,0 +1,92 @@
1/*
2 * TI's OMAP DSP platform device registration
3 *
4 * Copyright (C) 2005-2006 Texas Instruments, Inc.
5 * Copyright (C) 2009 Nokia Corporation
6 *
7 * Written by Hiroshi DOYU <Hiroshi.DOYU@nokia.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14/*
15 * XXX The function pointers to the PRM/CM functions are incorrect and
16 * should be removed. No device driver should be changing PRM/CM bits
17 * directly; that's a layering violation -- those bits are the responsibility
18 * of the OMAP PM core code.
19 */
20
21#include <linux/platform_device.h>
22#include "cm2xxx_3xxx.h"
23#include "prm2xxx_3xxx.h"
24#ifdef CONFIG_BRIDGE_DVFS
25#include <plat/omap-pm.h>
26#endif
27
28#include <plat/dsp.h>
29
30extern phys_addr_t omap_dsp_get_mempool_base(void);
31
32static struct platform_device *omap_dsp_pdev;
33
34static struct omap_dsp_platform_data omap_dsp_pdata __initdata = {
35#ifdef CONFIG_BRIDGE_DVFS
36 .dsp_set_min_opp = omap_pm_dsp_set_min_opp,
37 .dsp_get_opp = omap_pm_dsp_get_opp,
38 .cpu_set_freq = omap_pm_cpu_set_freq,
39 .cpu_get_freq = omap_pm_cpu_get_freq,
40#endif
41 .dsp_prm_read = omap2_prm_read_mod_reg,
42 .dsp_prm_write = omap2_prm_write_mod_reg,
43 .dsp_prm_rmw_bits = omap2_prm_rmw_mod_reg_bits,
44 .dsp_cm_read = omap2_cm_read_mod_reg,
45 .dsp_cm_write = omap2_cm_write_mod_reg,
46 .dsp_cm_rmw_bits = omap2_cm_rmw_mod_reg_bits,
47};
48
49static int __init omap_dsp_init(void)
50{
51 struct platform_device *pdev;
52 int err = -ENOMEM;
53 struct omap_dsp_platform_data *pdata = &omap_dsp_pdata;
54
55 pdata->phys_mempool_base = omap_dsp_get_mempool_base();
56
57 if (pdata->phys_mempool_base) {
58 pdata->phys_mempool_size = CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE;
59 pr_info("%s: %x bytes @ %x\n", __func__,
60 pdata->phys_mempool_size, pdata->phys_mempool_base);
61 }
62
63 pdev = platform_device_alloc("omap-dsp", -1);
64 if (!pdev)
65 goto err_out;
66
67 err = platform_device_add_data(pdev, pdata, sizeof(*pdata));
68 if (err)
69 goto err_out;
70
71 err = platform_device_add(pdev);
72 if (err)
73 goto err_out;
74
75 omap_dsp_pdev = pdev;
76 return 0;
77
78err_out:
79 platform_device_put(pdev);
80 return err;
81}
82module_init(omap_dsp_init);
83
84static void __exit omap_dsp_exit(void)
85{
86 platform_device_unregister(omap_dsp_pdev);
87}
88module_exit(omap_dsp_exit);
89
90MODULE_AUTHOR("Hiroshi DOYU");
91MODULE_DESCRIPTION("TI's OMAP DSP platform device registration");
92MODULE_LICENSE("GPL");
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
new file mode 100644
index 000000000000..9529842ae054
--- /dev/null
+++ b/arch/arm/mach-omap2/gpio.c
@@ -0,0 +1,104 @@
1/*
2 * OMAP2+ specific gpio initialization
3 *
4 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
5 *
6 * Author:
7 * Charulatha V <charu@ti.com>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation version 2.
12 *
13 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
14 * kind, whether express or implied; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 */
18
19#include <linux/gpio.h>
20#include <linux/err.h>
21#include <linux/slab.h>
22#include <linux/interrupt.h>
23
24#include <plat/omap_hwmod.h>
25#include <plat/omap_device.h>
26
27static struct omap_device_pm_latency omap_gpio_latency[] = {
28 [0] = {
29 .deactivate_func = omap_device_idle_hwmods,
30 .activate_func = omap_device_enable_hwmods,
31 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
32 },
33};
34
35static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
36{
37 struct omap_device *od;
38 struct omap_gpio_platform_data *pdata;
39 struct omap_gpio_dev_attr *dev_attr;
40 char *name = "omap_gpio";
41 int id;
42
43 /*
44 * extract the device id from name field available in the
45 * hwmod database and use the same for constructing ids for
46 * gpio devices.
47 * CAUTION: Make sure the name in the hwmod database does
48 * not change. If changed, make corresponding change here
49 * or make use of static variable mechanism to handle this.
50 */
51 sscanf(oh->name, "gpio%d", &id);
52
53 pdata = kzalloc(sizeof(struct omap_gpio_platform_data), GFP_KERNEL);
54 if (!pdata) {
55 pr_err("gpio%d: Memory allocation failed\n", id);
56 return -ENOMEM;
57 }
58
59 dev_attr = (struct omap_gpio_dev_attr *)oh->dev_attr;
60 pdata->bank_width = dev_attr->bank_width;
61 pdata->dbck_flag = dev_attr->dbck_flag;
62 pdata->virtual_irq_start = IH_GPIO_BASE + 32 * (id - 1);
63
64 switch (oh->class->rev) {
65 case 0:
66 case 1:
67 pdata->bank_type = METHOD_GPIO_24XX;
68 break;
69 case 2:
70 pdata->bank_type = METHOD_GPIO_44XX;
71 break;
72 default:
73 WARN(1, "Invalid gpio bank_type\n");
74 kfree(pdata);
75 return -EINVAL;
76 }
77
78 od = omap_device_build(name, id - 1, oh, pdata,
79 sizeof(*pdata), omap_gpio_latency,
80 ARRAY_SIZE(omap_gpio_latency),
81 false);
82 kfree(pdata);
83
84 if (IS_ERR(od)) {
85 WARN(1, "Can't build omap_device for %s:%s.\n",
86 name, oh->name);
87 return PTR_ERR(od);
88 }
89
90 gpio_bank_count++;
91 return 0;
92}
93
94/*
95 * gpio_init needs to be done before
96 * machine_init functions access gpio APIs.
97 * Hence gpio_init is a postcore_initcall.
98 */
99static int __init omap2_gpio_init(void)
100{
101 return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init,
102 NULL);
103}
104postcore_initcall(omap2_gpio_init);
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c
index 722209601927..c1791d08ae56 100644
--- a/arch/arm/mach-omap2/gpmc-nand.c
+++ b/arch/arm/mach-omap2/gpmc-nand.c
@@ -12,6 +12,7 @@
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/platform_device.h> 13#include <linux/platform_device.h>
14#include <linux/io.h> 14#include <linux/io.h>
15#include <linux/mtd/nand.h>
15 16
16#include <asm/mach/flash.h> 17#include <asm/mach/flash.h>
17 18
@@ -41,7 +42,7 @@ static int omap2_nand_gpmc_retime(void)
41 return 0; 42 return 0;
42 43
43 memset(&t, 0, sizeof(t)); 44 memset(&t, 0, sizeof(t));
44 t.sync_clk = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->sync_clk); 45 t.sync_clk = gpmc_nand_data->gpmc_t->sync_clk;
45 t.cs_on = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->cs_on); 46 t.cs_on = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->cs_on);
46 t.adv_on = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->adv_on); 47 t.adv_on = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->adv_on);
47 48
@@ -69,8 +70,10 @@ static int omap2_nand_gpmc_retime(void)
69 t.wr_cycle = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->wr_cycle); 70 t.wr_cycle = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->wr_cycle);
70 71
71 /* Configure GPMC */ 72 /* Configure GPMC */
72 gpmc_cs_configure(gpmc_nand_data->cs, 73 if (gpmc_nand_data->devsize == NAND_BUSWIDTH_16)
73 GPMC_CONFIG_DEV_SIZE, gpmc_nand_data->devsize); 74 gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_DEV_SIZE, 1);
75 else
76 gpmc_cs_configure(gpmc_nand_data->cs, GPMC_CONFIG_DEV_SIZE, 0);
74 gpmc_cs_configure(gpmc_nand_data->cs, 77 gpmc_cs_configure(gpmc_nand_data->cs,
75 GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NAND); 78 GPMC_CONFIG_DEV_TYPE, GPMC_DEVICETYPE_NAND);
76 err = gpmc_cs_set_timings(gpmc_nand_data->cs, &t); 79 err = gpmc_cs_set_timings(gpmc_nand_data->cs, &t);
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 7bb69220adfa..d776ded9830d 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -94,7 +94,7 @@ static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base)
94} 94}
95 95
96static void set_onenand_cfg(void __iomem *onenand_base, int latency, 96static void set_onenand_cfg(void __iomem *onenand_base, int latency,
97 int sync_read, int sync_write, int hf) 97 int sync_read, int sync_write, int hf, int vhf)
98{ 98{
99 u32 reg; 99 u32 reg;
100 100
@@ -114,12 +114,57 @@ static void set_onenand_cfg(void __iomem *onenand_base, int latency,
114 reg |= ONENAND_SYS_CFG1_HF; 114 reg |= ONENAND_SYS_CFG1_HF;
115 else 115 else
116 reg &= ~ONENAND_SYS_CFG1_HF; 116 reg &= ~ONENAND_SYS_CFG1_HF;
117 if (vhf)
118 reg |= ONENAND_SYS_CFG1_VHF;
119 else
120 reg &= ~ONENAND_SYS_CFG1_VHF;
117 writew(reg, onenand_base + ONENAND_REG_SYS_CFG1); 121 writew(reg, onenand_base + ONENAND_REG_SYS_CFG1);
118} 122}
119 123
124static int omap2_onenand_get_freq(struct omap_onenand_platform_data *cfg,
125 void __iomem *onenand_base, bool *clk_dep)
126{
127 u16 ver = readw(onenand_base + ONENAND_REG_VERSION_ID);
128 int freq = 0;
129
130 if (cfg->get_freq) {
131 struct onenand_freq_info fi;
132
133 fi.maf_id = readw(onenand_base + ONENAND_REG_MANUFACTURER_ID);
134 fi.dev_id = readw(onenand_base + ONENAND_REG_DEVICE_ID);
135 fi.ver_id = ver;
136 freq = cfg->get_freq(&fi, clk_dep);
137 if (freq)
138 return freq;
139 }
140
141 switch ((ver >> 4) & 0xf) {
142 case 0:
143 freq = 40;
144 break;
145 case 1:
146 freq = 54;
147 break;
148 case 2:
149 freq = 66;
150 break;
151 case 3:
152 freq = 83;
153 break;
154 case 4:
155 freq = 104;
156 break;
157 default:
158 freq = 54;
159 break;
160 }
161
162 return freq;
163}
164
120static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg, 165static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
121 void __iomem *onenand_base, 166 void __iomem *onenand_base,
122 int freq) 167 int *freq_ptr)
123{ 168{
124 struct gpmc_timings t; 169 struct gpmc_timings t;
125 const int t_cer = 15; 170 const int t_cer = 15;
@@ -130,10 +175,11 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
130 const int t_wph = 30; 175 const int t_wph = 30;
131 int min_gpmc_clk_period, t_ces, t_avds, t_avdh, t_ach, t_aavdh, t_rdyo; 176 int min_gpmc_clk_period, t_ces, t_avds, t_avdh, t_ach, t_aavdh, t_rdyo;
132 int tick_ns, div, fclk_offset_ns, fclk_offset, gpmc_clk_ns, latency; 177 int tick_ns, div, fclk_offset_ns, fclk_offset, gpmc_clk_ns, latency;
133 int first_time = 0, hf = 0, sync_read = 0, sync_write = 0; 178 int first_time = 0, hf = 0, vhf = 0, sync_read = 0, sync_write = 0;
134 int err, ticks_cez; 179 int err, ticks_cez;
135 int cs = cfg->cs; 180 int cs = cfg->cs, freq = *freq_ptr;
136 u32 reg; 181 u32 reg;
182 bool clk_dep = false;
137 183
138 if (cfg->flags & ONENAND_SYNC_READ) { 184 if (cfg->flags & ONENAND_SYNC_READ) {
139 sync_read = 1; 185 sync_read = 1;
@@ -148,33 +194,22 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
148 err = omap2_onenand_set_async_mode(cs, onenand_base); 194 err = omap2_onenand_set_async_mode(cs, onenand_base);
149 if (err) 195 if (err)
150 return err; 196 return err;
151 reg = readw(onenand_base + ONENAND_REG_VERSION_ID); 197 freq = omap2_onenand_get_freq(cfg, onenand_base, &clk_dep);
152 switch ((reg >> 4) & 0xf) {
153 case 0:
154 freq = 40;
155 break;
156 case 1:
157 freq = 54;
158 break;
159 case 2:
160 freq = 66;
161 break;
162 case 3:
163 freq = 83;
164 break;
165 case 4:
166 freq = 104;
167 break;
168 default:
169 freq = 54;
170 break;
171 }
172 first_time = 1; 198 first_time = 1;
173 } 199 }
174 200
175 switch (freq) { 201 switch (freq) {
202 case 104:
203 min_gpmc_clk_period = 9600; /* 104 MHz */
204 t_ces = 3;
205 t_avds = 4;
206 t_avdh = 2;
207 t_ach = 3;
208 t_aavdh = 6;
209 t_rdyo = 6;
210 break;
176 case 83: 211 case 83:
177 min_gpmc_clk_period = 12; /* 83 MHz */ 212 min_gpmc_clk_period = 12000; /* 83 MHz */
178 t_ces = 5; 213 t_ces = 5;
179 t_avds = 4; 214 t_avds = 4;
180 t_avdh = 2; 215 t_avdh = 2;
@@ -183,7 +218,7 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
183 t_rdyo = 9; 218 t_rdyo = 9;
184 break; 219 break;
185 case 66: 220 case 66:
186 min_gpmc_clk_period = 15; /* 66 MHz */ 221 min_gpmc_clk_period = 15000; /* 66 MHz */
187 t_ces = 6; 222 t_ces = 6;
188 t_avds = 5; 223 t_avds = 5;
189 t_avdh = 2; 224 t_avdh = 2;
@@ -192,7 +227,7 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
192 t_rdyo = 11; 227 t_rdyo = 11;
193 break; 228 break;
194 default: 229 default:
195 min_gpmc_clk_period = 18; /* 54 MHz */ 230 min_gpmc_clk_period = 18500; /* 54 MHz */
196 t_ces = 7; 231 t_ces = 7;
197 t_avds = 7; 232 t_avds = 7;
198 t_avdh = 7; 233 t_avdh = 7;
@@ -208,16 +243,36 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
208 gpmc_clk_ns = gpmc_ticks_to_ns(div); 243 gpmc_clk_ns = gpmc_ticks_to_ns(div);
209 if (gpmc_clk_ns < 15) /* >66Mhz */ 244 if (gpmc_clk_ns < 15) /* >66Mhz */
210 hf = 1; 245 hf = 1;
211 if (hf) 246 if (gpmc_clk_ns < 12) /* >83Mhz */
247 vhf = 1;
248 if (vhf)
249 latency = 8;
250 else if (hf)
212 latency = 6; 251 latency = 6;
213 else if (gpmc_clk_ns >= 25) /* 40 MHz*/ 252 else if (gpmc_clk_ns >= 25) /* 40 MHz*/
214 latency = 3; 253 latency = 3;
215 else 254 else
216 latency = 4; 255 latency = 4;
217 256
257 if (clk_dep) {
258 if (gpmc_clk_ns < 12) { /* >83Mhz */
259 t_ces = 3;
260 t_avds = 4;
261 } else if (gpmc_clk_ns < 15) { /* >66Mhz */
262 t_ces = 5;
263 t_avds = 4;
264 } else if (gpmc_clk_ns < 25) { /* >40Mhz */
265 t_ces = 6;
266 t_avds = 5;
267 } else {
268 t_ces = 7;
269 t_avds = 7;
270 }
271 }
272
218 if (first_time) 273 if (first_time)
219 set_onenand_cfg(onenand_base, latency, 274 set_onenand_cfg(onenand_base, latency,
220 sync_read, sync_write, hf); 275 sync_read, sync_write, hf, vhf);
221 276
222 if (div == 1) { 277 if (div == 1) {
223 reg = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG2); 278 reg = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG2);
@@ -255,6 +310,9 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
255 /* Read */ 310 /* Read */
256 t.adv_rd_off = gpmc_ticks_to_ns(fclk_offset + gpmc_ns_to_ticks(t_avdh)); 311 t.adv_rd_off = gpmc_ticks_to_ns(fclk_offset + gpmc_ns_to_ticks(t_avdh));
257 t.oe_on = gpmc_ticks_to_ns(fclk_offset + gpmc_ns_to_ticks(t_ach)); 312 t.oe_on = gpmc_ticks_to_ns(fclk_offset + gpmc_ns_to_ticks(t_ach));
313 /* Force at least 1 clk between AVD High to OE Low */
314 if (t.oe_on <= t.adv_rd_off)
315 t.oe_on = t.adv_rd_off + gpmc_round_ns_to_ticks(1);
258 t.access = gpmc_ticks_to_ns(fclk_offset + (latency + 1) * div); 316 t.access = gpmc_ticks_to_ns(fclk_offset + (latency + 1) * div);
259 t.oe_off = t.access + gpmc_round_ns_to_ticks(1); 317 t.oe_off = t.access + gpmc_round_ns_to_ticks(1);
260 t.cs_rd_off = t.oe_off; 318 t.cs_rd_off = t.oe_off;
@@ -271,8 +329,8 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
271 t.wr_cycle = t.rd_cycle; 329 t.wr_cycle = t.rd_cycle;
272 if (cpu_is_omap34xx()) { 330 if (cpu_is_omap34xx()) {
273 t.wr_data_mux_bus = gpmc_ticks_to_ns(fclk_offset + 331 t.wr_data_mux_bus = gpmc_ticks_to_ns(fclk_offset +
274 gpmc_ns_to_ticks(min_gpmc_clk_period + 332 gpmc_ps_to_ticks(min_gpmc_clk_period +
275 t_rdyo)); 333 t_rdyo * 1000));
276 t.wr_access = t.access; 334 t.wr_access = t.access;
277 } 335 }
278 } else { 336 } else {
@@ -308,18 +366,20 @@ static int omap2_onenand_set_sync_mode(struct omap_onenand_platform_data *cfg,
308 if (err) 366 if (err)
309 return err; 367 return err;
310 368
311 set_onenand_cfg(onenand_base, latency, sync_read, sync_write, hf); 369 set_onenand_cfg(onenand_base, latency, sync_read, sync_write, hf, vhf);
370
371 *freq_ptr = freq;
312 372
313 return 0; 373 return 0;
314} 374}
315 375
316static int gpmc_onenand_setup(void __iomem *onenand_base, int freq) 376static int gpmc_onenand_setup(void __iomem *onenand_base, int *freq_ptr)
317{ 377{
318 struct device *dev = &gpmc_onenand_device.dev; 378 struct device *dev = &gpmc_onenand_device.dev;
319 379
320 /* Set sync timings in GPMC */ 380 /* Set sync timings in GPMC */
321 if (omap2_onenand_set_sync_mode(gpmc_onenand_data, onenand_base, 381 if (omap2_onenand_set_sync_mode(gpmc_onenand_data, onenand_base,
322 freq) < 0) { 382 freq_ptr) < 0) {
323 dev_err(dev, "Unable to set synchronous mode\n"); 383 dev_err(dev, "Unable to set synchronous mode\n");
324 return -EINVAL; 384 return -EINVAL;
325 } 385 }
diff --git a/arch/arm/mach-omap2/gpmc-smc91x.c b/arch/arm/mach-omap2/gpmc-smc91x.c
index 877c6f5807b7..ba10c24f3d8d 100644
--- a/arch/arm/mach-omap2/gpmc-smc91x.c
+++ b/arch/arm/mach-omap2/gpmc-smc91x.c
@@ -147,25 +147,24 @@ void __init gpmc_smc91x_init(struct omap_smc91x_platform_data *board_data)
147 goto free1; 147 goto free1;
148 } 148 }
149 149
150 if (gpio_request(gpmc_cfg->gpio_irq, "SMC91X irq") < 0) 150 if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "SMC91X irq") < 0)
151 goto free1; 151 goto free1;
152 152
153 gpio_direction_input(gpmc_cfg->gpio_irq);
154 gpmc_smc91x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq); 153 gpmc_smc91x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
155 154
156 if (gpmc_cfg->gpio_pwrdwn) { 155 if (gpmc_cfg->gpio_pwrdwn) {
157 ret = gpio_request(gpmc_cfg->gpio_pwrdwn, "SMC91X powerdown"); 156 ret = gpio_request_one(gpmc_cfg->gpio_pwrdwn,
157 GPIOF_OUT_INIT_LOW, "SMC91X powerdown");
158 if (ret) 158 if (ret)
159 goto free2; 159 goto free2;
160 gpio_direction_output(gpmc_cfg->gpio_pwrdwn, 0);
161 } 160 }
162 161
163 if (gpmc_cfg->gpio_reset) { 162 if (gpmc_cfg->gpio_reset) {
164 ret = gpio_request(gpmc_cfg->gpio_reset, "SMC91X reset"); 163 ret = gpio_request_one(gpmc_cfg->gpio_reset,
164 GPIOF_OUT_INIT_LOW, "SMC91X reset");
165 if (ret) 165 if (ret)
166 goto free3; 166 goto free3;
167 167
168 gpio_direction_output(gpmc_cfg->gpio_reset, 0);
169 gpio_set_value(gpmc_cfg->gpio_reset, 1); 168 gpio_set_value(gpmc_cfg->gpio_reset, 1);
170 msleep(100); 169 msleep(100);
171 gpio_set_value(gpmc_cfg->gpio_reset, 0); 170 gpio_set_value(gpmc_cfg->gpio_reset, 0);
diff --git a/arch/arm/mach-omap2/gpmc-smsc911x.c b/arch/arm/mach-omap2/gpmc-smsc911x.c
new file mode 100644
index 000000000000..997033129d26
--- /dev/null
+++ b/arch/arm/mach-omap2/gpmc-smsc911x.c
@@ -0,0 +1,107 @@
1/*
2 * linux/arch/arm/mach-omap2/gpmc-smsc911x.c
3 *
4 * Copyright (C) 2009 Li-Pro.Net
5 * Stephan Linz <linz@li-pro.net>
6 *
7 * Modified from linux/arch/arm/mach-omap2/gpmc-smc91x.c
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13#define pr_fmt(fmt) "%s: " fmt, __func__
14
15#include <linux/kernel.h>
16#include <linux/platform_device.h>
17#include <linux/gpio.h>
18#include <linux/delay.h>
19#include <linux/interrupt.h>
20#include <linux/io.h>
21#include <linux/smsc911x.h>
22
23#include <plat/board.h>
24#include <plat/gpmc.h>
25#include <plat/gpmc-smsc911x.h>
26
27static struct omap_smsc911x_platform_data *gpmc_cfg;
28
29static struct resource gpmc_smsc911x_resources[] = {
30 [0] = {
31 .flags = IORESOURCE_MEM,
32 },
33 [1] = {
34 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
35 },
36};
37
38static struct smsc911x_platform_config gpmc_smsc911x_config = {
39 .phy_interface = PHY_INTERFACE_MODE_MII,
40 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
41 .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
42 .flags = SMSC911X_USE_16BIT,
43};
44
45/*
46 * Initialize smsc911x device connected to the GPMC. Note that we
47 * assume that pin multiplexing is done in the board-*.c file,
48 * or in the bootloader.
49 */
50void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data)
51{
52 struct platform_device *pdev;
53 unsigned long cs_mem_base;
54 int ret;
55
56 gpmc_cfg = board_data;
57
58 if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {
59 pr_err("Failed to request GPMC mem region\n");
60 return;
61 }
62
63 gpmc_smsc911x_resources[0].start = cs_mem_base + 0x0;
64 gpmc_smsc911x_resources[0].end = cs_mem_base + 0xff;
65
66 if (gpio_request_one(gpmc_cfg->gpio_irq, GPIOF_IN, "smsc911x irq")) {
67 pr_err("Failed to request IRQ GPIO%d\n", gpmc_cfg->gpio_irq);
68 goto free1;
69 }
70
71 gpmc_smsc911x_resources[1].start = gpio_to_irq(gpmc_cfg->gpio_irq);
72
73 if (gpio_is_valid(gpmc_cfg->gpio_reset)) {
74 ret = gpio_request_one(gpmc_cfg->gpio_reset,
75 GPIOF_OUT_INIT_HIGH, "smsc911x reset");
76 if (ret) {
77 pr_err("Failed to request reset GPIO%d\n",
78 gpmc_cfg->gpio_reset);
79 goto free2;
80 }
81
82 gpio_set_value(gpmc_cfg->gpio_reset, 0);
83 msleep(100);
84 gpio_set_value(gpmc_cfg->gpio_reset, 1);
85 }
86
87 if (gpmc_cfg->flags)
88 gpmc_smsc911x_config.flags = gpmc_cfg->flags;
89
90 pdev = platform_device_register_resndata(NULL, "smsc911x", gpmc_cfg->id,
91 gpmc_smsc911x_resources, ARRAY_SIZE(gpmc_smsc911x_resources),
92 &gpmc_smsc911x_config, sizeof(gpmc_smsc911x_config));
93 if (!pdev) {
94 pr_err("Unable to register platform device\n");
95 gpio_free(gpmc_cfg->gpio_reset);
96 goto free2;
97 }
98
99 return;
100
101free2:
102 gpio_free(gpmc_cfg->gpio_irq);
103free1:
104 gpmc_cs_free(gpmc_cfg->cs);
105
106 pr_err("Could not initialize smsc911x device\n");
107}
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
index f46933bc9373..130034bf01d5 100644
--- a/arch/arm/mach-omap2/gpmc.c
+++ b/arch/arm/mach-omap2/gpmc.c
@@ -14,6 +14,7 @@
14 */ 14 */
15#undef DEBUG 15#undef DEBUG
16 16
17#include <linux/irq.h>
17#include <linux/kernel.h> 18#include <linux/kernel.h>
18#include <linux/init.h> 19#include <linux/init.h>
19#include <linux/err.h> 20#include <linux/err.h>
@@ -22,6 +23,7 @@
22#include <linux/spinlock.h> 23#include <linux/spinlock.h>
23#include <linux/io.h> 24#include <linux/io.h>
24#include <linux/module.h> 25#include <linux/module.h>
26#include <linux/interrupt.h>
25 27
26#include <asm/mach-types.h> 28#include <asm/mach-types.h>
27#include <plat/gpmc.h> 29#include <plat/gpmc.h>
@@ -58,7 +60,6 @@
58#define GPMC_CHUNK_SHIFT 24 /* 16 MB */ 60#define GPMC_CHUNK_SHIFT 24 /* 16 MB */
59#define GPMC_SECTION_SHIFT 28 /* 128 MB */ 61#define GPMC_SECTION_SHIFT 28 /* 128 MB */
60 62
61#define PREFETCH_FIFOTHRESHOLD (0x40 << 8)
62#define CS_NUM_SHIFT 24 63#define CS_NUM_SHIFT 24
63#define ENABLE_PREFETCH (0x1 << 7) 64#define ENABLE_PREFETCH (0x1 << 7)
64#define DMA_MPU_MODE 2 65#define DMA_MPU_MODE 2
@@ -100,6 +101,8 @@ static void __iomem *gpmc_base;
100 101
101static struct clk *gpmc_l3_clk; 102static struct clk *gpmc_l3_clk;
102 103
104static irqreturn_t gpmc_handle_irq(int irq, void *dev);
105
103static void gpmc_write_reg(int idx, u32 val) 106static void gpmc_write_reg(int idx, u32 val)
104{ 107{
105 __raw_writel(val, gpmc_base + idx); 108 __raw_writel(val, gpmc_base + idx);
@@ -168,6 +171,16 @@ unsigned int gpmc_ns_to_ticks(unsigned int time_ns)
168 return (time_ns * 1000 + tick_ps - 1) / tick_ps; 171 return (time_ns * 1000 + tick_ps - 1) / tick_ps;
169} 172}
170 173
174unsigned int gpmc_ps_to_ticks(unsigned int time_ps)
175{
176 unsigned long tick_ps;
177
178 /* Calculate in picosecs to yield more exact results */
179 tick_ps = gpmc_get_fclk_period();
180
181 return (time_ps + tick_ps - 1) / tick_ps;
182}
183
171unsigned int gpmc_ticks_to_ns(unsigned int ticks) 184unsigned int gpmc_ticks_to_ns(unsigned int ticks)
172{ 185{
173 return ticks * gpmc_get_fclk_period() / 1000; 186 return ticks * gpmc_get_fclk_period() / 1000;
@@ -235,7 +248,7 @@ int gpmc_cs_calc_divider(int cs, unsigned int sync_clk)
235 int div; 248 int div;
236 u32 l; 249 u32 l;
237 250
238 l = sync_clk * 1000 + (gpmc_get_fclk_period() - 1); 251 l = sync_clk + (gpmc_get_fclk_period() - 1);
239 div = l / gpmc_get_fclk_period(); 252 div = l / gpmc_get_fclk_period();
240 if (div > 4) 253 if (div > 4)
241 return -1; 254 return -1;
@@ -487,6 +500,10 @@ int gpmc_cs_configure(int cs, int cmd, int wval)
487 u32 regval = 0; 500 u32 regval = 0;
488 501
489 switch (cmd) { 502 switch (cmd) {
503 case GPMC_ENABLE_IRQ:
504 gpmc_write_reg(GPMC_IRQENABLE, wval);
505 break;
506
490 case GPMC_SET_IRQ_STATUS: 507 case GPMC_SET_IRQ_STATUS:
491 gpmc_write_reg(GPMC_IRQSTATUS, wval); 508 gpmc_write_reg(GPMC_IRQSTATUS, wval);
492 break; 509 break;
@@ -588,15 +605,19 @@ EXPORT_SYMBOL(gpmc_nand_write);
588/** 605/**
589 * gpmc_prefetch_enable - configures and starts prefetch transfer 606 * gpmc_prefetch_enable - configures and starts prefetch transfer
590 * @cs: cs (chip select) number 607 * @cs: cs (chip select) number
608 * @fifo_th: fifo threshold to be used for read/ write
591 * @dma_mode: dma mode enable (1) or disable (0) 609 * @dma_mode: dma mode enable (1) or disable (0)
592 * @u32_count: number of bytes to be transferred 610 * @u32_count: number of bytes to be transferred
593 * @is_write: prefetch read(0) or write post(1) mode 611 * @is_write: prefetch read(0) or write post(1) mode
594 */ 612 */
595int gpmc_prefetch_enable(int cs, int dma_mode, 613int gpmc_prefetch_enable(int cs, int fifo_th, int dma_mode,
596 unsigned int u32_count, int is_write) 614 unsigned int u32_count, int is_write)
597{ 615{
598 616
599 if (!(gpmc_read_reg(GPMC_PREFETCH_CONTROL))) { 617 if (fifo_th > PREFETCH_FIFOTHRESHOLD_MAX) {
618 pr_err("gpmc: fifo threshold is not supported\n");
619 return -1;
620 } else if (!(gpmc_read_reg(GPMC_PREFETCH_CONTROL))) {
600 /* Set the amount of bytes to be prefetched */ 621 /* Set the amount of bytes to be prefetched */
601 gpmc_write_reg(GPMC_PREFETCH_CONFIG2, u32_count); 622 gpmc_write_reg(GPMC_PREFETCH_CONFIG2, u32_count);
602 623
@@ -604,7 +625,7 @@ int gpmc_prefetch_enable(int cs, int dma_mode,
604 * enable the engine. Set which cs is has requested for. 625 * enable the engine. Set which cs is has requested for.
605 */ 626 */
606 gpmc_write_reg(GPMC_PREFETCH_CONFIG1, ((cs << CS_NUM_SHIFT) | 627 gpmc_write_reg(GPMC_PREFETCH_CONFIG1, ((cs << CS_NUM_SHIFT) |
607 PREFETCH_FIFOTHRESHOLD | 628 PREFETCH_FIFOTHRESHOLD(fifo_th) |
608 ENABLE_PREFETCH | 629 ENABLE_PREFETCH |
609 (dma_mode << DMA_MPU_MODE) | 630 (dma_mode << DMA_MPU_MODE) |
610 (0x1 & is_write))); 631 (0x1 & is_write)));
@@ -668,9 +689,11 @@ static void __init gpmc_mem_init(void)
668 } 689 }
669} 690}
670 691
671void __init gpmc_init(void) 692static int __init gpmc_init(void)
672{ 693{
673 u32 l; 694 u32 l, irq;
695 int cs, ret = -EINVAL;
696 int gpmc_irq;
674 char *ck = NULL; 697 char *ck = NULL;
675 698
676 if (cpu_is_omap24xx()) { 699 if (cpu_is_omap24xx()) {
@@ -679,16 +702,19 @@ void __init gpmc_init(void)
679 l = OMAP2420_GPMC_BASE; 702 l = OMAP2420_GPMC_BASE;
680 else 703 else
681 l = OMAP34XX_GPMC_BASE; 704 l = OMAP34XX_GPMC_BASE;
705 gpmc_irq = INT_34XX_GPMC_IRQ;
682 } else if (cpu_is_omap34xx()) { 706 } else if (cpu_is_omap34xx()) {
683 ck = "gpmc_fck"; 707 ck = "gpmc_fck";
684 l = OMAP34XX_GPMC_BASE; 708 l = OMAP34XX_GPMC_BASE;
709 gpmc_irq = INT_34XX_GPMC_IRQ;
685 } else if (cpu_is_omap44xx()) { 710 } else if (cpu_is_omap44xx()) {
686 ck = "gpmc_ck"; 711 ck = "gpmc_ck";
687 l = OMAP44XX_GPMC_BASE; 712 l = OMAP44XX_GPMC_BASE;
713 gpmc_irq = OMAP44XX_IRQ_GPMC;
688 } 714 }
689 715
690 if (WARN_ON(!ck)) 716 if (WARN_ON(!ck))
691 return; 717 return ret;
692 718
693 gpmc_l3_clk = clk_get(NULL, ck); 719 gpmc_l3_clk = clk_get(NULL, ck);
694 if (IS_ERR(gpmc_l3_clk)) { 720 if (IS_ERR(gpmc_l3_clk)) {
@@ -713,6 +739,35 @@ void __init gpmc_init(void)
713 l |= (0x02 << 3) | (1 << 0); 739 l |= (0x02 << 3) | (1 << 0);
714 gpmc_write_reg(GPMC_SYSCONFIG, l); 740 gpmc_write_reg(GPMC_SYSCONFIG, l);
715 gpmc_mem_init(); 741 gpmc_mem_init();
742
743 /* initalize the irq_chained */
744 irq = OMAP_GPMC_IRQ_BASE;
745 for (cs = 0; cs < GPMC_CS_NUM; cs++) {
746 irq_set_chip_and_handler(irq, &dummy_irq_chip,
747 handle_simple_irq);
748 set_irq_flags(irq, IRQF_VALID);
749 irq++;
750 }
751
752 ret = request_irq(gpmc_irq,
753 gpmc_handle_irq, IRQF_SHARED, "gpmc", gpmc_base);
754 if (ret)
755 pr_err("gpmc: irq-%d could not claim: err %d\n",
756 gpmc_irq, ret);
757 return ret;
758}
759postcore_initcall(gpmc_init);
760
761static irqreturn_t gpmc_handle_irq(int irq, void *dev)
762{
763 u8 cs;
764
765 /* check cs to invoke the irq */
766 cs = ((gpmc_read_reg(GPMC_PREFETCH_CONFIG1)) >> CS_NUM_SHIFT) & 0x7;
767 if (OMAP_GPMC_IRQ_BASE+cs <= OMAP_GPMC_IRQ_END)
768 generic_handle_irq(OMAP_GPMC_IRQ_BASE+cs);
769
770 return IRQ_HANDLED;
716} 771}
717 772
718#ifdef CONFIG_ARCH_OMAP3 773#ifdef CONFIG_ARCH_OMAP3
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c
index c8f647b6205e..66868c5d5a29 100644
--- a/arch/arm/mach-omap2/hsmmc.c
+++ b/arch/arm/mach-omap2/hsmmc.c
@@ -14,11 +14,14 @@
14#include <linux/string.h> 14#include <linux/string.h>
15#include <linux/delay.h> 15#include <linux/delay.h>
16#include <mach/hardware.h> 16#include <mach/hardware.h>
17#include <plat/control.h>
18#include <plat/mmc.h> 17#include <plat/mmc.h>
19#include <plat/omap-pm.h> 18#include <plat/omap-pm.h>
19#include <plat/mux.h>
20#include <plat/omap_device.h>
20 21
22#include "mux.h"
21#include "hsmmc.h" 23#include "hsmmc.h"
24#include "control.h"
22 25
23#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) 26#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
24 27
@@ -28,10 +31,6 @@ static u16 control_mmc1;
28 31
29#define HSMMC_NAME_LEN 9 32#define HSMMC_NAME_LEN 9
30 33
31static struct hsmmc_controller {
32 char name[HSMMC_NAME_LEN + 1];
33} hsmmc[OMAP34XX_NR_MMC];
34
35#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) 34#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
36 35
37static int hsmmc_get_context_loss(struct device *dev) 36static int hsmmc_get_context_loss(struct device *dev)
@@ -135,42 +134,53 @@ static void omap4_hsmmc1_before_set_reg(struct device *dev, int slot,
135 * 134 *
136 * FIXME handle VMMC1A as needed ... 135 * FIXME handle VMMC1A as needed ...
137 */ 136 */
138 reg = omap_ctrl_readl(control_pbias_offset); 137 reg = omap4_ctrl_pad_readl(control_pbias_offset);
139 reg &= ~(OMAP4_MMC1_PBIASLITE_PWRDNZ | OMAP4_MMC1_PWRDNZ | 138 reg &= ~(OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK |
140 OMAP4_USBC1_ICUSB_PWRDNZ); 139 OMAP4_MMC1_PWRDNZ_MASK |
141 omap_ctrl_writel(reg, control_pbias_offset); 140 OMAP4_USBC1_ICUSB_PWRDNZ_MASK);
141 omap4_ctrl_pad_writel(reg, control_pbias_offset);
142} 142}
143 143
144static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot, 144static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot,
145 int power_on, int vdd) 145 int power_on, int vdd)
146{ 146{
147 u32 reg; 147 u32 reg;
148 unsigned long timeout;
148 149
149 if (power_on) { 150 if (power_on) {
150 reg = omap_ctrl_readl(control_pbias_offset); 151 reg = omap4_ctrl_pad_readl(control_pbias_offset);
151 reg |= OMAP4_MMC1_PBIASLITE_PWRDNZ; 152 reg |= OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK;
152 if ((1 << vdd) <= MMC_VDD_165_195) 153 if ((1 << vdd) <= MMC_VDD_165_195)
153 reg &= ~OMAP4_MMC1_PBIASLITE_VMODE; 154 reg &= ~OMAP4_MMC1_PBIASLITE_VMODE_MASK;
154 else 155 else
155 reg |= OMAP4_MMC1_PBIASLITE_VMODE; 156 reg |= OMAP4_MMC1_PBIASLITE_VMODE_MASK;
156 reg |= (OMAP4_MMC1_PBIASLITE_PWRDNZ | OMAP4_MMC1_PWRDNZ | 157 reg |= (OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK |
157 OMAP4_USBC1_ICUSB_PWRDNZ); 158 OMAP4_MMC1_PWRDNZ_MASK |
158 omap_ctrl_writel(reg, control_pbias_offset); 159 OMAP4_USBC1_ICUSB_PWRDNZ_MASK);
159 /* 4 microsec delay for comparator to generate an error*/ 160 omap4_ctrl_pad_writel(reg, control_pbias_offset);
160 udelay(4); 161
161 reg = omap_ctrl_readl(control_pbias_offset); 162 timeout = jiffies + msecs_to_jiffies(5);
162 if (reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR) { 163 do {
164 reg = omap4_ctrl_pad_readl(control_pbias_offset);
165 if (!(reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK))
166 break;
167 usleep_range(100, 200);
168 } while (!time_after(jiffies, timeout));
169
170 if (reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK) {
163 pr_err("Pbias Voltage is not same as LDO\n"); 171 pr_err("Pbias Voltage is not same as LDO\n");
164 /* Caution : On VMODE_ERROR Power Down MMC IO */ 172 /* Caution : On VMODE_ERROR Power Down MMC IO */
165 reg &= ~(OMAP4_MMC1_PWRDNZ | OMAP4_USBC1_ICUSB_PWRDNZ); 173 reg &= ~(OMAP4_MMC1_PWRDNZ_MASK |
166 omap_ctrl_writel(reg, control_pbias_offset); 174 OMAP4_USBC1_ICUSB_PWRDNZ_MASK);
175 omap4_ctrl_pad_writel(reg, control_pbias_offset);
167 } 176 }
168 } else { 177 } else {
169 reg = omap_ctrl_readl(control_pbias_offset); 178 reg = omap4_ctrl_pad_readl(control_pbias_offset);
170 reg |= (OMAP4_MMC1_PBIASLITE_PWRDNZ | 179 reg |= (OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK |
171 OMAP4_MMC1_PBIASLITE_VMODE | OMAP4_MMC1_PWRDNZ | 180 OMAP4_MMC1_PWRDNZ_MASK |
172 OMAP4_USBC1_ICUSB_PWRDNZ); 181 OMAP4_MMC1_PBIASLITE_VMODE_MASK |
173 omap_ctrl_writel(reg, control_pbias_offset); 182 OMAP4_USBC1_ICUSB_PWRDNZ_MASK);
183 omap4_ctrl_pad_writel(reg, control_pbias_offset);
174 } 184 }
175} 185}
176 186
@@ -200,162 +210,315 @@ static int nop_mmc_set_power(struct device *dev, int slot, int power_on,
200 return 0; 210 return 0;
201} 211}
202 212
203static struct omap_mmc_platform_data *hsmmc_data[OMAP34XX_NR_MMC] __initdata; 213static inline void omap_hsmmc_mux(struct omap_mmc_platform_data *mmc_controller,
204 214 int controller_nr)
205void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
206{ 215{
207 struct omap2_hsmmc_info *c; 216 if ((mmc_controller->slots[0].switch_pin > 0) && \
208 int nr_hsmmc = ARRAY_SIZE(hsmmc_data); 217 (mmc_controller->slots[0].switch_pin < OMAP_MAX_GPIO_LINES))
209 int i; 218 omap_mux_init_gpio(mmc_controller->slots[0].switch_pin,
210 u32 reg; 219 OMAP_PIN_INPUT_PULLUP);
211 220 if ((mmc_controller->slots[0].gpio_wp > 0) && \
212 if (!cpu_is_omap44xx()) { 221 (mmc_controller->slots[0].gpio_wp < OMAP_MAX_GPIO_LINES))
213 if (cpu_is_omap2430()) { 222 omap_mux_init_gpio(mmc_controller->slots[0].gpio_wp,
214 control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; 223 OMAP_PIN_INPUT_PULLUP);
215 control_devconf1_offset = OMAP243X_CONTROL_DEVCONF1; 224 if (cpu_is_omap34xx()) {
216 } else { 225 if (controller_nr == 0) {
217 control_pbias_offset = OMAP343X_CONTROL_PBIAS_LITE; 226 omap_mux_init_signal("sdmmc1_clk",
218 control_devconf1_offset = OMAP343X_CONTROL_DEVCONF1; 227 OMAP_PIN_INPUT_PULLUP);
228 omap_mux_init_signal("sdmmc1_cmd",
229 OMAP_PIN_INPUT_PULLUP);
230 omap_mux_init_signal("sdmmc1_dat0",
231 OMAP_PIN_INPUT_PULLUP);
232 if (mmc_controller->slots[0].caps &
233 (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)) {
234 omap_mux_init_signal("sdmmc1_dat1",
235 OMAP_PIN_INPUT_PULLUP);
236 omap_mux_init_signal("sdmmc1_dat2",
237 OMAP_PIN_INPUT_PULLUP);
238 omap_mux_init_signal("sdmmc1_dat3",
239 OMAP_PIN_INPUT_PULLUP);
240 }
241 if (mmc_controller->slots[0].caps &
242 MMC_CAP_8_BIT_DATA) {
243 omap_mux_init_signal("sdmmc1_dat4",
244 OMAP_PIN_INPUT_PULLUP);
245 omap_mux_init_signal("sdmmc1_dat5",
246 OMAP_PIN_INPUT_PULLUP);
247 omap_mux_init_signal("sdmmc1_dat6",
248 OMAP_PIN_INPUT_PULLUP);
249 omap_mux_init_signal("sdmmc1_dat7",
250 OMAP_PIN_INPUT_PULLUP);
251 }
252 }
253 if (controller_nr == 1) {
254 /* MMC2 */
255 omap_mux_init_signal("sdmmc2_clk",
256 OMAP_PIN_INPUT_PULLUP);
257 omap_mux_init_signal("sdmmc2_cmd",
258 OMAP_PIN_INPUT_PULLUP);
259 omap_mux_init_signal("sdmmc2_dat0",
260 OMAP_PIN_INPUT_PULLUP);
261
262 /*
263 * For 8 wire configurations, Lines DAT4, 5, 6 and 7
264 * need to be muxed in the board-*.c files
265 */
266 if (mmc_controller->slots[0].caps &
267 (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)) {
268 omap_mux_init_signal("sdmmc2_dat1",
269 OMAP_PIN_INPUT_PULLUP);
270 omap_mux_init_signal("sdmmc2_dat2",
271 OMAP_PIN_INPUT_PULLUP);
272 omap_mux_init_signal("sdmmc2_dat3",
273 OMAP_PIN_INPUT_PULLUP);
274 }
275 if (mmc_controller->slots[0].caps &
276 MMC_CAP_8_BIT_DATA) {
277 omap_mux_init_signal("sdmmc2_dat4.sdmmc2_dat4",
278 OMAP_PIN_INPUT_PULLUP);
279 omap_mux_init_signal("sdmmc2_dat5.sdmmc2_dat5",
280 OMAP_PIN_INPUT_PULLUP);
281 omap_mux_init_signal("sdmmc2_dat6.sdmmc2_dat6",
282 OMAP_PIN_INPUT_PULLUP);
283 omap_mux_init_signal("sdmmc2_dat7.sdmmc2_dat7",
284 OMAP_PIN_INPUT_PULLUP);
285 }
219 } 286 }
220 } else {
221 control_pbias_offset = OMAP44XX_CONTROL_PBIAS_LITE;
222 control_mmc1 = OMAP44XX_CONTROL_MMC1;
223 reg = omap_ctrl_readl(control_mmc1);
224 reg |= (OMAP4_CONTROL_SDMMC1_PUSTRENGTHGRP0 |
225 OMAP4_CONTROL_SDMMC1_PUSTRENGTHGRP1);
226 reg &= ~(OMAP4_CONTROL_SDMMC1_PUSTRENGTHGRP2 |
227 OMAP4_CONTROL_SDMMC1_PUSTRENGTHGRP3);
228 reg |= (OMAP4_CONTROL_SDMMC1_DR0_SPEEDCTRL |
229 OMAP4_CONTROL_SDMMC1_DR1_SPEEDCTRL |
230 OMAP4_CONTROL_SDMMC1_DR2_SPEEDCTRL);
231 omap_ctrl_writel(reg, control_mmc1);
232 }
233 287
234 for (c = controllers; c->mmc; c++) { 288 /*
235 struct hsmmc_controller *hc = hsmmc + c->mmc - 1; 289 * For MMC3 the pins need to be muxed in the board-*.c files
236 struct omap_mmc_platform_data *mmc = hsmmc_data[c->mmc - 1]; 290 */
291 }
292}
237 293
238 if (!c->mmc || c->mmc > nr_hsmmc) { 294static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
239 pr_debug("MMC%d: no such controller\n", c->mmc); 295 struct omap_mmc_platform_data *mmc)
240 continue; 296{
241 } 297 char *hc_name;
242 if (mmc) {
243 pr_debug("MMC%d: already configured\n", c->mmc);
244 continue;
245 }
246 298
247 mmc = kzalloc(sizeof(struct omap_mmc_platform_data), 299 hc_name = kzalloc(sizeof(char) * (HSMMC_NAME_LEN + 1), GFP_KERNEL);
248 GFP_KERNEL); 300 if (!hc_name) {
249 if (!mmc) { 301 pr_err("Cannot allocate memory for controller slot name\n");
250 pr_err("Cannot allocate memory for mmc device!\n"); 302 kfree(hc_name);
251 goto done; 303 return -ENOMEM;
252 } 304 }
253 305
254 if (c->name) 306 if (c->name)
255 strncpy(hc->name, c->name, HSMMC_NAME_LEN); 307 strncpy(hc_name, c->name, HSMMC_NAME_LEN);
256 else 308 else
257 snprintf(hc->name, ARRAY_SIZE(hc->name), 309 snprintf(hc_name, (HSMMC_NAME_LEN + 1), "mmc%islot%i",
258 "mmc%islot%i", c->mmc, 1); 310 c->mmc, 1);
259 mmc->slots[0].name = hc->name; 311 mmc->slots[0].name = hc_name;
260 mmc->nr_slots = 1; 312 mmc->nr_slots = 1;
261 mmc->slots[0].wires = c->wires; 313 mmc->slots[0].caps = c->caps;
262 mmc->slots[0].internal_clock = !c->ext_clock; 314 mmc->slots[0].internal_clock = !c->ext_clock;
263 mmc->dma_mask = 0xffffffff; 315 mmc->dma_mask = 0xffffffff;
316 if (cpu_is_omap44xx())
317 mmc->reg_offset = OMAP4_MMC_REG_OFFSET;
318 else
319 mmc->reg_offset = 0;
264 320
265 mmc->get_context_loss_count = hsmmc_get_context_loss; 321 mmc->get_context_loss_count = hsmmc_get_context_loss;
266 322
267 mmc->slots[0].switch_pin = c->gpio_cd; 323 mmc->slots[0].switch_pin = c->gpio_cd;
268 mmc->slots[0].gpio_wp = c->gpio_wp; 324 mmc->slots[0].gpio_wp = c->gpio_wp;
269 325
270 mmc->slots[0].remux = c->remux; 326 mmc->slots[0].remux = c->remux;
271 mmc->slots[0].init_card = c->init_card; 327 mmc->slots[0].init_card = c->init_card;
272 328
273 if (c->cover_only) 329 if (c->cover_only)
274 mmc->slots[0].cover = 1; 330 mmc->slots[0].cover = 1;
275 331
276 if (c->nonremovable) 332 if (c->nonremovable)
277 mmc->slots[0].nonremovable = 1; 333 mmc->slots[0].nonremovable = 1;
278 334
279 if (c->power_saving) 335 if (c->power_saving)
280 mmc->slots[0].power_saving = 1; 336 mmc->slots[0].power_saving = 1;
281 337
282 if (c->no_off) 338 if (c->no_off)
283 mmc->slots[0].no_off = 1; 339 mmc->slots[0].no_off = 1;
284 340
285 if (c->vcc_aux_disable_is_sleep) 341 if (c->no_off_init)
286 mmc->slots[0].vcc_aux_disable_is_sleep = 1; 342 mmc->slots[0].no_regulator_off_init = c->no_off_init;
287 343
288 /* NOTE: MMC slots should have a Vcc regulator set up. 344 if (c->vcc_aux_disable_is_sleep)
289 * This may be from a TWL4030-family chip, another 345 mmc->slots[0].vcc_aux_disable_is_sleep = 1;
290 * controllable regulator, or a fixed supply.
291 *
292 * temporary HACK: ocr_mask instead of fixed supply
293 */
294 mmc->slots[0].ocr_mask = c->ocr_mask;
295 346
296 if (cpu_is_omap3517() || cpu_is_omap3505()) 347 /*
297 mmc->slots[0].set_power = nop_mmc_set_power; 348 * NOTE: MMC slots should have a Vcc regulator set up.
298 else 349 * This may be from a TWL4030-family chip, another
299 mmc->slots[0].features |= HSMMC_HAS_PBIAS; 350 * controllable regulator, or a fixed supply.
300 351 *
301 switch (c->mmc) { 352 * temporary HACK: ocr_mask instead of fixed supply
302 case 1: 353 */
303 if (mmc->slots[0].features & HSMMC_HAS_PBIAS) { 354 mmc->slots[0].ocr_mask = c->ocr_mask;
304 /* on-chip level shifting via PBIAS0/PBIAS1 */ 355
305 if (cpu_is_omap44xx()) { 356 if (cpu_is_omap3517() || cpu_is_omap3505())
306 mmc->slots[0].before_set_reg = 357 mmc->slots[0].set_power = nop_mmc_set_power;
358 else
359 mmc->slots[0].features |= HSMMC_HAS_PBIAS;
360
361 if (cpu_is_omap44xx() && (omap_rev() > OMAP4430_REV_ES1_0))
362 mmc->slots[0].features |= HSMMC_HAS_UPDATED_RESET;
363
364 switch (c->mmc) {
365 case 1:
366 if (mmc->slots[0].features & HSMMC_HAS_PBIAS) {
367 /* on-chip level shifting via PBIAS0/PBIAS1 */
368 if (cpu_is_omap44xx()) {
369 mmc->slots[0].before_set_reg =
307 omap4_hsmmc1_before_set_reg; 370 omap4_hsmmc1_before_set_reg;
308 mmc->slots[0].after_set_reg = 371 mmc->slots[0].after_set_reg =
309 omap4_hsmmc1_after_set_reg; 372 omap4_hsmmc1_after_set_reg;
310 } else { 373 } else {
311 mmc->slots[0].before_set_reg = 374 mmc->slots[0].before_set_reg =
312 omap_hsmmc1_before_set_reg; 375 omap_hsmmc1_before_set_reg;
313 mmc->slots[0].after_set_reg = 376 mmc->slots[0].after_set_reg =
314 omap_hsmmc1_after_set_reg; 377 omap_hsmmc1_after_set_reg;
315 }
316 } 378 }
379 }
317 380
318 /* Omap3630 HSMMC1 supports only 4-bit */ 381 /* OMAP3630 HSMMC1 supports only 4-bit */
319 if (cpu_is_omap3630() && c->wires > 4) { 382 if (cpu_is_omap3630() &&
320 c->wires = 4; 383 (c->caps & MMC_CAP_8_BIT_DATA)) {
321 mmc->slots[0].wires = c->wires; 384 c->caps &= ~MMC_CAP_8_BIT_DATA;
322 } 385 c->caps |= MMC_CAP_4_BIT_DATA;
323 break; 386 mmc->slots[0].caps = c->caps;
324 case 2: 387 }
325 if (c->ext_clock) 388 break;
326 c->transceiver = 1; 389 case 2:
327 if (c->transceiver && c->wires > 4) 390 if (c->ext_clock)
328 c->wires = 4; 391 c->transceiver = 1;
329 /* FALLTHROUGH */ 392 if (c->transceiver && (c->caps & MMC_CAP_8_BIT_DATA)) {
330 case 3: 393 c->caps &= ~MMC_CAP_8_BIT_DATA;
331 if (mmc->slots[0].features & HSMMC_HAS_PBIAS) { 394 c->caps |= MMC_CAP_4_BIT_DATA;
332 /* off-chip level shifting, or none */ 395 }
333 mmc->slots[0].before_set_reg = hsmmc23_before_set_reg; 396 /* FALLTHROUGH */
334 mmc->slots[0].after_set_reg = NULL; 397 case 3:
335 } 398 if (mmc->slots[0].features & HSMMC_HAS_PBIAS) {
336 break; 399 /* off-chip level shifting, or none */
337 default: 400 mmc->slots[0].before_set_reg = hsmmc23_before_set_reg;
338 pr_err("MMC%d configuration not supported!\n", c->mmc); 401 mmc->slots[0].after_set_reg = NULL;
339 kfree(mmc);
340 continue;
341 } 402 }
342 hsmmc_data[c->mmc - 1] = mmc; 403 break;
404 case 4:
405 case 5:
406 mmc->slots[0].before_set_reg = NULL;
407 mmc->slots[0].after_set_reg = NULL;
408 break;
409 default:
410 pr_err("MMC%d configuration not supported!\n", c->mmc);
411 kfree(hc_name);
412 return -ENODEV;
343 } 413 }
414 return 0;
415}
344 416
345 omap2_init_mmc(hsmmc_data, OMAP34XX_NR_MMC); 417static struct omap_device_pm_latency omap_hsmmc_latency[] = {
418 [0] = {
419 .deactivate_func = omap_device_idle_hwmods,
420 .activate_func = omap_device_enable_hwmods,
421 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
422 },
423 /*
424 * XXX There should also be an entry here to power off/on the
425 * MMC regulators/PBIAS cells, etc.
426 */
427};
346 428
347 /* pass the device nodes back to board setup code */ 429#define MAX_OMAP_MMC_HWMOD_NAME_LEN 16
348 for (c = controllers; c->mmc; c++) {
349 struct omap_mmc_platform_data *mmc = hsmmc_data[c->mmc - 1];
350 430
351 if (!c->mmc || c->mmc > nr_hsmmc) 431void __init omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr)
352 continue; 432{
353 c->dev = mmc->dev; 433 struct omap_hwmod *oh;
434 struct omap_device *od;
435 struct omap_device_pm_latency *ohl;
436 char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN];
437 struct omap_mmc_platform_data *mmc_data;
438 struct omap_mmc_dev_attr *mmc_dev_attr;
439 char *name;
440 int l;
441 int ohl_cnt = 0;
442
443 mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL);
444 if (!mmc_data) {
445 pr_err("Cannot allocate memory for mmc device!\n");
446 goto done;
354 } 447 }
355 448
449 if (omap_hsmmc_pdata_init(hsmmcinfo, mmc_data) < 0) {
450 pr_err("%s fails!\n", __func__);
451 goto done;
452 }
453 omap_hsmmc_mux(mmc_data, (ctrl_nr - 1));
454
455 name = "omap_hsmmc";
456 ohl = omap_hsmmc_latency;
457 ohl_cnt = ARRAY_SIZE(omap_hsmmc_latency);
458
459 l = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN,
460 "mmc%d", ctrl_nr);
461 WARN(l >= MAX_OMAP_MMC_HWMOD_NAME_LEN,
462 "String buffer overflow in MMC%d device setup\n", ctrl_nr);
463 oh = omap_hwmod_lookup(oh_name);
464 if (!oh) {
465 pr_err("Could not look up %s\n", oh_name);
466 kfree(mmc_data->slots[0].name);
467 goto done;
468 }
469
470 if (oh->dev_attr != NULL) {
471 mmc_dev_attr = oh->dev_attr;
472 mmc_data->controller_flags = mmc_dev_attr->flags;
473 }
474
475 od = omap_device_build(name, ctrl_nr - 1, oh, mmc_data,
476 sizeof(struct omap_mmc_platform_data), ohl, ohl_cnt, false);
477 if (IS_ERR(od)) {
478 WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name);
479 kfree(mmc_data->slots[0].name);
480 goto done;
481 }
482 /*
483 * return device handle to board setup code
484 * required to populate for regulator framework structure
485 */
486 hsmmcinfo->dev = &od->pdev.dev;
487
356done: 488done:
357 for (i = 0; i < nr_hsmmc; i++) 489 kfree(mmc_data);
358 kfree(hsmmc_data[i]); 490}
491
492void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
493{
494 u32 reg;
495
496 if (!cpu_is_omap44xx()) {
497 if (cpu_is_omap2430()) {
498 control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE;
499 control_devconf1_offset = OMAP243X_CONTROL_DEVCONF1;
500 } else {
501 control_pbias_offset = OMAP343X_CONTROL_PBIAS_LITE;
502 control_devconf1_offset = OMAP343X_CONTROL_DEVCONF1;
503 }
504 } else {
505 control_pbias_offset =
506 OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_PBIASLITE;
507 control_mmc1 = OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MMC1;
508 reg = omap4_ctrl_pad_readl(control_mmc1);
509 reg |= (OMAP4_SDMMC1_PUSTRENGTH_GRP0_MASK |
510 OMAP4_SDMMC1_PUSTRENGTH_GRP1_MASK);
511 reg &= ~(OMAP4_SDMMC1_PUSTRENGTH_GRP2_MASK |
512 OMAP4_SDMMC1_PUSTRENGTH_GRP3_MASK);
513 reg |= (OMAP4_USBC1_DR0_SPEEDCTRL_MASK|
514 OMAP4_SDMMC1_DR1_SPEEDCTRL_MASK |
515 OMAP4_SDMMC1_DR2_SPEEDCTRL_MASK);
516 omap4_ctrl_pad_writel(reg, control_mmc1);
517 }
518
519 for (; controllers->mmc; controllers++)
520 omap_init_hsmmc(controllers, controllers->mmc);
521
359} 522}
360 523
361#endif 524#endif
diff --git a/arch/arm/mach-omap2/hsmmc.h b/arch/arm/mach-omap2/hsmmc.h
index 1fe6f0187177..f757e78d4d4f 100644
--- a/arch/arm/mach-omap2/hsmmc.h
+++ b/arch/arm/mach-omap2/hsmmc.h
@@ -10,20 +10,22 @@ struct mmc_card;
10 10
11struct omap2_hsmmc_info { 11struct omap2_hsmmc_info {
12 u8 mmc; /* controller 1/2/3 */ 12 u8 mmc; /* controller 1/2/3 */
13 u8 wires; /* 1/4/8 wires */ 13 u32 caps; /* 4/8 wires and any additional host
14 * capabilities OR'd (ref. linux/mmc/host.h) */
14 bool transceiver; /* MMC-2 option */ 15 bool transceiver; /* MMC-2 option */
15 bool ext_clock; /* use external pin for input clock */ 16 bool ext_clock; /* use external pin for input clock */
16 bool cover_only; /* No card detect - just cover switch */ 17 bool cover_only; /* No card detect - just cover switch */
17 bool nonremovable; /* Nonremovable e.g. eMMC */ 18 bool nonremovable; /* Nonremovable e.g. eMMC */
18 bool power_saving; /* Try to sleep or power off when possible */ 19 bool power_saving; /* Try to sleep or power off when possible */
19 bool no_off; /* power_saving and power is not to go off */ 20 bool no_off; /* power_saving and power is not to go off */
21 bool no_off_init; /* no power off when not in MMC sleep state */
20 bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */ 22 bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */
21 int gpio_cd; /* or -EINVAL */ 23 int gpio_cd; /* or -EINVAL */
22 int gpio_wp; /* or -EINVAL */ 24 int gpio_wp; /* or -EINVAL */
23 char *name; /* or NULL for default */ 25 char *name; /* or NULL for default */
24 struct device *dev; /* returned: pointer to mmc adapter */ 26 struct device *dev; /* returned: pointer to mmc adapter */
25 int ocr_mask; /* temporary HACK */ 27 int ocr_mask; /* temporary HACK */
26 /* Remux (pad configuation) when powering on/off */ 28 /* Remux (pad configuration) when powering on/off */
27 void (*remux)(struct device *dev, int slot, int power_on); 29 void (*remux)(struct device *dev, int slot, int power_on);
28 /* init some special card */ 30 /* init some special card */
29 void (*init_card)(struct mmc_card *card); 31 void (*init_card)(struct mmc_card *card);
diff --git a/arch/arm/mach-omap2/hwspinlock.c b/arch/arm/mach-omap2/hwspinlock.c
new file mode 100644
index 000000000000..06d4a80660a5
--- /dev/null
+++ b/arch/arm/mach-omap2/hwspinlock.c
@@ -0,0 +1,63 @@
1/*
2 * OMAP hardware spinlock device initialization
3 *
4 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com
5 *
6 * Contact: Simon Que <sque@ti.com>
7 * Hari Kanigeri <h-kanigeri2@ti.com>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * version 2 as published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 */
18
19#include <linux/kernel.h>
20#include <linux/init.h>
21#include <linux/err.h>
22
23#include <plat/omap_hwmod.h>
24#include <plat/omap_device.h>
25
26struct omap_device_pm_latency omap_spinlock_latency[] = {
27 {
28 .deactivate_func = omap_device_idle_hwmods,
29 .activate_func = omap_device_enable_hwmods,
30 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
31 }
32};
33
34int __init hwspinlocks_init(void)
35{
36 int retval = 0;
37 struct omap_hwmod *oh;
38 struct omap_device *od;
39 const char *oh_name = "spinlock";
40 const char *dev_name = "omap_hwspinlock";
41
42 /*
43 * Hwmod lookup will fail in case our platform doesn't support the
44 * hardware spinlock module, so it is safe to run this initcall
45 * on all omaps
46 */
47 oh = omap_hwmod_lookup(oh_name);
48 if (oh == NULL)
49 return -EINVAL;
50
51 od = omap_device_build(dev_name, 0, oh, NULL, 0,
52 omap_spinlock_latency,
53 ARRAY_SIZE(omap_spinlock_latency), false);
54 if (IS_ERR(od)) {
55 pr_err("Can't build omap_device for %s:%s\n", dev_name,
56 oh_name);
57 retval = PTR_ERR(od);
58 }
59
60 return retval;
61}
62/* early board code might need to reserve specific hwspinlock instances */
63postcore_initcall(hwspinlocks_init);
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 9a879f959509..2537090aa33a 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -6,7 +6,7 @@
6 * Copyright (C) 2005 Nokia Corporation 6 * Copyright (C) 2005 Nokia Corporation
7 * Written by Tony Lindgren <tony@atomide.com> 7 * Written by Tony Lindgren <tony@atomide.com>
8 * 8 *
9 * Copyright (C) 2009 Texas Instruments 9 * Copyright (C) 2009-11 Texas Instruments
10 * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> 10 * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
11 * 11 *
12 * This program is free software; you can redistribute it and/or modify 12 * This program is free software; you can redistribute it and/or modify
@@ -22,11 +22,12 @@
22#include <asm/cputype.h> 22#include <asm/cputype.h>
23 23
24#include <plat/common.h> 24#include <plat/common.h>
25#include <plat/control.h>
26#include <plat/cpu.h> 25#include <plat/cpu.h>
27 26
28#include <mach/id.h> 27#include <mach/id.h>
29 28
29#include "control.h"
30
30static struct omap_chip_id omap_chip; 31static struct omap_chip_id omap_chip;
31static unsigned int omap_revision; 32static unsigned int omap_revision;
32 33
@@ -60,7 +61,7 @@ int omap_type(void)
60 } else if (cpu_is_omap34xx()) { 61 } else if (cpu_is_omap34xx()) {
61 val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS); 62 val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
62 } else if (cpu_is_omap44xx()) { 63 } else if (cpu_is_omap44xx()) {
63 val = omap_ctrl_readl(OMAP44XX_CONTROL_STATUS); 64 val = omap_ctrl_readl(OMAP4_CTRL_MODULE_CORE_STATUS);
64 } else { 65 } else {
65 pr_err("Cannot detect omap type!\n"); 66 pr_err("Cannot detect omap type!\n");
66 goto out; 67 goto out;
@@ -83,6 +84,11 @@ EXPORT_SYMBOL(omap_type);
83#define OMAP_TAP_DIE_ID_2 0x0220 84#define OMAP_TAP_DIE_ID_2 0x0220
84#define OMAP_TAP_DIE_ID_3 0x0224 85#define OMAP_TAP_DIE_ID_3 0x0224
85 86
87#define OMAP_TAP_DIE_ID_44XX_0 0x0200
88#define OMAP_TAP_DIE_ID_44XX_1 0x0208
89#define OMAP_TAP_DIE_ID_44XX_2 0x020c
90#define OMAP_TAP_DIE_ID_44XX_3 0x0210
91
86#define read_tap_reg(reg) __raw_readl(tap_base + (reg)) 92#define read_tap_reg(reg) __raw_readl(tap_base + (reg))
87 93
88struct omap_id { 94struct omap_id {
@@ -106,6 +112,14 @@ static u16 tap_prod_id;
106 112
107void omap_get_die_id(struct omap_die_id *odi) 113void omap_get_die_id(struct omap_die_id *odi)
108{ 114{
115 if (cpu_is_omap44xx()) {
116 odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_0);
117 odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_1);
118 odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_2);
119 odi->id_3 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_3);
120
121 return;
122 }
109 odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_0); 123 odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_0);
110 odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_1); 124 odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_1);
111 odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_2); 125 odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_2);
@@ -190,12 +204,19 @@ static void __init omap3_check_features(void)
190 if (!cpu_is_omap3505() && !cpu_is_omap3517()) 204 if (!cpu_is_omap3505() && !cpu_is_omap3517())
191 omap3_features |= OMAP3_HAS_IO_WAKEUP; 205 omap3_features |= OMAP3_HAS_IO_WAKEUP;
192 206
207 omap3_features |= OMAP3_HAS_SDRC;
208
193 /* 209 /*
194 * TODO: Get additional info (where applicable) 210 * TODO: Get additional info (where applicable)
195 * e.g. Size of L2 cache. 211 * e.g. Size of L2 cache.
196 */ 212 */
197} 213}
198 214
215static void __init ti816x_check_features(void)
216{
217 omap3_features = OMAP3_HAS_NEON;
218}
219
199static void __init omap3_check_revision(void) 220static void __init omap3_check_revision(void)
200{ 221{
201 u32 cpuid, idcode; 222 u32 cpuid, idcode;
@@ -286,6 +307,20 @@ static void __init omap3_check_revision(void)
286 omap_chip.oc |= CHIP_IS_OMAP3630ES1_2; 307 omap_chip.oc |= CHIP_IS_OMAP3630ES1_2;
287 } 308 }
288 break; 309 break;
310 case 0xb81e:
311 omap_chip.oc = CHIP_IS_TI816X;
312
313 switch (rev) {
314 case 0:
315 omap_revision = TI8168_REV_ES1_0;
316 break;
317 case 1:
318 omap_revision = TI8168_REV_ES1_1;
319 break;
320 default:
321 omap_revision = TI8168_REV_ES1_1;
322 }
323 break;
289 default: 324 default:
290 /* Unknown default to latest silicon rev as default*/ 325 /* Unknown default to latest silicon rev as default*/
291 omap_revision = OMAP3630_REV_ES1_2; 326 omap_revision = OMAP3630_REV_ES1_2;
@@ -298,7 +333,6 @@ static void __init omap4_check_revision(void)
298 u32 idcode; 333 u32 idcode;
299 u16 hawkeye; 334 u16 hawkeye;
300 u8 rev; 335 u8 rev;
301 char *rev_name = "ES1.0";
302 336
303 /* 337 /*
304 * The IC rev detection is done with hawkeye and rev. 338 * The IC rev detection is done with hawkeye and rev.
@@ -307,16 +341,50 @@ static void __init omap4_check_revision(void)
307 */ 341 */
308 idcode = read_tap_reg(OMAP_TAP_IDCODE); 342 idcode = read_tap_reg(OMAP_TAP_IDCODE);
309 hawkeye = (idcode >> 12) & 0xffff; 343 hawkeye = (idcode >> 12) & 0xffff;
310 rev = (idcode >> 28) & 0xff; 344 rev = (idcode >> 28) & 0xf;
311 345
312 if ((hawkeye == 0xb852) && (rev == 0x0)) { 346 /*
313 omap_revision = OMAP4430_REV_ES1_0; 347 * Few initial ES2.0 samples IDCODE is same as ES1.0
314 omap_chip.oc |= CHIP_IS_OMAP4430ES1; 348 * Use ARM register to detect the correct ES version
315 pr_info("OMAP%04x %s\n", omap_rev() >> 16, rev_name); 349 */
316 return; 350 if (!rev) {
351 idcode = read_cpuid(CPUID_ID);
352 rev = (idcode & 0xf) - 1;
353 }
354
355 switch (hawkeye) {
356 case 0xb852:
357 switch (rev) {
358 case 0:
359 omap_revision = OMAP4430_REV_ES1_0;
360 omap_chip.oc |= CHIP_IS_OMAP4430ES1;
361 break;
362 case 1:
363 default:
364 omap_revision = OMAP4430_REV_ES2_0;
365 omap_chip.oc |= CHIP_IS_OMAP4430ES2;
366 }
367 break;
368 case 0xb95c:
369 switch (rev) {
370 case 3:
371 omap_revision = OMAP4430_REV_ES2_1;
372 omap_chip.oc |= CHIP_IS_OMAP4430ES2_1;
373 break;
374 case 4:
375 default:
376 omap_revision = OMAP4430_REV_ES2_2;
377 omap_chip.oc |= CHIP_IS_OMAP4430ES2_2;
378 }
379 break;
380 default:
381 /* Unknown default to latest silicon rev as default */
382 omap_revision = OMAP4430_REV_ES2_2;
383 omap_chip.oc |= CHIP_IS_OMAP4430ES2_2;
317 } 384 }
318 385
319 pr_err("Unknown OMAP4 CPU id\n"); 386 pr_info("OMAP%04x ES%d.%d\n", omap_rev() >> 16,
387 ((omap_rev() >> 12) & 0xf), ((omap_rev() >> 8) & 0xf));
320} 388}
321 389
322#define OMAP3_SHOW_FEATURE(feat) \ 390#define OMAP3_SHOW_FEATURE(feat) \
@@ -347,6 +415,8 @@ static void __init omap3_cpuinfo(void)
347 /* Already set in omap3_check_revision() */ 415 /* Already set in omap3_check_revision() */
348 strcpy(cpu_name, "AM3505"); 416 strcpy(cpu_name, "AM3505");
349 } 417 }
418 } else if (cpu_is_ti816x()) {
419 strcpy(cpu_name, "TI816X");
350 } else if (omap3_has_iva() && omap3_has_sgx()) { 420 } else if (omap3_has_iva() && omap3_has_sgx()) {
351 /* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */ 421 /* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */
352 strcpy(cpu_name, "OMAP3430/3530"); 422 strcpy(cpu_name, "OMAP3430/3530");
@@ -361,30 +431,54 @@ static void __init omap3_cpuinfo(void)
361 strcpy(cpu_name, "OMAP3503"); 431 strcpy(cpu_name, "OMAP3503");
362 } 432 }
363 433
364 switch (rev) { 434 if (cpu_is_omap3630() || cpu_is_ti816x()) {
365 case OMAP_REVBITS_00: 435 switch (rev) {
366 strcpy(cpu_rev, "1.0"); 436 case OMAP_REVBITS_00:
367 break; 437 strcpy(cpu_rev, "1.0");
368 case OMAP_REVBITS_01: 438 break;
369 strcpy(cpu_rev, "1.1"); 439 case OMAP_REVBITS_01:
370 break; 440 strcpy(cpu_rev, "1.1");
371 case OMAP_REVBITS_02: 441 break;
372 strcpy(cpu_rev, "1.2"); 442 case OMAP_REVBITS_02:
373 break; 443 /* FALLTHROUGH */
374 case OMAP_REVBITS_10: 444 default:
375 strcpy(cpu_rev, "2.0"); 445 /* Use the latest known revision as default */
376 break; 446 strcpy(cpu_rev, "1.2");
377 case OMAP_REVBITS_20: 447 }
378 strcpy(cpu_rev, "2.1"); 448 } else if (cpu_is_omap3505() || cpu_is_omap3517()) {
379 break; 449 switch (rev) {
380 case OMAP_REVBITS_30: 450 case OMAP_REVBITS_00:
381 strcpy(cpu_rev, "3.0"); 451 strcpy(cpu_rev, "1.0");
382 break; 452 break;
383 case OMAP_REVBITS_40: 453 case OMAP_REVBITS_01:
384 /* FALLTHROUGH */ 454 /* FALLTHROUGH */
385 default: 455 default:
386 /* Use the latest known revision as default */ 456 /* Use the latest known revision as default */
387 strcpy(cpu_rev, "3.1"); 457 strcpy(cpu_rev, "1.1");
458 }
459 } else {
460 switch (rev) {
461 case OMAP_REVBITS_00:
462 strcpy(cpu_rev, "1.0");
463 break;
464 case OMAP_REVBITS_01:
465 strcpy(cpu_rev, "2.0");
466 break;
467 case OMAP_REVBITS_02:
468 strcpy(cpu_rev, "2.1");
469 break;
470 case OMAP_REVBITS_03:
471 strcpy(cpu_rev, "3.0");
472 break;
473 case OMAP_REVBITS_04:
474 strcpy(cpu_rev, "3.1");
475 break;
476 case OMAP_REVBITS_05:
477 /* FALLTHROUGH */
478 default:
479 /* Use the latest known revision as default */
480 strcpy(cpu_rev, "3.1.2");
481 }
388 } 482 }
389 483
390 /* Print verbose information */ 484 /* Print verbose information */
@@ -413,7 +507,13 @@ void __init omap2_check_revision(void)
413 omap24xx_check_revision(); 507 omap24xx_check_revision();
414 } else if (cpu_is_omap34xx()) { 508 } else if (cpu_is_omap34xx()) {
415 omap3_check_revision(); 509 omap3_check_revision();
416 omap3_check_features(); 510
511 /* TI816X doesn't have feature register */
512 if (!cpu_is_ti816x())
513 omap3_check_features();
514 else
515 ti816x_check_features();
516
417 omap3_cpuinfo(); 517 omap3_cpuinfo();
418 return; 518 return;
419 } else if (cpu_is_omap44xx()) { 519 } else if (cpu_is_omap44xx()) {
diff --git a/arch/arm/mach-omap2/include/mach/board-rx51.h b/arch/arm/mach-omap2/include/mach/board-rx51.h
new file mode 100644
index 000000000000..b76f49e7eed5
--- /dev/null
+++ b/arch/arm/mach-omap2/include/mach/board-rx51.h
@@ -0,0 +1,11 @@
1/*
2 * Defines for rx51 boards
3 */
4
5#ifndef _OMAP_BOARD_RX51_H
6#define _OMAP_BOARD_RX51_H
7
8extern void __init rx51_peripherals_init(void);
9extern void __init rx51_video_mem_init(void);
10
11#endif
diff --git a/arch/arm/mach-omap2/include/mach/board-zoom.h b/arch/arm/mach-omap2/include/mach/board-zoom.h
index 3af69d2c3dcd..775fdc3b000b 100644
--- a/arch/arm/mach-omap2/include/mach/board-zoom.h
+++ b/arch/arm/mach-omap2/include/mach/board-zoom.h
@@ -1,11 +1,12 @@
1/* 1/*
2 * Defines for zoom boards 2 * Defines for zoom boards
3 */ 3 */
4#include <linux/mtd/mtd.h> 4#include <video/omapdss.h>
5#include <linux/mtd/partitions.h>
6 5
7#define ZOOM_NAND_CS 0 6#define ZOOM_NAND_CS 0
8 7
9extern void __init board_nand_init(struct mtd_partition *, u8 nr_parts, u8 cs);
10extern int __init zoom_debugboard_init(void); 8extern int __init zoom_debugboard_init(void);
11extern void __init zoom_peripherals_init(void); 9extern void __init zoom_peripherals_init(void);
10extern void __init zoom_display_init(void);
11
12#define ZOOM2_HEADSET_EXTMUTE_GPIO 153
diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h
new file mode 100644
index 000000000000..2f7ac70a20d8
--- /dev/null
+++ b/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h
@@ -0,0 +1,391 @@
1/*
2 * OMAP44xx CTRL_MODULE_CORE registers and bitfields
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 *
6 * Benoit Cousson (b-cousson@ti.com)
7 * Santosh Shilimkar (santosh.shilimkar@ti.com)
8 *
9 * This file is automatically generated from the OMAP hardware databases.
10 * We respectfully ask that any modifications to this file be coordinated
11 * with the public linux-omap@vger.kernel.org mailing list and the
12 * authors above to ensure that the autogeneration scripts are kept
13 * up-to-date with the file contents.
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20#ifndef __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_CORE_44XX_H
21#define __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_CORE_44XX_H
22
23
24/* Base address */
25#define OMAP4_CTRL_MODULE_CORE 0x4a002000
26
27/* Registers offset */
28#define OMAP4_CTRL_MODULE_CORE_IP_REVISION 0x0000
29#define OMAP4_CTRL_MODULE_CORE_IP_HWINFO 0x0004
30#define OMAP4_CTRL_MODULE_CORE_IP_SYSCONFIG 0x0010
31#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_DIE_ID_0 0x0200
32#define OMAP4_CTRL_MODULE_CORE_ID_CODE 0x0204
33#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_DIE_ID_1 0x0208
34#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_DIE_ID_2 0x020c
35#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_DIE_ID_3 0x0210
36#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_0 0x0214
37#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1 0x0218
38#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_USB_CONF 0x021c
39#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_OPP_VDD_WKUP 0x0228
40#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_OPP_BGAP 0x0260
41#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_OPP_DPLL_0 0x0264
42#define OMAP4_CTRL_MODULE_CORE_STD_FUSE_OPP_DPLL_1 0x0268
43#define OMAP4_CTRL_MODULE_CORE_STATUS 0x02c4
44#define OMAP4_CTRL_MODULE_CORE_DEV_CONF 0x0300
45#define OMAP4_CTRL_MODULE_CORE_LDOVBB_IVA_VOLTAGE_CTRL 0x0314
46#define OMAP4_CTRL_MODULE_CORE_LDOVBB_MPU_VOLTAGE_CTRL 0x0318
47#define OMAP4_CTRL_MODULE_CORE_LDOSRAM_IVA_VOLTAGE_CTRL 0x0320
48#define OMAP4_CTRL_MODULE_CORE_LDOSRAM_MPU_VOLTAGE_CTRL 0x0324
49#define OMAP4_CTRL_MODULE_CORE_LDOSRAM_CORE_VOLTAGE_CTRL 0x0328
50#define OMAP4_CTRL_MODULE_CORE_TEMP_SENSOR 0x032c
51#define OMAP4_CTRL_MODULE_CORE_DPLL_NWELL_TRIM_0 0x0330
52#define OMAP4_CTRL_MODULE_CORE_DPLL_NWELL_TRIM_1 0x0334
53#define OMAP4_CTRL_MODULE_CORE_USBOTGHS_CONTROL 0x033c
54#define OMAP4_CTRL_MODULE_CORE_DSS_CONTROL 0x0340
55#define OMAP4_CTRL_MODULE_CORE_HWOBS_CONTROL 0x0350
56#define OMAP4_CTRL_MODULE_CORE_DEBOBS_FINAL_MUX_SEL 0x0400
57#define OMAP4_CTRL_MODULE_CORE_DEBOBS_MMR_MPU 0x0408
58#define OMAP4_CTRL_MODULE_CORE_CONF_SDMA_REQ_SEL0 0x042c
59#define OMAP4_CTRL_MODULE_CORE_CONF_SDMA_REQ_SEL1 0x0430
60#define OMAP4_CTRL_MODULE_CORE_CONF_SDMA_REQ_SEL2 0x0434
61#define OMAP4_CTRL_MODULE_CORE_CONF_SDMA_REQ_SEL3 0x0438
62#define OMAP4_CTRL_MODULE_CORE_CONF_CLK_SEL0 0x0440
63#define OMAP4_CTRL_MODULE_CORE_CONF_CLK_SEL1 0x0444
64#define OMAP4_CTRL_MODULE_CORE_CONF_CLK_SEL2 0x0448
65#define OMAP4_CTRL_MODULE_CORE_CONF_DPLL_FREQLOCK_SEL 0x044c
66#define OMAP4_CTRL_MODULE_CORE_CONF_DPLL_TINITZ_SEL 0x0450
67#define OMAP4_CTRL_MODULE_CORE_CONF_DPLL_PHASELOCK_SEL 0x0454
68#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_0 0x0480
69#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_1 0x0484
70#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_2 0x0488
71#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_3 0x048c
72#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_4 0x0490
73#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_5 0x0494
74#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_6 0x0498
75#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_7 0x049c
76#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_8 0x04a0
77#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_9 0x04a4
78#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_10 0x04a8
79#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_11 0x04ac
80#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_12 0x04b0
81#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_13 0x04b4
82#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_14 0x04b8
83#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_15 0x04bc
84#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_16 0x04c0
85#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_17 0x04c4
86#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_18 0x04c8
87#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_19 0x04cc
88#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_20 0x04d0
89#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_21 0x04d4
90#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_22 0x04d8
91#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_23 0x04dc
92#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_24 0x04e0
93#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_25 0x04e4
94#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_26 0x04e8
95#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_27 0x04ec
96#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_28 0x04f0
97#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_29 0x04f4
98#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_30 0x04f8
99#define OMAP4_CTRL_MODULE_CORE_CONF_DEBUG_SEL_TST_31 0x04fc
100
101/* Registers shifts and masks */
102
103/* IP_REVISION */
104#define OMAP4_IP_REV_SCHEME_SHIFT 30
105#define OMAP4_IP_REV_SCHEME_MASK (0x3 << 30)
106#define OMAP4_IP_REV_FUNC_SHIFT 16
107#define OMAP4_IP_REV_FUNC_MASK (0xfff << 16)
108#define OMAP4_IP_REV_RTL_SHIFT 11
109#define OMAP4_IP_REV_RTL_MASK (0x1f << 11)
110#define OMAP4_IP_REV_MAJOR_SHIFT 8
111#define OMAP4_IP_REV_MAJOR_MASK (0x7 << 8)
112#define OMAP4_IP_REV_CUSTOM_SHIFT 6
113#define OMAP4_IP_REV_CUSTOM_MASK (0x3 << 6)
114#define OMAP4_IP_REV_MINOR_SHIFT 0
115#define OMAP4_IP_REV_MINOR_MASK (0x3f << 0)
116
117/* IP_HWINFO */
118#define OMAP4_IP_HWINFO_SHIFT 0
119#define OMAP4_IP_HWINFO_MASK (0xffffffff << 0)
120
121/* IP_SYSCONFIG */
122#define OMAP4_IP_SYSCONFIG_IDLEMODE_SHIFT 2
123#define OMAP4_IP_SYSCONFIG_IDLEMODE_MASK (0x3 << 2)
124
125/* STD_FUSE_DIE_ID_0 */
126#define OMAP4_STD_FUSE_DIE_ID_0_SHIFT 0
127#define OMAP4_STD_FUSE_DIE_ID_0_MASK (0xffffffff << 0)
128
129/* ID_CODE */
130#define OMAP4_STD_FUSE_IDCODE_SHIFT 0
131#define OMAP4_STD_FUSE_IDCODE_MASK (0xffffffff << 0)
132
133/* STD_FUSE_DIE_ID_1 */
134#define OMAP4_STD_FUSE_DIE_ID_1_SHIFT 0
135#define OMAP4_STD_FUSE_DIE_ID_1_MASK (0xffffffff << 0)
136
137/* STD_FUSE_DIE_ID_2 */
138#define OMAP4_STD_FUSE_DIE_ID_2_SHIFT 0
139#define OMAP4_STD_FUSE_DIE_ID_2_MASK (0xffffffff << 0)
140
141/* STD_FUSE_DIE_ID_3 */
142#define OMAP4_STD_FUSE_DIE_ID_3_SHIFT 0
143#define OMAP4_STD_FUSE_DIE_ID_3_MASK (0xffffffff << 0)
144
145/* STD_FUSE_PROD_ID_0 */
146#define OMAP4_STD_FUSE_PROD_ID_0_SHIFT 0
147#define OMAP4_STD_FUSE_PROD_ID_0_MASK (0xffffffff << 0)
148
149/* STD_FUSE_PROD_ID_1 */
150#define OMAP4_STD_FUSE_PROD_ID_1_SHIFT 0
151#define OMAP4_STD_FUSE_PROD_ID_1_MASK (0xffffffff << 0)
152
153/* STD_FUSE_USB_CONF */
154#define OMAP4_USB_PROD_ID_SHIFT 16
155#define OMAP4_USB_PROD_ID_MASK (0xffff << 16)
156#define OMAP4_USB_VENDOR_ID_SHIFT 0
157#define OMAP4_USB_VENDOR_ID_MASK (0xffff << 0)
158
159/* STD_FUSE_OPP_VDD_WKUP */
160#define OMAP4_STD_FUSE_OPP_VDD_WKUP_SHIFT 0
161#define OMAP4_STD_FUSE_OPP_VDD_WKUP_MASK (0xffffffff << 0)
162
163/* STD_FUSE_OPP_BGAP */
164#define OMAP4_STD_FUSE_OPP_BGAP_SHIFT 0
165#define OMAP4_STD_FUSE_OPP_BGAP_MASK (0xffffffff << 0)
166
167/* STD_FUSE_OPP_DPLL_0 */
168#define OMAP4_STD_FUSE_OPP_DPLL_0_SHIFT 0
169#define OMAP4_STD_FUSE_OPP_DPLL_0_MASK (0xffffffff << 0)
170
171/* STD_FUSE_OPP_DPLL_1 */
172#define OMAP4_STD_FUSE_OPP_DPLL_1_SHIFT 0
173#define OMAP4_STD_FUSE_OPP_DPLL_1_MASK (0xffffffff << 0)
174
175/* STATUS */
176#define OMAP4_ATTILA_CONF_SHIFT 11
177#define OMAP4_ATTILA_CONF_MASK (0x3 << 11)
178#define OMAP4_DEVICE_TYPE_SHIFT 8
179#define OMAP4_DEVICE_TYPE_MASK (0x7 << 8)
180#define OMAP4_SYS_BOOT_SHIFT 0
181#define OMAP4_SYS_BOOT_MASK (0xff << 0)
182
183/* DEV_CONF */
184#define OMAP4_DEV_CONF_SHIFT 1
185#define OMAP4_DEV_CONF_MASK (0x7fffffff << 1)
186#define OMAP4_USBPHY_PD_SHIFT 0
187#define OMAP4_USBPHY_PD_MASK (1 << 0)
188
189/* LDOVBB_IVA_VOLTAGE_CTRL */
190#define OMAP4_LDOVBBIVA_RBB_MUX_CTRL_SHIFT 26
191#define OMAP4_LDOVBBIVA_RBB_MUX_CTRL_MASK (1 << 26)
192#define OMAP4_LDOVBBIVA_RBB_VSET_IN_SHIFT 21
193#define OMAP4_LDOVBBIVA_RBB_VSET_IN_MASK (0x1f << 21)
194#define OMAP4_LDOVBBIVA_RBB_VSET_OUT_SHIFT 16
195#define OMAP4_LDOVBBIVA_RBB_VSET_OUT_MASK (0x1f << 16)
196#define OMAP4_LDOVBBIVA_FBB_MUX_CTRL_SHIFT 10
197#define OMAP4_LDOVBBIVA_FBB_MUX_CTRL_MASK (1 << 10)
198#define OMAP4_LDOVBBIVA_FBB_VSET_IN_SHIFT 5
199#define OMAP4_LDOVBBIVA_FBB_VSET_IN_MASK (0x1f << 5)
200#define OMAP4_LDOVBBIVA_FBB_VSET_OUT_SHIFT 0
201#define OMAP4_LDOVBBIVA_FBB_VSET_OUT_MASK (0x1f << 0)
202
203/* LDOVBB_MPU_VOLTAGE_CTRL */
204#define OMAP4_LDOVBBMPU_RBB_MUX_CTRL_SHIFT 26
205#define OMAP4_LDOVBBMPU_RBB_MUX_CTRL_MASK (1 << 26)
206#define OMAP4_LDOVBBMPU_RBB_VSET_IN_SHIFT 21
207#define OMAP4_LDOVBBMPU_RBB_VSET_IN_MASK (0x1f << 21)
208#define OMAP4_LDOVBBMPU_RBB_VSET_OUT_SHIFT 16
209#define OMAP4_LDOVBBMPU_RBB_VSET_OUT_MASK (0x1f << 16)
210#define OMAP4_LDOVBBMPU_FBB_MUX_CTRL_SHIFT 10
211#define OMAP4_LDOVBBMPU_FBB_MUX_CTRL_MASK (1 << 10)
212#define OMAP4_LDOVBBMPU_FBB_VSET_IN_SHIFT 5
213#define OMAP4_LDOVBBMPU_FBB_VSET_IN_MASK (0x1f << 5)
214#define OMAP4_LDOVBBMPU_FBB_VSET_OUT_SHIFT 0
215#define OMAP4_LDOVBBMPU_FBB_VSET_OUT_MASK (0x1f << 0)
216
217/* LDOSRAM_IVA_VOLTAGE_CTRL */
218#define OMAP4_LDOSRAMIVA_RETMODE_MUX_CTRL_SHIFT 26
219#define OMAP4_LDOSRAMIVA_RETMODE_MUX_CTRL_MASK (1 << 26)
220#define OMAP4_LDOSRAMIVA_RETMODE_VSET_IN_SHIFT 21
221#define OMAP4_LDOSRAMIVA_RETMODE_VSET_IN_MASK (0x1f << 21)
222#define OMAP4_LDOSRAMIVA_RETMODE_VSET_OUT_SHIFT 16
223#define OMAP4_LDOSRAMIVA_RETMODE_VSET_OUT_MASK (0x1f << 16)
224#define OMAP4_LDOSRAMIVA_ACTMODE_MUX_CTRL_SHIFT 10
225#define OMAP4_LDOSRAMIVA_ACTMODE_MUX_CTRL_MASK (1 << 10)
226#define OMAP4_LDOSRAMIVA_ACTMODE_VSET_IN_SHIFT 5
227#define OMAP4_LDOSRAMIVA_ACTMODE_VSET_IN_MASK (0x1f << 5)
228#define OMAP4_LDOSRAMIVA_ACTMODE_VSET_OUT_SHIFT 0
229#define OMAP4_LDOSRAMIVA_ACTMODE_VSET_OUT_MASK (0x1f << 0)
230
231/* LDOSRAM_MPU_VOLTAGE_CTRL */
232#define OMAP4_LDOSRAMMPU_RETMODE_MUX_CTRL_SHIFT 26
233#define OMAP4_LDOSRAMMPU_RETMODE_MUX_CTRL_MASK (1 << 26)
234#define OMAP4_LDOSRAMMPU_RETMODE_VSET_IN_SHIFT 21
235#define OMAP4_LDOSRAMMPU_RETMODE_VSET_IN_MASK (0x1f << 21)
236#define OMAP4_LDOSRAMMPU_RETMODE_VSET_OUT_SHIFT 16
237#define OMAP4_LDOSRAMMPU_RETMODE_VSET_OUT_MASK (0x1f << 16)
238#define OMAP4_LDOSRAMMPU_ACTMODE_MUX_CTRL_SHIFT 10
239#define OMAP4_LDOSRAMMPU_ACTMODE_MUX_CTRL_MASK (1 << 10)
240#define OMAP4_LDOSRAMMPU_ACTMODE_VSET_IN_SHIFT 5
241#define OMAP4_LDOSRAMMPU_ACTMODE_VSET_IN_MASK (0x1f << 5)
242#define OMAP4_LDOSRAMMPU_ACTMODE_VSET_OUT_SHIFT 0
243#define OMAP4_LDOSRAMMPU_ACTMODE_VSET_OUT_MASK (0x1f << 0)
244
245/* LDOSRAM_CORE_VOLTAGE_CTRL */
246#define OMAP4_LDOSRAMCORE_RETMODE_MUX_CTRL_SHIFT 26
247#define OMAP4_LDOSRAMCORE_RETMODE_MUX_CTRL_MASK (1 << 26)
248#define OMAP4_LDOSRAMCORE_RETMODE_VSET_IN_SHIFT 21
249#define OMAP4_LDOSRAMCORE_RETMODE_VSET_IN_MASK (0x1f << 21)
250#define OMAP4_LDOSRAMCORE_RETMODE_VSET_OUT_SHIFT 16
251#define OMAP4_LDOSRAMCORE_RETMODE_VSET_OUT_MASK (0x1f << 16)
252#define OMAP4_LDOSRAMCORE_ACTMODE_MUX_CTRL_SHIFT 10
253#define OMAP4_LDOSRAMCORE_ACTMODE_MUX_CTRL_MASK (1 << 10)
254#define OMAP4_LDOSRAMCORE_ACTMODE_VSET_IN_SHIFT 5
255#define OMAP4_LDOSRAMCORE_ACTMODE_VSET_IN_MASK (0x1f << 5)
256#define OMAP4_LDOSRAMCORE_ACTMODE_VSET_OUT_SHIFT 0
257#define OMAP4_LDOSRAMCORE_ACTMODE_VSET_OUT_MASK (0x1f << 0)
258
259/* TEMP_SENSOR */
260#define OMAP4_BGAP_TEMPSOFF_SHIFT 12
261#define OMAP4_BGAP_TEMPSOFF_MASK (1 << 12)
262#define OMAP4_BGAP_TSHUT_SHIFT 11
263#define OMAP4_BGAP_TSHUT_MASK (1 << 11)
264#define OMAP4_BGAP_TEMP_SENSOR_CONTCONV_SHIFT 10
265#define OMAP4_BGAP_TEMP_SENSOR_CONTCONV_MASK (1 << 10)
266#define OMAP4_BGAP_TEMP_SENSOR_SOC_SHIFT 9
267#define OMAP4_BGAP_TEMP_SENSOR_SOC_MASK (1 << 9)
268#define OMAP4_BGAP_TEMP_SENSOR_EOCZ_SHIFT 8
269#define OMAP4_BGAP_TEMP_SENSOR_EOCZ_MASK (1 << 8)
270#define OMAP4_BGAP_TEMP_SENSOR_DTEMP_SHIFT 0
271#define OMAP4_BGAP_TEMP_SENSOR_DTEMP_MASK (0xff << 0)
272
273/* DPLL_NWELL_TRIM_0 */
274#define OMAP4_DPLL_ABE_NWELL_TRIM_MUX_CTRL_SHIFT 29
275#define OMAP4_DPLL_ABE_NWELL_TRIM_MUX_CTRL_MASK (1 << 29)
276#define OMAP4_DPLL_ABE_NWELL_TRIM_SHIFT 24
277#define OMAP4_DPLL_ABE_NWELL_TRIM_MASK (0x1f << 24)
278#define OMAP4_DPLL_PER_NWELL_TRIM_MUX_CTRL_SHIFT 23
279#define OMAP4_DPLL_PER_NWELL_TRIM_MUX_CTRL_MASK (1 << 23)
280#define OMAP4_DPLL_PER_NWELL_TRIM_SHIFT 18
281#define OMAP4_DPLL_PER_NWELL_TRIM_MASK (0x1f << 18)
282#define OMAP4_DPLL_CORE_NWELL_TRIM_MUX_CTRL_SHIFT 17
283#define OMAP4_DPLL_CORE_NWELL_TRIM_MUX_CTRL_MASK (1 << 17)
284#define OMAP4_DPLL_CORE_NWELL_TRIM_SHIFT 12
285#define OMAP4_DPLL_CORE_NWELL_TRIM_MASK (0x1f << 12)
286#define OMAP4_DPLL_IVA_NWELL_TRIM_MUX_CTRL_SHIFT 11
287#define OMAP4_DPLL_IVA_NWELL_TRIM_MUX_CTRL_MASK (1 << 11)
288#define OMAP4_DPLL_IVA_NWELL_TRIM_SHIFT 6
289#define OMAP4_DPLL_IVA_NWELL_TRIM_MASK (0x1f << 6)
290#define OMAP4_DPLL_MPU_NWELL_TRIM_MUX_CTRL_SHIFT 5
291#define OMAP4_DPLL_MPU_NWELL_TRIM_MUX_CTRL_MASK (1 << 5)
292#define OMAP4_DPLL_MPU_NWELL_TRIM_SHIFT 0
293#define OMAP4_DPLL_MPU_NWELL_TRIM_MASK (0x1f << 0)
294
295/* DPLL_NWELL_TRIM_1 */
296#define OMAP4_DPLL_UNIPRO_NWELL_TRIM_MUX_CTRL_SHIFT 29
297#define OMAP4_DPLL_UNIPRO_NWELL_TRIM_MUX_CTRL_MASK (1 << 29)
298#define OMAP4_DPLL_UNIPRO_NWELL_TRIM_SHIFT 24
299#define OMAP4_DPLL_UNIPRO_NWELL_TRIM_MASK (0x1f << 24)
300#define OMAP4_DPLL_USB_NWELL_TRIM_MUX_CTRL_SHIFT 23
301#define OMAP4_DPLL_USB_NWELL_TRIM_MUX_CTRL_MASK (1 << 23)
302#define OMAP4_DPLL_USB_NWELL_TRIM_SHIFT 18
303#define OMAP4_DPLL_USB_NWELL_TRIM_MASK (0x1f << 18)
304#define OMAP4_DPLL_HDMI_NWELL_TRIM_MUX_CTRL_SHIFT 17
305#define OMAP4_DPLL_HDMI_NWELL_TRIM_MUX_CTRL_MASK (1 << 17)
306#define OMAP4_DPLL_HDMI_NWELL_TRIM_SHIFT 12
307#define OMAP4_DPLL_HDMI_NWELL_TRIM_MASK (0x1f << 12)
308#define OMAP4_DPLL_DSI2_NWELL_TRIM_MUX_CTRL_SHIFT 11
309#define OMAP4_DPLL_DSI2_NWELL_TRIM_MUX_CTRL_MASK (1 << 11)
310#define OMAP4_DPLL_DSI2_NWELL_TRIM_SHIFT 6
311#define OMAP4_DPLL_DSI2_NWELL_TRIM_MASK (0x1f << 6)
312#define OMAP4_DPLL_DSI1_NWELL_TRIM_MUX_CTRL_SHIFT 5
313#define OMAP4_DPLL_DSI1_NWELL_TRIM_MUX_CTRL_MASK (1 << 5)
314#define OMAP4_DPLL_DSI1_NWELL_TRIM_SHIFT 0
315#define OMAP4_DPLL_DSI1_NWELL_TRIM_MASK (0x1f << 0)
316
317/* USBOTGHS_CONTROL */
318#define OMAP4_DISCHRGVBUS_SHIFT 8
319#define OMAP4_DISCHRGVBUS_MASK (1 << 8)
320#define OMAP4_CHRGVBUS_SHIFT 7
321#define OMAP4_CHRGVBUS_MASK (1 << 7)
322#define OMAP4_DRVVBUS_SHIFT 6
323#define OMAP4_DRVVBUS_MASK (1 << 6)
324#define OMAP4_IDPULLUP_SHIFT 5
325#define OMAP4_IDPULLUP_MASK (1 << 5)
326#define OMAP4_IDDIG_SHIFT 4
327#define OMAP4_IDDIG_MASK (1 << 4)
328#define OMAP4_SESSEND_SHIFT 3
329#define OMAP4_SESSEND_MASK (1 << 3)
330#define OMAP4_VBUSVALID_SHIFT 2
331#define OMAP4_VBUSVALID_MASK (1 << 2)
332#define OMAP4_BVALID_SHIFT 1
333#define OMAP4_BVALID_MASK (1 << 1)
334#define OMAP4_AVALID_SHIFT 0
335#define OMAP4_AVALID_MASK (1 << 0)
336
337/* DSS_CONTROL */
338#define OMAP4_DSS_MUX6_SELECT_SHIFT 0
339#define OMAP4_DSS_MUX6_SELECT_MASK (1 << 0)
340
341/* HWOBS_CONTROL */
342#define OMAP4_HWOBS_CLKDIV_SEL_SHIFT 3
343#define OMAP4_HWOBS_CLKDIV_SEL_MASK (0x1f << 3)
344#define OMAP4_HWOBS_ALL_ZERO_MODE_SHIFT 2
345#define OMAP4_HWOBS_ALL_ZERO_MODE_MASK (1 << 2)
346#define OMAP4_HWOBS_ALL_ONE_MODE_SHIFT 1
347#define OMAP4_HWOBS_ALL_ONE_MODE_MASK (1 << 1)
348#define OMAP4_HWOBS_MACRO_ENABLE_SHIFT 0
349#define OMAP4_HWOBS_MACRO_ENABLE_MASK (1 << 0)
350
351/* DEBOBS_FINAL_MUX_SEL */
352#define OMAP4_SELECT_SHIFT 0
353#define OMAP4_SELECT_MASK (0xffffffff << 0)
354
355/* DEBOBS_MMR_MPU */
356#define OMAP4_SELECT_DEBOBS_MMR_MPU_SHIFT 0
357#define OMAP4_SELECT_DEBOBS_MMR_MPU_MASK (0xf << 0)
358
359/* CONF_SDMA_REQ_SEL0 */
360#define OMAP4_MULT_SHIFT 0
361#define OMAP4_MULT_MASK (0x7f << 0)
362
363/* CONF_CLK_SEL0 */
364#define OMAP4_MULT_CONF_CLK_SEL0_SHIFT 0
365#define OMAP4_MULT_CONF_CLK_SEL0_MASK (0x7 << 0)
366
367/* CONF_CLK_SEL1 */
368#define OMAP4_MULT_CONF_CLK_SEL1_SHIFT 0
369#define OMAP4_MULT_CONF_CLK_SEL1_MASK (0x7 << 0)
370
371/* CONF_CLK_SEL2 */
372#define OMAP4_MULT_CONF_CLK_SEL2_SHIFT 0
373#define OMAP4_MULT_CONF_CLK_SEL2_MASK (0x7 << 0)
374
375/* CONF_DPLL_FREQLOCK_SEL */
376#define OMAP4_MULT_CONF_DPLL_FREQLOCK_SEL_SHIFT 0
377#define OMAP4_MULT_CONF_DPLL_FREQLOCK_SEL_MASK (0x7 << 0)
378
379/* CONF_DPLL_TINITZ_SEL */
380#define OMAP4_MULT_CONF_DPLL_TINITZ_SEL_SHIFT 0
381#define OMAP4_MULT_CONF_DPLL_TINITZ_SEL_MASK (0x7 << 0)
382
383/* CONF_DPLL_PHASELOCK_SEL */
384#define OMAP4_MULT_CONF_DPLL_PHASELOCK_SEL_SHIFT 0
385#define OMAP4_MULT_CONF_DPLL_PHASELOCK_SEL_MASK (0x7 << 0)
386
387/* CONF_DEBUG_SEL_TST_0 */
388#define OMAP4_MODE_SHIFT 0
389#define OMAP4_MODE_MASK (0xf << 0)
390
391#endif
diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h
new file mode 100644
index 000000000000..c88420de1151
--- /dev/null
+++ b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h
@@ -0,0 +1,1409 @@
1/*
2 * OMAP44xx CTRL_MODULE_PAD_CORE registers and bitfields
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 *
6 * Benoit Cousson (b-cousson@ti.com)
7 * Santosh Shilimkar (santosh.shilimkar@ti.com)
8 *
9 * This file is automatically generated from the OMAP hardware databases.
10 * We respectfully ask that any modifications to this file be coordinated
11 * with the public linux-omap@vger.kernel.org mailing list and the
12 * authors above to ensure that the autogeneration scripts are kept
13 * up-to-date with the file contents.
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20#ifndef __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_PAD_CORE_44XX_H
21#define __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_PAD_CORE_44XX_H
22
23
24/* Base address */
25#define OMAP4_CTRL_MODULE_PAD_CORE 0x4a100000
26
27/* Registers offset */
28#define OMAP4_CTRL_MODULE_PAD_CORE_IP_REVISION 0x0000
29#define OMAP4_CTRL_MODULE_PAD_CORE_IP_HWINFO 0x0004
30#define OMAP4_CTRL_MODULE_PAD_CORE_IP_SYSCONFIG 0x0010
31#define OMAP4_CTRL_MODULE_PAD_CORE_PADCONF_WAKEUPEVENT_0 0x01d8
32#define OMAP4_CTRL_MODULE_PAD_CORE_PADCONF_WAKEUPEVENT_1 0x01dc
33#define OMAP4_CTRL_MODULE_PAD_CORE_PADCONF_WAKEUPEVENT_2 0x01e0
34#define OMAP4_CTRL_MODULE_PAD_CORE_PADCONF_WAKEUPEVENT_3 0x01e4
35#define OMAP4_CTRL_MODULE_PAD_CORE_PADCONF_WAKEUPEVENT_4 0x01e8
36#define OMAP4_CTRL_MODULE_PAD_CORE_PADCONF_WAKEUPEVENT_5 0x01ec
37#define OMAP4_CTRL_MODULE_PAD_CORE_PADCONF_WAKEUPEVENT_6 0x01f0
38#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_PADCONF_GLOBAL 0x05a0
39#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_PADCONF_MODE 0x05a4
40#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SMART1IO_PADCONF_0 0x05a8
41#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SMART1IO_PADCONF_1 0x05ac
42#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SMART2IO_PADCONF_0 0x05b0
43#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SMART2IO_PADCONF_1 0x05b4
44#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SMART3IO_PADCONF_0 0x05b8
45#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SMART3IO_PADCONF_1 0x05bc
46#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SMART3IO_PADCONF_2 0x05c0
47#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_USBB_HSIC 0x05c4
48#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_SLIMBUS 0x05c8
49#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_PBIASLITE 0x0600
50#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_0 0x0604
51#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_CAMERA_RX 0x0608
52#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_AVDAC 0x060c
53#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_HDMI_TX_PHY 0x0610
54#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MMC2 0x0614
55#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY 0x0618
56#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MCBSPLP 0x061c
57#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_USB2PHYCORE 0x0620
58#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_1 0x0624
59#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_MMC1 0x0628
60#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_HSI 0x062c
61#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_USB 0x0630
62#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_HDQ 0x0634
63#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO1_0 0x0638
64#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO1_1 0x063c
65#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO1_2 0x0640
66#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO1_3 0x0644
67#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO2_0 0x0648
68#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO2_1 0x064c
69#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO2_2 0x0650
70#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_LPDDR2IO2_3 0x0654
71#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_BUS_HOLD 0x0658
72#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_C2C 0x065c
73#define OMAP4_CTRL_MODULE_PAD_CORE_CORE_CONTROL_SPARE_RW 0x0660
74#define OMAP4_CTRL_MODULE_PAD_CORE_CORE_CONTROL_SPARE_R 0x0664
75#define OMAP4_CTRL_MODULE_PAD_CORE_CORE_CONTROL_SPARE_R_C0 0x0668
76#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_EFUSE_1 0x0700
77#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_EFUSE_2 0x0704
78#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_EFUSE_3 0x0708
79#define OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_EFUSE_4 0x070c
80
81/* Registers shifts and masks */
82
83/* IP_REVISION */
84#define OMAP4_IP_REV_SCHEME_SHIFT 30
85#define OMAP4_IP_REV_SCHEME_MASK (0x3 << 30)
86#define OMAP4_IP_REV_FUNC_SHIFT 16
87#define OMAP4_IP_REV_FUNC_MASK (0xfff << 16)
88#define OMAP4_IP_REV_RTL_SHIFT 11
89#define OMAP4_IP_REV_RTL_MASK (0x1f << 11)
90#define OMAP4_IP_REV_MAJOR_SHIFT 8
91#define OMAP4_IP_REV_MAJOR_MASK (0x7 << 8)
92#define OMAP4_IP_REV_CUSTOM_SHIFT 6
93#define OMAP4_IP_REV_CUSTOM_MASK (0x3 << 6)
94#define OMAP4_IP_REV_MINOR_SHIFT 0
95#define OMAP4_IP_REV_MINOR_MASK (0x3f << 0)
96
97/* IP_HWINFO */
98#define OMAP4_IP_HWINFO_SHIFT 0
99#define OMAP4_IP_HWINFO_MASK (0xffffffff << 0)
100
101/* IP_SYSCONFIG */
102#define OMAP4_IP_SYSCONFIG_IDLEMODE_SHIFT 2
103#define OMAP4_IP_SYSCONFIG_IDLEMODE_MASK (0x3 << 2)
104
105/* PADCONF_WAKEUPEVENT_0 */
106#define OMAP4_GPMC_CLK_DUPLICATEWAKEUPEVENT_SHIFT 31
107#define OMAP4_GPMC_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 31)
108#define OMAP4_GPMC_NWP_DUPLICATEWAKEUPEVENT_SHIFT 30
109#define OMAP4_GPMC_NWP_DUPLICATEWAKEUPEVENT_MASK (1 << 30)
110#define OMAP4_GPMC_NCS3_DUPLICATEWAKEUPEVENT_SHIFT 29
111#define OMAP4_GPMC_NCS3_DUPLICATEWAKEUPEVENT_MASK (1 << 29)
112#define OMAP4_GPMC_NCS2_DUPLICATEWAKEUPEVENT_SHIFT 28
113#define OMAP4_GPMC_NCS2_DUPLICATEWAKEUPEVENT_MASK (1 << 28)
114#define OMAP4_GPMC_NCS1_DUPLICATEWAKEUPEVENT_SHIFT 27
115#define OMAP4_GPMC_NCS1_DUPLICATEWAKEUPEVENT_MASK (1 << 27)
116#define OMAP4_GPMC_NCS0_DUPLICATEWAKEUPEVENT_SHIFT 26
117#define OMAP4_GPMC_NCS0_DUPLICATEWAKEUPEVENT_MASK (1 << 26)
118#define OMAP4_GPMC_A25_DUPLICATEWAKEUPEVENT_SHIFT 25
119#define OMAP4_GPMC_A25_DUPLICATEWAKEUPEVENT_MASK (1 << 25)
120#define OMAP4_GPMC_A24_DUPLICATEWAKEUPEVENT_SHIFT 24
121#define OMAP4_GPMC_A24_DUPLICATEWAKEUPEVENT_MASK (1 << 24)
122#define OMAP4_GPMC_A23_DUPLICATEWAKEUPEVENT_SHIFT 23
123#define OMAP4_GPMC_A23_DUPLICATEWAKEUPEVENT_MASK (1 << 23)
124#define OMAP4_GPMC_A22_DUPLICATEWAKEUPEVENT_SHIFT 22
125#define OMAP4_GPMC_A22_DUPLICATEWAKEUPEVENT_MASK (1 << 22)
126#define OMAP4_GPMC_A21_DUPLICATEWAKEUPEVENT_SHIFT 21
127#define OMAP4_GPMC_A21_DUPLICATEWAKEUPEVENT_MASK (1 << 21)
128#define OMAP4_GPMC_A20_DUPLICATEWAKEUPEVENT_SHIFT 20
129#define OMAP4_GPMC_A20_DUPLICATEWAKEUPEVENT_MASK (1 << 20)
130#define OMAP4_GPMC_A19_DUPLICATEWAKEUPEVENT_SHIFT 19
131#define OMAP4_GPMC_A19_DUPLICATEWAKEUPEVENT_MASK (1 << 19)
132#define OMAP4_GPMC_A18_DUPLICATEWAKEUPEVENT_SHIFT 18
133#define OMAP4_GPMC_A18_DUPLICATEWAKEUPEVENT_MASK (1 << 18)
134#define OMAP4_GPMC_A17_DUPLICATEWAKEUPEVENT_SHIFT 17
135#define OMAP4_GPMC_A17_DUPLICATEWAKEUPEVENT_MASK (1 << 17)
136#define OMAP4_GPMC_A16_DUPLICATEWAKEUPEVENT_SHIFT 16
137#define OMAP4_GPMC_A16_DUPLICATEWAKEUPEVENT_MASK (1 << 16)
138#define OMAP4_GPMC_AD15_DUPLICATEWAKEUPEVENT_SHIFT 15
139#define OMAP4_GPMC_AD15_DUPLICATEWAKEUPEVENT_MASK (1 << 15)
140#define OMAP4_GPMC_AD14_DUPLICATEWAKEUPEVENT_SHIFT 14
141#define OMAP4_GPMC_AD14_DUPLICATEWAKEUPEVENT_MASK (1 << 14)
142#define OMAP4_GPMC_AD13_DUPLICATEWAKEUPEVENT_SHIFT 13
143#define OMAP4_GPMC_AD13_DUPLICATEWAKEUPEVENT_MASK (1 << 13)
144#define OMAP4_GPMC_AD12_DUPLICATEWAKEUPEVENT_SHIFT 12
145#define OMAP4_GPMC_AD12_DUPLICATEWAKEUPEVENT_MASK (1 << 12)
146#define OMAP4_GPMC_AD11_DUPLICATEWAKEUPEVENT_SHIFT 11
147#define OMAP4_GPMC_AD11_DUPLICATEWAKEUPEVENT_MASK (1 << 11)
148#define OMAP4_GPMC_AD10_DUPLICATEWAKEUPEVENT_SHIFT 10
149#define OMAP4_GPMC_AD10_DUPLICATEWAKEUPEVENT_MASK (1 << 10)
150#define OMAP4_GPMC_AD9_DUPLICATEWAKEUPEVENT_SHIFT 9
151#define OMAP4_GPMC_AD9_DUPLICATEWAKEUPEVENT_MASK (1 << 9)
152#define OMAP4_GPMC_AD8_DUPLICATEWAKEUPEVENT_SHIFT 8
153#define OMAP4_GPMC_AD8_DUPLICATEWAKEUPEVENT_MASK (1 << 8)
154#define OMAP4_GPMC_AD7_DUPLICATEWAKEUPEVENT_SHIFT 7
155#define OMAP4_GPMC_AD7_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
156#define OMAP4_GPMC_AD6_DUPLICATEWAKEUPEVENT_SHIFT 6
157#define OMAP4_GPMC_AD6_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
158#define OMAP4_GPMC_AD5_DUPLICATEWAKEUPEVENT_SHIFT 5
159#define OMAP4_GPMC_AD5_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
160#define OMAP4_GPMC_AD4_DUPLICATEWAKEUPEVENT_SHIFT 4
161#define OMAP4_GPMC_AD4_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
162#define OMAP4_GPMC_AD3_DUPLICATEWAKEUPEVENT_SHIFT 3
163#define OMAP4_GPMC_AD3_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
164#define OMAP4_GPMC_AD2_DUPLICATEWAKEUPEVENT_SHIFT 2
165#define OMAP4_GPMC_AD2_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
166#define OMAP4_GPMC_AD1_DUPLICATEWAKEUPEVENT_SHIFT 1
167#define OMAP4_GPMC_AD1_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
168#define OMAP4_GPMC_AD0_DUPLICATEWAKEUPEVENT_SHIFT 0
169#define OMAP4_GPMC_AD0_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
170
171/* PADCONF_WAKEUPEVENT_1 */
172#define OMAP4_CAM_STROBE_DUPLICATEWAKEUPEVENT_SHIFT 31
173#define OMAP4_CAM_STROBE_DUPLICATEWAKEUPEVENT_MASK (1 << 31)
174#define OMAP4_CAM_SHUTTER_DUPLICATEWAKEUPEVENT_SHIFT 30
175#define OMAP4_CAM_SHUTTER_DUPLICATEWAKEUPEVENT_MASK (1 << 30)
176#define OMAP4_CSI22_DY1_DUPLICATEWAKEUPEVENT_SHIFT 29
177#define OMAP4_CSI22_DY1_DUPLICATEWAKEUPEVENT_MASK (1 << 29)
178#define OMAP4_CSI22_DX1_DUPLICATEWAKEUPEVENT_SHIFT 28
179#define OMAP4_CSI22_DX1_DUPLICATEWAKEUPEVENT_MASK (1 << 28)
180#define OMAP4_CSI22_DY0_DUPLICATEWAKEUPEVENT_SHIFT 27
181#define OMAP4_CSI22_DY0_DUPLICATEWAKEUPEVENT_MASK (1 << 27)
182#define OMAP4_CSI22_DX0_DUPLICATEWAKEUPEVENT_SHIFT 26
183#define OMAP4_CSI22_DX0_DUPLICATEWAKEUPEVENT_MASK (1 << 26)
184#define OMAP4_CSI21_DY4_DUPLICATEWAKEUPEVENT_SHIFT 25
185#define OMAP4_CSI21_DY4_DUPLICATEWAKEUPEVENT_MASK (1 << 25)
186#define OMAP4_CSI21_DX4_DUPLICATEWAKEUPEVENT_SHIFT 24
187#define OMAP4_CSI21_DX4_DUPLICATEWAKEUPEVENT_MASK (1 << 24)
188#define OMAP4_CSI21_DY3_DUPLICATEWAKEUPEVENT_SHIFT 23
189#define OMAP4_CSI21_DY3_DUPLICATEWAKEUPEVENT_MASK (1 << 23)
190#define OMAP4_CSI21_DX3_DUPLICATEWAKEUPEVENT_SHIFT 22
191#define OMAP4_CSI21_DX3_DUPLICATEWAKEUPEVENT_MASK (1 << 22)
192#define OMAP4_CSI21_DY2_DUPLICATEWAKEUPEVENT_SHIFT 21
193#define OMAP4_CSI21_DY2_DUPLICATEWAKEUPEVENT_MASK (1 << 21)
194#define OMAP4_CSI21_DX2_DUPLICATEWAKEUPEVENT_SHIFT 20
195#define OMAP4_CSI21_DX2_DUPLICATEWAKEUPEVENT_MASK (1 << 20)
196#define OMAP4_CSI21_DY1_DUPLICATEWAKEUPEVENT_SHIFT 19
197#define OMAP4_CSI21_DY1_DUPLICATEWAKEUPEVENT_MASK (1 << 19)
198#define OMAP4_CSI21_DX1_DUPLICATEWAKEUPEVENT_SHIFT 18
199#define OMAP4_CSI21_DX1_DUPLICATEWAKEUPEVENT_MASK (1 << 18)
200#define OMAP4_CSI21_DY0_DUPLICATEWAKEUPEVENT_SHIFT 17
201#define OMAP4_CSI21_DY0_DUPLICATEWAKEUPEVENT_MASK (1 << 17)
202#define OMAP4_CSI21_DX0_DUPLICATEWAKEUPEVENT_SHIFT 16
203#define OMAP4_CSI21_DX0_DUPLICATEWAKEUPEVENT_MASK (1 << 16)
204#define OMAP4_HDMI_DDC_SDA_DUPLICATEWAKEUPEVENT_SHIFT 15
205#define OMAP4_HDMI_DDC_SDA_DUPLICATEWAKEUPEVENT_MASK (1 << 15)
206#define OMAP4_HDMI_DDC_SCL_DUPLICATEWAKEUPEVENT_SHIFT 14
207#define OMAP4_HDMI_DDC_SCL_DUPLICATEWAKEUPEVENT_MASK (1 << 14)
208#define OMAP4_HDMI_CEC_DUPLICATEWAKEUPEVENT_SHIFT 13
209#define OMAP4_HDMI_CEC_DUPLICATEWAKEUPEVENT_MASK (1 << 13)
210#define OMAP4_HDMI_HPD_DUPLICATEWAKEUPEVENT_SHIFT 12
211#define OMAP4_HDMI_HPD_DUPLICATEWAKEUPEVENT_MASK (1 << 12)
212#define OMAP4_C2C_DATA15_DUPLICATEWAKEUPEVENT_SHIFT 11
213#define OMAP4_C2C_DATA15_DUPLICATEWAKEUPEVENT_MASK (1 << 11)
214#define OMAP4_C2C_DATA14_DUPLICATEWAKEUPEVENT_SHIFT 10
215#define OMAP4_C2C_DATA14_DUPLICATEWAKEUPEVENT_MASK (1 << 10)
216#define OMAP4_C2C_DATA13_DUPLICATEWAKEUPEVENT_SHIFT 9
217#define OMAP4_C2C_DATA13_DUPLICATEWAKEUPEVENT_MASK (1 << 9)
218#define OMAP4_C2C_DATA12_DUPLICATEWAKEUPEVENT_SHIFT 8
219#define OMAP4_C2C_DATA12_DUPLICATEWAKEUPEVENT_MASK (1 << 8)
220#define OMAP4_C2C_DATA11_DUPLICATEWAKEUPEVENT_SHIFT 7
221#define OMAP4_C2C_DATA11_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
222#define OMAP4_GPMC_WAIT1_DUPLICATEWAKEUPEVENT_SHIFT 6
223#define OMAP4_GPMC_WAIT1_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
224#define OMAP4_GPMC_WAIT0_DUPLICATEWAKEUPEVENT_SHIFT 5
225#define OMAP4_GPMC_WAIT0_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
226#define OMAP4_GPMC_NBE1_DUPLICATEWAKEUPEVENT_SHIFT 4
227#define OMAP4_GPMC_NBE1_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
228#define OMAP4_GPMC_NBE0_CLE_DUPLICATEWAKEUPEVENT_SHIFT 3
229#define OMAP4_GPMC_NBE0_CLE_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
230#define OMAP4_GPMC_NWE_DUPLICATEWAKEUPEVENT_SHIFT 2
231#define OMAP4_GPMC_NWE_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
232#define OMAP4_GPMC_NOE_DUPLICATEWAKEUPEVENT_SHIFT 1
233#define OMAP4_GPMC_NOE_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
234#define OMAP4_GPMC_NADV_ALE_DUPLICATEWAKEUPEVENT_SHIFT 0
235#define OMAP4_GPMC_NADV_ALE_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
236
237/* PADCONF_WAKEUPEVENT_2 */
238#define OMAP4_ABE_MCBSP1_CLKX_DUPLICATEWAKEUPEVENT_SHIFT 31
239#define OMAP4_ABE_MCBSP1_CLKX_DUPLICATEWAKEUPEVENT_MASK (1 << 31)
240#define OMAP4_ABE_MCBSP2_FSX_DUPLICATEWAKEUPEVENT_SHIFT 30
241#define OMAP4_ABE_MCBSP2_FSX_DUPLICATEWAKEUPEVENT_MASK (1 << 30)
242#define OMAP4_ABE_MCBSP2_DX_DUPLICATEWAKEUPEVENT_SHIFT 29
243#define OMAP4_ABE_MCBSP2_DX_DUPLICATEWAKEUPEVENT_MASK (1 << 29)
244#define OMAP4_ABE_MCBSP2_DR_DUPLICATEWAKEUPEVENT_SHIFT 28
245#define OMAP4_ABE_MCBSP2_DR_DUPLICATEWAKEUPEVENT_MASK (1 << 28)
246#define OMAP4_ABE_MCBSP2_CLKX_DUPLICATEWAKEUPEVENT_SHIFT 27
247#define OMAP4_ABE_MCBSP2_CLKX_DUPLICATEWAKEUPEVENT_MASK (1 << 27)
248#define OMAP4_SDMMC1_DAT7_DUPLICATEWAKEUPEVENT_SHIFT 26
249#define OMAP4_SDMMC1_DAT7_DUPLICATEWAKEUPEVENT_MASK (1 << 26)
250#define OMAP4_SDMMC1_DAT6_DUPLICATEWAKEUPEVENT_SHIFT 25
251#define OMAP4_SDMMC1_DAT6_DUPLICATEWAKEUPEVENT_MASK (1 << 25)
252#define OMAP4_SDMMC1_DAT5_DUPLICATEWAKEUPEVENT_SHIFT 24
253#define OMAP4_SDMMC1_DAT5_DUPLICATEWAKEUPEVENT_MASK (1 << 24)
254#define OMAP4_SDMMC1_DAT4_DUPLICATEWAKEUPEVENT_SHIFT 23
255#define OMAP4_SDMMC1_DAT4_DUPLICATEWAKEUPEVENT_MASK (1 << 23)
256#define OMAP4_SDMMC1_DAT3_DUPLICATEWAKEUPEVENT_SHIFT 22
257#define OMAP4_SDMMC1_DAT3_DUPLICATEWAKEUPEVENT_MASK (1 << 22)
258#define OMAP4_SDMMC1_DAT2_DUPLICATEWAKEUPEVENT_SHIFT 21
259#define OMAP4_SDMMC1_DAT2_DUPLICATEWAKEUPEVENT_MASK (1 << 21)
260#define OMAP4_SDMMC1_DAT1_DUPLICATEWAKEUPEVENT_SHIFT 20
261#define OMAP4_SDMMC1_DAT1_DUPLICATEWAKEUPEVENT_MASK (1 << 20)
262#define OMAP4_SDMMC1_DAT0_DUPLICATEWAKEUPEVENT_SHIFT 19
263#define OMAP4_SDMMC1_DAT0_DUPLICATEWAKEUPEVENT_MASK (1 << 19)
264#define OMAP4_SDMMC1_CMD_DUPLICATEWAKEUPEVENT_SHIFT 18
265#define OMAP4_SDMMC1_CMD_DUPLICATEWAKEUPEVENT_MASK (1 << 18)
266#define OMAP4_SDMMC1_CLK_DUPLICATEWAKEUPEVENT_SHIFT 17
267#define OMAP4_SDMMC1_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 17)
268#define OMAP4_USBC1_ICUSB_DM_DUPLICATEWAKEUPEVENT_SHIFT 16
269#define OMAP4_USBC1_ICUSB_DM_DUPLICATEWAKEUPEVENT_MASK (1 << 16)
270#define OMAP4_USBC1_ICUSB_DP_DUPLICATEWAKEUPEVENT_SHIFT 15
271#define OMAP4_USBC1_ICUSB_DP_DUPLICATEWAKEUPEVENT_MASK (1 << 15)
272#define OMAP4_USBB1_HSIC_STROBE_DUPLICATEWAKEUPEVENT_SHIFT 14
273#define OMAP4_USBB1_HSIC_STROBE_DUPLICATEWAKEUPEVENT_MASK (1 << 14)
274#define OMAP4_USBB1_HSIC_DATA_DUPLICATEWAKEUPEVENT_SHIFT 13
275#define OMAP4_USBB1_HSIC_DATA_DUPLICATEWAKEUPEVENT_MASK (1 << 13)
276#define OMAP4_USBB1_ULPITLL_DAT7_DUPLICATEWAKEUPEVENT_SHIFT 12
277#define OMAP4_USBB1_ULPITLL_DAT7_DUPLICATEWAKEUPEVENT_MASK (1 << 12)
278#define OMAP4_USBB1_ULPITLL_DAT6_DUPLICATEWAKEUPEVENT_SHIFT 11
279#define OMAP4_USBB1_ULPITLL_DAT6_DUPLICATEWAKEUPEVENT_MASK (1 << 11)
280#define OMAP4_USBB1_ULPITLL_DAT5_DUPLICATEWAKEUPEVENT_SHIFT 10
281#define OMAP4_USBB1_ULPITLL_DAT5_DUPLICATEWAKEUPEVENT_MASK (1 << 10)
282#define OMAP4_USBB1_ULPITLL_DAT4_DUPLICATEWAKEUPEVENT_SHIFT 9
283#define OMAP4_USBB1_ULPITLL_DAT4_DUPLICATEWAKEUPEVENT_MASK (1 << 9)
284#define OMAP4_USBB1_ULPITLL_DAT3_DUPLICATEWAKEUPEVENT_SHIFT 8
285#define OMAP4_USBB1_ULPITLL_DAT3_DUPLICATEWAKEUPEVENT_MASK (1 << 8)
286#define OMAP4_USBB1_ULPITLL_DAT2_DUPLICATEWAKEUPEVENT_SHIFT 7
287#define OMAP4_USBB1_ULPITLL_DAT2_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
288#define OMAP4_USBB1_ULPITLL_DAT1_DUPLICATEWAKEUPEVENT_SHIFT 6
289#define OMAP4_USBB1_ULPITLL_DAT1_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
290#define OMAP4_USBB1_ULPITLL_DAT0_DUPLICATEWAKEUPEVENT_SHIFT 5
291#define OMAP4_USBB1_ULPITLL_DAT0_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
292#define OMAP4_USBB1_ULPITLL_NXT_DUPLICATEWAKEUPEVENT_SHIFT 4
293#define OMAP4_USBB1_ULPITLL_NXT_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
294#define OMAP4_USBB1_ULPITLL_DIR_DUPLICATEWAKEUPEVENT_SHIFT 3
295#define OMAP4_USBB1_ULPITLL_DIR_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
296#define OMAP4_USBB1_ULPITLL_STP_DUPLICATEWAKEUPEVENT_SHIFT 2
297#define OMAP4_USBB1_ULPITLL_STP_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
298#define OMAP4_USBB1_ULPITLL_CLK_DUPLICATEWAKEUPEVENT_SHIFT 1
299#define OMAP4_USBB1_ULPITLL_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
300#define OMAP4_CAM_GLOBALRESET_DUPLICATEWAKEUPEVENT_SHIFT 0
301#define OMAP4_CAM_GLOBALRESET_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
302
303/* PADCONF_WAKEUPEVENT_3 */
304#define OMAP4_MCSPI1_CS3_DUPLICATEWAKEUPEVENT_SHIFT 31
305#define OMAP4_MCSPI1_CS3_DUPLICATEWAKEUPEVENT_MASK (1 << 31)
306#define OMAP4_MCSPI1_CS2_DUPLICATEWAKEUPEVENT_SHIFT 30
307#define OMAP4_MCSPI1_CS2_DUPLICATEWAKEUPEVENT_MASK (1 << 30)
308#define OMAP4_MCSPI1_CS1_DUPLICATEWAKEUPEVENT_SHIFT 29
309#define OMAP4_MCSPI1_CS1_DUPLICATEWAKEUPEVENT_MASK (1 << 29)
310#define OMAP4_MCSPI1_CS0_DUPLICATEWAKEUPEVENT_SHIFT 28
311#define OMAP4_MCSPI1_CS0_DUPLICATEWAKEUPEVENT_MASK (1 << 28)
312#define OMAP4_MCSPI1_SIMO_DUPLICATEWAKEUPEVENT_SHIFT 27
313#define OMAP4_MCSPI1_SIMO_DUPLICATEWAKEUPEVENT_MASK (1 << 27)
314#define OMAP4_MCSPI1_SOMI_DUPLICATEWAKEUPEVENT_SHIFT 26
315#define OMAP4_MCSPI1_SOMI_DUPLICATEWAKEUPEVENT_MASK (1 << 26)
316#define OMAP4_MCSPI1_CLK_DUPLICATEWAKEUPEVENT_SHIFT 25
317#define OMAP4_MCSPI1_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 25)
318#define OMAP4_I2C4_SDA_DUPLICATEWAKEUPEVENT_SHIFT 24
319#define OMAP4_I2C4_SDA_DUPLICATEWAKEUPEVENT_MASK (1 << 24)
320#define OMAP4_I2C4_SCL_DUPLICATEWAKEUPEVENT_SHIFT 23
321#define OMAP4_I2C4_SCL_DUPLICATEWAKEUPEVENT_MASK (1 << 23)
322#define OMAP4_I2C3_SDA_DUPLICATEWAKEUPEVENT_SHIFT 22
323#define OMAP4_I2C3_SDA_DUPLICATEWAKEUPEVENT_MASK (1 << 22)
324#define OMAP4_I2C3_SCL_DUPLICATEWAKEUPEVENT_SHIFT 21
325#define OMAP4_I2C3_SCL_DUPLICATEWAKEUPEVENT_MASK (1 << 21)
326#define OMAP4_I2C2_SDA_DUPLICATEWAKEUPEVENT_SHIFT 20
327#define OMAP4_I2C2_SDA_DUPLICATEWAKEUPEVENT_MASK (1 << 20)
328#define OMAP4_I2C2_SCL_DUPLICATEWAKEUPEVENT_SHIFT 19
329#define OMAP4_I2C2_SCL_DUPLICATEWAKEUPEVENT_MASK (1 << 19)
330#define OMAP4_I2C1_SDA_DUPLICATEWAKEUPEVENT_SHIFT 18
331#define OMAP4_I2C1_SDA_DUPLICATEWAKEUPEVENT_MASK (1 << 18)
332#define OMAP4_I2C1_SCL_DUPLICATEWAKEUPEVENT_SHIFT 17
333#define OMAP4_I2C1_SCL_DUPLICATEWAKEUPEVENT_MASK (1 << 17)
334#define OMAP4_HDQ_SIO_DUPLICATEWAKEUPEVENT_SHIFT 16
335#define OMAP4_HDQ_SIO_DUPLICATEWAKEUPEVENT_MASK (1 << 16)
336#define OMAP4_UART2_TX_DUPLICATEWAKEUPEVENT_SHIFT 15
337#define OMAP4_UART2_TX_DUPLICATEWAKEUPEVENT_MASK (1 << 15)
338#define OMAP4_UART2_RX_DUPLICATEWAKEUPEVENT_SHIFT 14
339#define OMAP4_UART2_RX_DUPLICATEWAKEUPEVENT_MASK (1 << 14)
340#define OMAP4_UART2_RTS_DUPLICATEWAKEUPEVENT_SHIFT 13
341#define OMAP4_UART2_RTS_DUPLICATEWAKEUPEVENT_MASK (1 << 13)
342#define OMAP4_UART2_CTS_DUPLICATEWAKEUPEVENT_SHIFT 12
343#define OMAP4_UART2_CTS_DUPLICATEWAKEUPEVENT_MASK (1 << 12)
344#define OMAP4_ABE_DMIC_DIN3_DUPLICATEWAKEUPEVENT_SHIFT 11
345#define OMAP4_ABE_DMIC_DIN3_DUPLICATEWAKEUPEVENT_MASK (1 << 11)
346#define OMAP4_ABE_DMIC_DIN2_DUPLICATEWAKEUPEVENT_SHIFT 10
347#define OMAP4_ABE_DMIC_DIN2_DUPLICATEWAKEUPEVENT_MASK (1 << 10)
348#define OMAP4_ABE_DMIC_DIN1_DUPLICATEWAKEUPEVENT_SHIFT 9
349#define OMAP4_ABE_DMIC_DIN1_DUPLICATEWAKEUPEVENT_MASK (1 << 9)
350#define OMAP4_ABE_DMIC_CLK1_DUPLICATEWAKEUPEVENT_SHIFT 8
351#define OMAP4_ABE_DMIC_CLK1_DUPLICATEWAKEUPEVENT_MASK (1 << 8)
352#define OMAP4_ABE_CLKS_DUPLICATEWAKEUPEVENT_SHIFT 7
353#define OMAP4_ABE_CLKS_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
354#define OMAP4_ABE_PDM_LB_CLK_DUPLICATEWAKEUPEVENT_SHIFT 6
355#define OMAP4_ABE_PDM_LB_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
356#define OMAP4_ABE_PDM_FRAME_DUPLICATEWAKEUPEVENT_SHIFT 5
357#define OMAP4_ABE_PDM_FRAME_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
358#define OMAP4_ABE_PDM_DL_DATA_DUPLICATEWAKEUPEVENT_SHIFT 4
359#define OMAP4_ABE_PDM_DL_DATA_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
360#define OMAP4_ABE_PDM_UL_DATA_DUPLICATEWAKEUPEVENT_SHIFT 3
361#define OMAP4_ABE_PDM_UL_DATA_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
362#define OMAP4_ABE_MCBSP1_FSX_DUPLICATEWAKEUPEVENT_SHIFT 2
363#define OMAP4_ABE_MCBSP1_FSX_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
364#define OMAP4_ABE_MCBSP1_DX_DUPLICATEWAKEUPEVENT_SHIFT 1
365#define OMAP4_ABE_MCBSP1_DX_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
366#define OMAP4_ABE_MCBSP1_DR_DUPLICATEWAKEUPEVENT_SHIFT 0
367#define OMAP4_ABE_MCBSP1_DR_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
368
369/* PADCONF_WAKEUPEVENT_4 */
370#define OMAP4_UNIPRO_TY0_DUPLICATEWAKEUPEVENT_SHIFT 31
371#define OMAP4_UNIPRO_TY0_DUPLICATEWAKEUPEVENT_MASK (1 << 31)
372#define OMAP4_UNIPRO_TX0_DUPLICATEWAKEUPEVENT_SHIFT 30
373#define OMAP4_UNIPRO_TX0_DUPLICATEWAKEUPEVENT_MASK (1 << 30)
374#define OMAP4_USBB2_HSIC_STROBE_DUPLICATEWAKEUPEVENT_SHIFT 29
375#define OMAP4_USBB2_HSIC_STROBE_DUPLICATEWAKEUPEVENT_MASK (1 << 29)
376#define OMAP4_USBB2_HSIC_DATA_DUPLICATEWAKEUPEVENT_SHIFT 28
377#define OMAP4_USBB2_HSIC_DATA_DUPLICATEWAKEUPEVENT_MASK (1 << 28)
378#define OMAP4_USBB2_ULPITLL_DAT7_DUPLICATEWAKEUPEVENT_SHIFT 27
379#define OMAP4_USBB2_ULPITLL_DAT7_DUPLICATEWAKEUPEVENT_MASK (1 << 27)
380#define OMAP4_USBB2_ULPITLL_DAT6_DUPLICATEWAKEUPEVENT_SHIFT 26
381#define OMAP4_USBB2_ULPITLL_DAT6_DUPLICATEWAKEUPEVENT_MASK (1 << 26)
382#define OMAP4_USBB2_ULPITLL_DAT5_DUPLICATEWAKEUPEVENT_SHIFT 25
383#define OMAP4_USBB2_ULPITLL_DAT5_DUPLICATEWAKEUPEVENT_MASK (1 << 25)
384#define OMAP4_USBB2_ULPITLL_DAT4_DUPLICATEWAKEUPEVENT_SHIFT 24
385#define OMAP4_USBB2_ULPITLL_DAT4_DUPLICATEWAKEUPEVENT_MASK (1 << 24)
386#define OMAP4_USBB2_ULPITLL_DAT3_DUPLICATEWAKEUPEVENT_SHIFT 23
387#define OMAP4_USBB2_ULPITLL_DAT3_DUPLICATEWAKEUPEVENT_MASK (1 << 23)
388#define OMAP4_USBB2_ULPITLL_DAT2_DUPLICATEWAKEUPEVENT_SHIFT 22
389#define OMAP4_USBB2_ULPITLL_DAT2_DUPLICATEWAKEUPEVENT_MASK (1 << 22)
390#define OMAP4_USBB2_ULPITLL_DAT1_DUPLICATEWAKEUPEVENT_SHIFT 21
391#define OMAP4_USBB2_ULPITLL_DAT1_DUPLICATEWAKEUPEVENT_MASK (1 << 21)
392#define OMAP4_USBB2_ULPITLL_DAT0_DUPLICATEWAKEUPEVENT_SHIFT 20
393#define OMAP4_USBB2_ULPITLL_DAT0_DUPLICATEWAKEUPEVENT_MASK (1 << 20)
394#define OMAP4_USBB2_ULPITLL_NXT_DUPLICATEWAKEUPEVENT_SHIFT 19
395#define OMAP4_USBB2_ULPITLL_NXT_DUPLICATEWAKEUPEVENT_MASK (1 << 19)
396#define OMAP4_USBB2_ULPITLL_DIR_DUPLICATEWAKEUPEVENT_SHIFT 18
397#define OMAP4_USBB2_ULPITLL_DIR_DUPLICATEWAKEUPEVENT_MASK (1 << 18)
398#define OMAP4_USBB2_ULPITLL_STP_DUPLICATEWAKEUPEVENT_SHIFT 17
399#define OMAP4_USBB2_ULPITLL_STP_DUPLICATEWAKEUPEVENT_MASK (1 << 17)
400#define OMAP4_USBB2_ULPITLL_CLK_DUPLICATEWAKEUPEVENT_SHIFT 16
401#define OMAP4_USBB2_ULPITLL_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 16)
402#define OMAP4_UART4_TX_DUPLICATEWAKEUPEVENT_SHIFT 15
403#define OMAP4_UART4_TX_DUPLICATEWAKEUPEVENT_MASK (1 << 15)
404#define OMAP4_UART4_RX_DUPLICATEWAKEUPEVENT_SHIFT 14
405#define OMAP4_UART4_RX_DUPLICATEWAKEUPEVENT_MASK (1 << 14)
406#define OMAP4_MCSPI4_CS0_DUPLICATEWAKEUPEVENT_SHIFT 13
407#define OMAP4_MCSPI4_CS0_DUPLICATEWAKEUPEVENT_MASK (1 << 13)
408#define OMAP4_MCSPI4_SOMI_DUPLICATEWAKEUPEVENT_SHIFT 12
409#define OMAP4_MCSPI4_SOMI_DUPLICATEWAKEUPEVENT_MASK (1 << 12)
410#define OMAP4_MCSPI4_SIMO_DUPLICATEWAKEUPEVENT_SHIFT 11
411#define OMAP4_MCSPI4_SIMO_DUPLICATEWAKEUPEVENT_MASK (1 << 11)
412#define OMAP4_MCSPI4_CLK_DUPLICATEWAKEUPEVENT_SHIFT 10
413#define OMAP4_MCSPI4_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 10)
414#define OMAP4_SDMMC5_DAT3_DUPLICATEWAKEUPEVENT_SHIFT 9
415#define OMAP4_SDMMC5_DAT3_DUPLICATEWAKEUPEVENT_MASK (1 << 9)
416#define OMAP4_SDMMC5_DAT2_DUPLICATEWAKEUPEVENT_SHIFT 8
417#define OMAP4_SDMMC5_DAT2_DUPLICATEWAKEUPEVENT_MASK (1 << 8)
418#define OMAP4_SDMMC5_DAT1_DUPLICATEWAKEUPEVENT_SHIFT 7
419#define OMAP4_SDMMC5_DAT1_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
420#define OMAP4_SDMMC5_DAT0_DUPLICATEWAKEUPEVENT_SHIFT 6
421#define OMAP4_SDMMC5_DAT0_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
422#define OMAP4_SDMMC5_CMD_DUPLICATEWAKEUPEVENT_SHIFT 5
423#define OMAP4_SDMMC5_CMD_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
424#define OMAP4_SDMMC5_CLK_DUPLICATEWAKEUPEVENT_SHIFT 4
425#define OMAP4_SDMMC5_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
426#define OMAP4_UART3_TX_IRTX_DUPLICATEWAKEUPEVENT_SHIFT 3
427#define OMAP4_UART3_TX_IRTX_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
428#define OMAP4_UART3_RX_IRRX_DUPLICATEWAKEUPEVENT_SHIFT 2
429#define OMAP4_UART3_RX_IRRX_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
430#define OMAP4_UART3_RTS_SD_DUPLICATEWAKEUPEVENT_SHIFT 1
431#define OMAP4_UART3_RTS_SD_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
432#define OMAP4_UART3_CTS_RCTX_DUPLICATEWAKEUPEVENT_SHIFT 0
433#define OMAP4_UART3_CTS_RCTX_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
434
435/* PADCONF_WAKEUPEVENT_5 */
436#define OMAP4_DPM_EMU11_DUPLICATEWAKEUPEVENT_SHIFT 31
437#define OMAP4_DPM_EMU11_DUPLICATEWAKEUPEVENT_MASK (1 << 31)
438#define OMAP4_DPM_EMU10_DUPLICATEWAKEUPEVENT_SHIFT 30
439#define OMAP4_DPM_EMU10_DUPLICATEWAKEUPEVENT_MASK (1 << 30)
440#define OMAP4_DPM_EMU9_DUPLICATEWAKEUPEVENT_SHIFT 29
441#define OMAP4_DPM_EMU9_DUPLICATEWAKEUPEVENT_MASK (1 << 29)
442#define OMAP4_DPM_EMU8_DUPLICATEWAKEUPEVENT_SHIFT 28
443#define OMAP4_DPM_EMU8_DUPLICATEWAKEUPEVENT_MASK (1 << 28)
444#define OMAP4_DPM_EMU7_DUPLICATEWAKEUPEVENT_SHIFT 27
445#define OMAP4_DPM_EMU7_DUPLICATEWAKEUPEVENT_MASK (1 << 27)
446#define OMAP4_DPM_EMU6_DUPLICATEWAKEUPEVENT_SHIFT 26
447#define OMAP4_DPM_EMU6_DUPLICATEWAKEUPEVENT_MASK (1 << 26)
448#define OMAP4_DPM_EMU5_DUPLICATEWAKEUPEVENT_SHIFT 25
449#define OMAP4_DPM_EMU5_DUPLICATEWAKEUPEVENT_MASK (1 << 25)
450#define OMAP4_DPM_EMU4_DUPLICATEWAKEUPEVENT_SHIFT 24
451#define OMAP4_DPM_EMU4_DUPLICATEWAKEUPEVENT_MASK (1 << 24)
452#define OMAP4_DPM_EMU3_DUPLICATEWAKEUPEVENT_SHIFT 23
453#define OMAP4_DPM_EMU3_DUPLICATEWAKEUPEVENT_MASK (1 << 23)
454#define OMAP4_DPM_EMU2_DUPLICATEWAKEUPEVENT_SHIFT 22
455#define OMAP4_DPM_EMU2_DUPLICATEWAKEUPEVENT_MASK (1 << 22)
456#define OMAP4_DPM_EMU1_DUPLICATEWAKEUPEVENT_SHIFT 21
457#define OMAP4_DPM_EMU1_DUPLICATEWAKEUPEVENT_MASK (1 << 21)
458#define OMAP4_DPM_EMU0_DUPLICATEWAKEUPEVENT_SHIFT 20
459#define OMAP4_DPM_EMU0_DUPLICATEWAKEUPEVENT_MASK (1 << 20)
460#define OMAP4_SYS_BOOT5_DUPLICATEWAKEUPEVENT_SHIFT 19
461#define OMAP4_SYS_BOOT5_DUPLICATEWAKEUPEVENT_MASK (1 << 19)
462#define OMAP4_SYS_BOOT4_DUPLICATEWAKEUPEVENT_SHIFT 18
463#define OMAP4_SYS_BOOT4_DUPLICATEWAKEUPEVENT_MASK (1 << 18)
464#define OMAP4_SYS_BOOT3_DUPLICATEWAKEUPEVENT_SHIFT 17
465#define OMAP4_SYS_BOOT3_DUPLICATEWAKEUPEVENT_MASK (1 << 17)
466#define OMAP4_SYS_BOOT2_DUPLICATEWAKEUPEVENT_SHIFT 16
467#define OMAP4_SYS_BOOT2_DUPLICATEWAKEUPEVENT_MASK (1 << 16)
468#define OMAP4_SYS_BOOT1_DUPLICATEWAKEUPEVENT_SHIFT 15
469#define OMAP4_SYS_BOOT1_DUPLICATEWAKEUPEVENT_MASK (1 << 15)
470#define OMAP4_SYS_BOOT0_DUPLICATEWAKEUPEVENT_SHIFT 14
471#define OMAP4_SYS_BOOT0_DUPLICATEWAKEUPEVENT_MASK (1 << 14)
472#define OMAP4_SYS_NIRQ2_DUPLICATEWAKEUPEVENT_SHIFT 13
473#define OMAP4_SYS_NIRQ2_DUPLICATEWAKEUPEVENT_MASK (1 << 13)
474#define OMAP4_SYS_NIRQ1_DUPLICATEWAKEUPEVENT_SHIFT 12
475#define OMAP4_SYS_NIRQ1_DUPLICATEWAKEUPEVENT_MASK (1 << 12)
476#define OMAP4_FREF_CLK2_OUT_DUPLICATEWAKEUPEVENT_SHIFT 11
477#define OMAP4_FREF_CLK2_OUT_DUPLICATEWAKEUPEVENT_MASK (1 << 11)
478#define OMAP4_FREF_CLK1_OUT_DUPLICATEWAKEUPEVENT_SHIFT 10
479#define OMAP4_FREF_CLK1_OUT_DUPLICATEWAKEUPEVENT_MASK (1 << 10)
480#define OMAP4_UNIPRO_RY2_DUPLICATEWAKEUPEVENT_SHIFT 9
481#define OMAP4_UNIPRO_RY2_DUPLICATEWAKEUPEVENT_MASK (1 << 9)
482#define OMAP4_UNIPRO_RX2_DUPLICATEWAKEUPEVENT_SHIFT 8
483#define OMAP4_UNIPRO_RX2_DUPLICATEWAKEUPEVENT_MASK (1 << 8)
484#define OMAP4_UNIPRO_RY1_DUPLICATEWAKEUPEVENT_SHIFT 7
485#define OMAP4_UNIPRO_RY1_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
486#define OMAP4_UNIPRO_RX1_DUPLICATEWAKEUPEVENT_SHIFT 6
487#define OMAP4_UNIPRO_RX1_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
488#define OMAP4_UNIPRO_RY0_DUPLICATEWAKEUPEVENT_SHIFT 5
489#define OMAP4_UNIPRO_RY0_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
490#define OMAP4_UNIPRO_RX0_DUPLICATEWAKEUPEVENT_SHIFT 4
491#define OMAP4_UNIPRO_RX0_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
492#define OMAP4_UNIPRO_TY2_DUPLICATEWAKEUPEVENT_SHIFT 3
493#define OMAP4_UNIPRO_TY2_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
494#define OMAP4_UNIPRO_TX2_DUPLICATEWAKEUPEVENT_SHIFT 2
495#define OMAP4_UNIPRO_TX2_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
496#define OMAP4_UNIPRO_TY1_DUPLICATEWAKEUPEVENT_SHIFT 1
497#define OMAP4_UNIPRO_TY1_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
498#define OMAP4_UNIPRO_TX1_DUPLICATEWAKEUPEVENT_SHIFT 0
499#define OMAP4_UNIPRO_TX1_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
500
501/* PADCONF_WAKEUPEVENT_6 */
502#define OMAP4_DPM_EMU19_DUPLICATEWAKEUPEVENT_SHIFT 7
503#define OMAP4_DPM_EMU19_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
504#define OMAP4_DPM_EMU18_DUPLICATEWAKEUPEVENT_SHIFT 6
505#define OMAP4_DPM_EMU18_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
506#define OMAP4_DPM_EMU17_DUPLICATEWAKEUPEVENT_SHIFT 5
507#define OMAP4_DPM_EMU17_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
508#define OMAP4_DPM_EMU16_DUPLICATEWAKEUPEVENT_SHIFT 4
509#define OMAP4_DPM_EMU16_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
510#define OMAP4_DPM_EMU15_DUPLICATEWAKEUPEVENT_SHIFT 3
511#define OMAP4_DPM_EMU15_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
512#define OMAP4_DPM_EMU14_DUPLICATEWAKEUPEVENT_SHIFT 2
513#define OMAP4_DPM_EMU14_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
514#define OMAP4_DPM_EMU13_DUPLICATEWAKEUPEVENT_SHIFT 1
515#define OMAP4_DPM_EMU13_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
516#define OMAP4_DPM_EMU12_DUPLICATEWAKEUPEVENT_SHIFT 0
517#define OMAP4_DPM_EMU12_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
518
519/* CONTROL_PADCONF_GLOBAL */
520#define OMAP4_FORCE_OFFMODE_EN_SHIFT 31
521#define OMAP4_FORCE_OFFMODE_EN_MASK (1 << 31)
522
523/* CONTROL_PADCONF_MODE */
524#define OMAP4_VDDS_DV_BANK0_SHIFT 31
525#define OMAP4_VDDS_DV_BANK0_MASK (1 << 31)
526#define OMAP4_VDDS_DV_BANK1_SHIFT 30
527#define OMAP4_VDDS_DV_BANK1_MASK (1 << 30)
528#define OMAP4_VDDS_DV_BANK3_SHIFT 29
529#define OMAP4_VDDS_DV_BANK3_MASK (1 << 29)
530#define OMAP4_VDDS_DV_BANK4_SHIFT 28
531#define OMAP4_VDDS_DV_BANK4_MASK (1 << 28)
532#define OMAP4_VDDS_DV_BANK5_SHIFT 27
533#define OMAP4_VDDS_DV_BANK5_MASK (1 << 27)
534#define OMAP4_VDDS_DV_BANK6_SHIFT 26
535#define OMAP4_VDDS_DV_BANK6_MASK (1 << 26)
536#define OMAP4_VDDS_DV_C2C_SHIFT 25
537#define OMAP4_VDDS_DV_C2C_MASK (1 << 25)
538#define OMAP4_VDDS_DV_CAM_SHIFT 24
539#define OMAP4_VDDS_DV_CAM_MASK (1 << 24)
540#define OMAP4_VDDS_DV_GPMC_SHIFT 23
541#define OMAP4_VDDS_DV_GPMC_MASK (1 << 23)
542#define OMAP4_VDDS_DV_SDMMC2_SHIFT 22
543#define OMAP4_VDDS_DV_SDMMC2_MASK (1 << 22)
544
545/* CONTROL_SMART1IO_PADCONF_0 */
546#define OMAP4_ABE_DR0_SC_SHIFT 30
547#define OMAP4_ABE_DR0_SC_MASK (0x3 << 30)
548#define OMAP4_CAM_DR0_SC_SHIFT 28
549#define OMAP4_CAM_DR0_SC_MASK (0x3 << 28)
550#define OMAP4_FREF_DR2_SC_SHIFT 26
551#define OMAP4_FREF_DR2_SC_MASK (0x3 << 26)
552#define OMAP4_FREF_DR3_SC_SHIFT 24
553#define OMAP4_FREF_DR3_SC_MASK (0x3 << 24)
554#define OMAP4_GPIO_DR8_SC_SHIFT 22
555#define OMAP4_GPIO_DR8_SC_MASK (0x3 << 22)
556#define OMAP4_GPIO_DR9_SC_SHIFT 20
557#define OMAP4_GPIO_DR9_SC_MASK (0x3 << 20)
558#define OMAP4_GPMC_DR2_SC_SHIFT 18
559#define OMAP4_GPMC_DR2_SC_MASK (0x3 << 18)
560#define OMAP4_GPMC_DR3_SC_SHIFT 16
561#define OMAP4_GPMC_DR3_SC_MASK (0x3 << 16)
562#define OMAP4_GPMC_DR6_SC_SHIFT 14
563#define OMAP4_GPMC_DR6_SC_MASK (0x3 << 14)
564#define OMAP4_HDMI_DR0_SC_SHIFT 12
565#define OMAP4_HDMI_DR0_SC_MASK (0x3 << 12)
566#define OMAP4_MCSPI1_DR0_SC_SHIFT 10
567#define OMAP4_MCSPI1_DR0_SC_MASK (0x3 << 10)
568#define OMAP4_UART1_DR0_SC_SHIFT 8
569#define OMAP4_UART1_DR0_SC_MASK (0x3 << 8)
570#define OMAP4_UART3_DR0_SC_SHIFT 6
571#define OMAP4_UART3_DR0_SC_MASK (0x3 << 6)
572#define OMAP4_UART3_DR1_SC_SHIFT 4
573#define OMAP4_UART3_DR1_SC_MASK (0x3 << 4)
574#define OMAP4_UNIPRO_DR0_SC_SHIFT 2
575#define OMAP4_UNIPRO_DR0_SC_MASK (0x3 << 2)
576#define OMAP4_UNIPRO_DR1_SC_SHIFT 0
577#define OMAP4_UNIPRO_DR1_SC_MASK (0x3 << 0)
578
579/* CONTROL_SMART1IO_PADCONF_1 */
580#define OMAP4_ABE_DR0_LB_SHIFT 30
581#define OMAP4_ABE_DR0_LB_MASK (0x3 << 30)
582#define OMAP4_CAM_DR0_LB_SHIFT 28
583#define OMAP4_CAM_DR0_LB_MASK (0x3 << 28)
584#define OMAP4_FREF_DR2_LB_SHIFT 26
585#define OMAP4_FREF_DR2_LB_MASK (0x3 << 26)
586#define OMAP4_FREF_DR3_LB_SHIFT 24
587#define OMAP4_FREF_DR3_LB_MASK (0x3 << 24)
588#define OMAP4_GPIO_DR8_LB_SHIFT 22
589#define OMAP4_GPIO_DR8_LB_MASK (0x3 << 22)
590#define OMAP4_GPIO_DR9_LB_SHIFT 20
591#define OMAP4_GPIO_DR9_LB_MASK (0x3 << 20)
592#define OMAP4_GPMC_DR2_LB_SHIFT 18
593#define OMAP4_GPMC_DR2_LB_MASK (0x3 << 18)
594#define OMAP4_GPMC_DR3_LB_SHIFT 16
595#define OMAP4_GPMC_DR3_LB_MASK (0x3 << 16)
596#define OMAP4_GPMC_DR6_LB_SHIFT 14
597#define OMAP4_GPMC_DR6_LB_MASK (0x3 << 14)
598#define OMAP4_HDMI_DR0_LB_SHIFT 12
599#define OMAP4_HDMI_DR0_LB_MASK (0x3 << 12)
600#define OMAP4_MCSPI1_DR0_LB_SHIFT 10
601#define OMAP4_MCSPI1_DR0_LB_MASK (0x3 << 10)
602#define OMAP4_UART1_DR0_LB_SHIFT 8
603#define OMAP4_UART1_DR0_LB_MASK (0x3 << 8)
604#define OMAP4_UART3_DR0_LB_SHIFT 6
605#define OMAP4_UART3_DR0_LB_MASK (0x3 << 6)
606#define OMAP4_UART3_DR1_LB_SHIFT 4
607#define OMAP4_UART3_DR1_LB_MASK (0x3 << 4)
608#define OMAP4_UNIPRO_DR0_LB_SHIFT 2
609#define OMAP4_UNIPRO_DR0_LB_MASK (0x3 << 2)
610#define OMAP4_UNIPRO_DR1_LB_SHIFT 0
611#define OMAP4_UNIPRO_DR1_LB_MASK (0x3 << 0)
612
613/* CONTROL_SMART2IO_PADCONF_0 */
614#define OMAP4_C2C_DR0_LB_SHIFT 31
615#define OMAP4_C2C_DR0_LB_MASK (1 << 31)
616#define OMAP4_DPM_DR1_LB_SHIFT 30
617#define OMAP4_DPM_DR1_LB_MASK (1 << 30)
618#define OMAP4_DPM_DR2_LB_SHIFT 29
619#define OMAP4_DPM_DR2_LB_MASK (1 << 29)
620#define OMAP4_DPM_DR3_LB_SHIFT 28
621#define OMAP4_DPM_DR3_LB_MASK (1 << 28)
622#define OMAP4_GPIO_DR0_LB_SHIFT 27
623#define OMAP4_GPIO_DR0_LB_MASK (1 << 27)
624#define OMAP4_GPIO_DR1_LB_SHIFT 26
625#define OMAP4_GPIO_DR1_LB_MASK (1 << 26)
626#define OMAP4_GPIO_DR10_LB_SHIFT 25
627#define OMAP4_GPIO_DR10_LB_MASK (1 << 25)
628#define OMAP4_GPIO_DR2_LB_SHIFT 24
629#define OMAP4_GPIO_DR2_LB_MASK (1 << 24)
630#define OMAP4_GPMC_DR0_LB_SHIFT 23
631#define OMAP4_GPMC_DR0_LB_MASK (1 << 23)
632#define OMAP4_GPMC_DR1_LB_SHIFT 22
633#define OMAP4_GPMC_DR1_LB_MASK (1 << 22)
634#define OMAP4_GPMC_DR4_LB_SHIFT 21
635#define OMAP4_GPMC_DR4_LB_MASK (1 << 21)
636#define OMAP4_GPMC_DR5_LB_SHIFT 20
637#define OMAP4_GPMC_DR5_LB_MASK (1 << 20)
638#define OMAP4_GPMC_DR7_LB_SHIFT 19
639#define OMAP4_GPMC_DR7_LB_MASK (1 << 19)
640#define OMAP4_HSI2_DR0_LB_SHIFT 18
641#define OMAP4_HSI2_DR0_LB_MASK (1 << 18)
642#define OMAP4_HSI2_DR1_LB_SHIFT 17
643#define OMAP4_HSI2_DR1_LB_MASK (1 << 17)
644#define OMAP4_HSI2_DR2_LB_SHIFT 16
645#define OMAP4_HSI2_DR2_LB_MASK (1 << 16)
646#define OMAP4_KPD_DR0_LB_SHIFT 15
647#define OMAP4_KPD_DR0_LB_MASK (1 << 15)
648#define OMAP4_KPD_DR1_LB_SHIFT 14
649#define OMAP4_KPD_DR1_LB_MASK (1 << 14)
650#define OMAP4_PDM_DR0_LB_SHIFT 13
651#define OMAP4_PDM_DR0_LB_MASK (1 << 13)
652#define OMAP4_SDMMC2_DR0_LB_SHIFT 12
653#define OMAP4_SDMMC2_DR0_LB_MASK (1 << 12)
654#define OMAP4_SDMMC3_DR0_LB_SHIFT 11
655#define OMAP4_SDMMC3_DR0_LB_MASK (1 << 11)
656#define OMAP4_SDMMC4_DR0_LB_SHIFT 10
657#define OMAP4_SDMMC4_DR0_LB_MASK (1 << 10)
658#define OMAP4_SDMMC4_DR1_LB_SHIFT 9
659#define OMAP4_SDMMC4_DR1_LB_MASK (1 << 9)
660#define OMAP4_SPI3_DR0_LB_SHIFT 8
661#define OMAP4_SPI3_DR0_LB_MASK (1 << 8)
662#define OMAP4_SPI3_DR1_LB_SHIFT 7
663#define OMAP4_SPI3_DR1_LB_MASK (1 << 7)
664#define OMAP4_UART3_DR2_LB_SHIFT 6
665#define OMAP4_UART3_DR2_LB_MASK (1 << 6)
666#define OMAP4_UART3_DR3_LB_SHIFT 5
667#define OMAP4_UART3_DR3_LB_MASK (1 << 5)
668#define OMAP4_UART3_DR4_LB_SHIFT 4
669#define OMAP4_UART3_DR4_LB_MASK (1 << 4)
670#define OMAP4_UART3_DR5_LB_SHIFT 3
671#define OMAP4_UART3_DR5_LB_MASK (1 << 3)
672#define OMAP4_USBA0_DR1_LB_SHIFT 2
673#define OMAP4_USBA0_DR1_LB_MASK (1 << 2)
674#define OMAP4_USBA_DR2_LB_SHIFT 1
675#define OMAP4_USBA_DR2_LB_MASK (1 << 1)
676
677/* CONTROL_SMART2IO_PADCONF_1 */
678#define OMAP4_USBB1_DR0_LB_SHIFT 31
679#define OMAP4_USBB1_DR0_LB_MASK (1 << 31)
680#define OMAP4_USBB2_DR0_LB_SHIFT 30
681#define OMAP4_USBB2_DR0_LB_MASK (1 << 30)
682#define OMAP4_USBA0_DR0_LB_SHIFT 29
683#define OMAP4_USBA0_DR0_LB_MASK (1 << 29)
684
685/* CONTROL_SMART3IO_PADCONF_0 */
686#define OMAP4_DMIC_DR0_MB_SHIFT 30
687#define OMAP4_DMIC_DR0_MB_MASK (0x3 << 30)
688#define OMAP4_GPIO_DR3_MB_SHIFT 28
689#define OMAP4_GPIO_DR3_MB_MASK (0x3 << 28)
690#define OMAP4_GPIO_DR4_MB_SHIFT 26
691#define OMAP4_GPIO_DR4_MB_MASK (0x3 << 26)
692#define OMAP4_GPIO_DR5_MB_SHIFT 24
693#define OMAP4_GPIO_DR5_MB_MASK (0x3 << 24)
694#define OMAP4_GPIO_DR6_MB_SHIFT 22
695#define OMAP4_GPIO_DR6_MB_MASK (0x3 << 22)
696#define OMAP4_HSI_DR1_MB_SHIFT 20
697#define OMAP4_HSI_DR1_MB_MASK (0x3 << 20)
698#define OMAP4_HSI_DR2_MB_SHIFT 18
699#define OMAP4_HSI_DR2_MB_MASK (0x3 << 18)
700#define OMAP4_HSI_DR3_MB_SHIFT 16
701#define OMAP4_HSI_DR3_MB_MASK (0x3 << 16)
702#define OMAP4_MCBSP2_DR0_MB_SHIFT 14
703#define OMAP4_MCBSP2_DR0_MB_MASK (0x3 << 14)
704#define OMAP4_MCSPI4_DR0_MB_SHIFT 12
705#define OMAP4_MCSPI4_DR0_MB_MASK (0x3 << 12)
706#define OMAP4_MCSPI4_DR1_MB_SHIFT 10
707#define OMAP4_MCSPI4_DR1_MB_MASK (0x3 << 10)
708#define OMAP4_SDMMC3_DR0_MB_SHIFT 8
709#define OMAP4_SDMMC3_DR0_MB_MASK (0x3 << 8)
710#define OMAP4_SPI2_DR0_MB_SHIFT 0
711#define OMAP4_SPI2_DR0_MB_MASK (0x3 << 0)
712
713/* CONTROL_SMART3IO_PADCONF_1 */
714#define OMAP4_SPI2_DR1_MB_SHIFT 30
715#define OMAP4_SPI2_DR1_MB_MASK (0x3 << 30)
716#define OMAP4_SPI2_DR2_MB_SHIFT 28
717#define OMAP4_SPI2_DR2_MB_MASK (0x3 << 28)
718#define OMAP4_UART2_DR0_MB_SHIFT 26
719#define OMAP4_UART2_DR0_MB_MASK (0x3 << 26)
720#define OMAP4_UART2_DR1_MB_SHIFT 24
721#define OMAP4_UART2_DR1_MB_MASK (0x3 << 24)
722#define OMAP4_UART4_DR0_MB_SHIFT 22
723#define OMAP4_UART4_DR0_MB_MASK (0x3 << 22)
724#define OMAP4_HSI_DR0_MB_SHIFT 20
725#define OMAP4_HSI_DR0_MB_MASK (0x3 << 20)
726
727/* CONTROL_SMART3IO_PADCONF_2 */
728#define OMAP4_DMIC_DR0_LB_SHIFT 31
729#define OMAP4_DMIC_DR0_LB_MASK (1 << 31)
730#define OMAP4_GPIO_DR3_LB_SHIFT 30
731#define OMAP4_GPIO_DR3_LB_MASK (1 << 30)
732#define OMAP4_GPIO_DR4_LB_SHIFT 29
733#define OMAP4_GPIO_DR4_LB_MASK (1 << 29)
734#define OMAP4_GPIO_DR5_LB_SHIFT 28
735#define OMAP4_GPIO_DR5_LB_MASK (1 << 28)
736#define OMAP4_GPIO_DR6_LB_SHIFT 27
737#define OMAP4_GPIO_DR6_LB_MASK (1 << 27)
738#define OMAP4_HSI_DR1_LB_SHIFT 26
739#define OMAP4_HSI_DR1_LB_MASK (1 << 26)
740#define OMAP4_HSI_DR2_LB_SHIFT 25
741#define OMAP4_HSI_DR2_LB_MASK (1 << 25)
742#define OMAP4_HSI_DR3_LB_SHIFT 24
743#define OMAP4_HSI_DR3_LB_MASK (1 << 24)
744#define OMAP4_MCBSP2_DR0_LB_SHIFT 23
745#define OMAP4_MCBSP2_DR0_LB_MASK (1 << 23)
746#define OMAP4_MCSPI4_DR0_LB_SHIFT 22
747#define OMAP4_MCSPI4_DR0_LB_MASK (1 << 22)
748#define OMAP4_MCSPI4_DR1_LB_SHIFT 21
749#define OMAP4_MCSPI4_DR1_LB_MASK (1 << 21)
750#define OMAP4_SLIMBUS2_DR0_LB_SHIFT 18
751#define OMAP4_SLIMBUS2_DR0_LB_MASK (1 << 18)
752#define OMAP4_SPI2_DR0_LB_SHIFT 16
753#define OMAP4_SPI2_DR0_LB_MASK (1 << 16)
754#define OMAP4_SPI2_DR1_LB_SHIFT 15
755#define OMAP4_SPI2_DR1_LB_MASK (1 << 15)
756#define OMAP4_SPI2_DR2_LB_SHIFT 14
757#define OMAP4_SPI2_DR2_LB_MASK (1 << 14)
758#define OMAP4_UART2_DR0_LB_SHIFT 13
759#define OMAP4_UART2_DR0_LB_MASK (1 << 13)
760#define OMAP4_UART2_DR1_LB_SHIFT 12
761#define OMAP4_UART2_DR1_LB_MASK (1 << 12)
762#define OMAP4_UART4_DR0_LB_SHIFT 11
763#define OMAP4_UART4_DR0_LB_MASK (1 << 11)
764#define OMAP4_HSI_DR0_LB_SHIFT 10
765#define OMAP4_HSI_DR0_LB_MASK (1 << 10)
766
767/* CONTROL_USBB_HSIC */
768#define OMAP4_USBB2_DR1_SR_SHIFT 30
769#define OMAP4_USBB2_DR1_SR_MASK (0x3 << 30)
770#define OMAP4_USBB2_DR1_I_SHIFT 27
771#define OMAP4_USBB2_DR1_I_MASK (0x7 << 27)
772#define OMAP4_USBB1_DR1_SR_SHIFT 25
773#define OMAP4_USBB1_DR1_SR_MASK (0x3 << 25)
774#define OMAP4_USBB1_DR1_I_SHIFT 22
775#define OMAP4_USBB1_DR1_I_MASK (0x7 << 22)
776#define OMAP4_USBB1_HSIC_DATA_WD_SHIFT 20
777#define OMAP4_USBB1_HSIC_DATA_WD_MASK (0x3 << 20)
778#define OMAP4_USBB1_HSIC_STROBE_WD_SHIFT 18
779#define OMAP4_USBB1_HSIC_STROBE_WD_MASK (0x3 << 18)
780#define OMAP4_USBB2_HSIC_DATA_WD_SHIFT 16
781#define OMAP4_USBB2_HSIC_DATA_WD_MASK (0x3 << 16)
782#define OMAP4_USBB2_HSIC_STROBE_WD_SHIFT 14
783#define OMAP4_USBB2_HSIC_STROBE_WD_MASK (0x3 << 14)
784#define OMAP4_USBB1_HSIC_DATA_OFFMODE_WD_ENABLE_SHIFT 13
785#define OMAP4_USBB1_HSIC_DATA_OFFMODE_WD_ENABLE_MASK (1 << 13)
786#define OMAP4_USBB1_HSIC_DATA_OFFMODE_WD_SHIFT 11
787#define OMAP4_USBB1_HSIC_DATA_OFFMODE_WD_MASK (0x3 << 11)
788#define OMAP4_USBB1_HSIC_STROBE_OFFMODE_WD_ENABLE_SHIFT 10
789#define OMAP4_USBB1_HSIC_STROBE_OFFMODE_WD_ENABLE_MASK (1 << 10)
790#define OMAP4_USBB1_HSIC_STROBE_OFFMODE_WD_SHIFT 8
791#define OMAP4_USBB1_HSIC_STROBE_OFFMODE_WD_MASK (0x3 << 8)
792#define OMAP4_USBB2_HSIC_DATA_OFFMODE_WD_ENABLE_SHIFT 7
793#define OMAP4_USBB2_HSIC_DATA_OFFMODE_WD_ENABLE_MASK (1 << 7)
794#define OMAP4_USBB2_HSIC_DATA_OFFMODE_WD_SHIFT 5
795#define OMAP4_USBB2_HSIC_DATA_OFFMODE_WD_MASK (0x3 << 5)
796#define OMAP4_USBB2_HSIC_STROBE_OFFMODE_WD_ENABLE_SHIFT 4
797#define OMAP4_USBB2_HSIC_STROBE_OFFMODE_WD_ENABLE_MASK (1 << 4)
798#define OMAP4_USBB2_HSIC_STROBE_OFFMODE_WD_SHIFT 2
799#define OMAP4_USBB2_HSIC_STROBE_OFFMODE_WD_MASK (0x3 << 2)
800
801/* CONTROL_SLIMBUS */
802#define OMAP4_SLIMBUS1_DR0_MB_SHIFT 30
803#define OMAP4_SLIMBUS1_DR0_MB_MASK (0x3 << 30)
804#define OMAP4_SLIMBUS1_DR1_MB_SHIFT 28
805#define OMAP4_SLIMBUS1_DR1_MB_MASK (0x3 << 28)
806#define OMAP4_SLIMBUS2_DR0_MB_SHIFT 26
807#define OMAP4_SLIMBUS2_DR0_MB_MASK (0x3 << 26)
808#define OMAP4_SLIMBUS2_DR1_MB_SHIFT 24
809#define OMAP4_SLIMBUS2_DR1_MB_MASK (0x3 << 24)
810#define OMAP4_SLIMBUS2_DR2_MB_SHIFT 22
811#define OMAP4_SLIMBUS2_DR2_MB_MASK (0x3 << 22)
812#define OMAP4_SLIMBUS2_DR3_MB_SHIFT 20
813#define OMAP4_SLIMBUS2_DR3_MB_MASK (0x3 << 20)
814#define OMAP4_SLIMBUS1_DR0_LB_SHIFT 19
815#define OMAP4_SLIMBUS1_DR0_LB_MASK (1 << 19)
816#define OMAP4_SLIMBUS2_DR1_LB_SHIFT 18
817#define OMAP4_SLIMBUS2_DR1_LB_MASK (1 << 18)
818
819/* CONTROL_PBIASLITE */
820#define OMAP4_USIM_PBIASLITE_HIZ_MODE_SHIFT 31
821#define OMAP4_USIM_PBIASLITE_HIZ_MODE_MASK (1 << 31)
822#define OMAP4_USIM_PBIASLITE_SUPPLY_HI_OUT_SHIFT 30
823#define OMAP4_USIM_PBIASLITE_SUPPLY_HI_OUT_MASK (1 << 30)
824#define OMAP4_USIM_PBIASLITE_VMODE_ERROR_SHIFT 29
825#define OMAP4_USIM_PBIASLITE_VMODE_ERROR_MASK (1 << 29)
826#define OMAP4_USIM_PBIASLITE_PWRDNZ_SHIFT 28
827#define OMAP4_USIM_PBIASLITE_PWRDNZ_MASK (1 << 28)
828#define OMAP4_USIM_PBIASLITE_VMODE_SHIFT 27
829#define OMAP4_USIM_PBIASLITE_VMODE_MASK (1 << 27)
830#define OMAP4_MMC1_PWRDNZ_SHIFT 26
831#define OMAP4_MMC1_PWRDNZ_MASK (1 << 26)
832#define OMAP4_MMC1_PBIASLITE_HIZ_MODE_SHIFT 25
833#define OMAP4_MMC1_PBIASLITE_HIZ_MODE_MASK (1 << 25)
834#define OMAP4_MMC1_PBIASLITE_SUPPLY_HI_OUT_SHIFT 24
835#define OMAP4_MMC1_PBIASLITE_SUPPLY_HI_OUT_MASK (1 << 24)
836#define OMAP4_MMC1_PBIASLITE_VMODE_ERROR_SHIFT 23
837#define OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK (1 << 23)
838#define OMAP4_MMC1_PBIASLITE_PWRDNZ_SHIFT 22
839#define OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK (1 << 22)
840#define OMAP4_MMC1_PBIASLITE_VMODE_SHIFT 21
841#define OMAP4_MMC1_PBIASLITE_VMODE_MASK (1 << 21)
842#define OMAP4_USBC1_ICUSB_PWRDNZ_SHIFT 20
843#define OMAP4_USBC1_ICUSB_PWRDNZ_MASK (1 << 20)
844
845/* CONTROL_I2C_0 */
846#define OMAP4_I2C4_SDA_GLFENB_SHIFT 31
847#define OMAP4_I2C4_SDA_GLFENB_MASK (1 << 31)
848#define OMAP4_I2C4_SDA_LOAD_BITS_SHIFT 29
849#define OMAP4_I2C4_SDA_LOAD_BITS_MASK (0x3 << 29)
850#define OMAP4_I2C4_SDA_PULLUPRESX_SHIFT 28
851#define OMAP4_I2C4_SDA_PULLUPRESX_MASK (1 << 28)
852#define OMAP4_I2C3_SDA_GLFENB_SHIFT 27
853#define OMAP4_I2C3_SDA_GLFENB_MASK (1 << 27)
854#define OMAP4_I2C3_SDA_LOAD_BITS_SHIFT 25
855#define OMAP4_I2C3_SDA_LOAD_BITS_MASK (0x3 << 25)
856#define OMAP4_I2C3_SDA_PULLUPRESX_SHIFT 24
857#define OMAP4_I2C3_SDA_PULLUPRESX_MASK (1 << 24)
858#define OMAP4_I2C2_SDA_GLFENB_SHIFT 23
859#define OMAP4_I2C2_SDA_GLFENB_MASK (1 << 23)
860#define OMAP4_I2C2_SDA_LOAD_BITS_SHIFT 21
861#define OMAP4_I2C2_SDA_LOAD_BITS_MASK (0x3 << 21)
862#define OMAP4_I2C2_SDA_PULLUPRESX_SHIFT 20
863#define OMAP4_I2C2_SDA_PULLUPRESX_MASK (1 << 20)
864#define OMAP4_I2C1_SDA_GLFENB_SHIFT 19
865#define OMAP4_I2C1_SDA_GLFENB_MASK (1 << 19)
866#define OMAP4_I2C1_SDA_LOAD_BITS_SHIFT 17
867#define OMAP4_I2C1_SDA_LOAD_BITS_MASK (0x3 << 17)
868#define OMAP4_I2C1_SDA_PULLUPRESX_SHIFT 16
869#define OMAP4_I2C1_SDA_PULLUPRESX_MASK (1 << 16)
870#define OMAP4_I2C4_SCL_GLFENB_SHIFT 15
871#define OMAP4_I2C4_SCL_GLFENB_MASK (1 << 15)
872#define OMAP4_I2C4_SCL_LOAD_BITS_SHIFT 13
873#define OMAP4_I2C4_SCL_LOAD_BITS_MASK (0x3 << 13)
874#define OMAP4_I2C4_SCL_PULLUPRESX_SHIFT 12
875#define OMAP4_I2C4_SCL_PULLUPRESX_MASK (1 << 12)
876#define OMAP4_I2C3_SCL_GLFENB_SHIFT 11
877#define OMAP4_I2C3_SCL_GLFENB_MASK (1 << 11)
878#define OMAP4_I2C3_SCL_LOAD_BITS_SHIFT 9
879#define OMAP4_I2C3_SCL_LOAD_BITS_MASK (0x3 << 9)
880#define OMAP4_I2C3_SCL_PULLUPRESX_SHIFT 8
881#define OMAP4_I2C3_SCL_PULLUPRESX_MASK (1 << 8)
882#define OMAP4_I2C2_SCL_GLFENB_SHIFT 7
883#define OMAP4_I2C2_SCL_GLFENB_MASK (1 << 7)
884#define OMAP4_I2C2_SCL_LOAD_BITS_SHIFT 5
885#define OMAP4_I2C2_SCL_LOAD_BITS_MASK (0x3 << 5)
886#define OMAP4_I2C2_SCL_PULLUPRESX_SHIFT 4
887#define OMAP4_I2C2_SCL_PULLUPRESX_MASK (1 << 4)
888#define OMAP4_I2C1_SCL_GLFENB_SHIFT 3
889#define OMAP4_I2C1_SCL_GLFENB_MASK (1 << 3)
890#define OMAP4_I2C1_SCL_LOAD_BITS_SHIFT 1
891#define OMAP4_I2C1_SCL_LOAD_BITS_MASK (0x3 << 1)
892#define OMAP4_I2C1_SCL_PULLUPRESX_SHIFT 0
893#define OMAP4_I2C1_SCL_PULLUPRESX_MASK (1 << 0)
894
895/* CONTROL_CAMERA_RX */
896#define OMAP4_CAMERARX_UNIPRO_CTRLCLKEN_SHIFT 31
897#define OMAP4_CAMERARX_UNIPRO_CTRLCLKEN_MASK (1 << 31)
898#define OMAP4_CAMERARX_CSI22_LANEENABLE_SHIFT 29
899#define OMAP4_CAMERARX_CSI22_LANEENABLE_MASK (0x3 << 29)
900#define OMAP4_CAMERARX_CSI21_LANEENABLE_SHIFT 24
901#define OMAP4_CAMERARX_CSI21_LANEENABLE_MASK (0x1f << 24)
902#define OMAP4_CAMERARX_UNIPRO_CAMMODE_SHIFT 22
903#define OMAP4_CAMERARX_UNIPRO_CAMMODE_MASK (0x3 << 22)
904#define OMAP4_CAMERARX_CSI22_CTRLCLKEN_SHIFT 21
905#define OMAP4_CAMERARX_CSI22_CTRLCLKEN_MASK (1 << 21)
906#define OMAP4_CAMERARX_CSI22_CAMMODE_SHIFT 19
907#define OMAP4_CAMERARX_CSI22_CAMMODE_MASK (0x3 << 19)
908#define OMAP4_CAMERARX_CSI21_CTRLCLKEN_SHIFT 18
909#define OMAP4_CAMERARX_CSI21_CTRLCLKEN_MASK (1 << 18)
910#define OMAP4_CAMERARX_CSI21_CAMMODE_SHIFT 16
911#define OMAP4_CAMERARX_CSI21_CAMMODE_MASK (0x3 << 16)
912
913/* CONTROL_AVDAC */
914#define OMAP4_AVDAC_ACEN_SHIFT 31
915#define OMAP4_AVDAC_ACEN_MASK (1 << 31)
916#define OMAP4_AVDAC_TVOUTBYPASS_SHIFT 30
917#define OMAP4_AVDAC_TVOUTBYPASS_MASK (1 << 30)
918#define OMAP4_AVDAC_INPUTINV_SHIFT 29
919#define OMAP4_AVDAC_INPUTINV_MASK (1 << 29)
920#define OMAP4_AVDAC_CTL_SHIFT 13
921#define OMAP4_AVDAC_CTL_MASK (0xffff << 13)
922#define OMAP4_AVDAC_CTL_WR_ACK_SHIFT 12
923#define OMAP4_AVDAC_CTL_WR_ACK_MASK (1 << 12)
924
925/* CONTROL_HDMI_TX_PHY */
926#define OMAP4_HDMITXPHY_PADORDER_SHIFT 31
927#define OMAP4_HDMITXPHY_PADORDER_MASK (1 << 31)
928#define OMAP4_HDMITXPHY_TXVALID_SHIFT 30
929#define OMAP4_HDMITXPHY_TXVALID_MASK (1 << 30)
930#define OMAP4_HDMITXPHY_ENBYPASSCLK_SHIFT 29
931#define OMAP4_HDMITXPHY_ENBYPASSCLK_MASK (1 << 29)
932#define OMAP4_HDMITXPHY_PD_PULLUPDET_SHIFT 28
933#define OMAP4_HDMITXPHY_PD_PULLUPDET_MASK (1 << 28)
934
935/* CONTROL_MMC2 */
936#define OMAP4_MMC2_FEEDBACK_CLK_SEL_SHIFT 31
937#define OMAP4_MMC2_FEEDBACK_CLK_SEL_MASK (1 << 31)
938
939/* CONTROL_DSIPHY */
940#define OMAP4_DSI2_LANEENABLE_SHIFT 29
941#define OMAP4_DSI2_LANEENABLE_MASK (0x7 << 29)
942#define OMAP4_DSI1_LANEENABLE_SHIFT 24
943#define OMAP4_DSI1_LANEENABLE_MASK (0x1f << 24)
944#define OMAP4_DSI1_PIPD_SHIFT 19
945#define OMAP4_DSI1_PIPD_MASK (0x1f << 19)
946#define OMAP4_DSI2_PIPD_SHIFT 14
947#define OMAP4_DSI2_PIPD_MASK (0x1f << 14)
948
949/* CONTROL_MCBSPLP */
950#define OMAP4_ALBCTRLRX_FSX_SHIFT 31
951#define OMAP4_ALBCTRLRX_FSX_MASK (1 << 31)
952#define OMAP4_ALBCTRLRX_CLKX_SHIFT 30
953#define OMAP4_ALBCTRLRX_CLKX_MASK (1 << 30)
954#define OMAP4_ABE_MCBSP1_DR_EN_SHIFT 29
955#define OMAP4_ABE_MCBSP1_DR_EN_MASK (1 << 29)
956
957/* CONTROL_USB2PHYCORE */
958#define OMAP4_USB2PHY_AUTORESUME_EN_SHIFT 31
959#define OMAP4_USB2PHY_AUTORESUME_EN_MASK (1 << 31)
960#define OMAP4_USB2PHY_DISCHGDET_SHIFT 30
961#define OMAP4_USB2PHY_DISCHGDET_MASK (1 << 30)
962#define OMAP4_USB2PHY_GPIOMODE_SHIFT 29
963#define OMAP4_USB2PHY_GPIOMODE_MASK (1 << 29)
964#define OMAP4_USB2PHY_CHG_DET_EXT_CTL_SHIFT 28
965#define OMAP4_USB2PHY_CHG_DET_EXT_CTL_MASK (1 << 28)
966#define OMAP4_USB2PHY_RDM_PD_CHGDET_EN_SHIFT 27
967#define OMAP4_USB2PHY_RDM_PD_CHGDET_EN_MASK (1 << 27)
968#define OMAP4_USB2PHY_RDP_PU_CHGDET_EN_SHIFT 26
969#define OMAP4_USB2PHY_RDP_PU_CHGDET_EN_MASK (1 << 26)
970#define OMAP4_USB2PHY_CHG_VSRC_EN_SHIFT 25
971#define OMAP4_USB2PHY_CHG_VSRC_EN_MASK (1 << 25)
972#define OMAP4_USB2PHY_CHG_ISINK_EN_SHIFT 24
973#define OMAP4_USB2PHY_CHG_ISINK_EN_MASK (1 << 24)
974#define OMAP4_USB2PHY_CHG_DET_STATUS_SHIFT 21
975#define OMAP4_USB2PHY_CHG_DET_STATUS_MASK (0x7 << 21)
976#define OMAP4_USB2PHY_CHG_DET_DM_COMP_SHIFT 20
977#define OMAP4_USB2PHY_CHG_DET_DM_COMP_MASK (1 << 20)
978#define OMAP4_USB2PHY_CHG_DET_DP_COMP_SHIFT 19
979#define OMAP4_USB2PHY_CHG_DET_DP_COMP_MASK (1 << 19)
980#define OMAP4_USB2PHY_DATADET_SHIFT 18
981#define OMAP4_USB2PHY_DATADET_MASK (1 << 18)
982#define OMAP4_USB2PHY_SINKONDP_SHIFT 17
983#define OMAP4_USB2PHY_SINKONDP_MASK (1 << 17)
984#define OMAP4_USB2PHY_SRCONDM_SHIFT 16
985#define OMAP4_USB2PHY_SRCONDM_MASK (1 << 16)
986#define OMAP4_USB2PHY_RESTARTCHGDET_SHIFT 15
987#define OMAP4_USB2PHY_RESTARTCHGDET_MASK (1 << 15)
988#define OMAP4_USB2PHY_CHGDETDONE_SHIFT 14
989#define OMAP4_USB2PHY_CHGDETDONE_MASK (1 << 14)
990#define OMAP4_USB2PHY_CHGDETECTED_SHIFT 13
991#define OMAP4_USB2PHY_CHGDETECTED_MASK (1 << 13)
992#define OMAP4_USB2PHY_MCPCPUEN_SHIFT 12
993#define OMAP4_USB2PHY_MCPCPUEN_MASK (1 << 12)
994#define OMAP4_USB2PHY_MCPCMODEEN_SHIFT 11
995#define OMAP4_USB2PHY_MCPCMODEEN_MASK (1 << 11)
996#define OMAP4_USB2PHY_RESETDONEMCLK_SHIFT 10
997#define OMAP4_USB2PHY_RESETDONEMCLK_MASK (1 << 10)
998#define OMAP4_USB2PHY_UTMIRESETDONE_SHIFT 9
999#define OMAP4_USB2PHY_UTMIRESETDONE_MASK (1 << 9)
1000#define OMAP4_USB2PHY_TXBITSTUFFENABLE_SHIFT 8
1001#define OMAP4_USB2PHY_TXBITSTUFFENABLE_MASK (1 << 8)
1002#define OMAP4_USB2PHY_DATAPOLARITYN_SHIFT 7
1003#define OMAP4_USB2PHY_DATAPOLARITYN_MASK (1 << 7)
1004#define OMAP4_USBDPLL_FREQLOCK_SHIFT 6
1005#define OMAP4_USBDPLL_FREQLOCK_MASK (1 << 6)
1006#define OMAP4_USB2PHY_RESETDONETCLK_SHIFT 5
1007#define OMAP4_USB2PHY_RESETDONETCLK_MASK (1 << 5)
1008
1009/* CONTROL_I2C_1 */
1010#define OMAP4_HDMI_DDC_SDA_GLFENB_SHIFT 31
1011#define OMAP4_HDMI_DDC_SDA_GLFENB_MASK (1 << 31)
1012#define OMAP4_HDMI_DDC_SDA_LOAD_BITS_SHIFT 29
1013#define OMAP4_HDMI_DDC_SDA_LOAD_BITS_MASK (0x3 << 29)
1014#define OMAP4_HDMI_DDC_SDA_PULLUPRESX_SHIFT 28
1015#define OMAP4_HDMI_DDC_SDA_PULLUPRESX_MASK (1 << 28)
1016#define OMAP4_HDMI_DDC_SCL_GLFENB_SHIFT 27
1017#define OMAP4_HDMI_DDC_SCL_GLFENB_MASK (1 << 27)
1018#define OMAP4_HDMI_DDC_SCL_LOAD_BITS_SHIFT 25
1019#define OMAP4_HDMI_DDC_SCL_LOAD_BITS_MASK (0x3 << 25)
1020#define OMAP4_HDMI_DDC_SCL_PULLUPRESX_SHIFT 24
1021#define OMAP4_HDMI_DDC_SCL_PULLUPRESX_MASK (1 << 24)
1022#define OMAP4_HDMI_DDC_SDA_HSMODE_SHIFT 23
1023#define OMAP4_HDMI_DDC_SDA_HSMODE_MASK (1 << 23)
1024#define OMAP4_HDMI_DDC_SDA_NMODE_SHIFT 22
1025#define OMAP4_HDMI_DDC_SDA_NMODE_MASK (1 << 22)
1026#define OMAP4_HDMI_DDC_SCL_HSMODE_SHIFT 21
1027#define OMAP4_HDMI_DDC_SCL_HSMODE_MASK (1 << 21)
1028#define OMAP4_HDMI_DDC_SCL_NMODE_SHIFT 20
1029#define OMAP4_HDMI_DDC_SCL_NMODE_MASK (1 << 20)
1030
1031/* CONTROL_MMC1 */
1032#define OMAP4_SDMMC1_PUSTRENGTH_GRP0_SHIFT 31
1033#define OMAP4_SDMMC1_PUSTRENGTH_GRP0_MASK (1 << 31)
1034#define OMAP4_SDMMC1_PUSTRENGTH_GRP1_SHIFT 30
1035#define OMAP4_SDMMC1_PUSTRENGTH_GRP1_MASK (1 << 30)
1036#define OMAP4_SDMMC1_PUSTRENGTH_GRP2_SHIFT 29
1037#define OMAP4_SDMMC1_PUSTRENGTH_GRP2_MASK (1 << 29)
1038#define OMAP4_SDMMC1_PUSTRENGTH_GRP3_SHIFT 28
1039#define OMAP4_SDMMC1_PUSTRENGTH_GRP3_MASK (1 << 28)
1040#define OMAP4_SDMMC1_DR0_SPEEDCTRL_SHIFT 27
1041#define OMAP4_SDMMC1_DR0_SPEEDCTRL_MASK (1 << 27)
1042#define OMAP4_SDMMC1_DR1_SPEEDCTRL_SHIFT 26
1043#define OMAP4_SDMMC1_DR1_SPEEDCTRL_MASK (1 << 26)
1044#define OMAP4_SDMMC1_DR2_SPEEDCTRL_SHIFT 25
1045#define OMAP4_SDMMC1_DR2_SPEEDCTRL_MASK (1 << 25)
1046#define OMAP4_USBC1_DR0_SPEEDCTRL_SHIFT 24
1047#define OMAP4_USBC1_DR0_SPEEDCTRL_MASK (1 << 24)
1048#define OMAP4_USB_FD_CDEN_SHIFT 23
1049#define OMAP4_USB_FD_CDEN_MASK (1 << 23)
1050#define OMAP4_USBC1_ICUSB_DP_PDDIS_SHIFT 22
1051#define OMAP4_USBC1_ICUSB_DP_PDDIS_MASK (1 << 22)
1052#define OMAP4_USBC1_ICUSB_DM_PDDIS_SHIFT 21
1053#define OMAP4_USBC1_ICUSB_DM_PDDIS_MASK (1 << 21)
1054
1055/* CONTROL_HSI */
1056#define OMAP4_HSI1_CALLOOP_SEL_SHIFT 31
1057#define OMAP4_HSI1_CALLOOP_SEL_MASK (1 << 31)
1058#define OMAP4_HSI1_CALMUX_SEL_SHIFT 30
1059#define OMAP4_HSI1_CALMUX_SEL_MASK (1 << 30)
1060#define OMAP4_HSI2_CALLOOP_SEL_SHIFT 29
1061#define OMAP4_HSI2_CALLOOP_SEL_MASK (1 << 29)
1062#define OMAP4_HSI2_CALMUX_SEL_SHIFT 28
1063#define OMAP4_HSI2_CALMUX_SEL_MASK (1 << 28)
1064
1065/* CONTROL_USB */
1066#define OMAP4_CARKIT_USBA0_ULPIPHY_DAT0_AUTO_EN_SHIFT 31
1067#define OMAP4_CARKIT_USBA0_ULPIPHY_DAT0_AUTO_EN_MASK (1 << 31)
1068#define OMAP4_CARKIT_USBA0_ULPIPHY_DAT1_AUTO_EN_SHIFT 30
1069#define OMAP4_CARKIT_USBA0_ULPIPHY_DAT1_AUTO_EN_MASK (1 << 30)
1070
1071/* CONTROL_HDQ */
1072#define OMAP4_HDQ_SIO_PWRDNZ_SHIFT 31
1073#define OMAP4_HDQ_SIO_PWRDNZ_MASK (1 << 31)
1074
1075/* CONTROL_LPDDR2IO1_0 */
1076#define OMAP4_LPDDR2IO1_GR4_SR_SHIFT 30
1077#define OMAP4_LPDDR2IO1_GR4_SR_MASK (0x3 << 30)
1078#define OMAP4_LPDDR2IO1_GR4_I_SHIFT 27
1079#define OMAP4_LPDDR2IO1_GR4_I_MASK (0x7 << 27)
1080#define OMAP4_LPDDR2IO1_GR4_WD_SHIFT 25
1081#define OMAP4_LPDDR2IO1_GR4_WD_MASK (0x3 << 25)
1082#define OMAP4_LPDDR2IO1_GR3_SR_SHIFT 22
1083#define OMAP4_LPDDR2IO1_GR3_SR_MASK (0x3 << 22)
1084#define OMAP4_LPDDR2IO1_GR3_I_SHIFT 19
1085#define OMAP4_LPDDR2IO1_GR3_I_MASK (0x7 << 19)
1086#define OMAP4_LPDDR2IO1_GR3_WD_SHIFT 17
1087#define OMAP4_LPDDR2IO1_GR3_WD_MASK (0x3 << 17)
1088#define OMAP4_LPDDR2IO1_GR2_SR_SHIFT 14
1089#define OMAP4_LPDDR2IO1_GR2_SR_MASK (0x3 << 14)
1090#define OMAP4_LPDDR2IO1_GR2_I_SHIFT 11
1091#define OMAP4_LPDDR2IO1_GR2_I_MASK (0x7 << 11)
1092#define OMAP4_LPDDR2IO1_GR2_WD_SHIFT 9
1093#define OMAP4_LPDDR2IO1_GR2_WD_MASK (0x3 << 9)
1094#define OMAP4_LPDDR2IO1_GR1_SR_SHIFT 6
1095#define OMAP4_LPDDR2IO1_GR1_SR_MASK (0x3 << 6)
1096#define OMAP4_LPDDR2IO1_GR1_I_SHIFT 3
1097#define OMAP4_LPDDR2IO1_GR1_I_MASK (0x7 << 3)
1098#define OMAP4_LPDDR2IO1_GR1_WD_SHIFT 1
1099#define OMAP4_LPDDR2IO1_GR1_WD_MASK (0x3 << 1)
1100
1101/* CONTROL_LPDDR2IO1_1 */
1102#define OMAP4_LPDDR2IO1_GR8_SR_SHIFT 30
1103#define OMAP4_LPDDR2IO1_GR8_SR_MASK (0x3 << 30)
1104#define OMAP4_LPDDR2IO1_GR8_I_SHIFT 27
1105#define OMAP4_LPDDR2IO1_GR8_I_MASK (0x7 << 27)
1106#define OMAP4_LPDDR2IO1_GR8_WD_SHIFT 25
1107#define OMAP4_LPDDR2IO1_GR8_WD_MASK (0x3 << 25)
1108#define OMAP4_LPDDR2IO1_GR7_SR_SHIFT 22
1109#define OMAP4_LPDDR2IO1_GR7_SR_MASK (0x3 << 22)
1110#define OMAP4_LPDDR2IO1_GR7_I_SHIFT 19
1111#define OMAP4_LPDDR2IO1_GR7_I_MASK (0x7 << 19)
1112#define OMAP4_LPDDR2IO1_GR7_WD_SHIFT 17
1113#define OMAP4_LPDDR2IO1_GR7_WD_MASK (0x3 << 17)
1114#define OMAP4_LPDDR2IO1_GR6_SR_SHIFT 14
1115#define OMAP4_LPDDR2IO1_GR6_SR_MASK (0x3 << 14)
1116#define OMAP4_LPDDR2IO1_GR6_I_SHIFT 11
1117#define OMAP4_LPDDR2IO1_GR6_I_MASK (0x7 << 11)
1118#define OMAP4_LPDDR2IO1_GR6_WD_SHIFT 9
1119#define OMAP4_LPDDR2IO1_GR6_WD_MASK (0x3 << 9)
1120#define OMAP4_LPDDR2IO1_GR5_SR_SHIFT 6
1121#define OMAP4_LPDDR2IO1_GR5_SR_MASK (0x3 << 6)
1122#define OMAP4_LPDDR2IO1_GR5_I_SHIFT 3
1123#define OMAP4_LPDDR2IO1_GR5_I_MASK (0x7 << 3)
1124#define OMAP4_LPDDR2IO1_GR5_WD_SHIFT 1
1125#define OMAP4_LPDDR2IO1_GR5_WD_MASK (0x3 << 1)
1126
1127/* CONTROL_LPDDR2IO1_2 */
1128#define OMAP4_LPDDR2IO1_GR11_SR_SHIFT 30
1129#define OMAP4_LPDDR2IO1_GR11_SR_MASK (0x3 << 30)
1130#define OMAP4_LPDDR2IO1_GR11_I_SHIFT 27
1131#define OMAP4_LPDDR2IO1_GR11_I_MASK (0x7 << 27)
1132#define OMAP4_LPDDR2IO1_GR11_WD_SHIFT 25
1133#define OMAP4_LPDDR2IO1_GR11_WD_MASK (0x3 << 25)
1134#define OMAP4_LPDDR2IO1_GR10_SR_SHIFT 22
1135#define OMAP4_LPDDR2IO1_GR10_SR_MASK (0x3 << 22)
1136#define OMAP4_LPDDR2IO1_GR10_I_SHIFT 19
1137#define OMAP4_LPDDR2IO1_GR10_I_MASK (0x7 << 19)
1138#define OMAP4_LPDDR2IO1_GR10_WD_SHIFT 17
1139#define OMAP4_LPDDR2IO1_GR10_WD_MASK (0x3 << 17)
1140#define OMAP4_LPDDR2IO1_GR9_SR_SHIFT 14
1141#define OMAP4_LPDDR2IO1_GR9_SR_MASK (0x3 << 14)
1142#define OMAP4_LPDDR2IO1_GR9_I_SHIFT 11
1143#define OMAP4_LPDDR2IO1_GR9_I_MASK (0x7 << 11)
1144#define OMAP4_LPDDR2IO1_GR9_WD_SHIFT 9
1145#define OMAP4_LPDDR2IO1_GR9_WD_MASK (0x3 << 9)
1146
1147/* CONTROL_LPDDR2IO1_3 */
1148#define OMAP4_LPDDR21_VREF_CA_CCAP0_SHIFT 31
1149#define OMAP4_LPDDR21_VREF_CA_CCAP0_MASK (1 << 31)
1150#define OMAP4_LPDDR21_VREF_CA_CCAP1_SHIFT 30
1151#define OMAP4_LPDDR21_VREF_CA_CCAP1_MASK (1 << 30)
1152#define OMAP4_LPDDR21_VREF_CA_INT_CCAP0_SHIFT 29
1153#define OMAP4_LPDDR21_VREF_CA_INT_CCAP0_MASK (1 << 29)
1154#define OMAP4_LPDDR21_VREF_CA_INT_CCAP1_SHIFT 28
1155#define OMAP4_LPDDR21_VREF_CA_INT_CCAP1_MASK (1 << 28)
1156#define OMAP4_LPDDR21_VREF_CA_INT_TAP0_SHIFT 27
1157#define OMAP4_LPDDR21_VREF_CA_INT_TAP0_MASK (1 << 27)
1158#define OMAP4_LPDDR21_VREF_CA_INT_TAP1_SHIFT 26
1159#define OMAP4_LPDDR21_VREF_CA_INT_TAP1_MASK (1 << 26)
1160#define OMAP4_LPDDR21_VREF_CA_TAP0_SHIFT 25
1161#define OMAP4_LPDDR21_VREF_CA_TAP0_MASK (1 << 25)
1162#define OMAP4_LPDDR21_VREF_CA_TAP1_SHIFT 24
1163#define OMAP4_LPDDR21_VREF_CA_TAP1_MASK (1 << 24)
1164#define OMAP4_LPDDR21_VREF_DQ0_INT_CCAP0_SHIFT 23
1165#define OMAP4_LPDDR21_VREF_DQ0_INT_CCAP0_MASK (1 << 23)
1166#define OMAP4_LPDDR21_VREF_DQ0_INT_CCAP1_SHIFT 22
1167#define OMAP4_LPDDR21_VREF_DQ0_INT_CCAP1_MASK (1 << 22)
1168#define OMAP4_LPDDR21_VREF_DQ0_INT_TAP0_SHIFT 21
1169#define OMAP4_LPDDR21_VREF_DQ0_INT_TAP0_MASK (1 << 21)
1170#define OMAP4_LPDDR21_VREF_DQ0_INT_TAP1_SHIFT 20
1171#define OMAP4_LPDDR21_VREF_DQ0_INT_TAP1_MASK (1 << 20)
1172#define OMAP4_LPDDR21_VREF_DQ1_INT_CCAP0_SHIFT 19
1173#define OMAP4_LPDDR21_VREF_DQ1_INT_CCAP0_MASK (1 << 19)
1174#define OMAP4_LPDDR21_VREF_DQ1_INT_CCAP1_SHIFT 18
1175#define OMAP4_LPDDR21_VREF_DQ1_INT_CCAP1_MASK (1 << 18)
1176#define OMAP4_LPDDR21_VREF_DQ1_INT_TAP0_SHIFT 17
1177#define OMAP4_LPDDR21_VREF_DQ1_INT_TAP0_MASK (1 << 17)
1178#define OMAP4_LPDDR21_VREF_DQ1_INT_TAP1_SHIFT 16
1179#define OMAP4_LPDDR21_VREF_DQ1_INT_TAP1_MASK (1 << 16)
1180#define OMAP4_LPDDR21_VREF_DQ_CCAP0_SHIFT 15
1181#define OMAP4_LPDDR21_VREF_DQ_CCAP0_MASK (1 << 15)
1182#define OMAP4_LPDDR21_VREF_DQ_CCAP1_SHIFT 14
1183#define OMAP4_LPDDR21_VREF_DQ_CCAP1_MASK (1 << 14)
1184#define OMAP4_LPDDR21_VREF_DQ_TAP0_SHIFT 13
1185#define OMAP4_LPDDR21_VREF_DQ_TAP0_MASK (1 << 13)
1186#define OMAP4_LPDDR21_VREF_DQ_TAP1_SHIFT 12
1187#define OMAP4_LPDDR21_VREF_DQ_TAP1_MASK (1 << 12)
1188
1189/* CONTROL_LPDDR2IO2_0 */
1190#define OMAP4_LPDDR2IO2_GR4_SR_SHIFT 30
1191#define OMAP4_LPDDR2IO2_GR4_SR_MASK (0x3 << 30)
1192#define OMAP4_LPDDR2IO2_GR4_I_SHIFT 27
1193#define OMAP4_LPDDR2IO2_GR4_I_MASK (0x7 << 27)
1194#define OMAP4_LPDDR2IO2_GR4_WD_SHIFT 25
1195#define OMAP4_LPDDR2IO2_GR4_WD_MASK (0x3 << 25)
1196#define OMAP4_LPDDR2IO2_GR3_SR_SHIFT 22
1197#define OMAP4_LPDDR2IO2_GR3_SR_MASK (0x3 << 22)
1198#define OMAP4_LPDDR2IO2_GR3_I_SHIFT 19
1199#define OMAP4_LPDDR2IO2_GR3_I_MASK (0x7 << 19)
1200#define OMAP4_LPDDR2IO2_GR3_WD_SHIFT 17
1201#define OMAP4_LPDDR2IO2_GR3_WD_MASK (0x3 << 17)
1202#define OMAP4_LPDDR2IO2_GR2_SR_SHIFT 14
1203#define OMAP4_LPDDR2IO2_GR2_SR_MASK (0x3 << 14)
1204#define OMAP4_LPDDR2IO2_GR2_I_SHIFT 11
1205#define OMAP4_LPDDR2IO2_GR2_I_MASK (0x7 << 11)
1206#define OMAP4_LPDDR2IO2_GR2_WD_SHIFT 9
1207#define OMAP4_LPDDR2IO2_GR2_WD_MASK (0x3 << 9)
1208#define OMAP4_LPDDR2IO2_GR1_SR_SHIFT 6
1209#define OMAP4_LPDDR2IO2_GR1_SR_MASK (0x3 << 6)
1210#define OMAP4_LPDDR2IO2_GR1_I_SHIFT 3
1211#define OMAP4_LPDDR2IO2_GR1_I_MASK (0x7 << 3)
1212#define OMAP4_LPDDR2IO2_GR1_WD_SHIFT 1
1213#define OMAP4_LPDDR2IO2_GR1_WD_MASK (0x3 << 1)
1214
1215/* CONTROL_LPDDR2IO2_1 */
1216#define OMAP4_LPDDR2IO2_GR8_SR_SHIFT 30
1217#define OMAP4_LPDDR2IO2_GR8_SR_MASK (0x3 << 30)
1218#define OMAP4_LPDDR2IO2_GR8_I_SHIFT 27
1219#define OMAP4_LPDDR2IO2_GR8_I_MASK (0x7 << 27)
1220#define OMAP4_LPDDR2IO2_GR8_WD_SHIFT 25
1221#define OMAP4_LPDDR2IO2_GR8_WD_MASK (0x3 << 25)
1222#define OMAP4_LPDDR2IO2_GR7_SR_SHIFT 22
1223#define OMAP4_LPDDR2IO2_GR7_SR_MASK (0x3 << 22)
1224#define OMAP4_LPDDR2IO2_GR7_I_SHIFT 19
1225#define OMAP4_LPDDR2IO2_GR7_I_MASK (0x7 << 19)
1226#define OMAP4_LPDDR2IO2_GR7_WD_SHIFT 17
1227#define OMAP4_LPDDR2IO2_GR7_WD_MASK (0x3 << 17)
1228#define OMAP4_LPDDR2IO2_GR6_SR_SHIFT 14
1229#define OMAP4_LPDDR2IO2_GR6_SR_MASK (0x3 << 14)
1230#define OMAP4_LPDDR2IO2_GR6_I_SHIFT 11
1231#define OMAP4_LPDDR2IO2_GR6_I_MASK (0x7 << 11)
1232#define OMAP4_LPDDR2IO2_GR6_WD_SHIFT 9
1233#define OMAP4_LPDDR2IO2_GR6_WD_MASK (0x3 << 9)
1234#define OMAP4_LPDDR2IO2_GR5_SR_SHIFT 6
1235#define OMAP4_LPDDR2IO2_GR5_SR_MASK (0x3 << 6)
1236#define OMAP4_LPDDR2IO2_GR5_I_SHIFT 3
1237#define OMAP4_LPDDR2IO2_GR5_I_MASK (0x7 << 3)
1238#define OMAP4_LPDDR2IO2_GR5_WD_SHIFT 1
1239#define OMAP4_LPDDR2IO2_GR5_WD_MASK (0x3 << 1)
1240
1241/* CONTROL_LPDDR2IO2_2 */
1242#define OMAP4_LPDDR2IO2_GR11_SR_SHIFT 30
1243#define OMAP4_LPDDR2IO2_GR11_SR_MASK (0x3 << 30)
1244#define OMAP4_LPDDR2IO2_GR11_I_SHIFT 27
1245#define OMAP4_LPDDR2IO2_GR11_I_MASK (0x7 << 27)
1246#define OMAP4_LPDDR2IO2_GR11_WD_SHIFT 25
1247#define OMAP4_LPDDR2IO2_GR11_WD_MASK (0x3 << 25)
1248#define OMAP4_LPDDR2IO2_GR10_SR_SHIFT 22
1249#define OMAP4_LPDDR2IO2_GR10_SR_MASK (0x3 << 22)
1250#define OMAP4_LPDDR2IO2_GR10_I_SHIFT 19
1251#define OMAP4_LPDDR2IO2_GR10_I_MASK (0x7 << 19)
1252#define OMAP4_LPDDR2IO2_GR10_WD_SHIFT 17
1253#define OMAP4_LPDDR2IO2_GR10_WD_MASK (0x3 << 17)
1254#define OMAP4_LPDDR2IO2_GR9_SR_SHIFT 14
1255#define OMAP4_LPDDR2IO2_GR9_SR_MASK (0x3 << 14)
1256#define OMAP4_LPDDR2IO2_GR9_I_SHIFT 11
1257#define OMAP4_LPDDR2IO2_GR9_I_MASK (0x7 << 11)
1258#define OMAP4_LPDDR2IO2_GR9_WD_SHIFT 9
1259#define OMAP4_LPDDR2IO2_GR9_WD_MASK (0x3 << 9)
1260
1261/* CONTROL_LPDDR2IO2_3 */
1262#define OMAP4_LPDDR22_VREF_CA_CCAP0_SHIFT 31
1263#define OMAP4_LPDDR22_VREF_CA_CCAP0_MASK (1 << 31)
1264#define OMAP4_LPDDR22_VREF_CA_CCAP1_SHIFT 30
1265#define OMAP4_LPDDR22_VREF_CA_CCAP1_MASK (1 << 30)
1266#define OMAP4_LPDDR22_VREF_CA_INT_CCAP0_SHIFT 29
1267#define OMAP4_LPDDR22_VREF_CA_INT_CCAP0_MASK (1 << 29)
1268#define OMAP4_LPDDR22_VREF_CA_INT_CCAP1_SHIFT 28
1269#define OMAP4_LPDDR22_VREF_CA_INT_CCAP1_MASK (1 << 28)
1270#define OMAP4_LPDDR22_VREF_CA_INT_TAP0_SHIFT 27
1271#define OMAP4_LPDDR22_VREF_CA_INT_TAP0_MASK (1 << 27)
1272#define OMAP4_LPDDR22_VREF_CA_INT_TAP1_SHIFT 26
1273#define OMAP4_LPDDR22_VREF_CA_INT_TAP1_MASK (1 << 26)
1274#define OMAP4_LPDDR22_VREF_CA_TAP0_SHIFT 25
1275#define OMAP4_LPDDR22_VREF_CA_TAP0_MASK (1 << 25)
1276#define OMAP4_LPDDR22_VREF_CA_TAP1_SHIFT 24
1277#define OMAP4_LPDDR22_VREF_CA_TAP1_MASK (1 << 24)
1278#define OMAP4_LPDDR22_VREF_DQ0_INT_CCAP0_SHIFT 23
1279#define OMAP4_LPDDR22_VREF_DQ0_INT_CCAP0_MASK (1 << 23)
1280#define OMAP4_LPDDR22_VREF_DQ0_INT_CCAP1_SHIFT 22
1281#define OMAP4_LPDDR22_VREF_DQ0_INT_CCAP1_MASK (1 << 22)
1282#define OMAP4_LPDDR22_VREF_DQ0_INT_TAP0_SHIFT 21
1283#define OMAP4_LPDDR22_VREF_DQ0_INT_TAP0_MASK (1 << 21)
1284#define OMAP4_LPDDR22_VREF_DQ0_INT_TAP1_SHIFT 20
1285#define OMAP4_LPDDR22_VREF_DQ0_INT_TAP1_MASK (1 << 20)
1286#define OMAP4_LPDDR22_VREF_DQ1_INT_CCAP0_SHIFT 19
1287#define OMAP4_LPDDR22_VREF_DQ1_INT_CCAP0_MASK (1 << 19)
1288#define OMAP4_LPDDR22_VREF_DQ1_INT_CCAP1_SHIFT 18
1289#define OMAP4_LPDDR22_VREF_DQ1_INT_CCAP1_MASK (1 << 18)
1290#define OMAP4_LPDDR22_VREF_DQ1_INT_TAP0_SHIFT 17
1291#define OMAP4_LPDDR22_VREF_DQ1_INT_TAP0_MASK (1 << 17)
1292#define OMAP4_LPDDR22_VREF_DQ1_INT_TAP1_SHIFT 16
1293#define OMAP4_LPDDR22_VREF_DQ1_INT_TAP1_MASK (1 << 16)
1294#define OMAP4_LPDDR22_VREF_DQ_CCAP0_SHIFT 15
1295#define OMAP4_LPDDR22_VREF_DQ_CCAP0_MASK (1 << 15)
1296#define OMAP4_LPDDR22_VREF_DQ_CCAP1_SHIFT 14
1297#define OMAP4_LPDDR22_VREF_DQ_CCAP1_MASK (1 << 14)
1298#define OMAP4_LPDDR22_VREF_DQ_TAP0_SHIFT 13
1299#define OMAP4_LPDDR22_VREF_DQ_TAP0_MASK (1 << 13)
1300#define OMAP4_LPDDR22_VREF_DQ_TAP1_SHIFT 12
1301#define OMAP4_LPDDR22_VREF_DQ_TAP1_MASK (1 << 12)
1302
1303/* CONTROL_BUS_HOLD */
1304#define OMAP4_ABE_DMIC_DIN3_EN_SHIFT 31
1305#define OMAP4_ABE_DMIC_DIN3_EN_MASK (1 << 31)
1306#define OMAP4_MCSPI1_CS3_EN_SHIFT 30
1307#define OMAP4_MCSPI1_CS3_EN_MASK (1 << 30)
1308
1309/* CONTROL_C2C */
1310#define OMAP4_MIRROR_MODE_EN_SHIFT 31
1311#define OMAP4_MIRROR_MODE_EN_MASK (1 << 31)
1312#define OMAP4_C2C_SPARE_SHIFT 24
1313#define OMAP4_C2C_SPARE_MASK (0x7f << 24)
1314
1315/* CORE_CONTROL_SPARE_RW */
1316#define OMAP4_CORE_CONTROL_SPARE_RW_SHIFT 0
1317#define OMAP4_CORE_CONTROL_SPARE_RW_MASK (0xffffffff << 0)
1318
1319/* CORE_CONTROL_SPARE_R */
1320#define OMAP4_CORE_CONTROL_SPARE_R_SHIFT 0
1321#define OMAP4_CORE_CONTROL_SPARE_R_MASK (0xffffffff << 0)
1322
1323/* CORE_CONTROL_SPARE_R_C0 */
1324#define OMAP4_CORE_CONTROL_SPARE_R_C0_SHIFT 31
1325#define OMAP4_CORE_CONTROL_SPARE_R_C0_MASK (1 << 31)
1326#define OMAP4_CORE_CONTROL_SPARE_R_C1_SHIFT 30
1327#define OMAP4_CORE_CONTROL_SPARE_R_C1_MASK (1 << 30)
1328#define OMAP4_CORE_CONTROL_SPARE_R_C2_SHIFT 29
1329#define OMAP4_CORE_CONTROL_SPARE_R_C2_MASK (1 << 29)
1330#define OMAP4_CORE_CONTROL_SPARE_R_C3_SHIFT 28
1331#define OMAP4_CORE_CONTROL_SPARE_R_C3_MASK (1 << 28)
1332#define OMAP4_CORE_CONTROL_SPARE_R_C4_SHIFT 27
1333#define OMAP4_CORE_CONTROL_SPARE_R_C4_MASK (1 << 27)
1334#define OMAP4_CORE_CONTROL_SPARE_R_C5_SHIFT 26
1335#define OMAP4_CORE_CONTROL_SPARE_R_C5_MASK (1 << 26)
1336#define OMAP4_CORE_CONTROL_SPARE_R_C6_SHIFT 25
1337#define OMAP4_CORE_CONTROL_SPARE_R_C6_MASK (1 << 25)
1338#define OMAP4_CORE_CONTROL_SPARE_R_C7_SHIFT 24
1339#define OMAP4_CORE_CONTROL_SPARE_R_C7_MASK (1 << 24)
1340
1341/* CONTROL_EFUSE_1 */
1342#define OMAP4_AVDAC_TRIM_BYTE3_SHIFT 24
1343#define OMAP4_AVDAC_TRIM_BYTE3_MASK (0x7f << 24)
1344#define OMAP4_AVDAC_TRIM_BYTE2_SHIFT 16
1345#define OMAP4_AVDAC_TRIM_BYTE2_MASK (0xff << 16)
1346#define OMAP4_AVDAC_TRIM_BYTE1_SHIFT 8
1347#define OMAP4_AVDAC_TRIM_BYTE1_MASK (0xff << 8)
1348#define OMAP4_AVDAC_TRIM_BYTE0_SHIFT 0
1349#define OMAP4_AVDAC_TRIM_BYTE0_MASK (0xff << 0)
1350
1351/* CONTROL_EFUSE_2 */
1352#define OMAP4_EFUSE_SMART2TEST_P0_SHIFT 31
1353#define OMAP4_EFUSE_SMART2TEST_P0_MASK (1 << 31)
1354#define OMAP4_EFUSE_SMART2TEST_P1_SHIFT 30
1355#define OMAP4_EFUSE_SMART2TEST_P1_MASK (1 << 30)
1356#define OMAP4_EFUSE_SMART2TEST_P2_SHIFT 29
1357#define OMAP4_EFUSE_SMART2TEST_P2_MASK (1 << 29)
1358#define OMAP4_EFUSE_SMART2TEST_P3_SHIFT 28
1359#define OMAP4_EFUSE_SMART2TEST_P3_MASK (1 << 28)
1360#define OMAP4_EFUSE_SMART2TEST_N0_SHIFT 27
1361#define OMAP4_EFUSE_SMART2TEST_N0_MASK (1 << 27)
1362#define OMAP4_EFUSE_SMART2TEST_N1_SHIFT 26
1363#define OMAP4_EFUSE_SMART2TEST_N1_MASK (1 << 26)
1364#define OMAP4_EFUSE_SMART2TEST_N2_SHIFT 25
1365#define OMAP4_EFUSE_SMART2TEST_N2_MASK (1 << 25)
1366#define OMAP4_EFUSE_SMART2TEST_N3_SHIFT 24
1367#define OMAP4_EFUSE_SMART2TEST_N3_MASK (1 << 24)
1368#define OMAP4_LPDDR2_PTV_N1_SHIFT 23
1369#define OMAP4_LPDDR2_PTV_N1_MASK (1 << 23)
1370#define OMAP4_LPDDR2_PTV_N2_SHIFT 22
1371#define OMAP4_LPDDR2_PTV_N2_MASK (1 << 22)
1372#define OMAP4_LPDDR2_PTV_N3_SHIFT 21
1373#define OMAP4_LPDDR2_PTV_N3_MASK (1 << 21)
1374#define OMAP4_LPDDR2_PTV_N4_SHIFT 20
1375#define OMAP4_LPDDR2_PTV_N4_MASK (1 << 20)
1376#define OMAP4_LPDDR2_PTV_N5_SHIFT 19
1377#define OMAP4_LPDDR2_PTV_N5_MASK (1 << 19)
1378#define OMAP4_LPDDR2_PTV_P1_SHIFT 18
1379#define OMAP4_LPDDR2_PTV_P1_MASK (1 << 18)
1380#define OMAP4_LPDDR2_PTV_P2_SHIFT 17
1381#define OMAP4_LPDDR2_PTV_P2_MASK (1 << 17)
1382#define OMAP4_LPDDR2_PTV_P3_SHIFT 16
1383#define OMAP4_LPDDR2_PTV_P3_MASK (1 << 16)
1384#define OMAP4_LPDDR2_PTV_P4_SHIFT 15
1385#define OMAP4_LPDDR2_PTV_P4_MASK (1 << 15)
1386#define OMAP4_LPDDR2_PTV_P5_SHIFT 14
1387#define OMAP4_LPDDR2_PTV_P5_MASK (1 << 14)
1388
1389/* CONTROL_EFUSE_3 */
1390#define OMAP4_STD_FUSE_SPARE_1_SHIFT 24
1391#define OMAP4_STD_FUSE_SPARE_1_MASK (0xff << 24)
1392#define OMAP4_STD_FUSE_SPARE_2_SHIFT 16
1393#define OMAP4_STD_FUSE_SPARE_2_MASK (0xff << 16)
1394#define OMAP4_STD_FUSE_SPARE_3_SHIFT 8
1395#define OMAP4_STD_FUSE_SPARE_3_MASK (0xff << 8)
1396#define OMAP4_STD_FUSE_SPARE_4_SHIFT 0
1397#define OMAP4_STD_FUSE_SPARE_4_MASK (0xff << 0)
1398
1399/* CONTROL_EFUSE_4 */
1400#define OMAP4_STD_FUSE_SPARE_5_SHIFT 24
1401#define OMAP4_STD_FUSE_SPARE_5_MASK (0xff << 24)
1402#define OMAP4_STD_FUSE_SPARE_6_SHIFT 16
1403#define OMAP4_STD_FUSE_SPARE_6_MASK (0xff << 16)
1404#define OMAP4_STD_FUSE_SPARE_7_SHIFT 8
1405#define OMAP4_STD_FUSE_SPARE_7_MASK (0xff << 8)
1406#define OMAP4_STD_FUSE_SPARE_8_SHIFT 0
1407#define OMAP4_STD_FUSE_SPARE_8_MASK (0xff << 0)
1408
1409#endif
diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_pad_wkup_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_wkup_44xx.h
new file mode 100644
index 000000000000..17c9b37042c0
--- /dev/null
+++ b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_wkup_44xx.h
@@ -0,0 +1,236 @@
1/*
2 * OMAP44xx CTRL_MODULE_PAD_WKUP registers and bitfields
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 *
6 * Benoit Cousson (b-cousson@ti.com)
7 * Santosh Shilimkar (santosh.shilimkar@ti.com)
8 *
9 * This file is automatically generated from the OMAP hardware databases.
10 * We respectfully ask that any modifications to this file be coordinated
11 * with the public linux-omap@vger.kernel.org mailing list and the
12 * authors above to ensure that the autogeneration scripts are kept
13 * up-to-date with the file contents.
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20#ifndef __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_PAD_WKUP_44XX_H
21#define __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_PAD_WKUP_44XX_H
22
23
24/* Base address */
25#define OMAP4_CTRL_MODULE_PAD_WKUP 0x4a31e000
26
27/* Registers offset */
28#define OMAP4_CTRL_MODULE_PAD_WKUP_IP_REVISION 0x0000
29#define OMAP4_CTRL_MODULE_PAD_WKUP_IP_HWINFO 0x0004
30#define OMAP4_CTRL_MODULE_PAD_WKUP_IP_SYSCONFIG 0x0010
31#define OMAP4_CTRL_MODULE_PAD_WKUP_PADCONF_WAKEUPEVENT_0 0x007c
32#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_SMART1NOPMIO_PADCONF_0 0x05a0
33#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_SMART1NOPMIO_PADCONF_1 0x05a4
34#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_PADCONF_MODE 0x05a8
35#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_XTAL_OSCILLATOR 0x05ac
36#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_USIMIO 0x0600
37#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_I2C_2 0x0604
38#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_JTAG 0x0608
39#define OMAP4_CTRL_MODULE_PAD_WKUP_CONTROL_SYS 0x060c
40#define OMAP4_CTRL_MODULE_PAD_WKUP_WKUP_CONTROL_SPARE_RW 0x0614
41#define OMAP4_CTRL_MODULE_PAD_WKUP_WKUP_CONTROL_SPARE_R 0x0618
42#define OMAP4_CTRL_MODULE_PAD_WKUP_WKUP_CONTROL_SPARE_R_C0 0x061c
43
44/* Registers shifts and masks */
45
46/* IP_REVISION */
47#define OMAP4_IP_REV_SCHEME_SHIFT 30
48#define OMAP4_IP_REV_SCHEME_MASK (0x3 << 30)
49#define OMAP4_IP_REV_FUNC_SHIFT 16
50#define OMAP4_IP_REV_FUNC_MASK (0xfff << 16)
51#define OMAP4_IP_REV_RTL_SHIFT 11
52#define OMAP4_IP_REV_RTL_MASK (0x1f << 11)
53#define OMAP4_IP_REV_MAJOR_SHIFT 8
54#define OMAP4_IP_REV_MAJOR_MASK (0x7 << 8)
55#define OMAP4_IP_REV_CUSTOM_SHIFT 6
56#define OMAP4_IP_REV_CUSTOM_MASK (0x3 << 6)
57#define OMAP4_IP_REV_MINOR_SHIFT 0
58#define OMAP4_IP_REV_MINOR_MASK (0x3f << 0)
59
60/* IP_HWINFO */
61#define OMAP4_IP_HWINFO_SHIFT 0
62#define OMAP4_IP_HWINFO_MASK (0xffffffff << 0)
63
64/* IP_SYSCONFIG */
65#define OMAP4_IP_SYSCONFIG_IDLEMODE_SHIFT 2
66#define OMAP4_IP_SYSCONFIG_IDLEMODE_MASK (0x3 << 2)
67
68/* PADCONF_WAKEUPEVENT_0 */
69#define OMAP4_JTAG_TDO_DUPLICATEWAKEUPEVENT_SHIFT 24
70#define OMAP4_JTAG_TDO_DUPLICATEWAKEUPEVENT_MASK (1 << 24)
71#define OMAP4_JTAG_TDI_DUPLICATEWAKEUPEVENT_SHIFT 23
72#define OMAP4_JTAG_TDI_DUPLICATEWAKEUPEVENT_MASK (1 << 23)
73#define OMAP4_JTAG_TMS_TMSC_DUPLICATEWAKEUPEVENT_SHIFT 22
74#define OMAP4_JTAG_TMS_TMSC_DUPLICATEWAKEUPEVENT_MASK (1 << 22)
75#define OMAP4_JTAG_RTCK_DUPLICATEWAKEUPEVENT_SHIFT 21
76#define OMAP4_JTAG_RTCK_DUPLICATEWAKEUPEVENT_MASK (1 << 21)
77#define OMAP4_JTAG_TCK_DUPLICATEWAKEUPEVENT_SHIFT 20
78#define OMAP4_JTAG_TCK_DUPLICATEWAKEUPEVENT_MASK (1 << 20)
79#define OMAP4_JTAG_NTRST_DUPLICATEWAKEUPEVENT_SHIFT 19
80#define OMAP4_JTAG_NTRST_DUPLICATEWAKEUPEVENT_MASK (1 << 19)
81#define OMAP4_SYS_BOOT7_DUPLICATEWAKEUPEVENT_SHIFT 18
82#define OMAP4_SYS_BOOT7_DUPLICATEWAKEUPEVENT_MASK (1 << 18)
83#define OMAP4_SYS_BOOT6_DUPLICATEWAKEUPEVENT_SHIFT 17
84#define OMAP4_SYS_BOOT6_DUPLICATEWAKEUPEVENT_MASK (1 << 17)
85#define OMAP4_SYS_PWRON_RESET_OUT_DUPLICATEWAKEUPEVENT_SHIFT 16
86#define OMAP4_SYS_PWRON_RESET_OUT_DUPLICATEWAKEUPEVENT_MASK (1 << 16)
87#define OMAP4_SYS_PWR_REQ_DUPLICATEWAKEUPEVENT_SHIFT 15
88#define OMAP4_SYS_PWR_REQ_DUPLICATEWAKEUPEVENT_MASK (1 << 15)
89#define OMAP4_SYS_NRESWARM_DUPLICATEWAKEUPEVENT_SHIFT 14
90#define OMAP4_SYS_NRESWARM_DUPLICATEWAKEUPEVENT_MASK (1 << 14)
91#define OMAP4_SYS_32K_DUPLICATEWAKEUPEVENT_SHIFT 13
92#define OMAP4_SYS_32K_DUPLICATEWAKEUPEVENT_MASK (1 << 13)
93#define OMAP4_FREF_CLK4_OUT_DUPLICATEWAKEUPEVENT_SHIFT 12
94#define OMAP4_FREF_CLK4_OUT_DUPLICATEWAKEUPEVENT_MASK (1 << 12)
95#define OMAP4_FREF_CLK4_REQ_DUPLICATEWAKEUPEVENT_SHIFT 11
96#define OMAP4_FREF_CLK4_REQ_DUPLICATEWAKEUPEVENT_MASK (1 << 11)
97#define OMAP4_FREF_CLK3_OUT_DUPLICATEWAKEUPEVENT_SHIFT 10
98#define OMAP4_FREF_CLK3_OUT_DUPLICATEWAKEUPEVENT_MASK (1 << 10)
99#define OMAP4_FREF_CLK3_REQ_DUPLICATEWAKEUPEVENT_SHIFT 9
100#define OMAP4_FREF_CLK3_REQ_DUPLICATEWAKEUPEVENT_MASK (1 << 9)
101#define OMAP4_FREF_CLK0_OUT_DUPLICATEWAKEUPEVENT_SHIFT 8
102#define OMAP4_FREF_CLK0_OUT_DUPLICATEWAKEUPEVENT_MASK (1 << 8)
103#define OMAP4_FREF_CLK_IOREQ_DUPLICATEWAKEUPEVENT_SHIFT 7
104#define OMAP4_FREF_CLK_IOREQ_DUPLICATEWAKEUPEVENT_MASK (1 << 7)
105#define OMAP4_SR_SDA_DUPLICATEWAKEUPEVENT_SHIFT 6
106#define OMAP4_SR_SDA_DUPLICATEWAKEUPEVENT_MASK (1 << 6)
107#define OMAP4_SR_SCL_DUPLICATEWAKEUPEVENT_SHIFT 5
108#define OMAP4_SR_SCL_DUPLICATEWAKEUPEVENT_MASK (1 << 5)
109#define OMAP4_SIM_PWRCTRL_DUPLICATEWAKEUPEVENT_SHIFT 4
110#define OMAP4_SIM_PWRCTRL_DUPLICATEWAKEUPEVENT_MASK (1 << 4)
111#define OMAP4_SIM_CD_DUPLICATEWAKEUPEVENT_SHIFT 3
112#define OMAP4_SIM_CD_DUPLICATEWAKEUPEVENT_MASK (1 << 3)
113#define OMAP4_SIM_RESET_DUPLICATEWAKEUPEVENT_SHIFT 2
114#define OMAP4_SIM_RESET_DUPLICATEWAKEUPEVENT_MASK (1 << 2)
115#define OMAP4_SIM_CLK_DUPLICATEWAKEUPEVENT_SHIFT 1
116#define OMAP4_SIM_CLK_DUPLICATEWAKEUPEVENT_MASK (1 << 1)
117#define OMAP4_SIM_IO_DUPLICATEWAKEUPEVENT_SHIFT 0
118#define OMAP4_SIM_IO_DUPLICATEWAKEUPEVENT_MASK (1 << 0)
119
120/* CONTROL_SMART1NOPMIO_PADCONF_0 */
121#define OMAP4_FREF_DR0_SC_SHIFT 30
122#define OMAP4_FREF_DR0_SC_MASK (0x3 << 30)
123#define OMAP4_FREF_DR1_SC_SHIFT 28
124#define OMAP4_FREF_DR1_SC_MASK (0x3 << 28)
125#define OMAP4_FREF_DR4_SC_SHIFT 26
126#define OMAP4_FREF_DR4_SC_MASK (0x3 << 26)
127#define OMAP4_FREF_DR5_SC_SHIFT 24
128#define OMAP4_FREF_DR5_SC_MASK (0x3 << 24)
129#define OMAP4_FREF_DR6_SC_SHIFT 22
130#define OMAP4_FREF_DR6_SC_MASK (0x3 << 22)
131#define OMAP4_FREF_DR7_SC_SHIFT 20
132#define OMAP4_FREF_DR7_SC_MASK (0x3 << 20)
133#define OMAP4_GPIO_DR7_SC_SHIFT 18
134#define OMAP4_GPIO_DR7_SC_MASK (0x3 << 18)
135#define OMAP4_DPM_DR0_SC_SHIFT 14
136#define OMAP4_DPM_DR0_SC_MASK (0x3 << 14)
137#define OMAP4_SIM_DR0_SC_SHIFT 12
138#define OMAP4_SIM_DR0_SC_MASK (0x3 << 12)
139
140/* CONTROL_SMART1NOPMIO_PADCONF_1 */
141#define OMAP4_FREF_DR0_LB_SHIFT 30
142#define OMAP4_FREF_DR0_LB_MASK (0x3 << 30)
143#define OMAP4_FREF_DR1_LB_SHIFT 28
144#define OMAP4_FREF_DR1_LB_MASK (0x3 << 28)
145#define OMAP4_FREF_DR4_LB_SHIFT 26
146#define OMAP4_FREF_DR4_LB_MASK (0x3 << 26)
147#define OMAP4_FREF_DR5_LB_SHIFT 24
148#define OMAP4_FREF_DR5_LB_MASK (0x3 << 24)
149#define OMAP4_FREF_DR6_LB_SHIFT 22
150#define OMAP4_FREF_DR6_LB_MASK (0x3 << 22)
151#define OMAP4_FREF_DR7_LB_SHIFT 20
152#define OMAP4_FREF_DR7_LB_MASK (0x3 << 20)
153#define OMAP4_GPIO_DR7_LB_SHIFT 18
154#define OMAP4_GPIO_DR7_LB_MASK (0x3 << 18)
155#define OMAP4_DPM_DR0_LB_SHIFT 14
156#define OMAP4_DPM_DR0_LB_MASK (0x3 << 14)
157#define OMAP4_SIM_DR0_LB_SHIFT 12
158#define OMAP4_SIM_DR0_LB_MASK (0x3 << 12)
159
160/* CONTROL_PADCONF_MODE */
161#define OMAP4_VDDS_DV_FREF_SHIFT 31
162#define OMAP4_VDDS_DV_FREF_MASK (1 << 31)
163#define OMAP4_VDDS_DV_BANK2_SHIFT 30
164#define OMAP4_VDDS_DV_BANK2_MASK (1 << 30)
165
166/* CONTROL_XTAL_OSCILLATOR */
167#define OMAP4_OSCILLATOR_BOOST_SHIFT 31
168#define OMAP4_OSCILLATOR_BOOST_MASK (1 << 31)
169#define OMAP4_OSCILLATOR_OS_OUT_SHIFT 30
170#define OMAP4_OSCILLATOR_OS_OUT_MASK (1 << 30)
171
172/* CONTROL_USIMIO */
173#define OMAP4_PAD_USIM_CLK_LOW_SHIFT 31
174#define OMAP4_PAD_USIM_CLK_LOW_MASK (1 << 31)
175#define OMAP4_PAD_USIM_RST_LOW_SHIFT 29
176#define OMAP4_PAD_USIM_RST_LOW_MASK (1 << 29)
177#define OMAP4_USIM_PWRDNZ_SHIFT 28
178#define OMAP4_USIM_PWRDNZ_MASK (1 << 28)
179
180/* CONTROL_I2C_2 */
181#define OMAP4_SR_SDA_GLFENB_SHIFT 31
182#define OMAP4_SR_SDA_GLFENB_MASK (1 << 31)
183#define OMAP4_SR_SDA_LOAD_BITS_SHIFT 29
184#define OMAP4_SR_SDA_LOAD_BITS_MASK (0x3 << 29)
185#define OMAP4_SR_SDA_PULLUPRESX_SHIFT 28
186#define OMAP4_SR_SDA_PULLUPRESX_MASK (1 << 28)
187#define OMAP4_SR_SCL_GLFENB_SHIFT 27
188#define OMAP4_SR_SCL_GLFENB_MASK (1 << 27)
189#define OMAP4_SR_SCL_LOAD_BITS_SHIFT 25
190#define OMAP4_SR_SCL_LOAD_BITS_MASK (0x3 << 25)
191#define OMAP4_SR_SCL_PULLUPRESX_SHIFT 24
192#define OMAP4_SR_SCL_PULLUPRESX_MASK (1 << 24)
193
194/* CONTROL_JTAG */
195#define OMAP4_JTAG_NTRST_EN_SHIFT 31
196#define OMAP4_JTAG_NTRST_EN_MASK (1 << 31)
197#define OMAP4_JTAG_TCK_EN_SHIFT 30
198#define OMAP4_JTAG_TCK_EN_MASK (1 << 30)
199#define OMAP4_JTAG_RTCK_EN_SHIFT 29
200#define OMAP4_JTAG_RTCK_EN_MASK (1 << 29)
201#define OMAP4_JTAG_TDI_EN_SHIFT 28
202#define OMAP4_JTAG_TDI_EN_MASK (1 << 28)
203#define OMAP4_JTAG_TDO_EN_SHIFT 27
204#define OMAP4_JTAG_TDO_EN_MASK (1 << 27)
205
206/* CONTROL_SYS */
207#define OMAP4_SYS_NRESWARM_PIPU_SHIFT 31
208#define OMAP4_SYS_NRESWARM_PIPU_MASK (1 << 31)
209
210/* WKUP_CONTROL_SPARE_RW */
211#define OMAP4_WKUP_CONTROL_SPARE_RW_SHIFT 0
212#define OMAP4_WKUP_CONTROL_SPARE_RW_MASK (0xffffffff << 0)
213
214/* WKUP_CONTROL_SPARE_R */
215#define OMAP4_WKUP_CONTROL_SPARE_R_SHIFT 0
216#define OMAP4_WKUP_CONTROL_SPARE_R_MASK (0xffffffff << 0)
217
218/* WKUP_CONTROL_SPARE_R_C0 */
219#define OMAP4_WKUP_CONTROL_SPARE_R_C0_SHIFT 31
220#define OMAP4_WKUP_CONTROL_SPARE_R_C0_MASK (1 << 31)
221#define OMAP4_WKUP_CONTROL_SPARE_R_C1_SHIFT 30
222#define OMAP4_WKUP_CONTROL_SPARE_R_C1_MASK (1 << 30)
223#define OMAP4_WKUP_CONTROL_SPARE_R_C2_SHIFT 29
224#define OMAP4_WKUP_CONTROL_SPARE_R_C2_MASK (1 << 29)
225#define OMAP4_WKUP_CONTROL_SPARE_R_C3_SHIFT 28
226#define OMAP4_WKUP_CONTROL_SPARE_R_C3_MASK (1 << 28)
227#define OMAP4_WKUP_CONTROL_SPARE_R_C4_SHIFT 27
228#define OMAP4_WKUP_CONTROL_SPARE_R_C4_MASK (1 << 27)
229#define OMAP4_WKUP_CONTROL_SPARE_R_C5_SHIFT 26
230#define OMAP4_WKUP_CONTROL_SPARE_R_C5_MASK (1 << 26)
231#define OMAP4_WKUP_CONTROL_SPARE_R_C6_SHIFT 25
232#define OMAP4_WKUP_CONTROL_SPARE_R_C6_MASK (1 << 25)
233#define OMAP4_WKUP_CONTROL_SPARE_R_C7_SHIFT 24
234#define OMAP4_WKUP_CONTROL_SPARE_R_C7_MASK (1 << 24)
235
236#endif
diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_wkup_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_wkup_44xx.h
new file mode 100644
index 000000000000..a0af9baec3f7
--- /dev/null
+++ b/arch/arm/mach-omap2/include/mach/ctrl_module_wkup_44xx.h
@@ -0,0 +1,92 @@
1/*
2 * OMAP44xx CTRL_MODULE_WKUP registers and bitfields
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 *
6 * Benoit Cousson (b-cousson@ti.com)
7 * Santosh Shilimkar (santosh.shilimkar@ti.com)
8 *
9 * This file is automatically generated from the OMAP hardware databases.
10 * We respectfully ask that any modifications to this file be coordinated
11 * with the public linux-omap@vger.kernel.org mailing list and the
12 * authors above to ensure that the autogeneration scripts are kept
13 * up-to-date with the file contents.
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20#ifndef __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_WKUP_44XX_H
21#define __ARCH_ARM_MACH_OMAP2_CTRL_MODULE_WKUP_44XX_H
22
23
24/* Base address */
25#define OMAP4_CTRL_MODULE_WKUP 0x4a30c000
26
27/* Registers offset */
28#define OMAP4_CTRL_MODULE_WKUP_IP_REVISION 0x0000
29#define OMAP4_CTRL_MODULE_WKUP_IP_HWINFO 0x0004
30#define OMAP4_CTRL_MODULE_WKUP_IP_SYSCONFIG 0x0010
31#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_0 0x0460
32#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_1 0x0464
33#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_2 0x0468
34#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_3 0x046c
35#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_4 0x0470
36#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_5 0x0474
37#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_6 0x0478
38#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_7 0x047c
39#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_8 0x0480
40#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_9 0x0484
41#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_10 0x0488
42#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_11 0x048c
43#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_12 0x0490
44#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_13 0x0494
45#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_14 0x0498
46#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_15 0x049c
47#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_16 0x04a0
48#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_17 0x04a4
49#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_18 0x04a8
50#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_19 0x04ac
51#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_20 0x04b0
52#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_21 0x04b4
53#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_22 0x04b8
54#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_23 0x04bc
55#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_24 0x04c0
56#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_25 0x04c4
57#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_26 0x04c8
58#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_27 0x04cc
59#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_28 0x04d0
60#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_29 0x04d4
61#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_30 0x04d8
62#define OMAP4_CTRL_MODULE_WKUP_CONF_DEBUG_SEL_TST_31 0x04dc
63
64/* Registers shifts and masks */
65
66/* IP_REVISION */
67#define OMAP4_IP_REV_SCHEME_SHIFT 30
68#define OMAP4_IP_REV_SCHEME_MASK (0x3 << 30)
69#define OMAP4_IP_REV_FUNC_SHIFT 16
70#define OMAP4_IP_REV_FUNC_MASK (0xfff << 16)
71#define OMAP4_IP_REV_RTL_SHIFT 11
72#define OMAP4_IP_REV_RTL_MASK (0x1f << 11)
73#define OMAP4_IP_REV_MAJOR_SHIFT 8
74#define OMAP4_IP_REV_MAJOR_MASK (0x7 << 8)
75#define OMAP4_IP_REV_CUSTOM_SHIFT 6
76#define OMAP4_IP_REV_CUSTOM_MASK (0x3 << 6)
77#define OMAP4_IP_REV_MINOR_SHIFT 0
78#define OMAP4_IP_REV_MINOR_MASK (0x3f << 0)
79
80/* IP_HWINFO */
81#define OMAP4_IP_HWINFO_SHIFT 0
82#define OMAP4_IP_HWINFO_MASK (0xffffffff << 0)
83
84/* IP_SYSCONFIG */
85#define OMAP4_IP_SYSCONFIG_IDLEMODE_SHIFT 2
86#define OMAP4_IP_SYSCONFIG_IDLEMODE_MASK (0x3 << 2)
87
88/* CONF_DEBUG_SEL_TST_0 */
89#define OMAP4_WKUP_MODE_SHIFT 0
90#define OMAP4_WKUP_MODE_MASK (1 << 0)
91
92#endif
diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/mach-omap2/include/mach/debug-macro.S
index 09331bbbda52..48adfe9fe4f3 100644
--- a/arch/arm/mach-omap2/include/mach/debug-macro.S
+++ b/arch/arm/mach-omap2/include/mach/debug-macro.S
@@ -19,6 +19,9 @@
19 19
20#define UART_OFFSET(addr) ((addr) & 0x00ffffff) 20#define UART_OFFSET(addr) ((addr) & 0x00ffffff)
21 21
22#define omap_uart_v2p(x) ((x) - PAGE_OFFSET + PLAT_PHYS_OFFSET)
23#define omap_uart_p2v(x) ((x) - PLAT_PHYS_OFFSET + PAGE_OFFSET)
24
22 .pushsection .data 25 .pushsection .data
23omap_uart_phys: .word 0 26omap_uart_phys: .word 0
24omap_uart_virt: .word 0 27omap_uart_virt: .word 0
@@ -31,95 +34,106 @@ omap_uart_lsr: .word 0
31 * the desired UART phys and virt addresses temporarily into 34 * the desired UART phys and virt addresses temporarily into
32 * the omap_uart_phys and omap_uart_virt above. 35 * the omap_uart_phys and omap_uart_virt above.
33 */ 36 */
34 .macro addruart, rx, tmp 37 .macro addruart, rp, rv
35 38
36 /* Use omap_uart_phys/virt if already configured */ 39 /* Use omap_uart_phys/virt if already configured */
3710: mrc p15, 0, \rx, c1, c0 4010: mrc p15, 0, \rp, c1, c0
38 tst \rx, #1 @ MMU enabled? 41 tst \rp, #1 @ MMU enabled?
39 ldreq \rx, =__virt_to_phys(omap_uart_phys) @ physical base address 42 ldreq \rp, =omap_uart_v2p(omap_uart_phys) @ MMU disabled
40 ldrne \rx, =omap_uart_virt @ virtual base address 43 ldrne \rp, =omap_uart_phys @ MMU enabled
41 ldr \rx, [\rx, #0] 44 add \rv, \rp, #4 @ omap_uart_virt
42 cmp \rx, #0 @ is port configured? 45 ldr \rp, [\rp, #0]
46 ldr \rv, [\rv, #0]
47 cmp \rp, #0 @ is port configured?
48 cmpne \rv, #0
43 bne 99f @ already configured 49 bne 99f @ already configured
44 50
45 /* Check the debug UART configuration set in uncompress.h */ 51 /* Check the debug UART configuration set in uncompress.h */
46 mrc p15, 0, \rx, c1, c0 52 mrc p15, 0, \rp, c1, c0
47 tst \rx, #1 @ MMU enabled? 53 tst \rp, #1 @ MMU enabled?
48 ldreq \rx, =OMAP_UART_INFO 54 ldreq \rp, =OMAP_UART_INFO @ MMU not enabled
49 ldrne \rx, =__phys_to_virt(OMAP_UART_INFO) 55 ldrne \rp, =omap_uart_p2v(OMAP_UART_INFO) @ MMU enabled
50 ldr \rx, [\rx, #0] 56 ldr \rp, [\rp, #0]
51 57
52 /* Select the UART to use based on the UART1 scratchpad value */ 58 /* Select the UART to use based on the UART1 scratchpad value */
53 cmp \rx, #0 @ no port configured? 59 cmp \rp, #0 @ no port configured?
54 beq 21f @ if none, try to use UART1 60 beq 21f @ if none, try to use UART1
55 cmp \rx, #OMAP2UART1 @ OMAP2/3/4UART1 61 cmp \rp, #OMAP2UART1 @ OMAP2/3/4UART1
56 beq 21f @ configure OMAP2/3/4UART1 62 beq 21f @ configure OMAP2/3/4UART1
57 cmp \rx, #OMAP2UART2 @ OMAP2/3/4UART2 63 cmp \rp, #OMAP2UART2 @ OMAP2/3/4UART2
58 beq 22f @ configure OMAP2/3/4UART2 64 beq 22f @ configure OMAP2/3/4UART2
59 cmp \rx, #OMAP2UART3 @ only on 24xx 65 cmp \rp, #OMAP2UART3 @ only on 24xx
60 beq 23f @ configure OMAP2UART3 66 beq 23f @ configure OMAP2UART3
61 cmp \rx, #OMAP3UART3 @ only on 34xx 67 cmp \rp, #OMAP3UART3 @ only on 34xx
62 beq 33f @ configure OMAP3UART3 68 beq 33f @ configure OMAP3UART3
63 cmp \rx, #OMAP4UART3 @ only on 44xx 69 cmp \rp, #OMAP4UART3 @ only on 44xx
64 beq 43f @ configure OMAP4UART3 70 beq 43f @ configure OMAP4UART3
65 cmp \rx, #OMAP3UART4 @ only on 36xx 71 cmp \rp, #OMAP3UART4 @ only on 36xx
66 beq 34f @ configure OMAP3UART4 72 beq 34f @ configure OMAP3UART4
67 cmp \rx, #OMAP4UART4 @ only on 44xx 73 cmp \rp, #OMAP4UART4 @ only on 44xx
68 beq 44f @ configure OMAP4UART4 74 beq 44f @ configure OMAP4UART4
69 cmp \rx, #ZOOM_UART @ only on zoom2/3 75 cmp \rp, #TI816XUART1 @ ti816x UART offsets different
76 beq 81f @ configure UART1
77 cmp \rp, #TI816XUART2 @ ti816x UART offsets different
78 beq 82f @ configure UART2
79 cmp \rp, #TI816XUART3 @ ti816x UART offsets different
80 beq 83f @ configure UART3
81 cmp \rp, #ZOOM_UART @ only on zoom2/3
70 beq 95f @ configure ZOOM_UART 82 beq 95f @ configure ZOOM_UART
71 83
72 /* Configure the UART offset from the phys/virt base */ 84 /* Configure the UART offset from the phys/virt base */
7321: mov \rx, #UART_OFFSET(OMAP2_UART1_BASE) @ omap2/3/4 8521: mov \rp, #UART_OFFSET(OMAP2_UART1_BASE) @ omap2/3/4
86 b 98f
8722: mov \rp, #UART_OFFSET(OMAP2_UART2_BASE) @ omap2/3/4
88 b 98f
8923: mov \rp, #UART_OFFSET(OMAP2_UART3_BASE)
90 b 98f
9133: mov \rp, #UART_OFFSET(OMAP3_UART1_BASE)
92 add \rp, \rp, #0x00fb0000
93 add \rp, \rp, #0x00006000 @ OMAP3_UART3_BASE
74 b 98f 94 b 98f
7522: mov \rx, #UART_OFFSET(OMAP2_UART2_BASE) @ omap2/3/4 9534: mov \rp, #UART_OFFSET(OMAP3_UART1_BASE)
96 add \rp, \rp, #0x00fb0000
97 add \rp, \rp, #0x00028000 @ OMAP3_UART4_BASE
76 b 98f 98 b 98f
7723: mov \rx, #UART_OFFSET(OMAP2_UART3_BASE) 9943: mov \rp, #UART_OFFSET(OMAP4_UART3_BASE)
78 b 98f 100 b 98f
7933: mov \rx, #UART_OFFSET(OMAP3_UART1_BASE) 10144: mov \rp, #UART_OFFSET(OMAP4_UART4_BASE)
80 add \rx, \rx, #0x00fb0000
81 add \rx, \rx, #0x00006000 @ OMAP3_UART3_BASE
82 b 98f 102 b 98f
8334: mov \rx, #UART_OFFSET(OMAP3_UART1_BASE) 10381: mov \rp, #UART_OFFSET(TI816X_UART1_BASE)
84 add \rx, \rx, #0x00fb0000
85 add \rx, \rx, #0x00028000 @ OMAP3_UART4_BASE
86 b 98f 104 b 98f
8743: mov \rx, #UART_OFFSET(OMAP4_UART3_BASE) 10582: mov \rp, #UART_OFFSET(TI816X_UART2_BASE)
88 b 98f 106 b 98f
8944: mov \rx, #UART_OFFSET(OMAP4_UART4_BASE) 10783: mov \rp, #UART_OFFSET(TI816X_UART3_BASE)
90 b 98f 108 b 98f
9195: ldr \rx, =ZOOM_UART_BASE 10995: ldr \rp, =ZOOM_UART_BASE
92 mrc p15, 0, \tmp, c1, c0 110 mrc p15, 0, \rv, c1, c0
93 tst \tmp, #1 @ MMU enabled? 111 tst \rv, #1 @ MMU enabled?
94 ldreq \tmp, =__virt_to_phys(omap_uart_phys) 112 ldreq \rv, =omap_uart_v2p(omap_uart_phys) @ MMU disabled
95 ldrne \tmp, =omap_uart_phys 113 ldrne \rv, =omap_uart_phys @ MMU enabled
96 str \rx, [\tmp, #0] 114 str \rp, [\rv, #0]
97 ldr \rx, =ZOOM_UART_VIRT 115 ldr \rp, =ZOOM_UART_VIRT
98 ldreq \tmp, =__virt_to_phys(omap_uart_virt) 116 add \rv, \rv, #4 @ omap_uart_virt
99 ldrne \tmp, =omap_uart_virt 117 str \rp, [\rv, #0]
100 str \rx, [\tmp, #0] 118 mov \rp, #(UART_LSR << ZOOM_PORT_SHIFT)
101 mov \rx, #(UART_LSR << ZOOM_PORT_SHIFT) 119 add \rv, \rv, #4 @ omap_uart_lsr
102 ldreq \tmp, =__virt_to_phys(omap_uart_lsr) 120 str \rp, [\rv, #0]
103 ldrne \tmp, =omap_uart_lsr
104 str \rx, [\tmp, #0]
105 b 10b 121 b 10b
106 122
107 /* Store both phys and virt address for the uart */ 123 /* Store both phys and virt address for the uart */
10898: add \rx, \rx, #0x48000000 @ phys base 12498: add \rp, \rp, #0x48000000 @ phys base
109 mrc p15, 0, \tmp, c1, c0 125 mrc p15, 0, \rv, c1, c0
110 tst \tmp, #1 @ MMU enabled? 126 tst \rv, #1 @ MMU enabled?
111 ldreq \tmp, =__virt_to_phys(omap_uart_phys) 127 ldreq \rv, =omap_uart_v2p(omap_uart_phys) @ MMU disabled
112 ldrne \tmp, =omap_uart_phys 128 ldrne \rv, =omap_uart_phys @ MMU enabled
113 str \rx, [\tmp, #0] 129 str \rp, [\rv, #0]
114 sub \rx, \rx, #0x48000000 @ phys base 130 sub \rp, \rp, #0x48000000 @ phys base
115 add \rx, \rx, #0xfa000000 @ virt base 131 add \rp, \rp, #0xfa000000 @ virt base
116 ldreq \tmp, =__virt_to_phys(omap_uart_virt) 132 add \rv, \rv, #4 @ omap_uart_virt
117 ldrne \tmp, =omap_uart_virt 133 str \rp, [\rv, #0]
118 str \rx, [\tmp, #0] 134 mov \rp, #(UART_LSR << OMAP_PORT_SHIFT)
119 mov \rx, #(UART_LSR << OMAP_PORT_SHIFT) 135 add \rv, \rv, #4 @ omap_uart_lsr
120 ldreq \tmp, =__virt_to_phys(omap_uart_lsr) 136 str \rp, [\rv, #0]
121 ldrne \tmp, =omap_uart_lsr
122 str \rx, [\tmp, #0]
123 137
124 b 10b 138 b 10b
12599: 13999:
@@ -131,9 +145,9 @@ omap_uart_lsr: .word 0
131 145
132 .macro busyuart,rd,rx 146 .macro busyuart,rd,rx
1331001: mrc p15, 0, \rd, c1, c0 1471001: mrc p15, 0, \rd, c1, c0
134 tst \rd, #1 @ MMU enabled? 148 tst \rd, #1 @ MMU enabled?
135 ldreq \rd, =__virt_to_phys(omap_uart_lsr) 149 ldreq \rd, =omap_uart_v2p(omap_uart_lsr) @ MMU disabled
136 ldrne \rd, =omap_uart_lsr 150 ldrne \rd, =omap_uart_lsr @ MMU enabled
137 ldr \rd, [\rd, #0] 151 ldr \rd, [\rd, #0]
138 ldrb \rd, [\rx, \rd] 152 ldrb \rd, [\rx, \rd]
139 and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) 153 and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
diff --git a/arch/arm/mach-omap2/include/mach/entry-macro.S b/arch/arm/mach-omap2/include/mach/entry-macro.S
index 06e64e1fc28a..a48690b90990 100644
--- a/arch/arm/mach-omap2/include/mach/entry-macro.S
+++ b/arch/arm/mach-omap2/include/mach/entry-macro.S
@@ -38,41 +38,13 @@
38 */ 38 */
39 39
40#ifdef MULTI_OMAP2 40#ifdef MULTI_OMAP2
41 .pushsection .data 41 /*
42omap_irq_base: .word 0 42 * Configure the interrupt base on the first interrupt.
43 .popsection 43 * See also omap_irq_base_init for setting omap_irq_base.
44 44 */
45 /* Configure the interrupt base on the first interrupt */
46 .macro get_irqnr_preamble, base, tmp 45 .macro get_irqnr_preamble, base, tmp
479:
48 ldr \base, =omap_irq_base @ irq base address 46 ldr \base, =omap_irq_base @ irq base address
49 ldr \base, [\base, #0] @ irq base value 47 ldr \base, [\base, #0] @ irq base value
50 cmp \base, #0 @ already configured?
51 bne 9997f @ nothing to do
52
53 mrc p15, 0, \tmp, c0, c0, 0 @ get processor revision
54 and \tmp, \tmp, #0x000f0000 @ only check architecture
55 cmp \tmp, #0x00070000 @ is v6?
56 beq 2400f @ found v6 so it's omap24xx
57 mrc p15, 0, \tmp, c0, c0, 0 @ get processor revision
58 and \tmp, \tmp, #0x000000f0 @ check cortex 8 or 9
59 cmp \tmp, #0x00000080 @ cortex A-8?
60 beq 3400f @ found A-8 so it's omap34xx
61 cmp \tmp, #0x00000090 @ cortex A-9?
62 beq 4400f @ found A-9 so it's omap44xx
632400: ldr \base, =OMAP2_IRQ_BASE
64 ldr \tmp, =omap_irq_base
65 str \base, [\tmp, #0]
66 b 9b
673400: ldr \base, =OMAP3_IRQ_BASE
68 ldr \tmp, =omap_irq_base
69 str \base, [\tmp, #0]
70 b 9b
714400: ldr \base, =OMAP4_IRQ_BASE
72 ldr \tmp, =omap_irq_base
73 str \base, [\tmp, #0]
74 b 9b
759997:
76 .endm 48 .endm
77 49
78 /* Check the pending interrupts. Note that base already set */ 50 /* Check the pending interrupts. Note that base already set */
@@ -89,6 +61,14 @@ omap_irq_base: .word 0
89 bne 9998f 61 bne 9998f
90 ldr \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */ 62 ldr \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */
91 cmp \irqnr, #0x0 63 cmp \irqnr, #0x0
64 bne 9998f
65
66 /*
67 * ti816x has additional IRQ pending register. Checking this
68 * register on omap2 & omap3 has no effect (read as 0).
69 */
70 ldr \irqnr, [\base, #0xf8] /* IRQ pending reg 4 */
71 cmp \irqnr, #0x0
929998: 729998:
93 ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] 73 ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET]
94 and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */ 74 and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */
@@ -105,6 +85,35 @@ omap_irq_base: .word 0
1059999: 859999:
106 .endm 86 .endm
107 87
88#ifdef CONFIG_SMP
89 /* We assume that irqstat (the raw value of the IRQ acknowledge
90 * register) is preserved from the macro above.
91 * If there is an IPI, we immediately signal end of interrupt
92 * on the controller, since this requires the original irqstat
93 * value which we won't easily be able to recreate later.
94 */
95
96 .macro test_for_ipi, irqnr, irqstat, base, tmp
97 bic \irqnr, \irqstat, #0x1c00
98 cmp \irqnr, #16
99 it cc
100 strcc \irqstat, [\base, #GIC_CPU_EOI]
101 it cs
102 cmpcs \irqnr, \irqnr
103 .endm
104
105 /* As above, this assumes that irqstat and base are preserved */
106
107 .macro test_for_ltirq, irqnr, irqstat, base, tmp
108 bic \irqnr, \irqstat, #0x1c00
109 mov \tmp, #0
110 cmp \irqnr, #29
111 itt eq
112 moveq \tmp, #1
113 streq \irqstat, [\base, #GIC_CPU_EOI]
114 cmp \tmp, #0
115 .endm
116#endif /* CONFIG_SMP */
108 117
109#else /* MULTI_OMAP2 */ 118#else /* MULTI_OMAP2 */
110 119
@@ -132,6 +141,11 @@ omap_irq_base: .word 0
132 bne 9999f 141 bne 9999f
133 ldr \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */ 142 ldr \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */
134 cmp \irqnr, #0x0 143 cmp \irqnr, #0x0
144#ifdef CONFIG_SOC_OMAPTI816X
145 bne 9999f
146 ldr \irqnr, [\base, #0xf8] /* IRQ pending reg 4 */
147 cmp \irqnr, #0x0
148#endif
1359999: 1499999:
136 ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] 150 ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET]
137 and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */ 151 and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */
@@ -141,74 +155,16 @@ omap_irq_base: .word 0
141 155
142 156
143#ifdef CONFIG_ARCH_OMAP4 157#ifdef CONFIG_ARCH_OMAP4
158#define HAVE_GET_IRQNR_PREAMBLE
159#include <asm/hardware/entry-macro-gic.S>
144 160
145 .macro get_irqnr_preamble, base, tmp 161 .macro get_irqnr_preamble, base, tmp
146 ldr \base, =OMAP4_IRQ_BASE 162 ldr \base, =OMAP4_IRQ_BASE
147 .endm 163 .endm
148 164
149 /*
150 * The interrupt numbering scheme is defined in the
151 * interrupt controller spec. To wit:
152 *
153 * Interrupts 0-15 are IPI
154 * 16-28 are reserved
155 * 29-31 are local. We allow 30 to be used for the watchdog.
156 * 32-1020 are global
157 * 1021-1022 are reserved
158 * 1023 is "spurious" (no interrupt)
159 *
160 * For now, we ignore all local interrupts so only return an
161 * interrupt if it's between 30 and 1020. The test_for_ipi
162 * routine below will pick up on IPIs.
163 * A simple read from the controller will tell us the number
164 * of the highest priority enabled interrupt.
165 * We then just need to check whether it is in the
166 * valid range for an IRQ (30-1020 inclusive).
167 */
168 .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
169 ldr \irqstat, [\base, #GIC_CPU_INTACK]
170
171 ldr \tmp, =1021
172
173 bic \irqnr, \irqstat, #0x1c00
174
175 cmp \irqnr, #29
176 cmpcc \irqnr, \irqnr
177 cmpne \irqnr, \tmp
178 cmpcs \irqnr, \irqnr
179 .endm
180#endif 165#endif
181#endif /* MULTI_OMAP2 */
182 166
183#ifdef CONFIG_SMP 167#endif /* MULTI_OMAP2 */
184 /* We assume that irqstat (the raw value of the IRQ acknowledge
185 * register) is preserved from the macro above.
186 * If there is an IPI, we immediately signal end of interrupt
187 * on the controller, since this requires the original irqstat
188 * value which we won't easily be able to recreate later.
189 */
190
191 .macro test_for_ipi, irqnr, irqstat, base, tmp
192 bic \irqnr, \irqstat, #0x1c00
193 cmp \irqnr, #16
194 it cc
195 strcc \irqstat, [\base, #GIC_CPU_EOI]
196 it cs
197 cmpcs \irqnr, \irqnr
198 .endm
199
200 /* As above, this assumes that irqstat and base are preserved */
201
202 .macro test_for_ltirq, irqnr, irqstat, base, tmp
203 bic \irqnr, \irqstat, #0x1c00
204 mov \tmp, #0
205 cmp \irqnr, #29
206 itt eq
207 moveq \tmp, #1
208 streq \irqstat, [\base, #GIC_CPU_EOI]
209 cmp \tmp, #0
210 .endm
211#endif /* CONFIG_SMP */
212 168
213 .macro irq_prio_table 169 .macro irq_prio_table
214 .endm 170 .endm
diff --git a/arch/arm/mach-omap2/include/mach/omap4-common.h b/arch/arm/mach-omap2/include/mach/omap4-common.h
index 2744dfee1ff4..e4bd87619734 100644
--- a/arch/arm/mach-omap2/include/mach/omap4-common.h
+++ b/arch/arm/mach-omap2/include/mach/omap4-common.h
@@ -17,17 +17,27 @@
17 * wfi used in low power code. Directly opcode is used instead 17 * wfi used in low power code. Directly opcode is used instead
18 * of instruction to avoid mulit-omap build break 18 * of instruction to avoid mulit-omap build break
19 */ 19 */
20#ifdef CONFIG_THUMB2_KERNEL
21#define do_wfi() __asm__ __volatile__ ("wfi" : : : "memory")
22#else
20#define do_wfi() \ 23#define do_wfi() \
21 __asm__ __volatile__ (".word 0xe320f003" : : : "memory") 24 __asm__ __volatile__ (".word 0xe320f003" : : : "memory")
25#endif
22 26
23#ifdef CONFIG_CACHE_L2X0 27#ifdef CONFIG_CACHE_L2X0
24extern void __iomem *l2cache_base; 28extern void __iomem *l2cache_base;
25#endif 29#endif
26 30
27extern void __iomem *gic_cpu_base_addr;
28extern void __iomem *gic_dist_base_addr; 31extern void __iomem *gic_dist_base_addr;
29 32
30extern void __init gic_init_irq(void); 33extern void __init gic_init_irq(void);
31extern void omap_smc1(u32 fn, u32 arg); 34extern void omap_smc1(u32 fn, u32 arg);
32 35
36#ifdef CONFIG_SMP
37/* Needed for secondary core boot */
38extern void omap_secondary_startup(void);
39extern u32 omap_modify_auxcoreboot0(u32 set_mask, u32 clear_mask);
40extern void omap_auxcoreboot_addr(u32 cpu_addr);
41extern u32 omap_read_auxcoreboot0(void);
42#endif
33#endif 43#endif
diff --git a/arch/arm/mach-omap2/include/mach/vmalloc.h b/arch/arm/mach-omap2/include/mach/vmalloc.h
index 9ce9b6e8ad23..866319947760 100644
--- a/arch/arm/mach-omap2/include/mach/vmalloc.h
+++ b/arch/arm/mach-omap2/include/mach/vmalloc.h
@@ -17,4 +17,4 @@
17 * along with this program; if not, write to the Free Software 17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */ 19 */
20#define VMALLOC_END (PAGE_OFFSET + 0x38000000) 20#define VMALLOC_END 0xf8000000UL
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index b9ea70bce563..441e79d043a7 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -30,21 +30,19 @@
30 30
31#include <plat/sram.h> 31#include <plat/sram.h>
32#include <plat/sdrc.h> 32#include <plat/sdrc.h>
33#include <plat/gpmc.h>
34#include <plat/serial.h> 33#include <plat/serial.h>
35 34
36#include "clock2xxx.h" 35#include "clock2xxx.h"
37#include "clock3xxx.h" 36#include "clock3xxx.h"
38#include "clock44xx.h" 37#include "clock44xx.h"
38#include "io.h"
39 39
40#include <plat/omap-pm.h> 40#include <plat/omap-pm.h>
41#include <plat/powerdomain.h> 41#include "powerdomain.h"
42#include "powerdomains.h"
43
44#include <plat/clockdomain.h>
45#include "clockdomains.h"
46 42
43#include "clockdomain.h"
47#include <plat/omap_hwmod.h> 44#include <plat/omap_hwmod.h>
45#include <plat/multi.h>
48 46
49/* 47/*
50 * The machine specific code may provide the extra mapping besides the 48 * The machine specific code may provide the extra mapping besides the
@@ -67,7 +65,7 @@ static struct map_desc omap24xx_io_desc[] __initdata = {
67 }, 65 },
68}; 66};
69 67
70#ifdef CONFIG_ARCH_OMAP2420 68#ifdef CONFIG_SOC_OMAP2420
71static struct map_desc omap242x_io_desc[] __initdata = { 69static struct map_desc omap242x_io_desc[] __initdata = {
72 { 70 {
73 .virtual = DSP_MEM_2420_VIRT, 71 .virtual = DSP_MEM_2420_VIRT,
@@ -91,7 +89,7 @@ static struct map_desc omap242x_io_desc[] __initdata = {
91 89
92#endif 90#endif
93 91
94#ifdef CONFIG_ARCH_OMAP2430 92#ifdef CONFIG_SOC_OMAP2430
95static struct map_desc omap243x_io_desc[] __initdata = { 93static struct map_desc omap243x_io_desc[] __initdata = {
96 { 94 {
97 .virtual = L4_WK_243X_VIRT, 95 .virtual = L4_WK_243X_VIRT,
@@ -176,6 +174,18 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
176#endif 174#endif
177}; 175};
178#endif 176#endif
177
178#ifdef CONFIG_SOC_OMAPTI816X
179static struct map_desc omapti816x_io_desc[] __initdata = {
180 {
181 .virtual = L4_34XX_VIRT,
182 .pfn = __phys_to_pfn(L4_34XX_PHYS),
183 .length = L4_34XX_SIZE,
184 .type = MT_DEVICE
185 },
186};
187#endif
188
179#ifdef CONFIG_ARCH_OMAP4 189#ifdef CONFIG_ARCH_OMAP4
180static struct map_desc omap44xx_io_desc[] __initdata = { 190static struct map_desc omap44xx_io_desc[] __initdata = {
181 { 191 {
@@ -242,7 +252,7 @@ static void __init _omap2_map_common_io(void)
242 omap_sram_init(); 252 omap_sram_init();
243} 253}
244 254
245#ifdef CONFIG_ARCH_OMAP2420 255#ifdef CONFIG_SOC_OMAP2420
246void __init omap242x_map_common_io(void) 256void __init omap242x_map_common_io(void)
247{ 257{
248 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); 258 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
@@ -251,7 +261,7 @@ void __init omap242x_map_common_io(void)
251} 261}
252#endif 262#endif
253 263
254#ifdef CONFIG_ARCH_OMAP2430 264#ifdef CONFIG_SOC_OMAP2430
255void __init omap243x_map_common_io(void) 265void __init omap243x_map_common_io(void)
256{ 266{
257 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); 267 iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
@@ -268,6 +278,14 @@ void __init omap34xx_map_common_io(void)
268} 278}
269#endif 279#endif
270 280
281#ifdef CONFIG_SOC_OMAPTI816X
282void __init omapti816x_map_common_io(void)
283{
284 iotable_init(omapti816x_io_desc, ARRAY_SIZE(omapti816x_io_desc));
285 _omap2_map_common_io();
286}
287#endif
288
271#ifdef CONFIG_ARCH_OMAP4 289#ifdef CONFIG_ARCH_OMAP4
272void __init omap44xx_map_common_io(void) 290void __init omap44xx_map_common_io(void)
273{ 291{
@@ -296,7 +314,7 @@ static int __init _omap2_init_reprogram_sdrc(void)
296 return 0; 314 return 0;
297 315
298 dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck"); 316 dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
299 if (!dpll3_m2_ck) 317 if (IS_ERR(dpll3_m2_ck))
300 return -EINVAL; 318 return -EINVAL;
301 319
302 rate = clk_get_rate(dpll3_m2_ck); 320 rate = clk_get_rate(dpll3_m2_ck);
@@ -310,21 +328,79 @@ static int __init _omap2_init_reprogram_sdrc(void)
310 return v; 328 return v;
311} 329}
312 330
313void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0, 331static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
314 struct omap_sdrc_params *sdrc_cs1)
315{ 332{
316 u8 skip_setup_idle = 0; 333 return omap_hwmod_set_postsetup_state(oh, *(u8 *)data);
334}
317 335
318 pwrdm_init(powerdomains_omap); 336void __iomem *omap_irq_base;
319 clkdm_init(clockdomains_omap, clkdm_autodeps); 337
320 if (cpu_is_omap242x()) 338/*
339 * Initialize asm_irq_base for entry-macro.S
340 */
341static inline void omap_irq_base_init(void)
342{
343 if (cpu_is_omap24xx())
344 omap_irq_base = OMAP2_L4_IO_ADDRESS(OMAP24XX_IC_BASE);
345 else if (cpu_is_omap34xx())
346 omap_irq_base = OMAP2_L4_IO_ADDRESS(OMAP34XX_IC_BASE);
347 else if (cpu_is_omap44xx())
348 omap_irq_base = OMAP2_L4_IO_ADDRESS(OMAP44XX_GIC_CPU_BASE);
349 else
350 pr_err("Could not initialize omap_irq_base\n");
351}
352
353void __init omap2_init_common_infrastructure(void)
354{
355 u8 postsetup_state;
356
357 if (cpu_is_omap242x()) {
358 omap2xxx_powerdomains_init();
359 omap2xxx_clockdomains_init();
321 omap2420_hwmod_init(); 360 omap2420_hwmod_init();
322 else if (cpu_is_omap243x()) 361 } else if (cpu_is_omap243x()) {
362 omap2xxx_powerdomains_init();
363 omap2xxx_clockdomains_init();
323 omap2430_hwmod_init(); 364 omap2430_hwmod_init();
324 else if (cpu_is_omap34xx()) 365 } else if (cpu_is_omap34xx()) {
366 omap3xxx_powerdomains_init();
367 omap3xxx_clockdomains_init();
325 omap3xxx_hwmod_init(); 368 omap3xxx_hwmod_init();
326 /* The OPP tables have to be registered before a clk init */ 369 } else if (cpu_is_omap44xx()) {
327 omap_pm_if_early_init(mpu_opps, dsp_opps, l3_opps); 370 omap44xx_powerdomains_init();
371 omap44xx_clockdomains_init();
372 omap44xx_hwmod_init();
373 } else {
374 pr_err("Could not init hwmod data - unknown SoC\n");
375 }
376
377 /* Set the default postsetup state for all hwmods */
378#ifdef CONFIG_PM_RUNTIME
379 postsetup_state = _HWMOD_STATE_IDLE;
380#else
381 postsetup_state = _HWMOD_STATE_ENABLED;
382#endif
383 omap_hwmod_for_each(_set_hwmod_postsetup_state, &postsetup_state);
384
385 /*
386 * Set the default postsetup state for unusual modules (like
387 * MPU WDT).
388 *
389 * The postsetup_state is not actually used until
390 * omap_hwmod_late_init(), so boards that desire full watchdog
391 * coverage of kernel initialization can reprogram the
392 * postsetup_state between the calls to
393 * omap2_init_common_infra() and omap2_init_common_devices().
394 *
395 * XXX ideally we could detect whether the MPU WDT was currently
396 * enabled here and make this conditional
397 */
398 postsetup_state = _HWMOD_STATE_DISABLED;
399 omap_hwmod_for_each_by_class("wd_timer",
400 _set_hwmod_postsetup_state,
401 &postsetup_state);
402
403 omap_pm_if_early_init();
328 404
329 if (cpu_is_omap2420()) 405 if (cpu_is_omap2420())
330 omap2420_clk_init(); 406 omap2420_clk_init();
@@ -335,19 +411,56 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0,
335 else if (cpu_is_omap44xx()) 411 else if (cpu_is_omap44xx())
336 omap4xxx_clk_init(); 412 omap4xxx_clk_init();
337 else 413 else
338 pr_err("Could not init clock framework - unknown CPU\n"); 414 pr_err("Could not init clock framework - unknown SoC\n");
339 415}
340 omap_serial_early_init();
341
342#ifndef CONFIG_PM_RUNTIME
343 skip_setup_idle = 1;
344#endif
345 if (cpu_is_omap24xx() || cpu_is_omap34xx()) /* FIXME: OMAP4 */
346 omap_hwmod_late_init(skip_setup_idle);
347 416
348 if (cpu_is_omap24xx() || cpu_is_omap34xx()) { 417void __init omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0,
418 struct omap_sdrc_params *sdrc_cs1)
419{
420 if (cpu_is_omap24xx() || omap3_has_sdrc()) {
349 omap2_sdrc_init(sdrc_cs0, sdrc_cs1); 421 omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
350 _omap2_init_reprogram_sdrc(); 422 _omap2_init_reprogram_sdrc();
351 } 423 }
352 gpmc_init(); 424
425 omap_irq_base_init();
426}
427
428/*
429 * NOTE: Please use ioremap + __raw_read/write where possible instead of these
430 */
431
432u8 omap_readb(u32 pa)
433{
434 return __raw_readb(OMAP2_L4_IO_ADDRESS(pa));
435}
436EXPORT_SYMBOL(omap_readb);
437
438u16 omap_readw(u32 pa)
439{
440 return __raw_readw(OMAP2_L4_IO_ADDRESS(pa));
441}
442EXPORT_SYMBOL(omap_readw);
443
444u32 omap_readl(u32 pa)
445{
446 return __raw_readl(OMAP2_L4_IO_ADDRESS(pa));
447}
448EXPORT_SYMBOL(omap_readl);
449
450void omap_writeb(u8 v, u32 pa)
451{
452 __raw_writeb(v, OMAP2_L4_IO_ADDRESS(pa));
453}
454EXPORT_SYMBOL(omap_writeb);
455
456void omap_writew(u16 v, u32 pa)
457{
458 __raw_writew(v, OMAP2_L4_IO_ADDRESS(pa));
459}
460EXPORT_SYMBOL(omap_writew);
461
462void omap_writel(u32 v, u32 pa)
463{
464 __raw_writel(v, OMAP2_L4_IO_ADDRESS(pa));
353} 465}
466EXPORT_SYMBOL(omap_writel);
diff --git a/arch/arm/mach-omap2/io.h b/arch/arm/mach-omap2/io.h
new file mode 100644
index 000000000000..fd230c6cded5
--- /dev/null
+++ b/arch/arm/mach-omap2/io.h
@@ -0,0 +1,7 @@
1
2#ifndef __MACH_OMAP2_IO_H__
3#define __MACH_OMAP2_IO_H__
4
5extern int __init omap_sram_init(void);
6
7#endif /* __MACH_OMAP2_IO_H__ */
diff --git a/arch/arm/mach-omap2/iommu2.c b/arch/arm/mach-omap2/iommu2.c
index 14ee686b6492..adb083e41acd 100644
--- a/arch/arm/mach-omap2/iommu2.c
+++ b/arch/arm/mach-omap2/iommu2.c
@@ -145,35 +145,32 @@ static void omap2_iommu_set_twl(struct iommu *obj, bool on)
145 145
146static u32 omap2_iommu_fault_isr(struct iommu *obj, u32 *ra) 146static u32 omap2_iommu_fault_isr(struct iommu *obj, u32 *ra)
147{ 147{
148 int i;
149 u32 stat, da; 148 u32 stat, da;
150 const char *err_msg[] = { 149 u32 errs = 0;
151 "tlb miss",
152 "translation fault",
153 "emulation miss",
154 "table walk fault",
155 "multi hit fault",
156 };
157 150
158 stat = iommu_read_reg(obj, MMU_IRQSTATUS); 151 stat = iommu_read_reg(obj, MMU_IRQSTATUS);
159 stat &= MMU_IRQ_MASK; 152 stat &= MMU_IRQ_MASK;
160 if (!stat) 153 if (!stat) {
154 *ra = 0;
161 return 0; 155 return 0;
156 }
162 157
163 da = iommu_read_reg(obj, MMU_FAULT_AD); 158 da = iommu_read_reg(obj, MMU_FAULT_AD);
164 *ra = da; 159 *ra = da;
165 160
166 dev_err(obj->dev, "%s:\tda:%08x ", __func__, da); 161 if (stat & MMU_IRQ_TLBMISS)
167 162 errs |= OMAP_IOMMU_ERR_TLB_MISS;
168 for (i = 0; i < ARRAY_SIZE(err_msg); i++) { 163 if (stat & MMU_IRQ_TRANSLATIONFAULT)
169 if (stat & (1 << i)) 164 errs |= OMAP_IOMMU_ERR_TRANS_FAULT;
170 printk("%s ", err_msg[i]); 165 if (stat & MMU_IRQ_EMUMISS)
171 } 166 errs |= OMAP_IOMMU_ERR_EMU_MISS;
172 printk("\n"); 167 if (stat & MMU_IRQ_TABLEWALKFAULT)
173 168 errs |= OMAP_IOMMU_ERR_TBLWALK_FAULT;
169 if (stat & MMU_IRQ_MULTIHITFAULT)
170 errs |= OMAP_IOMMU_ERR_MULTIHIT_FAULT;
174 iommu_write_reg(obj, stat, MMU_IRQSTATUS); 171 iommu_write_reg(obj, stat, MMU_IRQSTATUS);
175 172
176 return stat; 173 return errs;
177} 174}
178 175
179static void omap2_tlb_read_cr(struct iommu *obj, struct cr_regs *cr) 176static void omap2_tlb_read_cr(struct iommu *obj, struct cr_regs *cr)
diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c
index 26aeef560aa3..3af2b7a1045e 100644
--- a/arch/arm/mach-omap2/irq.c
+++ b/arch/arm/mach-omap2/irq.c
@@ -47,7 +47,6 @@ static struct omap_irq_bank {
47} __attribute__ ((aligned(4))) irq_banks[] = { 47} __attribute__ ((aligned(4))) irq_banks[] = {
48 { 48 {
49 /* MPU INTC */ 49 /* MPU INTC */
50 .base_reg = 0,
51 .nr_irqs = 96, 50 .nr_irqs = 96,
52 }, 51 },
53}; 52};
@@ -62,8 +61,6 @@ struct omap3_intc_regs {
62 u32 mir[INTCPS_NR_MIR_REGS]; 61 u32 mir[INTCPS_NR_MIR_REGS];
63}; 62};
64 63
65static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)];
66
67/* INTC bank register get/set */ 64/* INTC bank register get/set */
68 65
69static void intc_bank_write_reg(u32 val, struct omap_irq_bank *bank, u16 reg) 66static void intc_bank_write_reg(u32 val, struct omap_irq_bank *bank, u16 reg)
@@ -76,81 +73,18 @@ static u32 intc_bank_read_reg(struct omap_irq_bank *bank, u16 reg)
76 return __raw_readl(bank->base_reg + reg); 73 return __raw_readl(bank->base_reg + reg);
77} 74}
78 75
79static int previous_irq;
80
81/*
82 * On 34xx we can get occasional spurious interrupts if the ack from
83 * an interrupt handler does not get posted before we unmask. Warn about
84 * the interrupt handlers that need to flush posted writes.
85 */
86static int omap_check_spurious(unsigned int irq)
87{
88 u32 sir, spurious;
89
90 sir = intc_bank_read_reg(&irq_banks[0], INTC_SIR);
91 spurious = sir >> 7;
92
93 if (spurious) {
94 printk(KERN_WARNING "Spurious irq %i: 0x%08x, please flush "
95 "posted write for irq %i\n",
96 irq, sir, previous_irq);
97 return spurious;
98 }
99
100 return 0;
101}
102
103/* XXX: FIQ and additional INTC support (only MPU at the moment) */ 76/* XXX: FIQ and additional INTC support (only MPU at the moment) */
104static void omap_ack_irq(unsigned int irq) 77static void omap_ack_irq(struct irq_data *d)
105{ 78{
106 intc_bank_write_reg(0x1, &irq_banks[0], INTC_CONTROL); 79 intc_bank_write_reg(0x1, &irq_banks[0], INTC_CONTROL);
107} 80}
108 81
109static void omap_mask_irq(unsigned int irq) 82static void omap_mask_ack_irq(struct irq_data *d)
110{ 83{
111 int offset = irq & (~(IRQ_BITS_PER_REG - 1)); 84 irq_gc_mask_disable_reg(d);
112 85 omap_ack_irq(d);
113 if (cpu_is_omap34xx()) {
114 int spurious = 0;
115
116 /*
117 * INT_34XX_GPT12_IRQ is also the spurious irq. Maybe because
118 * it is the highest irq number?
119 */
120 if (irq == INT_34XX_GPT12_IRQ)
121 spurious = omap_check_spurious(irq);
122
123 if (!spurious)
124 previous_irq = irq;
125 }
126
127 irq &= (IRQ_BITS_PER_REG - 1);
128
129 intc_bank_write_reg(1 << irq, &irq_banks[0], INTC_MIR_SET0 + offset);
130} 86}
131 87
132static void omap_unmask_irq(unsigned int irq)
133{
134 int offset = irq & (~(IRQ_BITS_PER_REG - 1));
135
136 irq &= (IRQ_BITS_PER_REG - 1);
137
138 intc_bank_write_reg(1 << irq, &irq_banks[0], INTC_MIR_CLEAR0 + offset);
139}
140
141static void omap_mask_ack_irq(unsigned int irq)
142{
143 omap_mask_irq(irq);
144 omap_ack_irq(irq);
145}
146
147static struct irq_chip omap_irq_chip = {
148 .name = "INTC",
149 .ack = omap_mask_ack_irq,
150 .mask = omap_mask_irq,
151 .unmask = omap_unmask_irq,
152};
153
154static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank) 88static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank)
155{ 89{
156 unsigned long tmp; 90 unsigned long tmp;
@@ -187,11 +121,31 @@ int omap_irq_pending(void)
187 return 0; 121 return 0;
188} 122}
189 123
124static __init void
125omap_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num)
126{
127 struct irq_chip_generic *gc;
128 struct irq_chip_type *ct;
129
130 gc = irq_alloc_generic_chip("INTC", 1, irq_start, base,
131 handle_level_irq);
132 ct = gc->chip_types;
133 ct->chip.irq_ack = omap_mask_ack_irq;
134 ct->chip.irq_mask = irq_gc_mask_disable_reg;
135 ct->chip.irq_unmask = irq_gc_unmask_enable_reg;
136
137 ct->regs.ack = INTC_CONTROL;
138 ct->regs.enable = INTC_MIR_CLEAR0;
139 ct->regs.disable = INTC_MIR_SET0;
140 irq_setup_generic_chip(gc, IRQ_MSK(num), IRQ_GC_INIT_MASK_CACHE,
141 IRQ_NOREQUEST | IRQ_NOPROBE, 0);
142}
143
190void __init omap_init_irq(void) 144void __init omap_init_irq(void)
191{ 145{
192 unsigned long nr_of_irqs = 0; 146 unsigned long nr_of_irqs = 0;
193 unsigned int nr_banks = 0; 147 unsigned int nr_banks = 0;
194 int i; 148 int i, j;
195 149
196 for (i = 0; i < ARRAY_SIZE(irq_banks); i++) { 150 for (i = 0; i < ARRAY_SIZE(irq_banks); i++) {
197 unsigned long base = 0; 151 unsigned long base = 0;
@@ -204,6 +158,9 @@ void __init omap_init_irq(void)
204 158
205 BUG_ON(!base); 159 BUG_ON(!base);
206 160
161 if (cpu_is_ti816x())
162 bank->nr_irqs = 128;
163
207 /* Static mapping, never released */ 164 /* Static mapping, never released */
208 bank->base_reg = ioremap(base, SZ_4K); 165 bank->base_reg = ioremap(base, SZ_4K);
209 if (!bank->base_reg) { 166 if (!bank->base_reg) {
@@ -213,21 +170,20 @@ void __init omap_init_irq(void)
213 170
214 omap_irq_bank_init_one(bank); 171 omap_irq_bank_init_one(bank);
215 172
173 for (i = 0, j = 0; i < bank->nr_irqs; i += 32, j += 0x20)
174 omap_alloc_gc(bank->base_reg + j, i, 32);
175
216 nr_of_irqs += bank->nr_irqs; 176 nr_of_irqs += bank->nr_irqs;
217 nr_banks++; 177 nr_banks++;
218 } 178 }
219 179
220 printk(KERN_INFO "Total of %ld interrupts on %d active controller%s\n", 180 printk(KERN_INFO "Total of %ld interrupts on %d active controller%s\n",
221 nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : ""); 181 nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : "");
222
223 for (i = 0; i < nr_of_irqs; i++) {
224 set_irq_chip(i, &omap_irq_chip);
225 set_irq_handler(i, handle_level_irq);
226 set_irq_flags(i, IRQF_VALID);
227 }
228} 182}
229 183
230#ifdef CONFIG_ARCH_OMAP3 184#ifdef CONFIG_ARCH_OMAP3
185static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)];
186
231void omap_intc_save_context(void) 187void omap_intc_save_context(void)
232{ 188{
233 int ind = 0, i = 0; 189 int ind = 0, i = 0;
@@ -285,7 +241,10 @@ void omap3_intc_suspend(void)
285 241
286void omap3_intc_prepare_idle(void) 242void omap3_intc_prepare_idle(void)
287{ 243{
288 /* Disable autoidle as it can stall interrupt controller */ 244 /*
245 * Disable autoidle as it can stall interrupt controller,
246 * cf. errata ID i540 for 3430 (all revisions up to 3.1.x)
247 */
289 intc_bank_write_reg(0, &irq_banks[0], INTC_SYSCONFIG); 248 intc_bank_write_reg(0, &irq_banks[0], INTC_SYSCONFIG);
290} 249}
291 250
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
index 42dbfa46e656..86d564a640bb 100644
--- a/arch/arm/mach-omap2/mailbox.c
+++ b/arch/arm/mach-omap2/mailbox.c
@@ -14,12 +14,11 @@
14#include <linux/err.h> 14#include <linux/err.h>
15#include <linux/platform_device.h> 15#include <linux/platform_device.h>
16#include <linux/io.h> 16#include <linux/io.h>
17#include <linux/pm_runtime.h>
17#include <plat/mailbox.h> 18#include <plat/mailbox.h>
18#include <mach/irqs.h> 19#include <mach/irqs.h>
19 20
20#define MAILBOX_REVISION 0x000 21#define MAILBOX_REVISION 0x000
21#define MAILBOX_SYSCONFIG 0x010
22#define MAILBOX_SYSSTATUS 0x014
23#define MAILBOX_MESSAGE(m) (0x040 + 4 * (m)) 22#define MAILBOX_MESSAGE(m) (0x040 + 4 * (m))
24#define MAILBOX_FIFOSTATUS(m) (0x080 + 4 * (m)) 23#define MAILBOX_FIFOSTATUS(m) (0x080 + 4 * (m))
25#define MAILBOX_MSGSTATUS(m) (0x0c0 + 4 * (m)) 24#define MAILBOX_MSGSTATUS(m) (0x0c0 + 4 * (m))
@@ -33,17 +32,6 @@
33#define MAILBOX_IRQ_NEWMSG(m) (1 << (2 * (m))) 32#define MAILBOX_IRQ_NEWMSG(m) (1 << (2 * (m)))
34#define MAILBOX_IRQ_NOTFULL(m) (1 << (2 * (m) + 1)) 33#define MAILBOX_IRQ_NOTFULL(m) (1 << (2 * (m) + 1))
35 34
36/* SYSCONFIG: register bit definition */
37#define AUTOIDLE (1 << 0)
38#define SOFTRESET (1 << 1)
39#define SMARTIDLE (2 << 3)
40#define OMAP4_SOFTRESET (1 << 0)
41#define OMAP4_NOIDLE (1 << 2)
42#define OMAP4_SMARTIDLE (2 << 2)
43
44/* SYSSTATUS: register bit definition */
45#define RESETDONE (1 << 0)
46
47#define MBOX_REG_SIZE 0x120 35#define MBOX_REG_SIZE 0x120
48 36
49#define OMAP4_MBOX_REG_SIZE 0x130 37#define OMAP4_MBOX_REG_SIZE 0x130
@@ -70,8 +58,6 @@ struct omap_mbox2_priv {
70 unsigned long irqdisable; 58 unsigned long irqdisable;
71}; 59};
72 60
73static struct clk *mbox_ick_handle;
74
75static void omap2_mbox_enable_irq(struct omap_mbox *mbox, 61static void omap2_mbox_enable_irq(struct omap_mbox *mbox,
76 omap_mbox_type_t irq); 62 omap_mbox_type_t irq);
77 63
@@ -89,53 +75,13 @@ static inline void mbox_write_reg(u32 val, size_t ofs)
89static int omap2_mbox_startup(struct omap_mbox *mbox) 75static int omap2_mbox_startup(struct omap_mbox *mbox)
90{ 76{
91 u32 l; 77 u32 l;
92 unsigned long timeout;
93 78
94 mbox_ick_handle = clk_get(NULL, "mailboxes_ick"); 79 pm_runtime_enable(mbox->dev->parent);
95 if (IS_ERR(mbox_ick_handle)) { 80 pm_runtime_get_sync(mbox->dev->parent);
96 printk(KERN_ERR "Could not get mailboxes_ick: %ld\n",
97 PTR_ERR(mbox_ick_handle));
98 return PTR_ERR(mbox_ick_handle);
99 }
100 clk_enable(mbox_ick_handle);
101
102 if (cpu_is_omap44xx()) {
103 mbox_write_reg(OMAP4_SOFTRESET, MAILBOX_SYSCONFIG);
104 timeout = jiffies + msecs_to_jiffies(20);
105 do {
106 l = mbox_read_reg(MAILBOX_SYSCONFIG);
107 if (!(l & OMAP4_SOFTRESET))
108 break;
109 } while (!time_after(jiffies, timeout));
110
111 if (l & OMAP4_SOFTRESET) {
112 pr_err("Can't take mailbox out of reset\n");
113 return -ENODEV;
114 }
115 } else {
116 mbox_write_reg(SOFTRESET, MAILBOX_SYSCONFIG);
117 timeout = jiffies + msecs_to_jiffies(20);
118 do {
119 l = mbox_read_reg(MAILBOX_SYSSTATUS);
120 if (l & RESETDONE)
121 break;
122 } while (!time_after(jiffies, timeout));
123
124 if (!(l & RESETDONE)) {
125 pr_err("Can't take mailbox out of reset\n");
126 return -ENODEV;
127 }
128 }
129 81
130 l = mbox_read_reg(MAILBOX_REVISION); 82 l = mbox_read_reg(MAILBOX_REVISION);
131 pr_debug("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, (l & 0x0f)); 83 pr_debug("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, (l & 0x0f));
132 84
133 if (cpu_is_omap44xx())
134 l = OMAP4_SMARTIDLE;
135 else
136 l = SMARTIDLE | AUTOIDLE;
137 mbox_write_reg(l, MAILBOX_SYSCONFIG);
138
139 omap2_mbox_enable_irq(mbox, IRQ_RX); 85 omap2_mbox_enable_irq(mbox, IRQ_RX);
140 86
141 return 0; 87 return 0;
@@ -143,9 +89,8 @@ static int omap2_mbox_startup(struct omap_mbox *mbox)
143 89
144static void omap2_mbox_shutdown(struct omap_mbox *mbox) 90static void omap2_mbox_shutdown(struct omap_mbox *mbox)
145{ 91{
146 clk_disable(mbox_ick_handle); 92 pm_runtime_put_sync(mbox->dev->parent);
147 clk_put(mbox_ick_handle); 93 pm_runtime_disable(mbox->dev->parent);
148 mbox_ick_handle = NULL;
149} 94}
150 95
151/* Mailbox FIFO handle functions */ 96/* Mailbox FIFO handle functions */
@@ -181,7 +126,7 @@ static int omap2_mbox_fifo_full(struct omap_mbox *mbox)
181static void omap2_mbox_enable_irq(struct omap_mbox *mbox, 126static void omap2_mbox_enable_irq(struct omap_mbox *mbox,
182 omap_mbox_type_t irq) 127 omap_mbox_type_t irq)
183{ 128{
184 struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; 129 struct omap_mbox2_priv *p = mbox->priv;
185 u32 l, bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; 130 u32 l, bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit;
186 131
187 l = mbox_read_reg(p->irqenable); 132 l = mbox_read_reg(p->irqenable);
@@ -192,17 +137,19 @@ static void omap2_mbox_enable_irq(struct omap_mbox *mbox,
192static void omap2_mbox_disable_irq(struct omap_mbox *mbox, 137static void omap2_mbox_disable_irq(struct omap_mbox *mbox,
193 omap_mbox_type_t irq) 138 omap_mbox_type_t irq)
194{ 139{
195 struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; 140 struct omap_mbox2_priv *p = mbox->priv;
196 u32 l, bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; 141 u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit;
197 l = mbox_read_reg(p->irqdisable); 142
198 l &= ~bit; 143 if (!cpu_is_omap44xx())
199 mbox_write_reg(l, p->irqdisable); 144 bit = mbox_read_reg(p->irqdisable) & ~bit;
145
146 mbox_write_reg(bit, p->irqdisable);
200} 147}
201 148
202static void omap2_mbox_ack_irq(struct omap_mbox *mbox, 149static void omap2_mbox_ack_irq(struct omap_mbox *mbox,
203 omap_mbox_type_t irq) 150 omap_mbox_type_t irq)
204{ 151{
205 struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; 152 struct omap_mbox2_priv *p = mbox->priv;
206 u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; 153 u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit;
207 154
208 mbox_write_reg(bit, p->irqstatus); 155 mbox_write_reg(bit, p->irqstatus);
@@ -214,7 +161,7 @@ static void omap2_mbox_ack_irq(struct omap_mbox *mbox,
214static int omap2_mbox_is_irq(struct omap_mbox *mbox, 161static int omap2_mbox_is_irq(struct omap_mbox *mbox,
215 omap_mbox_type_t irq) 162 omap_mbox_type_t irq)
216{ 163{
217 struct omap_mbox2_priv *p = (struct omap_mbox2_priv *)mbox->priv; 164 struct omap_mbox2_priv *p = mbox->priv;
218 u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit; 165 u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit;
219 u32 enable = mbox_read_reg(p->irqenable); 166 u32 enable = mbox_read_reg(p->irqenable);
220 u32 status = mbox_read_reg(p->irqstatus); 167 u32 status = mbox_read_reg(p->irqstatus);
@@ -281,7 +228,7 @@ static struct omap_mbox_ops omap2_mbox_ops = {
281 228
282/* FIXME: the following structs should be filled automatically by the user id */ 229/* FIXME: the following structs should be filled automatically by the user id */
283 230
284#if defined(CONFIG_ARCH_OMAP3430) || defined(CONFIG_ARCH_OMAP2420) 231#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP2)
285/* DSP */ 232/* DSP */
286static struct omap_mbox2_priv omap2_mbox_dsp_priv = { 233static struct omap_mbox2_priv omap2_mbox_dsp_priv = {
287 .tx_fifo = { 234 .tx_fifo = {
@@ -306,11 +253,11 @@ struct omap_mbox mbox_dsp_info = {
306}; 253};
307#endif 254#endif
308 255
309#if defined(CONFIG_ARCH_OMAP3430) 256#if defined(CONFIG_ARCH_OMAP3)
310struct omap_mbox *omap3_mboxes[] = { &mbox_dsp_info, NULL }; 257struct omap_mbox *omap3_mboxes[] = { &mbox_dsp_info, NULL };
311#endif 258#endif
312 259
313#if defined(CONFIG_ARCH_OMAP2420) 260#if defined(CONFIG_SOC_OMAP2420)
314/* IVA */ 261/* IVA */
315static struct omap_mbox2_priv omap2_mbox_iva_priv = { 262static struct omap_mbox2_priv omap2_mbox_iva_priv = {
316 .tx_fifo = { 263 .tx_fifo = {
@@ -334,7 +281,7 @@ static struct omap_mbox mbox_iva_info = {
334 .priv = &omap2_mbox_iva_priv, 281 .priv = &omap2_mbox_iva_priv,
335}; 282};
336 283
337struct omap_mbox *omap2_mboxes[] = { &mbox_iva_info, &mbox_dsp_info, NULL }; 284struct omap_mbox *omap2_mboxes[] = { &mbox_dsp_info, &mbox_iva_info, NULL };
338#endif 285#endif
339 286
340#if defined(CONFIG_ARCH_OMAP4) 287#if defined(CONFIG_ARCH_OMAP4)
@@ -394,15 +341,19 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev)
394 341
395 if (false) 342 if (false)
396 ; 343 ;
397#if defined(CONFIG_ARCH_OMAP3430) 344#if defined(CONFIG_ARCH_OMAP3)
398 else if (cpu_is_omap3430()) { 345 else if (cpu_is_omap34xx()) {
399 list = omap3_mboxes; 346 list = omap3_mboxes;
400 347
401 list[0]->irq = platform_get_irq_byname(pdev, "dsp"); 348 list[0]->irq = platform_get_irq(pdev, 0);
402 } 349 }
403#endif 350#endif
404#if defined(CONFIG_ARCH_OMAP2420) 351#if defined(CONFIG_ARCH_OMAP2)
405 else if (cpu_is_omap2420()) { 352 else if (cpu_is_omap2430()) {
353 list = omap2_mboxes;
354
355 list[0]->irq = platform_get_irq(pdev, 0);
356 } else if (cpu_is_omap2420()) {
406 list = omap2_mboxes; 357 list = omap2_mboxes;
407 358
408 list[0]->irq = platform_get_irq_byname(pdev, "dsp"); 359 list[0]->irq = platform_get_irq_byname(pdev, "dsp");
@@ -413,8 +364,7 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev)
413 else if (cpu_is_omap44xx()) { 364 else if (cpu_is_omap44xx()) {
414 list = omap4_mboxes; 365 list = omap4_mboxes;
415 366
416 list[0]->irq = list[1]->irq = 367 list[0]->irq = list[1]->irq = platform_get_irq(pdev, 0);
417 platform_get_irq_byname(pdev, "mbox");
418 } 368 }
419#endif 369#endif
420 else { 370 else {
@@ -432,9 +382,8 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev)
432 iounmap(mbox_base); 382 iounmap(mbox_base);
433 return ret; 383 return ret;
434 } 384 }
435 return 0;
436 385
437 return ret; 386 return 0;
438} 387}
439 388
440static int __devexit omap2_mbox_remove(struct platform_device *pdev) 389static int __devexit omap2_mbox_remove(struct platform_device *pdev)
diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c
index 467aae245781..4a6ef6ab8458 100644
--- a/arch/arm/mach-omap2/mcbsp.c
+++ b/arch/arm/mach-omap2/mcbsp.c
@@ -22,234 +22,150 @@
22#include <plat/dma.h> 22#include <plat/dma.h>
23#include <plat/cpu.h> 23#include <plat/cpu.h>
24#include <plat/mcbsp.h> 24#include <plat/mcbsp.h>
25#include <plat/omap_device.h>
26#include <linux/pm_runtime.h>
25 27
26#include "mux.h" 28#include "control.h"
27 29
28static void omap2_mcbsp2_mux_setup(void) 30/* McBSP internal signal muxing functions */
31
32void omap2_mcbsp1_mux_clkr_src(u8 mux)
29{ 33{
30 omap_mux_init_signal("eac_ac_sclk.mcbsp2_clkx", OMAP_PULL_ENA); 34 u32 v;
31 omap_mux_init_signal("eac_ac_fs.mcbsp2_fsx", OMAP_PULL_ENA); 35
32 omap_mux_init_signal("eac_ac_din.mcbsp2_dr", OMAP_PULL_ENA); 36 v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
33 omap_mux_init_signal("eac_ac_dout.mcbsp2_dx", OMAP_PULL_ENA); 37 if (mux == CLKR_SRC_CLKR)
34 omap_mux_init_gpio(117, OMAP_PULL_ENA); 38 v &= ~OMAP2_MCBSP1_CLKR_MASK;
35 /* 39 else if (mux == CLKR_SRC_CLKX)
36 * TODO: Need to add MUX settings for OMAP 2430 SDP 40 v |= OMAP2_MCBSP1_CLKR_MASK;
37 */ 41 omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
38} 42}
43EXPORT_SYMBOL(omap2_mcbsp1_mux_clkr_src);
39 44
40static void omap2_mcbsp_request(unsigned int id) 45void omap2_mcbsp1_mux_fsr_src(u8 mux)
41{ 46{
42 if (cpu_is_omap2420() && (id == OMAP_MCBSP2)) 47 u32 v;
43 omap2_mcbsp2_mux_setup(); 48
49 v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
50 if (mux == FSR_SRC_FSR)
51 v &= ~OMAP2_MCBSP1_FSR_MASK;
52 else if (mux == FSR_SRC_FSX)
53 v |= OMAP2_MCBSP1_FSR_MASK;
54 omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
44} 55}
56EXPORT_SYMBOL(omap2_mcbsp1_mux_fsr_src);
45 57
46static struct omap_mcbsp_ops omap2_mcbsp_ops = { 58/* McBSP CLKS source switching function */
47 .request = omap2_mcbsp_request,
48};
49 59
50#ifdef CONFIG_ARCH_OMAP2420 60int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id)
51static struct omap_mcbsp_platform_data omap2420_mcbsp_pdata[] = { 61{
52 { 62 struct omap_mcbsp *mcbsp;
53 .phys_base = OMAP24XX_MCBSP1_BASE, 63 struct clk *fck_src;
54 .dma_rx_sync = OMAP24XX_DMA_MCBSP1_RX, 64 char *fck_src_name;
55 .dma_tx_sync = OMAP24XX_DMA_MCBSP1_TX, 65 int r;
56 .rx_irq = INT_24XX_MCBSP1_IRQ_RX, 66
57 .tx_irq = INT_24XX_MCBSP1_IRQ_TX, 67 if (!omap_mcbsp_check_valid_id(id)) {
58 .ops = &omap2_mcbsp_ops, 68 pr_err("%s: Invalid id (%d)\n", __func__, id + 1);
59 }, 69 return -EINVAL;
60 { 70 }
61 .phys_base = OMAP24XX_MCBSP2_BASE, 71 mcbsp = id_to_mcbsp_ptr(id);
62 .dma_rx_sync = OMAP24XX_DMA_MCBSP2_RX, 72
63 .dma_tx_sync = OMAP24XX_DMA_MCBSP2_TX, 73 if (fck_src_id == MCBSP_CLKS_PAD_SRC)
64 .rx_irq = INT_24XX_MCBSP2_IRQ_RX, 74 fck_src_name = "pad_fck";
65 .tx_irq = INT_24XX_MCBSP2_IRQ_TX, 75 else if (fck_src_id == MCBSP_CLKS_PRCM_SRC)
66 .ops = &omap2_mcbsp_ops, 76 fck_src_name = "prcm_fck";
67 }, 77 else
68}; 78 return -EINVAL;
69#define OMAP2420_MCBSP_PDATA_SZ ARRAY_SIZE(omap2420_mcbsp_pdata) 79
70#define OMAP2420_MCBSP_REG_NUM (OMAP_MCBSP_REG_RCCR / sizeof(u32) + 1) 80 fck_src = clk_get(mcbsp->dev, fck_src_name);
71#else 81 if (IS_ERR_OR_NULL(fck_src)) {
72#define omap2420_mcbsp_pdata NULL 82 pr_err("omap-mcbsp: %s: could not clk_get() %s\n", "clks",
73#define OMAP2420_MCBSP_PDATA_SZ 0 83 fck_src_name);
74#define OMAP2420_MCBSP_REG_NUM 0 84 return -EINVAL;
75#endif 85 }
76 86
77#ifdef CONFIG_ARCH_OMAP2430 87 pm_runtime_put_sync(mcbsp->dev);
78static struct omap_mcbsp_platform_data omap2430_mcbsp_pdata[] = { 88
79 { 89 r = clk_set_parent(mcbsp->fclk, fck_src);
80 .phys_base = OMAP24XX_MCBSP1_BASE, 90 if (IS_ERR_VALUE(r)) {
81 .dma_rx_sync = OMAP24XX_DMA_MCBSP1_RX, 91 pr_err("omap-mcbsp: %s: could not clk_set_parent() to %s\n",
82 .dma_tx_sync = OMAP24XX_DMA_MCBSP1_TX, 92 "clks", fck_src_name);
83 .rx_irq = INT_24XX_MCBSP1_IRQ_RX, 93 clk_put(fck_src);
84 .tx_irq = INT_24XX_MCBSP1_IRQ_TX, 94 return -EINVAL;
85 .ops = &omap2_mcbsp_ops, 95 }
86 }, 96
87 { 97 pm_runtime_get_sync(mcbsp->dev);
88 .phys_base = OMAP24XX_MCBSP2_BASE, 98
89 .dma_rx_sync = OMAP24XX_DMA_MCBSP2_RX, 99 clk_put(fck_src);
90 .dma_tx_sync = OMAP24XX_DMA_MCBSP2_TX, 100
91 .rx_irq = INT_24XX_MCBSP2_IRQ_RX, 101 return 0;
92 .tx_irq = INT_24XX_MCBSP2_IRQ_TX, 102}
93 .ops = &omap2_mcbsp_ops, 103EXPORT_SYMBOL(omap2_mcbsp_set_clks_src);
94 }, 104
95 { 105struct omap_device_pm_latency omap2_mcbsp_latency[] = {
96 .phys_base = OMAP2430_MCBSP3_BASE,
97 .dma_rx_sync = OMAP24XX_DMA_MCBSP3_RX,
98 .dma_tx_sync = OMAP24XX_DMA_MCBSP3_TX,
99 .rx_irq = INT_24XX_MCBSP3_IRQ_RX,
100 .tx_irq = INT_24XX_MCBSP3_IRQ_TX,
101 .ops = &omap2_mcbsp_ops,
102 },
103 {
104 .phys_base = OMAP2430_MCBSP4_BASE,
105 .dma_rx_sync = OMAP24XX_DMA_MCBSP4_RX,
106 .dma_tx_sync = OMAP24XX_DMA_MCBSP4_TX,
107 .rx_irq = INT_24XX_MCBSP4_IRQ_RX,
108 .tx_irq = INT_24XX_MCBSP4_IRQ_TX,
109 .ops = &omap2_mcbsp_ops,
110 },
111 {
112 .phys_base = OMAP2430_MCBSP5_BASE,
113 .dma_rx_sync = OMAP24XX_DMA_MCBSP5_RX,
114 .dma_tx_sync = OMAP24XX_DMA_MCBSP5_TX,
115 .rx_irq = INT_24XX_MCBSP5_IRQ_RX,
116 .tx_irq = INT_24XX_MCBSP5_IRQ_TX,
117 .ops = &omap2_mcbsp_ops,
118 },
119};
120#define OMAP2430_MCBSP_PDATA_SZ ARRAY_SIZE(omap2430_mcbsp_pdata)
121#define OMAP2430_MCBSP_REG_NUM (OMAP_MCBSP_REG_RCCR / sizeof(u32) + 1)
122#else
123#define omap2430_mcbsp_pdata NULL
124#define OMAP2430_MCBSP_PDATA_SZ 0
125#define OMAP2430_MCBSP_REG_NUM 0
126#endif
127
128#ifdef CONFIG_ARCH_OMAP3
129static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
130 {
131 .phys_base = OMAP34XX_MCBSP1_BASE,
132 .dma_rx_sync = OMAP24XX_DMA_MCBSP1_RX,
133 .dma_tx_sync = OMAP24XX_DMA_MCBSP1_TX,
134 .rx_irq = INT_24XX_MCBSP1_IRQ_RX,
135 .tx_irq = INT_24XX_MCBSP1_IRQ_TX,
136 .ops = &omap2_mcbsp_ops,
137 .buffer_size = 0x80, /* The FIFO has 128 locations */
138 },
139 {
140 .phys_base = OMAP34XX_MCBSP2_BASE,
141 .phys_base_st = OMAP34XX_MCBSP2_ST_BASE,
142 .dma_rx_sync = OMAP24XX_DMA_MCBSP2_RX,
143 .dma_tx_sync = OMAP24XX_DMA_MCBSP2_TX,
144 .rx_irq = INT_24XX_MCBSP2_IRQ_RX,
145 .tx_irq = INT_24XX_MCBSP2_IRQ_TX,
146 .ops = &omap2_mcbsp_ops,
147 .buffer_size = 0x500, /* The FIFO has 1024 + 256 locations */
148 },
149 {
150 .phys_base = OMAP34XX_MCBSP3_BASE,
151 .phys_base_st = OMAP34XX_MCBSP3_ST_BASE,
152 .dma_rx_sync = OMAP24XX_DMA_MCBSP3_RX,
153 .dma_tx_sync = OMAP24XX_DMA_MCBSP3_TX,
154 .rx_irq = INT_24XX_MCBSP3_IRQ_RX,
155 .tx_irq = INT_24XX_MCBSP3_IRQ_TX,
156 .ops = &omap2_mcbsp_ops,
157 .buffer_size = 0x80, /* The FIFO has 128 locations */
158 },
159 {
160 .phys_base = OMAP34XX_MCBSP4_BASE,
161 .dma_rx_sync = OMAP24XX_DMA_MCBSP4_RX,
162 .dma_tx_sync = OMAP24XX_DMA_MCBSP4_TX,
163 .rx_irq = INT_24XX_MCBSP4_IRQ_RX,
164 .tx_irq = INT_24XX_MCBSP4_IRQ_TX,
165 .ops = &omap2_mcbsp_ops,
166 .buffer_size = 0x80, /* The FIFO has 128 locations */
167 },
168 {
169 .phys_base = OMAP34XX_MCBSP5_BASE,
170 .dma_rx_sync = OMAP24XX_DMA_MCBSP5_RX,
171 .dma_tx_sync = OMAP24XX_DMA_MCBSP5_TX,
172 .rx_irq = INT_24XX_MCBSP5_IRQ_RX,
173 .tx_irq = INT_24XX_MCBSP5_IRQ_TX,
174 .ops = &omap2_mcbsp_ops,
175 .buffer_size = 0x80, /* The FIFO has 128 locations */
176 },
177};
178#define OMAP34XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap34xx_mcbsp_pdata)
179#define OMAP34XX_MCBSP_REG_NUM (OMAP_MCBSP_REG_RCCR / sizeof(u32) + 1)
180#else
181#define omap34xx_mcbsp_pdata NULL
182#define OMAP34XX_MCBSP_PDATA_SZ 0
183#define OMAP34XX_MCBSP_REG_NUM 0
184#endif
185
186static struct omap_mcbsp_platform_data omap44xx_mcbsp_pdata[] = {
187 {
188 .phys_base = OMAP44XX_MCBSP1_BASE,
189 .dma_rx_sync = OMAP44XX_DMA_MCBSP1_RX,
190 .dma_tx_sync = OMAP44XX_DMA_MCBSP1_TX,
191 .tx_irq = OMAP44XX_IRQ_MCBSP1,
192 .ops = &omap2_mcbsp_ops,
193 },
194 {
195 .phys_base = OMAP44XX_MCBSP2_BASE,
196 .dma_rx_sync = OMAP44XX_DMA_MCBSP2_RX,
197 .dma_tx_sync = OMAP44XX_DMA_MCBSP2_TX,
198 .tx_irq = OMAP44XX_IRQ_MCBSP2,
199 .ops = &omap2_mcbsp_ops,
200 },
201 {
202 .phys_base = OMAP44XX_MCBSP3_BASE,
203 .dma_rx_sync = OMAP44XX_DMA_MCBSP3_RX,
204 .dma_tx_sync = OMAP44XX_DMA_MCBSP3_TX,
205 .tx_irq = OMAP44XX_IRQ_MCBSP3,
206 .ops = &omap2_mcbsp_ops,
207 },
208 { 106 {
209 .phys_base = OMAP44XX_MCBSP4_BASE, 107 .deactivate_func = omap_device_idle_hwmods,
210 .dma_rx_sync = OMAP44XX_DMA_MCBSP4_RX, 108 .activate_func = omap_device_enable_hwmods,
211 .dma_tx_sync = OMAP44XX_DMA_MCBSP4_TX, 109 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
212 .tx_irq = OMAP44XX_IRQ_MCBSP4,
213 .ops = &omap2_mcbsp_ops,
214 }, 110 },
215}; 111};
216#define OMAP44XX_MCBSP_PDATA_SZ ARRAY_SIZE(omap44xx_mcbsp_pdata)
217#define OMAP44XX_MCBSP_REG_NUM (OMAP_MCBSP_REG_RCCR / sizeof(u32) + 1)
218 112
219static int __init omap2_mcbsp_init(void) 113static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
220{ 114{
221 if (cpu_is_omap2420()) { 115 int id, count = 1;
222 omap_mcbsp_count = OMAP2420_MCBSP_PDATA_SZ; 116 char *name = "omap-mcbsp";
223 omap_mcbsp_cache_size = OMAP2420_MCBSP_REG_NUM * sizeof(u16); 117 struct omap_hwmod *oh_device[2];
224 } else if (cpu_is_omap2430()) { 118 struct omap_mcbsp_platform_data *pdata = NULL;
225 omap_mcbsp_count = OMAP2430_MCBSP_PDATA_SZ; 119 struct omap_device *od;
226 omap_mcbsp_cache_size = OMAP2430_MCBSP_REG_NUM * sizeof(u32); 120
227 } else if (cpu_is_omap34xx()) { 121 sscanf(oh->name, "mcbsp%d", &id);
228 omap_mcbsp_count = OMAP34XX_MCBSP_PDATA_SZ; 122
229 omap_mcbsp_cache_size = OMAP34XX_MCBSP_REG_NUM * sizeof(u32); 123 pdata = kzalloc(sizeof(struct omap_mcbsp_platform_data), GFP_KERNEL);
230 } else if (cpu_is_omap44xx()) { 124 if (!pdata) {
231 omap_mcbsp_count = OMAP44XX_MCBSP_PDATA_SZ; 125 pr_err("%s: No memory for mcbsp\n", __func__);
232 omap_mcbsp_cache_size = OMAP44XX_MCBSP_REG_NUM * sizeof(u32); 126 return -ENOMEM;
127 }
128
129 pdata->mcbsp_config_type = oh->class->rev;
130
131 if (oh->class->rev == MCBSP_CONFIG_TYPE3) {
132 if (id == 2)
133 /* The FIFO has 1024 + 256 locations */
134 pdata->buffer_size = 0x500;
135 else
136 /* The FIFO has 128 locations */
137 pdata->buffer_size = 0x80;
138 }
139
140 oh_device[0] = oh;
141
142 if (oh->dev_attr) {
143 oh_device[1] = omap_hwmod_lookup((
144 (struct omap_mcbsp_dev_attr *)(oh->dev_attr))->sidetone);
145 count++;
233 } 146 }
147 od = omap_device_build_ss(name, id, oh_device, count, pdata,
148 sizeof(*pdata), omap2_mcbsp_latency,
149 ARRAY_SIZE(omap2_mcbsp_latency), false);
150 kfree(pdata);
151 if (IS_ERR(od)) {
152 pr_err("%s: Can't build omap_device for %s:%s.\n", __func__,
153 name, oh->name);
154 return PTR_ERR(od);
155 }
156 omap_mcbsp_count++;
157 return 0;
158}
159
160static int __init omap2_mcbsp_init(void)
161{
162 omap_hwmod_for_each_by_class("mcbsp", omap_init_mcbsp, NULL);
234 163
235 mcbsp_ptr = kzalloc(omap_mcbsp_count * sizeof(struct omap_mcbsp *), 164 mcbsp_ptr = kzalloc(omap_mcbsp_count * sizeof(struct omap_mcbsp *),
236 GFP_KERNEL); 165 GFP_KERNEL);
237 if (!mcbsp_ptr) 166 if (!mcbsp_ptr)
238 return -ENOMEM; 167 return -ENOMEM;
239 168
240 if (cpu_is_omap2420())
241 omap_mcbsp_register_board_cfg(omap2420_mcbsp_pdata,
242 OMAP2420_MCBSP_PDATA_SZ);
243 if (cpu_is_omap2430())
244 omap_mcbsp_register_board_cfg(omap2430_mcbsp_pdata,
245 OMAP2430_MCBSP_PDATA_SZ);
246 if (cpu_is_omap34xx())
247 omap_mcbsp_register_board_cfg(omap34xx_mcbsp_pdata,
248 OMAP34XX_MCBSP_PDATA_SZ);
249 if (cpu_is_omap44xx())
250 omap_mcbsp_register_board_cfg(omap44xx_mcbsp_pdata,
251 OMAP44XX_MCBSP_PDATA_SZ);
252
253 return omap_mcbsp_init(); 169 return omap_mcbsp_init();
254} 170}
255arch_initcall(omap2_mcbsp_init); 171arch_initcall(omap2_mcbsp_init);
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index ab403b2ed26b..c7fb22abc219 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -1,9 +1,9 @@
1/* 1/*
2 * linux/arch/arm/mach-omap2/mux.c 2 * linux/arch/arm/mach-omap2/mux.c
3 * 3 *
4 * OMAP2 and OMAP3 pin multiplexing configurations 4 * OMAP2, OMAP3 and OMAP4 pin multiplexing configurations
5 * 5 *
6 * Copyright (C) 2004 - 2008 Texas Instruments Inc. 6 * Copyright (C) 2004 - 2010 Texas Instruments Inc.
7 * Copyright (C) 2003 - 2008 Nokia Corporation 7 * Copyright (C) 2003 - 2008 Nokia Corporation
8 * 8 *
9 * Written by Tony Lindgren 9 * Written by Tony Lindgren
@@ -23,12 +23,11 @@
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * 24 *
25 */ 25 */
26#include <linux/module.h> 26#include <linux/kernel.h>
27#include <linux/init.h> 27#include <linux/init.h>
28#include <linux/io.h> 28#include <linux/io.h>
29#include <linux/slab.h>
30#include <linux/spinlock.h>
31#include <linux/list.h> 29#include <linux/list.h>
30#include <linux/slab.h>
32#include <linux/ctype.h> 31#include <linux/ctype.h>
33#include <linux/debugfs.h> 32#include <linux/debugfs.h>
34#include <linux/seq_file.h> 33#include <linux/seq_file.h>
@@ -36,66 +35,82 @@
36 35
37#include <asm/system.h> 36#include <asm/system.h>
38 37
39#include <plat/control.h> 38#include <plat/omap_hwmod.h>
40 39
40#include "control.h"
41#include "mux.h" 41#include "mux.h"
42 42
43#define OMAP_MUX_BASE_OFFSET 0x30 /* Offset from CTRL_BASE */ 43#define OMAP_MUX_BASE_OFFSET 0x30 /* Offset from CTRL_BASE */
44#define OMAP_MUX_BASE_SZ 0x5ca 44#define OMAP_MUX_BASE_SZ 0x5ca
45#define MUXABLE_GPIO_MODE3 BIT(0)
46 45
47struct omap_mux_entry { 46struct omap_mux_entry {
48 struct omap_mux mux; 47 struct omap_mux mux;
49 struct list_head node; 48 struct list_head node;
50}; 49};
51 50
52static unsigned long mux_phys; 51static LIST_HEAD(mux_partitions);
53static void __iomem *mux_base; 52static DEFINE_MUTEX(muxmode_mutex);
54static u8 omap_mux_flags; 53
54struct omap_mux_partition *omap_mux_get(const char *name)
55{
56 struct omap_mux_partition *partition;
57
58 list_for_each_entry(partition, &mux_partitions, node) {
59 if (!strcmp(name, partition->name))
60 return partition;
61 }
62
63 return NULL;
64}
55 65
56u16 omap_mux_read(u16 reg) 66u16 omap_mux_read(struct omap_mux_partition *partition, u16 reg)
57{ 67{
58 if (cpu_is_omap24xx()) 68 if (partition->flags & OMAP_MUX_REG_8BIT)
59 return __raw_readb(mux_base + reg); 69 return __raw_readb(partition->base + reg);
60 else 70 else
61 return __raw_readw(mux_base + reg); 71 return __raw_readw(partition->base + reg);
62} 72}
63 73
64void omap_mux_write(u16 val, u16 reg) 74void omap_mux_write(struct omap_mux_partition *partition, u16 val,
75 u16 reg)
65{ 76{
66 if (cpu_is_omap24xx()) 77 if (partition->flags & OMAP_MUX_REG_8BIT)
67 __raw_writeb(val, mux_base + reg); 78 __raw_writeb(val, partition->base + reg);
68 else 79 else
69 __raw_writew(val, mux_base + reg); 80 __raw_writew(val, partition->base + reg);
70} 81}
71 82
72void omap_mux_write_array(struct omap_board_mux *board_mux) 83void omap_mux_write_array(struct omap_mux_partition *partition,
84 struct omap_board_mux *board_mux)
73{ 85{
74 while (board_mux->reg_offset != OMAP_MUX_TERMINATOR) { 86 if (!board_mux)
75 omap_mux_write(board_mux->value, board_mux->reg_offset); 87 return;
88
89 while (board_mux->reg_offset != OMAP_MUX_TERMINATOR) {
90 omap_mux_write(partition, board_mux->value,
91 board_mux->reg_offset);
76 board_mux++; 92 board_mux++;
77 } 93 }
78} 94}
79 95
80static LIST_HEAD(muxmodes);
81static DEFINE_MUTEX(muxmode_mutex);
82
83#ifdef CONFIG_OMAP_MUX 96#ifdef CONFIG_OMAP_MUX
84 97
85static char *omap_mux_options; 98static char *omap_mux_options;
86 99
87int __init omap_mux_init_gpio(int gpio, int val) 100static int __init _omap_mux_init_gpio(struct omap_mux_partition *partition,
101 int gpio, int val)
88{ 102{
89 struct omap_mux_entry *e; 103 struct omap_mux_entry *e;
90 struct omap_mux *gpio_mux; 104 struct omap_mux *gpio_mux = NULL;
91 u16 old_mode; 105 u16 old_mode;
92 u16 mux_mode; 106 u16 mux_mode;
93 int found = 0; 107 int found = 0;
108 struct list_head *muxmodes = &partition->muxmodes;
94 109
95 if (!gpio) 110 if (!gpio)
96 return -EINVAL; 111 return -EINVAL;
97 112
98 list_for_each_entry(e, &muxmodes, node) { 113 list_for_each_entry(e, muxmodes, node) {
99 struct omap_mux *m = &e->mux; 114 struct omap_mux *m = &e->mux;
100 if (gpio == m->gpio) { 115 if (gpio == m->gpio) {
101 gpio_mux = m; 116 gpio_mux = m;
@@ -104,87 +119,312 @@ int __init omap_mux_init_gpio(int gpio, int val)
104 } 119 }
105 120
106 if (found == 0) { 121 if (found == 0) {
107 printk(KERN_ERR "mux: Could not set gpio%i\n", gpio); 122 pr_err("%s: Could not set gpio%i\n", __func__, gpio);
108 return -ENODEV; 123 return -ENODEV;
109 } 124 }
110 125
111 if (found > 1) { 126 if (found > 1) {
112 printk(KERN_INFO "mux: Multiple gpio paths (%d) for gpio%i\n", 127 pr_info("%s: Multiple gpio paths (%d) for gpio%i\n", __func__,
113 found, gpio); 128 found, gpio);
114 return -EINVAL; 129 return -EINVAL;
115 } 130 }
116 131
117 old_mode = omap_mux_read(gpio_mux->reg_offset); 132 old_mode = omap_mux_read(partition, gpio_mux->reg_offset);
118 mux_mode = val & ~(OMAP_MUX_NR_MODES - 1); 133 mux_mode = val & ~(OMAP_MUX_NR_MODES - 1);
119 if (omap_mux_flags & MUXABLE_GPIO_MODE3) 134 if (partition->flags & OMAP_MUX_GPIO_IN_MODE3)
120 mux_mode |= OMAP_MUX_MODE3; 135 mux_mode |= OMAP_MUX_MODE3;
121 else 136 else
122 mux_mode |= OMAP_MUX_MODE4; 137 mux_mode |= OMAP_MUX_MODE4;
123 printk(KERN_DEBUG "mux: Setting signal %s.gpio%i 0x%04x -> 0x%04x\n", 138 pr_debug("%s: Setting signal %s.gpio%i 0x%04x -> 0x%04x\n", __func__,
124 gpio_mux->muxnames[0], gpio, old_mode, mux_mode); 139 gpio_mux->muxnames[0], gpio, old_mode, mux_mode);
125 omap_mux_write(mux_mode, gpio_mux->reg_offset); 140 omap_mux_write(partition, mux_mode, gpio_mux->reg_offset);
126 141
127 return 0; 142 return 0;
128} 143}
129 144
130int __init omap_mux_init_signal(char *muxname, int val) 145int __init omap_mux_init_gpio(int gpio, int val)
131{ 146{
147 struct omap_mux_partition *partition;
148 int ret;
149
150 list_for_each_entry(partition, &mux_partitions, node) {
151 ret = _omap_mux_init_gpio(partition, gpio, val);
152 if (!ret)
153 return ret;
154 }
155
156 return -ENODEV;
157}
158
159static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition,
160 const char *muxname,
161 struct omap_mux **found_mux)
162{
163 struct omap_mux *mux = NULL;
132 struct omap_mux_entry *e; 164 struct omap_mux_entry *e;
133 char *m0_name = NULL, *mode_name = NULL; 165 const char *mode_name;
134 int found = 0; 166 int found = 0, found_mode = 0, mode0_len = 0;
167 struct list_head *muxmodes = &partition->muxmodes;
135 168
136 mode_name = strchr(muxname, '.'); 169 mode_name = strchr(muxname, '.');
137 if (mode_name) { 170 if (mode_name) {
138 *mode_name = '\0'; 171 mode0_len = strlen(muxname) - strlen(mode_name);
139 mode_name++; 172 mode_name++;
140 m0_name = muxname;
141 } else { 173 } else {
142 mode_name = muxname; 174 mode_name = muxname;
143 } 175 }
144 176
145 list_for_each_entry(e, &muxmodes, node) { 177 list_for_each_entry(e, muxmodes, node) {
146 struct omap_mux *m = &e->mux; 178 char *m0_entry;
147 char *m0_entry = m->muxnames[0];
148 int i; 179 int i;
149 180
150 if (m0_name && strcmp(m0_name, m0_entry)) 181 mux = &e->mux;
182 m0_entry = mux->muxnames[0];
183
184 /* First check for full name in mode0.muxmode format */
185 if (mode0_len && strncmp(muxname, m0_entry, mode0_len))
151 continue; 186 continue;
152 187
188 /* Then check for muxmode only */
153 for (i = 0; i < OMAP_MUX_NR_MODES; i++) { 189 for (i = 0; i < OMAP_MUX_NR_MODES; i++) {
154 char *mode_cur = m->muxnames[i]; 190 char *mode_cur = mux->muxnames[i];
155 191
156 if (!mode_cur) 192 if (!mode_cur)
157 continue; 193 continue;
158 194
159 if (!strcmp(mode_name, mode_cur)) { 195 if (!strcmp(mode_name, mode_cur)) {
160 u16 old_mode; 196 *found_mux = mux;
161 u16 mux_mode;
162
163 old_mode = omap_mux_read(m->reg_offset);
164 mux_mode = val | i;
165 printk(KERN_DEBUG "mux: Setting signal "
166 "%s.%s 0x%04x -> 0x%04x\n",
167 m0_entry, muxname, old_mode, mux_mode);
168 omap_mux_write(mux_mode, m->reg_offset);
169 found++; 197 found++;
198 found_mode = i;
170 } 199 }
171 } 200 }
172 } 201 }
173 202
174 if (found == 1) 203 if (found == 1) {
175 return 0; 204 return found_mode;
205 }
176 206
177 if (found > 1) { 207 if (found > 1) {
178 printk(KERN_ERR "mux: Multiple signal paths (%i) for %s\n", 208 pr_err("%s: Multiple signal paths (%i) for %s\n", __func__,
179 found, muxname); 209 found, muxname);
180 return -EINVAL; 210 return -EINVAL;
181 } 211 }
182 212
183 printk(KERN_ERR "mux: Could not set signal %s\n", muxname); 213 pr_err("%s: Could not find signal %s\n", __func__, muxname);
214
215 return -ENODEV;
216}
217
218static int __init
219omap_mux_get_by_name(const char *muxname,
220 struct omap_mux_partition **found_partition,
221 struct omap_mux **found_mux)
222{
223 struct omap_mux_partition *partition;
224
225 list_for_each_entry(partition, &mux_partitions, node) {
226 struct omap_mux *mux = NULL;
227 int mux_mode = _omap_mux_get_by_name(partition, muxname, &mux);
228 if (mux_mode < 0)
229 continue;
230
231 *found_partition = partition;
232 *found_mux = mux;
233
234 return mux_mode;
235 }
184 236
185 return -ENODEV; 237 return -ENODEV;
186} 238}
187 239
240int __init omap_mux_init_signal(const char *muxname, int val)
241{
242 struct omap_mux_partition *partition = NULL;
243 struct omap_mux *mux = NULL;
244 u16 old_mode;
245 int mux_mode;
246
247 mux_mode = omap_mux_get_by_name(muxname, &partition, &mux);
248 if (mux_mode < 0)
249 return mux_mode;
250
251 old_mode = omap_mux_read(partition, mux->reg_offset);
252 mux_mode |= val;
253 pr_debug("%s: Setting signal %s 0x%04x -> 0x%04x\n",
254 __func__, muxname, old_mode, mux_mode);
255 omap_mux_write(partition, mux_mode, mux->reg_offset);
256
257 return 0;
258}
259
260struct omap_hwmod_mux_info * __init
261omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads)
262{
263 struct omap_hwmod_mux_info *hmux;
264 int i, nr_pads_dynamic = 0;
265
266 if (!bpads || nr_pads < 1)
267 return NULL;
268
269 hmux = kzalloc(sizeof(struct omap_hwmod_mux_info), GFP_KERNEL);
270 if (!hmux)
271 goto err1;
272
273 hmux->nr_pads = nr_pads;
274
275 hmux->pads = kzalloc(sizeof(struct omap_device_pad) *
276 nr_pads, GFP_KERNEL);
277 if (!hmux->pads)
278 goto err2;
279
280 for (i = 0; i < hmux->nr_pads; i++) {
281 struct omap_mux_partition *partition;
282 struct omap_device_pad *bpad = &bpads[i], *pad = &hmux->pads[i];
283 struct omap_mux *mux;
284 int mux_mode;
285
286 mux_mode = omap_mux_get_by_name(bpad->name, &partition, &mux);
287 if (mux_mode < 0)
288 goto err3;
289 if (!pad->partition)
290 pad->partition = partition;
291 if (!pad->mux)
292 pad->mux = mux;
293
294 pad->name = kzalloc(strlen(bpad->name) + 1, GFP_KERNEL);
295 if (!pad->name) {
296 int j;
297
298 for (j = i - 1; j >= 0; j--)
299 kfree(hmux->pads[j].name);
300 goto err3;
301 }
302 strcpy(pad->name, bpad->name);
303
304 pad->flags = bpad->flags;
305 pad->enable = bpad->enable;
306 pad->idle = bpad->idle;
307 pad->off = bpad->off;
308
309 if (pad->flags & OMAP_DEVICE_PAD_REMUX)
310 nr_pads_dynamic++;
311
312 pr_debug("%s: Initialized %s\n", __func__, pad->name);
313 }
314
315 if (!nr_pads_dynamic)
316 return hmux;
317
318 /*
319 * Add pads that need dynamic muxing into a separate list
320 */
321
322 hmux->nr_pads_dynamic = nr_pads_dynamic;
323 hmux->pads_dynamic = kzalloc(sizeof(struct omap_device_pad *) *
324 nr_pads_dynamic, GFP_KERNEL);
325 if (!hmux->pads_dynamic) {
326 pr_err("%s: Could not allocate dynamic pads\n", __func__);
327 return hmux;
328 }
329
330 nr_pads_dynamic = 0;
331 for (i = 0; i < hmux->nr_pads; i++) {
332 struct omap_device_pad *pad = &hmux->pads[i];
333
334 if (pad->flags & OMAP_DEVICE_PAD_REMUX) {
335 pr_debug("%s: pad %s tagged dynamic\n",
336 __func__, pad->name);
337 hmux->pads_dynamic[nr_pads_dynamic] = pad;
338 nr_pads_dynamic++;
339 }
340 }
341
342 return hmux;
343
344err3:
345 kfree(hmux->pads);
346err2:
347 kfree(hmux);
348err1:
349 pr_err("%s: Could not allocate device mux entry\n", __func__);
350
351 return NULL;
352}
353
354/* Assumes the calling function takes care of locking */
355void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
356{
357 int i;
358
359 /* Runtime idling of dynamic pads */
360 if (state == _HWMOD_STATE_IDLE && hmux->enabled) {
361 for (i = 0; i < hmux->nr_pads_dynamic; i++) {
362 struct omap_device_pad *pad = hmux->pads_dynamic[i];
363 int val = -EINVAL;
364
365 val = pad->idle;
366 omap_mux_write(pad->partition, val,
367 pad->mux->reg_offset);
368 }
369
370 return;
371 }
372
373 /* Runtime enabling of dynamic pads */
374 if ((state == _HWMOD_STATE_ENABLED) && hmux->pads_dynamic
375 && hmux->enabled) {
376 for (i = 0; i < hmux->nr_pads_dynamic; i++) {
377 struct omap_device_pad *pad = hmux->pads_dynamic[i];
378 int val = -EINVAL;
379
380 val = pad->enable;
381 omap_mux_write(pad->partition, val,
382 pad->mux->reg_offset);
383 }
384
385 return;
386 }
387
388 /* Enabling or disabling of all pads */
389 for (i = 0; i < hmux->nr_pads; i++) {
390 struct omap_device_pad *pad = &hmux->pads[i];
391 int flags, val = -EINVAL;
392
393 flags = pad->flags;
394
395 switch (state) {
396 case _HWMOD_STATE_ENABLED:
397 val = pad->enable;
398 pr_debug("%s: Enabling %s %x\n", __func__,
399 pad->name, val);
400 break;
401 case _HWMOD_STATE_DISABLED:
402 /* Use safe mode unless OMAP_DEVICE_PAD_REMUX */
403 if (flags & OMAP_DEVICE_PAD_REMUX)
404 val = pad->off;
405 else
406 val = OMAP_MUX_MODE7;
407 pr_debug("%s: Disabling %s %x\n", __func__,
408 pad->name, val);
409 break;
410 default:
411 /* Nothing to be done */
412 break;
413 };
414
415 if (val >= 0) {
416 omap_mux_write(pad->partition, val,
417 pad->mux->reg_offset);
418 pad->flags = flags;
419 }
420 }
421
422 if (state == _HWMOD_STATE_ENABLED)
423 hmux->enabled = true;
424 else
425 hmux->enabled = false;
426}
427
188#ifdef CONFIG_DEBUG_FS 428#ifdef CONFIG_DEBUG_FS
189 429
190#define OMAP_MUX_MAX_NR_FLAGS 10 430#define OMAP_MUX_MAX_NR_FLAGS 10
@@ -249,13 +489,15 @@ static inline void omap_mux_decode(struct seq_file *s, u16 val)
249 } while (i-- > 0); 489 } while (i-- > 0);
250} 490}
251 491
252#define OMAP_MUX_DEFNAME_LEN 16 492#define OMAP_MUX_DEFNAME_LEN 32
253 493
254static int omap_mux_dbg_board_show(struct seq_file *s, void *unused) 494static int omap_mux_dbg_board_show(struct seq_file *s, void *unused)
255{ 495{
496 struct omap_mux_partition *partition = s->private;
256 struct omap_mux_entry *e; 497 struct omap_mux_entry *e;
498 u8 omap_gen = omap_rev() >> 28;
257 499
258 list_for_each_entry(e, &muxmodes, node) { 500 list_for_each_entry(e, &partition->muxmodes, node) {
259 struct omap_mux *m = &e->mux; 501 struct omap_mux *m = &e->mux;
260 char m0_def[OMAP_MUX_DEFNAME_LEN]; 502 char m0_def[OMAP_MUX_DEFNAME_LEN];
261 char *m0_name = m->muxnames[0]; 503 char *m0_name = m->muxnames[0];
@@ -273,11 +515,16 @@ static int omap_mux_dbg_board_show(struct seq_file *s, void *unused)
273 } 515 }
274 m0_def[i] = toupper(m0_name[i]); 516 m0_def[i] = toupper(m0_name[i]);
275 } 517 }
276 val = omap_mux_read(m->reg_offset); 518 val = omap_mux_read(partition, m->reg_offset);
277 mode = val & OMAP_MUX_MODE7; 519 mode = val & OMAP_MUX_MODE7;
278 520 if (mode != 0)
279 seq_printf(s, "OMAP%i_MUX(%s, ", 521 seq_printf(s, "/* %s */\n", m->muxnames[mode]);
280 cpu_is_omap34xx() ? 3 : 0, m0_def); 522
523 /*
524 * XXX: Might be revisited to support differences across
525 * same OMAP generation.
526 */
527 seq_printf(s, "OMAP%d_MUX(%s, ", omap_gen, m0_def);
281 omap_mux_decode(s, val); 528 omap_mux_decode(s, val);
282 seq_printf(s, "),\n"); 529 seq_printf(s, "),\n");
283 } 530 }
@@ -287,7 +534,7 @@ static int omap_mux_dbg_board_show(struct seq_file *s, void *unused)
287 534
288static int omap_mux_dbg_board_open(struct inode *inode, struct file *file) 535static int omap_mux_dbg_board_open(struct inode *inode, struct file *file)
289{ 536{
290 return single_open(file, omap_mux_dbg_board_show, &inode->i_private); 537 return single_open(file, omap_mux_dbg_board_show, inode->i_private);
291} 538}
292 539
293static const struct file_operations omap_mux_dbg_board_fops = { 540static const struct file_operations omap_mux_dbg_board_fops = {
@@ -297,19 +544,43 @@ static const struct file_operations omap_mux_dbg_board_fops = {
297 .release = single_release, 544 .release = single_release,
298}; 545};
299 546
547static struct omap_mux_partition *omap_mux_get_partition(struct omap_mux *mux)
548{
549 struct omap_mux_partition *partition;
550
551 list_for_each_entry(partition, &mux_partitions, node) {
552 struct list_head *muxmodes = &partition->muxmodes;
553 struct omap_mux_entry *e;
554
555 list_for_each_entry(e, muxmodes, node) {
556 struct omap_mux *m = &e->mux;
557
558 if (m == mux)
559 return partition;
560 }
561 }
562
563 return NULL;
564}
565
300static int omap_mux_dbg_signal_show(struct seq_file *s, void *unused) 566static int omap_mux_dbg_signal_show(struct seq_file *s, void *unused)
301{ 567{
302 struct omap_mux *m = s->private; 568 struct omap_mux *m = s->private;
569 struct omap_mux_partition *partition;
303 const char *none = "NA"; 570 const char *none = "NA";
304 u16 val; 571 u16 val;
305 int mode; 572 int mode;
306 573
307 val = omap_mux_read(m->reg_offset); 574 partition = omap_mux_get_partition(m);
575 if (!partition)
576 return 0;
577
578 val = omap_mux_read(partition, m->reg_offset);
308 mode = val & OMAP_MUX_MODE7; 579 mode = val & OMAP_MUX_MODE7;
309 580
310 seq_printf(s, "name: %s.%s (0x%08lx/0x%03x = 0x%04x), b %s, t %s\n", 581 seq_printf(s, "name: %s.%s (0x%08x/0x%03x = 0x%04x), b %s, t %s\n",
311 m->muxnames[0], m->muxnames[mode], 582 m->muxnames[0], m->muxnames[mode],
312 mux_phys + m->reg_offset, m->reg_offset, val, 583 partition->phys + m->reg_offset, m->reg_offset, val,
313 m->balls[0] ? m->balls[0] : none, 584 m->balls[0] ? m->balls[0] : none,
314 m->balls[1] ? m->balls[1] : none); 585 m->balls[1] ? m->balls[1] : none);
315 seq_printf(s, "mode: "); 586 seq_printf(s, "mode: ");
@@ -331,14 +602,15 @@ static int omap_mux_dbg_signal_show(struct seq_file *s, void *unused)
331#define OMAP_MUX_MAX_ARG_CHAR 7 602#define OMAP_MUX_MAX_ARG_CHAR 7
332 603
333static ssize_t omap_mux_dbg_signal_write(struct file *file, 604static ssize_t omap_mux_dbg_signal_write(struct file *file,
334 const char __user *user_buf, 605 const char __user *user_buf,
335 size_t count, loff_t *ppos) 606 size_t count, loff_t *ppos)
336{ 607{
337 char buf[OMAP_MUX_MAX_ARG_CHAR]; 608 char buf[OMAP_MUX_MAX_ARG_CHAR];
338 struct seq_file *seqf; 609 struct seq_file *seqf;
339 struct omap_mux *m; 610 struct omap_mux *m;
340 unsigned long val; 611 unsigned long val;
341 int buf_size, ret; 612 int buf_size, ret;
613 struct omap_mux_partition *partition;
342 614
343 if (count > OMAP_MUX_MAX_ARG_CHAR) 615 if (count > OMAP_MUX_MAX_ARG_CHAR)
344 return -EINVAL; 616 return -EINVAL;
@@ -359,7 +631,11 @@ static ssize_t omap_mux_dbg_signal_write(struct file *file,
359 seqf = file->private_data; 631 seqf = file->private_data;
360 m = seqf->private; 632 m = seqf->private;
361 633
362 omap_mux_write((u16)val, m->reg_offset); 634 partition = omap_mux_get_partition(m);
635 if (!partition)
636 return -ENODEV;
637
638 omap_mux_write(partition, (u16)val, m->reg_offset);
363 *ppos += count; 639 *ppos += count;
364 640
365 return count; 641 return count;
@@ -380,22 +656,38 @@ static const struct file_operations omap_mux_dbg_signal_fops = {
380 656
381static struct dentry *mux_dbg_dir; 657static struct dentry *mux_dbg_dir;
382 658
383static void __init omap_mux_dbg_init(void) 659static void __init omap_mux_dbg_create_entry(
660 struct omap_mux_partition *partition,
661 struct dentry *mux_dbg_dir)
384{ 662{
385 struct omap_mux_entry *e; 663 struct omap_mux_entry *e;
386 664
665 list_for_each_entry(e, &partition->muxmodes, node) {
666 struct omap_mux *m = &e->mux;
667
668 (void)debugfs_create_file(m->muxnames[0], S_IWUSR, mux_dbg_dir,
669 m, &omap_mux_dbg_signal_fops);
670 }
671}
672
673static void __init omap_mux_dbg_init(void)
674{
675 struct omap_mux_partition *partition;
676 static struct dentry *mux_dbg_board_dir;
677
387 mux_dbg_dir = debugfs_create_dir("omap_mux", NULL); 678 mux_dbg_dir = debugfs_create_dir("omap_mux", NULL);
388 if (!mux_dbg_dir) 679 if (!mux_dbg_dir)
389 return; 680 return;
390 681
391 (void)debugfs_create_file("board", S_IRUGO, mux_dbg_dir, 682 mux_dbg_board_dir = debugfs_create_dir("board", mux_dbg_dir);
392 NULL, &omap_mux_dbg_board_fops); 683 if (!mux_dbg_board_dir)
393 684 return;
394 list_for_each_entry(e, &muxmodes, node) {
395 struct omap_mux *m = &e->mux;
396 685
397 (void)debugfs_create_file(m->muxnames[0], S_IWUGO, mux_dbg_dir, 686 list_for_each_entry(partition, &mux_partitions, node) {
398 m, &omap_mux_dbg_signal_fops); 687 omap_mux_dbg_create_entry(partition, mux_dbg_dir);
688 (void)debugfs_create_file(partition->name, S_IRUGO,
689 mux_dbg_board_dir, partition,
690 &omap_mux_dbg_board_fops);
399 } 691 }
400} 692}
401 693
@@ -422,23 +714,25 @@ static void __init omap_mux_free_names(struct omap_mux *m)
422/* Free all data except for GPIO pins unless CONFIG_DEBUG_FS is set */ 714/* Free all data except for GPIO pins unless CONFIG_DEBUG_FS is set */
423static int __init omap_mux_late_init(void) 715static int __init omap_mux_late_init(void)
424{ 716{
425 struct omap_mux_entry *e, *tmp; 717 struct omap_mux_partition *partition;
426 718
427 list_for_each_entry_safe(e, tmp, &muxmodes, node) { 719 list_for_each_entry(partition, &mux_partitions, node) {
428 struct omap_mux *m = &e->mux; 720 struct omap_mux_entry *e, *tmp;
429 u16 mode = omap_mux_read(m->reg_offset); 721 list_for_each_entry_safe(e, tmp, &partition->muxmodes, node) {
722 struct omap_mux *m = &e->mux;
723 u16 mode = omap_mux_read(partition, m->reg_offset);
430 724
431 if (OMAP_MODE_GPIO(mode)) 725 if (OMAP_MODE_GPIO(mode))
432 continue; 726 continue;
433 727
434#ifndef CONFIG_DEBUG_FS 728#ifndef CONFIG_DEBUG_FS
435 mutex_lock(&muxmode_mutex); 729 mutex_lock(&muxmode_mutex);
436 list_del(&e->node); 730 list_del(&e->node);
437 mutex_unlock(&muxmode_mutex); 731 mutex_unlock(&muxmode_mutex);
438 omap_mux_free_names(m); 732 omap_mux_free_names(m);
439 kfree(m); 733 kfree(m);
440#endif 734#endif
441 735 }
442 } 736 }
443 737
444 omap_mux_dbg_init(); 738 omap_mux_dbg_init();
@@ -463,8 +757,8 @@ static void __init omap_mux_package_fixup(struct omap_mux *p,
463 s++; 757 s++;
464 } 758 }
465 if (!found) 759 if (!found)
466 printk(KERN_ERR "mux: Unknown entry offset 0x%x\n", 760 pr_err("%s: Unknown entry offset 0x%x\n", __func__,
467 p->reg_offset); 761 p->reg_offset);
468 p++; 762 p++;
469 } 763 }
470} 764}
@@ -488,8 +782,8 @@ static void __init omap_mux_package_init_balls(struct omap_ball *b,
488 s++; 782 s++;
489 } 783 }
490 if (!found) 784 if (!found)
491 printk(KERN_ERR "mux: Unknown ball offset 0x%x\n", 785 pr_err("%s: Unknown ball offset 0x%x\n", __func__,
492 b->reg_offset); 786 b->reg_offset);
493 b++; 787 b++;
494 } 788 }
495} 789}
@@ -555,7 +849,7 @@ static void __init omap_mux_set_cmdline_signals(void)
555} 849}
556 850
557static int __init omap_mux_copy_names(struct omap_mux *src, 851static int __init omap_mux_copy_names(struct omap_mux *src,
558 struct omap_mux *dst) 852 struct omap_mux *dst)
559{ 853{
560 int i; 854 int i;
561 855
@@ -593,51 +887,63 @@ free:
593 887
594#endif /* CONFIG_OMAP_MUX */ 888#endif /* CONFIG_OMAP_MUX */
595 889
596static u16 omap_mux_get_by_gpio(int gpio) 890static struct omap_mux *omap_mux_get_by_gpio(
891 struct omap_mux_partition *partition,
892 int gpio)
597{ 893{
598 struct omap_mux_entry *e; 894 struct omap_mux_entry *e;
599 u16 offset = OMAP_MUX_TERMINATOR; 895 struct omap_mux *ret = NULL;
600 896
601 list_for_each_entry(e, &muxmodes, node) { 897 list_for_each_entry(e, &partition->muxmodes, node) {
602 struct omap_mux *m = &e->mux; 898 struct omap_mux *m = &e->mux;
603 if (m->gpio == gpio) { 899 if (m->gpio == gpio) {
604 offset = m->reg_offset; 900 ret = m;
605 break; 901 break;
606 } 902 }
607 } 903 }
608 904
609 return offset; 905 return ret;
610} 906}
611 907
612/* Needed for dynamic muxing of GPIO pins for off-idle */ 908/* Needed for dynamic muxing of GPIO pins for off-idle */
613u16 omap_mux_get_gpio(int gpio) 909u16 omap_mux_get_gpio(int gpio)
614{ 910{
615 u16 offset; 911 struct omap_mux_partition *partition;
912 struct omap_mux *m = NULL;
616 913
617 offset = omap_mux_get_by_gpio(gpio); 914 list_for_each_entry(partition, &mux_partitions, node) {
618 if (offset == OMAP_MUX_TERMINATOR) { 915 m = omap_mux_get_by_gpio(partition, gpio);
619 printk(KERN_ERR "mux: Could not get gpio%i\n", gpio); 916 if (m)
620 return offset; 917 return omap_mux_read(partition, m->reg_offset);
621 } 918 }
622 919
623 return omap_mux_read(offset); 920 if (!m || m->reg_offset == OMAP_MUX_TERMINATOR)
921 pr_err("%s: Could not get gpio%i\n", __func__, gpio);
922
923 return OMAP_MUX_TERMINATOR;
624} 924}
625 925
626/* Needed for dynamic muxing of GPIO pins for off-idle */ 926/* Needed for dynamic muxing of GPIO pins for off-idle */
627void omap_mux_set_gpio(u16 val, int gpio) 927void omap_mux_set_gpio(u16 val, int gpio)
628{ 928{
629 u16 offset; 929 struct omap_mux_partition *partition;
930 struct omap_mux *m = NULL;
630 931
631 offset = omap_mux_get_by_gpio(gpio); 932 list_for_each_entry(partition, &mux_partitions, node) {
632 if (offset == OMAP_MUX_TERMINATOR) { 933 m = omap_mux_get_by_gpio(partition, gpio);
633 printk(KERN_ERR "mux: Could not set gpio%i\n", gpio); 934 if (m) {
634 return; 935 omap_mux_write(partition, val, m->reg_offset);
936 return;
937 }
635 } 938 }
636 939
637 omap_mux_write(val, offset); 940 if (!m || m->reg_offset == OMAP_MUX_TERMINATOR)
941 pr_err("%s: Could not set gpio%i\n", __func__, gpio);
638} 942}
639 943
640static struct omap_mux * __init omap_mux_list_add(struct omap_mux *src) 944static struct omap_mux * __init omap_mux_list_add(
945 struct omap_mux_partition *partition,
946 struct omap_mux *src)
641{ 947{
642 struct omap_mux_entry *entry; 948 struct omap_mux_entry *entry;
643 struct omap_mux *m; 949 struct omap_mux *m;
@@ -647,7 +953,7 @@ static struct omap_mux * __init omap_mux_list_add(struct omap_mux *src)
647 return NULL; 953 return NULL;
648 954
649 m = &entry->mux; 955 m = &entry->mux;
650 memcpy(m, src, sizeof(struct omap_mux_entry)); 956 entry->mux = *src;
651 957
652#ifdef CONFIG_OMAP_MUX 958#ifdef CONFIG_OMAP_MUX
653 if (omap_mux_copy_names(src, m)) { 959 if (omap_mux_copy_names(src, m)) {
@@ -657,7 +963,7 @@ static struct omap_mux * __init omap_mux_list_add(struct omap_mux *src)
657#endif 963#endif
658 964
659 mutex_lock(&muxmode_mutex); 965 mutex_lock(&muxmode_mutex);
660 list_add_tail(&entry->node, &muxmodes); 966 list_add_tail(&entry->node, &partition->muxmodes);
661 mutex_unlock(&muxmode_mutex); 967 mutex_unlock(&muxmode_mutex);
662 968
663 return m; 969 return m;
@@ -668,7 +974,8 @@ static struct omap_mux * __init omap_mux_list_add(struct omap_mux *src)
668 * the GPIO to mux offset mapping that is needed for dynamic muxing 974 * the GPIO to mux offset mapping that is needed for dynamic muxing
669 * of GPIO pins for off-idle. 975 * of GPIO pins for off-idle.
670 */ 976 */
671static void __init omap_mux_init_list(struct omap_mux *superset) 977static void __init omap_mux_init_list(struct omap_mux_partition *partition,
978 struct omap_mux *superset)
672{ 979{
673 while (superset->reg_offset != OMAP_MUX_TERMINATOR) { 980 while (superset->reg_offset != OMAP_MUX_TERMINATOR) {
674 struct omap_mux *entry; 981 struct omap_mux *entry;
@@ -680,15 +987,16 @@ static void __init omap_mux_init_list(struct omap_mux *superset)
680 } 987 }
681#else 988#else
682 /* Skip pins that are not muxed as GPIO by bootloader */ 989 /* Skip pins that are not muxed as GPIO by bootloader */
683 if (!OMAP_MODE_GPIO(omap_mux_read(superset->reg_offset))) { 990 if (!OMAP_MODE_GPIO(omap_mux_read(partition,
991 superset->reg_offset))) {
684 superset++; 992 superset++;
685 continue; 993 continue;
686 } 994 }
687#endif 995#endif
688 996
689 entry = omap_mux_list_add(superset); 997 entry = omap_mux_list_add(partition, superset);
690 if (!entry) { 998 if (!entry) {
691 printk(KERN_ERR "mux: Could not add entry\n"); 999 pr_err("%s: Could not add entry\n", __func__);
692 return; 1000 return;
693 } 1001 }
694 superset++; 1002 superset++;
@@ -707,10 +1015,11 @@ static void omap_mux_init_package(struct omap_mux *superset,
707 omap_mux_package_init_balls(package_balls, superset); 1015 omap_mux_package_init_balls(package_balls, superset);
708} 1016}
709 1017
710static void omap_mux_init_signals(struct omap_board_mux *board_mux) 1018static void omap_mux_init_signals(struct omap_mux_partition *partition,
1019 struct omap_board_mux *board_mux)
711{ 1020{
712 omap_mux_set_cmdline_signals(); 1021 omap_mux_set_cmdline_signals();
713 omap_mux_write_array(board_mux); 1022 omap_mux_write_array(partition, board_mux);
714} 1023}
715 1024
716#else 1025#else
@@ -721,34 +1030,50 @@ static void omap_mux_init_package(struct omap_mux *superset,
721{ 1030{
722} 1031}
723 1032
724static void omap_mux_init_signals(struct omap_board_mux *board_mux) 1033static void omap_mux_init_signals(struct omap_mux_partition *partition,
1034 struct omap_board_mux *board_mux)
725{ 1035{
726} 1036}
727 1037
728#endif 1038#endif
729 1039
730int __init omap_mux_init(u32 mux_pbase, u32 mux_size, 1040static u32 mux_partitions_cnt;
731 struct omap_mux *superset,
732 struct omap_mux *package_subset,
733 struct omap_board_mux *board_mux,
734 struct omap_ball *package_balls)
735{
736 if (mux_base)
737 return -EBUSY;
738 1041
739 mux_phys = mux_pbase; 1042int __init omap_mux_init(const char *name, u32 flags,
740 mux_base = ioremap(mux_pbase, mux_size); 1043 u32 mux_pbase, u32 mux_size,
741 if (!mux_base) { 1044 struct omap_mux *superset,
742 printk(KERN_ERR "mux: Could not ioremap\n"); 1045 struct omap_mux *package_subset,
1046 struct omap_board_mux *board_mux,
1047 struct omap_ball *package_balls)
1048{
1049 struct omap_mux_partition *partition;
1050
1051 partition = kzalloc(sizeof(struct omap_mux_partition), GFP_KERNEL);
1052 if (!partition)
1053 return -ENOMEM;
1054
1055 partition->name = name;
1056 partition->flags = flags;
1057 partition->size = mux_size;
1058 partition->phys = mux_pbase;
1059 partition->base = ioremap(mux_pbase, mux_size);
1060 if (!partition->base) {
1061 pr_err("%s: Could not ioremap mux partition at 0x%08x\n",
1062 __func__, partition->phys);
1063 kfree(partition);
743 return -ENODEV; 1064 return -ENODEV;
744 } 1065 }
745 1066
746 if (cpu_is_omap24xx()) 1067 INIT_LIST_HEAD(&partition->muxmodes);
747 omap_mux_flags = MUXABLE_GPIO_MODE3; 1068
1069 list_add_tail(&partition->node, &mux_partitions);
1070 mux_partitions_cnt++;
1071 pr_info("%s: Add partition: #%d: %s, flags: %x\n", __func__,
1072 mux_partitions_cnt, partition->name, partition->flags);
748 1073
749 omap_mux_init_package(superset, package_subset, package_balls); 1074 omap_mux_init_package(superset, package_subset, package_balls);
750 omap_mux_init_list(superset); 1075 omap_mux_init_list(partition, superset);
751 omap_mux_init_signals(board_mux); 1076 omap_mux_init_signals(partition, board_mux);
752 1077
753 return 0; 1078 return 0;
754} 1079}
diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
index a8e040c2c7e9..2132308ad1e4 100644
--- a/arch/arm/mach-omap2/mux.h
+++ b/arch/arm/mach-omap2/mux.h
@@ -1,6 +1,6 @@
1/* 1/*
2 * Copyright (C) 2009 Nokia 2 * Copyright (C) 2009 Nokia
3 * Copyright (C) 2009 Texas Instruments 3 * Copyright (C) 2009-2010 Texas Instruments
4 * 4 *
5 * This program is free software; you can redistribute it and/or modify 5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as 6 * it under the terms of the GNU General Public License version 2 as
@@ -10,6 +10,7 @@
10#include "mux2420.h" 10#include "mux2420.h"
11#include "mux2430.h" 11#include "mux2430.h"
12#include "mux34xx.h" 12#include "mux34xx.h"
13#include "mux44xx.h"
13 14
14#define OMAP_MUX_TERMINATOR 0xffff 15#define OMAP_MUX_TERMINATOR 0xffff
15 16
@@ -37,6 +38,9 @@
37#define OMAP_OFF_PULL_UP (1 << 13) 38#define OMAP_OFF_PULL_UP (1 << 13)
38#define OMAP_WAKEUP_EN (1 << 14) 39#define OMAP_WAKEUP_EN (1 << 14)
39 40
41/* 44xx specific mux bit defines */
42#define OMAP_WAKEUP_EVENT (1 << 15)
43
40/* Active pin states */ 44/* Active pin states */
41#define OMAP_PIN_OUTPUT 0 45#define OMAP_PIN_OUTPUT 0
42#define OMAP_PIN_INPUT OMAP_INPUT_EN 46#define OMAP_PIN_INPUT OMAP_INPUT_EN
@@ -56,8 +60,10 @@
56 60
57#define OMAP_MODE_GPIO(x) (((x) & OMAP_MUX_MODE7) == OMAP_MUX_MODE4) 61#define OMAP_MODE_GPIO(x) (((x) & OMAP_MUX_MODE7) == OMAP_MUX_MODE4)
58 62
59/* Flags for omap_mux_init */ 63/* Flags for omapX_mux_init */
60#define OMAP_PACKAGE_MASK 0xffff 64#define OMAP_PACKAGE_MASK 0xffff
65#define OMAP_PACKAGE_CBS 8 /* 547-pin 0.40 0.40 */
66#define OMAP_PACKAGE_CBL 7 /* 547-pin 0.40 0.40 */
61#define OMAP_PACKAGE_CBP 6 /* 515-pin 0.40 0.50 */ 67#define OMAP_PACKAGE_CBP 6 /* 515-pin 0.40 0.50 */
62#define OMAP_PACKAGE_CUS 5 /* 423-pin 0.65 */ 68#define OMAP_PACKAGE_CUS 5 /* 423-pin 0.65 */
63#define OMAP_PACKAGE_CBB 4 /* 515-pin 0.40 0.50 */ 69#define OMAP_PACKAGE_CBB 4 /* 515-pin 0.40 0.50 */
@@ -66,14 +72,61 @@
66#define OMAP_PACKAGE_ZAF 1 /* 2420 447-pin SIP */ 72#define OMAP_PACKAGE_ZAF 1 /* 2420 447-pin SIP */
67 73
68 74
69#define OMAP_MUX_NR_MODES 8 /* Available modes */ 75#define OMAP_MUX_NR_MODES 8 /* Available modes */
70#define OMAP_MUX_NR_SIDES 2 /* Bottom & top */ 76#define OMAP_MUX_NR_SIDES 2 /* Bottom & top */
77
78/*
79 * omap_mux_init flags definition:
80 *
81 * OMAP_MUX_REG_8BIT: Ensure that access to padconf is done in 8 bits.
82 * The default value is 16 bits.
83 * OMAP_MUX_GPIO_IN_MODE3: The GPIO is selected in mode3.
84 * The default is mode4.
85 */
86#define OMAP_MUX_REG_8BIT (1 << 0)
87#define OMAP_MUX_GPIO_IN_MODE3 (1 << 1)
88
89/**
90 * struct omap_board_data - board specific device data
91 * @id: instance id
92 * @flags: additional flags for platform init code
93 * @pads: array of device specific pads
94 * @pads_cnt: ARRAY_SIZE() of pads
95 */
96struct omap_board_data {
97 int id;
98 u32 flags;
99 struct omap_device_pad *pads;
100 int pads_cnt;
101};
102
103/**
104 * struct mux_partition - contain partition related information
105 * @name: name of the current partition
106 * @flags: flags specific to this partition
107 * @phys: physical address
108 * @size: partition size
109 * @base: virtual address after ioremap
110 * @muxmodes: list of nodes that belong to a partition
111 * @node: list node for the partitions linked list
112 */
113struct omap_mux_partition {
114 const char *name;
115 u32 flags;
116 u32 phys;
117 u32 size;
118 void __iomem *base;
119 struct list_head muxmodes;
120 struct list_head node;
121};
71 122
72/** 123/**
73 * struct omap_mux - data for omap mux register offset and it's value 124 * struct omap_mux - data for omap mux register offset and it's value
74 * @reg_offset: mux register offset from the mux base 125 * @reg_offset: mux register offset from the mux base
75 * @gpio: GPIO number 126 * @gpio: GPIO number
76 * @muxnames: available signal modes for a ball 127 * @muxnames: available signal modes for a ball
128 * @balls: available balls on the package
129 * @partition: mux partition
77 */ 130 */
78struct omap_mux { 131struct omap_mux {
79 u16 reg_offset; 132 u16 reg_offset;
@@ -106,6 +159,39 @@ struct omap_board_mux {
106 u16 value; 159 u16 value;
107}; 160};
108 161
162#define OMAP_DEVICE_PAD_REMUX BIT(1) /* Dynamically remux a pad,
163 needs enable, idle and off
164 values */
165#define OMAP_DEVICE_PAD_WAKEUP BIT(0) /* Pad is wake-up capable */
166
167/**
168 * struct omap_device_pad - device specific pad configuration
169 * @name: signal name
170 * @flags: pad specific runtime flags
171 * @enable: runtime value for a pad
172 * @idle: idle value for a pad
173 * @off: off value for a pad, defaults to safe mode
174 * @partition: mux partition
175 * @mux: mux register
176 */
177struct omap_device_pad {
178 char *name;
179 u8 flags;
180 u16 enable;
181 u16 idle;
182 u16 off;
183 struct omap_mux_partition *partition;
184 struct omap_mux *mux;
185};
186
187struct omap_hwmod_mux_info;
188
189#define OMAP_MUX_STATIC(signal, mode) \
190{ \
191 .name = (signal), \
192 .enable = (mode), \
193}
194
109#if defined(CONFIG_OMAP_MUX) 195#if defined(CONFIG_OMAP_MUX)
110 196
111/** 197/**
@@ -120,7 +206,24 @@ int omap_mux_init_gpio(int gpio, int val);
120 * @muxname: Mux name in mode0_name.signal_name format 206 * @muxname: Mux name in mode0_name.signal_name format
121 * @val: Options for the mux register value 207 * @val: Options for the mux register value
122 */ 208 */
123int omap_mux_init_signal(char *muxname, int val); 209int omap_mux_init_signal(const char *muxname, int val);
210
211/**
212 * omap_hwmod_mux_init - initialize hwmod specific mux data
213 * @bpads: Board specific device signal names
214 * @nr_pads: Number of signal names for the device
215 */
216extern struct omap_hwmod_mux_info *
217omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);
218
219/**
220 * omap_hwmod_mux - omap hwmod specific pin muxing
221 * @hmux: Pads for a hwmod
222 * @state: Desired _HWMOD_STATE
223 *
224 * Called only from omap_hwmod.c, do not use.
225 */
226void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
124 227
125#else 228#else
126 229
@@ -133,6 +236,18 @@ static inline int omap_mux_init_signal(char *muxname, int val)
133 return 0; 236 return 0;
134} 237}
135 238
239static inline struct omap_hwmod_mux_info *
240omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads)
241{
242 return NULL;
243}
244
245static inline void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
246{
247}
248
249static struct omap_board_mux *board_mux __initdata __maybe_unused;
250
136#endif 251#endif
137 252
138/** 253/**
@@ -151,28 +266,39 @@ u16 omap_mux_get_gpio(int gpio);
151void omap_mux_set_gpio(u16 val, int gpio); 266void omap_mux_set_gpio(u16 val, int gpio);
152 267
153/** 268/**
269 * omap_mux_get() - get a mux partition by name
270 * @name: Name of the mux partition
271 *
272 */
273struct omap_mux_partition *omap_mux_get(const char *name);
274
275/**
154 * omap_mux_read() - read mux register 276 * omap_mux_read() - read mux register
277 * @partition: Mux partition
155 * @mux_offset: Offset of the mux register 278 * @mux_offset: Offset of the mux register
156 * 279 *
157 */ 280 */
158u16 omap_mux_read(u16 mux_offset); 281u16 omap_mux_read(struct omap_mux_partition *p, u16 mux_offset);
159 282
160/** 283/**
161 * omap_mux_write() - write mux register 284 * omap_mux_write() - write mux register
285 * @partition: Mux partition
162 * @val: New mux register value 286 * @val: New mux register value
163 * @mux_offset: Offset of the mux register 287 * @mux_offset: Offset of the mux register
164 * 288 *
165 * This should be only needed for dynamic remuxing of non-gpio signals. 289 * This should be only needed for dynamic remuxing of non-gpio signals.
166 */ 290 */
167void omap_mux_write(u16 val, u16 mux_offset); 291void omap_mux_write(struct omap_mux_partition *p, u16 val, u16 mux_offset);
168 292
169/** 293/**
170 * omap_mux_write_array() - write an array of mux registers 294 * omap_mux_write_array() - write an array of mux registers
295 * @partition: Mux partition
171 * @board_mux: Array of mux registers terminated by MAP_MUX_TERMINATOR 296 * @board_mux: Array of mux registers terminated by MAP_MUX_TERMINATOR
172 * 297 *
173 * This should be only needed for dynamic remuxing of non-gpio signals. 298 * This should be only needed for dynamic remuxing of non-gpio signals.
174 */ 299 */
175void omap_mux_write_array(struct omap_board_mux *board_mux); 300void omap_mux_write_array(struct omap_mux_partition *p,
301 struct omap_board_mux *board_mux);
176 302
177/** 303/**
178 * omap2420_mux_init() - initialize mux system with board specific set 304 * omap2420_mux_init() - initialize mux system with board specific set
@@ -196,10 +322,21 @@ int omap2430_mux_init(struct omap_board_mux *board_mux, int flags);
196int omap3_mux_init(struct omap_board_mux *board_mux, int flags); 322int omap3_mux_init(struct omap_board_mux *board_mux, int flags);
197 323
198/** 324/**
325 * omap4_mux_init() - initialize mux system with board specific set
326 * @board_subset: Board specific mux table
327 * @board_wkup_subset: Board specific mux table for wakeup instance
328 * @flags: OMAP package type used for the board
329 */
330int omap4_mux_init(struct omap_board_mux *board_subset,
331 struct omap_board_mux *board_wkup_subset, int flags);
332
333/**
199 * omap_mux_init - private mux init function, do not call 334 * omap_mux_init - private mux init function, do not call
200 */ 335 */
201int omap_mux_init(u32 mux_pbase, u32 mux_size, 336int omap_mux_init(const char *name, u32 flags,
202 struct omap_mux *superset, 337 u32 mux_pbase, u32 mux_size,
203 struct omap_mux *package_subset, 338 struct omap_mux *superset,
204 struct omap_board_mux *board_mux, 339 struct omap_mux *package_subset,
205 struct omap_ball *package_balls); 340 struct omap_board_mux *board_mux,
341 struct omap_ball *package_balls);
342
diff --git a/arch/arm/mach-omap2/mux2420.c b/arch/arm/mach-omap2/mux2420.c
index fdb04a7eb8aa..cf6de0971c6c 100644
--- a/arch/arm/mach-omap2/mux2420.c
+++ b/arch/arm/mach-omap2/mux2420.c
@@ -507,7 +507,7 @@ static struct omap_mux __initdata omap2420_muxmodes[] = {
507 * Balls for 447-pin POP package 507 * Balls for 447-pin POP package
508 */ 508 */
509#ifdef CONFIG_DEBUG_FS 509#ifdef CONFIG_DEBUG_FS
510struct omap_ball __initdata omap2420_pop_ball[] = { 510static struct omap_ball __initdata omap2420_pop_ball[] = {
511 _OMAP2420_BALLENTRY(CAM_D0, "y4", NULL), 511 _OMAP2420_BALLENTRY(CAM_D0, "y4", NULL),
512 _OMAP2420_BALLENTRY(CAM_D1, "y3", NULL), 512 _OMAP2420_BALLENTRY(CAM_D1, "y3", NULL),
513 _OMAP2420_BALLENTRY(CAM_D2, "u7", NULL), 513 _OMAP2420_BALLENTRY(CAM_D2, "u7", NULL),
@@ -678,11 +678,13 @@ int __init omap2420_mux_init(struct omap_board_mux *board_subset, int flags)
678 case OMAP_PACKAGE_ZAF: 678 case OMAP_PACKAGE_ZAF:
679 /* REVISIT: Please add data */ 679 /* REVISIT: Please add data */
680 default: 680 default:
681 pr_warning("mux: No ball data available for omap2420 package\n"); 681 pr_warning("%s: No ball data available for omap2420 package\n",
682 __func__);
682 } 683 }
683 684
684 return omap_mux_init(OMAP2420_CONTROL_PADCONF_MUX_PBASE, 685 return omap_mux_init("core", OMAP_MUX_REG_8BIT | OMAP_MUX_GPIO_IN_MODE3,
686 OMAP2420_CONTROL_PADCONF_MUX_PBASE,
685 OMAP2420_CONTROL_PADCONF_MUX_SIZE, 687 OMAP2420_CONTROL_PADCONF_MUX_SIZE,
686 omap2420_muxmodes, NULL, board_subset, 688 omap2420_muxmodes, NULL, board_subset,
687 package_balls); 689 package_balls);
688} 690}
diff --git a/arch/arm/mach-omap2/mux2430.c b/arch/arm/mach-omap2/mux2430.c
index 7dcaaa8af32a..4185f92553db 100644
--- a/arch/arm/mach-omap2/mux2430.c
+++ b/arch/arm/mach-omap2/mux2430.c
@@ -586,7 +586,7 @@ static struct omap_mux __initdata omap2430_muxmodes[] = {
586 * 447-pin s-PBGA Package, 0.00mm Ball Pitch (Bottom) 586 * 447-pin s-PBGA Package, 0.00mm Ball Pitch (Bottom)
587 */ 587 */
588#ifdef CONFIG_DEBUG_FS 588#ifdef CONFIG_DEBUG_FS
589struct omap_ball __initdata omap2430_pop_ball[] = { 589static struct omap_ball __initdata omap2430_pop_ball[] = {
590 _OMAP2430_BALLENTRY(CAM_D0, "t8", NULL), 590 _OMAP2430_BALLENTRY(CAM_D0, "t8", NULL),
591 _OMAP2430_BALLENTRY(CAM_D1, "t4", NULL), 591 _OMAP2430_BALLENTRY(CAM_D1, "t4", NULL),
592 _OMAP2430_BALLENTRY(CAM_D10, "r4", NULL), 592 _OMAP2430_BALLENTRY(CAM_D10, "r4", NULL),
@@ -781,11 +781,13 @@ int __init omap2430_mux_init(struct omap_board_mux *board_subset, int flags)
781 package_balls = omap2430_pop_ball; 781 package_balls = omap2430_pop_ball;
782 break; 782 break;
783 default: 783 default:
784 pr_warning("mux: No ball data available for omap2420 package\n"); 784 pr_warning("%s: No ball data available for omap2420 package\n",
785 __func__);
785 } 786 }
786 787
787 return omap_mux_init(OMAP2430_CONTROL_PADCONF_MUX_PBASE, 788 return omap_mux_init("core", OMAP_MUX_REG_8BIT | OMAP_MUX_GPIO_IN_MODE3,
789 OMAP2430_CONTROL_PADCONF_MUX_PBASE,
788 OMAP2430_CONTROL_PADCONF_MUX_SIZE, 790 OMAP2430_CONTROL_PADCONF_MUX_SIZE,
789 omap2430_muxmodes, NULL, board_subset, 791 omap2430_muxmodes, NULL, board_subset,
790 package_balls); 792 package_balls);
791} 793}
diff --git a/arch/arm/mach-omap2/mux2430.h b/arch/arm/mach-omap2/mux2430.h
index adbea0d03e08..9fd93149ebd9 100644
--- a/arch/arm/mach-omap2/mux2430.h
+++ b/arch/arm/mach-omap2/mux2430.h
@@ -22,7 +22,7 @@
22 * absolute addresses. The name in the macro is the mode-0 name of 22 * absolute addresses. The name in the macro is the mode-0 name of
23 * the pin. NOTE: These registers are 8-bits wide. 23 * the pin. NOTE: These registers are 8-bits wide.
24 * 24 *
25 * Note that these defines use SDMMC instead of MMC for compability 25 * Note that these defines use SDMMC instead of MMC for compatibility
26 * with signal names used in 3630. 26 * with signal names used in 3630.
27 */ 27 */
28#define OMAP2430_CONTROL_PADCONF_GPMC_CLK_OFFSET 0x000 28#define OMAP2430_CONTROL_PADCONF_GPMC_CLK_OFFSET 0x000
diff --git a/arch/arm/mach-omap2/mux34xx.c b/arch/arm/mach-omap2/mux34xx.c
index f64d7eea3451..17f80e4ab162 100644
--- a/arch/arm/mach-omap2/mux34xx.c
+++ b/arch/arm/mach-omap2/mux34xx.c
@@ -703,7 +703,7 @@ static struct omap_mux __initdata omap3_muxmodes[] = {
703 * Signals different on CBC package compared to the superset 703 * Signals different on CBC package compared to the superset
704 */ 704 */
705#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CBC) 705#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CBC)
706struct omap_mux __initdata omap3_cbc_subset[] = { 706static struct omap_mux __initdata omap3_cbc_subset[] = {
707 { .reg_offset = OMAP_MUX_TERMINATOR }, 707 { .reg_offset = OMAP_MUX_TERMINATOR },
708}; 708};
709#else 709#else
@@ -721,7 +721,7 @@ struct omap_mux __initdata omap3_cbc_subset[] = {
721 */ 721 */
722#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \ 722#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
723 && defined(CONFIG_OMAP_PACKAGE_CBC) 723 && defined(CONFIG_OMAP_PACKAGE_CBC)
724struct omap_ball __initdata omap3_cbc_ball[] = { 724static struct omap_ball __initdata omap3_cbc_ball[] = {
725 _OMAP3_BALLENTRY(CAM_D0, "ae16", NULL), 725 _OMAP3_BALLENTRY(CAM_D0, "ae16", NULL),
726 _OMAP3_BALLENTRY(CAM_D1, "ae15", NULL), 726 _OMAP3_BALLENTRY(CAM_D1, "ae15", NULL),
727 _OMAP3_BALLENTRY(CAM_D10, "d25", NULL), 727 _OMAP3_BALLENTRY(CAM_D10, "d25", NULL),
@@ -931,7 +931,7 @@ struct omap_ball __initdata omap3_cbc_ball[] = {
931 * Signals different on CUS package compared to superset 931 * Signals different on CUS package compared to superset
932 */ 932 */
933#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CUS) 933#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CUS)
934struct omap_mux __initdata omap3_cus_subset[] = { 934static struct omap_mux __initdata omap3_cus_subset[] = {
935 _OMAP3_MUXENTRY(CAM_D10, 109, 935 _OMAP3_MUXENTRY(CAM_D10, 109,
936 "cam_d10", NULL, NULL, NULL, 936 "cam_d10", NULL, NULL, NULL,
937 "gpio_109", NULL, NULL, "safe_mode"), 937 "gpio_109", NULL, NULL, "safe_mode"),
@@ -1077,7 +1077,7 @@ struct omap_mux __initdata omap3_cus_subset[] = {
1077 */ 1077 */
1078#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \ 1078#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
1079 && defined(CONFIG_OMAP_PACKAGE_CUS) 1079 && defined(CONFIG_OMAP_PACKAGE_CUS)
1080struct omap_ball __initdata omap3_cus_ball[] = { 1080static struct omap_ball __initdata omap3_cus_ball[] = {
1081 _OMAP3_BALLENTRY(CAM_D0, "ab18", NULL), 1081 _OMAP3_BALLENTRY(CAM_D0, "ab18", NULL),
1082 _OMAP3_BALLENTRY(CAM_D1, "ac18", NULL), 1082 _OMAP3_BALLENTRY(CAM_D1, "ac18", NULL),
1083 _OMAP3_BALLENTRY(CAM_D10, "f21", NULL), 1083 _OMAP3_BALLENTRY(CAM_D10, "f21", NULL),
@@ -1269,7 +1269,7 @@ struct omap_ball __initdata omap3_cus_ball[] = {
1269 * Signals different on CBB package comapared to superset 1269 * Signals different on CBB package comapared to superset
1270 */ 1270 */
1271#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CBB) 1271#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CBB)
1272struct omap_mux __initdata omap3_cbb_subset[] = { 1272static struct omap_mux __initdata omap3_cbb_subset[] = {
1273 _OMAP3_MUXENTRY(CAM_D10, 109, 1273 _OMAP3_MUXENTRY(CAM_D10, 109,
1274 "cam_d10", NULL, NULL, NULL, 1274 "cam_d10", NULL, NULL, NULL,
1275 "gpio_109", NULL, NULL, "safe_mode"), 1275 "gpio_109", NULL, NULL, "safe_mode"),
@@ -1390,7 +1390,7 @@ struct omap_mux __initdata omap3_cbb_subset[] = {
1390 */ 1390 */
1391#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \ 1391#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
1392 && defined(CONFIG_OMAP_PACKAGE_CBB) 1392 && defined(CONFIG_OMAP_PACKAGE_CBB)
1393struct omap_ball __initdata omap3_cbb_ball[] = { 1393static struct omap_ball __initdata omap3_cbb_ball[] = {
1394 _OMAP3_BALLENTRY(CAM_D0, "ag17", NULL), 1394 _OMAP3_BALLENTRY(CAM_D0, "ag17", NULL),
1395 _OMAP3_BALLENTRY(CAM_D1, "ah17", NULL), 1395 _OMAP3_BALLENTRY(CAM_D1, "ah17", NULL),
1396 _OMAP3_BALLENTRY(CAM_D10, "b25", NULL), 1396 _OMAP3_BALLENTRY(CAM_D10, "b25", NULL),
@@ -1600,7 +1600,7 @@ struct omap_ball __initdata omap3_cbb_ball[] = {
1600 * Signals different on 36XX CBP package comapared to 34XX CBC package 1600 * Signals different on 36XX CBP package comapared to 34XX CBC package
1601 */ 1601 */
1602#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CBP) 1602#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_OMAP_PACKAGE_CBP)
1603struct omap_mux __initdata omap36xx_cbp_subset[] = { 1603static struct omap_mux __initdata omap36xx_cbp_subset[] = {
1604 _OMAP3_MUXENTRY(CAM_D0, 99, 1604 _OMAP3_MUXENTRY(CAM_D0, 99,
1605 "cam_d0", NULL, "csi2_dx2", NULL, 1605 "cam_d0", NULL, "csi2_dx2", NULL,
1606 "gpio_99", NULL, NULL, "safe_mode"), 1606 "gpio_99", NULL, NULL, "safe_mode"),
@@ -1818,7 +1818,7 @@ struct omap_mux __initdata omap36xx_cbp_subset[] = {
1818 */ 1818 */
1819#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \ 1819#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
1820 && defined (CONFIG_OMAP_PACKAGE_CBP) 1820 && defined (CONFIG_OMAP_PACKAGE_CBP)
1821struct omap_ball __initdata omap36xx_cbp_ball[] = { 1821static struct omap_ball __initdata omap36xx_cbp_ball[] = {
1822 _OMAP3_BALLENTRY(CAM_D0, "ag17", NULL), 1822 _OMAP3_BALLENTRY(CAM_D0, "ag17", NULL),
1823 _OMAP3_BALLENTRY(CAM_D1, "ah17", NULL), 1823 _OMAP3_BALLENTRY(CAM_D1, "ah17", NULL),
1824 _OMAP3_BALLENTRY(CAM_D10, "b25", NULL), 1824 _OMAP3_BALLENTRY(CAM_D10, "b25", NULL),
@@ -2049,12 +2049,13 @@ int __init omap3_mux_init(struct omap_board_mux *board_subset, int flags)
2049 package_balls = omap36xx_cbp_ball; 2049 package_balls = omap36xx_cbp_ball;
2050 break; 2050 break;
2051 default: 2051 default:
2052 printk(KERN_ERR "mux: Unknown omap package, mux disabled\n"); 2052 pr_err("%s Unknown omap package, mux disabled\n", __func__);
2053 return -EINVAL; 2053 return -EINVAL;
2054 } 2054 }
2055 2055
2056 return omap_mux_init(OMAP3_CONTROL_PADCONF_MUX_PBASE, 2056 return omap_mux_init("core", 0,
2057 OMAP3_CONTROL_PADCONF_MUX_PBASE,
2057 OMAP3_CONTROL_PADCONF_MUX_SIZE, 2058 OMAP3_CONTROL_PADCONF_MUX_SIZE,
2058 omap3_muxmodes, package_subset, board_subset, 2059 omap3_muxmodes, package_subset, board_subset,
2059 package_balls); 2060 package_balls);
2060} 2061}
diff --git a/arch/arm/mach-omap2/mux44xx.c b/arch/arm/mach-omap2/mux44xx.c
new file mode 100644
index 000000000000..f5a74daab2ff
--- /dev/null
+++ b/arch/arm/mach-omap2/mux44xx.c
@@ -0,0 +1,1356 @@
1/*
2 * OMAP44xx ES1.0 pin mux definition
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc.
5 *
6 * Benoit Cousson (b-cousson@ti.com)
7 *
8 * - Based on mux34xx.c done by Tony Lindgren <tony@atomide.com>
9 *
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20#include <linux/module.h>
21#include <linux/init.h>
22
23#include "mux.h"
24
25#ifdef CONFIG_OMAP_MUX
26
27#define _OMAP4_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
28{ \
29 .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
30 .gpio = (g), \
31 .muxnames = { m0, m1, m2, m3, m4, m5, m6, m7 }, \
32}
33
34#else
35
36#define _OMAP4_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7) \
37{ \
38 .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
39 .gpio = (g), \
40}
41
42#endif
43
44#define _OMAP4_BALLENTRY(M0, bb, bt) \
45{ \
46 .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
47 .balls = { bb, bt }, \
48}
49
50/*
51 * Superset of all mux modes for omap4 ES1.0
52 */
53static struct omap_mux __initdata omap4_core_muxmodes[] = {
54 _OMAP4_MUXENTRY(GPMC_AD0, 0, "gpmc_ad0", "sdmmc2_dat0", NULL, NULL,
55 NULL, NULL, NULL, NULL),
56 _OMAP4_MUXENTRY(GPMC_AD1, 0, "gpmc_ad1", "sdmmc2_dat1", NULL, NULL,
57 NULL, NULL, NULL, NULL),
58 _OMAP4_MUXENTRY(GPMC_AD2, 0, "gpmc_ad2", "sdmmc2_dat2", NULL, NULL,
59 NULL, NULL, NULL, NULL),
60 _OMAP4_MUXENTRY(GPMC_AD3, 0, "gpmc_ad3", "sdmmc2_dat3", NULL, NULL,
61 NULL, NULL, NULL, NULL),
62 _OMAP4_MUXENTRY(GPMC_AD4, 0, "gpmc_ad4", "sdmmc2_dat4",
63 "sdmmc2_dir_dat0", NULL, NULL, NULL, NULL, NULL),
64 _OMAP4_MUXENTRY(GPMC_AD5, 0, "gpmc_ad5", "sdmmc2_dat5",
65 "sdmmc2_dir_dat1", NULL, NULL, NULL, NULL, NULL),
66 _OMAP4_MUXENTRY(GPMC_AD6, 0, "gpmc_ad6", "sdmmc2_dat6",
67 "sdmmc2_dir_cmd", NULL, NULL, NULL, NULL, NULL),
68 _OMAP4_MUXENTRY(GPMC_AD7, 0, "gpmc_ad7", "sdmmc2_dat7",
69 "sdmmc2_clk_fdbk", NULL, NULL, NULL, NULL, NULL),
70 _OMAP4_MUXENTRY(GPMC_AD8, 32, "gpmc_ad8", "kpd_row0", "c2c_data15",
71 "gpio_32", NULL, NULL, NULL, NULL),
72 _OMAP4_MUXENTRY(GPMC_AD9, 33, "gpmc_ad9", "kpd_row1", "c2c_data14",
73 "gpio_33", NULL, NULL, NULL, NULL),
74 _OMAP4_MUXENTRY(GPMC_AD10, 34, "gpmc_ad10", "kpd_row2", "c2c_data13",
75 "gpio_34", NULL, NULL, NULL, NULL),
76 _OMAP4_MUXENTRY(GPMC_AD11, 35, "gpmc_ad11", "kpd_row3", "c2c_data12",
77 "gpio_35", NULL, NULL, NULL, NULL),
78 _OMAP4_MUXENTRY(GPMC_AD12, 36, "gpmc_ad12", "kpd_col0", "c2c_data11",
79 "gpio_36", NULL, NULL, NULL, NULL),
80 _OMAP4_MUXENTRY(GPMC_AD13, 37, "gpmc_ad13", "kpd_col1", "c2c_data10",
81 "gpio_37", NULL, NULL, NULL, NULL),
82 _OMAP4_MUXENTRY(GPMC_AD14, 38, "gpmc_ad14", "kpd_col2", "c2c_data9",
83 "gpio_38", NULL, NULL, NULL, NULL),
84 _OMAP4_MUXENTRY(GPMC_AD15, 39, "gpmc_ad15", "kpd_col3", "c2c_data8",
85 "gpio_39", NULL, NULL, NULL, NULL),
86 _OMAP4_MUXENTRY(GPMC_A16, 40, "gpmc_a16", "kpd_row4", "c2c_datain0",
87 "gpio_40", "venc_656_data0", NULL, NULL, NULL),
88 _OMAP4_MUXENTRY(GPMC_A17, 41, "gpmc_a17", "kpd_row5", "c2c_datain1",
89 "gpio_41", "venc_656_data1", NULL, NULL, "safe_mode"),
90 _OMAP4_MUXENTRY(GPMC_A18, 42, "gpmc_a18", "kpd_row6", "c2c_datain2",
91 "gpio_42", "venc_656_data2", NULL, NULL, "safe_mode"),
92 _OMAP4_MUXENTRY(GPMC_A19, 43, "gpmc_a19", "kpd_row7", "c2c_datain3",
93 "gpio_43", "venc_656_data3", NULL, NULL, "safe_mode"),
94 _OMAP4_MUXENTRY(GPMC_A20, 44, "gpmc_a20", "kpd_col4", "c2c_datain4",
95 "gpio_44", "venc_656_data4", NULL, NULL, "safe_mode"),
96 _OMAP4_MUXENTRY(GPMC_A21, 45, "gpmc_a21", "kpd_col5", "c2c_datain5",
97 "gpio_45", "venc_656_data5", NULL, NULL, "safe_mode"),
98 _OMAP4_MUXENTRY(GPMC_A22, 46, "gpmc_a22", "kpd_col6", "c2c_datain6",
99 "gpio_46", "venc_656_data6", NULL, NULL, "safe_mode"),
100 _OMAP4_MUXENTRY(GPMC_A23, 47, "gpmc_a23", "kpd_col7", "c2c_datain7",
101 "gpio_47", "venc_656_data7", NULL, NULL, "safe_mode"),
102 _OMAP4_MUXENTRY(GPMC_A24, 48, "gpmc_a24", NULL, "c2c_clkout0",
103 "gpio_48", NULL, NULL, NULL, "safe_mode"),
104 _OMAP4_MUXENTRY(GPMC_A25, 49, "gpmc_a25", NULL, "c2c_clkout1",
105 "gpio_49", NULL, NULL, NULL, "safe_mode"),
106 _OMAP4_MUXENTRY(GPMC_NCS0, 50, "gpmc_ncs0", NULL, NULL, "gpio_50",
107 "sys_ndmareq0", NULL, NULL, NULL),
108 _OMAP4_MUXENTRY(GPMC_NCS1, 51, "gpmc_ncs1", NULL, "c2c_dataout6",
109 "gpio_51", NULL, NULL, NULL, "safe_mode"),
110 _OMAP4_MUXENTRY(GPMC_NCS2, 52, "gpmc_ncs2", NULL, "c2c_dataout7",
111 "gpio_52", NULL, NULL, NULL, "safe_mode"),
112 _OMAP4_MUXENTRY(GPMC_NCS3, 53, "gpmc_ncs3", "gpmc_dir",
113 "c2c_dataout4", "gpio_53", NULL, NULL, NULL,
114 "safe_mode"),
115 _OMAP4_MUXENTRY(GPMC_NWP, 54, "gpmc_nwp", "dsi1_te0", NULL, "gpio_54",
116 "sys_ndmareq1", NULL, NULL, NULL),
117 _OMAP4_MUXENTRY(GPMC_CLK, 55, "gpmc_clk", NULL, NULL, "gpio_55",
118 "sys_ndmareq2", NULL, NULL, NULL),
119 _OMAP4_MUXENTRY(GPMC_NADV_ALE, 56, "gpmc_nadv_ale", "dsi1_te1", NULL,
120 "gpio_56", "sys_ndmareq3", NULL, NULL, NULL),
121 _OMAP4_MUXENTRY(GPMC_NOE, 0, "gpmc_noe", "sdmmc2_clk", NULL, NULL,
122 NULL, NULL, NULL, NULL),
123 _OMAP4_MUXENTRY(GPMC_NWE, 0, "gpmc_nwe", "sdmmc2_cmd", NULL, NULL,
124 NULL, NULL, NULL, NULL),
125 _OMAP4_MUXENTRY(GPMC_NBE0_CLE, 59, "gpmc_nbe0_cle", "dsi2_te0", NULL,
126 "gpio_59", NULL, NULL, NULL, NULL),
127 _OMAP4_MUXENTRY(GPMC_NBE1, 60, "gpmc_nbe1", NULL, "c2c_dataout5",
128 "gpio_60", NULL, NULL, NULL, "safe_mode"),
129 _OMAP4_MUXENTRY(GPMC_WAIT0, 61, "gpmc_wait0", "dsi2_te1", NULL,
130 "gpio_61", NULL, NULL, NULL, NULL),
131 _OMAP4_MUXENTRY(GPMC_WAIT1, 62, "gpmc_wait1", NULL, "c2c_dataout2",
132 "gpio_62", NULL, NULL, NULL, "safe_mode"),
133 _OMAP4_MUXENTRY(C2C_DATA11, 100, "c2c_data11", "usbc1_icusb_txen",
134 "c2c_dataout3", "gpio_100", "sys_ndmareq0", NULL,
135 NULL, "safe_mode"),
136 _OMAP4_MUXENTRY(C2C_DATA12, 101, "c2c_data12", "dsi1_te0",
137 "c2c_clkin0", "gpio_101", "sys_ndmareq1", NULL, NULL,
138 "safe_mode"),
139 _OMAP4_MUXENTRY(C2C_DATA13, 102, "c2c_data13", "dsi1_te1",
140 "c2c_clkin1", "gpio_102", "sys_ndmareq2", NULL, NULL,
141 "safe_mode"),
142 _OMAP4_MUXENTRY(C2C_DATA14, 103, "c2c_data14", "dsi2_te0",
143 "c2c_dataout0", "gpio_103", "sys_ndmareq3", NULL,
144 NULL, "safe_mode"),
145 _OMAP4_MUXENTRY(C2C_DATA15, 104, "c2c_data15", "dsi2_te1",
146 "c2c_dataout1", "gpio_104", NULL, NULL, NULL,
147 "safe_mode"),
148 _OMAP4_MUXENTRY(HDMI_HPD, 63, "hdmi_hpd", NULL, NULL, "gpio_63", NULL,
149 NULL, NULL, "safe_mode"),
150 _OMAP4_MUXENTRY(HDMI_CEC, 64, "hdmi_cec", NULL, NULL, "gpio_64", NULL,
151 NULL, NULL, "safe_mode"),
152 _OMAP4_MUXENTRY(HDMI_DDC_SCL, 65, "hdmi_ddc_scl", NULL, NULL,
153 "gpio_65", NULL, NULL, NULL, "safe_mode"),
154 _OMAP4_MUXENTRY(HDMI_DDC_SDA, 66, "hdmi_ddc_sda", NULL, NULL,
155 "gpio_66", NULL, NULL, NULL, "safe_mode"),
156 _OMAP4_MUXENTRY(CSI21_DX0, 0, "csi21_dx0", NULL, NULL, "gpi_67", NULL,
157 NULL, NULL, "safe_mode"),
158 _OMAP4_MUXENTRY(CSI21_DY0, 0, "csi21_dy0", NULL, NULL, "gpi_68", NULL,
159 NULL, NULL, "safe_mode"),
160 _OMAP4_MUXENTRY(CSI21_DX1, 0, "csi21_dx1", NULL, NULL, "gpi_69", NULL,
161 NULL, NULL, "safe_mode"),
162 _OMAP4_MUXENTRY(CSI21_DY1, 0, "csi21_dy1", NULL, NULL, "gpi_70", NULL,
163 NULL, NULL, "safe_mode"),
164 _OMAP4_MUXENTRY(CSI21_DX2, 0, "csi21_dx2", NULL, NULL, "gpi_71", NULL,
165 NULL, NULL, "safe_mode"),
166 _OMAP4_MUXENTRY(CSI21_DY2, 0, "csi21_dy2", NULL, NULL, "gpi_72", NULL,
167 NULL, NULL, "safe_mode"),
168 _OMAP4_MUXENTRY(CSI21_DX3, 0, "csi21_dx3", NULL, NULL, "gpi_73", NULL,
169 NULL, NULL, "safe_mode"),
170 _OMAP4_MUXENTRY(CSI21_DY3, 0, "csi21_dy3", NULL, NULL, "gpi_74", NULL,
171 NULL, NULL, "safe_mode"),
172 _OMAP4_MUXENTRY(CSI21_DX4, 0, "csi21_dx4", NULL, NULL, "gpi_75", NULL,
173 NULL, NULL, "safe_mode"),
174 _OMAP4_MUXENTRY(CSI21_DY4, 0, "csi21_dy4", NULL, NULL, "gpi_76", NULL,
175 NULL, NULL, "safe_mode"),
176 _OMAP4_MUXENTRY(CSI22_DX0, 0, "csi22_dx0", NULL, NULL, "gpi_77", NULL,
177 NULL, NULL, "safe_mode"),
178 _OMAP4_MUXENTRY(CSI22_DY0, 0, "csi22_dy0", NULL, NULL, "gpi_78", NULL,
179 NULL, NULL, "safe_mode"),
180 _OMAP4_MUXENTRY(CSI22_DX1, 0, "csi22_dx1", NULL, NULL, "gpi_79", NULL,
181 NULL, NULL, "safe_mode"),
182 _OMAP4_MUXENTRY(CSI22_DY1, 0, "csi22_dy1", NULL, NULL, "gpi_80", NULL,
183 NULL, NULL, "safe_mode"),
184 _OMAP4_MUXENTRY(CAM_SHUTTER, 81, "cam_shutter", NULL, NULL, "gpio_81",
185 NULL, NULL, NULL, "safe_mode"),
186 _OMAP4_MUXENTRY(CAM_STROBE, 82, "cam_strobe", NULL, NULL, "gpio_82",
187 NULL, NULL, NULL, "safe_mode"),
188 _OMAP4_MUXENTRY(CAM_GLOBALRESET, 83, "cam_globalreset", NULL, NULL,
189 "gpio_83", NULL, NULL, NULL, "safe_mode"),
190 _OMAP4_MUXENTRY(USBB1_ULPITLL_CLK, 84, "usbb1_ulpitll_clk",
191 "hsi1_cawake", NULL, "gpio_84", "usbb1_ulpiphy_clk",
192 NULL, "hw_dbg20", "safe_mode"),
193 _OMAP4_MUXENTRY(USBB1_ULPITLL_STP, 85, "usbb1_ulpitll_stp",
194 "hsi1_cadata", "mcbsp4_clkr", "gpio_85",
195 "usbb1_ulpiphy_stp", "usbb1_mm_rxdp", "hw_dbg21",
196 "safe_mode"),
197 _OMAP4_MUXENTRY(USBB1_ULPITLL_DIR, 86, "usbb1_ulpitll_dir",
198 "hsi1_caflag", "mcbsp4_fsr", "gpio_86",
199 "usbb1_ulpiphy_dir", NULL, "hw_dbg22", "safe_mode"),
200 _OMAP4_MUXENTRY(USBB1_ULPITLL_NXT, 87, "usbb1_ulpitll_nxt",
201 "hsi1_acready", "mcbsp4_fsx", "gpio_87",
202 "usbb1_ulpiphy_nxt", "usbb1_mm_rxdm", "hw_dbg23",
203 "safe_mode"),
204 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT0, 88, "usbb1_ulpitll_dat0",
205 "hsi1_acwake", "mcbsp4_clkx", "gpio_88",
206 "usbb1_ulpiphy_dat0", "usbb1_mm_rxrcv", "hw_dbg24",
207 "safe_mode"),
208 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT1, 89, "usbb1_ulpitll_dat1",
209 "hsi1_acdata", "mcbsp4_dx", "gpio_89",
210 "usbb1_ulpiphy_dat1", "usbb1_mm_txse0", "hw_dbg25",
211 "safe_mode"),
212 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT2, 90, "usbb1_ulpitll_dat2",
213 "hsi1_acflag", "mcbsp4_dr", "gpio_90",
214 "usbb1_ulpiphy_dat2", "usbb1_mm_txdat", "hw_dbg26",
215 "safe_mode"),
216 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT3, 91, "usbb1_ulpitll_dat3",
217 "hsi1_caready", NULL, "gpio_91", "usbb1_ulpiphy_dat3",
218 "usbb1_mm_txen", "hw_dbg27", "safe_mode"),
219 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT4, 92, "usbb1_ulpitll_dat4",
220 "dmtimer8_pwm_evt", "abe_mcbsp3_dr", "gpio_92",
221 "usbb1_ulpiphy_dat4", NULL, "hw_dbg28", "safe_mode"),
222 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT5, 93, "usbb1_ulpitll_dat5",
223 "dmtimer9_pwm_evt", "abe_mcbsp3_dx", "gpio_93",
224 "usbb1_ulpiphy_dat5", NULL, "hw_dbg29", "safe_mode"),
225 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT6, 94, "usbb1_ulpitll_dat6",
226 "dmtimer10_pwm_evt", "abe_mcbsp3_clkx", "gpio_94",
227 "usbb1_ulpiphy_dat6", "abe_dmic_din3", "hw_dbg30",
228 "safe_mode"),
229 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT7, 95, "usbb1_ulpitll_dat7",
230 "dmtimer11_pwm_evt", "abe_mcbsp3_fsx", "gpio_95",
231 "usbb1_ulpiphy_dat7", "abe_dmic_clk3", "hw_dbg31",
232 "safe_mode"),
233 _OMAP4_MUXENTRY(USBB1_HSIC_DATA, 96, "usbb1_hsic_data", NULL, NULL,
234 "gpio_96", NULL, NULL, NULL, "safe_mode"),
235 _OMAP4_MUXENTRY(USBB1_HSIC_STROBE, 97, "usbb1_hsic_strobe", NULL,
236 NULL, "gpio_97", NULL, NULL, NULL, "safe_mode"),
237 _OMAP4_MUXENTRY(USBC1_ICUSB_DP, 98, "usbc1_icusb_dp", NULL, NULL,
238 "gpio_98", NULL, NULL, NULL, "safe_mode"),
239 _OMAP4_MUXENTRY(USBC1_ICUSB_DM, 99, "usbc1_icusb_dm", NULL, NULL,
240 "gpio_99", NULL, NULL, NULL, "safe_mode"),
241 _OMAP4_MUXENTRY(SDMMC1_CLK, 100, "sdmmc1_clk", NULL, "dpm_emu19",
242 "gpio_100", NULL, NULL, NULL, "safe_mode"),
243 _OMAP4_MUXENTRY(SDMMC1_CMD, 101, "sdmmc1_cmd", NULL, "uart1_rx",
244 "gpio_101", NULL, NULL, NULL, "safe_mode"),
245 _OMAP4_MUXENTRY(SDMMC1_DAT0, 102, "sdmmc1_dat0", NULL, "dpm_emu18",
246 "gpio_102", NULL, NULL, NULL, "safe_mode"),
247 _OMAP4_MUXENTRY(SDMMC1_DAT1, 103, "sdmmc1_dat1", NULL, "dpm_emu17",
248 "gpio_103", NULL, NULL, NULL, "safe_mode"),
249 _OMAP4_MUXENTRY(SDMMC1_DAT2, 104, "sdmmc1_dat2", NULL, "dpm_emu16",
250 "gpio_104", "jtag_tms_tmsc", NULL, NULL, "safe_mode"),
251 _OMAP4_MUXENTRY(SDMMC1_DAT3, 105, "sdmmc1_dat3", NULL, "dpm_emu15",
252 "gpio_105", "jtag_tck", NULL, NULL, "safe_mode"),
253 _OMAP4_MUXENTRY(SDMMC1_DAT4, 106, "sdmmc1_dat4", NULL, NULL,
254 "gpio_106", NULL, NULL, NULL, "safe_mode"),
255 _OMAP4_MUXENTRY(SDMMC1_DAT5, 107, "sdmmc1_dat5", NULL, NULL,
256 "gpio_107", NULL, NULL, NULL, "safe_mode"),
257 _OMAP4_MUXENTRY(SDMMC1_DAT6, 108, "sdmmc1_dat6", NULL, NULL,
258 "gpio_108", NULL, NULL, NULL, "safe_mode"),
259 _OMAP4_MUXENTRY(SDMMC1_DAT7, 109, "sdmmc1_dat7", NULL, NULL,
260 "gpio_109", NULL, NULL, NULL, "safe_mode"),
261 _OMAP4_MUXENTRY(ABE_MCBSP2_CLKX, 110, "abe_mcbsp2_clkx", "mcspi2_clk",
262 "abe_mcasp_ahclkx", "gpio_110", "usbb2_mm_rxdm",
263 NULL, NULL, "safe_mode"),
264 _OMAP4_MUXENTRY(ABE_MCBSP2_DR, 111, "abe_mcbsp2_dr", "mcspi2_somi",
265 "abe_mcasp_axr", "gpio_111", "usbb2_mm_rxdp", NULL,
266 NULL, "safe_mode"),
267 _OMAP4_MUXENTRY(ABE_MCBSP2_DX, 112, "abe_mcbsp2_dx", "mcspi2_simo",
268 "abe_mcasp_amute", "gpio_112", "usbb2_mm_rxrcv", NULL,
269 NULL, "safe_mode"),
270 _OMAP4_MUXENTRY(ABE_MCBSP2_FSX, 113, "abe_mcbsp2_fsx", "mcspi2_cs0",
271 "abe_mcasp_afsx", "gpio_113", "usbb2_mm_txen", NULL,
272 NULL, "safe_mode"),
273 _OMAP4_MUXENTRY(ABE_MCBSP1_CLKX, 114, "abe_mcbsp1_clkx",
274 "abe_slimbus1_clock", NULL, "gpio_114", NULL, NULL,
275 NULL, "safe_mode"),
276 _OMAP4_MUXENTRY(ABE_MCBSP1_DR, 115, "abe_mcbsp1_dr",
277 "abe_slimbus1_data", NULL, "gpio_115", NULL, NULL,
278 NULL, "safe_mode"),
279 _OMAP4_MUXENTRY(ABE_MCBSP1_DX, 116, "abe_mcbsp1_dx", "sdmmc3_dat2",
280 "abe_mcasp_aclkx", "gpio_116", NULL, NULL, NULL,
281 "safe_mode"),
282 _OMAP4_MUXENTRY(ABE_MCBSP1_FSX, 117, "abe_mcbsp1_fsx", "sdmmc3_dat3",
283 "abe_mcasp_amutein", "gpio_117", NULL, NULL, NULL,
284 "safe_mode"),
285 _OMAP4_MUXENTRY(ABE_PDM_UL_DATA, 0, "abe_pdm_ul_data",
286 "abe_mcbsp3_dr", NULL, NULL, NULL, NULL, NULL,
287 "safe_mode"),
288 _OMAP4_MUXENTRY(ABE_PDM_DL_DATA, 0, "abe_pdm_dl_data",
289 "abe_mcbsp3_dx", NULL, NULL, NULL, NULL, NULL,
290 "safe_mode"),
291 _OMAP4_MUXENTRY(ABE_PDM_FRAME, 0, "abe_pdm_frame", "abe_mcbsp3_clkx",
292 NULL, NULL, NULL, NULL, NULL, "safe_mode"),
293 _OMAP4_MUXENTRY(ABE_PDM_LB_CLK, 0, "abe_pdm_lb_clk", "abe_mcbsp3_fsx",
294 NULL, NULL, NULL, NULL, NULL, "safe_mode"),
295 _OMAP4_MUXENTRY(ABE_CLKS, 118, "abe_clks", NULL, NULL, "gpio_118",
296 NULL, NULL, NULL, "safe_mode"),
297 _OMAP4_MUXENTRY(ABE_DMIC_CLK1, 119, "abe_dmic_clk1", NULL, NULL,
298 "gpio_119", "usbb2_mm_txse0", NULL, NULL,
299 "safe_mode"),
300 _OMAP4_MUXENTRY(ABE_DMIC_DIN1, 120, "abe_dmic_din1", NULL, NULL,
301 "gpio_120", "usbb2_mm_txdat", NULL, NULL,
302 "safe_mode"),
303 _OMAP4_MUXENTRY(ABE_DMIC_DIN2, 121, "abe_dmic_din2", "slimbus2_clock",
304 NULL, "gpio_121", NULL, NULL, NULL, "safe_mode"),
305 _OMAP4_MUXENTRY(ABE_DMIC_DIN3, 122, "abe_dmic_din3", "slimbus2_data",
306 "abe_dmic_clk2", "gpio_122", NULL, NULL, NULL,
307 "safe_mode"),
308 _OMAP4_MUXENTRY(UART2_CTS, 123, "uart2_cts", "sdmmc3_clk", NULL,
309 "gpio_123", NULL, NULL, NULL, "safe_mode"),
310 _OMAP4_MUXENTRY(UART2_RTS, 124, "uart2_rts", "sdmmc3_cmd", NULL,
311 "gpio_124", NULL, NULL, NULL, "safe_mode"),
312 _OMAP4_MUXENTRY(UART2_RX, 125, "uart2_rx", "sdmmc3_dat0", NULL,
313 "gpio_125", NULL, NULL, NULL, "safe_mode"),
314 _OMAP4_MUXENTRY(UART2_TX, 126, "uart2_tx", "sdmmc3_dat1", NULL,
315 "gpio_126", NULL, NULL, NULL, "safe_mode"),
316 _OMAP4_MUXENTRY(HDQ_SIO, 127, "hdq_sio", "i2c3_sccb", "i2c2_sccb",
317 "gpio_127", NULL, NULL, NULL, "safe_mode"),
318 _OMAP4_MUXENTRY(I2C1_SCL, 0, "i2c1_scl", NULL, NULL, NULL, NULL, NULL,
319 NULL, NULL),
320 _OMAP4_MUXENTRY(I2C1_SDA, 0, "i2c1_sda", NULL, NULL, NULL, NULL, NULL,
321 NULL, NULL),
322 _OMAP4_MUXENTRY(I2C2_SCL, 128, "i2c2_scl", "uart1_rx", NULL,
323 "gpio_128", NULL, NULL, NULL, "safe_mode"),
324 _OMAP4_MUXENTRY(I2C2_SDA, 129, "i2c2_sda", "uart1_tx", NULL,
325 "gpio_129", NULL, NULL, NULL, "safe_mode"),
326 _OMAP4_MUXENTRY(I2C3_SCL, 130, "i2c3_scl", NULL, NULL, "gpio_130",
327 NULL, NULL, NULL, "safe_mode"),
328 _OMAP4_MUXENTRY(I2C3_SDA, 131, "i2c3_sda", NULL, NULL, "gpio_131",
329 NULL, NULL, NULL, "safe_mode"),
330 _OMAP4_MUXENTRY(I2C4_SCL, 132, "i2c4_scl", NULL, NULL, "gpio_132",
331 NULL, NULL, NULL, "safe_mode"),
332 _OMAP4_MUXENTRY(I2C4_SDA, 133, "i2c4_sda", NULL, NULL, "gpio_133",
333 NULL, NULL, NULL, "safe_mode"),
334 _OMAP4_MUXENTRY(MCSPI1_CLK, 134, "mcspi1_clk", NULL, NULL, "gpio_134",
335 NULL, NULL, NULL, "safe_mode"),
336 _OMAP4_MUXENTRY(MCSPI1_SOMI, 135, "mcspi1_somi", NULL, NULL,
337 "gpio_135", NULL, NULL, NULL, "safe_mode"),
338 _OMAP4_MUXENTRY(MCSPI1_SIMO, 136, "mcspi1_simo", NULL, NULL,
339 "gpio_136", NULL, NULL, NULL, "safe_mode"),
340 _OMAP4_MUXENTRY(MCSPI1_CS0, 137, "mcspi1_cs0", NULL, NULL, "gpio_137",
341 NULL, NULL, NULL, "safe_mode"),
342 _OMAP4_MUXENTRY(MCSPI1_CS1, 138, "mcspi1_cs1", "uart1_rx", NULL,
343 "gpio_138", NULL, NULL, NULL, "safe_mode"),
344 _OMAP4_MUXENTRY(MCSPI1_CS2, 139, "mcspi1_cs2", "uart1_cts",
345 "slimbus2_clock", "gpio_139", NULL, NULL, NULL,
346 "safe_mode"),
347 _OMAP4_MUXENTRY(MCSPI1_CS3, 140, "mcspi1_cs3", "uart1_rts",
348 "slimbus2_data", "gpio_140", NULL, NULL, NULL,
349 "safe_mode"),
350 _OMAP4_MUXENTRY(UART3_CTS_RCTX, 141, "uart3_cts_rctx", "uart1_tx",
351 NULL, "gpio_141", NULL, NULL, NULL, "safe_mode"),
352 _OMAP4_MUXENTRY(UART3_RTS_SD, 142, "uart3_rts_sd", NULL, NULL,
353 "gpio_142", NULL, NULL, NULL, "safe_mode"),
354 _OMAP4_MUXENTRY(UART3_RX_IRRX, 143, "uart3_rx_irrx",
355 "dmtimer8_pwm_evt", NULL, "gpio_143", NULL, NULL,
356 NULL, "safe_mode"),
357 _OMAP4_MUXENTRY(UART3_TX_IRTX, 144, "uart3_tx_irtx",
358 "dmtimer9_pwm_evt", NULL, "gpio_144", NULL, NULL,
359 NULL, "safe_mode"),
360 _OMAP4_MUXENTRY(SDMMC5_CLK, 145, "sdmmc5_clk", "mcspi2_clk",
361 "usbc1_icusb_dp", "gpio_145", NULL, NULL, NULL,
362 "safe_mode"),
363 _OMAP4_MUXENTRY(SDMMC5_CMD, 146, "sdmmc5_cmd", "mcspi2_simo",
364 "usbc1_icusb_dm", "gpio_146", NULL, NULL, NULL,
365 "safe_mode"),
366 _OMAP4_MUXENTRY(SDMMC5_DAT0, 147, "sdmmc5_dat0", "mcspi2_somi",
367 "usbc1_icusb_rcv", "gpio_147", NULL, NULL, NULL,
368 "safe_mode"),
369 _OMAP4_MUXENTRY(SDMMC5_DAT1, 148, "sdmmc5_dat1", NULL,
370 "usbc1_icusb_txen", "gpio_148", NULL, NULL, NULL,
371 "safe_mode"),
372 _OMAP4_MUXENTRY(SDMMC5_DAT2, 149, "sdmmc5_dat2", "mcspi2_cs1", NULL,
373 "gpio_149", NULL, NULL, NULL, "safe_mode"),
374 _OMAP4_MUXENTRY(SDMMC5_DAT3, 150, "sdmmc5_dat3", "mcspi2_cs0", NULL,
375 "gpio_150", NULL, NULL, NULL, "safe_mode"),
376 _OMAP4_MUXENTRY(MCSPI4_CLK, 151, "mcspi4_clk", "sdmmc4_clk", NULL,
377 "gpio_151", NULL, NULL, NULL, "safe_mode"),
378 _OMAP4_MUXENTRY(MCSPI4_SIMO, 152, "mcspi4_simo", "sdmmc4_cmd", NULL,
379 "gpio_152", NULL, NULL, NULL, "safe_mode"),
380 _OMAP4_MUXENTRY(MCSPI4_SOMI, 153, "mcspi4_somi", "sdmmc4_dat0", NULL,
381 "gpio_153", NULL, NULL, NULL, "safe_mode"),
382 _OMAP4_MUXENTRY(MCSPI4_CS0, 154, "mcspi4_cs0", "sdmmc4_dat3", NULL,
383 "gpio_154", NULL, NULL, NULL, "safe_mode"),
384 _OMAP4_MUXENTRY(UART4_RX, 155, "uart4_rx", "sdmmc4_dat2", NULL,
385 "gpio_155", NULL, NULL, NULL, "safe_mode"),
386 _OMAP4_MUXENTRY(UART4_TX, 156, "uart4_tx", "sdmmc4_dat1", NULL,
387 "gpio_156", NULL, NULL, NULL, "safe_mode"),
388 _OMAP4_MUXENTRY(USBB2_ULPITLL_CLK, 157, "usbb2_ulpitll_clk",
389 "usbb2_ulpiphy_clk", "sdmmc4_cmd", "gpio_157",
390 "hsi2_cawake", NULL, NULL, "safe_mode"),
391 _OMAP4_MUXENTRY(USBB2_ULPITLL_STP, 158, "usbb2_ulpitll_stp",
392 "usbb2_ulpiphy_stp", "sdmmc4_clk", "gpio_158",
393 "hsi2_cadata", "dispc2_data23", NULL, "reserved"),
394 _OMAP4_MUXENTRY(USBB2_ULPITLL_DIR, 159, "usbb2_ulpitll_dir",
395 "usbb2_ulpiphy_dir", "sdmmc4_dat0", "gpio_159",
396 "hsi2_caflag", "dispc2_data22", NULL, "reserved"),
397 _OMAP4_MUXENTRY(USBB2_ULPITLL_NXT, 160, "usbb2_ulpitll_nxt",
398 "usbb2_ulpiphy_nxt", "sdmmc4_dat1", "gpio_160",
399 "hsi2_acready", "dispc2_data21", NULL, "reserved"),
400 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT0, 161, "usbb2_ulpitll_dat0",
401 "usbb2_ulpiphy_dat0", "sdmmc4_dat2", "gpio_161",
402 "hsi2_acwake", "dispc2_data20", NULL, "reserved"),
403 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT1, 162, "usbb2_ulpitll_dat1",
404 "usbb2_ulpiphy_dat1", "sdmmc4_dat3", "gpio_162",
405 "hsi2_acdata", "dispc2_data19", NULL, "reserved"),
406 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT2, 163, "usbb2_ulpitll_dat2",
407 "usbb2_ulpiphy_dat2", "sdmmc3_dat2", "gpio_163",
408 "hsi2_acflag", "dispc2_data18", NULL, "reserved"),
409 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT3, 164, "usbb2_ulpitll_dat3",
410 "usbb2_ulpiphy_dat3", "sdmmc3_dat1", "gpio_164",
411 "hsi2_caready", "dispc2_data15", NULL, "reserved"),
412 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT4, 165, "usbb2_ulpitll_dat4",
413 "usbb2_ulpiphy_dat4", "sdmmc3_dat0", "gpio_165",
414 "mcspi3_somi", "dispc2_data14", NULL, "reserved"),
415 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT5, 166, "usbb2_ulpitll_dat5",
416 "usbb2_ulpiphy_dat5", "sdmmc3_dat3", "gpio_166",
417 "mcspi3_cs0", "dispc2_data13", NULL, "reserved"),
418 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT6, 167, "usbb2_ulpitll_dat6",
419 "usbb2_ulpiphy_dat6", "sdmmc3_cmd", "gpio_167",
420 "mcspi3_simo", "dispc2_data12", NULL, "reserved"),
421 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT7, 168, "usbb2_ulpitll_dat7",
422 "usbb2_ulpiphy_dat7", "sdmmc3_clk", "gpio_168",
423 "mcspi3_clk", "dispc2_data11", NULL, "reserved"),
424 _OMAP4_MUXENTRY(USBB2_HSIC_DATA, 169, "usbb2_hsic_data", NULL, NULL,
425 "gpio_169", NULL, NULL, NULL, "safe_mode"),
426 _OMAP4_MUXENTRY(USBB2_HSIC_STROBE, 170, "usbb2_hsic_strobe", NULL,
427 NULL, "gpio_170", NULL, NULL, NULL, "safe_mode"),
428 _OMAP4_MUXENTRY(UNIPRO_TX0, 171, "unipro_tx0", "kpd_col0", NULL,
429 "gpio_171", NULL, NULL, NULL, "safe_mode"),
430 _OMAP4_MUXENTRY(UNIPRO_TY0, 172, "unipro_ty0", "kpd_col1", NULL,
431 "gpio_172", NULL, NULL, NULL, "safe_mode"),
432 _OMAP4_MUXENTRY(UNIPRO_TX1, 173, "unipro_tx1", "kpd_col2", NULL,
433 "gpio_173", NULL, NULL, NULL, "safe_mode"),
434 _OMAP4_MUXENTRY(UNIPRO_TY1, 174, "unipro_ty1", "kpd_col3", NULL,
435 "gpio_174", NULL, NULL, NULL, "safe_mode"),
436 _OMAP4_MUXENTRY(UNIPRO_TX2, 0, "unipro_tx2", "kpd_col4", NULL,
437 "gpio_0", NULL, NULL, NULL, "safe_mode"),
438 _OMAP4_MUXENTRY(UNIPRO_TY2, 1, "unipro_ty2", "kpd_col5", NULL,
439 "gpio_1", NULL, NULL, NULL, "safe_mode"),
440 _OMAP4_MUXENTRY(UNIPRO_RX0, 0, "unipro_rx0", "kpd_row0", NULL,
441 "gpi_175", NULL, NULL, NULL, "safe_mode"),
442 _OMAP4_MUXENTRY(UNIPRO_RY0, 0, "unipro_ry0", "kpd_row1", NULL,
443 "gpi_176", NULL, NULL, NULL, "safe_mode"),
444 _OMAP4_MUXENTRY(UNIPRO_RX1, 0, "unipro_rx1", "kpd_row2", NULL,
445 "gpi_177", NULL, NULL, NULL, "safe_mode"),
446 _OMAP4_MUXENTRY(UNIPRO_RY1, 0, "unipro_ry1", "kpd_row3", NULL,
447 "gpi_178", NULL, NULL, NULL, "safe_mode"),
448 _OMAP4_MUXENTRY(UNIPRO_RX2, 0, "unipro_rx2", "kpd_row4", NULL,
449 "gpi_2", NULL, NULL, NULL, "safe_mode"),
450 _OMAP4_MUXENTRY(UNIPRO_RY2, 0, "unipro_ry2", "kpd_row5", NULL,
451 "gpi_3", NULL, NULL, NULL, "safe_mode"),
452 _OMAP4_MUXENTRY(USBA0_OTG_CE, 0, "usba0_otg_ce", NULL, NULL, NULL,
453 NULL, NULL, NULL, NULL),
454 _OMAP4_MUXENTRY(USBA0_OTG_DP, 179, "usba0_otg_dp", "uart3_rx_irrx",
455 "uart2_rx", "gpio_179", NULL, NULL, NULL,
456 "safe_mode"),
457 _OMAP4_MUXENTRY(USBA0_OTG_DM, 180, "usba0_otg_dm", "uart3_tx_irtx",
458 "uart2_tx", "gpio_180", NULL, NULL, NULL,
459 "safe_mode"),
460 _OMAP4_MUXENTRY(FREF_CLK1_OUT, 181, "fref_clk1_out", NULL, NULL,
461 "gpio_181", NULL, NULL, NULL, "safe_mode"),
462 _OMAP4_MUXENTRY(FREF_CLK2_OUT, 182, "fref_clk2_out", NULL, NULL,
463 "gpio_182", NULL, NULL, NULL, "safe_mode"),
464 _OMAP4_MUXENTRY(SYS_NIRQ1, 0, "sys_nirq1", NULL, NULL, NULL, NULL,
465 NULL, NULL, "safe_mode"),
466 _OMAP4_MUXENTRY(SYS_NIRQ2, 183, "sys_nirq2", NULL, NULL, "gpio_183",
467 NULL, NULL, NULL, "safe_mode"),
468 _OMAP4_MUXENTRY(SYS_BOOT0, 184, "sys_boot0", NULL, NULL, "gpio_184",
469 NULL, NULL, NULL, "safe_mode"),
470 _OMAP4_MUXENTRY(SYS_BOOT1, 185, "sys_boot1", NULL, NULL, "gpio_185",
471 NULL, NULL, NULL, "safe_mode"),
472 _OMAP4_MUXENTRY(SYS_BOOT2, 186, "sys_boot2", NULL, NULL, "gpio_186",
473 NULL, NULL, NULL, "safe_mode"),
474 _OMAP4_MUXENTRY(SYS_BOOT3, 187, "sys_boot3", NULL, NULL, "gpio_187",
475 NULL, NULL, NULL, "safe_mode"),
476 _OMAP4_MUXENTRY(SYS_BOOT4, 188, "sys_boot4", NULL, NULL, "gpio_188",
477 NULL, NULL, NULL, "safe_mode"),
478 _OMAP4_MUXENTRY(SYS_BOOT5, 189, "sys_boot5", NULL, NULL, "gpio_189",
479 NULL, NULL, NULL, "safe_mode"),
480 _OMAP4_MUXENTRY(DPM_EMU0, 11, "dpm_emu0", NULL, NULL, "gpio_11", NULL,
481 NULL, "hw_dbg0", "safe_mode"),
482 _OMAP4_MUXENTRY(DPM_EMU1, 12, "dpm_emu1", NULL, NULL, "gpio_12", NULL,
483 NULL, "hw_dbg1", "safe_mode"),
484 _OMAP4_MUXENTRY(DPM_EMU2, 13, "dpm_emu2", "usba0_ulpiphy_clk", NULL,
485 "gpio_13", NULL, "dispc2_fid", "hw_dbg2", "reserved"),
486 _OMAP4_MUXENTRY(DPM_EMU3, 14, "dpm_emu3", "usba0_ulpiphy_stp", NULL,
487 "gpio_14", NULL, "dispc2_data10", "hw_dbg3",
488 "reserved"),
489 _OMAP4_MUXENTRY(DPM_EMU4, 15, "dpm_emu4", "usba0_ulpiphy_dir", NULL,
490 "gpio_15", NULL, "dispc2_data9", "hw_dbg4",
491 "reserved"),
492 _OMAP4_MUXENTRY(DPM_EMU5, 16, "dpm_emu5", "usba0_ulpiphy_nxt", NULL,
493 "gpio_16", "rfbi_te_vsync0", "dispc2_data16",
494 "hw_dbg5", "reserved"),
495 _OMAP4_MUXENTRY(DPM_EMU6, 17, "dpm_emu6", "usba0_ulpiphy_dat0",
496 "uart3_tx_irtx", "gpio_17", "rfbi_hsync0",
497 "dispc2_data17", "hw_dbg6", "reserved"),
498 _OMAP4_MUXENTRY(DPM_EMU7, 18, "dpm_emu7", "usba0_ulpiphy_dat1",
499 "uart3_rx_irrx", "gpio_18", "rfbi_cs0",
500 "dispc2_hsync", "hw_dbg7", "reserved"),
501 _OMAP4_MUXENTRY(DPM_EMU8, 19, "dpm_emu8", "usba0_ulpiphy_dat2",
502 "uart3_rts_sd", "gpio_19", "rfbi_re", "dispc2_pclk",
503 "hw_dbg8", "reserved"),
504 _OMAP4_MUXENTRY(DPM_EMU9, 20, "dpm_emu9", "usba0_ulpiphy_dat3",
505 "uart3_cts_rctx", "gpio_20", "rfbi_we",
506 "dispc2_vsync", "hw_dbg9", "reserved"),
507 _OMAP4_MUXENTRY(DPM_EMU10, 21, "dpm_emu10", "usba0_ulpiphy_dat4",
508 NULL, "gpio_21", "rfbi_a0", "dispc2_de", "hw_dbg10",
509 "reserved"),
510 _OMAP4_MUXENTRY(DPM_EMU11, 22, "dpm_emu11", "usba0_ulpiphy_dat5",
511 NULL, "gpio_22", "rfbi_data8", "dispc2_data8",
512 "hw_dbg11", "reserved"),
513 _OMAP4_MUXENTRY(DPM_EMU12, 23, "dpm_emu12", "usba0_ulpiphy_dat6",
514 NULL, "gpio_23", "rfbi_data7", "dispc2_data7",
515 "hw_dbg12", "reserved"),
516 _OMAP4_MUXENTRY(DPM_EMU13, 24, "dpm_emu13", "usba0_ulpiphy_dat7",
517 NULL, "gpio_24", "rfbi_data6", "dispc2_data6",
518 "hw_dbg13", "reserved"),
519 _OMAP4_MUXENTRY(DPM_EMU14, 25, "dpm_emu14", "sys_drm_msecure",
520 "uart1_rx", "gpio_25", "rfbi_data5", "dispc2_data5",
521 "hw_dbg14", "reserved"),
522 _OMAP4_MUXENTRY(DPM_EMU15, 26, "dpm_emu15", "sys_secure_indicator",
523 NULL, "gpio_26", "rfbi_data4", "dispc2_data4",
524 "hw_dbg15", "reserved"),
525 _OMAP4_MUXENTRY(DPM_EMU16, 27, "dpm_emu16", "dmtimer8_pwm_evt",
526 "dsi1_te0", "gpio_27", "rfbi_data3", "dispc2_data3",
527 "hw_dbg16", "reserved"),
528 _OMAP4_MUXENTRY(DPM_EMU17, 28, "dpm_emu17", "dmtimer9_pwm_evt",
529 "dsi1_te1", "gpio_28", "rfbi_data2", "dispc2_data2",
530 "hw_dbg17", "reserved"),
531 _OMAP4_MUXENTRY(DPM_EMU18, 190, "dpm_emu18", "dmtimer10_pwm_evt",
532 "dsi2_te0", "gpio_190", "rfbi_data1", "dispc2_data1",
533 "hw_dbg18", "reserved"),
534 _OMAP4_MUXENTRY(DPM_EMU19, 191, "dpm_emu19", "dmtimer11_pwm_evt",
535 "dsi2_te1", "gpio_191", "rfbi_data0", "dispc2_data0",
536 "hw_dbg19", "reserved"),
537 { .reg_offset = OMAP_MUX_TERMINATOR },
538};
539
540/*
541 * Balls for 44XX CBL package
542 * 547-pin CBL ES1.0 S-FPGA-N547, 0.40mm Ball Pitch (Top),
543 * 0.40mm Ball Pitch (Bottom)
544 */
545#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
546 && defined(CONFIG_OMAP_PACKAGE_CBL)
547static struct omap_ball __initdata omap4_core_cbl_ball[] = {
548 _OMAP4_BALLENTRY(GPMC_AD0, "c12", NULL),
549 _OMAP4_BALLENTRY(GPMC_AD1, "d12", NULL),
550 _OMAP4_BALLENTRY(GPMC_AD2, "c13", NULL),
551 _OMAP4_BALLENTRY(GPMC_AD3, "d13", NULL),
552 _OMAP4_BALLENTRY(GPMC_AD4, "c15", NULL),
553 _OMAP4_BALLENTRY(GPMC_AD5, "d15", NULL),
554 _OMAP4_BALLENTRY(GPMC_AD6, "a16", NULL),
555 _OMAP4_BALLENTRY(GPMC_AD7, "b16", NULL),
556 _OMAP4_BALLENTRY(GPMC_AD8, "c16", NULL),
557 _OMAP4_BALLENTRY(GPMC_AD9, "d16", NULL),
558 _OMAP4_BALLENTRY(GPMC_AD10, "c17", NULL),
559 _OMAP4_BALLENTRY(GPMC_AD11, "d17", NULL),
560 _OMAP4_BALLENTRY(GPMC_AD12, "c18", NULL),
561 _OMAP4_BALLENTRY(GPMC_AD13, "d18", NULL),
562 _OMAP4_BALLENTRY(GPMC_AD14, "c19", NULL),
563 _OMAP4_BALLENTRY(GPMC_AD15, "d19", NULL),
564 _OMAP4_BALLENTRY(GPMC_A16, "b17", NULL),
565 _OMAP4_BALLENTRY(GPMC_A17, "a18", NULL),
566 _OMAP4_BALLENTRY(GPMC_A18, "b18", NULL),
567 _OMAP4_BALLENTRY(GPMC_A19, "a19", NULL),
568 _OMAP4_BALLENTRY(GPMC_A20, "b19", NULL),
569 _OMAP4_BALLENTRY(GPMC_A21, "b20", NULL),
570 _OMAP4_BALLENTRY(GPMC_A22, "a21", NULL),
571 _OMAP4_BALLENTRY(GPMC_A23, "b21", NULL),
572 _OMAP4_BALLENTRY(GPMC_A24, "c20", NULL),
573 _OMAP4_BALLENTRY(GPMC_A25, "d20", NULL),
574 _OMAP4_BALLENTRY(GPMC_NCS0, "b25", NULL),
575 _OMAP4_BALLENTRY(GPMC_NCS1, "c21", NULL),
576 _OMAP4_BALLENTRY(GPMC_NCS2, "d21", NULL),
577 _OMAP4_BALLENTRY(GPMC_NCS3, "c22", NULL),
578 _OMAP4_BALLENTRY(GPMC_NWP, "c25", NULL),
579 _OMAP4_BALLENTRY(GPMC_CLK, "b22", NULL),
580 _OMAP4_BALLENTRY(GPMC_NADV_ALE, "d25", NULL),
581 _OMAP4_BALLENTRY(GPMC_NOE, "b11", NULL),
582 _OMAP4_BALLENTRY(GPMC_NWE, "b12", NULL),
583 _OMAP4_BALLENTRY(GPMC_NBE0_CLE, "c23", NULL),
584 _OMAP4_BALLENTRY(GPMC_NBE1, "d22", NULL),
585 _OMAP4_BALLENTRY(GPMC_WAIT0, "b26", NULL),
586 _OMAP4_BALLENTRY(GPMC_WAIT1, "b23", NULL),
587 _OMAP4_BALLENTRY(C2C_DATA11, "d23", NULL),
588 _OMAP4_BALLENTRY(C2C_DATA12, "a24", NULL),
589 _OMAP4_BALLENTRY(C2C_DATA13, "b24", NULL),
590 _OMAP4_BALLENTRY(C2C_DATA14, "c24", NULL),
591 _OMAP4_BALLENTRY(C2C_DATA15, "d24", NULL),
592 _OMAP4_BALLENTRY(HDMI_HPD, "b9", NULL),
593 _OMAP4_BALLENTRY(HDMI_CEC, "b10", NULL),
594 _OMAP4_BALLENTRY(HDMI_DDC_SCL, "a8", NULL),
595 _OMAP4_BALLENTRY(HDMI_DDC_SDA, "b8", NULL),
596 _OMAP4_BALLENTRY(CSI21_DX0, "r26", NULL),
597 _OMAP4_BALLENTRY(CSI21_DY0, "r25", NULL),
598 _OMAP4_BALLENTRY(CSI21_DX1, "t26", NULL),
599 _OMAP4_BALLENTRY(CSI21_DY1, "t25", NULL),
600 _OMAP4_BALLENTRY(CSI21_DX2, "u26", NULL),
601 _OMAP4_BALLENTRY(CSI21_DY2, "u25", NULL),
602 _OMAP4_BALLENTRY(CSI21_DX3, "v26", NULL),
603 _OMAP4_BALLENTRY(CSI21_DY3, "v25", NULL),
604 _OMAP4_BALLENTRY(CSI21_DX4, "w26", NULL),
605 _OMAP4_BALLENTRY(CSI21_DY4, "w25", NULL),
606 _OMAP4_BALLENTRY(CSI22_DX0, "m26", NULL),
607 _OMAP4_BALLENTRY(CSI22_DY0, "m25", NULL),
608 _OMAP4_BALLENTRY(CSI22_DX1, "n26", NULL),
609 _OMAP4_BALLENTRY(CSI22_DY1, "n25", NULL),
610 _OMAP4_BALLENTRY(CAM_SHUTTER, "t27", NULL),
611 _OMAP4_BALLENTRY(CAM_STROBE, "u27", NULL),
612 _OMAP4_BALLENTRY(CAM_GLOBALRESET, "v27", NULL),
613 _OMAP4_BALLENTRY(USBB1_ULPITLL_CLK, "ae18", NULL),
614 _OMAP4_BALLENTRY(USBB1_ULPITLL_STP, "ag19", NULL),
615 _OMAP4_BALLENTRY(USBB1_ULPITLL_DIR, "af19", NULL),
616 _OMAP4_BALLENTRY(USBB1_ULPITLL_NXT, "ae19", NULL),
617 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT0, "af18", NULL),
618 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT1, "ag18", NULL),
619 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT2, "ae17", NULL),
620 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT3, "af17", NULL),
621 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT4, "ah17", NULL),
622 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT5, "ae16", NULL),
623 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT6, "af16", NULL),
624 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT7, "ag16", NULL),
625 _OMAP4_BALLENTRY(USBB1_HSIC_DATA, "af14", NULL),
626 _OMAP4_BALLENTRY(USBB1_HSIC_STROBE, "ae14", NULL),
627 _OMAP4_BALLENTRY(USBC1_ICUSB_DP, "h2", NULL),
628 _OMAP4_BALLENTRY(USBC1_ICUSB_DM, "h3", NULL),
629 _OMAP4_BALLENTRY(SDMMC1_CLK, "d2", NULL),
630 _OMAP4_BALLENTRY(SDMMC1_CMD, "e3", NULL),
631 _OMAP4_BALLENTRY(SDMMC1_DAT0, "e4", NULL),
632 _OMAP4_BALLENTRY(SDMMC1_DAT1, "e2", NULL),
633 _OMAP4_BALLENTRY(SDMMC1_DAT2, "e1", NULL),
634 _OMAP4_BALLENTRY(SDMMC1_DAT3, "f4", NULL),
635 _OMAP4_BALLENTRY(SDMMC1_DAT4, "f3", NULL),
636 _OMAP4_BALLENTRY(SDMMC1_DAT5, "f1", NULL),
637 _OMAP4_BALLENTRY(SDMMC1_DAT6, "g4", NULL),
638 _OMAP4_BALLENTRY(SDMMC1_DAT7, "g3", NULL),
639 _OMAP4_BALLENTRY(ABE_MCBSP2_CLKX, "ad27", NULL),
640 _OMAP4_BALLENTRY(ABE_MCBSP2_DR, "ad26", NULL),
641 _OMAP4_BALLENTRY(ABE_MCBSP2_DX, "ad25", NULL),
642 _OMAP4_BALLENTRY(ABE_MCBSP2_FSX, "ac28", NULL),
643 _OMAP4_BALLENTRY(ABE_MCBSP1_CLKX, "ac26", NULL),
644 _OMAP4_BALLENTRY(ABE_MCBSP1_DR, "ac25", NULL),
645 _OMAP4_BALLENTRY(ABE_MCBSP1_DX, "ab25", NULL),
646 _OMAP4_BALLENTRY(ABE_MCBSP1_FSX, "ac27", NULL),
647 _OMAP4_BALLENTRY(ABE_PDM_UL_DATA, "ag25", NULL),
648 _OMAP4_BALLENTRY(ABE_PDM_DL_DATA, "af25", NULL),
649 _OMAP4_BALLENTRY(ABE_PDM_FRAME, "ae25", NULL),
650 _OMAP4_BALLENTRY(ABE_PDM_LB_CLK, "af26", NULL),
651 _OMAP4_BALLENTRY(ABE_CLKS, "ah26", NULL),
652 _OMAP4_BALLENTRY(ABE_DMIC_CLK1, "ae24", NULL),
653 _OMAP4_BALLENTRY(ABE_DMIC_DIN1, "af24", NULL),
654 _OMAP4_BALLENTRY(ABE_DMIC_DIN2, "ag24", NULL),
655 _OMAP4_BALLENTRY(ABE_DMIC_DIN3, "ah24", NULL),
656 _OMAP4_BALLENTRY(UART2_CTS, "ab26", NULL),
657 _OMAP4_BALLENTRY(UART2_RTS, "ab27", NULL),
658 _OMAP4_BALLENTRY(UART2_RX, "aa25", NULL),
659 _OMAP4_BALLENTRY(UART2_TX, "aa26", NULL),
660 _OMAP4_BALLENTRY(HDQ_SIO, "aa27", NULL),
661 _OMAP4_BALLENTRY(I2C1_SCL, "ae28", NULL),
662 _OMAP4_BALLENTRY(I2C1_SDA, "ae26", NULL),
663 _OMAP4_BALLENTRY(I2C2_SCL, "c26", NULL),
664 _OMAP4_BALLENTRY(I2C2_SDA, "d26", NULL),
665 _OMAP4_BALLENTRY(I2C3_SCL, "w27", NULL),
666 _OMAP4_BALLENTRY(I2C3_SDA, "y27", NULL),
667 _OMAP4_BALLENTRY(I2C4_SCL, "ag21", NULL),
668 _OMAP4_BALLENTRY(I2C4_SDA, "ah22", NULL),
669 _OMAP4_BALLENTRY(MCSPI1_CLK, "af22", NULL),
670 _OMAP4_BALLENTRY(MCSPI1_SOMI, "ae22", NULL),
671 _OMAP4_BALLENTRY(MCSPI1_SIMO, "ag22", NULL),
672 _OMAP4_BALLENTRY(MCSPI1_CS0, "ae23", NULL),
673 _OMAP4_BALLENTRY(MCSPI1_CS1, "af23", NULL),
674 _OMAP4_BALLENTRY(MCSPI1_CS2, "ag23", NULL),
675 _OMAP4_BALLENTRY(MCSPI1_CS3, "ah23", NULL),
676 _OMAP4_BALLENTRY(UART3_CTS_RCTX, "f27", NULL),
677 _OMAP4_BALLENTRY(UART3_RTS_SD, "f28", NULL),
678 _OMAP4_BALLENTRY(UART3_RX_IRRX, "g27", NULL),
679 _OMAP4_BALLENTRY(UART3_TX_IRTX, "g28", NULL),
680 _OMAP4_BALLENTRY(SDMMC5_CLK, "ae5", NULL),
681 _OMAP4_BALLENTRY(SDMMC5_CMD, "af5", NULL),
682 _OMAP4_BALLENTRY(SDMMC5_DAT0, "ae4", NULL),
683 _OMAP4_BALLENTRY(SDMMC5_DAT1, "af4", NULL),
684 _OMAP4_BALLENTRY(SDMMC5_DAT2, "ag3", NULL),
685 _OMAP4_BALLENTRY(SDMMC5_DAT3, "af3", NULL),
686 _OMAP4_BALLENTRY(MCSPI4_CLK, "ae21", NULL),
687 _OMAP4_BALLENTRY(MCSPI4_SIMO, "af20", NULL),
688 _OMAP4_BALLENTRY(MCSPI4_SOMI, "af21", NULL),
689 _OMAP4_BALLENTRY(MCSPI4_CS0, "ae20", NULL),
690 _OMAP4_BALLENTRY(UART4_RX, "ag20", NULL),
691 _OMAP4_BALLENTRY(UART4_TX, "ah19", NULL),
692 _OMAP4_BALLENTRY(USBB2_ULPITLL_CLK, "ag12", NULL),
693 _OMAP4_BALLENTRY(USBB2_ULPITLL_STP, "af12", NULL),
694 _OMAP4_BALLENTRY(USBB2_ULPITLL_DIR, "ae12", NULL),
695 _OMAP4_BALLENTRY(USBB2_ULPITLL_NXT, "ag13", NULL),
696 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT0, "ae11", NULL),
697 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT1, "af11", NULL),
698 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT2, "ag11", NULL),
699 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT3, "ah11", NULL),
700 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT4, "ae10", NULL),
701 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT5, "af10", NULL),
702 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT6, "ag10", NULL),
703 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT7, "ae9", NULL),
704 _OMAP4_BALLENTRY(USBB2_HSIC_DATA, "af13", NULL),
705 _OMAP4_BALLENTRY(USBB2_HSIC_STROBE, "ae13", NULL),
706 _OMAP4_BALLENTRY(UNIPRO_TX0, "g26", NULL),
707 _OMAP4_BALLENTRY(UNIPRO_TY0, "g25", NULL),
708 _OMAP4_BALLENTRY(UNIPRO_TX1, "h26", NULL),
709 _OMAP4_BALLENTRY(UNIPRO_TY1, "h25", NULL),
710 _OMAP4_BALLENTRY(UNIPRO_TX2, "j27", NULL),
711 _OMAP4_BALLENTRY(UNIPRO_TY2, "h27", NULL),
712 _OMAP4_BALLENTRY(UNIPRO_RX0, "j26", NULL),
713 _OMAP4_BALLENTRY(UNIPRO_RY0, "j25", NULL),
714 _OMAP4_BALLENTRY(UNIPRO_RX1, "k26", NULL),
715 _OMAP4_BALLENTRY(UNIPRO_RY1, "k25", NULL),
716 _OMAP4_BALLENTRY(UNIPRO_RX2, "l27", NULL),
717 _OMAP4_BALLENTRY(UNIPRO_RY2, "k27", NULL),
718 _OMAP4_BALLENTRY(USBA0_OTG_CE, "c3", NULL),
719 _OMAP4_BALLENTRY(USBA0_OTG_DP, "b5", NULL),
720 _OMAP4_BALLENTRY(USBA0_OTG_DM, "b4", NULL),
721 _OMAP4_BALLENTRY(FREF_CLK1_OUT, "aa28", NULL),
722 _OMAP4_BALLENTRY(FREF_CLK2_OUT, "y28", NULL),
723 _OMAP4_BALLENTRY(SYS_NIRQ1, "ae6", NULL),
724 _OMAP4_BALLENTRY(SYS_NIRQ2, "af6", NULL),
725 _OMAP4_BALLENTRY(SYS_BOOT0, "f26", NULL),
726 _OMAP4_BALLENTRY(SYS_BOOT1, "e27", NULL),
727 _OMAP4_BALLENTRY(SYS_BOOT2, "e26", NULL),
728 _OMAP4_BALLENTRY(SYS_BOOT3, "e25", NULL),
729 _OMAP4_BALLENTRY(SYS_BOOT4, "d28", NULL),
730 _OMAP4_BALLENTRY(SYS_BOOT5, "d27", NULL),
731 _OMAP4_BALLENTRY(DPM_EMU0, "m2", NULL),
732 _OMAP4_BALLENTRY(DPM_EMU1, "n2", NULL),
733 _OMAP4_BALLENTRY(DPM_EMU2, "p2", NULL),
734 _OMAP4_BALLENTRY(DPM_EMU3, "v1", NULL),
735 _OMAP4_BALLENTRY(DPM_EMU4, "v2", NULL),
736 _OMAP4_BALLENTRY(DPM_EMU5, "w1", NULL),
737 _OMAP4_BALLENTRY(DPM_EMU6, "w2", NULL),
738 _OMAP4_BALLENTRY(DPM_EMU7, "w3", NULL),
739 _OMAP4_BALLENTRY(DPM_EMU8, "w4", NULL),
740 _OMAP4_BALLENTRY(DPM_EMU9, "y2", NULL),
741 _OMAP4_BALLENTRY(DPM_EMU10, "y3", NULL),
742 _OMAP4_BALLENTRY(DPM_EMU11, "y4", NULL),
743 _OMAP4_BALLENTRY(DPM_EMU12, "aa1", NULL),
744 _OMAP4_BALLENTRY(DPM_EMU13, "aa2", NULL),
745 _OMAP4_BALLENTRY(DPM_EMU14, "aa3", NULL),
746 _OMAP4_BALLENTRY(DPM_EMU15, "aa4", NULL),
747 _OMAP4_BALLENTRY(DPM_EMU16, "ab2", NULL),
748 _OMAP4_BALLENTRY(DPM_EMU17, "ab3", NULL),
749 _OMAP4_BALLENTRY(DPM_EMU18, "ab4", NULL),
750 _OMAP4_BALLENTRY(DPM_EMU19, "ac4", NULL),
751 { .reg_offset = OMAP_MUX_TERMINATOR },
752};
753#else
754#define omap4_core_cbl_ball NULL
755#endif
756
757/*
758 * Signals different on ES2.0 compared to superset
759 */
760static struct omap_mux __initdata omap4_es2_core_subset[] = {
761 _OMAP4_MUXENTRY(GPMC_AD8, 32, "gpmc_ad8", "kpd_row0", "c2c_data15",
762 "gpio_32", NULL, "sdmmc1_dat0", NULL, NULL),
763 _OMAP4_MUXENTRY(GPMC_AD9, 33, "gpmc_ad9", "kpd_row1", "c2c_data14",
764 "gpio_33", NULL, "sdmmc1_dat1", NULL, NULL),
765 _OMAP4_MUXENTRY(GPMC_AD10, 34, "gpmc_ad10", "kpd_row2", "c2c_data13",
766 "gpio_34", NULL, "sdmmc1_dat2", NULL, NULL),
767 _OMAP4_MUXENTRY(GPMC_AD11, 35, "gpmc_ad11", "kpd_row3", "c2c_data12",
768 "gpio_35", NULL, "sdmmc1_dat3", NULL, NULL),
769 _OMAP4_MUXENTRY(GPMC_AD12, 36, "gpmc_ad12", "kpd_col0", "c2c_data11",
770 "gpio_36", NULL, "sdmmc1_dat4", NULL, NULL),
771 _OMAP4_MUXENTRY(GPMC_AD13, 37, "gpmc_ad13", "kpd_col1", "c2c_data10",
772 "gpio_37", NULL, "sdmmc1_dat5", NULL, NULL),
773 _OMAP4_MUXENTRY(GPMC_AD14, 38, "gpmc_ad14", "kpd_col2", "c2c_data9",
774 "gpio_38", NULL, "sdmmc1_dat6", NULL, NULL),
775 _OMAP4_MUXENTRY(GPMC_AD15, 39, "gpmc_ad15", "kpd_col3", "c2c_data8",
776 "gpio_39", NULL, "sdmmc1_dat7", NULL, NULL),
777 _OMAP4_MUXENTRY(GPMC_A16, 40, "gpmc_a16", "kpd_row4", "c2c_datain0",
778 "gpio_40", "venc_656_data0", NULL, NULL, "safe_mode"),
779 _OMAP4_MUXENTRY(GPMC_A24, 48, "gpmc_a24", "kpd_col8", "c2c_clkout0",
780 "gpio_48", NULL, NULL, NULL, "safe_mode"),
781 _OMAP4_MUXENTRY(GPMC_NCS2, 52, "gpmc_ncs2", "kpd_row8",
782 "c2c_dataout7", "gpio_52", NULL, NULL, NULL,
783 "safe_mode"),
784 _OMAP4_MUXENTRY(GPMC_CLK, 55, "gpmc_clk", NULL, NULL, "gpio_55",
785 "sys_ndmareq2", "sdmmc1_cmd", NULL, NULL),
786 _OMAP4_MUXENTRY(GPMC_NADV_ALE, 56, "gpmc_nadv_ale", "dsi1_te1", NULL,
787 "gpio_56", "sys_ndmareq3", "sdmmc1_clk", NULL, NULL),
788 _OMAP4_MUXENTRY(GPMC_WAIT2, 100, "gpmc_wait2", "usbc1_icusb_txen",
789 "c2c_dataout3", "gpio_100", "sys_ndmareq0", NULL,
790 NULL, "safe_mode"),
791 _OMAP4_MUXENTRY(GPMC_NCS4, 101, "gpmc_ncs4", "dsi1_te0", "c2c_clkin0",
792 "gpio_101", "sys_ndmareq1", NULL, NULL, "safe_mode"),
793 _OMAP4_MUXENTRY(GPMC_NCS5, 102, "gpmc_ncs5", "dsi1_te1", "c2c_clkin1",
794 "gpio_102", "sys_ndmareq2", NULL, NULL, "safe_mode"),
795 _OMAP4_MUXENTRY(GPMC_NCS6, 103, "gpmc_ncs6", "dsi2_te0",
796 "c2c_dataout0", "gpio_103", "sys_ndmareq3", NULL,
797 NULL, "safe_mode"),
798 _OMAP4_MUXENTRY(GPMC_NCS7, 104, "gpmc_ncs7", "dsi2_te1",
799 "c2c_dataout1", "gpio_104", NULL, NULL, NULL,
800 "safe_mode"),
801 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT0, 88, "usbb1_ulpitll_dat0",
802 "hsi1_acwake", "mcbsp4_clkx", "gpio_88",
803 "usbb1_ulpiphy_dat0", "usbb1_mm_txen", "hw_dbg24",
804 "safe_mode"),
805 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT1, 89, "usbb1_ulpitll_dat1",
806 "hsi1_acdata", "mcbsp4_dx", "gpio_89",
807 "usbb1_ulpiphy_dat1", "usbb1_mm_txdat", "hw_dbg25",
808 "safe_mode"),
809 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT2, 90, "usbb1_ulpitll_dat2",
810 "hsi1_acflag", "mcbsp4_dr", "gpio_90",
811 "usbb1_ulpiphy_dat2", "usbb1_mm_txse0", "hw_dbg26",
812 "safe_mode"),
813 _OMAP4_MUXENTRY(USBB1_ULPITLL_DAT3, 91, "usbb1_ulpitll_dat3",
814 "hsi1_caready", NULL, "gpio_91", "usbb1_ulpiphy_dat3",
815 "usbb1_mm_rxrcv", "hw_dbg27", "safe_mode"),
816 _OMAP4_MUXENTRY(ABE_DMIC_CLK1, 119, "abe_dmic_clk1", NULL, NULL,
817 "gpio_119", "usbb2_mm_txse0", "uart4_cts", NULL,
818 "safe_mode"),
819 _OMAP4_MUXENTRY(ABE_DMIC_DIN1, 120, "abe_dmic_din1", NULL, NULL,
820 "gpio_120", "usbb2_mm_txdat", "uart4_rts", NULL,
821 "safe_mode"),
822 _OMAP4_MUXENTRY(ABE_DMIC_DIN2, 121, "abe_dmic_din2", "slimbus2_clock",
823 "abe_mcasp_axr", "gpio_121", NULL,
824 "dmtimer11_pwm_evt", NULL, "safe_mode"),
825 _OMAP4_MUXENTRY(ABE_DMIC_DIN3, 122, "abe_dmic_din3", "slimbus2_data",
826 "abe_dmic_clk2", "gpio_122", NULL, "dmtimer9_pwm_evt",
827 NULL, "safe_mode"),
828 _OMAP4_MUXENTRY(SDMMC5_CLK, 145, "sdmmc5_clk", "mcspi2_clk",
829 "usbc1_icusb_dp", "gpio_145", NULL, "sdmmc2_clk",
830 NULL, "safe_mode"),
831 _OMAP4_MUXENTRY(SDMMC5_CMD, 146, "sdmmc5_cmd", "mcspi2_simo",
832 "usbc1_icusb_dm", "gpio_146", NULL, "sdmmc2_cmd",
833 NULL, "safe_mode"),
834 _OMAP4_MUXENTRY(SDMMC5_DAT0, 147, "sdmmc5_dat0", "mcspi2_somi",
835 "usbc1_icusb_rcv", "gpio_147", NULL, "sdmmc2_dat0",
836 NULL, "safe_mode"),
837 _OMAP4_MUXENTRY(SDMMC5_DAT1, 148, "sdmmc5_dat1", NULL,
838 "usbc1_icusb_txen", "gpio_148", NULL, "sdmmc2_dat1",
839 NULL, "safe_mode"),
840 _OMAP4_MUXENTRY(SDMMC5_DAT2, 149, "sdmmc5_dat2", "mcspi2_cs1", NULL,
841 "gpio_149", NULL, "sdmmc2_dat2", NULL, "safe_mode"),
842 _OMAP4_MUXENTRY(SDMMC5_DAT3, 150, "sdmmc5_dat3", "mcspi2_cs0", NULL,
843 "gpio_150", NULL, "sdmmc2_dat3", NULL, "safe_mode"),
844 _OMAP4_MUXENTRY(MCSPI4_CLK, 151, "mcspi4_clk", "sdmmc4_clk",
845 "kpd_col6", "gpio_151", NULL, NULL, NULL,
846 "safe_mode"),
847 _OMAP4_MUXENTRY(MCSPI4_SIMO, 152, "mcspi4_simo", "sdmmc4_cmd",
848 "kpd_col7", "gpio_152", NULL, NULL, NULL,
849 "safe_mode"),
850 _OMAP4_MUXENTRY(MCSPI4_SOMI, 153, "mcspi4_somi", "sdmmc4_dat0",
851 "kpd_row6", "gpio_153", NULL, NULL, NULL,
852 "safe_mode"),
853 _OMAP4_MUXENTRY(MCSPI4_CS0, 154, "mcspi4_cs0", "sdmmc4_dat3",
854 "kpd_row7", "gpio_154", NULL, NULL, NULL,
855 "safe_mode"),
856 _OMAP4_MUXENTRY(UART4_RX, 155, "uart4_rx", "sdmmc4_dat2", "kpd_row8",
857 "gpio_155", NULL, NULL, NULL, "safe_mode"),
858 _OMAP4_MUXENTRY(UART4_TX, 156, "uart4_tx", "sdmmc4_dat1", "kpd_col8",
859 "gpio_156", NULL, NULL, NULL, "safe_mode"),
860 _OMAP4_MUXENTRY(USBB2_ULPITLL_STP, 158, "usbb2_ulpitll_stp",
861 "usbb2_ulpiphy_stp", "sdmmc4_clk", "gpio_158",
862 "hsi2_cadata", "dispc2_data23", NULL, "safe_mode"),
863 _OMAP4_MUXENTRY(USBB2_ULPITLL_DIR, 159, "usbb2_ulpitll_dir",
864 "usbb2_ulpiphy_dir", "sdmmc4_dat0", "gpio_159",
865 "hsi2_caflag", "dispc2_data22", NULL, "safe_mode"),
866 _OMAP4_MUXENTRY(USBB2_ULPITLL_NXT, 160, "usbb2_ulpitll_nxt",
867 "usbb2_ulpiphy_nxt", "sdmmc4_dat1", "gpio_160",
868 "hsi2_acready", "dispc2_data21", NULL, "safe_mode"),
869 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT0, 161, "usbb2_ulpitll_dat0",
870 "usbb2_ulpiphy_dat0", "sdmmc4_dat2", "gpio_161",
871 "hsi2_acwake", "dispc2_data20", "usbb2_mm_txen",
872 "safe_mode"),
873 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT1, 162, "usbb2_ulpitll_dat1",
874 "usbb2_ulpiphy_dat1", "sdmmc4_dat3", "gpio_162",
875 "hsi2_acdata", "dispc2_data19", "usbb2_mm_txdat",
876 "safe_mode"),
877 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT2, 163, "usbb2_ulpitll_dat2",
878 "usbb2_ulpiphy_dat2", "sdmmc3_dat2", "gpio_163",
879 "hsi2_acflag", "dispc2_data18", "usbb2_mm_txse0",
880 "safe_mode"),
881 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT3, 164, "usbb2_ulpitll_dat3",
882 "usbb2_ulpiphy_dat3", "sdmmc3_dat1", "gpio_164",
883 "hsi2_caready", "dispc2_data15", "rfbi_data15",
884 "safe_mode"),
885 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT4, 165, "usbb2_ulpitll_dat4",
886 "usbb2_ulpiphy_dat4", "sdmmc3_dat0", "gpio_165",
887 "mcspi3_somi", "dispc2_data14", "rfbi_data14",
888 "safe_mode"),
889 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT5, 166, "usbb2_ulpitll_dat5",
890 "usbb2_ulpiphy_dat5", "sdmmc3_dat3", "gpio_166",
891 "mcspi3_cs0", "dispc2_data13", "rfbi_data13",
892 "safe_mode"),
893 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT6, 167, "usbb2_ulpitll_dat6",
894 "usbb2_ulpiphy_dat6", "sdmmc3_cmd", "gpio_167",
895 "mcspi3_simo", "dispc2_data12", "rfbi_data12",
896 "safe_mode"),
897 _OMAP4_MUXENTRY(USBB2_ULPITLL_DAT7, 168, "usbb2_ulpitll_dat7",
898 "usbb2_ulpiphy_dat7", "sdmmc3_clk", "gpio_168",
899 "mcspi3_clk", "dispc2_data11", "rfbi_data11",
900 "safe_mode"),
901 _OMAP4_MUXENTRY(KPD_COL3, 171, "kpd_col3", "kpd_col0", NULL,
902 "gpio_171", NULL, NULL, NULL, "safe_mode"),
903 _OMAP4_MUXENTRY(KPD_COL4, 172, "kpd_col4", "kpd_col1", NULL,
904 "gpio_172", NULL, NULL, NULL, "safe_mode"),
905 _OMAP4_MUXENTRY(KPD_COL5, 173, "kpd_col5", "kpd_col2", NULL,
906 "gpio_173", NULL, NULL, NULL, "safe_mode"),
907 _OMAP4_MUXENTRY(KPD_COL0, 174, "kpd_col0", "kpd_col3", NULL,
908 "gpio_174", NULL, NULL, NULL, "safe_mode"),
909 _OMAP4_MUXENTRY(KPD_COL1, 0, "kpd_col1", "kpd_col4", NULL, "gpio_0",
910 NULL, NULL, NULL, "safe_mode"),
911 _OMAP4_MUXENTRY(KPD_COL2, 1, "kpd_col2", "kpd_col5", NULL, "gpio_1",
912 NULL, NULL, NULL, "safe_mode"),
913 _OMAP4_MUXENTRY(KPD_ROW3, 175, "kpd_row3", "kpd_row0", NULL,
914 "gpio_175", NULL, NULL, NULL, "safe_mode"),
915 _OMAP4_MUXENTRY(KPD_ROW4, 176, "kpd_row4", "kpd_row1", NULL,
916 "gpio_176", NULL, NULL, NULL, "safe_mode"),
917 _OMAP4_MUXENTRY(KPD_ROW5, 177, "kpd_row5", "kpd_row2", NULL,
918 "gpio_177", NULL, NULL, NULL, "safe_mode"),
919 _OMAP4_MUXENTRY(KPD_ROW0, 178, "kpd_row0", "kpd_row3", NULL,
920 "gpio_178", NULL, NULL, NULL, "safe_mode"),
921 _OMAP4_MUXENTRY(KPD_ROW1, 2, "kpd_row1", "kpd_row4", NULL, "gpio_2",
922 NULL, NULL, NULL, "safe_mode"),
923 _OMAP4_MUXENTRY(KPD_ROW2, 3, "kpd_row2", "kpd_row5", NULL, "gpio_3",
924 NULL, NULL, NULL, "safe_mode"),
925 _OMAP4_MUXENTRY(USBA0_OTG_DP, 0, "usba0_otg_dp", "uart3_rx_irrx",
926 "uart2_rx", NULL, NULL, NULL, NULL, "safe_mode"),
927 _OMAP4_MUXENTRY(USBA0_OTG_DM, 0, "usba0_otg_dm", "uart3_tx_irtx",
928 "uart2_tx", NULL, NULL, NULL, NULL, "safe_mode"),
929 _OMAP4_MUXENTRY(DPM_EMU2, 13, "dpm_emu2", "usba0_ulpiphy_clk", NULL,
930 "gpio_13", NULL, "dispc2_fid", "hw_dbg2",
931 "safe_mode"),
932 _OMAP4_MUXENTRY(DPM_EMU3, 14, "dpm_emu3", "usba0_ulpiphy_stp", NULL,
933 "gpio_14", "rfbi_data10", "dispc2_data10", "hw_dbg3",
934 "safe_mode"),
935 _OMAP4_MUXENTRY(DPM_EMU4, 15, "dpm_emu4", "usba0_ulpiphy_dir", NULL,
936 "gpio_15", "rfbi_data9", "dispc2_data9", "hw_dbg4",
937 "safe_mode"),
938 _OMAP4_MUXENTRY(DPM_EMU5, 16, "dpm_emu5", "usba0_ulpiphy_nxt", NULL,
939 "gpio_16", "rfbi_te_vsync0", "dispc2_data16",
940 "hw_dbg5", "safe_mode"),
941 _OMAP4_MUXENTRY(DPM_EMU6, 17, "dpm_emu6", "usba0_ulpiphy_dat0",
942 "uart3_tx_irtx", "gpio_17", "rfbi_hsync0",
943 "dispc2_data17", "hw_dbg6", "safe_mode"),
944 _OMAP4_MUXENTRY(DPM_EMU7, 18, "dpm_emu7", "usba0_ulpiphy_dat1",
945 "uart3_rx_irrx", "gpio_18", "rfbi_cs0",
946 "dispc2_hsync", "hw_dbg7", "safe_mode"),
947 _OMAP4_MUXENTRY(DPM_EMU8, 19, "dpm_emu8", "usba0_ulpiphy_dat2",
948 "uart3_rts_sd", "gpio_19", "rfbi_re", "dispc2_pclk",
949 "hw_dbg8", "safe_mode"),
950 _OMAP4_MUXENTRY(DPM_EMU9, 20, "dpm_emu9", "usba0_ulpiphy_dat3",
951 "uart3_cts_rctx", "gpio_20", "rfbi_we",
952 "dispc2_vsync", "hw_dbg9", "safe_mode"),
953 _OMAP4_MUXENTRY(DPM_EMU10, 21, "dpm_emu10", "usba0_ulpiphy_dat4",
954 NULL, "gpio_21", "rfbi_a0", "dispc2_de", "hw_dbg10",
955 "safe_mode"),
956 _OMAP4_MUXENTRY(DPM_EMU11, 22, "dpm_emu11", "usba0_ulpiphy_dat5",
957 NULL, "gpio_22", "rfbi_data8", "dispc2_data8",
958 "hw_dbg11", "safe_mode"),
959 _OMAP4_MUXENTRY(DPM_EMU12, 23, "dpm_emu12", "usba0_ulpiphy_dat6",
960 NULL, "gpio_23", "rfbi_data7", "dispc2_data7",
961 "hw_dbg12", "safe_mode"),
962 _OMAP4_MUXENTRY(DPM_EMU13, 24, "dpm_emu13", "usba0_ulpiphy_dat7",
963 NULL, "gpio_24", "rfbi_data6", "dispc2_data6",
964 "hw_dbg13", "safe_mode"),
965 _OMAP4_MUXENTRY(DPM_EMU14, 25, "dpm_emu14", "sys_drm_msecure",
966 "uart1_rx", "gpio_25", "rfbi_data5", "dispc2_data5",
967 "hw_dbg14", "safe_mode"),
968 _OMAP4_MUXENTRY(DPM_EMU15, 26, "dpm_emu15", "sys_secure_indicator",
969 NULL, "gpio_26", "rfbi_data4", "dispc2_data4",
970 "hw_dbg15", "safe_mode"),
971 _OMAP4_MUXENTRY(DPM_EMU16, 27, "dpm_emu16", "dmtimer8_pwm_evt",
972 "dsi1_te0", "gpio_27", "rfbi_data3", "dispc2_data3",
973 "hw_dbg16", "safe_mode"),
974 _OMAP4_MUXENTRY(DPM_EMU17, 28, "dpm_emu17", "dmtimer9_pwm_evt",
975 "dsi1_te1", "gpio_28", "rfbi_data2", "dispc2_data2",
976 "hw_dbg17", "safe_mode"),
977 _OMAP4_MUXENTRY(DPM_EMU18, 190, "dpm_emu18", "dmtimer10_pwm_evt",
978 "dsi2_te0", "gpio_190", "rfbi_data1", "dispc2_data1",
979 "hw_dbg18", "safe_mode"),
980 _OMAP4_MUXENTRY(DPM_EMU19, 191, "dpm_emu19", "dmtimer11_pwm_evt",
981 "dsi2_te1", "gpio_191", "rfbi_data0", "dispc2_data0",
982 "hw_dbg19", "safe_mode"),
983 { .reg_offset = OMAP_MUX_TERMINATOR },
984};
985
986/*
987 * Balls for 44XX CBS package
988 * 547-pin CBL ES2.0 S-FPGA-N547, 0.40mm Ball Pitch (Top),
989 * 0.40mm Ball Pitch (Bottom)
990 */
991#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
992 && defined(CONFIG_OMAP_PACKAGE_CBS)
993static struct omap_ball __initdata omap4_core_cbs_ball[] = {
994 _OMAP4_BALLENTRY(GPMC_AD0, "c12", NULL),
995 _OMAP4_BALLENTRY(GPMC_AD1, "d12", NULL),
996 _OMAP4_BALLENTRY(GPMC_AD2, "c13", NULL),
997 _OMAP4_BALLENTRY(GPMC_AD3, "d13", NULL),
998 _OMAP4_BALLENTRY(GPMC_AD4, "c15", NULL),
999 _OMAP4_BALLENTRY(GPMC_AD5, "d15", NULL),
1000 _OMAP4_BALLENTRY(GPMC_AD6, "a16", NULL),
1001 _OMAP4_BALLENTRY(GPMC_AD7, "b16", NULL),
1002 _OMAP4_BALLENTRY(GPMC_AD8, "c16", NULL),
1003 _OMAP4_BALLENTRY(GPMC_AD9, "d16", NULL),
1004 _OMAP4_BALLENTRY(GPMC_AD10, "c17", NULL),
1005 _OMAP4_BALLENTRY(GPMC_AD11, "d17", NULL),
1006 _OMAP4_BALLENTRY(GPMC_AD12, "c18", NULL),
1007 _OMAP4_BALLENTRY(GPMC_AD13, "d18", NULL),
1008 _OMAP4_BALLENTRY(GPMC_AD14, "c19", NULL),
1009 _OMAP4_BALLENTRY(GPMC_AD15, "d19", NULL),
1010 _OMAP4_BALLENTRY(GPMC_A16, "b17", NULL),
1011 _OMAP4_BALLENTRY(GPMC_A17, "a18", NULL),
1012 _OMAP4_BALLENTRY(GPMC_A18, "b18", NULL),
1013 _OMAP4_BALLENTRY(GPMC_A19, "a19", NULL),
1014 _OMAP4_BALLENTRY(GPMC_A20, "b19", NULL),
1015 _OMAP4_BALLENTRY(GPMC_A21, "b20", NULL),
1016 _OMAP4_BALLENTRY(GPMC_A22, "a21", NULL),
1017 _OMAP4_BALLENTRY(GPMC_A23, "b21", NULL),
1018 _OMAP4_BALLENTRY(GPMC_A24, "c20", NULL),
1019 _OMAP4_BALLENTRY(GPMC_A25, "d20", NULL),
1020 _OMAP4_BALLENTRY(GPMC_NCS0, "b25", NULL),
1021 _OMAP4_BALLENTRY(GPMC_NCS1, "c21", NULL),
1022 _OMAP4_BALLENTRY(GPMC_NCS2, "d21", NULL),
1023 _OMAP4_BALLENTRY(GPMC_NCS3, "c22", NULL),
1024 _OMAP4_BALLENTRY(GPMC_NWP, "c25", NULL),
1025 _OMAP4_BALLENTRY(GPMC_CLK, "b22", NULL),
1026 _OMAP4_BALLENTRY(GPMC_NADV_ALE, "d25", NULL),
1027 _OMAP4_BALLENTRY(GPMC_NOE, "b11", NULL),
1028 _OMAP4_BALLENTRY(GPMC_NWE, "b12", NULL),
1029 _OMAP4_BALLENTRY(GPMC_NBE0_CLE, "c23", NULL),
1030 _OMAP4_BALLENTRY(GPMC_NBE1, "d22", NULL),
1031 _OMAP4_BALLENTRY(GPMC_WAIT0, "b26", NULL),
1032 _OMAP4_BALLENTRY(GPMC_WAIT1, "b23", NULL),
1033 _OMAP4_BALLENTRY(GPMC_WAIT2, "d23", NULL),
1034 _OMAP4_BALLENTRY(GPMC_NCS4, "a24", NULL),
1035 _OMAP4_BALLENTRY(GPMC_NCS5, "b24", NULL),
1036 _OMAP4_BALLENTRY(GPMC_NCS6, "c24", NULL),
1037 _OMAP4_BALLENTRY(GPMC_NCS7, "d24", NULL),
1038 _OMAP4_BALLENTRY(HDMI_HPD, "b9", NULL),
1039 _OMAP4_BALLENTRY(HDMI_CEC, "b10", NULL),
1040 _OMAP4_BALLENTRY(HDMI_DDC_SCL, "a8", NULL),
1041 _OMAP4_BALLENTRY(HDMI_DDC_SDA, "b8", NULL),
1042 _OMAP4_BALLENTRY(CSI21_DX0, "r26", NULL),
1043 _OMAP4_BALLENTRY(CSI21_DY0, "r25", NULL),
1044 _OMAP4_BALLENTRY(CSI21_DX1, "t26", NULL),
1045 _OMAP4_BALLENTRY(CSI21_DY1, "t25", NULL),
1046 _OMAP4_BALLENTRY(CSI21_DX2, "u26", NULL),
1047 _OMAP4_BALLENTRY(CSI21_DY2, "u25", NULL),
1048 _OMAP4_BALLENTRY(CSI21_DX3, "v26", NULL),
1049 _OMAP4_BALLENTRY(CSI21_DY3, "v25", NULL),
1050 _OMAP4_BALLENTRY(CSI21_DX4, "w26", NULL),
1051 _OMAP4_BALLENTRY(CSI21_DY4, "w25", NULL),
1052 _OMAP4_BALLENTRY(CSI22_DX0, "m26", NULL),
1053 _OMAP4_BALLENTRY(CSI22_DY0, "m25", NULL),
1054 _OMAP4_BALLENTRY(CSI22_DX1, "n26", NULL),
1055 _OMAP4_BALLENTRY(CSI22_DY1, "n25", NULL),
1056 _OMAP4_BALLENTRY(CAM_SHUTTER, "t27", NULL),
1057 _OMAP4_BALLENTRY(CAM_STROBE, "u27", NULL),
1058 _OMAP4_BALLENTRY(CAM_GLOBALRESET, "v27", NULL),
1059 _OMAP4_BALLENTRY(USBB1_ULPITLL_CLK, "ae18", NULL),
1060 _OMAP4_BALLENTRY(USBB1_ULPITLL_STP, "ag19", NULL),
1061 _OMAP4_BALLENTRY(USBB1_ULPITLL_DIR, "af19", NULL),
1062 _OMAP4_BALLENTRY(USBB1_ULPITLL_NXT, "ae19", NULL),
1063 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT0, "af18", NULL),
1064 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT1, "ag18", NULL),
1065 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT2, "ae17", NULL),
1066 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT3, "af17", NULL),
1067 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT4, "ah17", NULL),
1068 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT5, "ae16", NULL),
1069 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT6, "af16", NULL),
1070 _OMAP4_BALLENTRY(USBB1_ULPITLL_DAT7, "ag16", NULL),
1071 _OMAP4_BALLENTRY(USBB1_HSIC_DATA, "af14", NULL),
1072 _OMAP4_BALLENTRY(USBB1_HSIC_STROBE, "ae14", NULL),
1073 _OMAP4_BALLENTRY(USBC1_ICUSB_DP, "h2", NULL),
1074 _OMAP4_BALLENTRY(USBC1_ICUSB_DM, "h3", NULL),
1075 _OMAP4_BALLENTRY(SDMMC1_CLK, "d2", NULL),
1076 _OMAP4_BALLENTRY(SDMMC1_CMD, "e3", NULL),
1077 _OMAP4_BALLENTRY(SDMMC1_DAT0, "e4", NULL),
1078 _OMAP4_BALLENTRY(SDMMC1_DAT1, "e2", NULL),
1079 _OMAP4_BALLENTRY(SDMMC1_DAT2, "e1", NULL),
1080 _OMAP4_BALLENTRY(SDMMC1_DAT3, "f4", NULL),
1081 _OMAP4_BALLENTRY(SDMMC1_DAT4, "f3", NULL),
1082 _OMAP4_BALLENTRY(SDMMC1_DAT5, "f1", NULL),
1083 _OMAP4_BALLENTRY(SDMMC1_DAT6, "g4", NULL),
1084 _OMAP4_BALLENTRY(SDMMC1_DAT7, "g3", NULL),
1085 _OMAP4_BALLENTRY(ABE_MCBSP2_CLKX, "ad27", NULL),
1086 _OMAP4_BALLENTRY(ABE_MCBSP2_DR, "ad26", NULL),
1087 _OMAP4_BALLENTRY(ABE_MCBSP2_DX, "ad25", NULL),
1088 _OMAP4_BALLENTRY(ABE_MCBSP2_FSX, "ac28", NULL),
1089 _OMAP4_BALLENTRY(ABE_MCBSP1_CLKX, "ac26", NULL),
1090 _OMAP4_BALLENTRY(ABE_MCBSP1_DR, "ac25", NULL),
1091 _OMAP4_BALLENTRY(ABE_MCBSP1_DX, "ab25", NULL),
1092 _OMAP4_BALLENTRY(ABE_MCBSP1_FSX, "ac27", NULL),
1093 _OMAP4_BALLENTRY(ABE_PDM_UL_DATA, "ag25", NULL),
1094 _OMAP4_BALLENTRY(ABE_PDM_DL_DATA, "af25", NULL),
1095 _OMAP4_BALLENTRY(ABE_PDM_FRAME, "ae25", NULL),
1096 _OMAP4_BALLENTRY(ABE_PDM_LB_CLK, "af26", NULL),
1097 _OMAP4_BALLENTRY(ABE_CLKS, "ah26", NULL),
1098 _OMAP4_BALLENTRY(ABE_DMIC_CLK1, "ae24", NULL),
1099 _OMAP4_BALLENTRY(ABE_DMIC_DIN1, "af24", NULL),
1100 _OMAP4_BALLENTRY(ABE_DMIC_DIN2, "ag24", NULL),
1101 _OMAP4_BALLENTRY(ABE_DMIC_DIN3, "ah24", NULL),
1102 _OMAP4_BALLENTRY(UART2_CTS, "ab26", NULL),
1103 _OMAP4_BALLENTRY(UART2_RTS, "ab27", NULL),
1104 _OMAP4_BALLENTRY(UART2_RX, "aa25", NULL),
1105 _OMAP4_BALLENTRY(UART2_TX, "aa26", NULL),
1106 _OMAP4_BALLENTRY(HDQ_SIO, "aa27", NULL),
1107 _OMAP4_BALLENTRY(I2C1_SCL, "ae28", NULL),
1108 _OMAP4_BALLENTRY(I2C1_SDA, "ae26", NULL),
1109 _OMAP4_BALLENTRY(I2C2_SCL, "c26", NULL),
1110 _OMAP4_BALLENTRY(I2C2_SDA, "d26", NULL),
1111 _OMAP4_BALLENTRY(I2C3_SCL, "w27", NULL),
1112 _OMAP4_BALLENTRY(I2C3_SDA, "y27", NULL),
1113 _OMAP4_BALLENTRY(I2C4_SCL, "ag21", NULL),
1114 _OMAP4_BALLENTRY(I2C4_SDA, "ah22", NULL),
1115 _OMAP4_BALLENTRY(MCSPI1_CLK, "af22", NULL),
1116 _OMAP4_BALLENTRY(MCSPI1_SOMI, "ae22", NULL),
1117 _OMAP4_BALLENTRY(MCSPI1_SIMO, "ag22", NULL),
1118 _OMAP4_BALLENTRY(MCSPI1_CS0, "ae23", NULL),
1119 _OMAP4_BALLENTRY(MCSPI1_CS1, "af23", NULL),
1120 _OMAP4_BALLENTRY(MCSPI1_CS2, "ag23", NULL),
1121 _OMAP4_BALLENTRY(MCSPI1_CS3, "ah23", NULL),
1122 _OMAP4_BALLENTRY(UART3_CTS_RCTX, "f27", NULL),
1123 _OMAP4_BALLENTRY(UART3_RTS_SD, "f28", NULL),
1124 _OMAP4_BALLENTRY(UART3_RX_IRRX, "g27", NULL),
1125 _OMAP4_BALLENTRY(UART3_TX_IRTX, "g28", NULL),
1126 _OMAP4_BALLENTRY(SDMMC5_CLK, "ae5", NULL),
1127 _OMAP4_BALLENTRY(SDMMC5_CMD, "af5", NULL),
1128 _OMAP4_BALLENTRY(SDMMC5_DAT0, "ae4", NULL),
1129 _OMAP4_BALLENTRY(SDMMC5_DAT1, "af4", NULL),
1130 _OMAP4_BALLENTRY(SDMMC5_DAT2, "ag3", NULL),
1131 _OMAP4_BALLENTRY(SDMMC5_DAT3, "af3", NULL),
1132 _OMAP4_BALLENTRY(MCSPI4_CLK, "ae21", NULL),
1133 _OMAP4_BALLENTRY(MCSPI4_SIMO, "af20", NULL),
1134 _OMAP4_BALLENTRY(MCSPI4_SOMI, "af21", NULL),
1135 _OMAP4_BALLENTRY(MCSPI4_CS0, "ae20", NULL),
1136 _OMAP4_BALLENTRY(UART4_RX, "ag20", NULL),
1137 _OMAP4_BALLENTRY(UART4_TX, "ah19", NULL),
1138 _OMAP4_BALLENTRY(USBB2_ULPITLL_CLK, "ag12", NULL),
1139 _OMAP4_BALLENTRY(USBB2_ULPITLL_STP, "af12", NULL),
1140 _OMAP4_BALLENTRY(USBB2_ULPITLL_DIR, "ae12", NULL),
1141 _OMAP4_BALLENTRY(USBB2_ULPITLL_NXT, "ag13", NULL),
1142 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT0, "ae11", NULL),
1143 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT1, "af11", NULL),
1144 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT2, "ag11", NULL),
1145 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT3, "ah11", NULL),
1146 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT4, "ae10", NULL),
1147 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT5, "af10", NULL),
1148 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT6, "ag10", NULL),
1149 _OMAP4_BALLENTRY(USBB2_ULPITLL_DAT7, "ae9", NULL),
1150 _OMAP4_BALLENTRY(USBB2_HSIC_DATA, "af13", NULL),
1151 _OMAP4_BALLENTRY(USBB2_HSIC_STROBE, "ae13", NULL),
1152 _OMAP4_BALLENTRY(KPD_COL3, "g26", NULL),
1153 _OMAP4_BALLENTRY(KPD_COL4, "g25", NULL),
1154 _OMAP4_BALLENTRY(KPD_COL5, "h26", NULL),
1155 _OMAP4_BALLENTRY(KPD_COL0, "h25", NULL),
1156 _OMAP4_BALLENTRY(KPD_COL1, "j27", NULL),
1157 _OMAP4_BALLENTRY(KPD_COL2, "h27", NULL),
1158 _OMAP4_BALLENTRY(KPD_ROW3, "j26", NULL),
1159 _OMAP4_BALLENTRY(KPD_ROW4, "j25", NULL),
1160 _OMAP4_BALLENTRY(KPD_ROW5, "k26", NULL),
1161 _OMAP4_BALLENTRY(KPD_ROW0, "k25", NULL),
1162 _OMAP4_BALLENTRY(KPD_ROW1, "l27", NULL),
1163 _OMAP4_BALLENTRY(KPD_ROW2, "k27", NULL),
1164 _OMAP4_BALLENTRY(USBA0_OTG_CE, "c3", NULL),
1165 _OMAP4_BALLENTRY(USBA0_OTG_DP, "b5", NULL),
1166 _OMAP4_BALLENTRY(USBA0_OTG_DM, "b4", NULL),
1167 _OMAP4_BALLENTRY(FREF_CLK1_OUT, "aa28", NULL),
1168 _OMAP4_BALLENTRY(FREF_CLK2_OUT, "y28", NULL),
1169 _OMAP4_BALLENTRY(SYS_NIRQ1, "ae6", NULL),
1170 _OMAP4_BALLENTRY(SYS_NIRQ2, "af6", NULL),
1171 _OMAP4_BALLENTRY(SYS_BOOT0, "f26", NULL),
1172 _OMAP4_BALLENTRY(SYS_BOOT1, "e27", NULL),
1173 _OMAP4_BALLENTRY(SYS_BOOT2, "e26", NULL),
1174 _OMAP4_BALLENTRY(SYS_BOOT3, "e25", NULL),
1175 _OMAP4_BALLENTRY(SYS_BOOT4, "d28", NULL),
1176 _OMAP4_BALLENTRY(SYS_BOOT5, "d27", NULL),
1177 _OMAP4_BALLENTRY(DPM_EMU0, "m2", NULL),
1178 _OMAP4_BALLENTRY(DPM_EMU1, "n2", NULL),
1179 _OMAP4_BALLENTRY(DPM_EMU2, "p2", NULL),
1180 _OMAP4_BALLENTRY(DPM_EMU3, "v1", NULL),
1181 _OMAP4_BALLENTRY(DPM_EMU4, "v2", NULL),
1182 _OMAP4_BALLENTRY(DPM_EMU5, "w1", NULL),
1183 _OMAP4_BALLENTRY(DPM_EMU6, "w2", NULL),
1184 _OMAP4_BALLENTRY(DPM_EMU7, "w3", NULL),
1185 _OMAP4_BALLENTRY(DPM_EMU8, "w4", NULL),
1186 _OMAP4_BALLENTRY(DPM_EMU9, "y2", NULL),
1187 _OMAP4_BALLENTRY(DPM_EMU10, "y3", NULL),
1188 _OMAP4_BALLENTRY(DPM_EMU11, "y4", NULL),
1189 _OMAP4_BALLENTRY(DPM_EMU12, "aa1", NULL),
1190 _OMAP4_BALLENTRY(DPM_EMU13, "aa2", NULL),
1191 _OMAP4_BALLENTRY(DPM_EMU14, "aa3", NULL),
1192 _OMAP4_BALLENTRY(DPM_EMU15, "aa4", NULL),
1193 _OMAP4_BALLENTRY(DPM_EMU16, "ab2", NULL),
1194 _OMAP4_BALLENTRY(DPM_EMU17, "ab3", NULL),
1195 _OMAP4_BALLENTRY(DPM_EMU18, "ab4", NULL),
1196 _OMAP4_BALLENTRY(DPM_EMU19, "ac4", NULL),
1197 { .reg_offset = OMAP_MUX_TERMINATOR },
1198};
1199#else
1200#define omap4_core_cbs_ball NULL
1201#endif
1202
1203/*
1204 * Superset of all mux modes for omap4
1205 */
1206static struct omap_mux __initdata omap4_wkup_muxmodes[] = {
1207 _OMAP4_MUXENTRY(SIM_IO, 0, "sim_io", NULL, NULL, "gpio_wk0", NULL,
1208 NULL, NULL, "safe_mode"),
1209 _OMAP4_MUXENTRY(SIM_CLK, 1, "sim_clk", NULL, NULL, "gpio_wk1", NULL,
1210 NULL, NULL, "safe_mode"),
1211 _OMAP4_MUXENTRY(SIM_RESET, 2, "sim_reset", NULL, NULL, "gpio_wk2",
1212 NULL, NULL, NULL, "safe_mode"),
1213 _OMAP4_MUXENTRY(SIM_CD, 3, "sim_cd", NULL, NULL, "gpio_wk3", NULL,
1214 NULL, NULL, "safe_mode"),
1215 _OMAP4_MUXENTRY(SIM_PWRCTRL, 4, "sim_pwrctrl", NULL, NULL, "gpio_wk4",
1216 NULL, NULL, NULL, "safe_mode"),
1217 _OMAP4_MUXENTRY(SR_SCL, 0, "sr_scl", NULL, NULL, NULL, NULL, NULL,
1218 NULL, NULL),
1219 _OMAP4_MUXENTRY(SR_SDA, 0, "sr_sda", NULL, NULL, NULL, NULL, NULL,
1220 NULL, NULL),
1221 _OMAP4_MUXENTRY(FREF_XTAL_IN, 0, "fref_xtal_in", NULL, NULL, NULL,
1222 "c2c_wakereqin", NULL, NULL, NULL),
1223 _OMAP4_MUXENTRY(FREF_SLICER_IN, 0, "fref_slicer_in", NULL, NULL,
1224 "gpi_wk5", "c2c_wakereqin", NULL, NULL, "safe_mode"),
1225 _OMAP4_MUXENTRY(FREF_CLK_IOREQ, 0, "fref_clk_ioreq", NULL, NULL, NULL,
1226 NULL, NULL, NULL, NULL),
1227 _OMAP4_MUXENTRY(FREF_CLK0_OUT, 6, "fref_clk0_out", "fref_clk1_req",
1228 "sys_drm_msecure", "gpio_wk6", NULL, NULL, NULL,
1229 "safe_mode"),
1230 _OMAP4_MUXENTRY(FREF_CLK3_REQ, 30, "fref_clk3_req", "fref_clk1_req",
1231 "sys_drm_msecure", "gpio_wk30", "c2c_wakereqin", NULL,
1232 NULL, "safe_mode"),
1233 _OMAP4_MUXENTRY(FREF_CLK3_OUT, 31, "fref_clk3_out", "fref_clk2_req",
1234 "sys_secure_indicator", "gpio_wk31", "c2c_wakereqout",
1235 NULL, NULL, "safe_mode"),
1236 _OMAP4_MUXENTRY(FREF_CLK4_REQ, 7, "fref_clk4_req", "fref_clk5_out",
1237 NULL, "gpio_wk7", NULL, NULL, NULL, NULL),
1238 _OMAP4_MUXENTRY(FREF_CLK4_OUT, 8, "fref_clk4_out", NULL, NULL,
1239 "gpio_wk8", NULL, NULL, NULL, NULL),
1240 _OMAP4_MUXENTRY(SYS_32K, 0, "sys_32k", NULL, NULL, NULL, NULL, NULL,
1241 NULL, NULL),
1242 _OMAP4_MUXENTRY(SYS_NRESPWRON, 0, "sys_nrespwron", NULL, NULL, NULL,
1243 NULL, NULL, NULL, NULL),
1244 _OMAP4_MUXENTRY(SYS_NRESWARM, 0, "sys_nreswarm", NULL, NULL, NULL,
1245 NULL, NULL, NULL, NULL),
1246 _OMAP4_MUXENTRY(SYS_PWR_REQ, 0, "sys_pwr_req", NULL, NULL, NULL, NULL,
1247 NULL, NULL, NULL),
1248 _OMAP4_MUXENTRY(SYS_PWRON_RESET_OUT, 29, "sys_pwron_reset_out", NULL,
1249 NULL, "gpio_wk29", NULL, NULL, NULL, NULL),
1250 _OMAP4_MUXENTRY(SYS_BOOT6, 9, "sys_boot6", "dpm_emu18", NULL,
1251 "gpio_wk9", "c2c_wakereqout", NULL, NULL,
1252 "safe_mode"),
1253 _OMAP4_MUXENTRY(SYS_BOOT7, 10, "sys_boot7", "dpm_emu19", NULL,
1254 "gpio_wk10", NULL, NULL, NULL, "safe_mode"),
1255 _OMAP4_MUXENTRY(JTAG_NTRST, 0, "jtag_ntrst", NULL, NULL, NULL, NULL,
1256 NULL, NULL, NULL),
1257 _OMAP4_MUXENTRY(JTAG_TCK, 0, "jtag_tck", NULL, NULL, NULL, NULL, NULL,
1258 NULL, "safe_mode"),
1259 _OMAP4_MUXENTRY(JTAG_RTCK, 0, "jtag_rtck", NULL, NULL, NULL, NULL,
1260 NULL, NULL, NULL),
1261 _OMAP4_MUXENTRY(JTAG_TMS_TMSC, 0, "jtag_tms_tmsc", NULL, NULL, NULL,
1262 NULL, NULL, NULL, "safe_mode"),
1263 _OMAP4_MUXENTRY(JTAG_TDI, 0, "jtag_tdi", NULL, NULL, NULL, NULL, NULL,
1264 NULL, NULL),
1265 _OMAP4_MUXENTRY(JTAG_TDO, 0, "jtag_tdo", NULL, NULL, NULL, NULL, NULL,
1266 NULL, NULL),
1267 { .reg_offset = OMAP_MUX_TERMINATOR },
1268};
1269
1270/*
1271 * Balls for 44XX CBL & CBS package - wakeup partition
1272 * 547-pin CBL ES1.0 S-FPGA-N547, 0.40mm Ball Pitch (Top),
1273 * 0.40mm Ball Pitch (Bottom)
1274 */
1275#if defined(CONFIG_OMAP_MUX) && defined(CONFIG_DEBUG_FS) \
1276 && defined(CONFIG_OMAP_PACKAGE_CBL)
1277static struct omap_ball __initdata omap4_wkup_cbl_cbs_ball[] = {
1278 _OMAP4_BALLENTRY(SIM_IO, "h4", NULL),
1279 _OMAP4_BALLENTRY(SIM_CLK, "j2", NULL),
1280 _OMAP4_BALLENTRY(SIM_RESET, "g2", NULL),
1281 _OMAP4_BALLENTRY(SIM_CD, "j1", NULL),
1282 _OMAP4_BALLENTRY(SIM_PWRCTRL, "k1", NULL),
1283 _OMAP4_BALLENTRY(SR_SCL, "ag9", NULL),
1284 _OMAP4_BALLENTRY(SR_SDA, "af9", NULL),
1285 _OMAP4_BALLENTRY(FREF_XTAL_IN, "ah6", NULL),
1286 _OMAP4_BALLENTRY(FREF_SLICER_IN, "ag8", NULL),
1287 _OMAP4_BALLENTRY(FREF_CLK_IOREQ, "ad1", NULL),
1288 _OMAP4_BALLENTRY(FREF_CLK0_OUT, "ad2", NULL),
1289 _OMAP4_BALLENTRY(FREF_CLK3_REQ, "ad3", NULL),
1290 _OMAP4_BALLENTRY(FREF_CLK3_OUT, "ad4", NULL),
1291 _OMAP4_BALLENTRY(FREF_CLK4_REQ, "ac2", NULL),
1292 _OMAP4_BALLENTRY(FREF_CLK4_OUT, "ac3", NULL),
1293 _OMAP4_BALLENTRY(SYS_32K, "ag7", NULL),
1294 _OMAP4_BALLENTRY(SYS_NRESPWRON, "ae7", NULL),
1295 _OMAP4_BALLENTRY(SYS_NRESWARM, "af7", NULL),
1296 _OMAP4_BALLENTRY(SYS_PWR_REQ, "ah7", NULL),
1297 _OMAP4_BALLENTRY(SYS_PWRON_RESET_OUT, "ag6", NULL),
1298 _OMAP4_BALLENTRY(SYS_BOOT6, "af8", NULL),
1299 _OMAP4_BALLENTRY(SYS_BOOT7, "ae8", NULL),
1300 _OMAP4_BALLENTRY(JTAG_NTRST, "ah2", NULL),
1301 _OMAP4_BALLENTRY(JTAG_TCK, "ag1", NULL),
1302 _OMAP4_BALLENTRY(JTAG_RTCK, "ae3", NULL),
1303 _OMAP4_BALLENTRY(JTAG_TMS_TMSC, "ah1", NULL),
1304 _OMAP4_BALLENTRY(JTAG_TDI, "ae1", NULL),
1305 _OMAP4_BALLENTRY(JTAG_TDO, "ae2", NULL),
1306 { .reg_offset = OMAP_MUX_TERMINATOR },
1307};
1308#else
1309#define omap4_wkup_cbl_cbs_ball NULL
1310#endif
1311
1312int __init omap4_mux_init(struct omap_board_mux *board_subset,
1313 struct omap_board_mux *board_wkup_subset, int flags)
1314{
1315 struct omap_ball *package_balls_core;
1316 struct omap_ball *package_balls_wkup = omap4_wkup_cbl_cbs_ball;
1317 struct omap_mux *core_muxmodes;
1318 struct omap_mux *core_subset = NULL;
1319 int ret;
1320
1321 switch (flags & OMAP_PACKAGE_MASK) {
1322 case OMAP_PACKAGE_CBL:
1323 pr_debug("%s: OMAP4430 ES1.0 -> OMAP_PACKAGE_CBL\n", __func__);
1324 package_balls_core = omap4_core_cbl_ball;
1325 core_muxmodes = omap4_core_muxmodes;
1326 break;
1327 case OMAP_PACKAGE_CBS:
1328 pr_debug("%s: OMAP4430 ES2.X -> OMAP_PACKAGE_CBS\n", __func__);
1329 package_balls_core = omap4_core_cbs_ball;
1330 core_muxmodes = omap4_core_muxmodes;
1331 core_subset = omap4_es2_core_subset;
1332 break;
1333 default:
1334 pr_err("%s: Unknown omap package, mux disabled\n", __func__);
1335 return -EINVAL;
1336 }
1337
1338 ret = omap_mux_init("core",
1339 OMAP_MUX_GPIO_IN_MODE3,
1340 OMAP4_CTRL_MODULE_PAD_CORE_MUX_PBASE,
1341 OMAP4_CTRL_MODULE_PAD_CORE_MUX_SIZE,
1342 core_muxmodes, core_subset, board_subset,
1343 package_balls_core);
1344 if (ret)
1345 return ret;
1346
1347 ret = omap_mux_init("wkup",
1348 OMAP_MUX_GPIO_IN_MODE3,
1349 OMAP4_CTRL_MODULE_PAD_WKUP_MUX_PBASE,
1350 OMAP4_CTRL_MODULE_PAD_WKUP_MUX_SIZE,
1351 omap4_wkup_muxmodes, NULL, board_wkup_subset,
1352 package_balls_wkup);
1353
1354 return ret;
1355}
1356
diff --git a/arch/arm/mach-omap2/mux44xx.h b/arch/arm/mach-omap2/mux44xx.h
new file mode 100644
index 000000000000..c635026cd7e9
--- /dev/null
+++ b/arch/arm/mach-omap2/mux44xx.h
@@ -0,0 +1,298 @@
1/*
2 * OMAP44xx MUX registers and bitfields
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 *
6 * Benoit Cousson (b-cousson@ti.com)
7 *
8 * This file is automatically generated from the OMAP hardware databases.
9 * We respectfully ask that any modifications to this file be coordinated
10 * with the public linux-omap@vger.kernel.org mailing list and the
11 * authors above to ensure that the autogeneration scripts are kept
12 * up-to-date with the file contents.
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 */
18
19#ifndef __ARCH_ARM_MACH_OMAP2_MUX_44XX_H
20#define __ARCH_ARM_MACH_OMAP2_MUX_44XX_H
21
22#define OMAP4_MUX(M0, mux_value) \
23{ \
24 .reg_offset = (OMAP4_CTRL_MODULE_PAD_##M0##_OFFSET), \
25 .value = (mux_value), \
26}
27
28/* ctrl_module_pad_core base address */
29#define OMAP4_CTRL_MODULE_PAD_CORE_MUX_PBASE 0x4a100000
30
31/* ctrl_module_pad_core registers offset */
32#define OMAP4_CTRL_MODULE_PAD_GPMC_AD0_OFFSET 0x0040
33#define OMAP4_CTRL_MODULE_PAD_GPMC_AD1_OFFSET 0x0042
34#define OMAP4_CTRL_MODULE_PAD_GPMC_AD2_OFFSET 0x0044
35#define OMAP4_CTRL_MODULE_PAD_GPMC_AD3_OFFSET 0x0046
36#define OMAP4_CTRL_MODULE_PAD_GPMC_AD4_OFFSET 0x0048
37#define OMAP4_CTRL_MODULE_PAD_GPMC_AD5_OFFSET 0x004a
38#define OMAP4_CTRL_MODULE_PAD_GPMC_AD6_OFFSET 0x004c
39#define OMAP4_CTRL_MODULE_PAD_GPMC_AD7_OFFSET 0x004e
40#define OMAP4_CTRL_MODULE_PAD_GPMC_AD8_OFFSET 0x0050
41#define OMAP4_CTRL_MODULE_PAD_GPMC_AD9_OFFSET 0x0052
42#define OMAP4_CTRL_MODULE_PAD_GPMC_AD10_OFFSET 0x0054
43#define OMAP4_CTRL_MODULE_PAD_GPMC_AD11_OFFSET 0x0056
44#define OMAP4_CTRL_MODULE_PAD_GPMC_AD12_OFFSET 0x0058
45#define OMAP4_CTRL_MODULE_PAD_GPMC_AD13_OFFSET 0x005a
46#define OMAP4_CTRL_MODULE_PAD_GPMC_AD14_OFFSET 0x005c
47#define OMAP4_CTRL_MODULE_PAD_GPMC_AD15_OFFSET 0x005e
48#define OMAP4_CTRL_MODULE_PAD_GPMC_A16_OFFSET 0x0060
49#define OMAP4_CTRL_MODULE_PAD_GPMC_A17_OFFSET 0x0062
50#define OMAP4_CTRL_MODULE_PAD_GPMC_A18_OFFSET 0x0064
51#define OMAP4_CTRL_MODULE_PAD_GPMC_A19_OFFSET 0x0066
52#define OMAP4_CTRL_MODULE_PAD_GPMC_A20_OFFSET 0x0068
53#define OMAP4_CTRL_MODULE_PAD_GPMC_A21_OFFSET 0x006a
54#define OMAP4_CTRL_MODULE_PAD_GPMC_A22_OFFSET 0x006c
55#define OMAP4_CTRL_MODULE_PAD_GPMC_A23_OFFSET 0x006e
56#define OMAP4_CTRL_MODULE_PAD_GPMC_A24_OFFSET 0x0070
57#define OMAP4_CTRL_MODULE_PAD_GPMC_A25_OFFSET 0x0072
58#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS0_OFFSET 0x0074
59#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS1_OFFSET 0x0076
60#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS2_OFFSET 0x0078
61#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS3_OFFSET 0x007a
62#define OMAP4_CTRL_MODULE_PAD_GPMC_NWP_OFFSET 0x007c
63#define OMAP4_CTRL_MODULE_PAD_GPMC_CLK_OFFSET 0x007e
64#define OMAP4_CTRL_MODULE_PAD_GPMC_NADV_ALE_OFFSET 0x0080
65#define OMAP4_CTRL_MODULE_PAD_GPMC_NOE_OFFSET 0x0082
66#define OMAP4_CTRL_MODULE_PAD_GPMC_NWE_OFFSET 0x0084
67#define OMAP4_CTRL_MODULE_PAD_GPMC_NBE0_CLE_OFFSET 0x0086
68#define OMAP4_CTRL_MODULE_PAD_GPMC_NBE1_OFFSET 0x0088
69#define OMAP4_CTRL_MODULE_PAD_GPMC_WAIT0_OFFSET 0x008a
70#define OMAP4_CTRL_MODULE_PAD_GPMC_WAIT1_OFFSET 0x008c
71#define OMAP4_CTRL_MODULE_PAD_C2C_DATA11_OFFSET 0x008e
72#define OMAP4_CTRL_MODULE_PAD_C2C_DATA12_OFFSET 0x0090
73#define OMAP4_CTRL_MODULE_PAD_C2C_DATA13_OFFSET 0x0092
74#define OMAP4_CTRL_MODULE_PAD_C2C_DATA14_OFFSET 0x0094
75#define OMAP4_CTRL_MODULE_PAD_C2C_DATA15_OFFSET 0x0096
76#define OMAP4_CTRL_MODULE_PAD_HDMI_HPD_OFFSET 0x0098
77#define OMAP4_CTRL_MODULE_PAD_HDMI_CEC_OFFSET 0x009a
78#define OMAP4_CTRL_MODULE_PAD_HDMI_DDC_SCL_OFFSET 0x009c
79#define OMAP4_CTRL_MODULE_PAD_HDMI_DDC_SDA_OFFSET 0x009e
80#define OMAP4_CTRL_MODULE_PAD_CSI21_DX0_OFFSET 0x00a0
81#define OMAP4_CTRL_MODULE_PAD_CSI21_DY0_OFFSET 0x00a2
82#define OMAP4_CTRL_MODULE_PAD_CSI21_DX1_OFFSET 0x00a4
83#define OMAP4_CTRL_MODULE_PAD_CSI21_DY1_OFFSET 0x00a6
84#define OMAP4_CTRL_MODULE_PAD_CSI21_DX2_OFFSET 0x00a8
85#define OMAP4_CTRL_MODULE_PAD_CSI21_DY2_OFFSET 0x00aa
86#define OMAP4_CTRL_MODULE_PAD_CSI21_DX3_OFFSET 0x00ac
87#define OMAP4_CTRL_MODULE_PAD_CSI21_DY3_OFFSET 0x00ae
88#define OMAP4_CTRL_MODULE_PAD_CSI21_DX4_OFFSET 0x00b0
89#define OMAP4_CTRL_MODULE_PAD_CSI21_DY4_OFFSET 0x00b2
90#define OMAP4_CTRL_MODULE_PAD_CSI22_DX0_OFFSET 0x00b4
91#define OMAP4_CTRL_MODULE_PAD_CSI22_DY0_OFFSET 0x00b6
92#define OMAP4_CTRL_MODULE_PAD_CSI22_DX1_OFFSET 0x00b8
93#define OMAP4_CTRL_MODULE_PAD_CSI22_DY1_OFFSET 0x00ba
94#define OMAP4_CTRL_MODULE_PAD_CAM_SHUTTER_OFFSET 0x00bc
95#define OMAP4_CTRL_MODULE_PAD_CAM_STROBE_OFFSET 0x00be
96#define OMAP4_CTRL_MODULE_PAD_CAM_GLOBALRESET_OFFSET 0x00c0
97#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_CLK_OFFSET 0x00c2
98#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_STP_OFFSET 0x00c4
99#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DIR_OFFSET 0x00c6
100#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_NXT_OFFSET 0x00c8
101#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT0_OFFSET 0x00ca
102#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT1_OFFSET 0x00cc
103#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT2_OFFSET 0x00ce
104#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT3_OFFSET 0x00d0
105#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT4_OFFSET 0x00d2
106#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT5_OFFSET 0x00d4
107#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT6_OFFSET 0x00d6
108#define OMAP4_CTRL_MODULE_PAD_USBB1_ULPITLL_DAT7_OFFSET 0x00d8
109#define OMAP4_CTRL_MODULE_PAD_USBB1_HSIC_DATA_OFFSET 0x00da
110#define OMAP4_CTRL_MODULE_PAD_USBB1_HSIC_STROBE_OFFSET 0x00dc
111#define OMAP4_CTRL_MODULE_PAD_USBC1_ICUSB_DP_OFFSET 0x00de
112#define OMAP4_CTRL_MODULE_PAD_USBC1_ICUSB_DM_OFFSET 0x00e0
113#define OMAP4_CTRL_MODULE_PAD_SDMMC1_CLK_OFFSET 0x00e2
114#define OMAP4_CTRL_MODULE_PAD_SDMMC1_CMD_OFFSET 0x00e4
115#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT0_OFFSET 0x00e6
116#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT1_OFFSET 0x00e8
117#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT2_OFFSET 0x00ea
118#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT3_OFFSET 0x00ec
119#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT4_OFFSET 0x00ee
120#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT5_OFFSET 0x00f0
121#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT6_OFFSET 0x00f2
122#define OMAP4_CTRL_MODULE_PAD_SDMMC1_DAT7_OFFSET 0x00f4
123#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_CLKX_OFFSET 0x00f6
124#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_DR_OFFSET 0x00f8
125#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_DX_OFFSET 0x00fa
126#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP2_FSX_OFFSET 0x00fc
127#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_CLKX_OFFSET 0x00fe
128#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_DR_OFFSET 0x0100
129#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_DX_OFFSET 0x0102
130#define OMAP4_CTRL_MODULE_PAD_ABE_MCBSP1_FSX_OFFSET 0x0104
131#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_UL_DATA_OFFSET 0x0106
132#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_DL_DATA_OFFSET 0x0108
133#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_FRAME_OFFSET 0x010a
134#define OMAP4_CTRL_MODULE_PAD_ABE_PDM_LB_CLK_OFFSET 0x010c
135#define OMAP4_CTRL_MODULE_PAD_ABE_CLKS_OFFSET 0x010e
136#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_CLK1_OFFSET 0x0110
137#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_DIN1_OFFSET 0x0112
138#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_DIN2_OFFSET 0x0114
139#define OMAP4_CTRL_MODULE_PAD_ABE_DMIC_DIN3_OFFSET 0x0116
140#define OMAP4_CTRL_MODULE_PAD_UART2_CTS_OFFSET 0x0118
141#define OMAP4_CTRL_MODULE_PAD_UART2_RTS_OFFSET 0x011a
142#define OMAP4_CTRL_MODULE_PAD_UART2_RX_OFFSET 0x011c
143#define OMAP4_CTRL_MODULE_PAD_UART2_TX_OFFSET 0x011e
144#define OMAP4_CTRL_MODULE_PAD_HDQ_SIO_OFFSET 0x0120
145#define OMAP4_CTRL_MODULE_PAD_I2C1_SCL_OFFSET 0x0122
146#define OMAP4_CTRL_MODULE_PAD_I2C1_SDA_OFFSET 0x0124
147#define OMAP4_CTRL_MODULE_PAD_I2C2_SCL_OFFSET 0x0126
148#define OMAP4_CTRL_MODULE_PAD_I2C2_SDA_OFFSET 0x0128
149#define OMAP4_CTRL_MODULE_PAD_I2C3_SCL_OFFSET 0x012a
150#define OMAP4_CTRL_MODULE_PAD_I2C3_SDA_OFFSET 0x012c
151#define OMAP4_CTRL_MODULE_PAD_I2C4_SCL_OFFSET 0x012e
152#define OMAP4_CTRL_MODULE_PAD_I2C4_SDA_OFFSET 0x0130
153#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CLK_OFFSET 0x0132
154#define OMAP4_CTRL_MODULE_PAD_MCSPI1_SOMI_OFFSET 0x0134
155#define OMAP4_CTRL_MODULE_PAD_MCSPI1_SIMO_OFFSET 0x0136
156#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS0_OFFSET 0x0138
157#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS1_OFFSET 0x013a
158#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS2_OFFSET 0x013c
159#define OMAP4_CTRL_MODULE_PAD_MCSPI1_CS3_OFFSET 0x013e
160#define OMAP4_CTRL_MODULE_PAD_UART3_CTS_RCTX_OFFSET 0x0140
161#define OMAP4_CTRL_MODULE_PAD_UART3_RTS_SD_OFFSET 0x0142
162#define OMAP4_CTRL_MODULE_PAD_UART3_RX_IRRX_OFFSET 0x0144
163#define OMAP4_CTRL_MODULE_PAD_UART3_TX_IRTX_OFFSET 0x0146
164#define OMAP4_CTRL_MODULE_PAD_SDMMC5_CLK_OFFSET 0x0148
165#define OMAP4_CTRL_MODULE_PAD_SDMMC5_CMD_OFFSET 0x014a
166#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT0_OFFSET 0x014c
167#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT1_OFFSET 0x014e
168#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT2_OFFSET 0x0150
169#define OMAP4_CTRL_MODULE_PAD_SDMMC5_DAT3_OFFSET 0x0152
170#define OMAP4_CTRL_MODULE_PAD_MCSPI4_CLK_OFFSET 0x0154
171#define OMAP4_CTRL_MODULE_PAD_MCSPI4_SIMO_OFFSET 0x0156
172#define OMAP4_CTRL_MODULE_PAD_MCSPI4_SOMI_OFFSET 0x0158
173#define OMAP4_CTRL_MODULE_PAD_MCSPI4_CS0_OFFSET 0x015a
174#define OMAP4_CTRL_MODULE_PAD_UART4_RX_OFFSET 0x015c
175#define OMAP4_CTRL_MODULE_PAD_UART4_TX_OFFSET 0x015e
176#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_CLK_OFFSET 0x0160
177#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_STP_OFFSET 0x0162
178#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DIR_OFFSET 0x0164
179#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_NXT_OFFSET 0x0166
180#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT0_OFFSET 0x0168
181#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT1_OFFSET 0x016a
182#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT2_OFFSET 0x016c
183#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT3_OFFSET 0x016e
184#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT4_OFFSET 0x0170
185#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT5_OFFSET 0x0172
186#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT6_OFFSET 0x0174
187#define OMAP4_CTRL_MODULE_PAD_USBB2_ULPITLL_DAT7_OFFSET 0x0176
188#define OMAP4_CTRL_MODULE_PAD_USBB2_HSIC_DATA_OFFSET 0x0178
189#define OMAP4_CTRL_MODULE_PAD_USBB2_HSIC_STROBE_OFFSET 0x017a
190#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TX0_OFFSET 0x017c
191#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TY0_OFFSET 0x017e
192#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TX1_OFFSET 0x0180
193#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TY1_OFFSET 0x0182
194#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TX2_OFFSET 0x0184
195#define OMAP4_CTRL_MODULE_PAD_UNIPRO_TY2_OFFSET 0x0186
196#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RX0_OFFSET 0x0188
197#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RY0_OFFSET 0x018a
198#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RX1_OFFSET 0x018c
199#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RY1_OFFSET 0x018e
200#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RX2_OFFSET 0x0190
201#define OMAP4_CTRL_MODULE_PAD_UNIPRO_RY2_OFFSET 0x0192
202#define OMAP4_CTRL_MODULE_PAD_USBA0_OTG_CE_OFFSET 0x0194
203#define OMAP4_CTRL_MODULE_PAD_USBA0_OTG_DP_OFFSET 0x0196
204#define OMAP4_CTRL_MODULE_PAD_USBA0_OTG_DM_OFFSET 0x0198
205#define OMAP4_CTRL_MODULE_PAD_FREF_CLK1_OUT_OFFSET 0x019a
206#define OMAP4_CTRL_MODULE_PAD_FREF_CLK2_OUT_OFFSET 0x019c
207#define OMAP4_CTRL_MODULE_PAD_SYS_NIRQ1_OFFSET 0x019e
208#define OMAP4_CTRL_MODULE_PAD_SYS_NIRQ2_OFFSET 0x01a0
209#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT0_OFFSET 0x01a2
210#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT1_OFFSET 0x01a4
211#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT2_OFFSET 0x01a6
212#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT3_OFFSET 0x01a8
213#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT4_OFFSET 0x01aa
214#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT5_OFFSET 0x01ac
215#define OMAP4_CTRL_MODULE_PAD_DPM_EMU0_OFFSET 0x01ae
216#define OMAP4_CTRL_MODULE_PAD_DPM_EMU1_OFFSET 0x01b0
217#define OMAP4_CTRL_MODULE_PAD_DPM_EMU2_OFFSET 0x01b2
218#define OMAP4_CTRL_MODULE_PAD_DPM_EMU3_OFFSET 0x01b4
219#define OMAP4_CTRL_MODULE_PAD_DPM_EMU4_OFFSET 0x01b6
220#define OMAP4_CTRL_MODULE_PAD_DPM_EMU5_OFFSET 0x01b8
221#define OMAP4_CTRL_MODULE_PAD_DPM_EMU6_OFFSET 0x01ba
222#define OMAP4_CTRL_MODULE_PAD_DPM_EMU7_OFFSET 0x01bc
223#define OMAP4_CTRL_MODULE_PAD_DPM_EMU8_OFFSET 0x01be
224#define OMAP4_CTRL_MODULE_PAD_DPM_EMU9_OFFSET 0x01c0
225#define OMAP4_CTRL_MODULE_PAD_DPM_EMU10_OFFSET 0x01c2
226#define OMAP4_CTRL_MODULE_PAD_DPM_EMU11_OFFSET 0x01c4
227#define OMAP4_CTRL_MODULE_PAD_DPM_EMU12_OFFSET 0x01c6
228#define OMAP4_CTRL_MODULE_PAD_DPM_EMU13_OFFSET 0x01c8
229#define OMAP4_CTRL_MODULE_PAD_DPM_EMU14_OFFSET 0x01ca
230#define OMAP4_CTRL_MODULE_PAD_DPM_EMU15_OFFSET 0x01cc
231#define OMAP4_CTRL_MODULE_PAD_DPM_EMU16_OFFSET 0x01ce
232#define OMAP4_CTRL_MODULE_PAD_DPM_EMU17_OFFSET 0x01d0
233#define OMAP4_CTRL_MODULE_PAD_DPM_EMU18_OFFSET 0x01d2
234#define OMAP4_CTRL_MODULE_PAD_DPM_EMU19_OFFSET 0x01d4
235
236/* ES2.0 only */
237#define OMAP4_CTRL_MODULE_PAD_GPMC_WAIT2_OFFSET 0x008e
238#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS4_OFFSET 0x0090
239#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS5_OFFSET 0x0092
240#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS6_OFFSET 0x0094
241#define OMAP4_CTRL_MODULE_PAD_GPMC_NCS7_OFFSET 0x0096
242
243#define OMAP4_CTRL_MODULE_PAD_KPD_COL3_OFFSET 0x017c
244#define OMAP4_CTRL_MODULE_PAD_KPD_COL4_OFFSET 0x017e
245#define OMAP4_CTRL_MODULE_PAD_KPD_COL5_OFFSET 0x0180
246#define OMAP4_CTRL_MODULE_PAD_KPD_COL0_OFFSET 0x0182
247#define OMAP4_CTRL_MODULE_PAD_KPD_COL1_OFFSET 0x0184
248#define OMAP4_CTRL_MODULE_PAD_KPD_COL2_OFFSET 0x0186
249#define OMAP4_CTRL_MODULE_PAD_KPD_ROW3_OFFSET 0x0188
250#define OMAP4_CTRL_MODULE_PAD_KPD_ROW4_OFFSET 0x018a
251#define OMAP4_CTRL_MODULE_PAD_KPD_ROW5_OFFSET 0x018c
252#define OMAP4_CTRL_MODULE_PAD_KPD_ROW0_OFFSET 0x018e
253#define OMAP4_CTRL_MODULE_PAD_KPD_ROW1_OFFSET 0x0190
254#define OMAP4_CTRL_MODULE_PAD_KPD_ROW2_OFFSET 0x0192
255
256
257#define OMAP4_CTRL_MODULE_PAD_CORE_MUX_SIZE \
258 (OMAP4_CTRL_MODULE_PAD_DPM_EMU19_OFFSET \
259 - OMAP4_CTRL_MODULE_PAD_GPMC_AD0_OFFSET + 2)
260
261/* ctrl_module_pad_wkup base address */
262#define OMAP4_CTRL_MODULE_PAD_WKUP_MUX_PBASE 0x4a31e000
263
264/* ctrl_module_pad_wkup registers offset */
265#define OMAP4_CTRL_MODULE_PAD_SIM_IO_OFFSET 0x0040
266#define OMAP4_CTRL_MODULE_PAD_SIM_CLK_OFFSET 0x0042
267#define OMAP4_CTRL_MODULE_PAD_SIM_RESET_OFFSET 0x0044
268#define OMAP4_CTRL_MODULE_PAD_SIM_CD_OFFSET 0x0046
269#define OMAP4_CTRL_MODULE_PAD_SIM_PWRCTRL_OFFSET 0x0048
270#define OMAP4_CTRL_MODULE_PAD_SR_SCL_OFFSET 0x004a
271#define OMAP4_CTRL_MODULE_PAD_SR_SDA_OFFSET 0x004c
272#define OMAP4_CTRL_MODULE_PAD_FREF_XTAL_IN_OFFSET 0x004e
273#define OMAP4_CTRL_MODULE_PAD_FREF_SLICER_IN_OFFSET 0x0050
274#define OMAP4_CTRL_MODULE_PAD_FREF_CLK_IOREQ_OFFSET 0x0052
275#define OMAP4_CTRL_MODULE_PAD_FREF_CLK0_OUT_OFFSET 0x0054
276#define OMAP4_CTRL_MODULE_PAD_FREF_CLK3_REQ_OFFSET 0x0056
277#define OMAP4_CTRL_MODULE_PAD_FREF_CLK3_OUT_OFFSET 0x0058
278#define OMAP4_CTRL_MODULE_PAD_FREF_CLK4_REQ_OFFSET 0x005a
279#define OMAP4_CTRL_MODULE_PAD_FREF_CLK4_OUT_OFFSET 0x005c
280#define OMAP4_CTRL_MODULE_PAD_SYS_32K_OFFSET 0x005e
281#define OMAP4_CTRL_MODULE_PAD_SYS_NRESPWRON_OFFSET 0x0060
282#define OMAP4_CTRL_MODULE_PAD_SYS_NRESWARM_OFFSET 0x0062
283#define OMAP4_CTRL_MODULE_PAD_SYS_PWR_REQ_OFFSET 0x0064
284#define OMAP4_CTRL_MODULE_PAD_SYS_PWRON_RESET_OUT_OFFSET 0x0066
285#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT6_OFFSET 0x0068
286#define OMAP4_CTRL_MODULE_PAD_SYS_BOOT7_OFFSET 0x006a
287#define OMAP4_CTRL_MODULE_PAD_JTAG_NTRST_OFFSET 0x006c
288#define OMAP4_CTRL_MODULE_PAD_JTAG_TCK_OFFSET 0x006e
289#define OMAP4_CTRL_MODULE_PAD_JTAG_RTCK_OFFSET 0x0070
290#define OMAP4_CTRL_MODULE_PAD_JTAG_TMS_TMSC_OFFSET 0x0072
291#define OMAP4_CTRL_MODULE_PAD_JTAG_TDI_OFFSET 0x0074
292#define OMAP4_CTRL_MODULE_PAD_JTAG_TDO_OFFSET 0x0076
293
294#define OMAP4_CTRL_MODULE_PAD_WKUP_MUX_SIZE \
295 (OMAP4_CTRL_MODULE_PAD_JTAG_TDO_OFFSET \
296 - OMAP4_CTRL_MODULE_PAD_SIM_IO_OFFSET + 2)
297
298#endif
diff --git a/arch/arm/mach-omap2/omap-headsmp.S b/arch/arm/mach-omap2/omap-headsmp.S
index 6ae937a06cc1..4ee6aeca885a 100644
--- a/arch/arm/mach-omap2/omap-headsmp.S
+++ b/arch/arm/mach-omap2/omap-headsmp.S
@@ -45,5 +45,5 @@ hold: ldr r12,=0x103
45 * should now contain the SVC stack for this core 45 * should now contain the SVC stack for this core
46 */ 46 */
47 b secondary_startup 47 b secondary_startup
48END(omap_secondary_startup) 48ENDPROC(omap_secondary_startup)
49 49
diff --git a/arch/arm/mach-omap2/omap-hotplug.c b/arch/arm/mach-omap2/omap-hotplug.c
index 6cee456ca542..4976b9393e49 100644
--- a/arch/arm/mach-omap2/omap-hotplug.c
+++ b/arch/arm/mach-omap2/omap-hotplug.c
@@ -17,16 +17,13 @@
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/errno.h> 18#include <linux/errno.h>
19#include <linux/smp.h> 19#include <linux/smp.h>
20#include <linux/completion.h>
21 20
22#include <asm/cacheflush.h> 21#include <asm/cacheflush.h>
23#include <mach/omap4-common.h> 22#include <mach/omap4-common.h>
24 23
25static DECLARE_COMPLETION(cpu_killed);
26
27int platform_cpu_kill(unsigned int cpu) 24int platform_cpu_kill(unsigned int cpu)
28{ 25{
29 return wait_for_completion_timeout(&cpu_killed, 5000); 26 return 1;
30} 27}
31 28
32/* 29/*
@@ -35,15 +32,6 @@ int platform_cpu_kill(unsigned int cpu)
35 */ 32 */
36void platform_cpu_die(unsigned int cpu) 33void platform_cpu_die(unsigned int cpu)
37{ 34{
38 unsigned int this_cpu = hard_smp_processor_id();
39
40 if (cpu != this_cpu) {
41 pr_crit("platform_cpu_die running on %u, should be %u\n",
42 this_cpu, cpu);
43 BUG();
44 }
45 pr_notice("CPU%u: shutdown\n", cpu);
46 complete(&cpu_killed);
47 flush_cache_all(); 35 flush_cache_all();
48 dsb(); 36 dsb();
49 37
diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c
index f5a1aad1a5c0..3fc5dc7233da 100644
--- a/arch/arm/mach-omap2/omap-iommu.c
+++ b/arch/arm/mach-omap2/omap-iommu.c
@@ -33,9 +33,11 @@ static struct iommu_device omap3_devices[] = {
33 .name = "isp", 33 .name = "isp",
34 .nr_tlb_entries = 8, 34 .nr_tlb_entries = 8,
35 .clk_name = "cam_ick", 35 .clk_name = "cam_ick",
36 .da_start = 0x0,
37 .da_end = 0xFFFFF000,
36 }, 38 },
37 }, 39 },
38#if defined(CONFIG_MPU_BRIDGE_IOMMU) 40#if defined(CONFIG_OMAP_IOMMU_IVA2)
39 { 41 {
40 .base = 0x5d000000, 42 .base = 0x5d000000,
41 .irq = 28, 43 .irq = 28,
@@ -43,6 +45,8 @@ static struct iommu_device omap3_devices[] = {
43 .name = "iva2", 45 .name = "iva2",
44 .nr_tlb_entries = 32, 46 .nr_tlb_entries = 32,
45 .clk_name = "iva2_ck", 47 .clk_name = "iva2_ck",
48 .da_start = 0x11000000,
49 .da_end = 0xFFFFF000,
46 }, 50 },
47 }, 51 },
48#endif 52#endif
@@ -64,6 +68,8 @@ static struct iommu_device omap4_devices[] = {
64 .name = "ducati", 68 .name = "ducati",
65 .nr_tlb_entries = 32, 69 .nr_tlb_entries = 32,
66 .clk_name = "ducati_ick", 70 .clk_name = "ducati_ick",
71 .da_start = 0x0,
72 .da_end = 0xFFFFF000,
67 }, 73 },
68 }, 74 },
69#if defined(CONFIG_MPU_TESLA_IOMMU) 75#if defined(CONFIG_MPU_TESLA_IOMMU)
@@ -74,6 +80,8 @@ static struct iommu_device omap4_devices[] = {
74 .name = "tesla", 80 .name = "tesla",
75 .nr_tlb_entries = 32, 81 .nr_tlb_entries = 32,
76 .clk_name = "tesla_ick", 82 .clk_name = "tesla_ick",
83 .da_start = 0x0,
84 .da_end = 0xFFFFF000,
77 }, 85 },
78 }, 86 },
79#endif 87#endif
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
index 9e9f70e18e3c..ecfe93c4b585 100644
--- a/arch/arm/mach-omap2/omap-smp.c
+++ b/arch/arm/mach-omap2/omap-smp.c
@@ -21,7 +21,7 @@
21#include <linux/io.h> 21#include <linux/io.h>
22 22
23#include <asm/cacheflush.h> 23#include <asm/cacheflush.h>
24#include <asm/localtimer.h> 24#include <asm/hardware/gic.h>
25#include <asm/smp_scu.h> 25#include <asm/smp_scu.h>
26#include <mach/hardware.h> 26#include <mach/hardware.h>
27#include <mach/omap4-common.h> 27#include <mach/omap4-common.h>
@@ -29,28 +29,16 @@
29/* SCU base address */ 29/* SCU base address */
30static void __iomem *scu_base; 30static void __iomem *scu_base;
31 31
32/*
33 * Use SCU config register to count number of cores
34 */
35static inline unsigned int get_core_count(void)
36{
37 if (scu_base)
38 return scu_get_core_count(scu_base);
39 return 1;
40}
41
42static DEFINE_SPINLOCK(boot_lock); 32static DEFINE_SPINLOCK(boot_lock);
43 33
44void __cpuinit platform_secondary_init(unsigned int cpu) 34void __cpuinit platform_secondary_init(unsigned int cpu)
45{ 35{
46 trace_hardirqs_off();
47
48 /* 36 /*
49 * If any interrupts are already enabled for the primary 37 * If any interrupts are already enabled for the primary
50 * core (e.g. timer irq), then they will not have been enabled 38 * core (e.g. timer irq), then they will not have been enabled
51 * for us: do so 39 * for us: do so
52 */ 40 */
53 gic_cpu_init(0, gic_cpu_base_addr); 41 gic_secondary_init(0);
54 42
55 /* 43 /*
56 * Synchronise with the boot thread. 44 * Synchronise with the boot thread.
@@ -76,7 +64,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
76 omap_modify_auxcoreboot0(0x200, 0xfffffdff); 64 omap_modify_auxcoreboot0(0x200, 0xfffffdff);
77 flush_cache_all(); 65 flush_cache_all();
78 smp_wmb(); 66 smp_wmb();
79 smp_cross_call(cpumask_of(cpu)); 67 gic_raise_softirq(cpumask_of(cpu), 1);
80 68
81 /* 69 /*
82 * Now the secondary core is starting up let it run its 70 * Now the secondary core is starting up let it run its
@@ -118,25 +106,9 @@ void __init smp_init_cpus(void)
118 scu_base = ioremap(OMAP44XX_SCU_BASE, SZ_256); 106 scu_base = ioremap(OMAP44XX_SCU_BASE, SZ_256);
119 BUG_ON(!scu_base); 107 BUG_ON(!scu_base);
120 108
121 ncores = get_core_count(); 109 ncores = scu_get_core_count(scu_base);
122
123 for (i = 0; i < ncores; i++)
124 set_cpu_possible(i, true);
125}
126
127void __init smp_prepare_cpus(unsigned int max_cpus)
128{
129 unsigned int ncores = get_core_count();
130 unsigned int cpu = smp_processor_id();
131 int i;
132 110
133 /* sanity check */ 111 /* sanity check */
134 if (ncores == 0) {
135 printk(KERN_ERR
136 "OMAP4: strange core count of 0? Default to 1\n");
137 ncores = 1;
138 }
139
140 if (ncores > NR_CPUS) { 112 if (ncores > NR_CPUS) {
141 printk(KERN_WARNING 113 printk(KERN_WARNING
142 "OMAP4: no. of cores (%d) greater than configured " 114 "OMAP4: no. of cores (%d) greater than configured "
@@ -144,13 +116,16 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
144 ncores, NR_CPUS); 116 ncores, NR_CPUS);
145 ncores = NR_CPUS; 117 ncores = NR_CPUS;
146 } 118 }
147 smp_store_cpu_info(cpu);
148 119
149 /* 120 for (i = 0; i < ncores; i++)
150 * are we trying to boot more cores than exist? 121 set_cpu_possible(i, true);
151 */ 122
152 if (max_cpus > ncores) 123 set_smp_cross_call(gic_raise_softirq);
153 max_cpus = ncores; 124}
125
126void __init platform_smp_prepare_cpus(unsigned int max_cpus)
127{
128 int i;
154 129
155 /* 130 /*
156 * Initialise the present map, which describes the set of CPUs 131 * Initialise the present map, which describes the set of CPUs
@@ -159,18 +134,10 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
159 for (i = 0; i < max_cpus; i++) 134 for (i = 0; i < max_cpus; i++)
160 set_cpu_present(i, true); 135 set_cpu_present(i, true);
161 136
162 if (max_cpus > 1) { 137 /*
163 /* 138 * Initialise the SCU and wake up the secondary core using
164 * Enable the local timer or broadcast device for the 139 * wakeup_secondary().
165 * boot CPU, but only if we have more than one CPU. 140 */
166 */ 141 scu_enable(scu_base);
167 percpu_timer_setup(); 142 wakeup_secondary();
168
169 /*
170 * Initialise the SCU and wake up the secondary core using
171 * wakeup_secondary().
172 */
173 scu_enable(scu_base);
174 wakeup_secondary();
175 }
176} 143}
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c
index 13dc9794dcc2..9ef8c29dd817 100644
--- a/arch/arm/mach-omap2/omap4-common.c
+++ b/arch/arm/mach-omap2/omap4-common.c
@@ -26,26 +26,42 @@
26void __iomem *l2cache_base; 26void __iomem *l2cache_base;
27#endif 27#endif
28 28
29void __iomem *gic_cpu_base_addr;
30void __iomem *gic_dist_base_addr; 29void __iomem *gic_dist_base_addr;
31 30
32 31
33void __init gic_init_irq(void) 32void __init gic_init_irq(void)
34{ 33{
34 void __iomem *gic_cpu_base;
35
35 /* Static mapping, never released */ 36 /* Static mapping, never released */
36 gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K); 37 gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K);
37 BUG_ON(!gic_dist_base_addr); 38 BUG_ON(!gic_dist_base_addr);
38 gic_dist_init(0, gic_dist_base_addr, 29);
39 39
40 /* Static mapping, never released */ 40 /* Static mapping, never released */
41 gic_cpu_base_addr = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512); 41 gic_cpu_base = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512);
42 BUG_ON(!gic_cpu_base_addr); 42 BUG_ON(!gic_cpu_base);
43 gic_cpu_init(0, gic_cpu_base_addr); 43
44 gic_init(0, 29, gic_dist_base_addr, gic_cpu_base);
44} 45}
45 46
46#ifdef CONFIG_CACHE_L2X0 47#ifdef CONFIG_CACHE_L2X0
48
49static void omap4_l2x0_disable(void)
50{
51 /* Disable PL310 L2 Cache controller */
52 omap_smc1(0x102, 0x0);
53}
54
55static void omap4_l2x0_set_debug(unsigned long val)
56{
57 /* Program PL310 L2 Cache controller debug register */
58 omap_smc1(0x100, val);
59}
60
47static int __init omap_l2_cache_init(void) 61static int __init omap_l2_cache_init(void)
48{ 62{
63 u32 aux_ctrl = 0;
64
49 /* 65 /*
50 * To avoid code running on other OMAPs in 66 * To avoid code running on other OMAPs in
51 * multi-omap builds 67 * multi-omap builds
@@ -57,14 +73,39 @@ static int __init omap_l2_cache_init(void)
57 l2cache_base = ioremap(OMAP44XX_L2CACHE_BASE, SZ_4K); 73 l2cache_base = ioremap(OMAP44XX_L2CACHE_BASE, SZ_4K);
58 BUG_ON(!l2cache_base); 74 BUG_ON(!l2cache_base);
59 75
76 /*
77 * 16-way associativity, parity disabled
78 * Way size - 32KB (es1.0)
79 * Way size - 64KB (es2.0 +)
80 */
81 aux_ctrl = ((1 << L2X0_AUX_CTRL_ASSOCIATIVITY_SHIFT) |
82 (0x1 << 25) |
83 (0x1 << L2X0_AUX_CTRL_NS_LOCKDOWN_SHIFT) |
84 (0x1 << L2X0_AUX_CTRL_NS_INT_CTRL_SHIFT));
85
86 if (omap_rev() == OMAP4430_REV_ES1_0) {
87 aux_ctrl |= 0x2 << L2X0_AUX_CTRL_WAY_SIZE_SHIFT;
88 } else {
89 aux_ctrl |= ((0x3 << L2X0_AUX_CTRL_WAY_SIZE_SHIFT) |
90 (1 << L2X0_AUX_CTRL_SHARE_OVERRIDE_SHIFT) |
91 (1 << L2X0_AUX_CTRL_DATA_PREFETCH_SHIFT) |
92 (1 << L2X0_AUX_CTRL_INSTR_PREFETCH_SHIFT) |
93 (1 << L2X0_AUX_CTRL_EARLY_BRESP_SHIFT));
94 }
95 if (omap_rev() != OMAP4430_REV_ES1_0)
96 omap_smc1(0x109, aux_ctrl);
97
60 /* Enable PL310 L2 Cache controller */ 98 /* Enable PL310 L2 Cache controller */
61 omap_smc1(0x102, 0x1); 99 omap_smc1(0x102, 0x1);
62 100
101 l2x0_init(l2cache_base, aux_ctrl, L2X0_AUX_CTRL_MASK);
102
63 /* 103 /*
64 * 32KB way size, 16-way associativity, 104 * Override default outer_cache.disable with a OMAP4
65 * parity disabled 105 * specific one
66 */ 106 */
67 l2x0_init(l2cache_base, 0x0e050000, 0xc0000fff); 107 outer_cache.disable = omap4_l2x0_disable;
108 outer_cache.set_debug = omap4_l2x0_set_debug;
68 109
69 return 0; 110 return 0;
70} 111}
diff --git a/arch/arm/mach-omap2/omap44xx-smc.S b/arch/arm/mach-omap2/omap44xx-smc.S
index 1980dc31a1a2..e69d37d95204 100644
--- a/arch/arm/mach-omap2/omap44xx-smc.S
+++ b/arch/arm/mach-omap2/omap44xx-smc.S
@@ -29,7 +29,7 @@ ENTRY(omap_smc1)
29 dsb 29 dsb
30 smc #0 30 smc #0
31 ldmfd sp!, {r2-r12, pc} 31 ldmfd sp!, {r2-r12, pc}
32END(omap_smc1) 32ENDPROC(omap_smc1)
33 33
34ENTRY(omap_modify_auxcoreboot0) 34ENTRY(omap_modify_auxcoreboot0)
35 stmfd sp!, {r1-r12, lr} 35 stmfd sp!, {r1-r12, lr}
@@ -37,7 +37,7 @@ ENTRY(omap_modify_auxcoreboot0)
37 dsb 37 dsb
38 smc #0 38 smc #0
39 ldmfd sp!, {r1-r12, pc} 39 ldmfd sp!, {r1-r12, pc}
40END(omap_modify_auxcoreboot0) 40ENDPROC(omap_modify_auxcoreboot0)
41 41
42ENTRY(omap_auxcoreboot_addr) 42ENTRY(omap_auxcoreboot_addr)
43 stmfd sp!, {r2-r12, lr} 43 stmfd sp!, {r2-r12, lr}
@@ -45,7 +45,7 @@ ENTRY(omap_auxcoreboot_addr)
45 dsb 45 dsb
46 smc #0 46 smc #0
47 ldmfd sp!, {r2-r12, pc} 47 ldmfd sp!, {r2-r12, pc}
48END(omap_auxcoreboot_addr) 48ENDPROC(omap_auxcoreboot_addr)
49 49
50ENTRY(omap_read_auxcoreboot0) 50ENTRY(omap_read_auxcoreboot0)
51 stmfd sp!, {r2-r12, lr} 51 stmfd sp!, {r2-r12, lr}
@@ -54,4 +54,4 @@ ENTRY(omap_read_auxcoreboot0)
54 smc #0 54 smc #0
55 mov r0, r0, lsr #9 55 mov r0, r0, lsr #9
56 ldmfd sp!, {r2-r12, pc} 56 ldmfd sp!, {r2-r12, pc}
57END(omap_read_auxcoreboot0) 57ENDPROC(omap_read_auxcoreboot0)
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index cb911d7d1a3c..293fa6cd50e1 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * omap_hwmod implementation for OMAP2/3/4 2 * omap_hwmod implementation for OMAP2/3/4
3 * 3 *
4 * Copyright (C) 2009-2010 Nokia Corporation 4 * Copyright (C) 2009-2011 Nokia Corporation
5 * 5 *
6 * Paul Walmsley, Benoît Cousson, Kevin Hilman 6 * Paul Walmsley, Benoît Cousson, Kevin Hilman
7 * 7 *
@@ -13,10 +13,102 @@
13 * it under the terms of the GNU General Public License version 2 as 13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation. 14 * published by the Free Software Foundation.
15 * 15 *
16 * This code manages "OMAP modules" (on-chip devices) and their 16 * Introduction
17 * integration with Linux device driver and bus code. 17 * ------------
18 * 18 * One way to view an OMAP SoC is as a collection of largely unrelated
19 * References: 19 * IP blocks connected by interconnects. The IP blocks include
20 * devices such as ARM processors, audio serial interfaces, UARTs,
21 * etc. Some of these devices, like the DSP, are created by TI;
22 * others, like the SGX, largely originate from external vendors. In
23 * TI's documentation, on-chip devices are referred to as "OMAP
24 * modules." Some of these IP blocks are identical across several
25 * OMAP versions. Others are revised frequently.
26 *
27 * These OMAP modules are tied together by various interconnects.
28 * Most of the address and data flow between modules is via OCP-based
29 * interconnects such as the L3 and L4 buses; but there are other
30 * interconnects that distribute the hardware clock tree, handle idle
31 * and reset signaling, supply power, and connect the modules to
32 * various pads or balls on the OMAP package.
33 *
34 * OMAP hwmod provides a consistent way to describe the on-chip
35 * hardware blocks and their integration into the rest of the chip.
36 * This description can be automatically generated from the TI
37 * hardware database. OMAP hwmod provides a standard, consistent API
38 * to reset, enable, idle, and disable these hardware blocks. And
39 * hwmod provides a way for other core code, such as the Linux device
40 * code or the OMAP power management and address space mapping code,
41 * to query the hardware database.
42 *
43 * Using hwmod
44 * -----------
45 * Drivers won't call hwmod functions directly. That is done by the
46 * omap_device code, and in rare occasions, by custom integration code
47 * in arch/arm/ *omap*. The omap_device code includes functions to
48 * build a struct platform_device using omap_hwmod data, and that is
49 * currently how hwmod data is communicated to drivers and to the
50 * Linux driver model. Most drivers will call omap_hwmod functions only
51 * indirectly, via pm_runtime*() functions.
52 *
53 * From a layering perspective, here is where the OMAP hwmod code
54 * fits into the kernel software stack:
55 *
56 * +-------------------------------+
57 * | Device driver code |
58 * | (e.g., drivers/) |
59 * +-------------------------------+
60 * | Linux driver model |
61 * | (platform_device / |
62 * | platform_driver data/code) |
63 * +-------------------------------+
64 * | OMAP core-driver integration |
65 * |(arch/arm/mach-omap2/devices.c)|
66 * +-------------------------------+
67 * | omap_device code |
68 * | (../plat-omap/omap_device.c) |
69 * +-------------------------------+
70 * ----> | omap_hwmod code/data | <-----
71 * | (../mach-omap2/omap_hwmod*) |
72 * +-------------------------------+
73 * | OMAP clock/PRCM/register fns |
74 * | (__raw_{read,write}l, clk*) |
75 * +-------------------------------+
76 *
77 * Device drivers should not contain any OMAP-specific code or data in
78 * them. They should only contain code to operate the IP block that
79 * the driver is responsible for. This is because these IP blocks can
80 * also appear in other SoCs, either from TI (such as DaVinci) or from
81 * other manufacturers; and drivers should be reusable across other
82 * platforms.
83 *
84 * The OMAP hwmod code also will attempt to reset and idle all on-chip
85 * devices upon boot. The goal here is for the kernel to be
86 * completely self-reliant and independent from bootloaders. This is
87 * to ensure a repeatable configuration, both to ensure consistent
88 * runtime behavior, and to make it easier for others to reproduce
89 * bugs.
90 *
91 * OMAP module activity states
92 * ---------------------------
93 * The hwmod code considers modules to be in one of several activity
94 * states. IP blocks start out in an UNKNOWN state, then once they
95 * are registered via the hwmod code, proceed to the REGISTERED state.
96 * Once their clock names are resolved to clock pointers, the module
97 * enters the CLKS_INITED state; and finally, once the module has been
98 * reset and the integration registers programmed, the INITIALIZED state
99 * is entered. The hwmod code will then place the module into either
100 * the IDLE state to save power, or in the case of a critical system
101 * module, the ENABLED state.
102 *
103 * OMAP core integration code can then call omap_hwmod*() functions
104 * directly to move the module between the IDLE, ENABLED, and DISABLED
105 * states, as needed. This is done during both the PM idle loop, and
106 * in the OMAP core integration code's implementation of the PM runtime
107 * functions.
108 *
109 * References
110 * ----------
111 * This is a partial list.
20 * - OMAP2420 Multimedia Processor Silicon Revision 2.1.1, 2.2 (SWPU064) 112 * - OMAP2420 Multimedia Processor Silicon Revision 2.1.1, 2.2 (SWPU064)
21 * - OMAP2430 Multimedia Device POP Silicon Revision 2.1 (SWPU090) 113 * - OMAP2430 Multimedia Device POP Silicon Revision 2.1 (SWPU090)
22 * - OMAP34xx Multimedia Device Silicon Revision 3.1 (SWPU108) 114 * - OMAP34xx Multimedia Device Silicon Revision 3.1 (SWPU108)
@@ -24,7 +116,6 @@
24 * - Open Core Protocol Specification 2.2 116 * - Open Core Protocol Specification 2.2
25 * 117 *
26 * To do: 118 * To do:
27 * - pin mux handling
28 * - handle IO mapping 119 * - handle IO mapping
29 * - bus throughput & module latency measurement code 120 * - bus throughput & module latency measurement code
30 * 121 *
@@ -43,18 +134,24 @@
43#include <linux/err.h> 134#include <linux/err.h>
44#include <linux/list.h> 135#include <linux/list.h>
45#include <linux/mutex.h> 136#include <linux/mutex.h>
137#include <linux/spinlock.h>
46 138
47#include <plat/common.h> 139#include <plat/common.h>
48#include <plat/cpu.h> 140#include <plat/cpu.h>
49#include <plat/clockdomain.h> 141#include "clockdomain.h"
50#include <plat/powerdomain.h> 142#include "powerdomain.h"
51#include <plat/clock.h> 143#include <plat/clock.h>
52#include <plat/omap_hwmod.h> 144#include <plat/omap_hwmod.h>
145#include <plat/prcm.h>
53 146
54#include "cm.h" 147#include "cm2xxx_3xxx.h"
148#include "cm44xx.h"
149#include "prm2xxx_3xxx.h"
150#include "prm44xx.h"
151#include "mux.h"
55 152
56/* Maximum microseconds to wait for OMAP module to reset */ 153/* Maximum microseconds to wait for OMAP module to softreset */
57#define MAX_MODULE_RESET_WAIT 10000 154#define MAX_MODULE_SOFTRESET_WAIT 10000
58 155
59/* Name of the OMAP hwmod for the MPU */ 156/* Name of the OMAP hwmod for the MPU */
60#define MPU_INITIATOR_NAME "mpu" 157#define MPU_INITIATOR_NAME "mpu"
@@ -62,14 +159,9 @@
62/* omap_hwmod_list contains all registered struct omap_hwmods */ 159/* omap_hwmod_list contains all registered struct omap_hwmods */
63static LIST_HEAD(omap_hwmod_list); 160static LIST_HEAD(omap_hwmod_list);
64 161
65static DEFINE_MUTEX(omap_hwmod_mutex);
66
67/* mpu_oh: used to add/remove MPU initiator from sleepdep list */ 162/* mpu_oh: used to add/remove MPU initiator from sleepdep list */
68static struct omap_hwmod *mpu_oh; 163static struct omap_hwmod *mpu_oh;
69 164
70/* inited: 0 if omap_hwmod_init() has not yet been called; 1 otherwise */
71static u8 inited;
72
73 165
74/* Private functions */ 166/* Private functions */
75 167
@@ -90,7 +182,7 @@ static int _update_sysc_cache(struct omap_hwmod *oh)
90 182
91 /* XXX ensure module interface clock is up */ 183 /* XXX ensure module interface clock is up */
92 184
93 oh->_sysc_cache = omap_hwmod_readl(oh, oh->class->sysc->sysc_offs); 185 oh->_sysc_cache = omap_hwmod_read(oh, oh->class->sysc->sysc_offs);
94 186
95 if (!(oh->class->sysc->sysc_flags & SYSC_NO_CACHE)) 187 if (!(oh->class->sysc->sysc_flags & SYSC_NO_CACHE))
96 oh->_int_flags |= _HWMOD_SYSCONFIG_LOADED; 188 oh->_int_flags |= _HWMOD_SYSCONFIG_LOADED;
@@ -115,10 +207,9 @@ static void _write_sysconfig(u32 v, struct omap_hwmod *oh)
115 207
116 /* XXX ensure module interface clock is up */ 208 /* XXX ensure module interface clock is up */
117 209
118 if (oh->_sysc_cache != v) { 210 /* Module might have lost context, always update cache and register */
119 oh->_sysc_cache = v; 211 oh->_sysc_cache = v;
120 omap_hwmod_writel(v, oh, oh->class->sysc->sysc_offs); 212 omap_hwmod_write(v, oh, oh->class->sysc->sysc_offs);
121 }
122} 213}
123 214
124/** 215/**
@@ -279,7 +370,7 @@ static int _set_module_autoidle(struct omap_hwmod *oh, u8 autoidle,
279 } 370 }
280 371
281 autoidle_shift = oh->class->sysc->sysc_fields->autoidle_shift; 372 autoidle_shift = oh->class->sysc->sysc_fields->autoidle_shift;
282 autoidle_mask = (0x3 << autoidle_shift); 373 autoidle_mask = (0x1 << autoidle_shift);
283 374
284 *v &= ~autoidle_mask; 375 *v &= ~autoidle_mask;
285 *v |= autoidle << autoidle_shift; 376 *v |= autoidle << autoidle_shift;
@@ -294,12 +385,13 @@ static int _set_module_autoidle(struct omap_hwmod *oh, u8 autoidle,
294 * Allow the hardware module @oh to send wakeups. Returns -EINVAL 385 * Allow the hardware module @oh to send wakeups. Returns -EINVAL
295 * upon error or 0 upon success. 386 * upon error or 0 upon success.
296 */ 387 */
297static int _enable_wakeup(struct omap_hwmod *oh) 388static int _enable_wakeup(struct omap_hwmod *oh, u32 *v)
298{ 389{
299 u32 v, wakeup_mask; 390 u32 wakeup_mask;
300 391
301 if (!oh->class->sysc || 392 if (!oh->class->sysc ||
302 !(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) 393 !((oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP) ||
394 (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)))
303 return -EINVAL; 395 return -EINVAL;
304 396
305 if (!oh->class->sysc->sysc_fields) { 397 if (!oh->class->sysc->sysc_fields) {
@@ -309,9 +401,10 @@ static int _enable_wakeup(struct omap_hwmod *oh)
309 401
310 wakeup_mask = (0x1 << oh->class->sysc->sysc_fields->enwkup_shift); 402 wakeup_mask = (0x1 << oh->class->sysc->sysc_fields->enwkup_shift);
311 403
312 v = oh->_sysc_cache; 404 *v |= wakeup_mask;
313 v |= wakeup_mask; 405
314 _write_sysconfig(v, oh); 406 if (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)
407 _set_slave_idlemode(oh, HWMOD_IDLEMODE_SMART_WKUP, v);
315 408
316 /* XXX test pwrdm_get_wken for this hwmod's subsystem */ 409 /* XXX test pwrdm_get_wken for this hwmod's subsystem */
317 410
@@ -327,12 +420,13 @@ static int _enable_wakeup(struct omap_hwmod *oh)
327 * Prevent the hardware module @oh to send wakeups. Returns -EINVAL 420 * Prevent the hardware module @oh to send wakeups. Returns -EINVAL
328 * upon error or 0 upon success. 421 * upon error or 0 upon success.
329 */ 422 */
330static int _disable_wakeup(struct omap_hwmod *oh) 423static int _disable_wakeup(struct omap_hwmod *oh, u32 *v)
331{ 424{
332 u32 v, wakeup_mask; 425 u32 wakeup_mask;
333 426
334 if (!oh->class->sysc || 427 if (!oh->class->sysc ||
335 !(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) 428 !((oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP) ||
429 (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)))
336 return -EINVAL; 430 return -EINVAL;
337 431
338 if (!oh->class->sysc->sysc_fields) { 432 if (!oh->class->sysc->sysc_fields) {
@@ -342,9 +436,10 @@ static int _disable_wakeup(struct omap_hwmod *oh)
342 436
343 wakeup_mask = (0x1 << oh->class->sysc->sysc_fields->enwkup_shift); 437 wakeup_mask = (0x1 << oh->class->sysc->sysc_fields->enwkup_shift);
344 438
345 v = oh->_sysc_cache; 439 *v &= ~wakeup_mask;
346 v &= ~wakeup_mask; 440
347 _write_sysconfig(v, oh); 441 if (oh->class->sysc->idlemodes & SIDLE_SMART_WKUP)
442 _set_slave_idlemode(oh, HWMOD_IDLEMODE_SMART, v);
348 443
349 /* XXX test pwrdm_get_wken for this hwmod's subsystem */ 444 /* XXX test pwrdm_get_wken for this hwmod's subsystem */
350 445
@@ -362,14 +457,18 @@ static int _disable_wakeup(struct omap_hwmod *oh)
362 * will be accessed by a particular initiator (e.g., if a module will 457 * will be accessed by a particular initiator (e.g., if a module will
363 * be accessed by the IVA, there should be a sleepdep between the IVA 458 * be accessed by the IVA, there should be a sleepdep between the IVA
364 * initiator and the module). Only applies to modules in smart-idle 459 * initiator and the module). Only applies to modules in smart-idle
365 * mode. Returns -EINVAL upon error or passes along 460 * mode. If the clockdomain is marked as not needing autodeps, return
366 * clkdm_add_sleepdep() value upon success. 461 * 0 without doing anything. Otherwise, returns -EINVAL upon error or
462 * passes along clkdm_add_sleepdep() value upon success.
367 */ 463 */
368static int _add_initiator_dep(struct omap_hwmod *oh, struct omap_hwmod *init_oh) 464static int _add_initiator_dep(struct omap_hwmod *oh, struct omap_hwmod *init_oh)
369{ 465{
370 if (!oh->_clk) 466 if (!oh->_clk)
371 return -EINVAL; 467 return -EINVAL;
372 468
469 if (oh->_clk->clkdm && oh->_clk->clkdm->flags & CLKDM_NO_AUTODEPS)
470 return 0;
471
373 return clkdm_add_sleepdep(oh->_clk->clkdm, init_oh->_clk->clkdm); 472 return clkdm_add_sleepdep(oh->_clk->clkdm, init_oh->_clk->clkdm);
374} 473}
375 474
@@ -382,14 +481,18 @@ static int _add_initiator_dep(struct omap_hwmod *oh, struct omap_hwmod *init_oh)
382 * be accessed by a particular initiator (e.g., if a module will not 481 * be accessed by a particular initiator (e.g., if a module will not
383 * be accessed by the IVA, there should be no sleepdep between the IVA 482 * be accessed by the IVA, there should be no sleepdep between the IVA
384 * initiator and the module). Only applies to modules in smart-idle 483 * initiator and the module). Only applies to modules in smart-idle
385 * mode. Returns -EINVAL upon error or passes along 484 * mode. If the clockdomain is marked as not needing autodeps, return
386 * clkdm_del_sleepdep() value upon success. 485 * 0 without doing anything. Returns -EINVAL upon error or passes
486 * along clkdm_del_sleepdep() value upon success.
387 */ 487 */
388static int _del_initiator_dep(struct omap_hwmod *oh, struct omap_hwmod *init_oh) 488static int _del_initiator_dep(struct omap_hwmod *oh, struct omap_hwmod *init_oh)
389{ 489{
390 if (!oh->_clk) 490 if (!oh->_clk)
391 return -EINVAL; 491 return -EINVAL;
392 492
493 if (oh->_clk->clkdm && oh->_clk->clkdm->flags & CLKDM_NO_AUTODEPS)
494 return 0;
495
393 return clkdm_del_sleepdep(oh->_clk->clkdm, init_oh->_clk->clkdm); 496 return clkdm_del_sleepdep(oh->_clk->clkdm, init_oh->_clk->clkdm);
394} 497}
395 498
@@ -544,6 +647,36 @@ static int _disable_clocks(struct omap_hwmod *oh)
544 return 0; 647 return 0;
545} 648}
546 649
650static void _enable_optional_clocks(struct omap_hwmod *oh)
651{
652 struct omap_hwmod_opt_clk *oc;
653 int i;
654
655 pr_debug("omap_hwmod: %s: enabling optional clocks\n", oh->name);
656
657 for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i > 0; i--, oc++)
658 if (oc->_clk) {
659 pr_debug("omap_hwmod: enable %s:%s\n", oc->role,
660 oc->_clk->name);
661 clk_enable(oc->_clk);
662 }
663}
664
665static void _disable_optional_clocks(struct omap_hwmod *oh)
666{
667 struct omap_hwmod_opt_clk *oc;
668 int i;
669
670 pr_debug("omap_hwmod: %s: disabling optional clocks\n", oh->name);
671
672 for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i > 0; i--, oc++)
673 if (oc->_clk) {
674 pr_debug("omap_hwmod: disable %s:%s\n", oc->role,
675 oc->_clk->name);
676 clk_disable(oc->_clk);
677 }
678}
679
547/** 680/**
548 * _find_mpu_port_index - find hwmod OCP slave port ID intended for MPU use 681 * _find_mpu_port_index - find hwmod OCP slave port ID intended for MPU use
549 * @oh: struct omap_hwmod * 682 * @oh: struct omap_hwmod *
@@ -551,7 +684,7 @@ static int _disable_clocks(struct omap_hwmod *oh)
551 * Returns the array index of the OCP slave port that the MPU 684 * Returns the array index of the OCP slave port that the MPU
552 * addresses the device on, or -EINVAL upon error or not found. 685 * addresses the device on, or -EINVAL upon error or not found.
553 */ 686 */
554static int _find_mpu_port_index(struct omap_hwmod *oh) 687static int __init _find_mpu_port_index(struct omap_hwmod *oh)
555{ 688{
556 int i; 689 int i;
557 int found = 0; 690 int found = 0;
@@ -585,7 +718,7 @@ static int _find_mpu_port_index(struct omap_hwmod *oh)
585 * Return the virtual address of the base of the register target of 718 * Return the virtual address of the base of the register target of
586 * device @oh, or NULL on error. 719 * device @oh, or NULL on error.
587 */ 720 */
588static void __iomem *_find_mpu_rt_base(struct omap_hwmod *oh, u8 index) 721static void __iomem * __init _find_mpu_rt_base(struct omap_hwmod *oh, u8 index)
589{ 722{
590 struct omap_hwmod_ocp_if *os; 723 struct omap_hwmod_ocp_if *os;
591 struct omap_hwmod_addr_space *mem; 724 struct omap_hwmod_addr_space *mem;
@@ -622,7 +755,7 @@ static void __iomem *_find_mpu_rt_base(struct omap_hwmod *oh, u8 index)
622} 755}
623 756
624/** 757/**
625 * _sysc_enable - try to bring a module out of idle via OCP_SYSCONFIG 758 * _enable_sysc - try to bring a module out of idle via OCP_SYSCONFIG
626 * @oh: struct omap_hwmod * 759 * @oh: struct omap_hwmod *
627 * 760 *
628 * If module is marked as SWSUP_SIDLE, force the module out of slave 761 * If module is marked as SWSUP_SIDLE, force the module out of slave
@@ -630,7 +763,7 @@ static void __iomem *_find_mpu_rt_base(struct omap_hwmod *oh, u8 index)
630 * as SWSUP_MSUSPEND, force the module out of master standby; 763 * as SWSUP_MSUSPEND, force the module out of master standby;
631 * otherwise, configure it for smart-standby. No return value. 764 * otherwise, configure it for smart-standby. No return value.
632 */ 765 */
633static void _sysc_enable(struct omap_hwmod *oh) 766static void _enable_sysc(struct omap_hwmod *oh)
634{ 767{
635 u8 idlemode, sf; 768 u8 idlemode, sf;
636 u32 v; 769 u32 v;
@@ -653,14 +786,6 @@ static void _sysc_enable(struct omap_hwmod *oh)
653 _set_master_standbymode(oh, idlemode, &v); 786 _set_master_standbymode(oh, idlemode, &v);
654 } 787 }
655 788
656 if (sf & SYSC_HAS_AUTOIDLE) {
657 idlemode = (oh->flags & HWMOD_NO_OCP_AUTOIDLE) ?
658 0 : 1;
659 _set_module_autoidle(oh, idlemode, &v);
660 }
661
662 /* XXX OCP ENAWAKEUP bit? */
663
664 /* 789 /*
665 * XXX The clock framework should handle this, by 790 * XXX The clock framework should handle this, by
666 * calling into this code. But this must wait until the 791 * calling into this code. But this must wait until the
@@ -670,11 +795,26 @@ static void _sysc_enable(struct omap_hwmod *oh)
670 (sf & SYSC_HAS_CLOCKACTIVITY)) 795 (sf & SYSC_HAS_CLOCKACTIVITY))
671 _set_clockactivity(oh, oh->class->sysc->clockact, &v); 796 _set_clockactivity(oh, oh->class->sysc->clockact, &v);
672 797
798 /* If slave is in SMARTIDLE, also enable wakeup */
799 if ((sf & SYSC_HAS_SIDLEMODE) && !(oh->flags & HWMOD_SWSUP_SIDLE))
800 _enable_wakeup(oh, &v);
801
673 _write_sysconfig(v, oh); 802 _write_sysconfig(v, oh);
803
804 /*
805 * Set the autoidle bit only after setting the smartidle bit
806 * Setting this will not have any impact on the other modules.
807 */
808 if (sf & SYSC_HAS_AUTOIDLE) {
809 idlemode = (oh->flags & HWMOD_NO_OCP_AUTOIDLE) ?
810 0 : 1;
811 _set_module_autoidle(oh, idlemode, &v);
812 _write_sysconfig(v, oh);
813 }
674} 814}
675 815
676/** 816/**
677 * _sysc_idle - try to put a module into idle via OCP_SYSCONFIG 817 * _idle_sysc - try to put a module into idle via OCP_SYSCONFIG
678 * @oh: struct omap_hwmod * 818 * @oh: struct omap_hwmod *
679 * 819 *
680 * If module is marked as SWSUP_SIDLE, force the module into slave 820 * If module is marked as SWSUP_SIDLE, force the module into slave
@@ -682,7 +822,7 @@ static void _sysc_enable(struct omap_hwmod *oh)
682 * as SWSUP_MSUSPEND, force the module into master standby; otherwise, 822 * as SWSUP_MSUSPEND, force the module into master standby; otherwise,
683 * configure it for smart-standby. No return value. 823 * configure it for smart-standby. No return value.
684 */ 824 */
685static void _sysc_idle(struct omap_hwmod *oh) 825static void _idle_sysc(struct omap_hwmod *oh)
686{ 826{
687 u8 idlemode, sf; 827 u8 idlemode, sf;
688 u32 v; 828 u32 v;
@@ -705,17 +845,21 @@ static void _sysc_idle(struct omap_hwmod *oh)
705 _set_master_standbymode(oh, idlemode, &v); 845 _set_master_standbymode(oh, idlemode, &v);
706 } 846 }
707 847
848 /* If slave is in SMARTIDLE, also enable wakeup */
849 if ((sf & SYSC_HAS_SIDLEMODE) && !(oh->flags & HWMOD_SWSUP_SIDLE))
850 _enable_wakeup(oh, &v);
851
708 _write_sysconfig(v, oh); 852 _write_sysconfig(v, oh);
709} 853}
710 854
711/** 855/**
712 * _sysc_shutdown - force a module into idle via OCP_SYSCONFIG 856 * _shutdown_sysc - force a module into idle via OCP_SYSCONFIG
713 * @oh: struct omap_hwmod * 857 * @oh: struct omap_hwmod *
714 * 858 *
715 * Force the module into slave idle and master suspend. No return 859 * Force the module into slave idle and master suspend. No return
716 * value. 860 * value.
717 */ 861 */
718static void _sysc_shutdown(struct omap_hwmod *oh) 862static void _shutdown_sysc(struct omap_hwmod *oh)
719{ 863{
720 u32 v; 864 u32 v;
721 u8 sf; 865 u8 sf;
@@ -743,7 +887,6 @@ static void _sysc_shutdown(struct omap_hwmod *oh)
743 * @name: find an omap_hwmod by name 887 * @name: find an omap_hwmod by name
744 * 888 *
745 * Return a pointer to an omap_hwmod by name, or NULL if not found. 889 * Return a pointer to an omap_hwmod by name, or NULL if not found.
746 * Caller must hold omap_hwmod_mutex.
747 */ 890 */
748static struct omap_hwmod *_lookup(const char *name) 891static struct omap_hwmod *_lookup(const char *name)
749{ 892{
@@ -766,18 +909,16 @@ static struct omap_hwmod *_lookup(const char *name)
766 * @oh: struct omap_hwmod * 909 * @oh: struct omap_hwmod *
767 * @data: not used; pass NULL 910 * @data: not used; pass NULL
768 * 911 *
769 * Called by omap_hwmod_late_init() (after omap2_clk_init()). 912 * Called by omap_hwmod_setup_*() (after omap2_clk_init()).
770 * Resolves all clock names embedded in the hwmod. Must be called 913 * Resolves all clock names embedded in the hwmod. Returns 0 on
771 * with omap_hwmod_mutex held. Returns -EINVAL if the omap_hwmod 914 * success, or a negative error code on failure.
772 * has not yet been registered or if the clocks have already been
773 * initialized, 0 on success, or a non-zero error on failure.
774 */ 915 */
775static int _init_clocks(struct omap_hwmod *oh, void *data) 916static int _init_clocks(struct omap_hwmod *oh, void *data)
776{ 917{
777 int ret = 0; 918 int ret = 0;
778 919
779 if (!oh || (oh->_state != _HWMOD_STATE_REGISTERED)) 920 if (oh->_state != _HWMOD_STATE_REGISTERED)
780 return -EINVAL; 921 return 0;
781 922
782 pr_debug("omap_hwmod: %s: looking up clocks\n", oh->name); 923 pr_debug("omap_hwmod: %s: looking up clocks\n", oh->name);
783 924
@@ -788,7 +929,7 @@ static int _init_clocks(struct omap_hwmod *oh, void *data)
788 if (!ret) 929 if (!ret)
789 oh->_state = _HWMOD_STATE_CLKS_INITED; 930 oh->_state = _HWMOD_STATE_CLKS_INITED;
790 931
791 return 0; 932 return ret;
792} 933}
793 934
794/** 935/**
@@ -834,68 +975,252 @@ static int _wait_target_ready(struct omap_hwmod *oh)
834} 975}
835 976
836/** 977/**
837 * _reset - reset an omap_hwmod 978 * _lookup_hardreset - fill register bit info for this hwmod/reset line
979 * @oh: struct omap_hwmod *
980 * @name: name of the reset line in the context of this hwmod
981 * @ohri: struct omap_hwmod_rst_info * that this function will fill in
982 *
983 * Return the bit position of the reset line that match the
984 * input name. Return -ENOENT if not found.
985 */
986static u8 _lookup_hardreset(struct omap_hwmod *oh, const char *name,
987 struct omap_hwmod_rst_info *ohri)
988{
989 int i;
990
991 for (i = 0; i < oh->rst_lines_cnt; i++) {
992 const char *rst_line = oh->rst_lines[i].name;
993 if (!strcmp(rst_line, name)) {
994 ohri->rst_shift = oh->rst_lines[i].rst_shift;
995 ohri->st_shift = oh->rst_lines[i].st_shift;
996 pr_debug("omap_hwmod: %s: %s: %s: rst %d st %d\n",
997 oh->name, __func__, rst_line, ohri->rst_shift,
998 ohri->st_shift);
999
1000 return 0;
1001 }
1002 }
1003
1004 return -ENOENT;
1005}
1006
1007/**
1008 * _assert_hardreset - assert the HW reset line of submodules
1009 * contained in the hwmod module.
1010 * @oh: struct omap_hwmod *
1011 * @name: name of the reset line to lookup and assert
1012 *
1013 * Some IP like dsp, ipu or iva contain processor that require
1014 * an HW reset line to be assert / deassert in order to enable fully
1015 * the IP.
1016 */
1017static int _assert_hardreset(struct omap_hwmod *oh, const char *name)
1018{
1019 struct omap_hwmod_rst_info ohri;
1020 u8 ret;
1021
1022 if (!oh)
1023 return -EINVAL;
1024
1025 ret = _lookup_hardreset(oh, name, &ohri);
1026 if (IS_ERR_VALUE(ret))
1027 return ret;
1028
1029 if (cpu_is_omap24xx() || cpu_is_omap34xx())
1030 return omap2_prm_assert_hardreset(oh->prcm.omap2.module_offs,
1031 ohri.rst_shift);
1032 else if (cpu_is_omap44xx())
1033 return omap4_prm_assert_hardreset(oh->prcm.omap4.rstctrl_reg,
1034 ohri.rst_shift);
1035 else
1036 return -EINVAL;
1037}
1038
1039/**
1040 * _deassert_hardreset - deassert the HW reset line of submodules contained
1041 * in the hwmod module.
1042 * @oh: struct omap_hwmod *
1043 * @name: name of the reset line to look up and deassert
1044 *
1045 * Some IP like dsp, ipu or iva contain processor that require
1046 * an HW reset line to be assert / deassert in order to enable fully
1047 * the IP.
1048 */
1049static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)
1050{
1051 struct omap_hwmod_rst_info ohri;
1052 int ret;
1053
1054 if (!oh)
1055 return -EINVAL;
1056
1057 ret = _lookup_hardreset(oh, name, &ohri);
1058 if (IS_ERR_VALUE(ret))
1059 return ret;
1060
1061 if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
1062 ret = omap2_prm_deassert_hardreset(oh->prcm.omap2.module_offs,
1063 ohri.rst_shift,
1064 ohri.st_shift);
1065 } else if (cpu_is_omap44xx()) {
1066 if (ohri.st_shift)
1067 pr_err("omap_hwmod: %s: %s: hwmod data error: OMAP4 does not support st_shift\n",
1068 oh->name, name);
1069 ret = omap4_prm_deassert_hardreset(oh->prcm.omap4.rstctrl_reg,
1070 ohri.rst_shift);
1071 } else {
1072 return -EINVAL;
1073 }
1074
1075 if (ret == -EBUSY)
1076 pr_warning("omap_hwmod: %s: failed to hardreset\n", oh->name);
1077
1078 return ret;
1079}
1080
1081/**
1082 * _read_hardreset - read the HW reset line state of submodules
1083 * contained in the hwmod module
1084 * @oh: struct omap_hwmod *
1085 * @name: name of the reset line to look up and read
1086 *
1087 * Return the state of the reset line.
1088 */
1089static int _read_hardreset(struct omap_hwmod *oh, const char *name)
1090{
1091 struct omap_hwmod_rst_info ohri;
1092 u8 ret;
1093
1094 if (!oh)
1095 return -EINVAL;
1096
1097 ret = _lookup_hardreset(oh, name, &ohri);
1098 if (IS_ERR_VALUE(ret))
1099 return ret;
1100
1101 if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
1102 return omap2_prm_is_hardreset_asserted(oh->prcm.omap2.module_offs,
1103 ohri.st_shift);
1104 } else if (cpu_is_omap44xx()) {
1105 return omap4_prm_is_hardreset_asserted(oh->prcm.omap4.rstctrl_reg,
1106 ohri.rst_shift);
1107 } else {
1108 return -EINVAL;
1109 }
1110}
1111
1112/**
1113 * _ocp_softreset - reset an omap_hwmod via the OCP_SYSCONFIG bit
838 * @oh: struct omap_hwmod * 1114 * @oh: struct omap_hwmod *
839 * 1115 *
840 * Resets an omap_hwmod @oh via the OCP_SYSCONFIG bit. hwmod must be 1116 * Resets an omap_hwmod @oh via the OCP_SYSCONFIG bit. hwmod must be
841 * enabled for this to work. Must be called with omap_hwmod_mutex 1117 * enabled for this to work. Returns -EINVAL if the hwmod cannot be
842 * held. Returns -EINVAL if the hwmod cannot be reset this way or if 1118 * reset this way or if the hwmod is in the wrong state, -ETIMEDOUT if
843 * the hwmod is in the wrong state, -ETIMEDOUT if the module did not 1119 * the module did not reset in time, or 0 upon success.
844 * reset in time, or 0 upon success. 1120 *
1121 * In OMAP3 a specific SYSSTATUS register is used to get the reset status.
1122 * Starting in OMAP4, some IPs do not have SYSSTATUS registers and instead
1123 * use the SYSCONFIG softreset bit to provide the status.
1124 *
1125 * Note that some IP like McBSP do have reset control but don't have
1126 * reset status.
845 */ 1127 */
846static int _reset(struct omap_hwmod *oh) 1128static int _ocp_softreset(struct omap_hwmod *oh)
847{ 1129{
848 u32 r, v; 1130 u32 v;
849 int c = 0; 1131 int c = 0;
1132 int ret = 0;
850 1133
851 if (!oh->class->sysc || 1134 if (!oh->class->sysc ||
852 !(oh->class->sysc->sysc_flags & SYSC_HAS_SOFTRESET) || 1135 !(oh->class->sysc->sysc_flags & SYSC_HAS_SOFTRESET))
853 (oh->class->sysc->sysc_flags & SYSS_MISSING))
854 return -EINVAL; 1136 return -EINVAL;
855 1137
856 /* clocks must be on for this operation */ 1138 /* clocks must be on for this operation */
857 if (oh->_state != _HWMOD_STATE_ENABLED) { 1139 if (oh->_state != _HWMOD_STATE_ENABLED) {
858 WARN(1, "omap_hwmod: %s: reset can only be entered from " 1140 pr_warning("omap_hwmod: %s: reset can only be entered from "
859 "enabled state\n", oh->name); 1141 "enabled state\n", oh->name);
860 return -EINVAL; 1142 return -EINVAL;
861 } 1143 }
862 1144
863 pr_debug("omap_hwmod: %s: resetting\n", oh->name); 1145 /* For some modules, all optionnal clocks need to be enabled as well */
1146 if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET)
1147 _enable_optional_clocks(oh);
1148
1149 pr_debug("omap_hwmod: %s: resetting via OCP SOFTRESET\n", oh->name);
864 1150
865 v = oh->_sysc_cache; 1151 v = oh->_sysc_cache;
866 r = _set_softreset(oh, &v); 1152 ret = _set_softreset(oh, &v);
867 if (r) 1153 if (ret)
868 return r; 1154 goto dis_opt_clks;
869 _write_sysconfig(v, oh); 1155 _write_sysconfig(v, oh);
870 1156
871 omap_test_timeout((omap_hwmod_readl(oh, oh->class->sysc->syss_offs) & 1157 if (oh->class->sysc->sysc_flags & SYSS_HAS_RESET_STATUS)
872 SYSS_RESETDONE_MASK), 1158 omap_test_timeout((omap_hwmod_read(oh,
873 MAX_MODULE_RESET_WAIT, c); 1159 oh->class->sysc->syss_offs)
874 1160 & SYSS_RESETDONE_MASK),
875 if (c == MAX_MODULE_RESET_WAIT) 1161 MAX_MODULE_SOFTRESET_WAIT, c);
876 WARN(1, "omap_hwmod: %s: failed to reset in %d usec\n", 1162 else if (oh->class->sysc->sysc_flags & SYSC_HAS_RESET_STATUS)
877 oh->name, MAX_MODULE_RESET_WAIT); 1163 omap_test_timeout(!(omap_hwmod_read(oh,
1164 oh->class->sysc->sysc_offs)
1165 & SYSC_TYPE2_SOFTRESET_MASK),
1166 MAX_MODULE_SOFTRESET_WAIT, c);
1167
1168 if (c == MAX_MODULE_SOFTRESET_WAIT)
1169 pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n",
1170 oh->name, MAX_MODULE_SOFTRESET_WAIT);
878 else 1171 else
879 pr_debug("omap_hwmod: %s: reset in %d usec\n", oh->name, c); 1172 pr_debug("omap_hwmod: %s: softreset in %d usec\n", oh->name, c);
880 1173
881 /* 1174 /*
882 * XXX add _HWMOD_STATE_WEDGED for modules that don't come back from 1175 * XXX add _HWMOD_STATE_WEDGED for modules that don't come back from
883 * _wait_target_ready() or _reset() 1176 * _wait_target_ready() or _reset()
884 */ 1177 */
885 1178
886 return (c == MAX_MODULE_RESET_WAIT) ? -ETIMEDOUT : 0; 1179 ret = (c == MAX_MODULE_SOFTRESET_WAIT) ? -ETIMEDOUT : 0;
1180
1181dis_opt_clks:
1182 if (oh->flags & HWMOD_CONTROL_OPT_CLKS_IN_RESET)
1183 _disable_optional_clocks(oh);
1184
1185 return ret;
887} 1186}
888 1187
889/** 1188/**
890 * _omap_hwmod_enable - enable an omap_hwmod 1189 * _reset - reset an omap_hwmod
1190 * @oh: struct omap_hwmod *
1191 *
1192 * Resets an omap_hwmod @oh. The default software reset mechanism for
1193 * most OMAP IP blocks is triggered via the OCP_SYSCONFIG.SOFTRESET
1194 * bit. However, some hwmods cannot be reset via this method: some
1195 * are not targets and therefore have no OCP header registers to
1196 * access; others (like the IVA) have idiosyncratic reset sequences.
1197 * So for these relatively rare cases, custom reset code can be
1198 * supplied in the struct omap_hwmod_class .reset function pointer.
1199 * Passes along the return value from either _reset() or the custom
1200 * reset function - these must return -EINVAL if the hwmod cannot be
1201 * reset this way or if the hwmod is in the wrong state, -ETIMEDOUT if
1202 * the module did not reset in time, or 0 upon success.
1203 */
1204static int _reset(struct omap_hwmod *oh)
1205{
1206 int ret;
1207
1208 pr_debug("omap_hwmod: %s: resetting\n", oh->name);
1209
1210 ret = (oh->class->reset) ? oh->class->reset(oh) : _ocp_softreset(oh);
1211
1212 return ret;
1213}
1214
1215/**
1216 * _enable - enable an omap_hwmod
891 * @oh: struct omap_hwmod * 1217 * @oh: struct omap_hwmod *
892 * 1218 *
893 * Enables an omap_hwmod @oh such that the MPU can access the hwmod's 1219 * Enables an omap_hwmod @oh such that the MPU can access the hwmod's
894 * register target. Must be called with omap_hwmod_mutex held. 1220 * register target. Returns -EINVAL if the hwmod is in the wrong
895 * Returns -EINVAL if the hwmod is in the wrong state or passes along 1221 * state or passes along the return value of _wait_target_ready().
896 * the return value of _wait_target_ready().
897 */ 1222 */
898int _omap_hwmod_enable(struct omap_hwmod *oh) 1223static int _enable(struct omap_hwmod *oh)
899{ 1224{
900 int r; 1225 int r;
901 1226
@@ -909,7 +1234,20 @@ int _omap_hwmod_enable(struct omap_hwmod *oh)
909 1234
910 pr_debug("omap_hwmod: %s: enabling\n", oh->name); 1235 pr_debug("omap_hwmod: %s: enabling\n", oh->name);
911 1236
912 /* XXX mux balls */ 1237 /*
1238 * If an IP contains only one HW reset line, then de-assert it in order
1239 * to allow to enable the clocks. Otherwise the PRCM will return
1240 * Intransition status, and the init will failed.
1241 */
1242 if ((oh->_state == _HWMOD_STATE_INITIALIZED ||
1243 oh->_state == _HWMOD_STATE_DISABLED) && oh->rst_lines_cnt == 1)
1244 _deassert_hardreset(oh, oh->rst_lines[0].name);
1245
1246 /* Mux pins for device runtime if populated */
1247 if (oh->mux && (!oh->mux->enabled ||
1248 ((oh->_state == _HWMOD_STATE_IDLE) &&
1249 oh->mux->pads_dynamic)))
1250 omap_hwmod_mux(oh->mux, _HWMOD_STATE_ENABLED);
913 1251
914 _add_initiator_dep(oh, mpu_oh); 1252 _add_initiator_dep(oh, mpu_oh);
915 _enable_clocks(oh); 1253 _enable_clocks(oh);
@@ -922,9 +1260,10 @@ int _omap_hwmod_enable(struct omap_hwmod *oh)
922 if (oh->class->sysc) { 1260 if (oh->class->sysc) {
923 if (!(oh->_int_flags & _HWMOD_SYSCONFIG_LOADED)) 1261 if (!(oh->_int_flags & _HWMOD_SYSCONFIG_LOADED))
924 _update_sysc_cache(oh); 1262 _update_sysc_cache(oh);
925 _sysc_enable(oh); 1263 _enable_sysc(oh);
926 } 1264 }
927 } else { 1265 } else {
1266 _disable_clocks(oh);
928 pr_debug("omap_hwmod: %s: _wait_target_ready: %d\n", 1267 pr_debug("omap_hwmod: %s: _wait_target_ready: %d\n",
929 oh->name, r); 1268 oh->name, r);
930 } 1269 }
@@ -940,7 +1279,7 @@ int _omap_hwmod_enable(struct omap_hwmod *oh)
940 * no further work. Returns -EINVAL if the hwmod is in the wrong 1279 * no further work. Returns -EINVAL if the hwmod is in the wrong
941 * state or returns 0. 1280 * state or returns 0.
942 */ 1281 */
943int _omap_hwmod_idle(struct omap_hwmod *oh) 1282static int _idle(struct omap_hwmod *oh)
944{ 1283{
945 if (oh->_state != _HWMOD_STATE_ENABLED) { 1284 if (oh->_state != _HWMOD_STATE_ENABLED) {
946 WARN(1, "omap_hwmod: %s: idle state can only be entered from " 1285 WARN(1, "omap_hwmod: %s: idle state can only be entered from "
@@ -951,16 +1290,56 @@ int _omap_hwmod_idle(struct omap_hwmod *oh)
951 pr_debug("omap_hwmod: %s: idling\n", oh->name); 1290 pr_debug("omap_hwmod: %s: idling\n", oh->name);
952 1291
953 if (oh->class->sysc) 1292 if (oh->class->sysc)
954 _sysc_idle(oh); 1293 _idle_sysc(oh);
955 _del_initiator_dep(oh, mpu_oh); 1294 _del_initiator_dep(oh, mpu_oh);
956 _disable_clocks(oh); 1295 _disable_clocks(oh);
957 1296
1297 /* Mux pins for device idle if populated */
1298 if (oh->mux && oh->mux->pads_dynamic)
1299 omap_hwmod_mux(oh->mux, _HWMOD_STATE_IDLE);
1300
958 oh->_state = _HWMOD_STATE_IDLE; 1301 oh->_state = _HWMOD_STATE_IDLE;
959 1302
960 return 0; 1303 return 0;
961} 1304}
962 1305
963/** 1306/**
1307 * omap_hwmod_set_ocp_autoidle - set the hwmod's OCP autoidle bit
1308 * @oh: struct omap_hwmod *
1309 * @autoidle: desired AUTOIDLE bitfield value (0 or 1)
1310 *
1311 * Sets the IP block's OCP autoidle bit in hardware, and updates our
1312 * local copy. Intended to be used by drivers that require
1313 * direct manipulation of the AUTOIDLE bits.
1314 * Returns -EINVAL if @oh is null or is not in the ENABLED state, or passes
1315 * along the return value from _set_module_autoidle().
1316 *
1317 * Any users of this function should be scrutinized carefully.
1318 */
1319int omap_hwmod_set_ocp_autoidle(struct omap_hwmod *oh, u8 autoidle)
1320{
1321 u32 v;
1322 int retval = 0;
1323 unsigned long flags;
1324
1325 if (!oh || oh->_state != _HWMOD_STATE_ENABLED)
1326 return -EINVAL;
1327
1328 spin_lock_irqsave(&oh->_lock, flags);
1329
1330 v = oh->_sysc_cache;
1331
1332 retval = _set_module_autoidle(oh, autoidle, &v);
1333
1334 if (!retval)
1335 _write_sysconfig(v, oh);
1336
1337 spin_unlock_irqrestore(&oh->_lock, flags);
1338
1339 return retval;
1340}
1341
1342/**
964 * _shutdown - shutdown an omap_hwmod 1343 * _shutdown - shutdown an omap_hwmod
965 * @oh: struct omap_hwmod * 1344 * @oh: struct omap_hwmod *
966 * 1345 *
@@ -971,6 +1350,9 @@ int _omap_hwmod_idle(struct omap_hwmod *oh)
971 */ 1350 */
972static int _shutdown(struct omap_hwmod *oh) 1351static int _shutdown(struct omap_hwmod *oh)
973{ 1352{
1353 int ret;
1354 u8 prev_state;
1355
974 if (oh->_state != _HWMOD_STATE_IDLE && 1356 if (oh->_state != _HWMOD_STATE_IDLE &&
975 oh->_state != _HWMOD_STATE_ENABLED) { 1357 oh->_state != _HWMOD_STATE_ENABLED) {
976 WARN(1, "omap_hwmod: %s: disabled state can only be entered " 1358 WARN(1, "omap_hwmod: %s: disabled state can only be entered "
@@ -980,14 +1362,39 @@ static int _shutdown(struct omap_hwmod *oh)
980 1362
981 pr_debug("omap_hwmod: %s: disabling\n", oh->name); 1363 pr_debug("omap_hwmod: %s: disabling\n", oh->name);
982 1364
1365 if (oh->class->pre_shutdown) {
1366 prev_state = oh->_state;
1367 if (oh->_state == _HWMOD_STATE_IDLE)
1368 _enable(oh);
1369 ret = oh->class->pre_shutdown(oh);
1370 if (ret) {
1371 if (prev_state == _HWMOD_STATE_IDLE)
1372 _idle(oh);
1373 return ret;
1374 }
1375 }
1376
983 if (oh->class->sysc) 1377 if (oh->class->sysc)
984 _sysc_shutdown(oh); 1378 _shutdown_sysc(oh);
985 _del_initiator_dep(oh, mpu_oh); 1379
986 /* XXX what about the other system initiators here? DMA, tesla, d2d */ 1380 /*
987 _disable_clocks(oh); 1381 * If an IP contains only one HW reset line, then assert it
1382 * before disabling the clocks and shutting down the IP.
1383 */
1384 if (oh->rst_lines_cnt == 1)
1385 _assert_hardreset(oh, oh->rst_lines[0].name);
1386
1387 /* clocks and deps are already disabled in idle */
1388 if (oh->_state == _HWMOD_STATE_ENABLED) {
1389 _del_initiator_dep(oh, mpu_oh);
1390 /* XXX what about the other system initiators here? dma, dsp */
1391 _disable_clocks(oh);
1392 }
988 /* XXX Should this code also force-disable the optional clocks? */ 1393 /* XXX Should this code also force-disable the optional clocks? */
989 1394
990 /* XXX mux any associated balls to safe mode */ 1395 /* Mux pins to safe mode or use populated off mode values */
1396 if (oh->mux)
1397 omap_hwmod_mux(oh->mux, _HWMOD_STATE_DISABLED);
991 1398
992 oh->_state = _HWMOD_STATE_DISABLED; 1399 oh->_state = _HWMOD_STATE_DISABLED;
993 1400
@@ -997,24 +1404,17 @@ static int _shutdown(struct omap_hwmod *oh)
997/** 1404/**
998 * _setup - do initial configuration of omap_hwmod 1405 * _setup - do initial configuration of omap_hwmod
999 * @oh: struct omap_hwmod * 1406 * @oh: struct omap_hwmod *
1000 * @skip_setup_idle_p: do not idle hwmods at the end of the fn if 1
1001 * 1407 *
1002 * Writes the CLOCKACTIVITY bits @clockact to the hwmod @oh 1408 * Writes the CLOCKACTIVITY bits @clockact to the hwmod @oh
1003 * OCP_SYSCONFIG register. Must be called with omap_hwmod_mutex held. 1409 * OCP_SYSCONFIG register. Returns 0.
1004 * @skip_setup_idle is intended to be used on a system that will not
1005 * call omap_hwmod_enable() to enable devices (e.g., a system without
1006 * PM runtime). Returns -EINVAL if the hwmod is in the wrong state or
1007 * returns 0.
1008 */ 1410 */
1009static int _setup(struct omap_hwmod *oh, void *data) 1411static int _setup(struct omap_hwmod *oh, void *data)
1010{ 1412{
1011 int i, r; 1413 int i, r;
1012 u8 skip_setup_idle; 1414 u8 postsetup_state;
1013
1014 if (!oh || !data)
1015 return -EINVAL;
1016 1415
1017 skip_setup_idle = *(u8 *)data; 1416 if (oh->_state != _HWMOD_STATE_CLKS_INITED)
1417 return 0;
1018 1418
1019 /* Set iclk autoidle mode */ 1419 /* Set iclk autoidle mode */
1020 if (oh->slaves_cnt > 0) { 1420 if (oh->slaves_cnt > 0) {
@@ -1036,7 +1436,17 @@ static int _setup(struct omap_hwmod *oh, void *data)
1036 1436
1037 oh->_state = _HWMOD_STATE_INITIALIZED; 1437 oh->_state = _HWMOD_STATE_INITIALIZED;
1038 1438
1039 r = _omap_hwmod_enable(oh); 1439 /*
1440 * In the case of hwmod with hardreset that should not be
1441 * de-assert at boot time, we have to keep the module
1442 * initialized, because we cannot enable it properly with the
1443 * reset asserted. Exit without warning because that behavior is
1444 * expected.
1445 */
1446 if ((oh->flags & HWMOD_INIT_NO_RESET) && oh->rst_lines_cnt == 1)
1447 return 0;
1448
1449 r = _enable(oh);
1040 if (r) { 1450 if (r) {
1041 pr_warning("omap_hwmod: %s: cannot be enabled (%d)\n", 1451 pr_warning("omap_hwmod: %s: cannot be enabled (%d)\n",
1042 oh->name, oh->_state); 1452 oh->name, oh->_state);
@@ -1044,37 +1454,111 @@ static int _setup(struct omap_hwmod *oh, void *data)
1044 } 1454 }
1045 1455
1046 if (!(oh->flags & HWMOD_INIT_NO_RESET)) { 1456 if (!(oh->flags & HWMOD_INIT_NO_RESET)) {
1457 _reset(oh);
1458
1047 /* 1459 /*
1048 * XXX Do the OCP_SYSCONFIG bits need to be 1460 * OCP_SYSCONFIG bits need to be reprogrammed after a softreset.
1049 * reprogrammed after a reset? If not, then this can 1461 * The _enable() function should be split to
1050 * be removed. If they do, then probably the 1462 * avoid the rewrite of the OCP_SYSCONFIG register.
1051 * _omap_hwmod_enable() function should be split to avoid the
1052 * rewrite of the OCP_SYSCONFIG register.
1053 */ 1463 */
1054 if (oh->class->sysc) { 1464 if (oh->class->sysc) {
1055 _update_sysc_cache(oh); 1465 _update_sysc_cache(oh);
1056 _sysc_enable(oh); 1466 _enable_sysc(oh);
1057 } 1467 }
1058 } 1468 }
1059 1469
1060 if (!(oh->flags & HWMOD_INIT_NO_IDLE) && !skip_setup_idle) 1470 postsetup_state = oh->_postsetup_state;
1061 _omap_hwmod_idle(oh); 1471 if (postsetup_state == _HWMOD_STATE_UNKNOWN)
1472 postsetup_state = _HWMOD_STATE_ENABLED;
1473
1474 /*
1475 * XXX HWMOD_INIT_NO_IDLE does not belong in hwmod data -
1476 * it should be set by the core code as a runtime flag during startup
1477 */
1478 if ((oh->flags & HWMOD_INIT_NO_IDLE) &&
1479 (postsetup_state == _HWMOD_STATE_IDLE))
1480 postsetup_state = _HWMOD_STATE_ENABLED;
1481
1482 if (postsetup_state == _HWMOD_STATE_IDLE)
1483 _idle(oh);
1484 else if (postsetup_state == _HWMOD_STATE_DISABLED)
1485 _shutdown(oh);
1486 else if (postsetup_state != _HWMOD_STATE_ENABLED)
1487 WARN(1, "hwmod: %s: unknown postsetup state %d! defaulting to enabled\n",
1488 oh->name, postsetup_state);
1062 1489
1063 return 0; 1490 return 0;
1064} 1491}
1065 1492
1493/**
1494 * _register - register a struct omap_hwmod
1495 * @oh: struct omap_hwmod *
1496 *
1497 * Registers the omap_hwmod @oh. Returns -EEXIST if an omap_hwmod
1498 * already has been registered by the same name; -EINVAL if the
1499 * omap_hwmod is in the wrong state, if @oh is NULL, if the
1500 * omap_hwmod's class field is NULL; if the omap_hwmod is missing a
1501 * name, or if the omap_hwmod's class is missing a name; or 0 upon
1502 * success.
1503 *
1504 * XXX The data should be copied into bootmem, so the original data
1505 * should be marked __initdata and freed after init. This would allow
1506 * unneeded omap_hwmods to be freed on multi-OMAP configurations. Note
1507 * that the copy process would be relatively complex due to the large number
1508 * of substructures.
1509 */
1510static int __init _register(struct omap_hwmod *oh)
1511{
1512 int ms_id;
1513
1514 if (!oh || !oh->name || !oh->class || !oh->class->name ||
1515 (oh->_state != _HWMOD_STATE_UNKNOWN))
1516 return -EINVAL;
1517
1518 pr_debug("omap_hwmod: %s: registering\n", oh->name);
1519
1520 if (_lookup(oh->name))
1521 return -EEXIST;
1522
1523 ms_id = _find_mpu_port_index(oh);
1524 if (!IS_ERR_VALUE(ms_id))
1525 oh->_mpu_port_index = ms_id;
1526 else
1527 oh->_int_flags |= _HWMOD_NO_MPU_PORT;
1528
1529 list_add_tail(&oh->node, &omap_hwmod_list);
1530
1531 spin_lock_init(&oh->_lock);
1532
1533 oh->_state = _HWMOD_STATE_REGISTERED;
1534
1535 /*
1536 * XXX Rather than doing a strcmp(), this should test a flag
1537 * set in the hwmod data, inserted by the autogenerator code.
1538 */
1539 if (!strcmp(oh->name, MPU_INITIATOR_NAME))
1540 mpu_oh = oh;
1541
1542 return 0;
1543}
1066 1544
1067 1545
1068/* Public functions */ 1546/* Public functions */
1069 1547
1070u32 omap_hwmod_readl(struct omap_hwmod *oh, u16 reg_offs) 1548u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs)
1071{ 1549{
1072 return __raw_readl(oh->_mpu_rt_va + reg_offs); 1550 if (oh->flags & HWMOD_16BIT_REG)
1551 return __raw_readw(oh->_mpu_rt_va + reg_offs);
1552 else
1553 return __raw_readl(oh->_mpu_rt_va + reg_offs);
1073} 1554}
1074 1555
1075void omap_hwmod_writel(u32 v, struct omap_hwmod *oh, u16 reg_offs) 1556void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs)
1076{ 1557{
1077 __raw_writel(v, oh->_mpu_rt_va + reg_offs); 1558 if (oh->flags & HWMOD_16BIT_REG)
1559 __raw_writew(v, oh->_mpu_rt_va + reg_offs);
1560 else
1561 __raw_writel(v, oh->_mpu_rt_va + reg_offs);
1078} 1562}
1079 1563
1080/** 1564/**
@@ -1110,59 +1594,6 @@ int omap_hwmod_set_slave_idlemode(struct omap_hwmod *oh, u8 idlemode)
1110} 1594}
1111 1595
1112/** 1596/**
1113 * omap_hwmod_register - register a struct omap_hwmod
1114 * @oh: struct omap_hwmod *
1115 *
1116 * Registers the omap_hwmod @oh. Returns -EEXIST if an omap_hwmod
1117 * already has been registered by the same name; -EINVAL if the
1118 * omap_hwmod is in the wrong state, if @oh is NULL, if the
1119 * omap_hwmod's class field is NULL; if the omap_hwmod is missing a
1120 * name, or if the omap_hwmod's class is missing a name; or 0 upon
1121 * success.
1122 *
1123 * XXX The data should be copied into bootmem, so the original data
1124 * should be marked __initdata and freed after init. This would allow
1125 * unneeded omap_hwmods to be freed on multi-OMAP configurations. Note
1126 * that the copy process would be relatively complex due to the large number
1127 * of substructures.
1128 */
1129int omap_hwmod_register(struct omap_hwmod *oh)
1130{
1131 int ret, ms_id;
1132
1133 if (!oh || !oh->name || !oh->class || !oh->class->name ||
1134 (oh->_state != _HWMOD_STATE_UNKNOWN))
1135 return -EINVAL;
1136
1137 mutex_lock(&omap_hwmod_mutex);
1138
1139 pr_debug("omap_hwmod: %s: registering\n", oh->name);
1140
1141 if (_lookup(oh->name)) {
1142 ret = -EEXIST;
1143 goto ohr_unlock;
1144 }
1145
1146 ms_id = _find_mpu_port_index(oh);
1147 if (!IS_ERR_VALUE(ms_id)) {
1148 oh->_mpu_port_index = ms_id;
1149 oh->_mpu_rt_va = _find_mpu_rt_base(oh, oh->_mpu_port_index);
1150 } else {
1151 oh->_int_flags |= _HWMOD_NO_MPU_PORT;
1152 }
1153
1154 list_add_tail(&oh->node, &omap_hwmod_list);
1155
1156 oh->_state = _HWMOD_STATE_REGISTERED;
1157
1158 ret = 0;
1159
1160ohr_unlock:
1161 mutex_unlock(&omap_hwmod_mutex);
1162 return ret;
1163}
1164
1165/**
1166 * omap_hwmod_lookup - look up a registered omap_hwmod by name 1597 * omap_hwmod_lookup - look up a registered omap_hwmod by name
1167 * @name: name of the omap_hwmod to look up 1598 * @name: name of the omap_hwmod to look up
1168 * 1599 *
@@ -1176,9 +1607,7 @@ struct omap_hwmod *omap_hwmod_lookup(const char *name)
1176 if (!name) 1607 if (!name)
1177 return NULL; 1608 return NULL;
1178 1609
1179 mutex_lock(&omap_hwmod_mutex);
1180 oh = _lookup(name); 1610 oh = _lookup(name);
1181 mutex_unlock(&omap_hwmod_mutex);
1182 1611
1183 return oh; 1612 return oh;
1184} 1613}
@@ -1199,149 +1628,186 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
1199 void *data) 1628 void *data)
1200{ 1629{
1201 struct omap_hwmod *temp_oh; 1630 struct omap_hwmod *temp_oh;
1202 int ret; 1631 int ret = 0;
1203 1632
1204 if (!fn) 1633 if (!fn)
1205 return -EINVAL; 1634 return -EINVAL;
1206 1635
1207 mutex_lock(&omap_hwmod_mutex);
1208 list_for_each_entry(temp_oh, &omap_hwmod_list, node) { 1636 list_for_each_entry(temp_oh, &omap_hwmod_list, node) {
1209 ret = (*fn)(temp_oh, data); 1637 ret = (*fn)(temp_oh, data);
1210 if (ret) 1638 if (ret)
1211 break; 1639 break;
1212 } 1640 }
1213 mutex_unlock(&omap_hwmod_mutex);
1214 1641
1215 return ret; 1642 return ret;
1216} 1643}
1217 1644
1218
1219/** 1645/**
1220 * omap_hwmod_init - init omap_hwmod code and register hwmods 1646 * omap_hwmod_register - register an array of hwmods
1221 * @ohs: pointer to an array of omap_hwmods to register 1647 * @ohs: pointer to an array of omap_hwmods to register
1222 * 1648 *
1223 * Intended to be called early in boot before the clock framework is 1649 * Intended to be called early in boot before the clock framework is
1224 * initialized. If @ohs is not null, will register all omap_hwmods 1650 * initialized. If @ohs is not null, will register all omap_hwmods
1225 * listed in @ohs that are valid for this chip. Returns -EINVAL if 1651 * listed in @ohs that are valid for this chip. Returns 0.
1226 * omap_hwmod_init() has already been called or 0 otherwise.
1227 */ 1652 */
1228int omap_hwmod_init(struct omap_hwmod **ohs) 1653int __init omap_hwmod_register(struct omap_hwmod **ohs)
1229{ 1654{
1230 struct omap_hwmod *oh; 1655 int r, i;
1231 int r;
1232 1656
1233 if (inited) 1657 if (!ohs)
1234 return -EINVAL; 1658 return 0;
1235 1659
1236 inited = 1; 1660 i = 0;
1661 do {
1662 if (!omap_chip_is(ohs[i]->omap_chip))
1663 continue;
1237 1664
1238 if (!ohs) 1665 r = _register(ohs[i]);
1666 WARN(r, "omap_hwmod: %s: _register returned %d\n", ohs[i]->name,
1667 r);
1668 } while (ohs[++i]);
1669
1670 return 0;
1671}
1672
1673/*
1674 * _populate_mpu_rt_base - populate the virtual address for a hwmod
1675 *
1676 * Must be called only from omap_hwmod_setup_*() so ioremap works properly.
1677 * Assumes the caller takes care of locking if needed.
1678 */
1679static int __init _populate_mpu_rt_base(struct omap_hwmod *oh, void *data)
1680{
1681 if (oh->_state != _HWMOD_STATE_REGISTERED)
1239 return 0; 1682 return 0;
1240 1683
1241 oh = *ohs; 1684 if (oh->_int_flags & _HWMOD_NO_MPU_PORT)
1242 while (oh) { 1685 return 0;
1243 if (omap_chip_is(oh->omap_chip)) { 1686
1244 r = omap_hwmod_register(oh); 1687 oh->_mpu_rt_va = _find_mpu_rt_base(oh, oh->_mpu_port_index);
1245 WARN(r, "omap_hwmod: %s: omap_hwmod_register returned " 1688 if (!oh->_mpu_rt_va)
1246 "%d\n", oh->name, r); 1689 pr_warning("omap_hwmod: %s found no _mpu_rt_va for %s\n",
1247 } 1690 __func__, oh->name);
1248 oh = *++ohs;
1249 }
1250 1691
1251 return 0; 1692 return 0;
1252} 1693}
1253 1694
1254/** 1695/**
1255 * omap_hwmod_late_init - do some post-clock framework initialization 1696 * omap_hwmod_setup_one - set up a single hwmod
1256 * @skip_setup_idle: if 1, do not idle hwmods in _setup() 1697 * @oh_name: const char * name of the already-registered hwmod to set up
1257 * 1698 *
1258 * Must be called after omap2_clk_init(). Resolves the struct clk names 1699 * Must be called after omap2_clk_init(). Resolves the struct clk
1259 * to struct clk pointers for each registered omap_hwmod. Also calls 1700 * names to struct clk pointers for each registered omap_hwmod. Also
1260 * _setup() on each hwmod. Returns 0. 1701 * calls _setup() on each hwmod. Returns -EINVAL upon error or 0 upon
1702 * success.
1261 */ 1703 */
1262int omap_hwmod_late_init(u8 skip_setup_idle) 1704int __init omap_hwmod_setup_one(const char *oh_name)
1263{ 1705{
1706 struct omap_hwmod *oh;
1264 int r; 1707 int r;
1265 1708
1266 /* XXX check return value */ 1709 pr_debug("omap_hwmod: %s: %s\n", oh_name, __func__);
1267 r = omap_hwmod_for_each(_init_clocks, NULL);
1268 WARN(r, "omap_hwmod: omap_hwmod_late_init(): _init_clocks failed\n");
1269 1710
1270 mpu_oh = omap_hwmod_lookup(MPU_INITIATOR_NAME); 1711 if (!mpu_oh) {
1271 WARN(!mpu_oh, "omap_hwmod: could not find MPU initiator hwmod %s\n", 1712 pr_err("omap_hwmod: %s: cannot setup_one: MPU initiator hwmod %s not yet registered\n",
1272 MPU_INITIATOR_NAME); 1713 oh_name, MPU_INITIATOR_NAME);
1714 return -EINVAL;
1715 }
1273 1716
1274 if (skip_setup_idle) 1717 oh = _lookup(oh_name);
1275 pr_debug("omap_hwmod: will leave hwmods enabled during setup\n"); 1718 if (!oh) {
1719 WARN(1, "omap_hwmod: %s: hwmod not yet registered\n", oh_name);
1720 return -EINVAL;
1721 }
1276 1722
1277 omap_hwmod_for_each(_setup, &skip_setup_idle); 1723 if (mpu_oh->_state == _HWMOD_STATE_REGISTERED && oh != mpu_oh)
1724 omap_hwmod_setup_one(MPU_INITIATOR_NAME);
1725
1726 r = _populate_mpu_rt_base(oh, NULL);
1727 if (IS_ERR_VALUE(r)) {
1728 WARN(1, "omap_hwmod: %s: couldn't set mpu_rt_base\n", oh_name);
1729 return -EINVAL;
1730 }
1731
1732 r = _init_clocks(oh, NULL);
1733 if (IS_ERR_VALUE(r)) {
1734 WARN(1, "omap_hwmod: %s: couldn't init clocks\n", oh_name);
1735 return -EINVAL;
1736 }
1737
1738 _setup(oh, NULL);
1278 1739
1279 return 0; 1740 return 0;
1280} 1741}
1281 1742
1282/** 1743/**
1283 * omap_hwmod_unregister - unregister an omap_hwmod 1744 * omap_hwmod_setup - do some post-clock framework initialization
1284 * @oh: struct omap_hwmod *
1285 * 1745 *
1286 * Unregisters a previously-registered omap_hwmod @oh. There's probably 1746 * Must be called after omap2_clk_init(). Resolves the struct clk names
1287 * no use case for this, so it is likely to be removed in a later version. 1747 * to struct clk pointers for each registered omap_hwmod. Also calls
1288 * 1748 * _setup() on each hwmod. Returns 0 upon success.
1289 * XXX Free all of the bootmem-allocated structures here when that is
1290 * implemented. Make it clear that core code is the only code that is
1291 * expected to unregister modules.
1292 */ 1749 */
1293int omap_hwmod_unregister(struct omap_hwmod *oh) 1750static int __init omap_hwmod_setup_all(void)
1294{ 1751{
1295 if (!oh) 1752 int r;
1753
1754 if (!mpu_oh) {
1755 pr_err("omap_hwmod: %s: MPU initiator hwmod %s not yet registered\n",
1756 __func__, MPU_INITIATOR_NAME);
1296 return -EINVAL; 1757 return -EINVAL;
1758 }
1759
1760 r = omap_hwmod_for_each(_populate_mpu_rt_base, NULL);
1297 1761
1298 pr_debug("omap_hwmod: %s: unregistering\n", oh->name); 1762 r = omap_hwmod_for_each(_init_clocks, NULL);
1763 WARN(IS_ERR_VALUE(r),
1764 "omap_hwmod: %s: _init_clocks failed\n", __func__);
1299 1765
1300 mutex_lock(&omap_hwmod_mutex); 1766 omap_hwmod_for_each(_setup, NULL);
1301 iounmap(oh->_mpu_rt_va);
1302 list_del(&oh->node);
1303 mutex_unlock(&omap_hwmod_mutex);
1304 1767
1305 return 0; 1768 return 0;
1306} 1769}
1770core_initcall(omap_hwmod_setup_all);
1307 1771
1308/** 1772/**
1309 * omap_hwmod_enable - enable an omap_hwmod 1773 * omap_hwmod_enable - enable an omap_hwmod
1310 * @oh: struct omap_hwmod * 1774 * @oh: struct omap_hwmod *
1311 * 1775 *
1312 * Enable an omap_hwomd @oh. Intended to be called by omap_device_enable(). 1776 * Enable an omap_hwmod @oh. Intended to be called by omap_device_enable().
1313 * Returns -EINVAL on error or passes along the return value from _enable(). 1777 * Returns -EINVAL on error or passes along the return value from _enable().
1314 */ 1778 */
1315int omap_hwmod_enable(struct omap_hwmod *oh) 1779int omap_hwmod_enable(struct omap_hwmod *oh)
1316{ 1780{
1317 int r; 1781 int r;
1782 unsigned long flags;
1318 1783
1319 if (!oh) 1784 if (!oh)
1320 return -EINVAL; 1785 return -EINVAL;
1321 1786
1322 mutex_lock(&omap_hwmod_mutex); 1787 spin_lock_irqsave(&oh->_lock, flags);
1323 r = _omap_hwmod_enable(oh); 1788 r = _enable(oh);
1324 mutex_unlock(&omap_hwmod_mutex); 1789 spin_unlock_irqrestore(&oh->_lock, flags);
1325 1790
1326 return r; 1791 return r;
1327} 1792}
1328 1793
1329
1330/** 1794/**
1331 * omap_hwmod_idle - idle an omap_hwmod 1795 * omap_hwmod_idle - idle an omap_hwmod
1332 * @oh: struct omap_hwmod * 1796 * @oh: struct omap_hwmod *
1333 * 1797 *
1334 * Idle an omap_hwomd @oh. Intended to be called by omap_device_idle(). 1798 * Idle an omap_hwmod @oh. Intended to be called by omap_device_idle().
1335 * Returns -EINVAL on error or passes along the return value from _idle(). 1799 * Returns -EINVAL on error or passes along the return value from _idle().
1336 */ 1800 */
1337int omap_hwmod_idle(struct omap_hwmod *oh) 1801int omap_hwmod_idle(struct omap_hwmod *oh)
1338{ 1802{
1803 unsigned long flags;
1804
1339 if (!oh) 1805 if (!oh)
1340 return -EINVAL; 1806 return -EINVAL;
1341 1807
1342 mutex_lock(&omap_hwmod_mutex); 1808 spin_lock_irqsave(&oh->_lock, flags);
1343 _omap_hwmod_idle(oh); 1809 _idle(oh);
1344 mutex_unlock(&omap_hwmod_mutex); 1810 spin_unlock_irqrestore(&oh->_lock, flags);
1345 1811
1346 return 0; 1812 return 0;
1347} 1813}
@@ -1350,18 +1816,20 @@ int omap_hwmod_idle(struct omap_hwmod *oh)
1350 * omap_hwmod_shutdown - shutdown an omap_hwmod 1816 * omap_hwmod_shutdown - shutdown an omap_hwmod
1351 * @oh: struct omap_hwmod * 1817 * @oh: struct omap_hwmod *
1352 * 1818 *
1353 * Shutdown an omap_hwomd @oh. Intended to be called by 1819 * Shutdown an omap_hwmod @oh. Intended to be called by
1354 * omap_device_shutdown(). Returns -EINVAL on error or passes along 1820 * omap_device_shutdown(). Returns -EINVAL on error or passes along
1355 * the return value from _shutdown(). 1821 * the return value from _shutdown().
1356 */ 1822 */
1357int omap_hwmod_shutdown(struct omap_hwmod *oh) 1823int omap_hwmod_shutdown(struct omap_hwmod *oh)
1358{ 1824{
1825 unsigned long flags;
1826
1359 if (!oh) 1827 if (!oh)
1360 return -EINVAL; 1828 return -EINVAL;
1361 1829
1362 mutex_lock(&omap_hwmod_mutex); 1830 spin_lock_irqsave(&oh->_lock, flags);
1363 _shutdown(oh); 1831 _shutdown(oh);
1364 mutex_unlock(&omap_hwmod_mutex); 1832 spin_unlock_irqrestore(&oh->_lock, flags);
1365 1833
1366 return 0; 1834 return 0;
1367} 1835}
@@ -1374,9 +1842,11 @@ int omap_hwmod_shutdown(struct omap_hwmod *oh)
1374 */ 1842 */
1375int omap_hwmod_enable_clocks(struct omap_hwmod *oh) 1843int omap_hwmod_enable_clocks(struct omap_hwmod *oh)
1376{ 1844{
1377 mutex_lock(&omap_hwmod_mutex); 1845 unsigned long flags;
1846
1847 spin_lock_irqsave(&oh->_lock, flags);
1378 _enable_clocks(oh); 1848 _enable_clocks(oh);
1379 mutex_unlock(&omap_hwmod_mutex); 1849 spin_unlock_irqrestore(&oh->_lock, flags);
1380 1850
1381 return 0; 1851 return 0;
1382} 1852}
@@ -1389,9 +1859,11 @@ int omap_hwmod_enable_clocks(struct omap_hwmod *oh)
1389 */ 1859 */
1390int omap_hwmod_disable_clocks(struct omap_hwmod *oh) 1860int omap_hwmod_disable_clocks(struct omap_hwmod *oh)
1391{ 1861{
1392 mutex_lock(&omap_hwmod_mutex); 1862 unsigned long flags;
1863
1864 spin_lock_irqsave(&oh->_lock, flags);
1393 _disable_clocks(oh); 1865 _disable_clocks(oh);
1394 mutex_unlock(&omap_hwmod_mutex); 1866 spin_unlock_irqrestore(&oh->_lock, flags);
1395 1867
1396 return 0; 1868 return 0;
1397} 1869}
@@ -1421,7 +1893,7 @@ void omap_hwmod_ocp_barrier(struct omap_hwmod *oh)
1421 * Forces posted writes to complete on the OCP thread handling 1893 * Forces posted writes to complete on the OCP thread handling
1422 * register writes 1894 * register writes
1423 */ 1895 */
1424 omap_hwmod_readl(oh, oh->class->sysc->sysc_offs); 1896 omap_hwmod_read(oh, oh->class->sysc->sysc_offs);
1425} 1897}
1426 1898
1427/** 1899/**
@@ -1430,20 +1902,19 @@ void omap_hwmod_ocp_barrier(struct omap_hwmod *oh)
1430 * 1902 *
1431 * Under some conditions, a driver may wish to reset the entire device. 1903 * Under some conditions, a driver may wish to reset the entire device.
1432 * Called from omap_device code. Returns -EINVAL on error or passes along 1904 * Called from omap_device code. Returns -EINVAL on error or passes along
1433 * the return value from _reset()/_enable(). 1905 * the return value from _reset().
1434 */ 1906 */
1435int omap_hwmod_reset(struct omap_hwmod *oh) 1907int omap_hwmod_reset(struct omap_hwmod *oh)
1436{ 1908{
1437 int r; 1909 int r;
1910 unsigned long flags;
1438 1911
1439 if (!oh || !(oh->_state & _HWMOD_STATE_ENABLED)) 1912 if (!oh)
1440 return -EINVAL; 1913 return -EINVAL;
1441 1914
1442 mutex_lock(&omap_hwmod_mutex); 1915 spin_lock_irqsave(&oh->_lock, flags);
1443 r = _reset(oh); 1916 r = _reset(oh);
1444 if (!r) 1917 spin_unlock_irqrestore(&oh->_lock, flags);
1445 r = _omap_hwmod_enable(oh);
1446 mutex_unlock(&omap_hwmod_mutex);
1447 1918
1448 return r; 1919 return r;
1449} 1920}
@@ -1468,7 +1939,7 @@ int omap_hwmod_count_resources(struct omap_hwmod *oh)
1468{ 1939{
1469 int ret, i; 1940 int ret, i;
1470 1941
1471 ret = oh->mpu_irqs_cnt + oh->sdma_chs_cnt; 1942 ret = oh->mpu_irqs_cnt + oh->sdma_reqs_cnt;
1472 1943
1473 for (i = 0; i < oh->slaves_cnt; i++) 1944 for (i = 0; i < oh->slaves_cnt; i++)
1474 ret += oh->slaves[i]->addr_cnt; 1945 ret += oh->slaves[i]->addr_cnt;
@@ -1501,10 +1972,10 @@ int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res)
1501 r++; 1972 r++;
1502 } 1973 }
1503 1974
1504 for (i = 0; i < oh->sdma_chs_cnt; i++) { 1975 for (i = 0; i < oh->sdma_reqs_cnt; i++) {
1505 (res + r)->name = (oh->sdma_chs + i)->name; 1976 (res + r)->name = (oh->sdma_reqs + i)->name;
1506 (res + r)->start = (oh->sdma_chs + i)->dma_ch; 1977 (res + r)->start = (oh->sdma_reqs + i)->dma_req;
1507 (res + r)->end = (oh->sdma_chs + i)->dma_ch; 1978 (res + r)->end = (oh->sdma_reqs + i)->dma_req;
1508 (res + r)->flags = IORESOURCE_DMA; 1979 (res + r)->flags = IORESOURCE_DMA;
1509 r++; 1980 r++;
1510 } 1981 }
@@ -1515,6 +1986,7 @@ int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res)
1515 os = oh->slaves[i]; 1986 os = oh->slaves[i];
1516 1987
1517 for (j = 0; j < os->addr_cnt; j++) { 1988 for (j = 0; j < os->addr_cnt; j++) {
1989 (res + r)->name = (os->addr + j)->name;
1518 (res + r)->start = (os->addr + j)->pa_start; 1990 (res + r)->start = (os->addr + j)->pa_start;
1519 (res + r)->end = (os->addr + j)->pa_end; 1991 (res + r)->end = (os->addr + j)->pa_end;
1520 (res + r)->flags = IORESOURCE_MEM; 1992 (res + r)->flags = IORESOURCE_MEM;
@@ -1640,13 +2112,18 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh,
1640 */ 2112 */
1641int omap_hwmod_enable_wakeup(struct omap_hwmod *oh) 2113int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
1642{ 2114{
2115 unsigned long flags;
2116 u32 v;
2117
1643 if (!oh->class->sysc || 2118 if (!oh->class->sysc ||
1644 !(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) 2119 !(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
1645 return -EINVAL; 2120 return -EINVAL;
1646 2121
1647 mutex_lock(&omap_hwmod_mutex); 2122 spin_lock_irqsave(&oh->_lock, flags);
1648 _enable_wakeup(oh); 2123 v = oh->_sysc_cache;
1649 mutex_unlock(&omap_hwmod_mutex); 2124 _enable_wakeup(oh, &v);
2125 _write_sysconfig(v, oh);
2126 spin_unlock_irqrestore(&oh->_lock, flags);
1650 2127
1651 return 0; 2128 return 0;
1652} 2129}
@@ -1665,26 +2142,111 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
1665 */ 2142 */
1666int omap_hwmod_disable_wakeup(struct omap_hwmod *oh) 2143int omap_hwmod_disable_wakeup(struct omap_hwmod *oh)
1667{ 2144{
2145 unsigned long flags;
2146 u32 v;
2147
1668 if (!oh->class->sysc || 2148 if (!oh->class->sysc ||
1669 !(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) 2149 !(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
1670 return -EINVAL; 2150 return -EINVAL;
1671 2151
1672 mutex_lock(&omap_hwmod_mutex); 2152 spin_lock_irqsave(&oh->_lock, flags);
1673 _disable_wakeup(oh); 2153 v = oh->_sysc_cache;
1674 mutex_unlock(&omap_hwmod_mutex); 2154 _disable_wakeup(oh, &v);
2155 _write_sysconfig(v, oh);
2156 spin_unlock_irqrestore(&oh->_lock, flags);
1675 2157
1676 return 0; 2158 return 0;
1677} 2159}
1678 2160
1679/** 2161/**
2162 * omap_hwmod_assert_hardreset - assert the HW reset line of submodules
2163 * contained in the hwmod module.
2164 * @oh: struct omap_hwmod *
2165 * @name: name of the reset line to lookup and assert
2166 *
2167 * Some IP like dsp, ipu or iva contain processor that require
2168 * an HW reset line to be assert / deassert in order to enable fully
2169 * the IP. Returns -EINVAL if @oh is null or if the operation is not
2170 * yet supported on this OMAP; otherwise, passes along the return value
2171 * from _assert_hardreset().
2172 */
2173int omap_hwmod_assert_hardreset(struct omap_hwmod *oh, const char *name)
2174{
2175 int ret;
2176 unsigned long flags;
2177
2178 if (!oh)
2179 return -EINVAL;
2180
2181 spin_lock_irqsave(&oh->_lock, flags);
2182 ret = _assert_hardreset(oh, name);
2183 spin_unlock_irqrestore(&oh->_lock, flags);
2184
2185 return ret;
2186}
2187
2188/**
2189 * omap_hwmod_deassert_hardreset - deassert the HW reset line of submodules
2190 * contained in the hwmod module.
2191 * @oh: struct omap_hwmod *
2192 * @name: name of the reset line to look up and deassert
2193 *
2194 * Some IP like dsp, ipu or iva contain processor that require
2195 * an HW reset line to be assert / deassert in order to enable fully
2196 * the IP. Returns -EINVAL if @oh is null or if the operation is not
2197 * yet supported on this OMAP; otherwise, passes along the return value
2198 * from _deassert_hardreset().
2199 */
2200int omap_hwmod_deassert_hardreset(struct omap_hwmod *oh, const char *name)
2201{
2202 int ret;
2203 unsigned long flags;
2204
2205 if (!oh)
2206 return -EINVAL;
2207
2208 spin_lock_irqsave(&oh->_lock, flags);
2209 ret = _deassert_hardreset(oh, name);
2210 spin_unlock_irqrestore(&oh->_lock, flags);
2211
2212 return ret;
2213}
2214
2215/**
2216 * omap_hwmod_read_hardreset - read the HW reset line state of submodules
2217 * contained in the hwmod module
2218 * @oh: struct omap_hwmod *
2219 * @name: name of the reset line to look up and read
2220 *
2221 * Return the current state of the hwmod @oh's reset line named @name:
2222 * returns -EINVAL upon parameter error or if this operation
2223 * is unsupported on the current OMAP; otherwise, passes along the return
2224 * value from _read_hardreset().
2225 */
2226int omap_hwmod_read_hardreset(struct omap_hwmod *oh, const char *name)
2227{
2228 int ret;
2229 unsigned long flags;
2230
2231 if (!oh)
2232 return -EINVAL;
2233
2234 spin_lock_irqsave(&oh->_lock, flags);
2235 ret = _read_hardreset(oh, name);
2236 spin_unlock_irqrestore(&oh->_lock, flags);
2237
2238 return ret;
2239}
2240
2241
2242/**
1680 * omap_hwmod_for_each_by_class - call @fn for each hwmod of class @classname 2243 * omap_hwmod_for_each_by_class - call @fn for each hwmod of class @classname
1681 * @classname: struct omap_hwmod_class name to search for 2244 * @classname: struct omap_hwmod_class name to search for
1682 * @fn: callback function pointer to call for each hwmod in class @classname 2245 * @fn: callback function pointer to call for each hwmod in class @classname
1683 * @user: arbitrary context data to pass to the callback function 2246 * @user: arbitrary context data to pass to the callback function
1684 * 2247 *
1685 * For each omap_hwmod of class @classname, call @fn. Takes 2248 * For each omap_hwmod of class @classname, call @fn.
1686 * omap_hwmod_mutex to prevent the hwmod list from changing during the 2249 * If the callback function returns something other than
1687 * iteration. If the callback function returns something other than
1688 * zero, the iterator is terminated, and the callback function's return 2250 * zero, the iterator is terminated, and the callback function's return
1689 * value is passed back to the caller. Returns 0 upon success, -EINVAL 2251 * value is passed back to the caller. Returns 0 upon success, -EINVAL
1690 * if @classname or @fn are NULL, or passes back the error code from @fn. 2252 * if @classname or @fn are NULL, or passes back the error code from @fn.
@@ -1703,8 +2265,6 @@ int omap_hwmod_for_each_by_class(const char *classname,
1703 pr_debug("omap_hwmod: %s: looking for modules of class %s\n", 2265 pr_debug("omap_hwmod: %s: looking for modules of class %s\n",
1704 __func__, classname); 2266 __func__, classname);
1705 2267
1706 mutex_lock(&omap_hwmod_mutex);
1707
1708 list_for_each_entry(temp_oh, &omap_hwmod_list, node) { 2268 list_for_each_entry(temp_oh, &omap_hwmod_list, node) {
1709 if (!strcmp(temp_oh->class->name, classname)) { 2269 if (!strcmp(temp_oh->class->name, classname)) {
1710 pr_debug("omap_hwmod: %s: %s: calling callback fn\n", 2270 pr_debug("omap_hwmod: %s: %s: calling callback fn\n",
@@ -1715,8 +2275,6 @@ int omap_hwmod_for_each_by_class(const char *classname,
1715 } 2275 }
1716 } 2276 }
1717 2277
1718 mutex_unlock(&omap_hwmod_mutex);
1719
1720 if (ret) 2278 if (ret)
1721 pr_debug("omap_hwmod: %s: iterator terminated early: %d\n", 2279 pr_debug("omap_hwmod: %s: iterator terminated early: %d\n",
1722 __func__, ret); 2280 __func__, ret);
@@ -1724,3 +2282,90 @@ int omap_hwmod_for_each_by_class(const char *classname,
1724 return ret; 2282 return ret;
1725} 2283}
1726 2284
2285/**
2286 * omap_hwmod_set_postsetup_state - set the post-_setup() state for this hwmod
2287 * @oh: struct omap_hwmod *
2288 * @state: state that _setup() should leave the hwmod in
2289 *
2290 * Sets the hwmod state that @oh will enter at the end of _setup()
2291 * (called by omap_hwmod_setup_*()). Only valid to call between
2292 * calling omap_hwmod_register() and omap_hwmod_setup_*(). Returns
2293 * 0 upon success or -EINVAL if there is a problem with the arguments
2294 * or if the hwmod is in the wrong state.
2295 */
2296int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state)
2297{
2298 int ret;
2299 unsigned long flags;
2300
2301 if (!oh)
2302 return -EINVAL;
2303
2304 if (state != _HWMOD_STATE_DISABLED &&
2305 state != _HWMOD_STATE_ENABLED &&
2306 state != _HWMOD_STATE_IDLE)
2307 return -EINVAL;
2308
2309 spin_lock_irqsave(&oh->_lock, flags);
2310
2311 if (oh->_state != _HWMOD_STATE_REGISTERED) {
2312 ret = -EINVAL;
2313 goto ohsps_unlock;
2314 }
2315
2316 oh->_postsetup_state = state;
2317 ret = 0;
2318
2319ohsps_unlock:
2320 spin_unlock_irqrestore(&oh->_lock, flags);
2321
2322 return ret;
2323}
2324
2325/**
2326 * omap_hwmod_get_context_loss_count - get lost context count
2327 * @oh: struct omap_hwmod *
2328 *
2329 * Query the powerdomain of of @oh to get the context loss
2330 * count for this device.
2331 *
2332 * Returns the context loss count of the powerdomain assocated with @oh
2333 * upon success, or zero if no powerdomain exists for @oh.
2334 */
2335u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh)
2336{
2337 struct powerdomain *pwrdm;
2338 int ret = 0;
2339
2340 pwrdm = omap_hwmod_get_pwrdm(oh);
2341 if (pwrdm)
2342 ret = pwrdm_get_context_loss_count(pwrdm);
2343
2344 return ret;
2345}
2346
2347/**
2348 * omap_hwmod_no_setup_reset - prevent a hwmod from being reset upon setup
2349 * @oh: struct omap_hwmod *
2350 *
2351 * Prevent the hwmod @oh from being reset during the setup process.
2352 * Intended for use by board-*.c files on boards with devices that
2353 * cannot tolerate being reset. Must be called before the hwmod has
2354 * been set up. Returns 0 upon success or negative error code upon
2355 * failure.
2356 */
2357int omap_hwmod_no_setup_reset(struct omap_hwmod *oh)
2358{
2359 if (!oh)
2360 return -EINVAL;
2361
2362 if (oh->_state != _HWMOD_STATE_REGISTERED) {
2363 pr_err("omap_hwmod: %s: cannot prevent setup reset; in wrong state\n",
2364 oh->name);
2365 return -EINVAL;
2366 }
2367
2368 oh->flags |= HWMOD_INIT_NO_RESET;
2369
2370 return 0;
2371}
diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
index 3cc768e8bc04..c4d0ae87d62a 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -15,10 +15,19 @@
15#include <mach/irqs.h> 15#include <mach/irqs.h>
16#include <plat/cpu.h> 16#include <plat/cpu.h>
17#include <plat/dma.h> 17#include <plat/dma.h>
18#include <plat/serial.h>
19#include <plat/i2c.h>
20#include <plat/gpio.h>
21#include <plat/mcspi.h>
22#include <plat/dmtimer.h>
23#include <plat/l3_2xxx.h>
24#include <plat/l4_2xxx.h>
18 25
19#include "omap_hwmod_common_data.h" 26#include "omap_hwmod_common_data.h"
20 27
28#include "cm-regbits-24xx.h"
21#include "prm-regbits-24xx.h" 29#include "prm-regbits-24xx.h"
30#include "wd_timer.h"
22 31
23/* 32/*
24 * OMAP2420 hardware module integration data 33 * OMAP2420 hardware module integration data
@@ -33,6 +42,18 @@ static struct omap_hwmod omap2420_mpu_hwmod;
33static struct omap_hwmod omap2420_iva_hwmod; 42static struct omap_hwmod omap2420_iva_hwmod;
34static struct omap_hwmod omap2420_l3_main_hwmod; 43static struct omap_hwmod omap2420_l3_main_hwmod;
35static struct omap_hwmod omap2420_l4_core_hwmod; 44static struct omap_hwmod omap2420_l4_core_hwmod;
45static struct omap_hwmod omap2420_dss_core_hwmod;
46static struct omap_hwmod omap2420_dss_dispc_hwmod;
47static struct omap_hwmod omap2420_dss_rfbi_hwmod;
48static struct omap_hwmod omap2420_dss_venc_hwmod;
49static struct omap_hwmod omap2420_wd_timer2_hwmod;
50static struct omap_hwmod omap2420_gpio1_hwmod;
51static struct omap_hwmod omap2420_gpio2_hwmod;
52static struct omap_hwmod omap2420_gpio3_hwmod;
53static struct omap_hwmod omap2420_gpio4_hwmod;
54static struct omap_hwmod omap2420_dma_system_hwmod;
55static struct omap_hwmod omap2420_mcspi1_hwmod;
56static struct omap_hwmod omap2420_mcspi2_hwmod;
36 57
37/* L3 -> L4_CORE interface */ 58/* L3 -> L4_CORE interface */
38static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = { 59static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
@@ -53,6 +74,19 @@ static struct omap_hwmod_ocp_if *omap2420_l3_main_slaves[] = {
53 &omap2420_mpu__l3_main, 74 &omap2420_mpu__l3_main,
54}; 75};
55 76
77/* DSS -> l3 */
78static struct omap_hwmod_ocp_if omap2420_dss__l3 = {
79 .master = &omap2420_dss_core_hwmod,
80 .slave = &omap2420_l3_main_hwmod,
81 .fw = {
82 .omap2 = {
83 .l3_perm_bit = OMAP2_L3_CORE_FW_CONNID_DSS,
84 .flags = OMAP_FIREWALL_L3,
85 }
86 },
87 .user = OCP_USER_MPU | OCP_USER_SDMA,
88};
89
56/* Master interfaces on the L3 interconnect */ 90/* Master interfaces on the L3 interconnect */
57static struct omap_hwmod_ocp_if *omap2420_l3_main_masters[] = { 91static struct omap_hwmod_ocp_if *omap2420_l3_main_masters[] = {
58 &omap2420_l3_main__l4_core, 92 &omap2420_l3_main__l4_core,
@@ -71,6 +105,49 @@ static struct omap_hwmod omap2420_l3_main_hwmod = {
71}; 105};
72 106
73static struct omap_hwmod omap2420_l4_wkup_hwmod; 107static struct omap_hwmod omap2420_l4_wkup_hwmod;
108static struct omap_hwmod omap2420_uart1_hwmod;
109static struct omap_hwmod omap2420_uart2_hwmod;
110static struct omap_hwmod omap2420_uart3_hwmod;
111static struct omap_hwmod omap2420_i2c1_hwmod;
112static struct omap_hwmod omap2420_i2c2_hwmod;
113static struct omap_hwmod omap2420_mcbsp1_hwmod;
114static struct omap_hwmod omap2420_mcbsp2_hwmod;
115
116/* l4 core -> mcspi1 interface */
117static struct omap_hwmod_addr_space omap2420_mcspi1_addr_space[] = {
118 {
119 .pa_start = 0x48098000,
120 .pa_end = 0x480980ff,
121 .flags = ADDR_TYPE_RT,
122 },
123};
124
125static struct omap_hwmod_ocp_if omap2420_l4_core__mcspi1 = {
126 .master = &omap2420_l4_core_hwmod,
127 .slave = &omap2420_mcspi1_hwmod,
128 .clk = "mcspi1_ick",
129 .addr = omap2420_mcspi1_addr_space,
130 .addr_cnt = ARRAY_SIZE(omap2420_mcspi1_addr_space),
131 .user = OCP_USER_MPU | OCP_USER_SDMA,
132};
133
134/* l4 core -> mcspi2 interface */
135static struct omap_hwmod_addr_space omap2420_mcspi2_addr_space[] = {
136 {
137 .pa_start = 0x4809a000,
138 .pa_end = 0x4809a0ff,
139 .flags = ADDR_TYPE_RT,
140 },
141};
142
143static struct omap_hwmod_ocp_if omap2420_l4_core__mcspi2 = {
144 .master = &omap2420_l4_core_hwmod,
145 .slave = &omap2420_mcspi2_hwmod,
146 .clk = "mcspi2_ick",
147 .addr = omap2420_mcspi2_addr_space,
148 .addr_cnt = ARRAY_SIZE(omap2420_mcspi2_addr_space),
149 .user = OCP_USER_MPU | OCP_USER_SDMA,
150};
74 151
75/* L4_CORE -> L4_WKUP interface */ 152/* L4_CORE -> L4_WKUP interface */
76static struct omap_hwmod_ocp_if omap2420_l4_core__l4_wkup = { 153static struct omap_hwmod_ocp_if omap2420_l4_core__l4_wkup = {
@@ -79,6 +156,99 @@ static struct omap_hwmod_ocp_if omap2420_l4_core__l4_wkup = {
79 .user = OCP_USER_MPU | OCP_USER_SDMA, 156 .user = OCP_USER_MPU | OCP_USER_SDMA,
80}; 157};
81 158
159/* L4 CORE -> UART1 interface */
160static struct omap_hwmod_addr_space omap2420_uart1_addr_space[] = {
161 {
162 .pa_start = OMAP2_UART1_BASE,
163 .pa_end = OMAP2_UART1_BASE + SZ_8K - 1,
164 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
165 },
166};
167
168static struct omap_hwmod_ocp_if omap2_l4_core__uart1 = {
169 .master = &omap2420_l4_core_hwmod,
170 .slave = &omap2420_uart1_hwmod,
171 .clk = "uart1_ick",
172 .addr = omap2420_uart1_addr_space,
173 .addr_cnt = ARRAY_SIZE(omap2420_uart1_addr_space),
174 .user = OCP_USER_MPU | OCP_USER_SDMA,
175};
176
177/* L4 CORE -> UART2 interface */
178static struct omap_hwmod_addr_space omap2420_uart2_addr_space[] = {
179 {
180 .pa_start = OMAP2_UART2_BASE,
181 .pa_end = OMAP2_UART2_BASE + SZ_1K - 1,
182 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
183 },
184};
185
186static struct omap_hwmod_ocp_if omap2_l4_core__uart2 = {
187 .master = &omap2420_l4_core_hwmod,
188 .slave = &omap2420_uart2_hwmod,
189 .clk = "uart2_ick",
190 .addr = omap2420_uart2_addr_space,
191 .addr_cnt = ARRAY_SIZE(omap2420_uart2_addr_space),
192 .user = OCP_USER_MPU | OCP_USER_SDMA,
193};
194
195/* L4 PER -> UART3 interface */
196static struct omap_hwmod_addr_space omap2420_uart3_addr_space[] = {
197 {
198 .pa_start = OMAP2_UART3_BASE,
199 .pa_end = OMAP2_UART3_BASE + SZ_1K - 1,
200 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
201 },
202};
203
204static struct omap_hwmod_ocp_if omap2_l4_core__uart3 = {
205 .master = &omap2420_l4_core_hwmod,
206 .slave = &omap2420_uart3_hwmod,
207 .clk = "uart3_ick",
208 .addr = omap2420_uart3_addr_space,
209 .addr_cnt = ARRAY_SIZE(omap2420_uart3_addr_space),
210 .user = OCP_USER_MPU | OCP_USER_SDMA,
211};
212
213/* I2C IP block address space length (in bytes) */
214#define OMAP2_I2C_AS_LEN 128
215
216/* L4 CORE -> I2C1 interface */
217static struct omap_hwmod_addr_space omap2420_i2c1_addr_space[] = {
218 {
219 .pa_start = 0x48070000,
220 .pa_end = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
221 .flags = ADDR_TYPE_RT,
222 },
223};
224
225static struct omap_hwmod_ocp_if omap2420_l4_core__i2c1 = {
226 .master = &omap2420_l4_core_hwmod,
227 .slave = &omap2420_i2c1_hwmod,
228 .clk = "i2c1_ick",
229 .addr = omap2420_i2c1_addr_space,
230 .addr_cnt = ARRAY_SIZE(omap2420_i2c1_addr_space),
231 .user = OCP_USER_MPU | OCP_USER_SDMA,
232};
233
234/* L4 CORE -> I2C2 interface */
235static struct omap_hwmod_addr_space omap2420_i2c2_addr_space[] = {
236 {
237 .pa_start = 0x48072000,
238 .pa_end = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
239 .flags = ADDR_TYPE_RT,
240 },
241};
242
243static struct omap_hwmod_ocp_if omap2420_l4_core__i2c2 = {
244 .master = &omap2420_l4_core_hwmod,
245 .slave = &omap2420_i2c2_hwmod,
246 .clk = "i2c2_ick",
247 .addr = omap2420_i2c2_addr_space,
248 .addr_cnt = ARRAY_SIZE(omap2420_i2c2_addr_space),
249 .user = OCP_USER_MPU | OCP_USER_SDMA,
250};
251
82/* Slave interfaces on the L4_CORE interconnect */ 252/* Slave interfaces on the L4_CORE interconnect */
83static struct omap_hwmod_ocp_if *omap2420_l4_core_slaves[] = { 253static struct omap_hwmod_ocp_if *omap2420_l4_core_slaves[] = {
84 &omap2420_l3_main__l4_core, 254 &omap2420_l3_main__l4_core,
@@ -87,6 +257,11 @@ static struct omap_hwmod_ocp_if *omap2420_l4_core_slaves[] = {
87/* Master interfaces on the L4_CORE interconnect */ 257/* Master interfaces on the L4_CORE interconnect */
88static struct omap_hwmod_ocp_if *omap2420_l4_core_masters[] = { 258static struct omap_hwmod_ocp_if *omap2420_l4_core_masters[] = {
89 &omap2420_l4_core__l4_wkup, 259 &omap2420_l4_core__l4_wkup,
260 &omap2_l4_core__uart1,
261 &omap2_l4_core__uart2,
262 &omap2_l4_core__uart3,
263 &omap2420_l4_core__i2c1,
264 &omap2420_l4_core__i2c2
90}; 265};
91 266
92/* L4 CORE */ 267/* L4 CORE */
@@ -165,18 +340,1862 @@ static struct omap_hwmod omap2420_iva_hwmod = {
165 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420) 340 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
166}; 341};
167 342
343/* Timer Common */
344static struct omap_hwmod_class_sysconfig omap2420_timer_sysc = {
345 .rev_offs = 0x0000,
346 .sysc_offs = 0x0010,
347 .syss_offs = 0x0014,
348 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
349 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
350 SYSC_HAS_AUTOIDLE),
351 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
352 .sysc_fields = &omap_hwmod_sysc_type1,
353};
354
355static struct omap_hwmod_class omap2420_timer_hwmod_class = {
356 .name = "timer",
357 .sysc = &omap2420_timer_sysc,
358 .rev = OMAP_TIMER_IP_VERSION_1,
359};
360
361/* timer1 */
362static struct omap_hwmod omap2420_timer1_hwmod;
363static struct omap_hwmod_irq_info omap2420_timer1_mpu_irqs[] = {
364 { .irq = 37, },
365};
366
367static struct omap_hwmod_addr_space omap2420_timer1_addrs[] = {
368 {
369 .pa_start = 0x48028000,
370 .pa_end = 0x48028000 + SZ_1K - 1,
371 .flags = ADDR_TYPE_RT
372 },
373};
374
375/* l4_wkup -> timer1 */
376static struct omap_hwmod_ocp_if omap2420_l4_wkup__timer1 = {
377 .master = &omap2420_l4_wkup_hwmod,
378 .slave = &omap2420_timer1_hwmod,
379 .clk = "gpt1_ick",
380 .addr = omap2420_timer1_addrs,
381 .addr_cnt = ARRAY_SIZE(omap2420_timer1_addrs),
382 .user = OCP_USER_MPU | OCP_USER_SDMA,
383};
384
385/* timer1 slave port */
386static struct omap_hwmod_ocp_if *omap2420_timer1_slaves[] = {
387 &omap2420_l4_wkup__timer1,
388};
389
390/* timer1 hwmod */
391static struct omap_hwmod omap2420_timer1_hwmod = {
392 .name = "timer1",
393 .mpu_irqs = omap2420_timer1_mpu_irqs,
394 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer1_mpu_irqs),
395 .main_clk = "gpt1_fck",
396 .prcm = {
397 .omap2 = {
398 .prcm_reg_id = 1,
399 .module_bit = OMAP24XX_EN_GPT1_SHIFT,
400 .module_offs = WKUP_MOD,
401 .idlest_reg_id = 1,
402 .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
403 },
404 },
405 .slaves = omap2420_timer1_slaves,
406 .slaves_cnt = ARRAY_SIZE(omap2420_timer1_slaves),
407 .class = &omap2420_timer_hwmod_class,
408 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
409};
410
411/* timer2 */
412static struct omap_hwmod omap2420_timer2_hwmod;
413static struct omap_hwmod_irq_info omap2420_timer2_mpu_irqs[] = {
414 { .irq = 38, },
415};
416
417static struct omap_hwmod_addr_space omap2420_timer2_addrs[] = {
418 {
419 .pa_start = 0x4802a000,
420 .pa_end = 0x4802a000 + SZ_1K - 1,
421 .flags = ADDR_TYPE_RT
422 },
423};
424
425/* l4_core -> timer2 */
426static struct omap_hwmod_ocp_if omap2420_l4_core__timer2 = {
427 .master = &omap2420_l4_core_hwmod,
428 .slave = &omap2420_timer2_hwmod,
429 .clk = "gpt2_ick",
430 .addr = omap2420_timer2_addrs,
431 .addr_cnt = ARRAY_SIZE(omap2420_timer2_addrs),
432 .user = OCP_USER_MPU | OCP_USER_SDMA,
433};
434
435/* timer2 slave port */
436static struct omap_hwmod_ocp_if *omap2420_timer2_slaves[] = {
437 &omap2420_l4_core__timer2,
438};
439
440/* timer2 hwmod */
441static struct omap_hwmod omap2420_timer2_hwmod = {
442 .name = "timer2",
443 .mpu_irqs = omap2420_timer2_mpu_irqs,
444 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer2_mpu_irqs),
445 .main_clk = "gpt2_fck",
446 .prcm = {
447 .omap2 = {
448 .prcm_reg_id = 1,
449 .module_bit = OMAP24XX_EN_GPT2_SHIFT,
450 .module_offs = CORE_MOD,
451 .idlest_reg_id = 1,
452 .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
453 },
454 },
455 .slaves = omap2420_timer2_slaves,
456 .slaves_cnt = ARRAY_SIZE(omap2420_timer2_slaves),
457 .class = &omap2420_timer_hwmod_class,
458 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
459};
460
461/* timer3 */
462static struct omap_hwmod omap2420_timer3_hwmod;
463static struct omap_hwmod_irq_info omap2420_timer3_mpu_irqs[] = {
464 { .irq = 39, },
465};
466
467static struct omap_hwmod_addr_space omap2420_timer3_addrs[] = {
468 {
469 .pa_start = 0x48078000,
470 .pa_end = 0x48078000 + SZ_1K - 1,
471 .flags = ADDR_TYPE_RT
472 },
473};
474
475/* l4_core -> timer3 */
476static struct omap_hwmod_ocp_if omap2420_l4_core__timer3 = {
477 .master = &omap2420_l4_core_hwmod,
478 .slave = &omap2420_timer3_hwmod,
479 .clk = "gpt3_ick",
480 .addr = omap2420_timer3_addrs,
481 .addr_cnt = ARRAY_SIZE(omap2420_timer3_addrs),
482 .user = OCP_USER_MPU | OCP_USER_SDMA,
483};
484
485/* timer3 slave port */
486static struct omap_hwmod_ocp_if *omap2420_timer3_slaves[] = {
487 &omap2420_l4_core__timer3,
488};
489
490/* timer3 hwmod */
491static struct omap_hwmod omap2420_timer3_hwmod = {
492 .name = "timer3",
493 .mpu_irqs = omap2420_timer3_mpu_irqs,
494 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer3_mpu_irqs),
495 .main_clk = "gpt3_fck",
496 .prcm = {
497 .omap2 = {
498 .prcm_reg_id = 1,
499 .module_bit = OMAP24XX_EN_GPT3_SHIFT,
500 .module_offs = CORE_MOD,
501 .idlest_reg_id = 1,
502 .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
503 },
504 },
505 .slaves = omap2420_timer3_slaves,
506 .slaves_cnt = ARRAY_SIZE(omap2420_timer3_slaves),
507 .class = &omap2420_timer_hwmod_class,
508 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
509};
510
511/* timer4 */
512static struct omap_hwmod omap2420_timer4_hwmod;
513static struct omap_hwmod_irq_info omap2420_timer4_mpu_irqs[] = {
514 { .irq = 40, },
515};
516
517static struct omap_hwmod_addr_space omap2420_timer4_addrs[] = {
518 {
519 .pa_start = 0x4807a000,
520 .pa_end = 0x4807a000 + SZ_1K - 1,
521 .flags = ADDR_TYPE_RT
522 },
523};
524
525/* l4_core -> timer4 */
526static struct omap_hwmod_ocp_if omap2420_l4_core__timer4 = {
527 .master = &omap2420_l4_core_hwmod,
528 .slave = &omap2420_timer4_hwmod,
529 .clk = "gpt4_ick",
530 .addr = omap2420_timer4_addrs,
531 .addr_cnt = ARRAY_SIZE(omap2420_timer4_addrs),
532 .user = OCP_USER_MPU | OCP_USER_SDMA,
533};
534
535/* timer4 slave port */
536static struct omap_hwmod_ocp_if *omap2420_timer4_slaves[] = {
537 &omap2420_l4_core__timer4,
538};
539
540/* timer4 hwmod */
541static struct omap_hwmod omap2420_timer4_hwmod = {
542 .name = "timer4",
543 .mpu_irqs = omap2420_timer4_mpu_irqs,
544 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer4_mpu_irqs),
545 .main_clk = "gpt4_fck",
546 .prcm = {
547 .omap2 = {
548 .prcm_reg_id = 1,
549 .module_bit = OMAP24XX_EN_GPT4_SHIFT,
550 .module_offs = CORE_MOD,
551 .idlest_reg_id = 1,
552 .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
553 },
554 },
555 .slaves = omap2420_timer4_slaves,
556 .slaves_cnt = ARRAY_SIZE(omap2420_timer4_slaves),
557 .class = &omap2420_timer_hwmod_class,
558 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
559};
560
561/* timer5 */
562static struct omap_hwmod omap2420_timer5_hwmod;
563static struct omap_hwmod_irq_info omap2420_timer5_mpu_irqs[] = {
564 { .irq = 41, },
565};
566
567static struct omap_hwmod_addr_space omap2420_timer5_addrs[] = {
568 {
569 .pa_start = 0x4807c000,
570 .pa_end = 0x4807c000 + SZ_1K - 1,
571 .flags = ADDR_TYPE_RT
572 },
573};
574
575/* l4_core -> timer5 */
576static struct omap_hwmod_ocp_if omap2420_l4_core__timer5 = {
577 .master = &omap2420_l4_core_hwmod,
578 .slave = &omap2420_timer5_hwmod,
579 .clk = "gpt5_ick",
580 .addr = omap2420_timer5_addrs,
581 .addr_cnt = ARRAY_SIZE(omap2420_timer5_addrs),
582 .user = OCP_USER_MPU | OCP_USER_SDMA,
583};
584
585/* timer5 slave port */
586static struct omap_hwmod_ocp_if *omap2420_timer5_slaves[] = {
587 &omap2420_l4_core__timer5,
588};
589
590/* timer5 hwmod */
591static struct omap_hwmod omap2420_timer5_hwmod = {
592 .name = "timer5",
593 .mpu_irqs = omap2420_timer5_mpu_irqs,
594 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer5_mpu_irqs),
595 .main_clk = "gpt5_fck",
596 .prcm = {
597 .omap2 = {
598 .prcm_reg_id = 1,
599 .module_bit = OMAP24XX_EN_GPT5_SHIFT,
600 .module_offs = CORE_MOD,
601 .idlest_reg_id = 1,
602 .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
603 },
604 },
605 .slaves = omap2420_timer5_slaves,
606 .slaves_cnt = ARRAY_SIZE(omap2420_timer5_slaves),
607 .class = &omap2420_timer_hwmod_class,
608 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
609};
610
611
612/* timer6 */
613static struct omap_hwmod omap2420_timer6_hwmod;
614static struct omap_hwmod_irq_info omap2420_timer6_mpu_irqs[] = {
615 { .irq = 42, },
616};
617
618static struct omap_hwmod_addr_space omap2420_timer6_addrs[] = {
619 {
620 .pa_start = 0x4807e000,
621 .pa_end = 0x4807e000 + SZ_1K - 1,
622 .flags = ADDR_TYPE_RT
623 },
624};
625
626/* l4_core -> timer6 */
627static struct omap_hwmod_ocp_if omap2420_l4_core__timer6 = {
628 .master = &omap2420_l4_core_hwmod,
629 .slave = &omap2420_timer6_hwmod,
630 .clk = "gpt6_ick",
631 .addr = omap2420_timer6_addrs,
632 .addr_cnt = ARRAY_SIZE(omap2420_timer6_addrs),
633 .user = OCP_USER_MPU | OCP_USER_SDMA,
634};
635
636/* timer6 slave port */
637static struct omap_hwmod_ocp_if *omap2420_timer6_slaves[] = {
638 &omap2420_l4_core__timer6,
639};
640
641/* timer6 hwmod */
642static struct omap_hwmod omap2420_timer6_hwmod = {
643 .name = "timer6",
644 .mpu_irqs = omap2420_timer6_mpu_irqs,
645 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer6_mpu_irqs),
646 .main_clk = "gpt6_fck",
647 .prcm = {
648 .omap2 = {
649 .prcm_reg_id = 1,
650 .module_bit = OMAP24XX_EN_GPT6_SHIFT,
651 .module_offs = CORE_MOD,
652 .idlest_reg_id = 1,
653 .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
654 },
655 },
656 .slaves = omap2420_timer6_slaves,
657 .slaves_cnt = ARRAY_SIZE(omap2420_timer6_slaves),
658 .class = &omap2420_timer_hwmod_class,
659 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
660};
661
662/* timer7 */
663static struct omap_hwmod omap2420_timer7_hwmod;
664static struct omap_hwmod_irq_info omap2420_timer7_mpu_irqs[] = {
665 { .irq = 43, },
666};
667
668static struct omap_hwmod_addr_space omap2420_timer7_addrs[] = {
669 {
670 .pa_start = 0x48080000,
671 .pa_end = 0x48080000 + SZ_1K - 1,
672 .flags = ADDR_TYPE_RT
673 },
674};
675
676/* l4_core -> timer7 */
677static struct omap_hwmod_ocp_if omap2420_l4_core__timer7 = {
678 .master = &omap2420_l4_core_hwmod,
679 .slave = &omap2420_timer7_hwmod,
680 .clk = "gpt7_ick",
681 .addr = omap2420_timer7_addrs,
682 .addr_cnt = ARRAY_SIZE(omap2420_timer7_addrs),
683 .user = OCP_USER_MPU | OCP_USER_SDMA,
684};
685
686/* timer7 slave port */
687static struct omap_hwmod_ocp_if *omap2420_timer7_slaves[] = {
688 &omap2420_l4_core__timer7,
689};
690
691/* timer7 hwmod */
692static struct omap_hwmod omap2420_timer7_hwmod = {
693 .name = "timer7",
694 .mpu_irqs = omap2420_timer7_mpu_irqs,
695 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer7_mpu_irqs),
696 .main_clk = "gpt7_fck",
697 .prcm = {
698 .omap2 = {
699 .prcm_reg_id = 1,
700 .module_bit = OMAP24XX_EN_GPT7_SHIFT,
701 .module_offs = CORE_MOD,
702 .idlest_reg_id = 1,
703 .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
704 },
705 },
706 .slaves = omap2420_timer7_slaves,
707 .slaves_cnt = ARRAY_SIZE(omap2420_timer7_slaves),
708 .class = &omap2420_timer_hwmod_class,
709 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
710};
711
712/* timer8 */
713static struct omap_hwmod omap2420_timer8_hwmod;
714static struct omap_hwmod_irq_info omap2420_timer8_mpu_irqs[] = {
715 { .irq = 44, },
716};
717
718static struct omap_hwmod_addr_space omap2420_timer8_addrs[] = {
719 {
720 .pa_start = 0x48082000,
721 .pa_end = 0x48082000 + SZ_1K - 1,
722 .flags = ADDR_TYPE_RT
723 },
724};
725
726/* l4_core -> timer8 */
727static struct omap_hwmod_ocp_if omap2420_l4_core__timer8 = {
728 .master = &omap2420_l4_core_hwmod,
729 .slave = &omap2420_timer8_hwmod,
730 .clk = "gpt8_ick",
731 .addr = omap2420_timer8_addrs,
732 .addr_cnt = ARRAY_SIZE(omap2420_timer8_addrs),
733 .user = OCP_USER_MPU | OCP_USER_SDMA,
734};
735
736/* timer8 slave port */
737static struct omap_hwmod_ocp_if *omap2420_timer8_slaves[] = {
738 &omap2420_l4_core__timer8,
739};
740
741/* timer8 hwmod */
742static struct omap_hwmod omap2420_timer8_hwmod = {
743 .name = "timer8",
744 .mpu_irqs = omap2420_timer8_mpu_irqs,
745 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer8_mpu_irqs),
746 .main_clk = "gpt8_fck",
747 .prcm = {
748 .omap2 = {
749 .prcm_reg_id = 1,
750 .module_bit = OMAP24XX_EN_GPT8_SHIFT,
751 .module_offs = CORE_MOD,
752 .idlest_reg_id = 1,
753 .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
754 },
755 },
756 .slaves = omap2420_timer8_slaves,
757 .slaves_cnt = ARRAY_SIZE(omap2420_timer8_slaves),
758 .class = &omap2420_timer_hwmod_class,
759 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
760};
761
762/* timer9 */
763static struct omap_hwmod omap2420_timer9_hwmod;
764static struct omap_hwmod_irq_info omap2420_timer9_mpu_irqs[] = {
765 { .irq = 45, },
766};
767
768static struct omap_hwmod_addr_space omap2420_timer9_addrs[] = {
769 {
770 .pa_start = 0x48084000,
771 .pa_end = 0x48084000 + SZ_1K - 1,
772 .flags = ADDR_TYPE_RT
773 },
774};
775
776/* l4_core -> timer9 */
777static struct omap_hwmod_ocp_if omap2420_l4_core__timer9 = {
778 .master = &omap2420_l4_core_hwmod,
779 .slave = &omap2420_timer9_hwmod,
780 .clk = "gpt9_ick",
781 .addr = omap2420_timer9_addrs,
782 .addr_cnt = ARRAY_SIZE(omap2420_timer9_addrs),
783 .user = OCP_USER_MPU | OCP_USER_SDMA,
784};
785
786/* timer9 slave port */
787static struct omap_hwmod_ocp_if *omap2420_timer9_slaves[] = {
788 &omap2420_l4_core__timer9,
789};
790
791/* timer9 hwmod */
792static struct omap_hwmod omap2420_timer9_hwmod = {
793 .name = "timer9",
794 .mpu_irqs = omap2420_timer9_mpu_irqs,
795 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer9_mpu_irqs),
796 .main_clk = "gpt9_fck",
797 .prcm = {
798 .omap2 = {
799 .prcm_reg_id = 1,
800 .module_bit = OMAP24XX_EN_GPT9_SHIFT,
801 .module_offs = CORE_MOD,
802 .idlest_reg_id = 1,
803 .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
804 },
805 },
806 .slaves = omap2420_timer9_slaves,
807 .slaves_cnt = ARRAY_SIZE(omap2420_timer9_slaves),
808 .class = &omap2420_timer_hwmod_class,
809 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
810};
811
812/* timer10 */
813static struct omap_hwmod omap2420_timer10_hwmod;
814static struct omap_hwmod_irq_info omap2420_timer10_mpu_irqs[] = {
815 { .irq = 46, },
816};
817
818static struct omap_hwmod_addr_space omap2420_timer10_addrs[] = {
819 {
820 .pa_start = 0x48086000,
821 .pa_end = 0x48086000 + SZ_1K - 1,
822 .flags = ADDR_TYPE_RT
823 },
824};
825
826/* l4_core -> timer10 */
827static struct omap_hwmod_ocp_if omap2420_l4_core__timer10 = {
828 .master = &omap2420_l4_core_hwmod,
829 .slave = &omap2420_timer10_hwmod,
830 .clk = "gpt10_ick",
831 .addr = omap2420_timer10_addrs,
832 .addr_cnt = ARRAY_SIZE(omap2420_timer10_addrs),
833 .user = OCP_USER_MPU | OCP_USER_SDMA,
834};
835
836/* timer10 slave port */
837static struct omap_hwmod_ocp_if *omap2420_timer10_slaves[] = {
838 &omap2420_l4_core__timer10,
839};
840
841/* timer10 hwmod */
842static struct omap_hwmod omap2420_timer10_hwmod = {
843 .name = "timer10",
844 .mpu_irqs = omap2420_timer10_mpu_irqs,
845 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer10_mpu_irqs),
846 .main_clk = "gpt10_fck",
847 .prcm = {
848 .omap2 = {
849 .prcm_reg_id = 1,
850 .module_bit = OMAP24XX_EN_GPT10_SHIFT,
851 .module_offs = CORE_MOD,
852 .idlest_reg_id = 1,
853 .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
854 },
855 },
856 .slaves = omap2420_timer10_slaves,
857 .slaves_cnt = ARRAY_SIZE(omap2420_timer10_slaves),
858 .class = &omap2420_timer_hwmod_class,
859 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
860};
861
862/* timer11 */
863static struct omap_hwmod omap2420_timer11_hwmod;
864static struct omap_hwmod_irq_info omap2420_timer11_mpu_irqs[] = {
865 { .irq = 47, },
866};
867
868static struct omap_hwmod_addr_space omap2420_timer11_addrs[] = {
869 {
870 .pa_start = 0x48088000,
871 .pa_end = 0x48088000 + SZ_1K - 1,
872 .flags = ADDR_TYPE_RT
873 },
874};
875
876/* l4_core -> timer11 */
877static struct omap_hwmod_ocp_if omap2420_l4_core__timer11 = {
878 .master = &omap2420_l4_core_hwmod,
879 .slave = &omap2420_timer11_hwmod,
880 .clk = "gpt11_ick",
881 .addr = omap2420_timer11_addrs,
882 .addr_cnt = ARRAY_SIZE(omap2420_timer11_addrs),
883 .user = OCP_USER_MPU | OCP_USER_SDMA,
884};
885
886/* timer11 slave port */
887static struct omap_hwmod_ocp_if *omap2420_timer11_slaves[] = {
888 &omap2420_l4_core__timer11,
889};
890
891/* timer11 hwmod */
892static struct omap_hwmod omap2420_timer11_hwmod = {
893 .name = "timer11",
894 .mpu_irqs = omap2420_timer11_mpu_irqs,
895 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer11_mpu_irqs),
896 .main_clk = "gpt11_fck",
897 .prcm = {
898 .omap2 = {
899 .prcm_reg_id = 1,
900 .module_bit = OMAP24XX_EN_GPT11_SHIFT,
901 .module_offs = CORE_MOD,
902 .idlest_reg_id = 1,
903 .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
904 },
905 },
906 .slaves = omap2420_timer11_slaves,
907 .slaves_cnt = ARRAY_SIZE(omap2420_timer11_slaves),
908 .class = &omap2420_timer_hwmod_class,
909 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
910};
911
912/* timer12 */
913static struct omap_hwmod omap2420_timer12_hwmod;
914static struct omap_hwmod_irq_info omap2420_timer12_mpu_irqs[] = {
915 { .irq = 48, },
916};
917
918static struct omap_hwmod_addr_space omap2420_timer12_addrs[] = {
919 {
920 .pa_start = 0x4808a000,
921 .pa_end = 0x4808a000 + SZ_1K - 1,
922 .flags = ADDR_TYPE_RT
923 },
924};
925
926/* l4_core -> timer12 */
927static struct omap_hwmod_ocp_if omap2420_l4_core__timer12 = {
928 .master = &omap2420_l4_core_hwmod,
929 .slave = &omap2420_timer12_hwmod,
930 .clk = "gpt12_ick",
931 .addr = omap2420_timer12_addrs,
932 .addr_cnt = ARRAY_SIZE(omap2420_timer12_addrs),
933 .user = OCP_USER_MPU | OCP_USER_SDMA,
934};
935
936/* timer12 slave port */
937static struct omap_hwmod_ocp_if *omap2420_timer12_slaves[] = {
938 &omap2420_l4_core__timer12,
939};
940
941/* timer12 hwmod */
942static struct omap_hwmod omap2420_timer12_hwmod = {
943 .name = "timer12",
944 .mpu_irqs = omap2420_timer12_mpu_irqs,
945 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_timer12_mpu_irqs),
946 .main_clk = "gpt12_fck",
947 .prcm = {
948 .omap2 = {
949 .prcm_reg_id = 1,
950 .module_bit = OMAP24XX_EN_GPT12_SHIFT,
951 .module_offs = CORE_MOD,
952 .idlest_reg_id = 1,
953 .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
954 },
955 },
956 .slaves = omap2420_timer12_slaves,
957 .slaves_cnt = ARRAY_SIZE(omap2420_timer12_slaves),
958 .class = &omap2420_timer_hwmod_class,
959 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
960};
961
962/* l4_wkup -> wd_timer2 */
963static struct omap_hwmod_addr_space omap2420_wd_timer2_addrs[] = {
964 {
965 .pa_start = 0x48022000,
966 .pa_end = 0x4802207f,
967 .flags = ADDR_TYPE_RT
968 },
969};
970
971static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = {
972 .master = &omap2420_l4_wkup_hwmod,
973 .slave = &omap2420_wd_timer2_hwmod,
974 .clk = "mpu_wdt_ick",
975 .addr = omap2420_wd_timer2_addrs,
976 .addr_cnt = ARRAY_SIZE(omap2420_wd_timer2_addrs),
977 .user = OCP_USER_MPU | OCP_USER_SDMA,
978};
979
980/*
981 * 'wd_timer' class
982 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
983 * overflow condition
984 */
985
986static struct omap_hwmod_class_sysconfig omap2420_wd_timer_sysc = {
987 .rev_offs = 0x0000,
988 .sysc_offs = 0x0010,
989 .syss_offs = 0x0014,
990 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
991 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
992 .sysc_fields = &omap_hwmod_sysc_type1,
993};
994
995static struct omap_hwmod_class omap2420_wd_timer_hwmod_class = {
996 .name = "wd_timer",
997 .sysc = &omap2420_wd_timer_sysc,
998 .pre_shutdown = &omap2_wd_timer_disable
999};
1000
1001/* wd_timer2 */
1002static struct omap_hwmod_ocp_if *omap2420_wd_timer2_slaves[] = {
1003 &omap2420_l4_wkup__wd_timer2,
1004};
1005
1006static struct omap_hwmod omap2420_wd_timer2_hwmod = {
1007 .name = "wd_timer2",
1008 .class = &omap2420_wd_timer_hwmod_class,
1009 .main_clk = "mpu_wdt_fck",
1010 .prcm = {
1011 .omap2 = {
1012 .prcm_reg_id = 1,
1013 .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
1014 .module_offs = WKUP_MOD,
1015 .idlest_reg_id = 1,
1016 .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
1017 },
1018 },
1019 .slaves = omap2420_wd_timer2_slaves,
1020 .slaves_cnt = ARRAY_SIZE(omap2420_wd_timer2_slaves),
1021 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1022};
1023
1024/* UART */
1025
1026static struct omap_hwmod_class_sysconfig uart_sysc = {
1027 .rev_offs = 0x50,
1028 .sysc_offs = 0x54,
1029 .syss_offs = 0x58,
1030 .sysc_flags = (SYSC_HAS_SIDLEMODE |
1031 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1032 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1033 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1034 .sysc_fields = &omap_hwmod_sysc_type1,
1035};
1036
1037static struct omap_hwmod_class uart_class = {
1038 .name = "uart",
1039 .sysc = &uart_sysc,
1040};
1041
1042/* UART1 */
1043
1044static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
1045 { .irq = INT_24XX_UART1_IRQ, },
1046};
1047
1048static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
1049 { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
1050 { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
1051};
1052
1053static struct omap_hwmod_ocp_if *omap2420_uart1_slaves[] = {
1054 &omap2_l4_core__uart1,
1055};
1056
1057static struct omap_hwmod omap2420_uart1_hwmod = {
1058 .name = "uart1",
1059 .mpu_irqs = uart1_mpu_irqs,
1060 .mpu_irqs_cnt = ARRAY_SIZE(uart1_mpu_irqs),
1061 .sdma_reqs = uart1_sdma_reqs,
1062 .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
1063 .main_clk = "uart1_fck",
1064 .prcm = {
1065 .omap2 = {
1066 .module_offs = CORE_MOD,
1067 .prcm_reg_id = 1,
1068 .module_bit = OMAP24XX_EN_UART1_SHIFT,
1069 .idlest_reg_id = 1,
1070 .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
1071 },
1072 },
1073 .slaves = omap2420_uart1_slaves,
1074 .slaves_cnt = ARRAY_SIZE(omap2420_uart1_slaves),
1075 .class = &uart_class,
1076 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1077};
1078
1079/* UART2 */
1080
1081static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
1082 { .irq = INT_24XX_UART2_IRQ, },
1083};
1084
1085static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
1086 { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
1087 { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
1088};
1089
1090static struct omap_hwmod_ocp_if *omap2420_uart2_slaves[] = {
1091 &omap2_l4_core__uart2,
1092};
1093
1094static struct omap_hwmod omap2420_uart2_hwmod = {
1095 .name = "uart2",
1096 .mpu_irqs = uart2_mpu_irqs,
1097 .mpu_irqs_cnt = ARRAY_SIZE(uart2_mpu_irqs),
1098 .sdma_reqs = uart2_sdma_reqs,
1099 .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
1100 .main_clk = "uart2_fck",
1101 .prcm = {
1102 .omap2 = {
1103 .module_offs = CORE_MOD,
1104 .prcm_reg_id = 1,
1105 .module_bit = OMAP24XX_EN_UART2_SHIFT,
1106 .idlest_reg_id = 1,
1107 .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
1108 },
1109 },
1110 .slaves = omap2420_uart2_slaves,
1111 .slaves_cnt = ARRAY_SIZE(omap2420_uart2_slaves),
1112 .class = &uart_class,
1113 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1114};
1115
1116/* UART3 */
1117
1118static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
1119 { .irq = INT_24XX_UART3_IRQ, },
1120};
1121
1122static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
1123 { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
1124 { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
1125};
1126
1127static struct omap_hwmod_ocp_if *omap2420_uart3_slaves[] = {
1128 &omap2_l4_core__uart3,
1129};
1130
1131static struct omap_hwmod omap2420_uart3_hwmod = {
1132 .name = "uart3",
1133 .mpu_irqs = uart3_mpu_irqs,
1134 .mpu_irqs_cnt = ARRAY_SIZE(uart3_mpu_irqs),
1135 .sdma_reqs = uart3_sdma_reqs,
1136 .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
1137 .main_clk = "uart3_fck",
1138 .prcm = {
1139 .omap2 = {
1140 .module_offs = CORE_MOD,
1141 .prcm_reg_id = 2,
1142 .module_bit = OMAP24XX_EN_UART3_SHIFT,
1143 .idlest_reg_id = 2,
1144 .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
1145 },
1146 },
1147 .slaves = omap2420_uart3_slaves,
1148 .slaves_cnt = ARRAY_SIZE(omap2420_uart3_slaves),
1149 .class = &uart_class,
1150 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1151};
1152
1153/*
1154 * 'dss' class
1155 * display sub-system
1156 */
1157
1158static struct omap_hwmod_class_sysconfig omap2420_dss_sysc = {
1159 .rev_offs = 0x0000,
1160 .sysc_offs = 0x0010,
1161 .syss_offs = 0x0014,
1162 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1163 .sysc_fields = &omap_hwmod_sysc_type1,
1164};
1165
1166static struct omap_hwmod_class omap2420_dss_hwmod_class = {
1167 .name = "dss",
1168 .sysc = &omap2420_dss_sysc,
1169};
1170
1171static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = {
1172 { .name = "dispc", .dma_req = 5 },
1173};
1174
1175/* dss */
1176/* dss master ports */
1177static struct omap_hwmod_ocp_if *omap2420_dss_masters[] = {
1178 &omap2420_dss__l3,
1179};
1180
1181static struct omap_hwmod_addr_space omap2420_dss_addrs[] = {
1182 {
1183 .pa_start = 0x48050000,
1184 .pa_end = 0x480503FF,
1185 .flags = ADDR_TYPE_RT
1186 },
1187};
1188
1189/* l4_core -> dss */
1190static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
1191 .master = &omap2420_l4_core_hwmod,
1192 .slave = &omap2420_dss_core_hwmod,
1193 .clk = "dss_ick",
1194 .addr = omap2420_dss_addrs,
1195 .addr_cnt = ARRAY_SIZE(omap2420_dss_addrs),
1196 .fw = {
1197 .omap2 = {
1198 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
1199 .flags = OMAP_FIREWALL_L4,
1200 }
1201 },
1202 .user = OCP_USER_MPU | OCP_USER_SDMA,
1203};
1204
1205/* dss slave ports */
1206static struct omap_hwmod_ocp_if *omap2420_dss_slaves[] = {
1207 &omap2420_l4_core__dss,
1208};
1209
1210static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1211 { .role = "tv_clk", .clk = "dss_54m_fck" },
1212 { .role = "sys_clk", .clk = "dss2_fck" },
1213};
1214
1215static struct omap_hwmod omap2420_dss_core_hwmod = {
1216 .name = "dss_core",
1217 .class = &omap2420_dss_hwmod_class,
1218 .main_clk = "dss1_fck", /* instead of dss_fck */
1219 .sdma_reqs = omap2420_dss_sdma_chs,
1220 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_dss_sdma_chs),
1221 .prcm = {
1222 .omap2 = {
1223 .prcm_reg_id = 1,
1224 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1225 .module_offs = CORE_MOD,
1226 .idlest_reg_id = 1,
1227 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1228 },
1229 },
1230 .opt_clks = dss_opt_clks,
1231 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1232 .slaves = omap2420_dss_slaves,
1233 .slaves_cnt = ARRAY_SIZE(omap2420_dss_slaves),
1234 .masters = omap2420_dss_masters,
1235 .masters_cnt = ARRAY_SIZE(omap2420_dss_masters),
1236 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1237 .flags = HWMOD_NO_IDLEST,
1238};
1239
1240/*
1241 * 'dispc' class
1242 * display controller
1243 */
1244
1245static struct omap_hwmod_class_sysconfig omap2420_dispc_sysc = {
1246 .rev_offs = 0x0000,
1247 .sysc_offs = 0x0010,
1248 .syss_offs = 0x0014,
1249 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
1250 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1251 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1252 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1253 .sysc_fields = &omap_hwmod_sysc_type1,
1254};
1255
1256static struct omap_hwmod_class omap2420_dispc_hwmod_class = {
1257 .name = "dispc",
1258 .sysc = &omap2420_dispc_sysc,
1259};
1260
1261static struct omap_hwmod_irq_info omap2420_dispc_irqs[] = {
1262 { .irq = 25 },
1263};
1264
1265static struct omap_hwmod_addr_space omap2420_dss_dispc_addrs[] = {
1266 {
1267 .pa_start = 0x48050400,
1268 .pa_end = 0x480507FF,
1269 .flags = ADDR_TYPE_RT
1270 },
1271};
1272
1273/* l4_core -> dss_dispc */
1274static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
1275 .master = &omap2420_l4_core_hwmod,
1276 .slave = &omap2420_dss_dispc_hwmod,
1277 .clk = "dss_ick",
1278 .addr = omap2420_dss_dispc_addrs,
1279 .addr_cnt = ARRAY_SIZE(omap2420_dss_dispc_addrs),
1280 .fw = {
1281 .omap2 = {
1282 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION,
1283 .flags = OMAP_FIREWALL_L4,
1284 }
1285 },
1286 .user = OCP_USER_MPU | OCP_USER_SDMA,
1287};
1288
1289/* dss_dispc slave ports */
1290static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
1291 &omap2420_l4_core__dss_dispc,
1292};
1293
1294static struct omap_hwmod omap2420_dss_dispc_hwmod = {
1295 .name = "dss_dispc",
1296 .class = &omap2420_dispc_hwmod_class,
1297 .mpu_irqs = omap2420_dispc_irqs,
1298 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_dispc_irqs),
1299 .main_clk = "dss1_fck",
1300 .prcm = {
1301 .omap2 = {
1302 .prcm_reg_id = 1,
1303 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1304 .module_offs = CORE_MOD,
1305 .idlest_reg_id = 1,
1306 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1307 },
1308 },
1309 .slaves = omap2420_dss_dispc_slaves,
1310 .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
1311 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1312 .flags = HWMOD_NO_IDLEST,
1313};
1314
1315/*
1316 * 'rfbi' class
1317 * remote frame buffer interface
1318 */
1319
1320static struct omap_hwmod_class_sysconfig omap2420_rfbi_sysc = {
1321 .rev_offs = 0x0000,
1322 .sysc_offs = 0x0010,
1323 .syss_offs = 0x0014,
1324 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1325 SYSC_HAS_AUTOIDLE),
1326 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1327 .sysc_fields = &omap_hwmod_sysc_type1,
1328};
1329
1330static struct omap_hwmod_class omap2420_rfbi_hwmod_class = {
1331 .name = "rfbi",
1332 .sysc = &omap2420_rfbi_sysc,
1333};
1334
1335static struct omap_hwmod_addr_space omap2420_dss_rfbi_addrs[] = {
1336 {
1337 .pa_start = 0x48050800,
1338 .pa_end = 0x48050BFF,
1339 .flags = ADDR_TYPE_RT
1340 },
1341};
1342
1343/* l4_core -> dss_rfbi */
1344static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
1345 .master = &omap2420_l4_core_hwmod,
1346 .slave = &omap2420_dss_rfbi_hwmod,
1347 .clk = "dss_ick",
1348 .addr = omap2420_dss_rfbi_addrs,
1349 .addr_cnt = ARRAY_SIZE(omap2420_dss_rfbi_addrs),
1350 .fw = {
1351 .omap2 = {
1352 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
1353 .flags = OMAP_FIREWALL_L4,
1354 }
1355 },
1356 .user = OCP_USER_MPU | OCP_USER_SDMA,
1357};
1358
1359/* dss_rfbi slave ports */
1360static struct omap_hwmod_ocp_if *omap2420_dss_rfbi_slaves[] = {
1361 &omap2420_l4_core__dss_rfbi,
1362};
1363
1364static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
1365 .name = "dss_rfbi",
1366 .class = &omap2420_rfbi_hwmod_class,
1367 .main_clk = "dss1_fck",
1368 .prcm = {
1369 .omap2 = {
1370 .prcm_reg_id = 1,
1371 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1372 .module_offs = CORE_MOD,
1373 },
1374 },
1375 .slaves = omap2420_dss_rfbi_slaves,
1376 .slaves_cnt = ARRAY_SIZE(omap2420_dss_rfbi_slaves),
1377 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1378 .flags = HWMOD_NO_IDLEST,
1379};
1380
1381/*
1382 * 'venc' class
1383 * video encoder
1384 */
1385
1386static struct omap_hwmod_class omap2420_venc_hwmod_class = {
1387 .name = "venc",
1388};
1389
1390/* dss_venc */
1391static struct omap_hwmod_addr_space omap2420_dss_venc_addrs[] = {
1392 {
1393 .pa_start = 0x48050C00,
1394 .pa_end = 0x48050FFF,
1395 .flags = ADDR_TYPE_RT
1396 },
1397};
1398
1399/* l4_core -> dss_venc */
1400static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
1401 .master = &omap2420_l4_core_hwmod,
1402 .slave = &omap2420_dss_venc_hwmod,
1403 .clk = "dss_54m_fck",
1404 .addr = omap2420_dss_venc_addrs,
1405 .addr_cnt = ARRAY_SIZE(omap2420_dss_venc_addrs),
1406 .fw = {
1407 .omap2 = {
1408 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION,
1409 .flags = OMAP_FIREWALL_L4,
1410 }
1411 },
1412 .flags = OCPIF_SWSUP_IDLE,
1413 .user = OCP_USER_MPU | OCP_USER_SDMA,
1414};
1415
1416/* dss_venc slave ports */
1417static struct omap_hwmod_ocp_if *omap2420_dss_venc_slaves[] = {
1418 &omap2420_l4_core__dss_venc,
1419};
1420
1421static struct omap_hwmod omap2420_dss_venc_hwmod = {
1422 .name = "dss_venc",
1423 .class = &omap2420_venc_hwmod_class,
1424 .main_clk = "dss1_fck",
1425 .prcm = {
1426 .omap2 = {
1427 .prcm_reg_id = 1,
1428 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1429 .module_offs = CORE_MOD,
1430 },
1431 },
1432 .slaves = omap2420_dss_venc_slaves,
1433 .slaves_cnt = ARRAY_SIZE(omap2420_dss_venc_slaves),
1434 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1435 .flags = HWMOD_NO_IDLEST,
1436};
1437
1438/* I2C common */
1439static struct omap_hwmod_class_sysconfig i2c_sysc = {
1440 .rev_offs = 0x00,
1441 .sysc_offs = 0x20,
1442 .syss_offs = 0x10,
1443 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1444 .sysc_fields = &omap_hwmod_sysc_type1,
1445};
1446
1447static struct omap_hwmod_class i2c_class = {
1448 .name = "i2c",
1449 .sysc = &i2c_sysc,
1450};
1451
1452static struct omap_i2c_dev_attr i2c_dev_attr;
1453
1454/* I2C1 */
1455
1456static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
1457 { .irq = INT_24XX_I2C1_IRQ, },
1458};
1459
1460static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
1461 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
1462 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
1463};
1464
1465static struct omap_hwmod_ocp_if *omap2420_i2c1_slaves[] = {
1466 &omap2420_l4_core__i2c1,
1467};
1468
1469static struct omap_hwmod omap2420_i2c1_hwmod = {
1470 .name = "i2c1",
1471 .mpu_irqs = i2c1_mpu_irqs,
1472 .mpu_irqs_cnt = ARRAY_SIZE(i2c1_mpu_irqs),
1473 .sdma_reqs = i2c1_sdma_reqs,
1474 .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
1475 .main_clk = "i2c1_fck",
1476 .prcm = {
1477 .omap2 = {
1478 .module_offs = CORE_MOD,
1479 .prcm_reg_id = 1,
1480 .module_bit = OMAP2420_EN_I2C1_SHIFT,
1481 .idlest_reg_id = 1,
1482 .idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
1483 },
1484 },
1485 .slaves = omap2420_i2c1_slaves,
1486 .slaves_cnt = ARRAY_SIZE(omap2420_i2c1_slaves),
1487 .class = &i2c_class,
1488 .dev_attr = &i2c_dev_attr,
1489 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1490 .flags = HWMOD_16BIT_REG,
1491};
1492
1493/* I2C2 */
1494
1495static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
1496 { .irq = INT_24XX_I2C2_IRQ, },
1497};
1498
1499static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
1500 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
1501 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
1502};
1503
1504static struct omap_hwmod_ocp_if *omap2420_i2c2_slaves[] = {
1505 &omap2420_l4_core__i2c2,
1506};
1507
1508static struct omap_hwmod omap2420_i2c2_hwmod = {
1509 .name = "i2c2",
1510 .mpu_irqs = i2c2_mpu_irqs,
1511 .mpu_irqs_cnt = ARRAY_SIZE(i2c2_mpu_irqs),
1512 .sdma_reqs = i2c2_sdma_reqs,
1513 .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
1514 .main_clk = "i2c2_fck",
1515 .prcm = {
1516 .omap2 = {
1517 .module_offs = CORE_MOD,
1518 .prcm_reg_id = 1,
1519 .module_bit = OMAP2420_EN_I2C2_SHIFT,
1520 .idlest_reg_id = 1,
1521 .idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
1522 },
1523 },
1524 .slaves = omap2420_i2c2_slaves,
1525 .slaves_cnt = ARRAY_SIZE(omap2420_i2c2_slaves),
1526 .class = &i2c_class,
1527 .dev_attr = &i2c_dev_attr,
1528 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1529 .flags = HWMOD_16BIT_REG,
1530};
1531
1532/* l4_wkup -> gpio1 */
1533static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
1534 {
1535 .pa_start = 0x48018000,
1536 .pa_end = 0x480181ff,
1537 .flags = ADDR_TYPE_RT
1538 },
1539};
1540
1541static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
1542 .master = &omap2420_l4_wkup_hwmod,
1543 .slave = &omap2420_gpio1_hwmod,
1544 .clk = "gpios_ick",
1545 .addr = omap2420_gpio1_addr_space,
1546 .addr_cnt = ARRAY_SIZE(omap2420_gpio1_addr_space),
1547 .user = OCP_USER_MPU | OCP_USER_SDMA,
1548};
1549
1550/* l4_wkup -> gpio2 */
1551static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
1552 {
1553 .pa_start = 0x4801a000,
1554 .pa_end = 0x4801a1ff,
1555 .flags = ADDR_TYPE_RT
1556 },
1557};
1558
1559static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
1560 .master = &omap2420_l4_wkup_hwmod,
1561 .slave = &omap2420_gpio2_hwmod,
1562 .clk = "gpios_ick",
1563 .addr = omap2420_gpio2_addr_space,
1564 .addr_cnt = ARRAY_SIZE(omap2420_gpio2_addr_space),
1565 .user = OCP_USER_MPU | OCP_USER_SDMA,
1566};
1567
1568/* l4_wkup -> gpio3 */
1569static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
1570 {
1571 .pa_start = 0x4801c000,
1572 .pa_end = 0x4801c1ff,
1573 .flags = ADDR_TYPE_RT
1574 },
1575};
1576
1577static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
1578 .master = &omap2420_l4_wkup_hwmod,
1579 .slave = &omap2420_gpio3_hwmod,
1580 .clk = "gpios_ick",
1581 .addr = omap2420_gpio3_addr_space,
1582 .addr_cnt = ARRAY_SIZE(omap2420_gpio3_addr_space),
1583 .user = OCP_USER_MPU | OCP_USER_SDMA,
1584};
1585
1586/* l4_wkup -> gpio4 */
1587static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
1588 {
1589 .pa_start = 0x4801e000,
1590 .pa_end = 0x4801e1ff,
1591 .flags = ADDR_TYPE_RT
1592 },
1593};
1594
1595static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
1596 .master = &omap2420_l4_wkup_hwmod,
1597 .slave = &omap2420_gpio4_hwmod,
1598 .clk = "gpios_ick",
1599 .addr = omap2420_gpio4_addr_space,
1600 .addr_cnt = ARRAY_SIZE(omap2420_gpio4_addr_space),
1601 .user = OCP_USER_MPU | OCP_USER_SDMA,
1602};
1603
1604/* gpio dev_attr */
1605static struct omap_gpio_dev_attr gpio_dev_attr = {
1606 .bank_width = 32,
1607 .dbck_flag = false,
1608};
1609
1610static struct omap_hwmod_class_sysconfig omap242x_gpio_sysc = {
1611 .rev_offs = 0x0000,
1612 .sysc_offs = 0x0010,
1613 .syss_offs = 0x0014,
1614 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1615 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1616 SYSS_HAS_RESET_STATUS),
1617 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1618 .sysc_fields = &omap_hwmod_sysc_type1,
1619};
1620
1621/*
1622 * 'gpio' class
1623 * general purpose io module
1624 */
1625static struct omap_hwmod_class omap242x_gpio_hwmod_class = {
1626 .name = "gpio",
1627 .sysc = &omap242x_gpio_sysc,
1628 .rev = 0,
1629};
1630
1631/* gpio1 */
1632static struct omap_hwmod_irq_info omap242x_gpio1_irqs[] = {
1633 { .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
1634};
1635
1636static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = {
1637 &omap2420_l4_wkup__gpio1,
1638};
1639
1640static struct omap_hwmod omap2420_gpio1_hwmod = {
1641 .name = "gpio1",
1642 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1643 .mpu_irqs = omap242x_gpio1_irqs,
1644 .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio1_irqs),
1645 .main_clk = "gpios_fck",
1646 .prcm = {
1647 .omap2 = {
1648 .prcm_reg_id = 1,
1649 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1650 .module_offs = WKUP_MOD,
1651 .idlest_reg_id = 1,
1652 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1653 },
1654 },
1655 .slaves = omap2420_gpio1_slaves,
1656 .slaves_cnt = ARRAY_SIZE(omap2420_gpio1_slaves),
1657 .class = &omap242x_gpio_hwmod_class,
1658 .dev_attr = &gpio_dev_attr,
1659 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1660};
1661
1662/* gpio2 */
1663static struct omap_hwmod_irq_info omap242x_gpio2_irqs[] = {
1664 { .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
1665};
1666
1667static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = {
1668 &omap2420_l4_wkup__gpio2,
1669};
1670
1671static struct omap_hwmod omap2420_gpio2_hwmod = {
1672 .name = "gpio2",
1673 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1674 .mpu_irqs = omap242x_gpio2_irqs,
1675 .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio2_irqs),
1676 .main_clk = "gpios_fck",
1677 .prcm = {
1678 .omap2 = {
1679 .prcm_reg_id = 1,
1680 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1681 .module_offs = WKUP_MOD,
1682 .idlest_reg_id = 1,
1683 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1684 },
1685 },
1686 .slaves = omap2420_gpio2_slaves,
1687 .slaves_cnt = ARRAY_SIZE(omap2420_gpio2_slaves),
1688 .class = &omap242x_gpio_hwmod_class,
1689 .dev_attr = &gpio_dev_attr,
1690 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1691};
1692
1693/* gpio3 */
1694static struct omap_hwmod_irq_info omap242x_gpio3_irqs[] = {
1695 { .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
1696};
1697
1698static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = {
1699 &omap2420_l4_wkup__gpio3,
1700};
1701
1702static struct omap_hwmod omap2420_gpio3_hwmod = {
1703 .name = "gpio3",
1704 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1705 .mpu_irqs = omap242x_gpio3_irqs,
1706 .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio3_irqs),
1707 .main_clk = "gpios_fck",
1708 .prcm = {
1709 .omap2 = {
1710 .prcm_reg_id = 1,
1711 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1712 .module_offs = WKUP_MOD,
1713 .idlest_reg_id = 1,
1714 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1715 },
1716 },
1717 .slaves = omap2420_gpio3_slaves,
1718 .slaves_cnt = ARRAY_SIZE(omap2420_gpio3_slaves),
1719 .class = &omap242x_gpio_hwmod_class,
1720 .dev_attr = &gpio_dev_attr,
1721 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1722};
1723
1724/* gpio4 */
1725static struct omap_hwmod_irq_info omap242x_gpio4_irqs[] = {
1726 { .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
1727};
1728
1729static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = {
1730 &omap2420_l4_wkup__gpio4,
1731};
1732
1733static struct omap_hwmod omap2420_gpio4_hwmod = {
1734 .name = "gpio4",
1735 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1736 .mpu_irqs = omap242x_gpio4_irqs,
1737 .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio4_irqs),
1738 .main_clk = "gpios_fck",
1739 .prcm = {
1740 .omap2 = {
1741 .prcm_reg_id = 1,
1742 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1743 .module_offs = WKUP_MOD,
1744 .idlest_reg_id = 1,
1745 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1746 },
1747 },
1748 .slaves = omap2420_gpio4_slaves,
1749 .slaves_cnt = ARRAY_SIZE(omap2420_gpio4_slaves),
1750 .class = &omap242x_gpio_hwmod_class,
1751 .dev_attr = &gpio_dev_attr,
1752 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1753};
1754
1755/* system dma */
1756static struct omap_hwmod_class_sysconfig omap2420_dma_sysc = {
1757 .rev_offs = 0x0000,
1758 .sysc_offs = 0x002c,
1759 .syss_offs = 0x0028,
1760 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
1761 SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
1762 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1763 .idlemodes = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1764 .sysc_fields = &omap_hwmod_sysc_type1,
1765};
1766
1767static struct omap_hwmod_class omap2420_dma_hwmod_class = {
1768 .name = "dma",
1769 .sysc = &omap2420_dma_sysc,
1770};
1771
1772/* dma attributes */
1773static struct omap_dma_dev_attr dma_dev_attr = {
1774 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1775 IS_CSSA_32 | IS_CDSA_32,
1776 .lch_count = 32,
1777};
1778
1779static struct omap_hwmod_irq_info omap2420_dma_system_irqs[] = {
1780 { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
1781 { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
1782 { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
1783 { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
1784};
1785
1786static struct omap_hwmod_addr_space omap2420_dma_system_addrs[] = {
1787 {
1788 .pa_start = 0x48056000,
1789 .pa_end = 0x48056fff,
1790 .flags = ADDR_TYPE_RT
1791 },
1792};
1793
1794/* dma_system -> L3 */
1795static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
1796 .master = &omap2420_dma_system_hwmod,
1797 .slave = &omap2420_l3_main_hwmod,
1798 .clk = "core_l3_ck",
1799 .user = OCP_USER_MPU | OCP_USER_SDMA,
1800};
1801
1802/* dma_system master ports */
1803static struct omap_hwmod_ocp_if *omap2420_dma_system_masters[] = {
1804 &omap2420_dma_system__l3,
1805};
1806
1807/* l4_core -> dma_system */
1808static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
1809 .master = &omap2420_l4_core_hwmod,
1810 .slave = &omap2420_dma_system_hwmod,
1811 .clk = "sdma_ick",
1812 .addr = omap2420_dma_system_addrs,
1813 .addr_cnt = ARRAY_SIZE(omap2420_dma_system_addrs),
1814 .user = OCP_USER_MPU | OCP_USER_SDMA,
1815};
1816
1817/* dma_system slave ports */
1818static struct omap_hwmod_ocp_if *omap2420_dma_system_slaves[] = {
1819 &omap2420_l4_core__dma_system,
1820};
1821
1822static struct omap_hwmod omap2420_dma_system_hwmod = {
1823 .name = "dma",
1824 .class = &omap2420_dma_hwmod_class,
1825 .mpu_irqs = omap2420_dma_system_irqs,
1826 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_dma_system_irqs),
1827 .main_clk = "core_l3_ck",
1828 .slaves = omap2420_dma_system_slaves,
1829 .slaves_cnt = ARRAY_SIZE(omap2420_dma_system_slaves),
1830 .masters = omap2420_dma_system_masters,
1831 .masters_cnt = ARRAY_SIZE(omap2420_dma_system_masters),
1832 .dev_attr = &dma_dev_attr,
1833 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1834 .flags = HWMOD_NO_IDLEST,
1835};
1836
1837/*
1838 * 'mailbox' class
1839 * mailbox module allowing communication between the on-chip processors
1840 * using a queued mailbox-interrupt mechanism.
1841 */
1842
1843static struct omap_hwmod_class_sysconfig omap2420_mailbox_sysc = {
1844 .rev_offs = 0x000,
1845 .sysc_offs = 0x010,
1846 .syss_offs = 0x014,
1847 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1848 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1849 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1850 .sysc_fields = &omap_hwmod_sysc_type1,
1851};
1852
1853static struct omap_hwmod_class omap2420_mailbox_hwmod_class = {
1854 .name = "mailbox",
1855 .sysc = &omap2420_mailbox_sysc,
1856};
1857
1858/* mailbox */
1859static struct omap_hwmod omap2420_mailbox_hwmod;
1860static struct omap_hwmod_irq_info omap2420_mailbox_irqs[] = {
1861 { .name = "dsp", .irq = 26 },
1862 { .name = "iva", .irq = 34 },
1863};
1864
1865static struct omap_hwmod_addr_space omap2420_mailbox_addrs[] = {
1866 {
1867 .pa_start = 0x48094000,
1868 .pa_end = 0x480941ff,
1869 .flags = ADDR_TYPE_RT,
1870 },
1871};
1872
1873/* l4_core -> mailbox */
1874static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
1875 .master = &omap2420_l4_core_hwmod,
1876 .slave = &omap2420_mailbox_hwmod,
1877 .addr = omap2420_mailbox_addrs,
1878 .addr_cnt = ARRAY_SIZE(omap2420_mailbox_addrs),
1879 .user = OCP_USER_MPU | OCP_USER_SDMA,
1880};
1881
1882/* mailbox slave ports */
1883static struct omap_hwmod_ocp_if *omap2420_mailbox_slaves[] = {
1884 &omap2420_l4_core__mailbox,
1885};
1886
1887static struct omap_hwmod omap2420_mailbox_hwmod = {
1888 .name = "mailbox",
1889 .class = &omap2420_mailbox_hwmod_class,
1890 .mpu_irqs = omap2420_mailbox_irqs,
1891 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_mailbox_irqs),
1892 .main_clk = "mailboxes_ick",
1893 .prcm = {
1894 .omap2 = {
1895 .prcm_reg_id = 1,
1896 .module_bit = OMAP24XX_EN_MAILBOXES_SHIFT,
1897 .module_offs = CORE_MOD,
1898 .idlest_reg_id = 1,
1899 .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
1900 },
1901 },
1902 .slaves = omap2420_mailbox_slaves,
1903 .slaves_cnt = ARRAY_SIZE(omap2420_mailbox_slaves),
1904 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1905};
1906
1907/*
1908 * 'mcspi' class
1909 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1910 * bus
1911 */
1912
1913static struct omap_hwmod_class_sysconfig omap2420_mcspi_sysc = {
1914 .rev_offs = 0x0000,
1915 .sysc_offs = 0x0010,
1916 .syss_offs = 0x0014,
1917 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1918 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1919 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1920 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1921 .sysc_fields = &omap_hwmod_sysc_type1,
1922};
1923
1924static struct omap_hwmod_class omap2420_mcspi_class = {
1925 .name = "mcspi",
1926 .sysc = &omap2420_mcspi_sysc,
1927 .rev = OMAP2_MCSPI_REV,
1928};
1929
1930/* mcspi1 */
1931static struct omap_hwmod_irq_info omap2420_mcspi1_mpu_irqs[] = {
1932 { .irq = 65 },
1933};
1934
1935static struct omap_hwmod_dma_info omap2420_mcspi1_sdma_reqs[] = {
1936 { .name = "tx0", .dma_req = 35 }, /* DMA_SPI1_TX0 */
1937 { .name = "rx0", .dma_req = 36 }, /* DMA_SPI1_RX0 */
1938 { .name = "tx1", .dma_req = 37 }, /* DMA_SPI1_TX1 */
1939 { .name = "rx1", .dma_req = 38 }, /* DMA_SPI1_RX1 */
1940 { .name = "tx2", .dma_req = 39 }, /* DMA_SPI1_TX2 */
1941 { .name = "rx2", .dma_req = 40 }, /* DMA_SPI1_RX2 */
1942 { .name = "tx3", .dma_req = 41 }, /* DMA_SPI1_TX3 */
1943 { .name = "rx3", .dma_req = 42 }, /* DMA_SPI1_RX3 */
1944};
1945
1946static struct omap_hwmod_ocp_if *omap2420_mcspi1_slaves[] = {
1947 &omap2420_l4_core__mcspi1,
1948};
1949
1950static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
1951 .num_chipselect = 4,
1952};
1953
1954static struct omap_hwmod omap2420_mcspi1_hwmod = {
1955 .name = "mcspi1_hwmod",
1956 .mpu_irqs = omap2420_mcspi1_mpu_irqs,
1957 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_mcspi1_mpu_irqs),
1958 .sdma_reqs = omap2420_mcspi1_sdma_reqs,
1959 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcspi1_sdma_reqs),
1960 .main_clk = "mcspi1_fck",
1961 .prcm = {
1962 .omap2 = {
1963 .module_offs = CORE_MOD,
1964 .prcm_reg_id = 1,
1965 .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
1966 .idlest_reg_id = 1,
1967 .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
1968 },
1969 },
1970 .slaves = omap2420_mcspi1_slaves,
1971 .slaves_cnt = ARRAY_SIZE(omap2420_mcspi1_slaves),
1972 .class = &omap2420_mcspi_class,
1973 .dev_attr = &omap_mcspi1_dev_attr,
1974 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1975};
1976
1977/* mcspi2 */
1978static struct omap_hwmod_irq_info omap2420_mcspi2_mpu_irqs[] = {
1979 { .irq = 66 },
1980};
1981
1982static struct omap_hwmod_dma_info omap2420_mcspi2_sdma_reqs[] = {
1983 { .name = "tx0", .dma_req = 43 }, /* DMA_SPI2_TX0 */
1984 { .name = "rx0", .dma_req = 44 }, /* DMA_SPI2_RX0 */
1985 { .name = "tx1", .dma_req = 45 }, /* DMA_SPI2_TX1 */
1986 { .name = "rx1", .dma_req = 46 }, /* DMA_SPI2_RX1 */
1987};
1988
1989static struct omap_hwmod_ocp_if *omap2420_mcspi2_slaves[] = {
1990 &omap2420_l4_core__mcspi2,
1991};
1992
1993static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
1994 .num_chipselect = 2,
1995};
1996
1997static struct omap_hwmod omap2420_mcspi2_hwmod = {
1998 .name = "mcspi2_hwmod",
1999 .mpu_irqs = omap2420_mcspi2_mpu_irqs,
2000 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_mcspi2_mpu_irqs),
2001 .sdma_reqs = omap2420_mcspi2_sdma_reqs,
2002 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcspi2_sdma_reqs),
2003 .main_clk = "mcspi2_fck",
2004 .prcm = {
2005 .omap2 = {
2006 .module_offs = CORE_MOD,
2007 .prcm_reg_id = 1,
2008 .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
2009 .idlest_reg_id = 1,
2010 .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
2011 },
2012 },
2013 .slaves = omap2420_mcspi2_slaves,
2014 .slaves_cnt = ARRAY_SIZE(omap2420_mcspi2_slaves),
2015 .class = &omap2420_mcspi_class,
2016 .dev_attr = &omap_mcspi2_dev_attr,
2017 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
2018};
2019
2020/*
2021 * 'mcbsp' class
2022 * multi channel buffered serial port controller
2023 */
2024
2025static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
2026 .name = "mcbsp",
2027};
2028
2029/* mcbsp1 */
2030static struct omap_hwmod_irq_info omap2420_mcbsp1_irqs[] = {
2031 { .name = "tx", .irq = 59 },
2032 { .name = "rx", .irq = 60 },
2033};
2034
2035static struct omap_hwmod_dma_info omap2420_mcbsp1_sdma_chs[] = {
2036 { .name = "rx", .dma_req = 32 },
2037 { .name = "tx", .dma_req = 31 },
2038};
2039
2040static struct omap_hwmod_addr_space omap2420_mcbsp1_addrs[] = {
2041 {
2042 .name = "mpu",
2043 .pa_start = 0x48074000,
2044 .pa_end = 0x480740ff,
2045 .flags = ADDR_TYPE_RT
2046 },
2047};
2048
2049/* l4_core -> mcbsp1 */
2050static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
2051 .master = &omap2420_l4_core_hwmod,
2052 .slave = &omap2420_mcbsp1_hwmod,
2053 .clk = "mcbsp1_ick",
2054 .addr = omap2420_mcbsp1_addrs,
2055 .addr_cnt = ARRAY_SIZE(omap2420_mcbsp1_addrs),
2056 .user = OCP_USER_MPU | OCP_USER_SDMA,
2057};
2058
2059/* mcbsp1 slave ports */
2060static struct omap_hwmod_ocp_if *omap2420_mcbsp1_slaves[] = {
2061 &omap2420_l4_core__mcbsp1,
2062};
2063
2064static struct omap_hwmod omap2420_mcbsp1_hwmod = {
2065 .name = "mcbsp1",
2066 .class = &omap2420_mcbsp_hwmod_class,
2067 .mpu_irqs = omap2420_mcbsp1_irqs,
2068 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_mcbsp1_irqs),
2069 .sdma_reqs = omap2420_mcbsp1_sdma_chs,
2070 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcbsp1_sdma_chs),
2071 .main_clk = "mcbsp1_fck",
2072 .prcm = {
2073 .omap2 = {
2074 .prcm_reg_id = 1,
2075 .module_bit = OMAP24XX_EN_MCBSP1_SHIFT,
2076 .module_offs = CORE_MOD,
2077 .idlest_reg_id = 1,
2078 .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
2079 },
2080 },
2081 .slaves = omap2420_mcbsp1_slaves,
2082 .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp1_slaves),
2083 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
2084};
2085
2086/* mcbsp2 */
2087static struct omap_hwmod_irq_info omap2420_mcbsp2_irqs[] = {
2088 { .name = "tx", .irq = 62 },
2089 { .name = "rx", .irq = 63 },
2090};
2091
2092static struct omap_hwmod_dma_info omap2420_mcbsp2_sdma_chs[] = {
2093 { .name = "rx", .dma_req = 34 },
2094 { .name = "tx", .dma_req = 33 },
2095};
2096
2097static struct omap_hwmod_addr_space omap2420_mcbsp2_addrs[] = {
2098 {
2099 .name = "mpu",
2100 .pa_start = 0x48076000,
2101 .pa_end = 0x480760ff,
2102 .flags = ADDR_TYPE_RT
2103 },
2104};
2105
2106/* l4_core -> mcbsp2 */
2107static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
2108 .master = &omap2420_l4_core_hwmod,
2109 .slave = &omap2420_mcbsp2_hwmod,
2110 .clk = "mcbsp2_ick",
2111 .addr = omap2420_mcbsp2_addrs,
2112 .addr_cnt = ARRAY_SIZE(omap2420_mcbsp2_addrs),
2113 .user = OCP_USER_MPU | OCP_USER_SDMA,
2114};
2115
2116/* mcbsp2 slave ports */
2117static struct omap_hwmod_ocp_if *omap2420_mcbsp2_slaves[] = {
2118 &omap2420_l4_core__mcbsp2,
2119};
2120
2121static struct omap_hwmod omap2420_mcbsp2_hwmod = {
2122 .name = "mcbsp2",
2123 .class = &omap2420_mcbsp_hwmod_class,
2124 .mpu_irqs = omap2420_mcbsp2_irqs,
2125 .mpu_irqs_cnt = ARRAY_SIZE(omap2420_mcbsp2_irqs),
2126 .sdma_reqs = omap2420_mcbsp2_sdma_chs,
2127 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcbsp2_sdma_chs),
2128 .main_clk = "mcbsp2_fck",
2129 .prcm = {
2130 .omap2 = {
2131 .prcm_reg_id = 1,
2132 .module_bit = OMAP24XX_EN_MCBSP2_SHIFT,
2133 .module_offs = CORE_MOD,
2134 .idlest_reg_id = 1,
2135 .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
2136 },
2137 },
2138 .slaves = omap2420_mcbsp2_slaves,
2139 .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp2_slaves),
2140 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
2141};
2142
168static __initdata struct omap_hwmod *omap2420_hwmods[] = { 2143static __initdata struct omap_hwmod *omap2420_hwmods[] = {
169 &omap2420_l3_main_hwmod, 2144 &omap2420_l3_main_hwmod,
170 &omap2420_l4_core_hwmod, 2145 &omap2420_l4_core_hwmod,
171 &omap2420_l4_wkup_hwmod, 2146 &omap2420_l4_wkup_hwmod,
172 &omap2420_mpu_hwmod, 2147 &omap2420_mpu_hwmod,
173 &omap2420_iva_hwmod, 2148 &omap2420_iva_hwmod,
2149
2150 &omap2420_timer1_hwmod,
2151 &omap2420_timer2_hwmod,
2152 &omap2420_timer3_hwmod,
2153 &omap2420_timer4_hwmod,
2154 &omap2420_timer5_hwmod,
2155 &omap2420_timer6_hwmod,
2156 &omap2420_timer7_hwmod,
2157 &omap2420_timer8_hwmod,
2158 &omap2420_timer9_hwmod,
2159 &omap2420_timer10_hwmod,
2160 &omap2420_timer11_hwmod,
2161 &omap2420_timer12_hwmod,
2162
2163 &omap2420_wd_timer2_hwmod,
2164 &omap2420_uart1_hwmod,
2165 &omap2420_uart2_hwmod,
2166 &omap2420_uart3_hwmod,
2167 /* dss class */
2168 &omap2420_dss_core_hwmod,
2169 &omap2420_dss_dispc_hwmod,
2170 &omap2420_dss_rfbi_hwmod,
2171 &omap2420_dss_venc_hwmod,
2172 /* i2c class */
2173 &omap2420_i2c1_hwmod,
2174 &omap2420_i2c2_hwmod,
2175
2176 /* gpio class */
2177 &omap2420_gpio1_hwmod,
2178 &omap2420_gpio2_hwmod,
2179 &omap2420_gpio3_hwmod,
2180 &omap2420_gpio4_hwmod,
2181
2182 /* dma_system class*/
2183 &omap2420_dma_system_hwmod,
2184
2185 /* mailbox class */
2186 &omap2420_mailbox_hwmod,
2187
2188 /* mcbsp class */
2189 &omap2420_mcbsp1_hwmod,
2190 &omap2420_mcbsp2_hwmod,
2191
2192 /* mcspi class */
2193 &omap2420_mcspi1_hwmod,
2194 &omap2420_mcspi2_hwmod,
174 NULL, 2195 NULL,
175}; 2196};
176 2197
177int __init omap2420_hwmod_init(void) 2198int __init omap2420_hwmod_init(void)
178{ 2199{
179 return omap_hwmod_init(omap2420_hwmods); 2200 return omap_hwmod_register(omap2420_hwmods);
180} 2201}
181
182
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 4526628ed287..9682dd519f8d 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -15,10 +15,20 @@
15#include <mach/irqs.h> 15#include <mach/irqs.h>
16#include <plat/cpu.h> 16#include <plat/cpu.h>
17#include <plat/dma.h> 17#include <plat/dma.h>
18#include <plat/serial.h>
19#include <plat/i2c.h>
20#include <plat/gpio.h>
21#include <plat/mcbsp.h>
22#include <plat/mcspi.h>
23#include <plat/dmtimer.h>
24#include <plat/mmc.h>
25#include <plat/l3_2xxx.h>
18 26
19#include "omap_hwmod_common_data.h" 27#include "omap_hwmod_common_data.h"
20 28
21#include "prm-regbits-24xx.h" 29#include "prm-regbits-24xx.h"
30#include "cm-regbits-24xx.h"
31#include "wd_timer.h"
22 32
23/* 33/*
24 * OMAP2430 hardware module integration data 34 * OMAP2430 hardware module integration data
@@ -33,6 +43,27 @@ static struct omap_hwmod omap2430_mpu_hwmod;
33static struct omap_hwmod omap2430_iva_hwmod; 43static struct omap_hwmod omap2430_iva_hwmod;
34static struct omap_hwmod omap2430_l3_main_hwmod; 44static struct omap_hwmod omap2430_l3_main_hwmod;
35static struct omap_hwmod omap2430_l4_core_hwmod; 45static struct omap_hwmod omap2430_l4_core_hwmod;
46static struct omap_hwmod omap2430_dss_core_hwmod;
47static struct omap_hwmod omap2430_dss_dispc_hwmod;
48static struct omap_hwmod omap2430_dss_rfbi_hwmod;
49static struct omap_hwmod omap2430_dss_venc_hwmod;
50static struct omap_hwmod omap2430_wd_timer2_hwmod;
51static struct omap_hwmod omap2430_gpio1_hwmod;
52static struct omap_hwmod omap2430_gpio2_hwmod;
53static struct omap_hwmod omap2430_gpio3_hwmod;
54static struct omap_hwmod omap2430_gpio4_hwmod;
55static struct omap_hwmod omap2430_gpio5_hwmod;
56static struct omap_hwmod omap2430_dma_system_hwmod;
57static struct omap_hwmod omap2430_mcbsp1_hwmod;
58static struct omap_hwmod omap2430_mcbsp2_hwmod;
59static struct omap_hwmod omap2430_mcbsp3_hwmod;
60static struct omap_hwmod omap2430_mcbsp4_hwmod;
61static struct omap_hwmod omap2430_mcbsp5_hwmod;
62static struct omap_hwmod omap2430_mcspi1_hwmod;
63static struct omap_hwmod omap2430_mcspi2_hwmod;
64static struct omap_hwmod omap2430_mcspi3_hwmod;
65static struct omap_hwmod omap2430_mmc1_hwmod;
66static struct omap_hwmod omap2430_mmc2_hwmod;
36 67
37/* L3 -> L4_CORE interface */ 68/* L3 -> L4_CORE interface */
38static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = { 69static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = {
@@ -53,6 +84,19 @@ static struct omap_hwmod_ocp_if *omap2430_l3_main_slaves[] = {
53 &omap2430_mpu__l3_main, 84 &omap2430_mpu__l3_main,
54}; 85};
55 86
87/* DSS -> l3 */
88static struct omap_hwmod_ocp_if omap2430_dss__l3 = {
89 .master = &omap2430_dss_core_hwmod,
90 .slave = &omap2430_l3_main_hwmod,
91 .fw = {
92 .omap2 = {
93 .l3_perm_bit = OMAP2_L3_CORE_FW_CONNID_DSS,
94 .flags = OMAP_FIREWALL_L3,
95 }
96 },
97 .user = OCP_USER_MPU | OCP_USER_SDMA,
98};
99
56/* Master interfaces on the L3 interconnect */ 100/* Master interfaces on the L3 interconnect */
57static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = { 101static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = {
58 &omap2430_l3_main__l4_core, 102 &omap2430_l3_main__l4_core,
@@ -71,6 +115,60 @@ static struct omap_hwmod omap2430_l3_main_hwmod = {
71}; 115};
72 116
73static struct omap_hwmod omap2430_l4_wkup_hwmod; 117static struct omap_hwmod omap2430_l4_wkup_hwmod;
118static struct omap_hwmod omap2430_uart1_hwmod;
119static struct omap_hwmod omap2430_uart2_hwmod;
120static struct omap_hwmod omap2430_uart3_hwmod;
121static struct omap_hwmod omap2430_i2c1_hwmod;
122static struct omap_hwmod omap2430_i2c2_hwmod;
123
124static struct omap_hwmod omap2430_usbhsotg_hwmod;
125
126/* l3_core -> usbhsotg interface */
127static struct omap_hwmod_ocp_if omap2430_usbhsotg__l3 = {
128 .master = &omap2430_usbhsotg_hwmod,
129 .slave = &omap2430_l3_main_hwmod,
130 .clk = "core_l3_ck",
131 .user = OCP_USER_MPU,
132};
133
134/* I2C IP block address space length (in bytes) */
135#define OMAP2_I2C_AS_LEN 128
136
137/* L4 CORE -> I2C1 interface */
138static struct omap_hwmod_addr_space omap2430_i2c1_addr_space[] = {
139 {
140 .pa_start = 0x48070000,
141 .pa_end = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
142 .flags = ADDR_TYPE_RT,
143 },
144};
145
146static struct omap_hwmod_ocp_if omap2430_l4_core__i2c1 = {
147 .master = &omap2430_l4_core_hwmod,
148 .slave = &omap2430_i2c1_hwmod,
149 .clk = "i2c1_ick",
150 .addr = omap2430_i2c1_addr_space,
151 .addr_cnt = ARRAY_SIZE(omap2430_i2c1_addr_space),
152 .user = OCP_USER_MPU | OCP_USER_SDMA,
153};
154
155/* L4 CORE -> I2C2 interface */
156static struct omap_hwmod_addr_space omap2430_i2c2_addr_space[] = {
157 {
158 .pa_start = 0x48072000,
159 .pa_end = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
160 .flags = ADDR_TYPE_RT,
161 },
162};
163
164static struct omap_hwmod_ocp_if omap2430_l4_core__i2c2 = {
165 .master = &omap2430_l4_core_hwmod,
166 .slave = &omap2430_i2c2_hwmod,
167 .clk = "i2c2_ick",
168 .addr = omap2430_i2c2_addr_space,
169 .addr_cnt = ARRAY_SIZE(omap2430_i2c2_addr_space),
170 .user = OCP_USER_MPU | OCP_USER_SDMA,
171};
74 172
75/* L4_CORE -> L4_WKUP interface */ 173/* L4_CORE -> L4_WKUP interface */
76static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = { 174static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = {
@@ -79,6 +177,125 @@ static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = {
79 .user = OCP_USER_MPU | OCP_USER_SDMA, 177 .user = OCP_USER_MPU | OCP_USER_SDMA,
80}; 178};
81 179
180/* L4 CORE -> UART1 interface */
181static struct omap_hwmod_addr_space omap2430_uart1_addr_space[] = {
182 {
183 .pa_start = OMAP2_UART1_BASE,
184 .pa_end = OMAP2_UART1_BASE + SZ_8K - 1,
185 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
186 },
187};
188
189static struct omap_hwmod_ocp_if omap2_l4_core__uart1 = {
190 .master = &omap2430_l4_core_hwmod,
191 .slave = &omap2430_uart1_hwmod,
192 .clk = "uart1_ick",
193 .addr = omap2430_uart1_addr_space,
194 .addr_cnt = ARRAY_SIZE(omap2430_uart1_addr_space),
195 .user = OCP_USER_MPU | OCP_USER_SDMA,
196};
197
198/* L4 CORE -> UART2 interface */
199static struct omap_hwmod_addr_space omap2430_uart2_addr_space[] = {
200 {
201 .pa_start = OMAP2_UART2_BASE,
202 .pa_end = OMAP2_UART2_BASE + SZ_1K - 1,
203 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
204 },
205};
206
207static struct omap_hwmod_ocp_if omap2_l4_core__uart2 = {
208 .master = &omap2430_l4_core_hwmod,
209 .slave = &omap2430_uart2_hwmod,
210 .clk = "uart2_ick",
211 .addr = omap2430_uart2_addr_space,
212 .addr_cnt = ARRAY_SIZE(omap2430_uart2_addr_space),
213 .user = OCP_USER_MPU | OCP_USER_SDMA,
214};
215
216/* L4 PER -> UART3 interface */
217static struct omap_hwmod_addr_space omap2430_uart3_addr_space[] = {
218 {
219 .pa_start = OMAP2_UART3_BASE,
220 .pa_end = OMAP2_UART3_BASE + SZ_1K - 1,
221 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
222 },
223};
224
225static struct omap_hwmod_ocp_if omap2_l4_core__uart3 = {
226 .master = &omap2430_l4_core_hwmod,
227 .slave = &omap2430_uart3_hwmod,
228 .clk = "uart3_ick",
229 .addr = omap2430_uart3_addr_space,
230 .addr_cnt = ARRAY_SIZE(omap2430_uart3_addr_space),
231 .user = OCP_USER_MPU | OCP_USER_SDMA,
232};
233
234/*
235* usbhsotg interface data
236*/
237static struct omap_hwmod_addr_space omap2430_usbhsotg_addrs[] = {
238 {
239 .pa_start = OMAP243X_HS_BASE,
240 .pa_end = OMAP243X_HS_BASE + SZ_4K - 1,
241 .flags = ADDR_TYPE_RT
242 },
243};
244
245/* l4_core ->usbhsotg interface */
246static struct omap_hwmod_ocp_if omap2430_l4_core__usbhsotg = {
247 .master = &omap2430_l4_core_hwmod,
248 .slave = &omap2430_usbhsotg_hwmod,
249 .clk = "usb_l4_ick",
250 .addr = omap2430_usbhsotg_addrs,
251 .addr_cnt = ARRAY_SIZE(omap2430_usbhsotg_addrs),
252 .user = OCP_USER_MPU,
253};
254
255static struct omap_hwmod_ocp_if *omap2430_usbhsotg_masters[] = {
256 &omap2430_usbhsotg__l3,
257};
258
259static struct omap_hwmod_ocp_if *omap2430_usbhsotg_slaves[] = {
260 &omap2430_l4_core__usbhsotg,
261};
262
263/* L4 CORE -> MMC1 interface */
264static struct omap_hwmod_addr_space omap2430_mmc1_addr_space[] = {
265 {
266 .pa_start = 0x4809c000,
267 .pa_end = 0x4809c1ff,
268 .flags = ADDR_TYPE_RT,
269 },
270};
271
272static struct omap_hwmod_ocp_if omap2430_l4_core__mmc1 = {
273 .master = &omap2430_l4_core_hwmod,
274 .slave = &omap2430_mmc1_hwmod,
275 .clk = "mmchs1_ick",
276 .addr = omap2430_mmc1_addr_space,
277 .addr_cnt = ARRAY_SIZE(omap2430_mmc1_addr_space),
278 .user = OCP_USER_MPU | OCP_USER_SDMA,
279};
280
281/* L4 CORE -> MMC2 interface */
282static struct omap_hwmod_addr_space omap2430_mmc2_addr_space[] = {
283 {
284 .pa_start = 0x480b4000,
285 .pa_end = 0x480b41ff,
286 .flags = ADDR_TYPE_RT,
287 },
288};
289
290static struct omap_hwmod_ocp_if omap2430_l4_core__mmc2 = {
291 .master = &omap2430_l4_core_hwmod,
292 .slave = &omap2430_mmc2_hwmod,
293 .addr = omap2430_mmc2_addr_space,
294 .clk = "mmchs2_ick",
295 .addr_cnt = ARRAY_SIZE(omap2430_mmc2_addr_space),
296 .user = OCP_USER_MPU | OCP_USER_SDMA,
297};
298
82/* Slave interfaces on the L4_CORE interconnect */ 299/* Slave interfaces on the L4_CORE interconnect */
83static struct omap_hwmod_ocp_if *omap2430_l4_core_slaves[] = { 300static struct omap_hwmod_ocp_if *omap2430_l4_core_slaves[] = {
84 &omap2430_l3_main__l4_core, 301 &omap2430_l3_main__l4_core,
@@ -87,6 +304,8 @@ static struct omap_hwmod_ocp_if *omap2430_l4_core_slaves[] = {
87/* Master interfaces on the L4_CORE interconnect */ 304/* Master interfaces on the L4_CORE interconnect */
88static struct omap_hwmod_ocp_if *omap2430_l4_core_masters[] = { 305static struct omap_hwmod_ocp_if *omap2430_l4_core_masters[] = {
89 &omap2430_l4_core__l4_wkup, 306 &omap2430_l4_core__l4_wkup,
307 &omap2430_l4_core__mmc1,
308 &omap2430_l4_core__mmc2,
90}; 309};
91 310
92/* L4 CORE */ 311/* L4 CORE */
@@ -104,12 +323,69 @@ static struct omap_hwmod omap2430_l4_core_hwmod = {
104/* Slave interfaces on the L4_WKUP interconnect */ 323/* Slave interfaces on the L4_WKUP interconnect */
105static struct omap_hwmod_ocp_if *omap2430_l4_wkup_slaves[] = { 324static struct omap_hwmod_ocp_if *omap2430_l4_wkup_slaves[] = {
106 &omap2430_l4_core__l4_wkup, 325 &omap2430_l4_core__l4_wkup,
326 &omap2_l4_core__uart1,
327 &omap2_l4_core__uart2,
328 &omap2_l4_core__uart3,
107}; 329};
108 330
109/* Master interfaces on the L4_WKUP interconnect */ 331/* Master interfaces on the L4_WKUP interconnect */
110static struct omap_hwmod_ocp_if *omap2430_l4_wkup_masters[] = { 332static struct omap_hwmod_ocp_if *omap2430_l4_wkup_masters[] = {
111}; 333};
112 334
335/* l4 core -> mcspi1 interface */
336static struct omap_hwmod_addr_space omap2430_mcspi1_addr_space[] = {
337 {
338 .pa_start = 0x48098000,
339 .pa_end = 0x480980ff,
340 .flags = ADDR_TYPE_RT,
341 },
342};
343
344static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi1 = {
345 .master = &omap2430_l4_core_hwmod,
346 .slave = &omap2430_mcspi1_hwmod,
347 .clk = "mcspi1_ick",
348 .addr = omap2430_mcspi1_addr_space,
349 .addr_cnt = ARRAY_SIZE(omap2430_mcspi1_addr_space),
350 .user = OCP_USER_MPU | OCP_USER_SDMA,
351};
352
353/* l4 core -> mcspi2 interface */
354static struct omap_hwmod_addr_space omap2430_mcspi2_addr_space[] = {
355 {
356 .pa_start = 0x4809a000,
357 .pa_end = 0x4809a0ff,
358 .flags = ADDR_TYPE_RT,
359 },
360};
361
362static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi2 = {
363 .master = &omap2430_l4_core_hwmod,
364 .slave = &omap2430_mcspi2_hwmod,
365 .clk = "mcspi2_ick",
366 .addr = omap2430_mcspi2_addr_space,
367 .addr_cnt = ARRAY_SIZE(omap2430_mcspi2_addr_space),
368 .user = OCP_USER_MPU | OCP_USER_SDMA,
369};
370
371/* l4 core -> mcspi3 interface */
372static struct omap_hwmod_addr_space omap2430_mcspi3_addr_space[] = {
373 {
374 .pa_start = 0x480b8000,
375 .pa_end = 0x480b80ff,
376 .flags = ADDR_TYPE_RT,
377 },
378};
379
380static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi3 = {
381 .master = &omap2430_l4_core_hwmod,
382 .slave = &omap2430_mcspi3_hwmod,
383 .clk = "mcspi3_ick",
384 .addr = omap2430_mcspi3_addr_space,
385 .addr_cnt = ARRAY_SIZE(omap2430_mcspi3_addr_space),
386 .user = OCP_USER_MPU | OCP_USER_SDMA,
387};
388
113/* L4 WKUP */ 389/* L4 WKUP */
114static struct omap_hwmod omap2430_l4_wkup_hwmod = { 390static struct omap_hwmod omap2430_l4_wkup_hwmod = {
115 .name = "l4_wkup", 391 .name = "l4_wkup",
@@ -165,18 +441,2301 @@ static struct omap_hwmod omap2430_iva_hwmod = {
165 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430) 441 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
166}; 442};
167 443
444/* Timer Common */
445static struct omap_hwmod_class_sysconfig omap2430_timer_sysc = {
446 .rev_offs = 0x0000,
447 .sysc_offs = 0x0010,
448 .syss_offs = 0x0014,
449 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
450 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
451 SYSC_HAS_AUTOIDLE),
452 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
453 .sysc_fields = &omap_hwmod_sysc_type1,
454};
455
456static struct omap_hwmod_class omap2430_timer_hwmod_class = {
457 .name = "timer",
458 .sysc = &omap2430_timer_sysc,
459 .rev = OMAP_TIMER_IP_VERSION_1,
460};
461
462/* timer1 */
463static struct omap_hwmod omap2430_timer1_hwmod;
464static struct omap_hwmod_irq_info omap2430_timer1_mpu_irqs[] = {
465 { .irq = 37, },
466};
467
468static struct omap_hwmod_addr_space omap2430_timer1_addrs[] = {
469 {
470 .pa_start = 0x49018000,
471 .pa_end = 0x49018000 + SZ_1K - 1,
472 .flags = ADDR_TYPE_RT
473 },
474};
475
476/* l4_wkup -> timer1 */
477static struct omap_hwmod_ocp_if omap2430_l4_wkup__timer1 = {
478 .master = &omap2430_l4_wkup_hwmod,
479 .slave = &omap2430_timer1_hwmod,
480 .clk = "gpt1_ick",
481 .addr = omap2430_timer1_addrs,
482 .addr_cnt = ARRAY_SIZE(omap2430_timer1_addrs),
483 .user = OCP_USER_MPU | OCP_USER_SDMA,
484};
485
486/* timer1 slave port */
487static struct omap_hwmod_ocp_if *omap2430_timer1_slaves[] = {
488 &omap2430_l4_wkup__timer1,
489};
490
491/* timer1 hwmod */
492static struct omap_hwmod omap2430_timer1_hwmod = {
493 .name = "timer1",
494 .mpu_irqs = omap2430_timer1_mpu_irqs,
495 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer1_mpu_irqs),
496 .main_clk = "gpt1_fck",
497 .prcm = {
498 .omap2 = {
499 .prcm_reg_id = 1,
500 .module_bit = OMAP24XX_EN_GPT1_SHIFT,
501 .module_offs = WKUP_MOD,
502 .idlest_reg_id = 1,
503 .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
504 },
505 },
506 .slaves = omap2430_timer1_slaves,
507 .slaves_cnt = ARRAY_SIZE(omap2430_timer1_slaves),
508 .class = &omap2430_timer_hwmod_class,
509 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
510};
511
512/* timer2 */
513static struct omap_hwmod omap2430_timer2_hwmod;
514static struct omap_hwmod_irq_info omap2430_timer2_mpu_irqs[] = {
515 { .irq = 38, },
516};
517
518static struct omap_hwmod_addr_space omap2430_timer2_addrs[] = {
519 {
520 .pa_start = 0x4802a000,
521 .pa_end = 0x4802a000 + SZ_1K - 1,
522 .flags = ADDR_TYPE_RT
523 },
524};
525
526/* l4_core -> timer2 */
527static struct omap_hwmod_ocp_if omap2430_l4_core__timer2 = {
528 .master = &omap2430_l4_core_hwmod,
529 .slave = &omap2430_timer2_hwmod,
530 .clk = "gpt2_ick",
531 .addr = omap2430_timer2_addrs,
532 .addr_cnt = ARRAY_SIZE(omap2430_timer2_addrs),
533 .user = OCP_USER_MPU | OCP_USER_SDMA,
534};
535
536/* timer2 slave port */
537static struct omap_hwmod_ocp_if *omap2430_timer2_slaves[] = {
538 &omap2430_l4_core__timer2,
539};
540
541/* timer2 hwmod */
542static struct omap_hwmod omap2430_timer2_hwmod = {
543 .name = "timer2",
544 .mpu_irqs = omap2430_timer2_mpu_irqs,
545 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer2_mpu_irqs),
546 .main_clk = "gpt2_fck",
547 .prcm = {
548 .omap2 = {
549 .prcm_reg_id = 1,
550 .module_bit = OMAP24XX_EN_GPT2_SHIFT,
551 .module_offs = CORE_MOD,
552 .idlest_reg_id = 1,
553 .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
554 },
555 },
556 .slaves = omap2430_timer2_slaves,
557 .slaves_cnt = ARRAY_SIZE(omap2430_timer2_slaves),
558 .class = &omap2430_timer_hwmod_class,
559 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
560};
561
562/* timer3 */
563static struct omap_hwmod omap2430_timer3_hwmod;
564static struct omap_hwmod_irq_info omap2430_timer3_mpu_irqs[] = {
565 { .irq = 39, },
566};
567
568static struct omap_hwmod_addr_space omap2430_timer3_addrs[] = {
569 {
570 .pa_start = 0x48078000,
571 .pa_end = 0x48078000 + SZ_1K - 1,
572 .flags = ADDR_TYPE_RT
573 },
574};
575
576/* l4_core -> timer3 */
577static struct omap_hwmod_ocp_if omap2430_l4_core__timer3 = {
578 .master = &omap2430_l4_core_hwmod,
579 .slave = &omap2430_timer3_hwmod,
580 .clk = "gpt3_ick",
581 .addr = omap2430_timer3_addrs,
582 .addr_cnt = ARRAY_SIZE(omap2430_timer3_addrs),
583 .user = OCP_USER_MPU | OCP_USER_SDMA,
584};
585
586/* timer3 slave port */
587static struct omap_hwmod_ocp_if *omap2430_timer3_slaves[] = {
588 &omap2430_l4_core__timer3,
589};
590
591/* timer3 hwmod */
592static struct omap_hwmod omap2430_timer3_hwmod = {
593 .name = "timer3",
594 .mpu_irqs = omap2430_timer3_mpu_irqs,
595 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer3_mpu_irqs),
596 .main_clk = "gpt3_fck",
597 .prcm = {
598 .omap2 = {
599 .prcm_reg_id = 1,
600 .module_bit = OMAP24XX_EN_GPT3_SHIFT,
601 .module_offs = CORE_MOD,
602 .idlest_reg_id = 1,
603 .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
604 },
605 },
606 .slaves = omap2430_timer3_slaves,
607 .slaves_cnt = ARRAY_SIZE(omap2430_timer3_slaves),
608 .class = &omap2430_timer_hwmod_class,
609 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
610};
611
612/* timer4 */
613static struct omap_hwmod omap2430_timer4_hwmod;
614static struct omap_hwmod_irq_info omap2430_timer4_mpu_irqs[] = {
615 { .irq = 40, },
616};
617
618static struct omap_hwmod_addr_space omap2430_timer4_addrs[] = {
619 {
620 .pa_start = 0x4807a000,
621 .pa_end = 0x4807a000 + SZ_1K - 1,
622 .flags = ADDR_TYPE_RT
623 },
624};
625
626/* l4_core -> timer4 */
627static struct omap_hwmod_ocp_if omap2430_l4_core__timer4 = {
628 .master = &omap2430_l4_core_hwmod,
629 .slave = &omap2430_timer4_hwmod,
630 .clk = "gpt4_ick",
631 .addr = omap2430_timer4_addrs,
632 .addr_cnt = ARRAY_SIZE(omap2430_timer4_addrs),
633 .user = OCP_USER_MPU | OCP_USER_SDMA,
634};
635
636/* timer4 slave port */
637static struct omap_hwmod_ocp_if *omap2430_timer4_slaves[] = {
638 &omap2430_l4_core__timer4,
639};
640
641/* timer4 hwmod */
642static struct omap_hwmod omap2430_timer4_hwmod = {
643 .name = "timer4",
644 .mpu_irqs = omap2430_timer4_mpu_irqs,
645 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer4_mpu_irqs),
646 .main_clk = "gpt4_fck",
647 .prcm = {
648 .omap2 = {
649 .prcm_reg_id = 1,
650 .module_bit = OMAP24XX_EN_GPT4_SHIFT,
651 .module_offs = CORE_MOD,
652 .idlest_reg_id = 1,
653 .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
654 },
655 },
656 .slaves = omap2430_timer4_slaves,
657 .slaves_cnt = ARRAY_SIZE(omap2430_timer4_slaves),
658 .class = &omap2430_timer_hwmod_class,
659 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
660};
661
662/* timer5 */
663static struct omap_hwmod omap2430_timer5_hwmod;
664static struct omap_hwmod_irq_info omap2430_timer5_mpu_irqs[] = {
665 { .irq = 41, },
666};
667
668static struct omap_hwmod_addr_space omap2430_timer5_addrs[] = {
669 {
670 .pa_start = 0x4807c000,
671 .pa_end = 0x4807c000 + SZ_1K - 1,
672 .flags = ADDR_TYPE_RT
673 },
674};
675
676/* l4_core -> timer5 */
677static struct omap_hwmod_ocp_if omap2430_l4_core__timer5 = {
678 .master = &omap2430_l4_core_hwmod,
679 .slave = &omap2430_timer5_hwmod,
680 .clk = "gpt5_ick",
681 .addr = omap2430_timer5_addrs,
682 .addr_cnt = ARRAY_SIZE(omap2430_timer5_addrs),
683 .user = OCP_USER_MPU | OCP_USER_SDMA,
684};
685
686/* timer5 slave port */
687static struct omap_hwmod_ocp_if *omap2430_timer5_slaves[] = {
688 &omap2430_l4_core__timer5,
689};
690
691/* timer5 hwmod */
692static struct omap_hwmod omap2430_timer5_hwmod = {
693 .name = "timer5",
694 .mpu_irqs = omap2430_timer5_mpu_irqs,
695 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer5_mpu_irqs),
696 .main_clk = "gpt5_fck",
697 .prcm = {
698 .omap2 = {
699 .prcm_reg_id = 1,
700 .module_bit = OMAP24XX_EN_GPT5_SHIFT,
701 .module_offs = CORE_MOD,
702 .idlest_reg_id = 1,
703 .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
704 },
705 },
706 .slaves = omap2430_timer5_slaves,
707 .slaves_cnt = ARRAY_SIZE(omap2430_timer5_slaves),
708 .class = &omap2430_timer_hwmod_class,
709 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
710};
711
712/* timer6 */
713static struct omap_hwmod omap2430_timer6_hwmod;
714static struct omap_hwmod_irq_info omap2430_timer6_mpu_irqs[] = {
715 { .irq = 42, },
716};
717
718static struct omap_hwmod_addr_space omap2430_timer6_addrs[] = {
719 {
720 .pa_start = 0x4807e000,
721 .pa_end = 0x4807e000 + SZ_1K - 1,
722 .flags = ADDR_TYPE_RT
723 },
724};
725
726/* l4_core -> timer6 */
727static struct omap_hwmod_ocp_if omap2430_l4_core__timer6 = {
728 .master = &omap2430_l4_core_hwmod,
729 .slave = &omap2430_timer6_hwmod,
730 .clk = "gpt6_ick",
731 .addr = omap2430_timer6_addrs,
732 .addr_cnt = ARRAY_SIZE(omap2430_timer6_addrs),
733 .user = OCP_USER_MPU | OCP_USER_SDMA,
734};
735
736/* timer6 slave port */
737static struct omap_hwmod_ocp_if *omap2430_timer6_slaves[] = {
738 &omap2430_l4_core__timer6,
739};
740
741/* timer6 hwmod */
742static struct omap_hwmod omap2430_timer6_hwmod = {
743 .name = "timer6",
744 .mpu_irqs = omap2430_timer6_mpu_irqs,
745 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer6_mpu_irqs),
746 .main_clk = "gpt6_fck",
747 .prcm = {
748 .omap2 = {
749 .prcm_reg_id = 1,
750 .module_bit = OMAP24XX_EN_GPT6_SHIFT,
751 .module_offs = CORE_MOD,
752 .idlest_reg_id = 1,
753 .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
754 },
755 },
756 .slaves = omap2430_timer6_slaves,
757 .slaves_cnt = ARRAY_SIZE(omap2430_timer6_slaves),
758 .class = &omap2430_timer_hwmod_class,
759 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
760};
761
762/* timer7 */
763static struct omap_hwmod omap2430_timer7_hwmod;
764static struct omap_hwmod_irq_info omap2430_timer7_mpu_irqs[] = {
765 { .irq = 43, },
766};
767
768static struct omap_hwmod_addr_space omap2430_timer7_addrs[] = {
769 {
770 .pa_start = 0x48080000,
771 .pa_end = 0x48080000 + SZ_1K - 1,
772 .flags = ADDR_TYPE_RT
773 },
774};
775
776/* l4_core -> timer7 */
777static struct omap_hwmod_ocp_if omap2430_l4_core__timer7 = {
778 .master = &omap2430_l4_core_hwmod,
779 .slave = &omap2430_timer7_hwmod,
780 .clk = "gpt7_ick",
781 .addr = omap2430_timer7_addrs,
782 .addr_cnt = ARRAY_SIZE(omap2430_timer7_addrs),
783 .user = OCP_USER_MPU | OCP_USER_SDMA,
784};
785
786/* timer7 slave port */
787static struct omap_hwmod_ocp_if *omap2430_timer7_slaves[] = {
788 &omap2430_l4_core__timer7,
789};
790
791/* timer7 hwmod */
792static struct omap_hwmod omap2430_timer7_hwmod = {
793 .name = "timer7",
794 .mpu_irqs = omap2430_timer7_mpu_irqs,
795 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer7_mpu_irqs),
796 .main_clk = "gpt7_fck",
797 .prcm = {
798 .omap2 = {
799 .prcm_reg_id = 1,
800 .module_bit = OMAP24XX_EN_GPT7_SHIFT,
801 .module_offs = CORE_MOD,
802 .idlest_reg_id = 1,
803 .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
804 },
805 },
806 .slaves = omap2430_timer7_slaves,
807 .slaves_cnt = ARRAY_SIZE(omap2430_timer7_slaves),
808 .class = &omap2430_timer_hwmod_class,
809 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
810};
811
812/* timer8 */
813static struct omap_hwmod omap2430_timer8_hwmod;
814static struct omap_hwmod_irq_info omap2430_timer8_mpu_irqs[] = {
815 { .irq = 44, },
816};
817
818static struct omap_hwmod_addr_space omap2430_timer8_addrs[] = {
819 {
820 .pa_start = 0x48082000,
821 .pa_end = 0x48082000 + SZ_1K - 1,
822 .flags = ADDR_TYPE_RT
823 },
824};
825
826/* l4_core -> timer8 */
827static struct omap_hwmod_ocp_if omap2430_l4_core__timer8 = {
828 .master = &omap2430_l4_core_hwmod,
829 .slave = &omap2430_timer8_hwmod,
830 .clk = "gpt8_ick",
831 .addr = omap2430_timer8_addrs,
832 .addr_cnt = ARRAY_SIZE(omap2430_timer8_addrs),
833 .user = OCP_USER_MPU | OCP_USER_SDMA,
834};
835
836/* timer8 slave port */
837static struct omap_hwmod_ocp_if *omap2430_timer8_slaves[] = {
838 &omap2430_l4_core__timer8,
839};
840
841/* timer8 hwmod */
842static struct omap_hwmod omap2430_timer8_hwmod = {
843 .name = "timer8",
844 .mpu_irqs = omap2430_timer8_mpu_irqs,
845 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer8_mpu_irqs),
846 .main_clk = "gpt8_fck",
847 .prcm = {
848 .omap2 = {
849 .prcm_reg_id = 1,
850 .module_bit = OMAP24XX_EN_GPT8_SHIFT,
851 .module_offs = CORE_MOD,
852 .idlest_reg_id = 1,
853 .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
854 },
855 },
856 .slaves = omap2430_timer8_slaves,
857 .slaves_cnt = ARRAY_SIZE(omap2430_timer8_slaves),
858 .class = &omap2430_timer_hwmod_class,
859 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
860};
861
862/* timer9 */
863static struct omap_hwmod omap2430_timer9_hwmod;
864static struct omap_hwmod_irq_info omap2430_timer9_mpu_irqs[] = {
865 { .irq = 45, },
866};
867
868static struct omap_hwmod_addr_space omap2430_timer9_addrs[] = {
869 {
870 .pa_start = 0x48084000,
871 .pa_end = 0x48084000 + SZ_1K - 1,
872 .flags = ADDR_TYPE_RT
873 },
874};
875
876/* l4_core -> timer9 */
877static struct omap_hwmod_ocp_if omap2430_l4_core__timer9 = {
878 .master = &omap2430_l4_core_hwmod,
879 .slave = &omap2430_timer9_hwmod,
880 .clk = "gpt9_ick",
881 .addr = omap2430_timer9_addrs,
882 .addr_cnt = ARRAY_SIZE(omap2430_timer9_addrs),
883 .user = OCP_USER_MPU | OCP_USER_SDMA,
884};
885
886/* timer9 slave port */
887static struct omap_hwmod_ocp_if *omap2430_timer9_slaves[] = {
888 &omap2430_l4_core__timer9,
889};
890
891/* timer9 hwmod */
892static struct omap_hwmod omap2430_timer9_hwmod = {
893 .name = "timer9",
894 .mpu_irqs = omap2430_timer9_mpu_irqs,
895 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer9_mpu_irqs),
896 .main_clk = "gpt9_fck",
897 .prcm = {
898 .omap2 = {
899 .prcm_reg_id = 1,
900 .module_bit = OMAP24XX_EN_GPT9_SHIFT,
901 .module_offs = CORE_MOD,
902 .idlest_reg_id = 1,
903 .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
904 },
905 },
906 .slaves = omap2430_timer9_slaves,
907 .slaves_cnt = ARRAY_SIZE(omap2430_timer9_slaves),
908 .class = &omap2430_timer_hwmod_class,
909 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
910};
911
912/* timer10 */
913static struct omap_hwmod omap2430_timer10_hwmod;
914static struct omap_hwmod_irq_info omap2430_timer10_mpu_irqs[] = {
915 { .irq = 46, },
916};
917
918static struct omap_hwmod_addr_space omap2430_timer10_addrs[] = {
919 {
920 .pa_start = 0x48086000,
921 .pa_end = 0x48086000 + SZ_1K - 1,
922 .flags = ADDR_TYPE_RT
923 },
924};
925
926/* l4_core -> timer10 */
927static struct omap_hwmod_ocp_if omap2430_l4_core__timer10 = {
928 .master = &omap2430_l4_core_hwmod,
929 .slave = &omap2430_timer10_hwmod,
930 .clk = "gpt10_ick",
931 .addr = omap2430_timer10_addrs,
932 .addr_cnt = ARRAY_SIZE(omap2430_timer10_addrs),
933 .user = OCP_USER_MPU | OCP_USER_SDMA,
934};
935
936/* timer10 slave port */
937static struct omap_hwmod_ocp_if *omap2430_timer10_slaves[] = {
938 &omap2430_l4_core__timer10,
939};
940
941/* timer10 hwmod */
942static struct omap_hwmod omap2430_timer10_hwmod = {
943 .name = "timer10",
944 .mpu_irqs = omap2430_timer10_mpu_irqs,
945 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer10_mpu_irqs),
946 .main_clk = "gpt10_fck",
947 .prcm = {
948 .omap2 = {
949 .prcm_reg_id = 1,
950 .module_bit = OMAP24XX_EN_GPT10_SHIFT,
951 .module_offs = CORE_MOD,
952 .idlest_reg_id = 1,
953 .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
954 },
955 },
956 .slaves = omap2430_timer10_slaves,
957 .slaves_cnt = ARRAY_SIZE(omap2430_timer10_slaves),
958 .class = &omap2430_timer_hwmod_class,
959 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
960};
961
962/* timer11 */
963static struct omap_hwmod omap2430_timer11_hwmod;
964static struct omap_hwmod_irq_info omap2430_timer11_mpu_irqs[] = {
965 { .irq = 47, },
966};
967
968static struct omap_hwmod_addr_space omap2430_timer11_addrs[] = {
969 {
970 .pa_start = 0x48088000,
971 .pa_end = 0x48088000 + SZ_1K - 1,
972 .flags = ADDR_TYPE_RT
973 },
974};
975
976/* l4_core -> timer11 */
977static struct omap_hwmod_ocp_if omap2430_l4_core__timer11 = {
978 .master = &omap2430_l4_core_hwmod,
979 .slave = &omap2430_timer11_hwmod,
980 .clk = "gpt11_ick",
981 .addr = omap2430_timer11_addrs,
982 .addr_cnt = ARRAY_SIZE(omap2430_timer11_addrs),
983 .user = OCP_USER_MPU | OCP_USER_SDMA,
984};
985
986/* timer11 slave port */
987static struct omap_hwmod_ocp_if *omap2430_timer11_slaves[] = {
988 &omap2430_l4_core__timer11,
989};
990
991/* timer11 hwmod */
992static struct omap_hwmod omap2430_timer11_hwmod = {
993 .name = "timer11",
994 .mpu_irqs = omap2430_timer11_mpu_irqs,
995 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer11_mpu_irqs),
996 .main_clk = "gpt11_fck",
997 .prcm = {
998 .omap2 = {
999 .prcm_reg_id = 1,
1000 .module_bit = OMAP24XX_EN_GPT11_SHIFT,
1001 .module_offs = CORE_MOD,
1002 .idlest_reg_id = 1,
1003 .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
1004 },
1005 },
1006 .slaves = omap2430_timer11_slaves,
1007 .slaves_cnt = ARRAY_SIZE(omap2430_timer11_slaves),
1008 .class = &omap2430_timer_hwmod_class,
1009 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
1010};
1011
1012/* timer12 */
1013static struct omap_hwmod omap2430_timer12_hwmod;
1014static struct omap_hwmod_irq_info omap2430_timer12_mpu_irqs[] = {
1015 { .irq = 48, },
1016};
1017
1018static struct omap_hwmod_addr_space omap2430_timer12_addrs[] = {
1019 {
1020 .pa_start = 0x4808a000,
1021 .pa_end = 0x4808a000 + SZ_1K - 1,
1022 .flags = ADDR_TYPE_RT
1023 },
1024};
1025
1026/* l4_core -> timer12 */
1027static struct omap_hwmod_ocp_if omap2430_l4_core__timer12 = {
1028 .master = &omap2430_l4_core_hwmod,
1029 .slave = &omap2430_timer12_hwmod,
1030 .clk = "gpt12_ick",
1031 .addr = omap2430_timer12_addrs,
1032 .addr_cnt = ARRAY_SIZE(omap2430_timer12_addrs),
1033 .user = OCP_USER_MPU | OCP_USER_SDMA,
1034};
1035
1036/* timer12 slave port */
1037static struct omap_hwmod_ocp_if *omap2430_timer12_slaves[] = {
1038 &omap2430_l4_core__timer12,
1039};
1040
1041/* timer12 hwmod */
1042static struct omap_hwmod omap2430_timer12_hwmod = {
1043 .name = "timer12",
1044 .mpu_irqs = omap2430_timer12_mpu_irqs,
1045 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer12_mpu_irqs),
1046 .main_clk = "gpt12_fck",
1047 .prcm = {
1048 .omap2 = {
1049 .prcm_reg_id = 1,
1050 .module_bit = OMAP24XX_EN_GPT12_SHIFT,
1051 .module_offs = CORE_MOD,
1052 .idlest_reg_id = 1,
1053 .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
1054 },
1055 },
1056 .slaves = omap2430_timer12_slaves,
1057 .slaves_cnt = ARRAY_SIZE(omap2430_timer12_slaves),
1058 .class = &omap2430_timer_hwmod_class,
1059 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
1060};
1061
1062/* l4_wkup -> wd_timer2 */
1063static struct omap_hwmod_addr_space omap2430_wd_timer2_addrs[] = {
1064 {
1065 .pa_start = 0x49016000,
1066 .pa_end = 0x4901607f,
1067 .flags = ADDR_TYPE_RT
1068 },
1069};
1070
1071static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = {
1072 .master = &omap2430_l4_wkup_hwmod,
1073 .slave = &omap2430_wd_timer2_hwmod,
1074 .clk = "mpu_wdt_ick",
1075 .addr = omap2430_wd_timer2_addrs,
1076 .addr_cnt = ARRAY_SIZE(omap2430_wd_timer2_addrs),
1077 .user = OCP_USER_MPU | OCP_USER_SDMA,
1078};
1079
1080/*
1081 * 'wd_timer' class
1082 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1083 * overflow condition
1084 */
1085
1086static struct omap_hwmod_class_sysconfig omap2430_wd_timer_sysc = {
1087 .rev_offs = 0x0,
1088 .sysc_offs = 0x0010,
1089 .syss_offs = 0x0014,
1090 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
1091 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1092 .sysc_fields = &omap_hwmod_sysc_type1,
1093};
1094
1095static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = {
1096 .name = "wd_timer",
1097 .sysc = &omap2430_wd_timer_sysc,
1098 .pre_shutdown = &omap2_wd_timer_disable
1099};
1100
1101/* wd_timer2 */
1102static struct omap_hwmod_ocp_if *omap2430_wd_timer2_slaves[] = {
1103 &omap2430_l4_wkup__wd_timer2,
1104};
1105
1106static struct omap_hwmod omap2430_wd_timer2_hwmod = {
1107 .name = "wd_timer2",
1108 .class = &omap2430_wd_timer_hwmod_class,
1109 .main_clk = "mpu_wdt_fck",
1110 .prcm = {
1111 .omap2 = {
1112 .prcm_reg_id = 1,
1113 .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
1114 .module_offs = WKUP_MOD,
1115 .idlest_reg_id = 1,
1116 .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
1117 },
1118 },
1119 .slaves = omap2430_wd_timer2_slaves,
1120 .slaves_cnt = ARRAY_SIZE(omap2430_wd_timer2_slaves),
1121 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1122};
1123
1124/* UART */
1125
1126static struct omap_hwmod_class_sysconfig uart_sysc = {
1127 .rev_offs = 0x50,
1128 .sysc_offs = 0x54,
1129 .syss_offs = 0x58,
1130 .sysc_flags = (SYSC_HAS_SIDLEMODE |
1131 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1132 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1133 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1134 .sysc_fields = &omap_hwmod_sysc_type1,
1135};
1136
1137static struct omap_hwmod_class uart_class = {
1138 .name = "uart",
1139 .sysc = &uart_sysc,
1140};
1141
1142/* UART1 */
1143
1144static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
1145 { .irq = INT_24XX_UART1_IRQ, },
1146};
1147
1148static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
1149 { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
1150 { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
1151};
1152
1153static struct omap_hwmod_ocp_if *omap2430_uart1_slaves[] = {
1154 &omap2_l4_core__uart1,
1155};
1156
1157static struct omap_hwmod omap2430_uart1_hwmod = {
1158 .name = "uart1",
1159 .mpu_irqs = uart1_mpu_irqs,
1160 .mpu_irqs_cnt = ARRAY_SIZE(uart1_mpu_irqs),
1161 .sdma_reqs = uart1_sdma_reqs,
1162 .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
1163 .main_clk = "uart1_fck",
1164 .prcm = {
1165 .omap2 = {
1166 .module_offs = CORE_MOD,
1167 .prcm_reg_id = 1,
1168 .module_bit = OMAP24XX_EN_UART1_SHIFT,
1169 .idlest_reg_id = 1,
1170 .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
1171 },
1172 },
1173 .slaves = omap2430_uart1_slaves,
1174 .slaves_cnt = ARRAY_SIZE(omap2430_uart1_slaves),
1175 .class = &uart_class,
1176 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1177};
1178
1179/* UART2 */
1180
1181static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
1182 { .irq = INT_24XX_UART2_IRQ, },
1183};
1184
1185static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
1186 { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
1187 { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
1188};
1189
1190static struct omap_hwmod_ocp_if *omap2430_uart2_slaves[] = {
1191 &omap2_l4_core__uart2,
1192};
1193
1194static struct omap_hwmod omap2430_uart2_hwmod = {
1195 .name = "uart2",
1196 .mpu_irqs = uart2_mpu_irqs,
1197 .mpu_irqs_cnt = ARRAY_SIZE(uart2_mpu_irqs),
1198 .sdma_reqs = uart2_sdma_reqs,
1199 .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
1200 .main_clk = "uart2_fck",
1201 .prcm = {
1202 .omap2 = {
1203 .module_offs = CORE_MOD,
1204 .prcm_reg_id = 1,
1205 .module_bit = OMAP24XX_EN_UART2_SHIFT,
1206 .idlest_reg_id = 1,
1207 .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
1208 },
1209 },
1210 .slaves = omap2430_uart2_slaves,
1211 .slaves_cnt = ARRAY_SIZE(omap2430_uart2_slaves),
1212 .class = &uart_class,
1213 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1214};
1215
1216/* UART3 */
1217
1218static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
1219 { .irq = INT_24XX_UART3_IRQ, },
1220};
1221
1222static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
1223 { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
1224 { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
1225};
1226
1227static struct omap_hwmod_ocp_if *omap2430_uart3_slaves[] = {
1228 &omap2_l4_core__uart3,
1229};
1230
1231static struct omap_hwmod omap2430_uart3_hwmod = {
1232 .name = "uart3",
1233 .mpu_irqs = uart3_mpu_irqs,
1234 .mpu_irqs_cnt = ARRAY_SIZE(uart3_mpu_irqs),
1235 .sdma_reqs = uart3_sdma_reqs,
1236 .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
1237 .main_clk = "uart3_fck",
1238 .prcm = {
1239 .omap2 = {
1240 .module_offs = CORE_MOD,
1241 .prcm_reg_id = 2,
1242 .module_bit = OMAP24XX_EN_UART3_SHIFT,
1243 .idlest_reg_id = 2,
1244 .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
1245 },
1246 },
1247 .slaves = omap2430_uart3_slaves,
1248 .slaves_cnt = ARRAY_SIZE(omap2430_uart3_slaves),
1249 .class = &uart_class,
1250 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1251};
1252
1253/*
1254 * 'dss' class
1255 * display sub-system
1256 */
1257
1258static struct omap_hwmod_class_sysconfig omap2430_dss_sysc = {
1259 .rev_offs = 0x0000,
1260 .sysc_offs = 0x0010,
1261 .syss_offs = 0x0014,
1262 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1263 .sysc_fields = &omap_hwmod_sysc_type1,
1264};
1265
1266static struct omap_hwmod_class omap2430_dss_hwmod_class = {
1267 .name = "dss",
1268 .sysc = &omap2430_dss_sysc,
1269};
1270
1271static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = {
1272 { .name = "dispc", .dma_req = 5 },
1273};
1274
1275/* dss */
1276/* dss master ports */
1277static struct omap_hwmod_ocp_if *omap2430_dss_masters[] = {
1278 &omap2430_dss__l3,
1279};
1280
1281static struct omap_hwmod_addr_space omap2430_dss_addrs[] = {
1282 {
1283 .pa_start = 0x48050000,
1284 .pa_end = 0x480503FF,
1285 .flags = ADDR_TYPE_RT
1286 },
1287};
1288
1289/* l4_core -> dss */
1290static struct omap_hwmod_ocp_if omap2430_l4_core__dss = {
1291 .master = &omap2430_l4_core_hwmod,
1292 .slave = &omap2430_dss_core_hwmod,
1293 .clk = "dss_ick",
1294 .addr = omap2430_dss_addrs,
1295 .addr_cnt = ARRAY_SIZE(omap2430_dss_addrs),
1296 .user = OCP_USER_MPU | OCP_USER_SDMA,
1297};
1298
1299/* dss slave ports */
1300static struct omap_hwmod_ocp_if *omap2430_dss_slaves[] = {
1301 &omap2430_l4_core__dss,
1302};
1303
1304static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1305 { .role = "tv_clk", .clk = "dss_54m_fck" },
1306 { .role = "sys_clk", .clk = "dss2_fck" },
1307};
1308
1309static struct omap_hwmod omap2430_dss_core_hwmod = {
1310 .name = "dss_core",
1311 .class = &omap2430_dss_hwmod_class,
1312 .main_clk = "dss1_fck", /* instead of dss_fck */
1313 .sdma_reqs = omap2430_dss_sdma_chs,
1314 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_dss_sdma_chs),
1315 .prcm = {
1316 .omap2 = {
1317 .prcm_reg_id = 1,
1318 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1319 .module_offs = CORE_MOD,
1320 .idlest_reg_id = 1,
1321 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1322 },
1323 },
1324 .opt_clks = dss_opt_clks,
1325 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1326 .slaves = omap2430_dss_slaves,
1327 .slaves_cnt = ARRAY_SIZE(omap2430_dss_slaves),
1328 .masters = omap2430_dss_masters,
1329 .masters_cnt = ARRAY_SIZE(omap2430_dss_masters),
1330 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1331 .flags = HWMOD_NO_IDLEST,
1332};
1333
1334/*
1335 * 'dispc' class
1336 * display controller
1337 */
1338
1339static struct omap_hwmod_class_sysconfig omap2430_dispc_sysc = {
1340 .rev_offs = 0x0000,
1341 .sysc_offs = 0x0010,
1342 .syss_offs = 0x0014,
1343 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
1344 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1345 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1346 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1347 .sysc_fields = &omap_hwmod_sysc_type1,
1348};
1349
1350static struct omap_hwmod_class omap2430_dispc_hwmod_class = {
1351 .name = "dispc",
1352 .sysc = &omap2430_dispc_sysc,
1353};
1354
1355static struct omap_hwmod_irq_info omap2430_dispc_irqs[] = {
1356 { .irq = 25 },
1357};
1358
1359static struct omap_hwmod_addr_space omap2430_dss_dispc_addrs[] = {
1360 {
1361 .pa_start = 0x48050400,
1362 .pa_end = 0x480507FF,
1363 .flags = ADDR_TYPE_RT
1364 },
1365};
1366
1367/* l4_core -> dss_dispc */
1368static struct omap_hwmod_ocp_if omap2430_l4_core__dss_dispc = {
1369 .master = &omap2430_l4_core_hwmod,
1370 .slave = &omap2430_dss_dispc_hwmod,
1371 .clk = "dss_ick",
1372 .addr = omap2430_dss_dispc_addrs,
1373 .addr_cnt = ARRAY_SIZE(omap2430_dss_dispc_addrs),
1374 .user = OCP_USER_MPU | OCP_USER_SDMA,
1375};
1376
1377/* dss_dispc slave ports */
1378static struct omap_hwmod_ocp_if *omap2430_dss_dispc_slaves[] = {
1379 &omap2430_l4_core__dss_dispc,
1380};
1381
1382static struct omap_hwmod omap2430_dss_dispc_hwmod = {
1383 .name = "dss_dispc",
1384 .class = &omap2430_dispc_hwmod_class,
1385 .mpu_irqs = omap2430_dispc_irqs,
1386 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dispc_irqs),
1387 .main_clk = "dss1_fck",
1388 .prcm = {
1389 .omap2 = {
1390 .prcm_reg_id = 1,
1391 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1392 .module_offs = CORE_MOD,
1393 .idlest_reg_id = 1,
1394 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1395 },
1396 },
1397 .slaves = omap2430_dss_dispc_slaves,
1398 .slaves_cnt = ARRAY_SIZE(omap2430_dss_dispc_slaves),
1399 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1400 .flags = HWMOD_NO_IDLEST,
1401};
1402
1403/*
1404 * 'rfbi' class
1405 * remote frame buffer interface
1406 */
1407
1408static struct omap_hwmod_class_sysconfig omap2430_rfbi_sysc = {
1409 .rev_offs = 0x0000,
1410 .sysc_offs = 0x0010,
1411 .syss_offs = 0x0014,
1412 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1413 SYSC_HAS_AUTOIDLE),
1414 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1415 .sysc_fields = &omap_hwmod_sysc_type1,
1416};
1417
1418static struct omap_hwmod_class omap2430_rfbi_hwmod_class = {
1419 .name = "rfbi",
1420 .sysc = &omap2430_rfbi_sysc,
1421};
1422
1423static struct omap_hwmod_addr_space omap2430_dss_rfbi_addrs[] = {
1424 {
1425 .pa_start = 0x48050800,
1426 .pa_end = 0x48050BFF,
1427 .flags = ADDR_TYPE_RT
1428 },
1429};
1430
1431/* l4_core -> dss_rfbi */
1432static struct omap_hwmod_ocp_if omap2430_l4_core__dss_rfbi = {
1433 .master = &omap2430_l4_core_hwmod,
1434 .slave = &omap2430_dss_rfbi_hwmod,
1435 .clk = "dss_ick",
1436 .addr = omap2430_dss_rfbi_addrs,
1437 .addr_cnt = ARRAY_SIZE(omap2430_dss_rfbi_addrs),
1438 .user = OCP_USER_MPU | OCP_USER_SDMA,
1439};
1440
1441/* dss_rfbi slave ports */
1442static struct omap_hwmod_ocp_if *omap2430_dss_rfbi_slaves[] = {
1443 &omap2430_l4_core__dss_rfbi,
1444};
1445
1446static struct omap_hwmod omap2430_dss_rfbi_hwmod = {
1447 .name = "dss_rfbi",
1448 .class = &omap2430_rfbi_hwmod_class,
1449 .main_clk = "dss1_fck",
1450 .prcm = {
1451 .omap2 = {
1452 .prcm_reg_id = 1,
1453 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1454 .module_offs = CORE_MOD,
1455 },
1456 },
1457 .slaves = omap2430_dss_rfbi_slaves,
1458 .slaves_cnt = ARRAY_SIZE(omap2430_dss_rfbi_slaves),
1459 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1460 .flags = HWMOD_NO_IDLEST,
1461};
1462
1463/*
1464 * 'venc' class
1465 * video encoder
1466 */
1467
1468static struct omap_hwmod_class omap2430_venc_hwmod_class = {
1469 .name = "venc",
1470};
1471
1472/* dss_venc */
1473static struct omap_hwmod_addr_space omap2430_dss_venc_addrs[] = {
1474 {
1475 .pa_start = 0x48050C00,
1476 .pa_end = 0x48050FFF,
1477 .flags = ADDR_TYPE_RT
1478 },
1479};
1480
1481/* l4_core -> dss_venc */
1482static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = {
1483 .master = &omap2430_l4_core_hwmod,
1484 .slave = &omap2430_dss_venc_hwmod,
1485 .clk = "dss_54m_fck",
1486 .addr = omap2430_dss_venc_addrs,
1487 .addr_cnt = ARRAY_SIZE(omap2430_dss_venc_addrs),
1488 .flags = OCPIF_SWSUP_IDLE,
1489 .user = OCP_USER_MPU | OCP_USER_SDMA,
1490};
1491
1492/* dss_venc slave ports */
1493static struct omap_hwmod_ocp_if *omap2430_dss_venc_slaves[] = {
1494 &omap2430_l4_core__dss_venc,
1495};
1496
1497static struct omap_hwmod omap2430_dss_venc_hwmod = {
1498 .name = "dss_venc",
1499 .class = &omap2430_venc_hwmod_class,
1500 .main_clk = "dss1_fck",
1501 .prcm = {
1502 .omap2 = {
1503 .prcm_reg_id = 1,
1504 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1505 .module_offs = CORE_MOD,
1506 },
1507 },
1508 .slaves = omap2430_dss_venc_slaves,
1509 .slaves_cnt = ARRAY_SIZE(omap2430_dss_venc_slaves),
1510 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1511 .flags = HWMOD_NO_IDLEST,
1512};
1513
1514/* I2C common */
1515static struct omap_hwmod_class_sysconfig i2c_sysc = {
1516 .rev_offs = 0x00,
1517 .sysc_offs = 0x20,
1518 .syss_offs = 0x10,
1519 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1520 SYSS_HAS_RESET_STATUS),
1521 .sysc_fields = &omap_hwmod_sysc_type1,
1522};
1523
1524static struct omap_hwmod_class i2c_class = {
1525 .name = "i2c",
1526 .sysc = &i2c_sysc,
1527};
1528
1529static struct omap_i2c_dev_attr i2c_dev_attr = {
1530 .fifo_depth = 8, /* bytes */
1531};
1532
1533/* I2C1 */
1534
1535static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
1536 { .irq = INT_24XX_I2C1_IRQ, },
1537};
1538
1539static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
1540 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
1541 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
1542};
1543
1544static struct omap_hwmod_ocp_if *omap2430_i2c1_slaves[] = {
1545 &omap2430_l4_core__i2c1,
1546};
1547
1548static struct omap_hwmod omap2430_i2c1_hwmod = {
1549 .name = "i2c1",
1550 .mpu_irqs = i2c1_mpu_irqs,
1551 .mpu_irqs_cnt = ARRAY_SIZE(i2c1_mpu_irqs),
1552 .sdma_reqs = i2c1_sdma_reqs,
1553 .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
1554 .main_clk = "i2chs1_fck",
1555 .prcm = {
1556 .omap2 = {
1557 /*
1558 * NOTE: The CM_FCLKEN* and CM_ICLKEN* for
1559 * I2CHS IP's do not follow the usual pattern.
1560 * prcm_reg_id alone cannot be used to program
1561 * the iclk and fclk. Needs to be handled using
1562 * additional flags when clk handling is moved
1563 * to hwmod framework.
1564 */
1565 .module_offs = CORE_MOD,
1566 .prcm_reg_id = 1,
1567 .module_bit = OMAP2430_EN_I2CHS1_SHIFT,
1568 .idlest_reg_id = 1,
1569 .idlest_idle_bit = OMAP2430_ST_I2CHS1_SHIFT,
1570 },
1571 },
1572 .slaves = omap2430_i2c1_slaves,
1573 .slaves_cnt = ARRAY_SIZE(omap2430_i2c1_slaves),
1574 .class = &i2c_class,
1575 .dev_attr = &i2c_dev_attr,
1576 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1577};
1578
1579/* I2C2 */
1580
1581static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
1582 { .irq = INT_24XX_I2C2_IRQ, },
1583};
1584
1585static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
1586 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
1587 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
1588};
1589
1590static struct omap_hwmod_ocp_if *omap2430_i2c2_slaves[] = {
1591 &omap2430_l4_core__i2c2,
1592};
1593
1594static struct omap_hwmod omap2430_i2c2_hwmod = {
1595 .name = "i2c2",
1596 .mpu_irqs = i2c2_mpu_irqs,
1597 .mpu_irqs_cnt = ARRAY_SIZE(i2c2_mpu_irqs),
1598 .sdma_reqs = i2c2_sdma_reqs,
1599 .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
1600 .main_clk = "i2chs2_fck",
1601 .prcm = {
1602 .omap2 = {
1603 .module_offs = CORE_MOD,
1604 .prcm_reg_id = 1,
1605 .module_bit = OMAP2430_EN_I2CHS2_SHIFT,
1606 .idlest_reg_id = 1,
1607 .idlest_idle_bit = OMAP2430_ST_I2CHS2_SHIFT,
1608 },
1609 },
1610 .slaves = omap2430_i2c2_slaves,
1611 .slaves_cnt = ARRAY_SIZE(omap2430_i2c2_slaves),
1612 .class = &i2c_class,
1613 .dev_attr = &i2c_dev_attr,
1614 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1615};
1616
1617/* l4_wkup -> gpio1 */
1618static struct omap_hwmod_addr_space omap2430_gpio1_addr_space[] = {
1619 {
1620 .pa_start = 0x4900C000,
1621 .pa_end = 0x4900C1ff,
1622 .flags = ADDR_TYPE_RT
1623 },
1624};
1625
1626static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
1627 .master = &omap2430_l4_wkup_hwmod,
1628 .slave = &omap2430_gpio1_hwmod,
1629 .clk = "gpios_ick",
1630 .addr = omap2430_gpio1_addr_space,
1631 .addr_cnt = ARRAY_SIZE(omap2430_gpio1_addr_space),
1632 .user = OCP_USER_MPU | OCP_USER_SDMA,
1633};
1634
1635/* l4_wkup -> gpio2 */
1636static struct omap_hwmod_addr_space omap2430_gpio2_addr_space[] = {
1637 {
1638 .pa_start = 0x4900E000,
1639 .pa_end = 0x4900E1ff,
1640 .flags = ADDR_TYPE_RT
1641 },
1642};
1643
1644static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
1645 .master = &omap2430_l4_wkup_hwmod,
1646 .slave = &omap2430_gpio2_hwmod,
1647 .clk = "gpios_ick",
1648 .addr = omap2430_gpio2_addr_space,
1649 .addr_cnt = ARRAY_SIZE(omap2430_gpio2_addr_space),
1650 .user = OCP_USER_MPU | OCP_USER_SDMA,
1651};
1652
1653/* l4_wkup -> gpio3 */
1654static struct omap_hwmod_addr_space omap2430_gpio3_addr_space[] = {
1655 {
1656 .pa_start = 0x49010000,
1657 .pa_end = 0x490101ff,
1658 .flags = ADDR_TYPE_RT
1659 },
1660};
1661
1662static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
1663 .master = &omap2430_l4_wkup_hwmod,
1664 .slave = &omap2430_gpio3_hwmod,
1665 .clk = "gpios_ick",
1666 .addr = omap2430_gpio3_addr_space,
1667 .addr_cnt = ARRAY_SIZE(omap2430_gpio3_addr_space),
1668 .user = OCP_USER_MPU | OCP_USER_SDMA,
1669};
1670
1671/* l4_wkup -> gpio4 */
1672static struct omap_hwmod_addr_space omap2430_gpio4_addr_space[] = {
1673 {
1674 .pa_start = 0x49012000,
1675 .pa_end = 0x490121ff,
1676 .flags = ADDR_TYPE_RT
1677 },
1678};
1679
1680static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
1681 .master = &omap2430_l4_wkup_hwmod,
1682 .slave = &omap2430_gpio4_hwmod,
1683 .clk = "gpios_ick",
1684 .addr = omap2430_gpio4_addr_space,
1685 .addr_cnt = ARRAY_SIZE(omap2430_gpio4_addr_space),
1686 .user = OCP_USER_MPU | OCP_USER_SDMA,
1687};
1688
1689/* l4_core -> gpio5 */
1690static struct omap_hwmod_addr_space omap2430_gpio5_addr_space[] = {
1691 {
1692 .pa_start = 0x480B6000,
1693 .pa_end = 0x480B61ff,
1694 .flags = ADDR_TYPE_RT
1695 },
1696};
1697
1698static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
1699 .master = &omap2430_l4_core_hwmod,
1700 .slave = &omap2430_gpio5_hwmod,
1701 .clk = "gpio5_ick",
1702 .addr = omap2430_gpio5_addr_space,
1703 .addr_cnt = ARRAY_SIZE(omap2430_gpio5_addr_space),
1704 .user = OCP_USER_MPU | OCP_USER_SDMA,
1705};
1706
1707/* gpio dev_attr */
1708static struct omap_gpio_dev_attr gpio_dev_attr = {
1709 .bank_width = 32,
1710 .dbck_flag = false,
1711};
1712
1713static struct omap_hwmod_class_sysconfig omap243x_gpio_sysc = {
1714 .rev_offs = 0x0000,
1715 .sysc_offs = 0x0010,
1716 .syss_offs = 0x0014,
1717 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1718 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1719 SYSS_HAS_RESET_STATUS),
1720 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1721 .sysc_fields = &omap_hwmod_sysc_type1,
1722};
1723
1724/*
1725 * 'gpio' class
1726 * general purpose io module
1727 */
1728static struct omap_hwmod_class omap243x_gpio_hwmod_class = {
1729 .name = "gpio",
1730 .sysc = &omap243x_gpio_sysc,
1731 .rev = 0,
1732};
1733
1734/* gpio1 */
1735static struct omap_hwmod_irq_info omap243x_gpio1_irqs[] = {
1736 { .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
1737};
1738
1739static struct omap_hwmod_ocp_if *omap2430_gpio1_slaves[] = {
1740 &omap2430_l4_wkup__gpio1,
1741};
1742
1743static struct omap_hwmod omap2430_gpio1_hwmod = {
1744 .name = "gpio1",
1745 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1746 .mpu_irqs = omap243x_gpio1_irqs,
1747 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio1_irqs),
1748 .main_clk = "gpios_fck",
1749 .prcm = {
1750 .omap2 = {
1751 .prcm_reg_id = 1,
1752 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1753 .module_offs = WKUP_MOD,
1754 .idlest_reg_id = 1,
1755 .idlest_idle_bit = OMAP24XX_EN_GPIOS_SHIFT,
1756 },
1757 },
1758 .slaves = omap2430_gpio1_slaves,
1759 .slaves_cnt = ARRAY_SIZE(omap2430_gpio1_slaves),
1760 .class = &omap243x_gpio_hwmod_class,
1761 .dev_attr = &gpio_dev_attr,
1762 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1763};
1764
1765/* gpio2 */
1766static struct omap_hwmod_irq_info omap243x_gpio2_irqs[] = {
1767 { .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
1768};
1769
1770static struct omap_hwmod_ocp_if *omap2430_gpio2_slaves[] = {
1771 &omap2430_l4_wkup__gpio2,
1772};
1773
1774static struct omap_hwmod omap2430_gpio2_hwmod = {
1775 .name = "gpio2",
1776 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1777 .mpu_irqs = omap243x_gpio2_irqs,
1778 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio2_irqs),
1779 .main_clk = "gpios_fck",
1780 .prcm = {
1781 .omap2 = {
1782 .prcm_reg_id = 1,
1783 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1784 .module_offs = WKUP_MOD,
1785 .idlest_reg_id = 1,
1786 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1787 },
1788 },
1789 .slaves = omap2430_gpio2_slaves,
1790 .slaves_cnt = ARRAY_SIZE(omap2430_gpio2_slaves),
1791 .class = &omap243x_gpio_hwmod_class,
1792 .dev_attr = &gpio_dev_attr,
1793 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1794};
1795
1796/* gpio3 */
1797static struct omap_hwmod_irq_info omap243x_gpio3_irqs[] = {
1798 { .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
1799};
1800
1801static struct omap_hwmod_ocp_if *omap2430_gpio3_slaves[] = {
1802 &omap2430_l4_wkup__gpio3,
1803};
1804
1805static struct omap_hwmod omap2430_gpio3_hwmod = {
1806 .name = "gpio3",
1807 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1808 .mpu_irqs = omap243x_gpio3_irqs,
1809 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio3_irqs),
1810 .main_clk = "gpios_fck",
1811 .prcm = {
1812 .omap2 = {
1813 .prcm_reg_id = 1,
1814 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1815 .module_offs = WKUP_MOD,
1816 .idlest_reg_id = 1,
1817 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1818 },
1819 },
1820 .slaves = omap2430_gpio3_slaves,
1821 .slaves_cnt = ARRAY_SIZE(omap2430_gpio3_slaves),
1822 .class = &omap243x_gpio_hwmod_class,
1823 .dev_attr = &gpio_dev_attr,
1824 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1825};
1826
1827/* gpio4 */
1828static struct omap_hwmod_irq_info omap243x_gpio4_irqs[] = {
1829 { .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
1830};
1831
1832static struct omap_hwmod_ocp_if *omap2430_gpio4_slaves[] = {
1833 &omap2430_l4_wkup__gpio4,
1834};
1835
1836static struct omap_hwmod omap2430_gpio4_hwmod = {
1837 .name = "gpio4",
1838 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1839 .mpu_irqs = omap243x_gpio4_irqs,
1840 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio4_irqs),
1841 .main_clk = "gpios_fck",
1842 .prcm = {
1843 .omap2 = {
1844 .prcm_reg_id = 1,
1845 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1846 .module_offs = WKUP_MOD,
1847 .idlest_reg_id = 1,
1848 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1849 },
1850 },
1851 .slaves = omap2430_gpio4_slaves,
1852 .slaves_cnt = ARRAY_SIZE(omap2430_gpio4_slaves),
1853 .class = &omap243x_gpio_hwmod_class,
1854 .dev_attr = &gpio_dev_attr,
1855 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1856};
1857
1858/* gpio5 */
1859static struct omap_hwmod_irq_info omap243x_gpio5_irqs[] = {
1860 { .irq = 33 }, /* INT_24XX_GPIO_BANK5 */
1861};
1862
1863static struct omap_hwmod_ocp_if *omap2430_gpio5_slaves[] = {
1864 &omap2430_l4_core__gpio5,
1865};
1866
1867static struct omap_hwmod omap2430_gpio5_hwmod = {
1868 .name = "gpio5",
1869 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1870 .mpu_irqs = omap243x_gpio5_irqs,
1871 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio5_irqs),
1872 .main_clk = "gpio5_fck",
1873 .prcm = {
1874 .omap2 = {
1875 .prcm_reg_id = 2,
1876 .module_bit = OMAP2430_EN_GPIO5_SHIFT,
1877 .module_offs = CORE_MOD,
1878 .idlest_reg_id = 2,
1879 .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
1880 },
1881 },
1882 .slaves = omap2430_gpio5_slaves,
1883 .slaves_cnt = ARRAY_SIZE(omap2430_gpio5_slaves),
1884 .class = &omap243x_gpio_hwmod_class,
1885 .dev_attr = &gpio_dev_attr,
1886 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1887};
1888
1889/* dma_system */
1890static struct omap_hwmod_class_sysconfig omap2430_dma_sysc = {
1891 .rev_offs = 0x0000,
1892 .sysc_offs = 0x002c,
1893 .syss_offs = 0x0028,
1894 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
1895 SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
1896 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1897 .idlemodes = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1898 .sysc_fields = &omap_hwmod_sysc_type1,
1899};
1900
1901static struct omap_hwmod_class omap2430_dma_hwmod_class = {
1902 .name = "dma",
1903 .sysc = &omap2430_dma_sysc,
1904};
1905
1906/* dma attributes */
1907static struct omap_dma_dev_attr dma_dev_attr = {
1908 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1909 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
1910 .lch_count = 32,
1911};
1912
1913static struct omap_hwmod_irq_info omap2430_dma_system_irqs[] = {
1914 { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
1915 { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
1916 { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
1917 { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
1918};
1919
1920static struct omap_hwmod_addr_space omap2430_dma_system_addrs[] = {
1921 {
1922 .pa_start = 0x48056000,
1923 .pa_end = 0x48056fff,
1924 .flags = ADDR_TYPE_RT
1925 },
1926};
1927
1928/* dma_system -> L3 */
1929static struct omap_hwmod_ocp_if omap2430_dma_system__l3 = {
1930 .master = &omap2430_dma_system_hwmod,
1931 .slave = &omap2430_l3_main_hwmod,
1932 .clk = "core_l3_ck",
1933 .user = OCP_USER_MPU | OCP_USER_SDMA,
1934};
1935
1936/* dma_system master ports */
1937static struct omap_hwmod_ocp_if *omap2430_dma_system_masters[] = {
1938 &omap2430_dma_system__l3,
1939};
1940
1941/* l4_core -> dma_system */
1942static struct omap_hwmod_ocp_if omap2430_l4_core__dma_system = {
1943 .master = &omap2430_l4_core_hwmod,
1944 .slave = &omap2430_dma_system_hwmod,
1945 .clk = "sdma_ick",
1946 .addr = omap2430_dma_system_addrs,
1947 .addr_cnt = ARRAY_SIZE(omap2430_dma_system_addrs),
1948 .user = OCP_USER_MPU | OCP_USER_SDMA,
1949};
1950
1951/* dma_system slave ports */
1952static struct omap_hwmod_ocp_if *omap2430_dma_system_slaves[] = {
1953 &omap2430_l4_core__dma_system,
1954};
1955
1956static struct omap_hwmod omap2430_dma_system_hwmod = {
1957 .name = "dma",
1958 .class = &omap2430_dma_hwmod_class,
1959 .mpu_irqs = omap2430_dma_system_irqs,
1960 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dma_system_irqs),
1961 .main_clk = "core_l3_ck",
1962 .slaves = omap2430_dma_system_slaves,
1963 .slaves_cnt = ARRAY_SIZE(omap2430_dma_system_slaves),
1964 .masters = omap2430_dma_system_masters,
1965 .masters_cnt = ARRAY_SIZE(omap2430_dma_system_masters),
1966 .dev_attr = &dma_dev_attr,
1967 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1968 .flags = HWMOD_NO_IDLEST,
1969};
1970
1971/*
1972 * 'mailbox' class
1973 * mailbox module allowing communication between the on-chip processors
1974 * using a queued mailbox-interrupt mechanism.
1975 */
1976
1977static struct omap_hwmod_class_sysconfig omap2430_mailbox_sysc = {
1978 .rev_offs = 0x000,
1979 .sysc_offs = 0x010,
1980 .syss_offs = 0x014,
1981 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1982 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1983 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1984 .sysc_fields = &omap_hwmod_sysc_type1,
1985};
1986
1987static struct omap_hwmod_class omap2430_mailbox_hwmod_class = {
1988 .name = "mailbox",
1989 .sysc = &omap2430_mailbox_sysc,
1990};
1991
1992/* mailbox */
1993static struct omap_hwmod omap2430_mailbox_hwmod;
1994static struct omap_hwmod_irq_info omap2430_mailbox_irqs[] = {
1995 { .irq = 26 },
1996};
1997
1998static struct omap_hwmod_addr_space omap2430_mailbox_addrs[] = {
1999 {
2000 .pa_start = 0x48094000,
2001 .pa_end = 0x480941ff,
2002 .flags = ADDR_TYPE_RT,
2003 },
2004};
2005
2006/* l4_core -> mailbox */
2007static struct omap_hwmod_ocp_if omap2430_l4_core__mailbox = {
2008 .master = &omap2430_l4_core_hwmod,
2009 .slave = &omap2430_mailbox_hwmod,
2010 .addr = omap2430_mailbox_addrs,
2011 .addr_cnt = ARRAY_SIZE(omap2430_mailbox_addrs),
2012 .user = OCP_USER_MPU | OCP_USER_SDMA,
2013};
2014
2015/* mailbox slave ports */
2016static struct omap_hwmod_ocp_if *omap2430_mailbox_slaves[] = {
2017 &omap2430_l4_core__mailbox,
2018};
2019
2020static struct omap_hwmod omap2430_mailbox_hwmod = {
2021 .name = "mailbox",
2022 .class = &omap2430_mailbox_hwmod_class,
2023 .mpu_irqs = omap2430_mailbox_irqs,
2024 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mailbox_irqs),
2025 .main_clk = "mailboxes_ick",
2026 .prcm = {
2027 .omap2 = {
2028 .prcm_reg_id = 1,
2029 .module_bit = OMAP24XX_EN_MAILBOXES_SHIFT,
2030 .module_offs = CORE_MOD,
2031 .idlest_reg_id = 1,
2032 .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
2033 },
2034 },
2035 .slaves = omap2430_mailbox_slaves,
2036 .slaves_cnt = ARRAY_SIZE(omap2430_mailbox_slaves),
2037 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2038};
2039
2040/*
2041 * 'mcspi' class
2042 * multichannel serial port interface (mcspi) / master/slave synchronous serial
2043 * bus
2044 */
2045
2046static struct omap_hwmod_class_sysconfig omap2430_mcspi_sysc = {
2047 .rev_offs = 0x0000,
2048 .sysc_offs = 0x0010,
2049 .syss_offs = 0x0014,
2050 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2051 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2052 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2053 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2054 .sysc_fields = &omap_hwmod_sysc_type1,
2055};
2056
2057static struct omap_hwmod_class omap2430_mcspi_class = {
2058 .name = "mcspi",
2059 .sysc = &omap2430_mcspi_sysc,
2060 .rev = OMAP2_MCSPI_REV,
2061};
2062
2063/* mcspi1 */
2064static struct omap_hwmod_irq_info omap2430_mcspi1_mpu_irqs[] = {
2065 { .irq = 65 },
2066};
2067
2068static struct omap_hwmod_dma_info omap2430_mcspi1_sdma_reqs[] = {
2069 { .name = "tx0", .dma_req = 35 }, /* DMA_SPI1_TX0 */
2070 { .name = "rx0", .dma_req = 36 }, /* DMA_SPI1_RX0 */
2071 { .name = "tx1", .dma_req = 37 }, /* DMA_SPI1_TX1 */
2072 { .name = "rx1", .dma_req = 38 }, /* DMA_SPI1_RX1 */
2073 { .name = "tx2", .dma_req = 39 }, /* DMA_SPI1_TX2 */
2074 { .name = "rx2", .dma_req = 40 }, /* DMA_SPI1_RX2 */
2075 { .name = "tx3", .dma_req = 41 }, /* DMA_SPI1_TX3 */
2076 { .name = "rx3", .dma_req = 42 }, /* DMA_SPI1_RX3 */
2077};
2078
2079static struct omap_hwmod_ocp_if *omap2430_mcspi1_slaves[] = {
2080 &omap2430_l4_core__mcspi1,
2081};
2082
2083static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
2084 .num_chipselect = 4,
2085};
2086
2087static struct omap_hwmod omap2430_mcspi1_hwmod = {
2088 .name = "mcspi1_hwmod",
2089 .mpu_irqs = omap2430_mcspi1_mpu_irqs,
2090 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcspi1_mpu_irqs),
2091 .sdma_reqs = omap2430_mcspi1_sdma_reqs,
2092 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcspi1_sdma_reqs),
2093 .main_clk = "mcspi1_fck",
2094 .prcm = {
2095 .omap2 = {
2096 .module_offs = CORE_MOD,
2097 .prcm_reg_id = 1,
2098 .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
2099 .idlest_reg_id = 1,
2100 .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
2101 },
2102 },
2103 .slaves = omap2430_mcspi1_slaves,
2104 .slaves_cnt = ARRAY_SIZE(omap2430_mcspi1_slaves),
2105 .class = &omap2430_mcspi_class,
2106 .dev_attr = &omap_mcspi1_dev_attr,
2107 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2108};
2109
2110/* mcspi2 */
2111static struct omap_hwmod_irq_info omap2430_mcspi2_mpu_irqs[] = {
2112 { .irq = 66 },
2113};
2114
2115static struct omap_hwmod_dma_info omap2430_mcspi2_sdma_reqs[] = {
2116 { .name = "tx0", .dma_req = 43 }, /* DMA_SPI2_TX0 */
2117 { .name = "rx0", .dma_req = 44 }, /* DMA_SPI2_RX0 */
2118 { .name = "tx1", .dma_req = 45 }, /* DMA_SPI2_TX1 */
2119 { .name = "rx1", .dma_req = 46 }, /* DMA_SPI2_RX1 */
2120};
2121
2122static struct omap_hwmod_ocp_if *omap2430_mcspi2_slaves[] = {
2123 &omap2430_l4_core__mcspi2,
2124};
2125
2126static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
2127 .num_chipselect = 2,
2128};
2129
2130static struct omap_hwmod omap2430_mcspi2_hwmod = {
2131 .name = "mcspi2_hwmod",
2132 .mpu_irqs = omap2430_mcspi2_mpu_irqs,
2133 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcspi2_mpu_irqs),
2134 .sdma_reqs = omap2430_mcspi2_sdma_reqs,
2135 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcspi2_sdma_reqs),
2136 .main_clk = "mcspi2_fck",
2137 .prcm = {
2138 .omap2 = {
2139 .module_offs = CORE_MOD,
2140 .prcm_reg_id = 1,
2141 .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
2142 .idlest_reg_id = 1,
2143 .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
2144 },
2145 },
2146 .slaves = omap2430_mcspi2_slaves,
2147 .slaves_cnt = ARRAY_SIZE(omap2430_mcspi2_slaves),
2148 .class = &omap2430_mcspi_class,
2149 .dev_attr = &omap_mcspi2_dev_attr,
2150 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2151};
2152
2153/* mcspi3 */
2154static struct omap_hwmod_irq_info omap2430_mcspi3_mpu_irqs[] = {
2155 { .irq = 91 },
2156};
2157
2158static struct omap_hwmod_dma_info omap2430_mcspi3_sdma_reqs[] = {
2159 { .name = "tx0", .dma_req = 15 }, /* DMA_SPI3_TX0 */
2160 { .name = "rx0", .dma_req = 16 }, /* DMA_SPI3_RX0 */
2161 { .name = "tx1", .dma_req = 23 }, /* DMA_SPI3_TX1 */
2162 { .name = "rx1", .dma_req = 24 }, /* DMA_SPI3_RX1 */
2163};
2164
2165static struct omap_hwmod_ocp_if *omap2430_mcspi3_slaves[] = {
2166 &omap2430_l4_core__mcspi3,
2167};
2168
2169static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
2170 .num_chipselect = 2,
2171};
2172
2173static struct omap_hwmod omap2430_mcspi3_hwmod = {
2174 .name = "mcspi3_hwmod",
2175 .mpu_irqs = omap2430_mcspi3_mpu_irqs,
2176 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcspi3_mpu_irqs),
2177 .sdma_reqs = omap2430_mcspi3_sdma_reqs,
2178 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcspi3_sdma_reqs),
2179 .main_clk = "mcspi3_fck",
2180 .prcm = {
2181 .omap2 = {
2182 .module_offs = CORE_MOD,
2183 .prcm_reg_id = 2,
2184 .module_bit = OMAP2430_EN_MCSPI3_SHIFT,
2185 .idlest_reg_id = 2,
2186 .idlest_idle_bit = OMAP2430_ST_MCSPI3_SHIFT,
2187 },
2188 },
2189 .slaves = omap2430_mcspi3_slaves,
2190 .slaves_cnt = ARRAY_SIZE(omap2430_mcspi3_slaves),
2191 .class = &omap2430_mcspi_class,
2192 .dev_attr = &omap_mcspi3_dev_attr,
2193 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2194};
2195
2196/*
2197 * usbhsotg
2198 */
2199static struct omap_hwmod_class_sysconfig omap2430_usbhsotg_sysc = {
2200 .rev_offs = 0x0400,
2201 .sysc_offs = 0x0404,
2202 .syss_offs = 0x0408,
2203 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
2204 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2205 SYSC_HAS_AUTOIDLE),
2206 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2207 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
2208 .sysc_fields = &omap_hwmod_sysc_type1,
2209};
2210
2211static struct omap_hwmod_class usbotg_class = {
2212 .name = "usbotg",
2213 .sysc = &omap2430_usbhsotg_sysc,
2214};
2215
2216/* usb_otg_hs */
2217static struct omap_hwmod_irq_info omap2430_usbhsotg_mpu_irqs[] = {
2218
2219 { .name = "mc", .irq = 92 },
2220 { .name = "dma", .irq = 93 },
2221};
2222
2223static struct omap_hwmod omap2430_usbhsotg_hwmod = {
2224 .name = "usb_otg_hs",
2225 .mpu_irqs = omap2430_usbhsotg_mpu_irqs,
2226 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_usbhsotg_mpu_irqs),
2227 .main_clk = "usbhs_ick",
2228 .prcm = {
2229 .omap2 = {
2230 .prcm_reg_id = 1,
2231 .module_bit = OMAP2430_EN_USBHS_MASK,
2232 .module_offs = CORE_MOD,
2233 .idlest_reg_id = 1,
2234 .idlest_idle_bit = OMAP2430_ST_USBHS_SHIFT,
2235 },
2236 },
2237 .masters = omap2430_usbhsotg_masters,
2238 .masters_cnt = ARRAY_SIZE(omap2430_usbhsotg_masters),
2239 .slaves = omap2430_usbhsotg_slaves,
2240 .slaves_cnt = ARRAY_SIZE(omap2430_usbhsotg_slaves),
2241 .class = &usbotg_class,
2242 /*
2243 * Erratum ID: i479 idle_req / idle_ack mechanism potentially
2244 * broken when autoidle is enabled
2245 * workaround is to disable the autoidle bit at module level.
2246 */
2247 .flags = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
2248 | HWMOD_SWSUP_MSTANDBY,
2249 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
2250};
2251
2252/*
2253 * 'mcbsp' class
2254 * multi channel buffered serial port controller
2255 */
2256
2257static struct omap_hwmod_class_sysconfig omap2430_mcbsp_sysc = {
2258 .rev_offs = 0x007C,
2259 .sysc_offs = 0x008C,
2260 .sysc_flags = (SYSC_HAS_SOFTRESET),
2261 .sysc_fields = &omap_hwmod_sysc_type1,
2262};
2263
2264static struct omap_hwmod_class omap2430_mcbsp_hwmod_class = {
2265 .name = "mcbsp",
2266 .sysc = &omap2430_mcbsp_sysc,
2267 .rev = MCBSP_CONFIG_TYPE2,
2268};
2269
2270/* mcbsp1 */
2271static struct omap_hwmod_irq_info omap2430_mcbsp1_irqs[] = {
2272 { .name = "tx", .irq = 59 },
2273 { .name = "rx", .irq = 60 },
2274 { .name = "ovr", .irq = 61 },
2275 { .name = "common", .irq = 64 },
2276};
2277
2278static struct omap_hwmod_dma_info omap2430_mcbsp1_sdma_chs[] = {
2279 { .name = "rx", .dma_req = 32 },
2280 { .name = "tx", .dma_req = 31 },
2281};
2282
2283static struct omap_hwmod_addr_space omap2430_mcbsp1_addrs[] = {
2284 {
2285 .name = "mpu",
2286 .pa_start = 0x48074000,
2287 .pa_end = 0x480740ff,
2288 .flags = ADDR_TYPE_RT
2289 },
2290};
2291
2292/* l4_core -> mcbsp1 */
2293static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp1 = {
2294 .master = &omap2430_l4_core_hwmod,
2295 .slave = &omap2430_mcbsp1_hwmod,
2296 .clk = "mcbsp1_ick",
2297 .addr = omap2430_mcbsp1_addrs,
2298 .addr_cnt = ARRAY_SIZE(omap2430_mcbsp1_addrs),
2299 .user = OCP_USER_MPU | OCP_USER_SDMA,
2300};
2301
2302/* mcbsp1 slave ports */
2303static struct omap_hwmod_ocp_if *omap2430_mcbsp1_slaves[] = {
2304 &omap2430_l4_core__mcbsp1,
2305};
2306
2307static struct omap_hwmod omap2430_mcbsp1_hwmod = {
2308 .name = "mcbsp1",
2309 .class = &omap2430_mcbsp_hwmod_class,
2310 .mpu_irqs = omap2430_mcbsp1_irqs,
2311 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcbsp1_irqs),
2312 .sdma_reqs = omap2430_mcbsp1_sdma_chs,
2313 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcbsp1_sdma_chs),
2314 .main_clk = "mcbsp1_fck",
2315 .prcm = {
2316 .omap2 = {
2317 .prcm_reg_id = 1,
2318 .module_bit = OMAP24XX_EN_MCBSP1_SHIFT,
2319 .module_offs = CORE_MOD,
2320 .idlest_reg_id = 1,
2321 .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
2322 },
2323 },
2324 .slaves = omap2430_mcbsp1_slaves,
2325 .slaves_cnt = ARRAY_SIZE(omap2430_mcbsp1_slaves),
2326 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2327};
2328
2329/* mcbsp2 */
2330static struct omap_hwmod_irq_info omap2430_mcbsp2_irqs[] = {
2331 { .name = "tx", .irq = 62 },
2332 { .name = "rx", .irq = 63 },
2333 { .name = "common", .irq = 16 },
2334};
2335
2336static struct omap_hwmod_dma_info omap2430_mcbsp2_sdma_chs[] = {
2337 { .name = "rx", .dma_req = 34 },
2338 { .name = "tx", .dma_req = 33 },
2339};
2340
2341static struct omap_hwmod_addr_space omap2430_mcbsp2_addrs[] = {
2342 {
2343 .name = "mpu",
2344 .pa_start = 0x48076000,
2345 .pa_end = 0x480760ff,
2346 .flags = ADDR_TYPE_RT
2347 },
2348};
2349
2350/* l4_core -> mcbsp2 */
2351static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp2 = {
2352 .master = &omap2430_l4_core_hwmod,
2353 .slave = &omap2430_mcbsp2_hwmod,
2354 .clk = "mcbsp2_ick",
2355 .addr = omap2430_mcbsp2_addrs,
2356 .addr_cnt = ARRAY_SIZE(omap2430_mcbsp2_addrs),
2357 .user = OCP_USER_MPU | OCP_USER_SDMA,
2358};
2359
2360/* mcbsp2 slave ports */
2361static struct omap_hwmod_ocp_if *omap2430_mcbsp2_slaves[] = {
2362 &omap2430_l4_core__mcbsp2,
2363};
2364
2365static struct omap_hwmod omap2430_mcbsp2_hwmod = {
2366 .name = "mcbsp2",
2367 .class = &omap2430_mcbsp_hwmod_class,
2368 .mpu_irqs = omap2430_mcbsp2_irqs,
2369 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcbsp2_irqs),
2370 .sdma_reqs = omap2430_mcbsp2_sdma_chs,
2371 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcbsp2_sdma_chs),
2372 .main_clk = "mcbsp2_fck",
2373 .prcm = {
2374 .omap2 = {
2375 .prcm_reg_id = 1,
2376 .module_bit = OMAP24XX_EN_MCBSP2_SHIFT,
2377 .module_offs = CORE_MOD,
2378 .idlest_reg_id = 1,
2379 .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
2380 },
2381 },
2382 .slaves = omap2430_mcbsp2_slaves,
2383 .slaves_cnt = ARRAY_SIZE(omap2430_mcbsp2_slaves),
2384 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2385};
2386
2387/* mcbsp3 */
2388static struct omap_hwmod_irq_info omap2430_mcbsp3_irqs[] = {
2389 { .name = "tx", .irq = 89 },
2390 { .name = "rx", .irq = 90 },
2391 { .name = "common", .irq = 17 },
2392};
2393
2394static struct omap_hwmod_dma_info omap2430_mcbsp3_sdma_chs[] = {
2395 { .name = "rx", .dma_req = 18 },
2396 { .name = "tx", .dma_req = 17 },
2397};
2398
2399static struct omap_hwmod_addr_space omap2430_mcbsp3_addrs[] = {
2400 {
2401 .name = "mpu",
2402 .pa_start = 0x4808C000,
2403 .pa_end = 0x4808C0ff,
2404 .flags = ADDR_TYPE_RT
2405 },
2406};
2407
2408/* l4_core -> mcbsp3 */
2409static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp3 = {
2410 .master = &omap2430_l4_core_hwmod,
2411 .slave = &omap2430_mcbsp3_hwmod,
2412 .clk = "mcbsp3_ick",
2413 .addr = omap2430_mcbsp3_addrs,
2414 .addr_cnt = ARRAY_SIZE(omap2430_mcbsp3_addrs),
2415 .user = OCP_USER_MPU | OCP_USER_SDMA,
2416};
2417
2418/* mcbsp3 slave ports */
2419static struct omap_hwmod_ocp_if *omap2430_mcbsp3_slaves[] = {
2420 &omap2430_l4_core__mcbsp3,
2421};
2422
2423static struct omap_hwmod omap2430_mcbsp3_hwmod = {
2424 .name = "mcbsp3",
2425 .class = &omap2430_mcbsp_hwmod_class,
2426 .mpu_irqs = omap2430_mcbsp3_irqs,
2427 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcbsp3_irqs),
2428 .sdma_reqs = omap2430_mcbsp3_sdma_chs,
2429 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcbsp3_sdma_chs),
2430 .main_clk = "mcbsp3_fck",
2431 .prcm = {
2432 .omap2 = {
2433 .prcm_reg_id = 1,
2434 .module_bit = OMAP2430_EN_MCBSP3_SHIFT,
2435 .module_offs = CORE_MOD,
2436 .idlest_reg_id = 2,
2437 .idlest_idle_bit = OMAP2430_ST_MCBSP3_SHIFT,
2438 },
2439 },
2440 .slaves = omap2430_mcbsp3_slaves,
2441 .slaves_cnt = ARRAY_SIZE(omap2430_mcbsp3_slaves),
2442 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2443};
2444
2445/* mcbsp4 */
2446static struct omap_hwmod_irq_info omap2430_mcbsp4_irqs[] = {
2447 { .name = "tx", .irq = 54 },
2448 { .name = "rx", .irq = 55 },
2449 { .name = "common", .irq = 18 },
2450};
2451
2452static struct omap_hwmod_dma_info omap2430_mcbsp4_sdma_chs[] = {
2453 { .name = "rx", .dma_req = 20 },
2454 { .name = "tx", .dma_req = 19 },
2455};
2456
2457static struct omap_hwmod_addr_space omap2430_mcbsp4_addrs[] = {
2458 {
2459 .name = "mpu",
2460 .pa_start = 0x4808E000,
2461 .pa_end = 0x4808E0ff,
2462 .flags = ADDR_TYPE_RT
2463 },
2464};
2465
2466/* l4_core -> mcbsp4 */
2467static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp4 = {
2468 .master = &omap2430_l4_core_hwmod,
2469 .slave = &omap2430_mcbsp4_hwmod,
2470 .clk = "mcbsp4_ick",
2471 .addr = omap2430_mcbsp4_addrs,
2472 .addr_cnt = ARRAY_SIZE(omap2430_mcbsp4_addrs),
2473 .user = OCP_USER_MPU | OCP_USER_SDMA,
2474};
2475
2476/* mcbsp4 slave ports */
2477static struct omap_hwmod_ocp_if *omap2430_mcbsp4_slaves[] = {
2478 &omap2430_l4_core__mcbsp4,
2479};
2480
2481static struct omap_hwmod omap2430_mcbsp4_hwmod = {
2482 .name = "mcbsp4",
2483 .class = &omap2430_mcbsp_hwmod_class,
2484 .mpu_irqs = omap2430_mcbsp4_irqs,
2485 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcbsp4_irqs),
2486 .sdma_reqs = omap2430_mcbsp4_sdma_chs,
2487 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcbsp4_sdma_chs),
2488 .main_clk = "mcbsp4_fck",
2489 .prcm = {
2490 .omap2 = {
2491 .prcm_reg_id = 1,
2492 .module_bit = OMAP2430_EN_MCBSP4_SHIFT,
2493 .module_offs = CORE_MOD,
2494 .idlest_reg_id = 2,
2495 .idlest_idle_bit = OMAP2430_ST_MCBSP4_SHIFT,
2496 },
2497 },
2498 .slaves = omap2430_mcbsp4_slaves,
2499 .slaves_cnt = ARRAY_SIZE(omap2430_mcbsp4_slaves),
2500 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2501};
2502
2503/* mcbsp5 */
2504static struct omap_hwmod_irq_info omap2430_mcbsp5_irqs[] = {
2505 { .name = "tx", .irq = 81 },
2506 { .name = "rx", .irq = 82 },
2507 { .name = "common", .irq = 19 },
2508};
2509
2510static struct omap_hwmod_dma_info omap2430_mcbsp5_sdma_chs[] = {
2511 { .name = "rx", .dma_req = 22 },
2512 { .name = "tx", .dma_req = 21 },
2513};
2514
2515static struct omap_hwmod_addr_space omap2430_mcbsp5_addrs[] = {
2516 {
2517 .name = "mpu",
2518 .pa_start = 0x48096000,
2519 .pa_end = 0x480960ff,
2520 .flags = ADDR_TYPE_RT
2521 },
2522};
2523
2524/* l4_core -> mcbsp5 */
2525static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp5 = {
2526 .master = &omap2430_l4_core_hwmod,
2527 .slave = &omap2430_mcbsp5_hwmod,
2528 .clk = "mcbsp5_ick",
2529 .addr = omap2430_mcbsp5_addrs,
2530 .addr_cnt = ARRAY_SIZE(omap2430_mcbsp5_addrs),
2531 .user = OCP_USER_MPU | OCP_USER_SDMA,
2532};
2533
2534/* mcbsp5 slave ports */
2535static struct omap_hwmod_ocp_if *omap2430_mcbsp5_slaves[] = {
2536 &omap2430_l4_core__mcbsp5,
2537};
2538
2539static struct omap_hwmod omap2430_mcbsp5_hwmod = {
2540 .name = "mcbsp5",
2541 .class = &omap2430_mcbsp_hwmod_class,
2542 .mpu_irqs = omap2430_mcbsp5_irqs,
2543 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcbsp5_irqs),
2544 .sdma_reqs = omap2430_mcbsp5_sdma_chs,
2545 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcbsp5_sdma_chs),
2546 .main_clk = "mcbsp5_fck",
2547 .prcm = {
2548 .omap2 = {
2549 .prcm_reg_id = 1,
2550 .module_bit = OMAP2430_EN_MCBSP5_SHIFT,
2551 .module_offs = CORE_MOD,
2552 .idlest_reg_id = 2,
2553 .idlest_idle_bit = OMAP2430_ST_MCBSP5_SHIFT,
2554 },
2555 },
2556 .slaves = omap2430_mcbsp5_slaves,
2557 .slaves_cnt = ARRAY_SIZE(omap2430_mcbsp5_slaves),
2558 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2559};
2560
2561/* MMC/SD/SDIO common */
2562
2563static struct omap_hwmod_class_sysconfig omap2430_mmc_sysc = {
2564 .rev_offs = 0x1fc,
2565 .sysc_offs = 0x10,
2566 .syss_offs = 0x14,
2567 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2568 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2569 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2570 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2571 .sysc_fields = &omap_hwmod_sysc_type1,
2572};
2573
2574static struct omap_hwmod_class omap2430_mmc_class = {
2575 .name = "mmc",
2576 .sysc = &omap2430_mmc_sysc,
2577};
2578
2579/* MMC/SD/SDIO1 */
2580
2581static struct omap_hwmod_irq_info omap2430_mmc1_mpu_irqs[] = {
2582 { .irq = 83 },
2583};
2584
2585static struct omap_hwmod_dma_info omap2430_mmc1_sdma_reqs[] = {
2586 { .name = "tx", .dma_req = 61 }, /* DMA_MMC1_TX */
2587 { .name = "rx", .dma_req = 62 }, /* DMA_MMC1_RX */
2588};
2589
2590static struct omap_hwmod_opt_clk omap2430_mmc1_opt_clks[] = {
2591 { .role = "dbck", .clk = "mmchsdb1_fck" },
2592};
2593
2594static struct omap_hwmod_ocp_if *omap2430_mmc1_slaves[] = {
2595 &omap2430_l4_core__mmc1,
2596};
2597
2598static struct omap_mmc_dev_attr mmc1_dev_attr = {
2599 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
2600};
2601
2602static struct omap_hwmod omap2430_mmc1_hwmod = {
2603 .name = "mmc1",
2604 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2605 .mpu_irqs = omap2430_mmc1_mpu_irqs,
2606 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mmc1_mpu_irqs),
2607 .sdma_reqs = omap2430_mmc1_sdma_reqs,
2608 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mmc1_sdma_reqs),
2609 .opt_clks = omap2430_mmc1_opt_clks,
2610 .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc1_opt_clks),
2611 .main_clk = "mmchs1_fck",
2612 .prcm = {
2613 .omap2 = {
2614 .module_offs = CORE_MOD,
2615 .prcm_reg_id = 2,
2616 .module_bit = OMAP2430_EN_MMCHS1_SHIFT,
2617 .idlest_reg_id = 2,
2618 .idlest_idle_bit = OMAP2430_ST_MMCHS1_SHIFT,
2619 },
2620 },
2621 .dev_attr = &mmc1_dev_attr,
2622 .slaves = omap2430_mmc1_slaves,
2623 .slaves_cnt = ARRAY_SIZE(omap2430_mmc1_slaves),
2624 .class = &omap2430_mmc_class,
2625 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2626};
2627
2628/* MMC/SD/SDIO2 */
2629
2630static struct omap_hwmod_irq_info omap2430_mmc2_mpu_irqs[] = {
2631 { .irq = 86 },
2632};
2633
2634static struct omap_hwmod_dma_info omap2430_mmc2_sdma_reqs[] = {
2635 { .name = "tx", .dma_req = 47 }, /* DMA_MMC2_TX */
2636 { .name = "rx", .dma_req = 48 }, /* DMA_MMC2_RX */
2637};
2638
2639static struct omap_hwmod_opt_clk omap2430_mmc2_opt_clks[] = {
2640 { .role = "dbck", .clk = "mmchsdb2_fck" },
2641};
2642
2643static struct omap_hwmod_ocp_if *omap2430_mmc2_slaves[] = {
2644 &omap2430_l4_core__mmc2,
2645};
2646
2647static struct omap_hwmod omap2430_mmc2_hwmod = {
2648 .name = "mmc2",
2649 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2650 .mpu_irqs = omap2430_mmc2_mpu_irqs,
2651 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mmc2_mpu_irqs),
2652 .sdma_reqs = omap2430_mmc2_sdma_reqs,
2653 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mmc2_sdma_reqs),
2654 .opt_clks = omap2430_mmc2_opt_clks,
2655 .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc2_opt_clks),
2656 .main_clk = "mmchs2_fck",
2657 .prcm = {
2658 .omap2 = {
2659 .module_offs = CORE_MOD,
2660 .prcm_reg_id = 2,
2661 .module_bit = OMAP2430_EN_MMCHS2_SHIFT,
2662 .idlest_reg_id = 2,
2663 .idlest_idle_bit = OMAP2430_ST_MMCHS2_SHIFT,
2664 },
2665 },
2666 .slaves = omap2430_mmc2_slaves,
2667 .slaves_cnt = ARRAY_SIZE(omap2430_mmc2_slaves),
2668 .class = &omap2430_mmc_class,
2669 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2670};
2671
168static __initdata struct omap_hwmod *omap2430_hwmods[] = { 2672static __initdata struct omap_hwmod *omap2430_hwmods[] = {
169 &omap2430_l3_main_hwmod, 2673 &omap2430_l3_main_hwmod,
170 &omap2430_l4_core_hwmod, 2674 &omap2430_l4_core_hwmod,
171 &omap2430_l4_wkup_hwmod, 2675 &omap2430_l4_wkup_hwmod,
172 &omap2430_mpu_hwmod, 2676 &omap2430_mpu_hwmod,
173 &omap2430_iva_hwmod, 2677 &omap2430_iva_hwmod,
2678
2679 &omap2430_timer1_hwmod,
2680 &omap2430_timer2_hwmod,
2681 &omap2430_timer3_hwmod,
2682 &omap2430_timer4_hwmod,
2683 &omap2430_timer5_hwmod,
2684 &omap2430_timer6_hwmod,
2685 &omap2430_timer7_hwmod,
2686 &omap2430_timer8_hwmod,
2687 &omap2430_timer9_hwmod,
2688 &omap2430_timer10_hwmod,
2689 &omap2430_timer11_hwmod,
2690 &omap2430_timer12_hwmod,
2691
2692 &omap2430_wd_timer2_hwmod,
2693 &omap2430_uart1_hwmod,
2694 &omap2430_uart2_hwmod,
2695 &omap2430_uart3_hwmod,
2696 /* dss class */
2697 &omap2430_dss_core_hwmod,
2698 &omap2430_dss_dispc_hwmod,
2699 &omap2430_dss_rfbi_hwmod,
2700 &omap2430_dss_venc_hwmod,
2701 /* i2c class */
2702 &omap2430_i2c1_hwmod,
2703 &omap2430_i2c2_hwmod,
2704 &omap2430_mmc1_hwmod,
2705 &omap2430_mmc2_hwmod,
2706
2707 /* gpio class */
2708 &omap2430_gpio1_hwmod,
2709 &omap2430_gpio2_hwmod,
2710 &omap2430_gpio3_hwmod,
2711 &omap2430_gpio4_hwmod,
2712 &omap2430_gpio5_hwmod,
2713
2714 /* dma_system class*/
2715 &omap2430_dma_system_hwmod,
2716
2717 /* mcbsp class */
2718 &omap2430_mcbsp1_hwmod,
2719 &omap2430_mcbsp2_hwmod,
2720 &omap2430_mcbsp3_hwmod,
2721 &omap2430_mcbsp4_hwmod,
2722 &omap2430_mcbsp5_hwmod,
2723
2724 /* mailbox class */
2725 &omap2430_mailbox_hwmod,
2726
2727 /* mcspi class */
2728 &omap2430_mcspi1_hwmod,
2729 &omap2430_mcspi2_hwmod,
2730 &omap2430_mcspi3_hwmod,
2731
2732 /* usbotg class*/
2733 &omap2430_usbhsotg_hwmod,
2734
174 NULL, 2735 NULL,
175}; 2736};
176 2737
177int __init omap2430_hwmod_init(void) 2738int __init omap2430_hwmod_init(void)
178{ 2739{
179 return omap_hwmod_init(omap2430_hwmods); 2740 return omap_hwmod_register(omap2430_hwmods);
180} 2741}
181
182
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 5d8eb58ba5e3..909a84de6682 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -17,10 +17,22 @@
17#include <mach/irqs.h> 17#include <mach/irqs.h>
18#include <plat/cpu.h> 18#include <plat/cpu.h>
19#include <plat/dma.h> 19#include <plat/dma.h>
20#include <plat/serial.h>
21#include <plat/l3_3xxx.h>
22#include <plat/l4_3xxx.h>
23#include <plat/i2c.h>
24#include <plat/gpio.h>
25#include <plat/mmc.h>
26#include <plat/mcbsp.h>
27#include <plat/mcspi.h>
28#include <plat/dmtimer.h>
20 29
21#include "omap_hwmod_common_data.h" 30#include "omap_hwmod_common_data.h"
22 31
23#include "prm-regbits-34xx.h" 32#include "prm-regbits-34xx.h"
33#include "cm-regbits-34xx.h"
34#include "wd_timer.h"
35#include <mach/am35xx.h>
24 36
25/* 37/*
26 * OMAP3xxx hardware module integration data 38 * OMAP3xxx hardware module integration data
@@ -36,6 +48,42 @@ static struct omap_hwmod omap3xxx_iva_hwmod;
36static struct omap_hwmod omap3xxx_l3_main_hwmod; 48static struct omap_hwmod omap3xxx_l3_main_hwmod;
37static struct omap_hwmod omap3xxx_l4_core_hwmod; 49static struct omap_hwmod omap3xxx_l4_core_hwmod;
38static struct omap_hwmod omap3xxx_l4_per_hwmod; 50static struct omap_hwmod omap3xxx_l4_per_hwmod;
51static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
52static struct omap_hwmod omap3430es1_dss_core_hwmod;
53static struct omap_hwmod omap3xxx_dss_core_hwmod;
54static struct omap_hwmod omap3xxx_dss_dispc_hwmod;
55static struct omap_hwmod omap3xxx_dss_dsi1_hwmod;
56static struct omap_hwmod omap3xxx_dss_rfbi_hwmod;
57static struct omap_hwmod omap3xxx_dss_venc_hwmod;
58static struct omap_hwmod omap3xxx_i2c1_hwmod;
59static struct omap_hwmod omap3xxx_i2c2_hwmod;
60static struct omap_hwmod omap3xxx_i2c3_hwmod;
61static struct omap_hwmod omap3xxx_gpio1_hwmod;
62static struct omap_hwmod omap3xxx_gpio2_hwmod;
63static struct omap_hwmod omap3xxx_gpio3_hwmod;
64static struct omap_hwmod omap3xxx_gpio4_hwmod;
65static struct omap_hwmod omap3xxx_gpio5_hwmod;
66static struct omap_hwmod omap3xxx_gpio6_hwmod;
67static struct omap_hwmod omap34xx_sr1_hwmod;
68static struct omap_hwmod omap34xx_sr2_hwmod;
69static struct omap_hwmod omap34xx_mcspi1;
70static struct omap_hwmod omap34xx_mcspi2;
71static struct omap_hwmod omap34xx_mcspi3;
72static struct omap_hwmod omap34xx_mcspi4;
73static struct omap_hwmod omap3xxx_mmc1_hwmod;
74static struct omap_hwmod omap3xxx_mmc2_hwmod;
75static struct omap_hwmod omap3xxx_mmc3_hwmod;
76static struct omap_hwmod am35xx_usbhsotg_hwmod;
77
78static struct omap_hwmod omap3xxx_dma_system_hwmod;
79
80static struct omap_hwmod omap3xxx_mcbsp1_hwmod;
81static struct omap_hwmod omap3xxx_mcbsp2_hwmod;
82static struct omap_hwmod omap3xxx_mcbsp3_hwmod;
83static struct omap_hwmod omap3xxx_mcbsp4_hwmod;
84static struct omap_hwmod omap3xxx_mcbsp5_hwmod;
85static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod;
86static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod;
39 87
40/* L3 -> L4_CORE interface */ 88/* L3 -> L4_CORE interface */
41static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = { 89static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
@@ -51,10 +99,26 @@ static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
51 .user = OCP_USER_MPU | OCP_USER_SDMA, 99 .user = OCP_USER_MPU | OCP_USER_SDMA,
52}; 100};
53 101
102/* L3 taret configuration and error log registers */
103static struct omap_hwmod_irq_info omap3xxx_l3_main_irqs[] = {
104 { .irq = INT_34XX_L3_DBG_IRQ },
105 { .irq = INT_34XX_L3_APP_IRQ },
106};
107
108static struct omap_hwmod_addr_space omap3xxx_l3_main_addrs[] = {
109 {
110 .pa_start = 0x68000000,
111 .pa_end = 0x6800ffff,
112 .flags = ADDR_TYPE_RT,
113 },
114};
115
54/* MPU -> L3 interface */ 116/* MPU -> L3 interface */
55static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = { 117static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
56 .master = &omap3xxx_mpu_hwmod, 118 .master = &omap3xxx_mpu_hwmod,
57 .slave = &omap3xxx_l3_main_hwmod, 119 .slave = &omap3xxx_l3_main_hwmod,
120 .addr = omap3xxx_l3_main_addrs,
121 .addr_cnt = ARRAY_SIZE(omap3xxx_l3_main_addrs),
58 .user = OCP_USER_MPU, 122 .user = OCP_USER_MPU,
59}; 123};
60 124
@@ -63,6 +127,19 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = {
63 &omap3xxx_mpu__l3_main, 127 &omap3xxx_mpu__l3_main,
64}; 128};
65 129
130/* DSS -> l3 */
131static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
132 .master = &omap3xxx_dss_core_hwmod,
133 .slave = &omap3xxx_l3_main_hwmod,
134 .fw = {
135 .omap2 = {
136 .l3_perm_bit = OMAP3_L3_CORE_FW_INIT_ID_DSS,
137 .flags = OMAP_FIREWALL_L3,
138 }
139 },
140 .user = OCP_USER_MPU | OCP_USER_SDMA,
141};
142
66/* Master interfaces on the L3 interconnect */ 143/* Master interfaces on the L3 interconnect */
67static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = { 144static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
68 &omap3xxx_l3_main__l4_core, 145 &omap3xxx_l3_main__l4_core,
@@ -73,6 +150,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
73static struct omap_hwmod omap3xxx_l3_main_hwmod = { 150static struct omap_hwmod omap3xxx_l3_main_hwmod = {
74 .name = "l3_main", 151 .name = "l3_main",
75 .class = &l3_hwmod_class, 152 .class = &l3_hwmod_class,
153 .mpu_irqs = omap3xxx_l3_main_irqs,
154 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_l3_main_irqs),
76 .masters = omap3xxx_l3_main_masters, 155 .masters = omap3xxx_l3_main_masters,
77 .masters_cnt = ARRAY_SIZE(omap3xxx_l3_main_masters), 156 .masters_cnt = ARRAY_SIZE(omap3xxx_l3_main_masters),
78 .slaves = omap3xxx_l3_main_slaves, 157 .slaves = omap3xxx_l3_main_slaves,
@@ -82,7 +161,27 @@ static struct omap_hwmod omap3xxx_l3_main_hwmod = {
82}; 161};
83 162
84static struct omap_hwmod omap3xxx_l4_wkup_hwmod; 163static struct omap_hwmod omap3xxx_l4_wkup_hwmod;
164static struct omap_hwmod omap3xxx_uart1_hwmod;
165static struct omap_hwmod omap3xxx_uart2_hwmod;
166static struct omap_hwmod omap3xxx_uart3_hwmod;
167static struct omap_hwmod omap3xxx_uart4_hwmod;
168static struct omap_hwmod omap3xxx_usbhsotg_hwmod;
169
170/* l3_core -> usbhsotg interface */
171static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = {
172 .master = &omap3xxx_usbhsotg_hwmod,
173 .slave = &omap3xxx_l3_main_hwmod,
174 .clk = "core_l3_ick",
175 .user = OCP_USER_MPU,
176};
85 177
178/* l3_core -> am35xx_usbhsotg interface */
179static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = {
180 .master = &am35xx_usbhsotg_hwmod,
181 .slave = &omap3xxx_l3_main_hwmod,
182 .clk = "core_l3_ick",
183 .user = OCP_USER_MPU,
184};
86/* L4_CORE -> L4_WKUP interface */ 185/* L4_CORE -> L4_WKUP interface */
87static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = { 186static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
88 .master = &omap3xxx_l4_core_hwmod, 187 .master = &omap3xxx_l4_core_hwmod,
@@ -90,22 +189,313 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
90 .user = OCP_USER_MPU | OCP_USER_SDMA, 189 .user = OCP_USER_MPU | OCP_USER_SDMA,
91}; 190};
92 191
192/* L4 CORE -> MMC1 interface */
193static struct omap_hwmod_addr_space omap3xxx_mmc1_addr_space[] = {
194 {
195 .pa_start = 0x4809c000,
196 .pa_end = 0x4809c1ff,
197 .flags = ADDR_TYPE_RT,
198 },
199};
200
201static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc1 = {
202 .master = &omap3xxx_l4_core_hwmod,
203 .slave = &omap3xxx_mmc1_hwmod,
204 .clk = "mmchs1_ick",
205 .addr = omap3xxx_mmc1_addr_space,
206 .addr_cnt = ARRAY_SIZE(omap3xxx_mmc1_addr_space),
207 .user = OCP_USER_MPU | OCP_USER_SDMA,
208 .flags = OMAP_FIREWALL_L4
209};
210
211/* L4 CORE -> MMC2 interface */
212static struct omap_hwmod_addr_space omap3xxx_mmc2_addr_space[] = {
213 {
214 .pa_start = 0x480b4000,
215 .pa_end = 0x480b41ff,
216 .flags = ADDR_TYPE_RT,
217 },
218};
219
220static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc2 = {
221 .master = &omap3xxx_l4_core_hwmod,
222 .slave = &omap3xxx_mmc2_hwmod,
223 .clk = "mmchs2_ick",
224 .addr = omap3xxx_mmc2_addr_space,
225 .addr_cnt = ARRAY_SIZE(omap3xxx_mmc2_addr_space),
226 .user = OCP_USER_MPU | OCP_USER_SDMA,
227 .flags = OMAP_FIREWALL_L4
228};
229
230/* L4 CORE -> MMC3 interface */
231static struct omap_hwmod_addr_space omap3xxx_mmc3_addr_space[] = {
232 {
233 .pa_start = 0x480ad000,
234 .pa_end = 0x480ad1ff,
235 .flags = ADDR_TYPE_RT,
236 },
237};
238
239static struct omap_hwmod_ocp_if omap3xxx_l4_core__mmc3 = {
240 .master = &omap3xxx_l4_core_hwmod,
241 .slave = &omap3xxx_mmc3_hwmod,
242 .clk = "mmchs3_ick",
243 .addr = omap3xxx_mmc3_addr_space,
244 .addr_cnt = ARRAY_SIZE(omap3xxx_mmc3_addr_space),
245 .user = OCP_USER_MPU | OCP_USER_SDMA,
246 .flags = OMAP_FIREWALL_L4
247};
248
249/* L4 CORE -> UART1 interface */
250static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
251 {
252 .pa_start = OMAP3_UART1_BASE,
253 .pa_end = OMAP3_UART1_BASE + SZ_8K - 1,
254 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
255 },
256};
257
258static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
259 .master = &omap3xxx_l4_core_hwmod,
260 .slave = &omap3xxx_uart1_hwmod,
261 .clk = "uart1_ick",
262 .addr = omap3xxx_uart1_addr_space,
263 .addr_cnt = ARRAY_SIZE(omap3xxx_uart1_addr_space),
264 .user = OCP_USER_MPU | OCP_USER_SDMA,
265};
266
267/* L4 CORE -> UART2 interface */
268static struct omap_hwmod_addr_space omap3xxx_uart2_addr_space[] = {
269 {
270 .pa_start = OMAP3_UART2_BASE,
271 .pa_end = OMAP3_UART2_BASE + SZ_1K - 1,
272 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
273 },
274};
275
276static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
277 .master = &omap3xxx_l4_core_hwmod,
278 .slave = &omap3xxx_uart2_hwmod,
279 .clk = "uart2_ick",
280 .addr = omap3xxx_uart2_addr_space,
281 .addr_cnt = ARRAY_SIZE(omap3xxx_uart2_addr_space),
282 .user = OCP_USER_MPU | OCP_USER_SDMA,
283};
284
285/* L4 PER -> UART3 interface */
286static struct omap_hwmod_addr_space omap3xxx_uart3_addr_space[] = {
287 {
288 .pa_start = OMAP3_UART3_BASE,
289 .pa_end = OMAP3_UART3_BASE + SZ_1K - 1,
290 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
291 },
292};
293
294static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
295 .master = &omap3xxx_l4_per_hwmod,
296 .slave = &omap3xxx_uart3_hwmod,
297 .clk = "uart3_ick",
298 .addr = omap3xxx_uart3_addr_space,
299 .addr_cnt = ARRAY_SIZE(omap3xxx_uart3_addr_space),
300 .user = OCP_USER_MPU | OCP_USER_SDMA,
301};
302
303/* L4 PER -> UART4 interface */
304static struct omap_hwmod_addr_space omap3xxx_uart4_addr_space[] = {
305 {
306 .pa_start = OMAP3_UART4_BASE,
307 .pa_end = OMAP3_UART4_BASE + SZ_1K - 1,
308 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
309 },
310};
311
312static struct omap_hwmod_ocp_if omap3_l4_per__uart4 = {
313 .master = &omap3xxx_l4_per_hwmod,
314 .slave = &omap3xxx_uart4_hwmod,
315 .clk = "uart4_ick",
316 .addr = omap3xxx_uart4_addr_space,
317 .addr_cnt = ARRAY_SIZE(omap3xxx_uart4_addr_space),
318 .user = OCP_USER_MPU | OCP_USER_SDMA,
319};
320
321/* I2C IP block address space length (in bytes) */
322#define OMAP2_I2C_AS_LEN 128
323
324/* L4 CORE -> I2C1 interface */
325static struct omap_hwmod_addr_space omap3xxx_i2c1_addr_space[] = {
326 {
327 .pa_start = 0x48070000,
328 .pa_end = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
329 .flags = ADDR_TYPE_RT,
330 },
331};
332
333static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
334 .master = &omap3xxx_l4_core_hwmod,
335 .slave = &omap3xxx_i2c1_hwmod,
336 .clk = "i2c1_ick",
337 .addr = omap3xxx_i2c1_addr_space,
338 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c1_addr_space),
339 .fw = {
340 .omap2 = {
341 .l4_fw_region = OMAP3_L4_CORE_FW_I2C1_REGION,
342 .l4_prot_group = 7,
343 .flags = OMAP_FIREWALL_L4,
344 }
345 },
346 .user = OCP_USER_MPU | OCP_USER_SDMA,
347};
348
349/* L4 CORE -> I2C2 interface */
350static struct omap_hwmod_addr_space omap3xxx_i2c2_addr_space[] = {
351 {
352 .pa_start = 0x48072000,
353 .pa_end = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
354 .flags = ADDR_TYPE_RT,
355 },
356};
357
358static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
359 .master = &omap3xxx_l4_core_hwmod,
360 .slave = &omap3xxx_i2c2_hwmod,
361 .clk = "i2c2_ick",
362 .addr = omap3xxx_i2c2_addr_space,
363 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c2_addr_space),
364 .fw = {
365 .omap2 = {
366 .l4_fw_region = OMAP3_L4_CORE_FW_I2C2_REGION,
367 .l4_prot_group = 7,
368 .flags = OMAP_FIREWALL_L4,
369 }
370 },
371 .user = OCP_USER_MPU | OCP_USER_SDMA,
372};
373
374/* L4 CORE -> I2C3 interface */
375static struct omap_hwmod_addr_space omap3xxx_i2c3_addr_space[] = {
376 {
377 .pa_start = 0x48060000,
378 .pa_end = 0x48060000 + OMAP2_I2C_AS_LEN - 1,
379 .flags = ADDR_TYPE_RT,
380 },
381};
382
383static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
384 .master = &omap3xxx_l4_core_hwmod,
385 .slave = &omap3xxx_i2c3_hwmod,
386 .clk = "i2c3_ick",
387 .addr = omap3xxx_i2c3_addr_space,
388 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c3_addr_space),
389 .fw = {
390 .omap2 = {
391 .l4_fw_region = OMAP3_L4_CORE_FW_I2C3_REGION,
392 .l4_prot_group = 7,
393 .flags = OMAP_FIREWALL_L4,
394 }
395 },
396 .user = OCP_USER_MPU | OCP_USER_SDMA,
397};
398
399/* L4 CORE -> SR1 interface */
400static struct omap_hwmod_addr_space omap3_sr1_addr_space[] = {
401 {
402 .pa_start = OMAP34XX_SR1_BASE,
403 .pa_end = OMAP34XX_SR1_BASE + SZ_1K - 1,
404 .flags = ADDR_TYPE_RT,
405 },
406};
407
408static struct omap_hwmod_ocp_if omap3_l4_core__sr1 = {
409 .master = &omap3xxx_l4_core_hwmod,
410 .slave = &omap34xx_sr1_hwmod,
411 .clk = "sr_l4_ick",
412 .addr = omap3_sr1_addr_space,
413 .addr_cnt = ARRAY_SIZE(omap3_sr1_addr_space),
414 .user = OCP_USER_MPU,
415};
416
417/* L4 CORE -> SR1 interface */
418static struct omap_hwmod_addr_space omap3_sr2_addr_space[] = {
419 {
420 .pa_start = OMAP34XX_SR2_BASE,
421 .pa_end = OMAP34XX_SR2_BASE + SZ_1K - 1,
422 .flags = ADDR_TYPE_RT,
423 },
424};
425
426static struct omap_hwmod_ocp_if omap3_l4_core__sr2 = {
427 .master = &omap3xxx_l4_core_hwmod,
428 .slave = &omap34xx_sr2_hwmod,
429 .clk = "sr_l4_ick",
430 .addr = omap3_sr2_addr_space,
431 .addr_cnt = ARRAY_SIZE(omap3_sr2_addr_space),
432 .user = OCP_USER_MPU,
433};
434
435/*
436* usbhsotg interface data
437*/
438
439static struct omap_hwmod_addr_space omap3xxx_usbhsotg_addrs[] = {
440 {
441 .pa_start = OMAP34XX_HSUSB_OTG_BASE,
442 .pa_end = OMAP34XX_HSUSB_OTG_BASE + SZ_4K - 1,
443 .flags = ADDR_TYPE_RT
444 },
445};
446
447/* l4_core -> usbhsotg */
448static struct omap_hwmod_ocp_if omap3xxx_l4_core__usbhsotg = {
449 .master = &omap3xxx_l4_core_hwmod,
450 .slave = &omap3xxx_usbhsotg_hwmod,
451 .clk = "l4_ick",
452 .addr = omap3xxx_usbhsotg_addrs,
453 .addr_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_addrs),
454 .user = OCP_USER_MPU,
455};
456
457static struct omap_hwmod_ocp_if *omap3xxx_usbhsotg_masters[] = {
458 &omap3xxx_usbhsotg__l3,
459};
460
461static struct omap_hwmod_ocp_if *omap3xxx_usbhsotg_slaves[] = {
462 &omap3xxx_l4_core__usbhsotg,
463};
464
465static struct omap_hwmod_addr_space am35xx_usbhsotg_addrs[] = {
466 {
467 .pa_start = AM35XX_IPSS_USBOTGSS_BASE,
468 .pa_end = AM35XX_IPSS_USBOTGSS_BASE + SZ_4K - 1,
469 .flags = ADDR_TYPE_RT
470 },
471};
472
473/* l4_core -> usbhsotg */
474static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = {
475 .master = &omap3xxx_l4_core_hwmod,
476 .slave = &am35xx_usbhsotg_hwmod,
477 .clk = "l4_ick",
478 .addr = am35xx_usbhsotg_addrs,
479 .addr_cnt = ARRAY_SIZE(am35xx_usbhsotg_addrs),
480 .user = OCP_USER_MPU,
481};
482
483static struct omap_hwmod_ocp_if *am35xx_usbhsotg_masters[] = {
484 &am35xx_usbhsotg__l3,
485};
486
487static struct omap_hwmod_ocp_if *am35xx_usbhsotg_slaves[] = {
488 &am35xx_l4_core__usbhsotg,
489};
93/* Slave interfaces on the L4_CORE interconnect */ 490/* Slave interfaces on the L4_CORE interconnect */
94static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = { 491static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {
95 &omap3xxx_l3_main__l4_core, 492 &omap3xxx_l3_main__l4_core,
96}; 493};
97 494
98/* Master interfaces on the L4_CORE interconnect */
99static struct omap_hwmod_ocp_if *omap3xxx_l4_core_masters[] = {
100 &omap3xxx_l4_core__l4_wkup,
101};
102
103/* L4 CORE */ 495/* L4 CORE */
104static struct omap_hwmod omap3xxx_l4_core_hwmod = { 496static struct omap_hwmod omap3xxx_l4_core_hwmod = {
105 .name = "l4_core", 497 .name = "l4_core",
106 .class = &l4_hwmod_class, 498 .class = &l4_hwmod_class,
107 .masters = omap3xxx_l4_core_masters,
108 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_core_masters),
109 .slaves = omap3xxx_l4_core_slaves, 499 .slaves = omap3xxx_l4_core_slaves,
110 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_core_slaves), 500 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_core_slaves),
111 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 501 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@ -117,16 +507,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_l4_per_slaves[] = {
117 &omap3xxx_l3_main__l4_per, 507 &omap3xxx_l3_main__l4_per,
118}; 508};
119 509
120/* Master interfaces on the L4_PER interconnect */
121static struct omap_hwmod_ocp_if *omap3xxx_l4_per_masters[] = {
122};
123
124/* L4 PER */ 510/* L4 PER */
125static struct omap_hwmod omap3xxx_l4_per_hwmod = { 511static struct omap_hwmod omap3xxx_l4_per_hwmod = {
126 .name = "l4_per", 512 .name = "l4_per",
127 .class = &l4_hwmod_class, 513 .class = &l4_hwmod_class,
128 .masters = omap3xxx_l4_per_masters,
129 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_per_masters),
130 .slaves = omap3xxx_l4_per_slaves, 514 .slaves = omap3xxx_l4_per_slaves,
131 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_per_slaves), 515 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_per_slaves),
132 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 516 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@ -138,16 +522,10 @@ static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_slaves[] = {
138 &omap3xxx_l4_core__l4_wkup, 522 &omap3xxx_l4_core__l4_wkup,
139}; 523};
140 524
141/* Master interfaces on the L4_WKUP interconnect */
142static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_masters[] = {
143};
144
145/* L4 WKUP */ 525/* L4 WKUP */
146static struct omap_hwmod omap3xxx_l4_wkup_hwmod = { 526static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
147 .name = "l4_wkup", 527 .name = "l4_wkup",
148 .class = &l4_hwmod_class, 528 .class = &l4_hwmod_class,
149 .masters = omap3xxx_l4_wkup_masters,
150 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_wkup_masters),
151 .slaves = omap3xxx_l4_wkup_slaves, 529 .slaves = omap3xxx_l4_wkup_slaves,
152 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_wkup_slaves), 530 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_wkup_slaves),
153 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 531 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
@@ -197,19 +575,3091 @@ static struct omap_hwmod omap3xxx_iva_hwmod = {
197 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430) 575 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
198}; 576};
199 577
578/* timer class */
579static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = {
580 .rev_offs = 0x0000,
581 .sysc_offs = 0x0010,
582 .syss_offs = 0x0014,
583 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
584 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
585 SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
586 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
587 .sysc_fields = &omap_hwmod_sysc_type1,
588};
589
590static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = {
591 .name = "timer",
592 .sysc = &omap3xxx_timer_1ms_sysc,
593 .rev = OMAP_TIMER_IP_VERSION_1,
594};
595
596static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
597 .rev_offs = 0x0000,
598 .sysc_offs = 0x0010,
599 .syss_offs = 0x0014,
600 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
601 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
602 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
603 .sysc_fields = &omap_hwmod_sysc_type1,
604};
605
606static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
607 .name = "timer",
608 .sysc = &omap3xxx_timer_sysc,
609 .rev = OMAP_TIMER_IP_VERSION_1,
610};
611
612/* timer1 */
613static struct omap_hwmod omap3xxx_timer1_hwmod;
614static struct omap_hwmod_irq_info omap3xxx_timer1_mpu_irqs[] = {
615 { .irq = 37, },
616};
617
618static struct omap_hwmod_addr_space omap3xxx_timer1_addrs[] = {
619 {
620 .pa_start = 0x48318000,
621 .pa_end = 0x48318000 + SZ_1K - 1,
622 .flags = ADDR_TYPE_RT
623 },
624};
625
626/* l4_wkup -> timer1 */
627static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
628 .master = &omap3xxx_l4_wkup_hwmod,
629 .slave = &omap3xxx_timer1_hwmod,
630 .clk = "gpt1_ick",
631 .addr = omap3xxx_timer1_addrs,
632 .addr_cnt = ARRAY_SIZE(omap3xxx_timer1_addrs),
633 .user = OCP_USER_MPU | OCP_USER_SDMA,
634};
635
636/* timer1 slave port */
637static struct omap_hwmod_ocp_if *omap3xxx_timer1_slaves[] = {
638 &omap3xxx_l4_wkup__timer1,
639};
640
641/* timer1 hwmod */
642static struct omap_hwmod omap3xxx_timer1_hwmod = {
643 .name = "timer1",
644 .mpu_irqs = omap3xxx_timer1_mpu_irqs,
645 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer1_mpu_irqs),
646 .main_clk = "gpt1_fck",
647 .prcm = {
648 .omap2 = {
649 .prcm_reg_id = 1,
650 .module_bit = OMAP3430_EN_GPT1_SHIFT,
651 .module_offs = WKUP_MOD,
652 .idlest_reg_id = 1,
653 .idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
654 },
655 },
656 .slaves = omap3xxx_timer1_slaves,
657 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer1_slaves),
658 .class = &omap3xxx_timer_1ms_hwmod_class,
659 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
660};
661
662/* timer2 */
663static struct omap_hwmod omap3xxx_timer2_hwmod;
664static struct omap_hwmod_irq_info omap3xxx_timer2_mpu_irqs[] = {
665 { .irq = 38, },
666};
667
668static struct omap_hwmod_addr_space omap3xxx_timer2_addrs[] = {
669 {
670 .pa_start = 0x49032000,
671 .pa_end = 0x49032000 + SZ_1K - 1,
672 .flags = ADDR_TYPE_RT
673 },
674};
675
676/* l4_per -> timer2 */
677static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
678 .master = &omap3xxx_l4_per_hwmod,
679 .slave = &omap3xxx_timer2_hwmod,
680 .clk = "gpt2_ick",
681 .addr = omap3xxx_timer2_addrs,
682 .addr_cnt = ARRAY_SIZE(omap3xxx_timer2_addrs),
683 .user = OCP_USER_MPU | OCP_USER_SDMA,
684};
685
686/* timer2 slave port */
687static struct omap_hwmod_ocp_if *omap3xxx_timer2_slaves[] = {
688 &omap3xxx_l4_per__timer2,
689};
690
691/* timer2 hwmod */
692static struct omap_hwmod omap3xxx_timer2_hwmod = {
693 .name = "timer2",
694 .mpu_irqs = omap3xxx_timer2_mpu_irqs,
695 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer2_mpu_irqs),
696 .main_clk = "gpt2_fck",
697 .prcm = {
698 .omap2 = {
699 .prcm_reg_id = 1,
700 .module_bit = OMAP3430_EN_GPT2_SHIFT,
701 .module_offs = OMAP3430_PER_MOD,
702 .idlest_reg_id = 1,
703 .idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
704 },
705 },
706 .slaves = omap3xxx_timer2_slaves,
707 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer2_slaves),
708 .class = &omap3xxx_timer_1ms_hwmod_class,
709 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
710};
711
712/* timer3 */
713static struct omap_hwmod omap3xxx_timer3_hwmod;
714static struct omap_hwmod_irq_info omap3xxx_timer3_mpu_irqs[] = {
715 { .irq = 39, },
716};
717
718static struct omap_hwmod_addr_space omap3xxx_timer3_addrs[] = {
719 {
720 .pa_start = 0x49034000,
721 .pa_end = 0x49034000 + SZ_1K - 1,
722 .flags = ADDR_TYPE_RT
723 },
724};
725
726/* l4_per -> timer3 */
727static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
728 .master = &omap3xxx_l4_per_hwmod,
729 .slave = &omap3xxx_timer3_hwmod,
730 .clk = "gpt3_ick",
731 .addr = omap3xxx_timer3_addrs,
732 .addr_cnt = ARRAY_SIZE(omap3xxx_timer3_addrs),
733 .user = OCP_USER_MPU | OCP_USER_SDMA,
734};
735
736/* timer3 slave port */
737static struct omap_hwmod_ocp_if *omap3xxx_timer3_slaves[] = {
738 &omap3xxx_l4_per__timer3,
739};
740
741/* timer3 hwmod */
742static struct omap_hwmod omap3xxx_timer3_hwmod = {
743 .name = "timer3",
744 .mpu_irqs = omap3xxx_timer3_mpu_irqs,
745 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer3_mpu_irqs),
746 .main_clk = "gpt3_fck",
747 .prcm = {
748 .omap2 = {
749 .prcm_reg_id = 1,
750 .module_bit = OMAP3430_EN_GPT3_SHIFT,
751 .module_offs = OMAP3430_PER_MOD,
752 .idlest_reg_id = 1,
753 .idlest_idle_bit = OMAP3430_ST_GPT3_SHIFT,
754 },
755 },
756 .slaves = omap3xxx_timer3_slaves,
757 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer3_slaves),
758 .class = &omap3xxx_timer_hwmod_class,
759 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
760};
761
762/* timer4 */
763static struct omap_hwmod omap3xxx_timer4_hwmod;
764static struct omap_hwmod_irq_info omap3xxx_timer4_mpu_irqs[] = {
765 { .irq = 40, },
766};
767
768static struct omap_hwmod_addr_space omap3xxx_timer4_addrs[] = {
769 {
770 .pa_start = 0x49036000,
771 .pa_end = 0x49036000 + SZ_1K - 1,
772 .flags = ADDR_TYPE_RT
773 },
774};
775
776/* l4_per -> timer4 */
777static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer4 = {
778 .master = &omap3xxx_l4_per_hwmod,
779 .slave = &omap3xxx_timer4_hwmod,
780 .clk = "gpt4_ick",
781 .addr = omap3xxx_timer4_addrs,
782 .addr_cnt = ARRAY_SIZE(omap3xxx_timer4_addrs),
783 .user = OCP_USER_MPU | OCP_USER_SDMA,
784};
785
786/* timer4 slave port */
787static struct omap_hwmod_ocp_if *omap3xxx_timer4_slaves[] = {
788 &omap3xxx_l4_per__timer4,
789};
790
791/* timer4 hwmod */
792static struct omap_hwmod omap3xxx_timer4_hwmod = {
793 .name = "timer4",
794 .mpu_irqs = omap3xxx_timer4_mpu_irqs,
795 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer4_mpu_irqs),
796 .main_clk = "gpt4_fck",
797 .prcm = {
798 .omap2 = {
799 .prcm_reg_id = 1,
800 .module_bit = OMAP3430_EN_GPT4_SHIFT,
801 .module_offs = OMAP3430_PER_MOD,
802 .idlest_reg_id = 1,
803 .idlest_idle_bit = OMAP3430_ST_GPT4_SHIFT,
804 },
805 },
806 .slaves = omap3xxx_timer4_slaves,
807 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer4_slaves),
808 .class = &omap3xxx_timer_hwmod_class,
809 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
810};
811
812/* timer5 */
813static struct omap_hwmod omap3xxx_timer5_hwmod;
814static struct omap_hwmod_irq_info omap3xxx_timer5_mpu_irqs[] = {
815 { .irq = 41, },
816};
817
818static struct omap_hwmod_addr_space omap3xxx_timer5_addrs[] = {
819 {
820 .pa_start = 0x49038000,
821 .pa_end = 0x49038000 + SZ_1K - 1,
822 .flags = ADDR_TYPE_RT
823 },
824};
825
826/* l4_per -> timer5 */
827static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer5 = {
828 .master = &omap3xxx_l4_per_hwmod,
829 .slave = &omap3xxx_timer5_hwmod,
830 .clk = "gpt5_ick",
831 .addr = omap3xxx_timer5_addrs,
832 .addr_cnt = ARRAY_SIZE(omap3xxx_timer5_addrs),
833 .user = OCP_USER_MPU | OCP_USER_SDMA,
834};
835
836/* timer5 slave port */
837static struct omap_hwmod_ocp_if *omap3xxx_timer5_slaves[] = {
838 &omap3xxx_l4_per__timer5,
839};
840
841/* timer5 hwmod */
842static struct omap_hwmod omap3xxx_timer5_hwmod = {
843 .name = "timer5",
844 .mpu_irqs = omap3xxx_timer5_mpu_irqs,
845 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer5_mpu_irqs),
846 .main_clk = "gpt5_fck",
847 .prcm = {
848 .omap2 = {
849 .prcm_reg_id = 1,
850 .module_bit = OMAP3430_EN_GPT5_SHIFT,
851 .module_offs = OMAP3430_PER_MOD,
852 .idlest_reg_id = 1,
853 .idlest_idle_bit = OMAP3430_ST_GPT5_SHIFT,
854 },
855 },
856 .slaves = omap3xxx_timer5_slaves,
857 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer5_slaves),
858 .class = &omap3xxx_timer_hwmod_class,
859 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
860};
861
862/* timer6 */
863static struct omap_hwmod omap3xxx_timer6_hwmod;
864static struct omap_hwmod_irq_info omap3xxx_timer6_mpu_irqs[] = {
865 { .irq = 42, },
866};
867
868static struct omap_hwmod_addr_space omap3xxx_timer6_addrs[] = {
869 {
870 .pa_start = 0x4903A000,
871 .pa_end = 0x4903A000 + SZ_1K - 1,
872 .flags = ADDR_TYPE_RT
873 },
874};
875
876/* l4_per -> timer6 */
877static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer6 = {
878 .master = &omap3xxx_l4_per_hwmod,
879 .slave = &omap3xxx_timer6_hwmod,
880 .clk = "gpt6_ick",
881 .addr = omap3xxx_timer6_addrs,
882 .addr_cnt = ARRAY_SIZE(omap3xxx_timer6_addrs),
883 .user = OCP_USER_MPU | OCP_USER_SDMA,
884};
885
886/* timer6 slave port */
887static struct omap_hwmod_ocp_if *omap3xxx_timer6_slaves[] = {
888 &omap3xxx_l4_per__timer6,
889};
890
891/* timer6 hwmod */
892static struct omap_hwmod omap3xxx_timer6_hwmod = {
893 .name = "timer6",
894 .mpu_irqs = omap3xxx_timer6_mpu_irqs,
895 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer6_mpu_irqs),
896 .main_clk = "gpt6_fck",
897 .prcm = {
898 .omap2 = {
899 .prcm_reg_id = 1,
900 .module_bit = OMAP3430_EN_GPT6_SHIFT,
901 .module_offs = OMAP3430_PER_MOD,
902 .idlest_reg_id = 1,
903 .idlest_idle_bit = OMAP3430_ST_GPT6_SHIFT,
904 },
905 },
906 .slaves = omap3xxx_timer6_slaves,
907 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer6_slaves),
908 .class = &omap3xxx_timer_hwmod_class,
909 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
910};
911
912/* timer7 */
913static struct omap_hwmod omap3xxx_timer7_hwmod;
914static struct omap_hwmod_irq_info omap3xxx_timer7_mpu_irqs[] = {
915 { .irq = 43, },
916};
917
918static struct omap_hwmod_addr_space omap3xxx_timer7_addrs[] = {
919 {
920 .pa_start = 0x4903C000,
921 .pa_end = 0x4903C000 + SZ_1K - 1,
922 .flags = ADDR_TYPE_RT
923 },
924};
925
926/* l4_per -> timer7 */
927static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer7 = {
928 .master = &omap3xxx_l4_per_hwmod,
929 .slave = &omap3xxx_timer7_hwmod,
930 .clk = "gpt7_ick",
931 .addr = omap3xxx_timer7_addrs,
932 .addr_cnt = ARRAY_SIZE(omap3xxx_timer7_addrs),
933 .user = OCP_USER_MPU | OCP_USER_SDMA,
934};
935
936/* timer7 slave port */
937static struct omap_hwmod_ocp_if *omap3xxx_timer7_slaves[] = {
938 &omap3xxx_l4_per__timer7,
939};
940
941/* timer7 hwmod */
942static struct omap_hwmod omap3xxx_timer7_hwmod = {
943 .name = "timer7",
944 .mpu_irqs = omap3xxx_timer7_mpu_irqs,
945 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer7_mpu_irqs),
946 .main_clk = "gpt7_fck",
947 .prcm = {
948 .omap2 = {
949 .prcm_reg_id = 1,
950 .module_bit = OMAP3430_EN_GPT7_SHIFT,
951 .module_offs = OMAP3430_PER_MOD,
952 .idlest_reg_id = 1,
953 .idlest_idle_bit = OMAP3430_ST_GPT7_SHIFT,
954 },
955 },
956 .slaves = omap3xxx_timer7_slaves,
957 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer7_slaves),
958 .class = &omap3xxx_timer_hwmod_class,
959 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
960};
961
962/* timer8 */
963static struct omap_hwmod omap3xxx_timer8_hwmod;
964static struct omap_hwmod_irq_info omap3xxx_timer8_mpu_irqs[] = {
965 { .irq = 44, },
966};
967
968static struct omap_hwmod_addr_space omap3xxx_timer8_addrs[] = {
969 {
970 .pa_start = 0x4903E000,
971 .pa_end = 0x4903E000 + SZ_1K - 1,
972 .flags = ADDR_TYPE_RT
973 },
974};
975
976/* l4_per -> timer8 */
977static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer8 = {
978 .master = &omap3xxx_l4_per_hwmod,
979 .slave = &omap3xxx_timer8_hwmod,
980 .clk = "gpt8_ick",
981 .addr = omap3xxx_timer8_addrs,
982 .addr_cnt = ARRAY_SIZE(omap3xxx_timer8_addrs),
983 .user = OCP_USER_MPU | OCP_USER_SDMA,
984};
985
986/* timer8 slave port */
987static struct omap_hwmod_ocp_if *omap3xxx_timer8_slaves[] = {
988 &omap3xxx_l4_per__timer8,
989};
990
991/* timer8 hwmod */
992static struct omap_hwmod omap3xxx_timer8_hwmod = {
993 .name = "timer8",
994 .mpu_irqs = omap3xxx_timer8_mpu_irqs,
995 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer8_mpu_irqs),
996 .main_clk = "gpt8_fck",
997 .prcm = {
998 .omap2 = {
999 .prcm_reg_id = 1,
1000 .module_bit = OMAP3430_EN_GPT8_SHIFT,
1001 .module_offs = OMAP3430_PER_MOD,
1002 .idlest_reg_id = 1,
1003 .idlest_idle_bit = OMAP3430_ST_GPT8_SHIFT,
1004 },
1005 },
1006 .slaves = omap3xxx_timer8_slaves,
1007 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer8_slaves),
1008 .class = &omap3xxx_timer_hwmod_class,
1009 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1010};
1011
1012/* timer9 */
1013static struct omap_hwmod omap3xxx_timer9_hwmod;
1014static struct omap_hwmod_irq_info omap3xxx_timer9_mpu_irqs[] = {
1015 { .irq = 45, },
1016};
1017
1018static struct omap_hwmod_addr_space omap3xxx_timer9_addrs[] = {
1019 {
1020 .pa_start = 0x49040000,
1021 .pa_end = 0x49040000 + SZ_1K - 1,
1022 .flags = ADDR_TYPE_RT
1023 },
1024};
1025
1026/* l4_per -> timer9 */
1027static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer9 = {
1028 .master = &omap3xxx_l4_per_hwmod,
1029 .slave = &omap3xxx_timer9_hwmod,
1030 .clk = "gpt9_ick",
1031 .addr = omap3xxx_timer9_addrs,
1032 .addr_cnt = ARRAY_SIZE(omap3xxx_timer9_addrs),
1033 .user = OCP_USER_MPU | OCP_USER_SDMA,
1034};
1035
1036/* timer9 slave port */
1037static struct omap_hwmod_ocp_if *omap3xxx_timer9_slaves[] = {
1038 &omap3xxx_l4_per__timer9,
1039};
1040
1041/* timer9 hwmod */
1042static struct omap_hwmod omap3xxx_timer9_hwmod = {
1043 .name = "timer9",
1044 .mpu_irqs = omap3xxx_timer9_mpu_irqs,
1045 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer9_mpu_irqs),
1046 .main_clk = "gpt9_fck",
1047 .prcm = {
1048 .omap2 = {
1049 .prcm_reg_id = 1,
1050 .module_bit = OMAP3430_EN_GPT9_SHIFT,
1051 .module_offs = OMAP3430_PER_MOD,
1052 .idlest_reg_id = 1,
1053 .idlest_idle_bit = OMAP3430_ST_GPT9_SHIFT,
1054 },
1055 },
1056 .slaves = omap3xxx_timer9_slaves,
1057 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer9_slaves),
1058 .class = &omap3xxx_timer_hwmod_class,
1059 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1060};
1061
1062/* timer10 */
1063static struct omap_hwmod omap3xxx_timer10_hwmod;
1064static struct omap_hwmod_irq_info omap3xxx_timer10_mpu_irqs[] = {
1065 { .irq = 46, },
1066};
1067
1068static struct omap_hwmod_addr_space omap3xxx_timer10_addrs[] = {
1069 {
1070 .pa_start = 0x48086000,
1071 .pa_end = 0x48086000 + SZ_1K - 1,
1072 .flags = ADDR_TYPE_RT
1073 },
1074};
1075
1076/* l4_core -> timer10 */
1077static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer10 = {
1078 .master = &omap3xxx_l4_core_hwmod,
1079 .slave = &omap3xxx_timer10_hwmod,
1080 .clk = "gpt10_ick",
1081 .addr = omap3xxx_timer10_addrs,
1082 .addr_cnt = ARRAY_SIZE(omap3xxx_timer10_addrs),
1083 .user = OCP_USER_MPU | OCP_USER_SDMA,
1084};
1085
1086/* timer10 slave port */
1087static struct omap_hwmod_ocp_if *omap3xxx_timer10_slaves[] = {
1088 &omap3xxx_l4_core__timer10,
1089};
1090
1091/* timer10 hwmod */
1092static struct omap_hwmod omap3xxx_timer10_hwmod = {
1093 .name = "timer10",
1094 .mpu_irqs = omap3xxx_timer10_mpu_irqs,
1095 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer10_mpu_irqs),
1096 .main_clk = "gpt10_fck",
1097 .prcm = {
1098 .omap2 = {
1099 .prcm_reg_id = 1,
1100 .module_bit = OMAP3430_EN_GPT10_SHIFT,
1101 .module_offs = CORE_MOD,
1102 .idlest_reg_id = 1,
1103 .idlest_idle_bit = OMAP3430_ST_GPT10_SHIFT,
1104 },
1105 },
1106 .slaves = omap3xxx_timer10_slaves,
1107 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer10_slaves),
1108 .class = &omap3xxx_timer_1ms_hwmod_class,
1109 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1110};
1111
1112/* timer11 */
1113static struct omap_hwmod omap3xxx_timer11_hwmod;
1114static struct omap_hwmod_irq_info omap3xxx_timer11_mpu_irqs[] = {
1115 { .irq = 47, },
1116};
1117
1118static struct omap_hwmod_addr_space omap3xxx_timer11_addrs[] = {
1119 {
1120 .pa_start = 0x48088000,
1121 .pa_end = 0x48088000 + SZ_1K - 1,
1122 .flags = ADDR_TYPE_RT
1123 },
1124};
1125
1126/* l4_core -> timer11 */
1127static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer11 = {
1128 .master = &omap3xxx_l4_core_hwmod,
1129 .slave = &omap3xxx_timer11_hwmod,
1130 .clk = "gpt11_ick",
1131 .addr = omap3xxx_timer11_addrs,
1132 .addr_cnt = ARRAY_SIZE(omap3xxx_timer11_addrs),
1133 .user = OCP_USER_MPU | OCP_USER_SDMA,
1134};
1135
1136/* timer11 slave port */
1137static struct omap_hwmod_ocp_if *omap3xxx_timer11_slaves[] = {
1138 &omap3xxx_l4_core__timer11,
1139};
1140
1141/* timer11 hwmod */
1142static struct omap_hwmod omap3xxx_timer11_hwmod = {
1143 .name = "timer11",
1144 .mpu_irqs = omap3xxx_timer11_mpu_irqs,
1145 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer11_mpu_irqs),
1146 .main_clk = "gpt11_fck",
1147 .prcm = {
1148 .omap2 = {
1149 .prcm_reg_id = 1,
1150 .module_bit = OMAP3430_EN_GPT11_SHIFT,
1151 .module_offs = CORE_MOD,
1152 .idlest_reg_id = 1,
1153 .idlest_idle_bit = OMAP3430_ST_GPT11_SHIFT,
1154 },
1155 },
1156 .slaves = omap3xxx_timer11_slaves,
1157 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer11_slaves),
1158 .class = &omap3xxx_timer_hwmod_class,
1159 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1160};
1161
1162/* timer12*/
1163static struct omap_hwmod omap3xxx_timer12_hwmod;
1164static struct omap_hwmod_irq_info omap3xxx_timer12_mpu_irqs[] = {
1165 { .irq = 95, },
1166};
1167
1168static struct omap_hwmod_addr_space omap3xxx_timer12_addrs[] = {
1169 {
1170 .pa_start = 0x48304000,
1171 .pa_end = 0x48304000 + SZ_1K - 1,
1172 .flags = ADDR_TYPE_RT
1173 },
1174};
1175
1176/* l4_core -> timer12 */
1177static struct omap_hwmod_ocp_if omap3xxx_l4_core__timer12 = {
1178 .master = &omap3xxx_l4_core_hwmod,
1179 .slave = &omap3xxx_timer12_hwmod,
1180 .clk = "gpt12_ick",
1181 .addr = omap3xxx_timer12_addrs,
1182 .addr_cnt = ARRAY_SIZE(omap3xxx_timer12_addrs),
1183 .user = OCP_USER_MPU | OCP_USER_SDMA,
1184};
1185
1186/* timer12 slave port */
1187static struct omap_hwmod_ocp_if *omap3xxx_timer12_slaves[] = {
1188 &omap3xxx_l4_core__timer12,
1189};
1190
1191/* timer12 hwmod */
1192static struct omap_hwmod omap3xxx_timer12_hwmod = {
1193 .name = "timer12",
1194 .mpu_irqs = omap3xxx_timer12_mpu_irqs,
1195 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_timer12_mpu_irqs),
1196 .main_clk = "gpt12_fck",
1197 .prcm = {
1198 .omap2 = {
1199 .prcm_reg_id = 1,
1200 .module_bit = OMAP3430_EN_GPT12_SHIFT,
1201 .module_offs = WKUP_MOD,
1202 .idlest_reg_id = 1,
1203 .idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
1204 },
1205 },
1206 .slaves = omap3xxx_timer12_slaves,
1207 .slaves_cnt = ARRAY_SIZE(omap3xxx_timer12_slaves),
1208 .class = &omap3xxx_timer_hwmod_class,
1209 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
1210};
1211
1212/* l4_wkup -> wd_timer2 */
1213static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
1214 {
1215 .pa_start = 0x48314000,
1216 .pa_end = 0x4831407f,
1217 .flags = ADDR_TYPE_RT
1218 },
1219};
1220
1221static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
1222 .master = &omap3xxx_l4_wkup_hwmod,
1223 .slave = &omap3xxx_wd_timer2_hwmod,
1224 .clk = "wdt2_ick",
1225 .addr = omap3xxx_wd_timer2_addrs,
1226 .addr_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_addrs),
1227 .user = OCP_USER_MPU | OCP_USER_SDMA,
1228};
1229
1230/*
1231 * 'wd_timer' class
1232 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1233 * overflow condition
1234 */
1235
1236static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
1237 .rev_offs = 0x0000,
1238 .sysc_offs = 0x0010,
1239 .syss_offs = 0x0014,
1240 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
1241 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1242 SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1243 SYSS_HAS_RESET_STATUS),
1244 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1245 .sysc_fields = &omap_hwmod_sysc_type1,
1246};
1247
1248/* I2C common */
1249static struct omap_hwmod_class_sysconfig i2c_sysc = {
1250 .rev_offs = 0x00,
1251 .sysc_offs = 0x20,
1252 .syss_offs = 0x10,
1253 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1254 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1255 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1256 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1257 .sysc_fields = &omap_hwmod_sysc_type1,
1258};
1259
1260static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
1261 .name = "wd_timer",
1262 .sysc = &omap3xxx_wd_timer_sysc,
1263 .pre_shutdown = &omap2_wd_timer_disable
1264};
1265
1266/* wd_timer2 */
1267static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = {
1268 &omap3xxx_l4_wkup__wd_timer2,
1269};
1270
1271static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
1272 .name = "wd_timer2",
1273 .class = &omap3xxx_wd_timer_hwmod_class,
1274 .main_clk = "wdt2_fck",
1275 .prcm = {
1276 .omap2 = {
1277 .prcm_reg_id = 1,
1278 .module_bit = OMAP3430_EN_WDT2_SHIFT,
1279 .module_offs = WKUP_MOD,
1280 .idlest_reg_id = 1,
1281 .idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
1282 },
1283 },
1284 .slaves = omap3xxx_wd_timer2_slaves,
1285 .slaves_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_slaves),
1286 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1287 /*
1288 * XXX: Use software supervised mode, HW supervised smartidle seems to
1289 * block CORE power domain idle transitions. Maybe a HW bug in wdt2?
1290 */
1291 .flags = HWMOD_SWSUP_SIDLE,
1292};
1293
1294/* UART common */
1295
1296static struct omap_hwmod_class_sysconfig uart_sysc = {
1297 .rev_offs = 0x50,
1298 .sysc_offs = 0x54,
1299 .syss_offs = 0x58,
1300 .sysc_flags = (SYSC_HAS_SIDLEMODE |
1301 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1302 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1303 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1304 .sysc_fields = &omap_hwmod_sysc_type1,
1305};
1306
1307static struct omap_hwmod_class uart_class = {
1308 .name = "uart",
1309 .sysc = &uart_sysc,
1310};
1311
1312/* UART1 */
1313
1314static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
1315 { .irq = INT_24XX_UART1_IRQ, },
1316};
1317
1318static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
1319 { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
1320 { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
1321};
1322
1323static struct omap_hwmod_ocp_if *omap3xxx_uart1_slaves[] = {
1324 &omap3_l4_core__uart1,
1325};
1326
1327static struct omap_hwmod omap3xxx_uart1_hwmod = {
1328 .name = "uart1",
1329 .mpu_irqs = uart1_mpu_irqs,
1330 .mpu_irqs_cnt = ARRAY_SIZE(uart1_mpu_irqs),
1331 .sdma_reqs = uart1_sdma_reqs,
1332 .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
1333 .main_clk = "uart1_fck",
1334 .prcm = {
1335 .omap2 = {
1336 .module_offs = CORE_MOD,
1337 .prcm_reg_id = 1,
1338 .module_bit = OMAP3430_EN_UART1_SHIFT,
1339 .idlest_reg_id = 1,
1340 .idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
1341 },
1342 },
1343 .slaves = omap3xxx_uart1_slaves,
1344 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart1_slaves),
1345 .class = &uart_class,
1346 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1347};
1348
1349/* UART2 */
1350
1351static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
1352 { .irq = INT_24XX_UART2_IRQ, },
1353};
1354
1355static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
1356 { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
1357 { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
1358};
1359
1360static struct omap_hwmod_ocp_if *omap3xxx_uart2_slaves[] = {
1361 &omap3_l4_core__uart2,
1362};
1363
1364static struct omap_hwmod omap3xxx_uart2_hwmod = {
1365 .name = "uart2",
1366 .mpu_irqs = uart2_mpu_irqs,
1367 .mpu_irqs_cnt = ARRAY_SIZE(uart2_mpu_irqs),
1368 .sdma_reqs = uart2_sdma_reqs,
1369 .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
1370 .main_clk = "uart2_fck",
1371 .prcm = {
1372 .omap2 = {
1373 .module_offs = CORE_MOD,
1374 .prcm_reg_id = 1,
1375 .module_bit = OMAP3430_EN_UART2_SHIFT,
1376 .idlest_reg_id = 1,
1377 .idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
1378 },
1379 },
1380 .slaves = omap3xxx_uart2_slaves,
1381 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart2_slaves),
1382 .class = &uart_class,
1383 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1384};
1385
1386/* UART3 */
1387
1388static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
1389 { .irq = INT_24XX_UART3_IRQ, },
1390};
1391
1392static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
1393 { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
1394 { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
1395};
1396
1397static struct omap_hwmod_ocp_if *omap3xxx_uart3_slaves[] = {
1398 &omap3_l4_per__uart3,
1399};
1400
1401static struct omap_hwmod omap3xxx_uart3_hwmod = {
1402 .name = "uart3",
1403 .mpu_irqs = uart3_mpu_irqs,
1404 .mpu_irqs_cnt = ARRAY_SIZE(uart3_mpu_irqs),
1405 .sdma_reqs = uart3_sdma_reqs,
1406 .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
1407 .main_clk = "uart3_fck",
1408 .prcm = {
1409 .omap2 = {
1410 .module_offs = OMAP3430_PER_MOD,
1411 .prcm_reg_id = 1,
1412 .module_bit = OMAP3430_EN_UART3_SHIFT,
1413 .idlest_reg_id = 1,
1414 .idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
1415 },
1416 },
1417 .slaves = omap3xxx_uart3_slaves,
1418 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart3_slaves),
1419 .class = &uart_class,
1420 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1421};
1422
1423/* UART4 */
1424
1425static struct omap_hwmod_irq_info uart4_mpu_irqs[] = {
1426 { .irq = INT_36XX_UART4_IRQ, },
1427};
1428
1429static struct omap_hwmod_dma_info uart4_sdma_reqs[] = {
1430 { .name = "rx", .dma_req = OMAP36XX_DMA_UART4_RX, },
1431 { .name = "tx", .dma_req = OMAP36XX_DMA_UART4_TX, },
1432};
1433
1434static struct omap_hwmod_ocp_if *omap3xxx_uart4_slaves[] = {
1435 &omap3_l4_per__uart4,
1436};
1437
1438static struct omap_hwmod omap3xxx_uart4_hwmod = {
1439 .name = "uart4",
1440 .mpu_irqs = uart4_mpu_irqs,
1441 .mpu_irqs_cnt = ARRAY_SIZE(uart4_mpu_irqs),
1442 .sdma_reqs = uart4_sdma_reqs,
1443 .sdma_reqs_cnt = ARRAY_SIZE(uart4_sdma_reqs),
1444 .main_clk = "uart4_fck",
1445 .prcm = {
1446 .omap2 = {
1447 .module_offs = OMAP3430_PER_MOD,
1448 .prcm_reg_id = 1,
1449 .module_bit = OMAP3630_EN_UART4_SHIFT,
1450 .idlest_reg_id = 1,
1451 .idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
1452 },
1453 },
1454 .slaves = omap3xxx_uart4_slaves,
1455 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart4_slaves),
1456 .class = &uart_class,
1457 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
1458};
1459
1460static struct omap_hwmod_class i2c_class = {
1461 .name = "i2c",
1462 .sysc = &i2c_sysc,
1463};
1464
1465/*
1466 * 'dss' class
1467 * display sub-system
1468 */
1469
1470static struct omap_hwmod_class_sysconfig omap3xxx_dss_sysc = {
1471 .rev_offs = 0x0000,
1472 .sysc_offs = 0x0010,
1473 .syss_offs = 0x0014,
1474 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1475 .sysc_fields = &omap_hwmod_sysc_type1,
1476};
1477
1478static struct omap_hwmod_class omap3xxx_dss_hwmod_class = {
1479 .name = "dss",
1480 .sysc = &omap3xxx_dss_sysc,
1481};
1482
1483static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
1484 { .name = "dispc", .dma_req = 5 },
1485 { .name = "dsi1", .dma_req = 74 },
1486};
1487
1488/* dss */
1489/* dss master ports */
1490static struct omap_hwmod_ocp_if *omap3xxx_dss_masters[] = {
1491 &omap3xxx_dss__l3,
1492};
1493
1494static struct omap_hwmod_addr_space omap3xxx_dss_addrs[] = {
1495 {
1496 .pa_start = 0x48050000,
1497 .pa_end = 0x480503FF,
1498 .flags = ADDR_TYPE_RT
1499 },
1500};
1501
1502/* l4_core -> dss */
1503static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
1504 .master = &omap3xxx_l4_core_hwmod,
1505 .slave = &omap3430es1_dss_core_hwmod,
1506 .clk = "dss_ick",
1507 .addr = omap3xxx_dss_addrs,
1508 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_addrs),
1509 .fw = {
1510 .omap2 = {
1511 .l4_fw_region = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
1512 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1513 .flags = OMAP_FIREWALL_L4,
1514 }
1515 },
1516 .user = OCP_USER_MPU | OCP_USER_SDMA,
1517};
1518
1519static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
1520 .master = &omap3xxx_l4_core_hwmod,
1521 .slave = &omap3xxx_dss_core_hwmod,
1522 .clk = "dss_ick",
1523 .addr = omap3xxx_dss_addrs,
1524 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_addrs),
1525 .fw = {
1526 .omap2 = {
1527 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_CORE_REGION,
1528 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1529 .flags = OMAP_FIREWALL_L4,
1530 }
1531 },
1532 .user = OCP_USER_MPU | OCP_USER_SDMA,
1533};
1534
1535/* dss slave ports */
1536static struct omap_hwmod_ocp_if *omap3430es1_dss_slaves[] = {
1537 &omap3430es1_l4_core__dss,
1538};
1539
1540static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = {
1541 &omap3xxx_l4_core__dss,
1542};
1543
1544static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1545 { .role = "tv_clk", .clk = "dss_tv_fck" },
1546 { .role = "video_clk", .clk = "dss_96m_fck" },
1547 { .role = "sys_clk", .clk = "dss2_alwon_fck" },
1548};
1549
1550static struct omap_hwmod omap3430es1_dss_core_hwmod = {
1551 .name = "dss_core",
1552 .class = &omap3xxx_dss_hwmod_class,
1553 .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
1554 .sdma_reqs = omap3xxx_dss_sdma_chs,
1555 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs),
1556
1557 .prcm = {
1558 .omap2 = {
1559 .prcm_reg_id = 1,
1560 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1561 .module_offs = OMAP3430_DSS_MOD,
1562 .idlest_reg_id = 1,
1563 .idlest_stdby_bit = OMAP3430ES1_ST_DSS_SHIFT,
1564 },
1565 },
1566 .opt_clks = dss_opt_clks,
1567 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1568 .slaves = omap3430es1_dss_slaves,
1569 .slaves_cnt = ARRAY_SIZE(omap3430es1_dss_slaves),
1570 .masters = omap3xxx_dss_masters,
1571 .masters_cnt = ARRAY_SIZE(omap3xxx_dss_masters),
1572 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1),
1573 .flags = HWMOD_NO_IDLEST,
1574};
1575
1576static struct omap_hwmod omap3xxx_dss_core_hwmod = {
1577 .name = "dss_core",
1578 .class = &omap3xxx_dss_hwmod_class,
1579 .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
1580 .sdma_reqs = omap3xxx_dss_sdma_chs,
1581 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs),
1582
1583 .prcm = {
1584 .omap2 = {
1585 .prcm_reg_id = 1,
1586 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1587 .module_offs = OMAP3430_DSS_MOD,
1588 .idlest_reg_id = 1,
1589 .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
1590 .idlest_stdby_bit = OMAP3430ES2_ST_DSS_STDBY_SHIFT,
1591 },
1592 },
1593 .opt_clks = dss_opt_clks,
1594 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1595 .slaves = omap3xxx_dss_slaves,
1596 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_slaves),
1597 .masters = omap3xxx_dss_masters,
1598 .masters_cnt = ARRAY_SIZE(omap3xxx_dss_masters),
1599 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
1600 CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
1601};
1602
1603/*
1604 * 'dispc' class
1605 * display controller
1606 */
1607
1608static struct omap_hwmod_class_sysconfig omap3xxx_dispc_sysc = {
1609 .rev_offs = 0x0000,
1610 .sysc_offs = 0x0010,
1611 .syss_offs = 0x0014,
1612 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1613 SYSC_HAS_MIDLEMODE | SYSC_HAS_ENAWAKEUP |
1614 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1615 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1616 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1617 .sysc_fields = &omap_hwmod_sysc_type1,
1618};
1619
1620static struct omap_hwmod_class omap3xxx_dispc_hwmod_class = {
1621 .name = "dispc",
1622 .sysc = &omap3xxx_dispc_sysc,
1623};
1624
1625static struct omap_hwmod_irq_info omap3xxx_dispc_irqs[] = {
1626 { .irq = 25 },
1627};
1628
1629static struct omap_hwmod_addr_space omap3xxx_dss_dispc_addrs[] = {
1630 {
1631 .pa_start = 0x48050400,
1632 .pa_end = 0x480507FF,
1633 .flags = ADDR_TYPE_RT
1634 },
1635};
1636
1637/* l4_core -> dss_dispc */
1638static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
1639 .master = &omap3xxx_l4_core_hwmod,
1640 .slave = &omap3xxx_dss_dispc_hwmod,
1641 .clk = "dss_ick",
1642 .addr = omap3xxx_dss_dispc_addrs,
1643 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_addrs),
1644 .fw = {
1645 .omap2 = {
1646 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_DISPC_REGION,
1647 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1648 .flags = OMAP_FIREWALL_L4,
1649 }
1650 },
1651 .user = OCP_USER_MPU | OCP_USER_SDMA,
1652};
1653
1654/* dss_dispc slave ports */
1655static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = {
1656 &omap3xxx_l4_core__dss_dispc,
1657};
1658
1659static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
1660 .name = "dss_dispc",
1661 .class = &omap3xxx_dispc_hwmod_class,
1662 .mpu_irqs = omap3xxx_dispc_irqs,
1663 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dispc_irqs),
1664 .main_clk = "dss1_alwon_fck",
1665 .prcm = {
1666 .omap2 = {
1667 .prcm_reg_id = 1,
1668 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1669 .module_offs = OMAP3430_DSS_MOD,
1670 },
1671 },
1672 .slaves = omap3xxx_dss_dispc_slaves,
1673 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_slaves),
1674 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1675 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1676 CHIP_GE_OMAP3630ES1_1),
1677 .flags = HWMOD_NO_IDLEST,
1678};
1679
1680/*
1681 * 'dsi' class
1682 * display serial interface controller
1683 */
1684
1685static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
1686 .name = "dsi",
1687};
1688
1689static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
1690 { .irq = 25 },
1691};
1692
1693/* dss_dsi1 */
1694static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
1695 {
1696 .pa_start = 0x4804FC00,
1697 .pa_end = 0x4804FFFF,
1698 .flags = ADDR_TYPE_RT
1699 },
1700};
1701
1702/* l4_core -> dss_dsi1 */
1703static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
1704 .master = &omap3xxx_l4_core_hwmod,
1705 .slave = &omap3xxx_dss_dsi1_hwmod,
1706 .addr = omap3xxx_dss_dsi1_addrs,
1707 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_addrs),
1708 .fw = {
1709 .omap2 = {
1710 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_DSI_REGION,
1711 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1712 .flags = OMAP_FIREWALL_L4,
1713 }
1714 },
1715 .user = OCP_USER_MPU | OCP_USER_SDMA,
1716};
1717
1718/* dss_dsi1 slave ports */
1719static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = {
1720 &omap3xxx_l4_core__dss_dsi1,
1721};
1722
1723static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
1724 .name = "dss_dsi1",
1725 .class = &omap3xxx_dsi_hwmod_class,
1726 .mpu_irqs = omap3xxx_dsi1_irqs,
1727 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dsi1_irqs),
1728 .main_clk = "dss1_alwon_fck",
1729 .prcm = {
1730 .omap2 = {
1731 .prcm_reg_id = 1,
1732 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1733 .module_offs = OMAP3430_DSS_MOD,
1734 },
1735 },
1736 .slaves = omap3xxx_dss_dsi1_slaves,
1737 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_slaves),
1738 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1739 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1740 CHIP_GE_OMAP3630ES1_1),
1741 .flags = HWMOD_NO_IDLEST,
1742};
1743
1744/*
1745 * 'rfbi' class
1746 * remote frame buffer interface
1747 */
1748
1749static struct omap_hwmod_class_sysconfig omap3xxx_rfbi_sysc = {
1750 .rev_offs = 0x0000,
1751 .sysc_offs = 0x0010,
1752 .syss_offs = 0x0014,
1753 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1754 SYSC_HAS_AUTOIDLE),
1755 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1756 .sysc_fields = &omap_hwmod_sysc_type1,
1757};
1758
1759static struct omap_hwmod_class omap3xxx_rfbi_hwmod_class = {
1760 .name = "rfbi",
1761 .sysc = &omap3xxx_rfbi_sysc,
1762};
1763
1764static struct omap_hwmod_addr_space omap3xxx_dss_rfbi_addrs[] = {
1765 {
1766 .pa_start = 0x48050800,
1767 .pa_end = 0x48050BFF,
1768 .flags = ADDR_TYPE_RT
1769 },
1770};
1771
1772/* l4_core -> dss_rfbi */
1773static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
1774 .master = &omap3xxx_l4_core_hwmod,
1775 .slave = &omap3xxx_dss_rfbi_hwmod,
1776 .clk = "dss_ick",
1777 .addr = omap3xxx_dss_rfbi_addrs,
1778 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_addrs),
1779 .fw = {
1780 .omap2 = {
1781 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_RFBI_REGION,
1782 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP ,
1783 .flags = OMAP_FIREWALL_L4,
1784 }
1785 },
1786 .user = OCP_USER_MPU | OCP_USER_SDMA,
1787};
1788
1789/* dss_rfbi slave ports */
1790static struct omap_hwmod_ocp_if *omap3xxx_dss_rfbi_slaves[] = {
1791 &omap3xxx_l4_core__dss_rfbi,
1792};
1793
1794static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
1795 .name = "dss_rfbi",
1796 .class = &omap3xxx_rfbi_hwmod_class,
1797 .main_clk = "dss1_alwon_fck",
1798 .prcm = {
1799 .omap2 = {
1800 .prcm_reg_id = 1,
1801 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1802 .module_offs = OMAP3430_DSS_MOD,
1803 },
1804 },
1805 .slaves = omap3xxx_dss_rfbi_slaves,
1806 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_slaves),
1807 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1808 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1809 CHIP_GE_OMAP3630ES1_1),
1810 .flags = HWMOD_NO_IDLEST,
1811};
1812
1813/*
1814 * 'venc' class
1815 * video encoder
1816 */
1817
1818static struct omap_hwmod_class omap3xxx_venc_hwmod_class = {
1819 .name = "venc",
1820};
1821
1822/* dss_venc */
1823static struct omap_hwmod_addr_space omap3xxx_dss_venc_addrs[] = {
1824 {
1825 .pa_start = 0x48050C00,
1826 .pa_end = 0x48050FFF,
1827 .flags = ADDR_TYPE_RT
1828 },
1829};
1830
1831/* l4_core -> dss_venc */
1832static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
1833 .master = &omap3xxx_l4_core_hwmod,
1834 .slave = &omap3xxx_dss_venc_hwmod,
1835 .clk = "dss_tv_fck",
1836 .addr = omap3xxx_dss_venc_addrs,
1837 .addr_cnt = ARRAY_SIZE(omap3xxx_dss_venc_addrs),
1838 .fw = {
1839 .omap2 = {
1840 .l4_fw_region = OMAP3_L4_CORE_FW_DSS_VENC_REGION,
1841 .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
1842 .flags = OMAP_FIREWALL_L4,
1843 }
1844 },
1845 .flags = OCPIF_SWSUP_IDLE,
1846 .user = OCP_USER_MPU | OCP_USER_SDMA,
1847};
1848
1849/* dss_venc slave ports */
1850static struct omap_hwmod_ocp_if *omap3xxx_dss_venc_slaves[] = {
1851 &omap3xxx_l4_core__dss_venc,
1852};
1853
1854static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
1855 .name = "dss_venc",
1856 .class = &omap3xxx_venc_hwmod_class,
1857 .main_clk = "dss1_alwon_fck",
1858 .prcm = {
1859 .omap2 = {
1860 .prcm_reg_id = 1,
1861 .module_bit = OMAP3430_EN_DSS1_SHIFT,
1862 .module_offs = OMAP3430_DSS_MOD,
1863 },
1864 },
1865 .slaves = omap3xxx_dss_venc_slaves,
1866 .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_venc_slaves),
1867 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1 |
1868 CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
1869 CHIP_GE_OMAP3630ES1_1),
1870 .flags = HWMOD_NO_IDLEST,
1871};
1872
1873/* I2C1 */
1874
1875static struct omap_i2c_dev_attr i2c1_dev_attr = {
1876 .fifo_depth = 8, /* bytes */
1877};
1878
1879static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
1880 { .irq = INT_24XX_I2C1_IRQ, },
1881};
1882
1883static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
1884 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
1885 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
1886};
1887
1888static struct omap_hwmod_ocp_if *omap3xxx_i2c1_slaves[] = {
1889 &omap3_l4_core__i2c1,
1890};
1891
1892static struct omap_hwmod omap3xxx_i2c1_hwmod = {
1893 .name = "i2c1",
1894 .mpu_irqs = i2c1_mpu_irqs,
1895 .mpu_irqs_cnt = ARRAY_SIZE(i2c1_mpu_irqs),
1896 .sdma_reqs = i2c1_sdma_reqs,
1897 .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
1898 .main_clk = "i2c1_fck",
1899 .prcm = {
1900 .omap2 = {
1901 .module_offs = CORE_MOD,
1902 .prcm_reg_id = 1,
1903 .module_bit = OMAP3430_EN_I2C1_SHIFT,
1904 .idlest_reg_id = 1,
1905 .idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
1906 },
1907 },
1908 .slaves = omap3xxx_i2c1_slaves,
1909 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c1_slaves),
1910 .class = &i2c_class,
1911 .dev_attr = &i2c1_dev_attr,
1912 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1913};
1914
1915/* I2C2 */
1916
1917static struct omap_i2c_dev_attr i2c2_dev_attr = {
1918 .fifo_depth = 8, /* bytes */
1919};
1920
1921static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
1922 { .irq = INT_24XX_I2C2_IRQ, },
1923};
1924
1925static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
1926 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
1927 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
1928};
1929
1930static struct omap_hwmod_ocp_if *omap3xxx_i2c2_slaves[] = {
1931 &omap3_l4_core__i2c2,
1932};
1933
1934static struct omap_hwmod omap3xxx_i2c2_hwmod = {
1935 .name = "i2c2",
1936 .mpu_irqs = i2c2_mpu_irqs,
1937 .mpu_irqs_cnt = ARRAY_SIZE(i2c2_mpu_irqs),
1938 .sdma_reqs = i2c2_sdma_reqs,
1939 .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
1940 .main_clk = "i2c2_fck",
1941 .prcm = {
1942 .omap2 = {
1943 .module_offs = CORE_MOD,
1944 .prcm_reg_id = 1,
1945 .module_bit = OMAP3430_EN_I2C2_SHIFT,
1946 .idlest_reg_id = 1,
1947 .idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
1948 },
1949 },
1950 .slaves = omap3xxx_i2c2_slaves,
1951 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c2_slaves),
1952 .class = &i2c_class,
1953 .dev_attr = &i2c2_dev_attr,
1954 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1955};
1956
1957/* I2C3 */
1958
1959static struct omap_i2c_dev_attr i2c3_dev_attr = {
1960 .fifo_depth = 64, /* bytes */
1961};
1962
1963static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
1964 { .irq = INT_34XX_I2C3_IRQ, },
1965};
1966
1967static struct omap_hwmod_dma_info i2c3_sdma_reqs[] = {
1968 { .name = "tx", .dma_req = OMAP34XX_DMA_I2C3_TX },
1969 { .name = "rx", .dma_req = OMAP34XX_DMA_I2C3_RX },
1970};
1971
1972static struct omap_hwmod_ocp_if *omap3xxx_i2c3_slaves[] = {
1973 &omap3_l4_core__i2c3,
1974};
1975
1976static struct omap_hwmod omap3xxx_i2c3_hwmod = {
1977 .name = "i2c3",
1978 .mpu_irqs = i2c3_mpu_irqs,
1979 .mpu_irqs_cnt = ARRAY_SIZE(i2c3_mpu_irqs),
1980 .sdma_reqs = i2c3_sdma_reqs,
1981 .sdma_reqs_cnt = ARRAY_SIZE(i2c3_sdma_reqs),
1982 .main_clk = "i2c3_fck",
1983 .prcm = {
1984 .omap2 = {
1985 .module_offs = CORE_MOD,
1986 .prcm_reg_id = 1,
1987 .module_bit = OMAP3430_EN_I2C3_SHIFT,
1988 .idlest_reg_id = 1,
1989 .idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
1990 },
1991 },
1992 .slaves = omap3xxx_i2c3_slaves,
1993 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c3_slaves),
1994 .class = &i2c_class,
1995 .dev_attr = &i2c3_dev_attr,
1996 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1997};
1998
1999/* l4_wkup -> gpio1 */
2000static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
2001 {
2002 .pa_start = 0x48310000,
2003 .pa_end = 0x483101ff,
2004 .flags = ADDR_TYPE_RT
2005 },
2006};
2007
2008static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
2009 .master = &omap3xxx_l4_wkup_hwmod,
2010 .slave = &omap3xxx_gpio1_hwmod,
2011 .addr = omap3xxx_gpio1_addrs,
2012 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio1_addrs),
2013 .user = OCP_USER_MPU | OCP_USER_SDMA,
2014};
2015
2016/* l4_per -> gpio2 */
2017static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
2018 {
2019 .pa_start = 0x49050000,
2020 .pa_end = 0x490501ff,
2021 .flags = ADDR_TYPE_RT
2022 },
2023};
2024
2025static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
2026 .master = &omap3xxx_l4_per_hwmod,
2027 .slave = &omap3xxx_gpio2_hwmod,
2028 .addr = omap3xxx_gpio2_addrs,
2029 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio2_addrs),
2030 .user = OCP_USER_MPU | OCP_USER_SDMA,
2031};
2032
2033/* l4_per -> gpio3 */
2034static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
2035 {
2036 .pa_start = 0x49052000,
2037 .pa_end = 0x490521ff,
2038 .flags = ADDR_TYPE_RT
2039 },
2040};
2041
2042static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
2043 .master = &omap3xxx_l4_per_hwmod,
2044 .slave = &omap3xxx_gpio3_hwmod,
2045 .addr = omap3xxx_gpio3_addrs,
2046 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio3_addrs),
2047 .user = OCP_USER_MPU | OCP_USER_SDMA,
2048};
2049
2050/* l4_per -> gpio4 */
2051static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
2052 {
2053 .pa_start = 0x49054000,
2054 .pa_end = 0x490541ff,
2055 .flags = ADDR_TYPE_RT
2056 },
2057};
2058
2059static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
2060 .master = &omap3xxx_l4_per_hwmod,
2061 .slave = &omap3xxx_gpio4_hwmod,
2062 .addr = omap3xxx_gpio4_addrs,
2063 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio4_addrs),
2064 .user = OCP_USER_MPU | OCP_USER_SDMA,
2065};
2066
2067/* l4_per -> gpio5 */
2068static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
2069 {
2070 .pa_start = 0x49056000,
2071 .pa_end = 0x490561ff,
2072 .flags = ADDR_TYPE_RT
2073 },
2074};
2075
2076static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
2077 .master = &omap3xxx_l4_per_hwmod,
2078 .slave = &omap3xxx_gpio5_hwmod,
2079 .addr = omap3xxx_gpio5_addrs,
2080 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio5_addrs),
2081 .user = OCP_USER_MPU | OCP_USER_SDMA,
2082};
2083
2084/* l4_per -> gpio6 */
2085static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
2086 {
2087 .pa_start = 0x49058000,
2088 .pa_end = 0x490581ff,
2089 .flags = ADDR_TYPE_RT
2090 },
2091};
2092
2093static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
2094 .master = &omap3xxx_l4_per_hwmod,
2095 .slave = &omap3xxx_gpio6_hwmod,
2096 .addr = omap3xxx_gpio6_addrs,
2097 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio6_addrs),
2098 .user = OCP_USER_MPU | OCP_USER_SDMA,
2099};
2100
2101/*
2102 * 'gpio' class
2103 * general purpose io module
2104 */
2105
2106static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
2107 .rev_offs = 0x0000,
2108 .sysc_offs = 0x0010,
2109 .syss_offs = 0x0014,
2110 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
2111 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
2112 SYSS_HAS_RESET_STATUS),
2113 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2114 .sysc_fields = &omap_hwmod_sysc_type1,
2115};
2116
2117static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
2118 .name = "gpio",
2119 .sysc = &omap3xxx_gpio_sysc,
2120 .rev = 1,
2121};
2122
2123/* gpio_dev_attr*/
2124static struct omap_gpio_dev_attr gpio_dev_attr = {
2125 .bank_width = 32,
2126 .dbck_flag = true,
2127};
2128
2129/* gpio1 */
2130static struct omap_hwmod_irq_info omap3xxx_gpio1_irqs[] = {
2131 { .irq = 29 }, /* INT_34XX_GPIO_BANK1 */
2132};
2133
2134static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
2135 { .role = "dbclk", .clk = "gpio1_dbck", },
2136};
2137
2138static struct omap_hwmod_ocp_if *omap3xxx_gpio1_slaves[] = {
2139 &omap3xxx_l4_wkup__gpio1,
2140};
2141
2142static struct omap_hwmod omap3xxx_gpio1_hwmod = {
2143 .name = "gpio1",
2144 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2145 .mpu_irqs = omap3xxx_gpio1_irqs,
2146 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio1_irqs),
2147 .main_clk = "gpio1_ick",
2148 .opt_clks = gpio1_opt_clks,
2149 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
2150 .prcm = {
2151 .omap2 = {
2152 .prcm_reg_id = 1,
2153 .module_bit = OMAP3430_EN_GPIO1_SHIFT,
2154 .module_offs = WKUP_MOD,
2155 .idlest_reg_id = 1,
2156 .idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
2157 },
2158 },
2159 .slaves = omap3xxx_gpio1_slaves,
2160 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio1_slaves),
2161 .class = &omap3xxx_gpio_hwmod_class,
2162 .dev_attr = &gpio_dev_attr,
2163 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2164};
2165
2166/* gpio2 */
2167static struct omap_hwmod_irq_info omap3xxx_gpio2_irqs[] = {
2168 { .irq = 30 }, /* INT_34XX_GPIO_BANK2 */
2169};
2170
2171static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
2172 { .role = "dbclk", .clk = "gpio2_dbck", },
2173};
2174
2175static struct omap_hwmod_ocp_if *omap3xxx_gpio2_slaves[] = {
2176 &omap3xxx_l4_per__gpio2,
2177};
2178
2179static struct omap_hwmod omap3xxx_gpio2_hwmod = {
2180 .name = "gpio2",
2181 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2182 .mpu_irqs = omap3xxx_gpio2_irqs,
2183 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio2_irqs),
2184 .main_clk = "gpio2_ick",
2185 .opt_clks = gpio2_opt_clks,
2186 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
2187 .prcm = {
2188 .omap2 = {
2189 .prcm_reg_id = 1,
2190 .module_bit = OMAP3430_EN_GPIO2_SHIFT,
2191 .module_offs = OMAP3430_PER_MOD,
2192 .idlest_reg_id = 1,
2193 .idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
2194 },
2195 },
2196 .slaves = omap3xxx_gpio2_slaves,
2197 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio2_slaves),
2198 .class = &omap3xxx_gpio_hwmod_class,
2199 .dev_attr = &gpio_dev_attr,
2200 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2201};
2202
2203/* gpio3 */
2204static struct omap_hwmod_irq_info omap3xxx_gpio3_irqs[] = {
2205 { .irq = 31 }, /* INT_34XX_GPIO_BANK3 */
2206};
2207
2208static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
2209 { .role = "dbclk", .clk = "gpio3_dbck", },
2210};
2211
2212static struct omap_hwmod_ocp_if *omap3xxx_gpio3_slaves[] = {
2213 &omap3xxx_l4_per__gpio3,
2214};
2215
2216static struct omap_hwmod omap3xxx_gpio3_hwmod = {
2217 .name = "gpio3",
2218 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2219 .mpu_irqs = omap3xxx_gpio3_irqs,
2220 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio3_irqs),
2221 .main_clk = "gpio3_ick",
2222 .opt_clks = gpio3_opt_clks,
2223 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
2224 .prcm = {
2225 .omap2 = {
2226 .prcm_reg_id = 1,
2227 .module_bit = OMAP3430_EN_GPIO3_SHIFT,
2228 .module_offs = OMAP3430_PER_MOD,
2229 .idlest_reg_id = 1,
2230 .idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
2231 },
2232 },
2233 .slaves = omap3xxx_gpio3_slaves,
2234 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio3_slaves),
2235 .class = &omap3xxx_gpio_hwmod_class,
2236 .dev_attr = &gpio_dev_attr,
2237 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2238};
2239
2240/* gpio4 */
2241static struct omap_hwmod_irq_info omap3xxx_gpio4_irqs[] = {
2242 { .irq = 32 }, /* INT_34XX_GPIO_BANK4 */
2243};
2244
2245static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
2246 { .role = "dbclk", .clk = "gpio4_dbck", },
2247};
2248
2249static struct omap_hwmod_ocp_if *omap3xxx_gpio4_slaves[] = {
2250 &omap3xxx_l4_per__gpio4,
2251};
2252
2253static struct omap_hwmod omap3xxx_gpio4_hwmod = {
2254 .name = "gpio4",
2255 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2256 .mpu_irqs = omap3xxx_gpio4_irqs,
2257 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio4_irqs),
2258 .main_clk = "gpio4_ick",
2259 .opt_clks = gpio4_opt_clks,
2260 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
2261 .prcm = {
2262 .omap2 = {
2263 .prcm_reg_id = 1,
2264 .module_bit = OMAP3430_EN_GPIO4_SHIFT,
2265 .module_offs = OMAP3430_PER_MOD,
2266 .idlest_reg_id = 1,
2267 .idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
2268 },
2269 },
2270 .slaves = omap3xxx_gpio4_slaves,
2271 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio4_slaves),
2272 .class = &omap3xxx_gpio_hwmod_class,
2273 .dev_attr = &gpio_dev_attr,
2274 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2275};
2276
2277/* gpio5 */
2278static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
2279 { .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
2280};
2281
2282static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
2283 { .role = "dbclk", .clk = "gpio5_dbck", },
2284};
2285
2286static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
2287 &omap3xxx_l4_per__gpio5,
2288};
2289
2290static struct omap_hwmod omap3xxx_gpio5_hwmod = {
2291 .name = "gpio5",
2292 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2293 .mpu_irqs = omap3xxx_gpio5_irqs,
2294 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio5_irqs),
2295 .main_clk = "gpio5_ick",
2296 .opt_clks = gpio5_opt_clks,
2297 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
2298 .prcm = {
2299 .omap2 = {
2300 .prcm_reg_id = 1,
2301 .module_bit = OMAP3430_EN_GPIO5_SHIFT,
2302 .module_offs = OMAP3430_PER_MOD,
2303 .idlest_reg_id = 1,
2304 .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
2305 },
2306 },
2307 .slaves = omap3xxx_gpio5_slaves,
2308 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio5_slaves),
2309 .class = &omap3xxx_gpio_hwmod_class,
2310 .dev_attr = &gpio_dev_attr,
2311 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2312};
2313
2314/* gpio6 */
2315static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
2316 { .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
2317};
2318
2319static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
2320 { .role = "dbclk", .clk = "gpio6_dbck", },
2321};
2322
2323static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
2324 &omap3xxx_l4_per__gpio6,
2325};
2326
2327static struct omap_hwmod omap3xxx_gpio6_hwmod = {
2328 .name = "gpio6",
2329 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2330 .mpu_irqs = omap3xxx_gpio6_irqs,
2331 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio6_irqs),
2332 .main_clk = "gpio6_ick",
2333 .opt_clks = gpio6_opt_clks,
2334 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
2335 .prcm = {
2336 .omap2 = {
2337 .prcm_reg_id = 1,
2338 .module_bit = OMAP3430_EN_GPIO6_SHIFT,
2339 .module_offs = OMAP3430_PER_MOD,
2340 .idlest_reg_id = 1,
2341 .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
2342 },
2343 },
2344 .slaves = omap3xxx_gpio6_slaves,
2345 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio6_slaves),
2346 .class = &omap3xxx_gpio_hwmod_class,
2347 .dev_attr = &gpio_dev_attr,
2348 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2349};
2350
2351/* dma_system -> L3 */
2352static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
2353 .master = &omap3xxx_dma_system_hwmod,
2354 .slave = &omap3xxx_l3_main_hwmod,
2355 .clk = "core_l3_ick",
2356 .user = OCP_USER_MPU | OCP_USER_SDMA,
2357};
2358
2359/* dma attributes */
2360static struct omap_dma_dev_attr dma_dev_attr = {
2361 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
2362 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
2363 .lch_count = 32,
2364};
2365
2366static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
2367 .rev_offs = 0x0000,
2368 .sysc_offs = 0x002c,
2369 .syss_offs = 0x0028,
2370 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2371 SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
2372 SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE |
2373 SYSS_HAS_RESET_STATUS),
2374 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2375 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
2376 .sysc_fields = &omap_hwmod_sysc_type1,
2377};
2378
2379static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
2380 .name = "dma",
2381 .sysc = &omap3xxx_dma_sysc,
2382};
2383
2384/* dma_system */
2385static struct omap_hwmod_irq_info omap3xxx_dma_system_irqs[] = {
2386 { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
2387 { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
2388 { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
2389 { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
2390};
2391
2392static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
2393 {
2394 .pa_start = 0x48056000,
2395 .pa_end = 0x48056fff,
2396 .flags = ADDR_TYPE_RT
2397 },
2398};
2399
2400/* dma_system master ports */
2401static struct omap_hwmod_ocp_if *omap3xxx_dma_system_masters[] = {
2402 &omap3xxx_dma_system__l3,
2403};
2404
2405/* l4_cfg -> dma_system */
2406static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
2407 .master = &omap3xxx_l4_core_hwmod,
2408 .slave = &omap3xxx_dma_system_hwmod,
2409 .clk = "core_l4_ick",
2410 .addr = omap3xxx_dma_system_addrs,
2411 .addr_cnt = ARRAY_SIZE(omap3xxx_dma_system_addrs),
2412 .user = OCP_USER_MPU | OCP_USER_SDMA,
2413};
2414
2415/* dma_system slave ports */
2416static struct omap_hwmod_ocp_if *omap3xxx_dma_system_slaves[] = {
2417 &omap3xxx_l4_core__dma_system,
2418};
2419
2420static struct omap_hwmod omap3xxx_dma_system_hwmod = {
2421 .name = "dma",
2422 .class = &omap3xxx_dma_hwmod_class,
2423 .mpu_irqs = omap3xxx_dma_system_irqs,
2424 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dma_system_irqs),
2425 .main_clk = "core_l3_ick",
2426 .prcm = {
2427 .omap2 = {
2428 .module_offs = CORE_MOD,
2429 .prcm_reg_id = 1,
2430 .module_bit = OMAP3430_ST_SDMA_SHIFT,
2431 .idlest_reg_id = 1,
2432 .idlest_idle_bit = OMAP3430_ST_SDMA_SHIFT,
2433 },
2434 },
2435 .slaves = omap3xxx_dma_system_slaves,
2436 .slaves_cnt = ARRAY_SIZE(omap3xxx_dma_system_slaves),
2437 .masters = omap3xxx_dma_system_masters,
2438 .masters_cnt = ARRAY_SIZE(omap3xxx_dma_system_masters),
2439 .dev_attr = &dma_dev_attr,
2440 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2441 .flags = HWMOD_NO_IDLEST,
2442};
2443
2444/*
2445 * 'mcbsp' class
2446 * multi channel buffered serial port controller
2447 */
2448
2449static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sysc = {
2450 .sysc_offs = 0x008c,
2451 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2452 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2453 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2454 .sysc_fields = &omap_hwmod_sysc_type1,
2455 .clockact = 0x2,
2456};
2457
2458static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {
2459 .name = "mcbsp",
2460 .sysc = &omap3xxx_mcbsp_sysc,
2461 .rev = MCBSP_CONFIG_TYPE3,
2462};
2463
2464/* mcbsp1 */
2465static struct omap_hwmod_irq_info omap3xxx_mcbsp1_irqs[] = {
2466 { .name = "irq", .irq = 16 },
2467 { .name = "tx", .irq = 59 },
2468 { .name = "rx", .irq = 60 },
2469};
2470
2471static struct omap_hwmod_dma_info omap3xxx_mcbsp1_sdma_chs[] = {
2472 { .name = "rx", .dma_req = 32 },
2473 { .name = "tx", .dma_req = 31 },
2474};
2475
2476static struct omap_hwmod_addr_space omap3xxx_mcbsp1_addrs[] = {
2477 {
2478 .name = "mpu",
2479 .pa_start = 0x48074000,
2480 .pa_end = 0x480740ff,
2481 .flags = ADDR_TYPE_RT
2482 },
2483};
2484
2485/* l4_core -> mcbsp1 */
2486static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp1 = {
2487 .master = &omap3xxx_l4_core_hwmod,
2488 .slave = &omap3xxx_mcbsp1_hwmod,
2489 .clk = "mcbsp1_ick",
2490 .addr = omap3xxx_mcbsp1_addrs,
2491 .addr_cnt = ARRAY_SIZE(omap3xxx_mcbsp1_addrs),
2492 .user = OCP_USER_MPU | OCP_USER_SDMA,
2493};
2494
2495/* mcbsp1 slave ports */
2496static struct omap_hwmod_ocp_if *omap3xxx_mcbsp1_slaves[] = {
2497 &omap3xxx_l4_core__mcbsp1,
2498};
2499
2500static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {
2501 .name = "mcbsp1",
2502 .class = &omap3xxx_mcbsp_hwmod_class,
2503 .mpu_irqs = omap3xxx_mcbsp1_irqs,
2504 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp1_irqs),
2505 .sdma_reqs = omap3xxx_mcbsp1_sdma_chs,
2506 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp1_sdma_chs),
2507 .main_clk = "mcbsp1_fck",
2508 .prcm = {
2509 .omap2 = {
2510 .prcm_reg_id = 1,
2511 .module_bit = OMAP3430_EN_MCBSP1_SHIFT,
2512 .module_offs = CORE_MOD,
2513 .idlest_reg_id = 1,
2514 .idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,
2515 },
2516 },
2517 .slaves = omap3xxx_mcbsp1_slaves,
2518 .slaves_cnt = ARRAY_SIZE(omap3xxx_mcbsp1_slaves),
2519 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2520};
2521
2522/* mcbsp2 */
2523static struct omap_hwmod_irq_info omap3xxx_mcbsp2_irqs[] = {
2524 { .name = "irq", .irq = 17 },
2525 { .name = "tx", .irq = 62 },
2526 { .name = "rx", .irq = 63 },
2527};
2528
2529static struct omap_hwmod_dma_info omap3xxx_mcbsp2_sdma_chs[] = {
2530 { .name = "rx", .dma_req = 34 },
2531 { .name = "tx", .dma_req = 33 },
2532};
2533
2534static struct omap_hwmod_addr_space omap3xxx_mcbsp2_addrs[] = {
2535 {
2536 .name = "mpu",
2537 .pa_start = 0x49022000,
2538 .pa_end = 0x490220ff,
2539 .flags = ADDR_TYPE_RT
2540 },
2541};
2542
2543/* l4_per -> mcbsp2 */
2544static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2 = {
2545 .master = &omap3xxx_l4_per_hwmod,
2546 .slave = &omap3xxx_mcbsp2_hwmod,
2547 .clk = "mcbsp2_ick",
2548 .addr = omap3xxx_mcbsp2_addrs,
2549 .addr_cnt = ARRAY_SIZE(omap3xxx_mcbsp2_addrs),
2550 .user = OCP_USER_MPU | OCP_USER_SDMA,
2551};
2552
2553/* mcbsp2 slave ports */
2554static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_slaves[] = {
2555 &omap3xxx_l4_per__mcbsp2,
2556};
2557
2558static struct omap_mcbsp_dev_attr omap34xx_mcbsp2_dev_attr = {
2559 .sidetone = "mcbsp2_sidetone",
2560};
2561
2562static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {
2563 .name = "mcbsp2",
2564 .class = &omap3xxx_mcbsp_hwmod_class,
2565 .mpu_irqs = omap3xxx_mcbsp2_irqs,
2566 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp2_irqs),
2567 .sdma_reqs = omap3xxx_mcbsp2_sdma_chs,
2568 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp2_sdma_chs),
2569 .main_clk = "mcbsp2_fck",
2570 .prcm = {
2571 .omap2 = {
2572 .prcm_reg_id = 1,
2573 .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
2574 .module_offs = OMAP3430_PER_MOD,
2575 .idlest_reg_id = 1,
2576 .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
2577 },
2578 },
2579 .slaves = omap3xxx_mcbsp2_slaves,
2580 .slaves_cnt = ARRAY_SIZE(omap3xxx_mcbsp2_slaves),
2581 .dev_attr = &omap34xx_mcbsp2_dev_attr,
2582 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2583};
2584
2585/* mcbsp3 */
2586static struct omap_hwmod_irq_info omap3xxx_mcbsp3_irqs[] = {
2587 { .name = "irq", .irq = 22 },
2588 { .name = "tx", .irq = 89 },
2589 { .name = "rx", .irq = 90 },
2590};
2591
2592static struct omap_hwmod_dma_info omap3xxx_mcbsp3_sdma_chs[] = {
2593 { .name = "rx", .dma_req = 18 },
2594 { .name = "tx", .dma_req = 17 },
2595};
2596
2597static struct omap_hwmod_addr_space omap3xxx_mcbsp3_addrs[] = {
2598 {
2599 .name = "mpu",
2600 .pa_start = 0x49024000,
2601 .pa_end = 0x490240ff,
2602 .flags = ADDR_TYPE_RT
2603 },
2604};
2605
2606/* l4_per -> mcbsp3 */
2607static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3 = {
2608 .master = &omap3xxx_l4_per_hwmod,
2609 .slave = &omap3xxx_mcbsp3_hwmod,
2610 .clk = "mcbsp3_ick",
2611 .addr = omap3xxx_mcbsp3_addrs,
2612 .addr_cnt = ARRAY_SIZE(omap3xxx_mcbsp3_addrs),
2613 .user = OCP_USER_MPU | OCP_USER_SDMA,
2614};
2615
2616/* mcbsp3 slave ports */
2617static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_slaves[] = {
2618 &omap3xxx_l4_per__mcbsp3,
2619};
2620
2621static struct omap_mcbsp_dev_attr omap34xx_mcbsp3_dev_attr = {
2622 .sidetone = "mcbsp3_sidetone",
2623};
2624
2625static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {
2626 .name = "mcbsp3",
2627 .class = &omap3xxx_mcbsp_hwmod_class,
2628 .mpu_irqs = omap3xxx_mcbsp3_irqs,
2629 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp3_irqs),
2630 .sdma_reqs = omap3xxx_mcbsp3_sdma_chs,
2631 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp3_sdma_chs),
2632 .main_clk = "mcbsp3_fck",
2633 .prcm = {
2634 .omap2 = {
2635 .prcm_reg_id = 1,
2636 .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
2637 .module_offs = OMAP3430_PER_MOD,
2638 .idlest_reg_id = 1,
2639 .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
2640 },
2641 },
2642 .slaves = omap3xxx_mcbsp3_slaves,
2643 .slaves_cnt = ARRAY_SIZE(omap3xxx_mcbsp3_slaves),
2644 .dev_attr = &omap34xx_mcbsp3_dev_attr,
2645 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2646};
2647
2648/* mcbsp4 */
2649static struct omap_hwmod_irq_info omap3xxx_mcbsp4_irqs[] = {
2650 { .name = "irq", .irq = 23 },
2651 { .name = "tx", .irq = 54 },
2652 { .name = "rx", .irq = 55 },
2653};
2654
2655static struct omap_hwmod_dma_info omap3xxx_mcbsp4_sdma_chs[] = {
2656 { .name = "rx", .dma_req = 20 },
2657 { .name = "tx", .dma_req = 19 },
2658};
2659
2660static struct omap_hwmod_addr_space omap3xxx_mcbsp4_addrs[] = {
2661 {
2662 .name = "mpu",
2663 .pa_start = 0x49026000,
2664 .pa_end = 0x490260ff,
2665 .flags = ADDR_TYPE_RT
2666 },
2667};
2668
2669/* l4_per -> mcbsp4 */
2670static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp4 = {
2671 .master = &omap3xxx_l4_per_hwmod,
2672 .slave = &omap3xxx_mcbsp4_hwmod,
2673 .clk = "mcbsp4_ick",
2674 .addr = omap3xxx_mcbsp4_addrs,
2675 .addr_cnt = ARRAY_SIZE(omap3xxx_mcbsp4_addrs),
2676 .user = OCP_USER_MPU | OCP_USER_SDMA,
2677};
2678
2679/* mcbsp4 slave ports */
2680static struct omap_hwmod_ocp_if *omap3xxx_mcbsp4_slaves[] = {
2681 &omap3xxx_l4_per__mcbsp4,
2682};
2683
2684static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {
2685 .name = "mcbsp4",
2686 .class = &omap3xxx_mcbsp_hwmod_class,
2687 .mpu_irqs = omap3xxx_mcbsp4_irqs,
2688 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp4_irqs),
2689 .sdma_reqs = omap3xxx_mcbsp4_sdma_chs,
2690 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp4_sdma_chs),
2691 .main_clk = "mcbsp4_fck",
2692 .prcm = {
2693 .omap2 = {
2694 .prcm_reg_id = 1,
2695 .module_bit = OMAP3430_EN_MCBSP4_SHIFT,
2696 .module_offs = OMAP3430_PER_MOD,
2697 .idlest_reg_id = 1,
2698 .idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,
2699 },
2700 },
2701 .slaves = omap3xxx_mcbsp4_slaves,
2702 .slaves_cnt = ARRAY_SIZE(omap3xxx_mcbsp4_slaves),
2703 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2704};
2705
2706/* mcbsp5 */
2707static struct omap_hwmod_irq_info omap3xxx_mcbsp5_irqs[] = {
2708 { .name = "irq", .irq = 27 },
2709 { .name = "tx", .irq = 81 },
2710 { .name = "rx", .irq = 82 },
2711};
2712
2713static struct omap_hwmod_dma_info omap3xxx_mcbsp5_sdma_chs[] = {
2714 { .name = "rx", .dma_req = 22 },
2715 { .name = "tx", .dma_req = 21 },
2716};
2717
2718static struct omap_hwmod_addr_space omap3xxx_mcbsp5_addrs[] = {
2719 {
2720 .name = "mpu",
2721 .pa_start = 0x48096000,
2722 .pa_end = 0x480960ff,
2723 .flags = ADDR_TYPE_RT
2724 },
2725};
2726
2727/* l4_core -> mcbsp5 */
2728static struct omap_hwmod_ocp_if omap3xxx_l4_core__mcbsp5 = {
2729 .master = &omap3xxx_l4_core_hwmod,
2730 .slave = &omap3xxx_mcbsp5_hwmod,
2731 .clk = "mcbsp5_ick",
2732 .addr = omap3xxx_mcbsp5_addrs,
2733 .addr_cnt = ARRAY_SIZE(omap3xxx_mcbsp5_addrs),
2734 .user = OCP_USER_MPU | OCP_USER_SDMA,
2735};
2736
2737/* mcbsp5 slave ports */
2738static struct omap_hwmod_ocp_if *omap3xxx_mcbsp5_slaves[] = {
2739 &omap3xxx_l4_core__mcbsp5,
2740};
2741
2742static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {
2743 .name = "mcbsp5",
2744 .class = &omap3xxx_mcbsp_hwmod_class,
2745 .mpu_irqs = omap3xxx_mcbsp5_irqs,
2746 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp5_irqs),
2747 .sdma_reqs = omap3xxx_mcbsp5_sdma_chs,
2748 .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp5_sdma_chs),
2749 .main_clk = "mcbsp5_fck",
2750 .prcm = {
2751 .omap2 = {
2752 .prcm_reg_id = 1,
2753 .module_bit = OMAP3430_EN_MCBSP5_SHIFT,
2754 .module_offs = CORE_MOD,
2755 .idlest_reg_id = 1,
2756 .idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,
2757 },
2758 },
2759 .slaves = omap3xxx_mcbsp5_slaves,
2760 .slaves_cnt = ARRAY_SIZE(omap3xxx_mcbsp5_slaves),
2761 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2762};
2763/* 'mcbsp sidetone' class */
2764
2765static struct omap_hwmod_class_sysconfig omap3xxx_mcbsp_sidetone_sysc = {
2766 .sysc_offs = 0x0010,
2767 .sysc_flags = SYSC_HAS_AUTOIDLE,
2768 .sysc_fields = &omap_hwmod_sysc_type1,
2769};
2770
2771static struct omap_hwmod_class omap3xxx_mcbsp_sidetone_hwmod_class = {
2772 .name = "mcbsp_sidetone",
2773 .sysc = &omap3xxx_mcbsp_sidetone_sysc,
2774};
2775
2776/* mcbsp2_sidetone */
2777static struct omap_hwmod_irq_info omap3xxx_mcbsp2_sidetone_irqs[] = {
2778 { .name = "irq", .irq = 4 },
2779};
2780
2781static struct omap_hwmod_addr_space omap3xxx_mcbsp2_sidetone_addrs[] = {
2782 {
2783 .name = "sidetone",
2784 .pa_start = 0x49028000,
2785 .pa_end = 0x490280ff,
2786 .flags = ADDR_TYPE_RT
2787 },
2788};
2789
2790/* l4_per -> mcbsp2_sidetone */
2791static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp2_sidetone = {
2792 .master = &omap3xxx_l4_per_hwmod,
2793 .slave = &omap3xxx_mcbsp2_sidetone_hwmod,
2794 .clk = "mcbsp2_ick",
2795 .addr = omap3xxx_mcbsp2_sidetone_addrs,
2796 .addr_cnt = ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_addrs),
2797 .user = OCP_USER_MPU,
2798};
2799
2800/* mcbsp2_sidetone slave ports */
2801static struct omap_hwmod_ocp_if *omap3xxx_mcbsp2_sidetone_slaves[] = {
2802 &omap3xxx_l4_per__mcbsp2_sidetone,
2803};
2804
2805static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod = {
2806 .name = "mcbsp2_sidetone",
2807 .class = &omap3xxx_mcbsp_sidetone_hwmod_class,
2808 .mpu_irqs = omap3xxx_mcbsp2_sidetone_irqs,
2809 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_irqs),
2810 .main_clk = "mcbsp2_fck",
2811 .prcm = {
2812 .omap2 = {
2813 .prcm_reg_id = 1,
2814 .module_bit = OMAP3430_EN_MCBSP2_SHIFT,
2815 .module_offs = OMAP3430_PER_MOD,
2816 .idlest_reg_id = 1,
2817 .idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,
2818 },
2819 },
2820 .slaves = omap3xxx_mcbsp2_sidetone_slaves,
2821 .slaves_cnt = ARRAY_SIZE(omap3xxx_mcbsp2_sidetone_slaves),
2822 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2823};
2824
2825/* mcbsp3_sidetone */
2826static struct omap_hwmod_irq_info omap3xxx_mcbsp3_sidetone_irqs[] = {
2827 { .name = "irq", .irq = 5 },
2828};
2829
2830static struct omap_hwmod_addr_space omap3xxx_mcbsp3_sidetone_addrs[] = {
2831 {
2832 .name = "sidetone",
2833 .pa_start = 0x4902A000,
2834 .pa_end = 0x4902A0ff,
2835 .flags = ADDR_TYPE_RT
2836 },
2837};
2838
2839/* l4_per -> mcbsp3_sidetone */
2840static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
2841 .master = &omap3xxx_l4_per_hwmod,
2842 .slave = &omap3xxx_mcbsp3_sidetone_hwmod,
2843 .clk = "mcbsp3_ick",
2844 .addr = omap3xxx_mcbsp3_sidetone_addrs,
2845 .addr_cnt = ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_addrs),
2846 .user = OCP_USER_MPU,
2847};
2848
2849/* mcbsp3_sidetone slave ports */
2850static struct omap_hwmod_ocp_if *omap3xxx_mcbsp3_sidetone_slaves[] = {
2851 &omap3xxx_l4_per__mcbsp3_sidetone,
2852};
2853
2854static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod = {
2855 .name = "mcbsp3_sidetone",
2856 .class = &omap3xxx_mcbsp_sidetone_hwmod_class,
2857 .mpu_irqs = omap3xxx_mcbsp3_sidetone_irqs,
2858 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_irqs),
2859 .main_clk = "mcbsp3_fck",
2860 .prcm = {
2861 .omap2 = {
2862 .prcm_reg_id = 1,
2863 .module_bit = OMAP3430_EN_MCBSP3_SHIFT,
2864 .module_offs = OMAP3430_PER_MOD,
2865 .idlest_reg_id = 1,
2866 .idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,
2867 },
2868 },
2869 .slaves = omap3xxx_mcbsp3_sidetone_slaves,
2870 .slaves_cnt = ARRAY_SIZE(omap3xxx_mcbsp3_sidetone_slaves),
2871 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
2872};
2873
2874
2875/* SR common */
2876static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
2877 .clkact_shift = 20,
2878};
2879
2880static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
2881 .sysc_offs = 0x24,
2882 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
2883 .clockact = CLOCKACT_TEST_ICLK,
2884 .sysc_fields = &omap34xx_sr_sysc_fields,
2885};
2886
2887static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
2888 .name = "smartreflex",
2889 .sysc = &omap34xx_sr_sysc,
2890 .rev = 1,
2891};
2892
2893static struct omap_hwmod_sysc_fields omap36xx_sr_sysc_fields = {
2894 .sidle_shift = 24,
2895 .enwkup_shift = 26
2896};
2897
2898static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
2899 .sysc_offs = 0x38,
2900 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2901 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
2902 SYSC_NO_CACHE),
2903 .sysc_fields = &omap36xx_sr_sysc_fields,
2904};
2905
2906static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
2907 .name = "smartreflex",
2908 .sysc = &omap36xx_sr_sysc,
2909 .rev = 2,
2910};
2911
2912/* SR1 */
2913static struct omap_hwmod_ocp_if *omap3_sr1_slaves[] = {
2914 &omap3_l4_core__sr1,
2915};
2916
2917static struct omap_hwmod omap34xx_sr1_hwmod = {
2918 .name = "sr1_hwmod",
2919 .class = &omap34xx_smartreflex_hwmod_class,
2920 .main_clk = "sr1_fck",
2921 .vdd_name = "mpu",
2922 .prcm = {
2923 .omap2 = {
2924 .prcm_reg_id = 1,
2925 .module_bit = OMAP3430_EN_SR1_SHIFT,
2926 .module_offs = WKUP_MOD,
2927 .idlest_reg_id = 1,
2928 .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
2929 },
2930 },
2931 .slaves = omap3_sr1_slaves,
2932 .slaves_cnt = ARRAY_SIZE(omap3_sr1_slaves),
2933 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
2934 CHIP_IS_OMAP3430ES3_0 |
2935 CHIP_IS_OMAP3430ES3_1),
2936 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
2937};
2938
2939static struct omap_hwmod omap36xx_sr1_hwmod = {
2940 .name = "sr1_hwmod",
2941 .class = &omap36xx_smartreflex_hwmod_class,
2942 .main_clk = "sr1_fck",
2943 .vdd_name = "mpu",
2944 .prcm = {
2945 .omap2 = {
2946 .prcm_reg_id = 1,
2947 .module_bit = OMAP3430_EN_SR1_SHIFT,
2948 .module_offs = WKUP_MOD,
2949 .idlest_reg_id = 1,
2950 .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
2951 },
2952 },
2953 .slaves = omap3_sr1_slaves,
2954 .slaves_cnt = ARRAY_SIZE(omap3_sr1_slaves),
2955 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
2956};
2957
2958/* SR2 */
2959static struct omap_hwmod_ocp_if *omap3_sr2_slaves[] = {
2960 &omap3_l4_core__sr2,
2961};
2962
2963static struct omap_hwmod omap34xx_sr2_hwmod = {
2964 .name = "sr2_hwmod",
2965 .class = &omap34xx_smartreflex_hwmod_class,
2966 .main_clk = "sr2_fck",
2967 .vdd_name = "core",
2968 .prcm = {
2969 .omap2 = {
2970 .prcm_reg_id = 1,
2971 .module_bit = OMAP3430_EN_SR2_SHIFT,
2972 .module_offs = WKUP_MOD,
2973 .idlest_reg_id = 1,
2974 .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
2975 },
2976 },
2977 .slaves = omap3_sr2_slaves,
2978 .slaves_cnt = ARRAY_SIZE(omap3_sr2_slaves),
2979 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
2980 CHIP_IS_OMAP3430ES3_0 |
2981 CHIP_IS_OMAP3430ES3_1),
2982 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
2983};
2984
2985static struct omap_hwmod omap36xx_sr2_hwmod = {
2986 .name = "sr2_hwmod",
2987 .class = &omap36xx_smartreflex_hwmod_class,
2988 .main_clk = "sr2_fck",
2989 .vdd_name = "core",
2990 .prcm = {
2991 .omap2 = {
2992 .prcm_reg_id = 1,
2993 .module_bit = OMAP3430_EN_SR2_SHIFT,
2994 .module_offs = WKUP_MOD,
2995 .idlest_reg_id = 1,
2996 .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
2997 },
2998 },
2999 .slaves = omap3_sr2_slaves,
3000 .slaves_cnt = ARRAY_SIZE(omap3_sr2_slaves),
3001 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
3002};
3003
3004/*
3005 * 'mailbox' class
3006 * mailbox module allowing communication between the on-chip processors
3007 * using a queued mailbox-interrupt mechanism.
3008 */
3009
3010static struct omap_hwmod_class_sysconfig omap3xxx_mailbox_sysc = {
3011 .rev_offs = 0x000,
3012 .sysc_offs = 0x010,
3013 .syss_offs = 0x014,
3014 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
3015 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
3016 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
3017 .sysc_fields = &omap_hwmod_sysc_type1,
3018};
3019
3020static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
3021 .name = "mailbox",
3022 .sysc = &omap3xxx_mailbox_sysc,
3023};
3024
3025static struct omap_hwmod omap3xxx_mailbox_hwmod;
3026static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = {
3027 { .irq = 26 },
3028};
3029
3030static struct omap_hwmod_addr_space omap3xxx_mailbox_addrs[] = {
3031 {
3032 .pa_start = 0x48094000,
3033 .pa_end = 0x480941ff,
3034 .flags = ADDR_TYPE_RT,
3035 },
3036};
3037
3038/* l4_core -> mailbox */
3039static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
3040 .master = &omap3xxx_l4_core_hwmod,
3041 .slave = &omap3xxx_mailbox_hwmod,
3042 .addr = omap3xxx_mailbox_addrs,
3043 .addr_cnt = ARRAY_SIZE(omap3xxx_mailbox_addrs),
3044 .user = OCP_USER_MPU | OCP_USER_SDMA,
3045};
3046
3047/* mailbox slave ports */
3048static struct omap_hwmod_ocp_if *omap3xxx_mailbox_slaves[] = {
3049 &omap3xxx_l4_core__mailbox,
3050};
3051
3052static struct omap_hwmod omap3xxx_mailbox_hwmod = {
3053 .name = "mailbox",
3054 .class = &omap3xxx_mailbox_hwmod_class,
3055 .mpu_irqs = omap3xxx_mailbox_irqs,
3056 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_mailbox_irqs),
3057 .main_clk = "mailboxes_ick",
3058 .prcm = {
3059 .omap2 = {
3060 .prcm_reg_id = 1,
3061 .module_bit = OMAP3430_EN_MAILBOXES_SHIFT,
3062 .module_offs = CORE_MOD,
3063 .idlest_reg_id = 1,
3064 .idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
3065 },
3066 },
3067 .slaves = omap3xxx_mailbox_slaves,
3068 .slaves_cnt = ARRAY_SIZE(omap3xxx_mailbox_slaves),
3069 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3070};
3071
3072/* l4 core -> mcspi1 interface */
3073static struct omap_hwmod_addr_space omap34xx_mcspi1_addr_space[] = {
3074 {
3075 .pa_start = 0x48098000,
3076 .pa_end = 0x480980ff,
3077 .flags = ADDR_TYPE_RT,
3078 },
3079};
3080
3081static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi1 = {
3082 .master = &omap3xxx_l4_core_hwmod,
3083 .slave = &omap34xx_mcspi1,
3084 .clk = "mcspi1_ick",
3085 .addr = omap34xx_mcspi1_addr_space,
3086 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi1_addr_space),
3087 .user = OCP_USER_MPU | OCP_USER_SDMA,
3088};
3089
3090/* l4 core -> mcspi2 interface */
3091static struct omap_hwmod_addr_space omap34xx_mcspi2_addr_space[] = {
3092 {
3093 .pa_start = 0x4809a000,
3094 .pa_end = 0x4809a0ff,
3095 .flags = ADDR_TYPE_RT,
3096 },
3097};
3098
3099static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi2 = {
3100 .master = &omap3xxx_l4_core_hwmod,
3101 .slave = &omap34xx_mcspi2,
3102 .clk = "mcspi2_ick",
3103 .addr = omap34xx_mcspi2_addr_space,
3104 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi2_addr_space),
3105 .user = OCP_USER_MPU | OCP_USER_SDMA,
3106};
3107
3108/* l4 core -> mcspi3 interface */
3109static struct omap_hwmod_addr_space omap34xx_mcspi3_addr_space[] = {
3110 {
3111 .pa_start = 0x480b8000,
3112 .pa_end = 0x480b80ff,
3113 .flags = ADDR_TYPE_RT,
3114 },
3115};
3116
3117static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi3 = {
3118 .master = &omap3xxx_l4_core_hwmod,
3119 .slave = &omap34xx_mcspi3,
3120 .clk = "mcspi3_ick",
3121 .addr = omap34xx_mcspi3_addr_space,
3122 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi3_addr_space),
3123 .user = OCP_USER_MPU | OCP_USER_SDMA,
3124};
3125
3126/* l4 core -> mcspi4 interface */
3127static struct omap_hwmod_addr_space omap34xx_mcspi4_addr_space[] = {
3128 {
3129 .pa_start = 0x480ba000,
3130 .pa_end = 0x480ba0ff,
3131 .flags = ADDR_TYPE_RT,
3132 },
3133};
3134
3135static struct omap_hwmod_ocp_if omap34xx_l4_core__mcspi4 = {
3136 .master = &omap3xxx_l4_core_hwmod,
3137 .slave = &omap34xx_mcspi4,
3138 .clk = "mcspi4_ick",
3139 .addr = omap34xx_mcspi4_addr_space,
3140 .addr_cnt = ARRAY_SIZE(omap34xx_mcspi4_addr_space),
3141 .user = OCP_USER_MPU | OCP_USER_SDMA,
3142};
3143
3144/*
3145 * 'mcspi' class
3146 * multichannel serial port interface (mcspi) / master/slave synchronous serial
3147 * bus
3148 */
3149
3150static struct omap_hwmod_class_sysconfig omap34xx_mcspi_sysc = {
3151 .rev_offs = 0x0000,
3152 .sysc_offs = 0x0010,
3153 .syss_offs = 0x0014,
3154 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
3155 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
3156 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
3157 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
3158 .sysc_fields = &omap_hwmod_sysc_type1,
3159};
3160
3161static struct omap_hwmod_class omap34xx_mcspi_class = {
3162 .name = "mcspi",
3163 .sysc = &omap34xx_mcspi_sysc,
3164 .rev = OMAP3_MCSPI_REV,
3165};
3166
3167/* mcspi1 */
3168static struct omap_hwmod_irq_info omap34xx_mcspi1_mpu_irqs[] = {
3169 { .name = "irq", .irq = 65 },
3170};
3171
3172static struct omap_hwmod_dma_info omap34xx_mcspi1_sdma_reqs[] = {
3173 { .name = "tx0", .dma_req = 35 },
3174 { .name = "rx0", .dma_req = 36 },
3175 { .name = "tx1", .dma_req = 37 },
3176 { .name = "rx1", .dma_req = 38 },
3177 { .name = "tx2", .dma_req = 39 },
3178 { .name = "rx2", .dma_req = 40 },
3179 { .name = "tx3", .dma_req = 41 },
3180 { .name = "rx3", .dma_req = 42 },
3181};
3182
3183static struct omap_hwmod_ocp_if *omap34xx_mcspi1_slaves[] = {
3184 &omap34xx_l4_core__mcspi1,
3185};
3186
3187static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
3188 .num_chipselect = 4,
3189};
3190
3191static struct omap_hwmod omap34xx_mcspi1 = {
3192 .name = "mcspi1",
3193 .mpu_irqs = omap34xx_mcspi1_mpu_irqs,
3194 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi1_mpu_irqs),
3195 .sdma_reqs = omap34xx_mcspi1_sdma_reqs,
3196 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi1_sdma_reqs),
3197 .main_clk = "mcspi1_fck",
3198 .prcm = {
3199 .omap2 = {
3200 .module_offs = CORE_MOD,
3201 .prcm_reg_id = 1,
3202 .module_bit = OMAP3430_EN_MCSPI1_SHIFT,
3203 .idlest_reg_id = 1,
3204 .idlest_idle_bit = OMAP3430_ST_MCSPI1_SHIFT,
3205 },
3206 },
3207 .slaves = omap34xx_mcspi1_slaves,
3208 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi1_slaves),
3209 .class = &omap34xx_mcspi_class,
3210 .dev_attr = &omap_mcspi1_dev_attr,
3211 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3212};
3213
3214/* mcspi2 */
3215static struct omap_hwmod_irq_info omap34xx_mcspi2_mpu_irqs[] = {
3216 { .name = "irq", .irq = 66 },
3217};
3218
3219static struct omap_hwmod_dma_info omap34xx_mcspi2_sdma_reqs[] = {
3220 { .name = "tx0", .dma_req = 43 },
3221 { .name = "rx0", .dma_req = 44 },
3222 { .name = "tx1", .dma_req = 45 },
3223 { .name = "rx1", .dma_req = 46 },
3224};
3225
3226static struct omap_hwmod_ocp_if *omap34xx_mcspi2_slaves[] = {
3227 &omap34xx_l4_core__mcspi2,
3228};
3229
3230static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
3231 .num_chipselect = 2,
3232};
3233
3234static struct omap_hwmod omap34xx_mcspi2 = {
3235 .name = "mcspi2",
3236 .mpu_irqs = omap34xx_mcspi2_mpu_irqs,
3237 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi2_mpu_irqs),
3238 .sdma_reqs = omap34xx_mcspi2_sdma_reqs,
3239 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi2_sdma_reqs),
3240 .main_clk = "mcspi2_fck",
3241 .prcm = {
3242 .omap2 = {
3243 .module_offs = CORE_MOD,
3244 .prcm_reg_id = 1,
3245 .module_bit = OMAP3430_EN_MCSPI2_SHIFT,
3246 .idlest_reg_id = 1,
3247 .idlest_idle_bit = OMAP3430_ST_MCSPI2_SHIFT,
3248 },
3249 },
3250 .slaves = omap34xx_mcspi2_slaves,
3251 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi2_slaves),
3252 .class = &omap34xx_mcspi_class,
3253 .dev_attr = &omap_mcspi2_dev_attr,
3254 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3255};
3256
3257/* mcspi3 */
3258static struct omap_hwmod_irq_info omap34xx_mcspi3_mpu_irqs[] = {
3259 { .name = "irq", .irq = 91 }, /* 91 */
3260};
3261
3262static struct omap_hwmod_dma_info omap34xx_mcspi3_sdma_reqs[] = {
3263 { .name = "tx0", .dma_req = 15 },
3264 { .name = "rx0", .dma_req = 16 },
3265 { .name = "tx1", .dma_req = 23 },
3266 { .name = "rx1", .dma_req = 24 },
3267};
3268
3269static struct omap_hwmod_ocp_if *omap34xx_mcspi3_slaves[] = {
3270 &omap34xx_l4_core__mcspi3,
3271};
3272
3273static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
3274 .num_chipselect = 2,
3275};
3276
3277static struct omap_hwmod omap34xx_mcspi3 = {
3278 .name = "mcspi3",
3279 .mpu_irqs = omap34xx_mcspi3_mpu_irqs,
3280 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi3_mpu_irqs),
3281 .sdma_reqs = omap34xx_mcspi3_sdma_reqs,
3282 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi3_sdma_reqs),
3283 .main_clk = "mcspi3_fck",
3284 .prcm = {
3285 .omap2 = {
3286 .module_offs = CORE_MOD,
3287 .prcm_reg_id = 1,
3288 .module_bit = OMAP3430_EN_MCSPI3_SHIFT,
3289 .idlest_reg_id = 1,
3290 .idlest_idle_bit = OMAP3430_ST_MCSPI3_SHIFT,
3291 },
3292 },
3293 .slaves = omap34xx_mcspi3_slaves,
3294 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi3_slaves),
3295 .class = &omap34xx_mcspi_class,
3296 .dev_attr = &omap_mcspi3_dev_attr,
3297 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3298};
3299
3300/* SPI4 */
3301static struct omap_hwmod_irq_info omap34xx_mcspi4_mpu_irqs[] = {
3302 { .name = "irq", .irq = INT_34XX_SPI4_IRQ }, /* 48 */
3303};
3304
3305static struct omap_hwmod_dma_info omap34xx_mcspi4_sdma_reqs[] = {
3306 { .name = "tx0", .dma_req = 70 }, /* DMA_SPI4_TX0 */
3307 { .name = "rx0", .dma_req = 71 }, /* DMA_SPI4_RX0 */
3308};
3309
3310static struct omap_hwmod_ocp_if *omap34xx_mcspi4_slaves[] = {
3311 &omap34xx_l4_core__mcspi4,
3312};
3313
3314static struct omap2_mcspi_dev_attr omap_mcspi4_dev_attr = {
3315 .num_chipselect = 1,
3316};
3317
3318static struct omap_hwmod omap34xx_mcspi4 = {
3319 .name = "mcspi4",
3320 .mpu_irqs = omap34xx_mcspi4_mpu_irqs,
3321 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mcspi4_mpu_irqs),
3322 .sdma_reqs = omap34xx_mcspi4_sdma_reqs,
3323 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mcspi4_sdma_reqs),
3324 .main_clk = "mcspi4_fck",
3325 .prcm = {
3326 .omap2 = {
3327 .module_offs = CORE_MOD,
3328 .prcm_reg_id = 1,
3329 .module_bit = OMAP3430_EN_MCSPI4_SHIFT,
3330 .idlest_reg_id = 1,
3331 .idlest_idle_bit = OMAP3430_ST_MCSPI4_SHIFT,
3332 },
3333 },
3334 .slaves = omap34xx_mcspi4_slaves,
3335 .slaves_cnt = ARRAY_SIZE(omap34xx_mcspi4_slaves),
3336 .class = &omap34xx_mcspi_class,
3337 .dev_attr = &omap_mcspi4_dev_attr,
3338 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3339};
3340
3341/*
3342 * usbhsotg
3343 */
3344static struct omap_hwmod_class_sysconfig omap3xxx_usbhsotg_sysc = {
3345 .rev_offs = 0x0400,
3346 .sysc_offs = 0x0404,
3347 .syss_offs = 0x0408,
3348 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
3349 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
3350 SYSC_HAS_AUTOIDLE),
3351 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3352 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
3353 .sysc_fields = &omap_hwmod_sysc_type1,
3354};
3355
3356static struct omap_hwmod_class usbotg_class = {
3357 .name = "usbotg",
3358 .sysc = &omap3xxx_usbhsotg_sysc,
3359};
3360/* usb_otg_hs */
3361static struct omap_hwmod_irq_info omap3xxx_usbhsotg_mpu_irqs[] = {
3362
3363 { .name = "mc", .irq = 92 },
3364 { .name = "dma", .irq = 93 },
3365};
3366
3367static struct omap_hwmod omap3xxx_usbhsotg_hwmod = {
3368 .name = "usb_otg_hs",
3369 .mpu_irqs = omap3xxx_usbhsotg_mpu_irqs,
3370 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_mpu_irqs),
3371 .main_clk = "hsotgusb_ick",
3372 .prcm = {
3373 .omap2 = {
3374 .prcm_reg_id = 1,
3375 .module_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
3376 .module_offs = CORE_MOD,
3377 .idlest_reg_id = 1,
3378 .idlest_idle_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT,
3379 .idlest_stdby_bit = OMAP3430ES2_ST_HSOTGUSB_STDBY_SHIFT
3380 },
3381 },
3382 .masters = omap3xxx_usbhsotg_masters,
3383 .masters_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_masters),
3384 .slaves = omap3xxx_usbhsotg_slaves,
3385 .slaves_cnt = ARRAY_SIZE(omap3xxx_usbhsotg_slaves),
3386 .class = &usbotg_class,
3387
3388 /*
3389 * Erratum ID: i479 idle_req / idle_ack mechanism potentially
3390 * broken when autoidle is enabled
3391 * workaround is to disable the autoidle bit at module level.
3392 */
3393 .flags = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
3394 | HWMOD_SWSUP_MSTANDBY,
3395 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
3396};
3397
3398/* usb_otg_hs */
3399static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = {
3400
3401 { .name = "mc", .irq = 71 },
3402};
3403
3404static struct omap_hwmod_class am35xx_usbotg_class = {
3405 .name = "am35xx_usbotg",
3406 .sysc = NULL,
3407};
3408
3409static struct omap_hwmod am35xx_usbhsotg_hwmod = {
3410 .name = "am35x_otg_hs",
3411 .mpu_irqs = am35xx_usbhsotg_mpu_irqs,
3412 .mpu_irqs_cnt = ARRAY_SIZE(am35xx_usbhsotg_mpu_irqs),
3413 .main_clk = NULL,
3414 .prcm = {
3415 .omap2 = {
3416 },
3417 },
3418 .masters = am35xx_usbhsotg_masters,
3419 .masters_cnt = ARRAY_SIZE(am35xx_usbhsotg_masters),
3420 .slaves = am35xx_usbhsotg_slaves,
3421 .slaves_cnt = ARRAY_SIZE(am35xx_usbhsotg_slaves),
3422 .class = &am35xx_usbotg_class,
3423 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES3_1)
3424};
3425
3426/* MMC/SD/SDIO common */
3427
3428static struct omap_hwmod_class_sysconfig omap34xx_mmc_sysc = {
3429 .rev_offs = 0x1fc,
3430 .sysc_offs = 0x10,
3431 .syss_offs = 0x14,
3432 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
3433 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
3434 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
3435 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
3436 .sysc_fields = &omap_hwmod_sysc_type1,
3437};
3438
3439static struct omap_hwmod_class omap34xx_mmc_class = {
3440 .name = "mmc",
3441 .sysc = &omap34xx_mmc_sysc,
3442};
3443
3444/* MMC/SD/SDIO1 */
3445
3446static struct omap_hwmod_irq_info omap34xx_mmc1_mpu_irqs[] = {
3447 { .irq = 83, },
3448};
3449
3450static struct omap_hwmod_dma_info omap34xx_mmc1_sdma_reqs[] = {
3451 { .name = "tx", .dma_req = 61, },
3452 { .name = "rx", .dma_req = 62, },
3453};
3454
3455static struct omap_hwmod_opt_clk omap34xx_mmc1_opt_clks[] = {
3456 { .role = "dbck", .clk = "omap_32k_fck", },
3457};
3458
3459static struct omap_hwmod_ocp_if *omap3xxx_mmc1_slaves[] = {
3460 &omap3xxx_l4_core__mmc1,
3461};
3462
3463static struct omap_mmc_dev_attr mmc1_dev_attr = {
3464 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
3465};
3466
3467static struct omap_hwmod omap3xxx_mmc1_hwmod = {
3468 .name = "mmc1",
3469 .mpu_irqs = omap34xx_mmc1_mpu_irqs,
3470 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mmc1_mpu_irqs),
3471 .sdma_reqs = omap34xx_mmc1_sdma_reqs,
3472 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mmc1_sdma_reqs),
3473 .opt_clks = omap34xx_mmc1_opt_clks,
3474 .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc1_opt_clks),
3475 .main_clk = "mmchs1_fck",
3476 .prcm = {
3477 .omap2 = {
3478 .module_offs = CORE_MOD,
3479 .prcm_reg_id = 1,
3480 .module_bit = OMAP3430_EN_MMC1_SHIFT,
3481 .idlest_reg_id = 1,
3482 .idlest_idle_bit = OMAP3430_ST_MMC1_SHIFT,
3483 },
3484 },
3485 .dev_attr = &mmc1_dev_attr,
3486 .slaves = omap3xxx_mmc1_slaves,
3487 .slaves_cnt = ARRAY_SIZE(omap3xxx_mmc1_slaves),
3488 .class = &omap34xx_mmc_class,
3489 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3490};
3491
3492/* MMC/SD/SDIO2 */
3493
3494static struct omap_hwmod_irq_info omap34xx_mmc2_mpu_irqs[] = {
3495 { .irq = INT_24XX_MMC2_IRQ, },
3496};
3497
3498static struct omap_hwmod_dma_info omap34xx_mmc2_sdma_reqs[] = {
3499 { .name = "tx", .dma_req = 47, },
3500 { .name = "rx", .dma_req = 48, },
3501};
3502
3503static struct omap_hwmod_opt_clk omap34xx_mmc2_opt_clks[] = {
3504 { .role = "dbck", .clk = "omap_32k_fck", },
3505};
3506
3507static struct omap_hwmod_ocp_if *omap3xxx_mmc2_slaves[] = {
3508 &omap3xxx_l4_core__mmc2,
3509};
3510
3511static struct omap_hwmod omap3xxx_mmc2_hwmod = {
3512 .name = "mmc2",
3513 .mpu_irqs = omap34xx_mmc2_mpu_irqs,
3514 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mmc2_mpu_irqs),
3515 .sdma_reqs = omap34xx_mmc2_sdma_reqs,
3516 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mmc2_sdma_reqs),
3517 .opt_clks = omap34xx_mmc2_opt_clks,
3518 .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc2_opt_clks),
3519 .main_clk = "mmchs2_fck",
3520 .prcm = {
3521 .omap2 = {
3522 .module_offs = CORE_MOD,
3523 .prcm_reg_id = 1,
3524 .module_bit = OMAP3430_EN_MMC2_SHIFT,
3525 .idlest_reg_id = 1,
3526 .idlest_idle_bit = OMAP3430_ST_MMC2_SHIFT,
3527 },
3528 },
3529 .slaves = omap3xxx_mmc2_slaves,
3530 .slaves_cnt = ARRAY_SIZE(omap3xxx_mmc2_slaves),
3531 .class = &omap34xx_mmc_class,
3532 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3533};
3534
3535/* MMC/SD/SDIO3 */
3536
3537static struct omap_hwmod_irq_info omap34xx_mmc3_mpu_irqs[] = {
3538 { .irq = 94, },
3539};
3540
3541static struct omap_hwmod_dma_info omap34xx_mmc3_sdma_reqs[] = {
3542 { .name = "tx", .dma_req = 77, },
3543 { .name = "rx", .dma_req = 78, },
3544};
3545
3546static struct omap_hwmod_opt_clk omap34xx_mmc3_opt_clks[] = {
3547 { .role = "dbck", .clk = "omap_32k_fck", },
3548};
3549
3550static struct omap_hwmod_ocp_if *omap3xxx_mmc3_slaves[] = {
3551 &omap3xxx_l4_core__mmc3,
3552};
3553
3554static struct omap_hwmod omap3xxx_mmc3_hwmod = {
3555 .name = "mmc3",
3556 .mpu_irqs = omap34xx_mmc3_mpu_irqs,
3557 .mpu_irqs_cnt = ARRAY_SIZE(omap34xx_mmc3_mpu_irqs),
3558 .sdma_reqs = omap34xx_mmc3_sdma_reqs,
3559 .sdma_reqs_cnt = ARRAY_SIZE(omap34xx_mmc3_sdma_reqs),
3560 .opt_clks = omap34xx_mmc3_opt_clks,
3561 .opt_clks_cnt = ARRAY_SIZE(omap34xx_mmc3_opt_clks),
3562 .main_clk = "mmchs3_fck",
3563 .prcm = {
3564 .omap2 = {
3565 .prcm_reg_id = 1,
3566 .module_bit = OMAP3430_EN_MMC3_SHIFT,
3567 .idlest_reg_id = 1,
3568 .idlest_idle_bit = OMAP3430_ST_MMC3_SHIFT,
3569 },
3570 },
3571 .slaves = omap3xxx_mmc3_slaves,
3572 .slaves_cnt = ARRAY_SIZE(omap3xxx_mmc3_slaves),
3573 .class = &omap34xx_mmc_class,
3574 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
3575};
3576
200static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { 3577static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
201 &omap3xxx_l3_main_hwmod, 3578 &omap3xxx_l3_main_hwmod,
202 &omap3xxx_l4_core_hwmod, 3579 &omap3xxx_l4_core_hwmod,
203 &omap3xxx_l4_per_hwmod, 3580 &omap3xxx_l4_per_hwmod,
204 &omap3xxx_l4_wkup_hwmod, 3581 &omap3xxx_l4_wkup_hwmod,
3582 &omap3xxx_mmc1_hwmod,
3583 &omap3xxx_mmc2_hwmod,
3584 &omap3xxx_mmc3_hwmod,
205 &omap3xxx_mpu_hwmod, 3585 &omap3xxx_mpu_hwmod,
206 &omap3xxx_iva_hwmod, 3586 &omap3xxx_iva_hwmod,
3587
3588 &omap3xxx_timer1_hwmod,
3589 &omap3xxx_timer2_hwmod,
3590 &omap3xxx_timer3_hwmod,
3591 &omap3xxx_timer4_hwmod,
3592 &omap3xxx_timer5_hwmod,
3593 &omap3xxx_timer6_hwmod,
3594 &omap3xxx_timer7_hwmod,
3595 &omap3xxx_timer8_hwmod,
3596 &omap3xxx_timer9_hwmod,
3597 &omap3xxx_timer10_hwmod,
3598 &omap3xxx_timer11_hwmod,
3599 &omap3xxx_timer12_hwmod,
3600
3601 &omap3xxx_wd_timer2_hwmod,
3602 &omap3xxx_uart1_hwmod,
3603 &omap3xxx_uart2_hwmod,
3604 &omap3xxx_uart3_hwmod,
3605 &omap3xxx_uart4_hwmod,
3606 /* dss class */
3607 &omap3430es1_dss_core_hwmod,
3608 &omap3xxx_dss_core_hwmod,
3609 &omap3xxx_dss_dispc_hwmod,
3610 &omap3xxx_dss_dsi1_hwmod,
3611 &omap3xxx_dss_rfbi_hwmod,
3612 &omap3xxx_dss_venc_hwmod,
3613
3614 /* i2c class */
3615 &omap3xxx_i2c1_hwmod,
3616 &omap3xxx_i2c2_hwmod,
3617 &omap3xxx_i2c3_hwmod,
3618 &omap34xx_sr1_hwmod,
3619 &omap34xx_sr2_hwmod,
3620 &omap36xx_sr1_hwmod,
3621 &omap36xx_sr2_hwmod,
3622
3623
3624 /* gpio class */
3625 &omap3xxx_gpio1_hwmod,
3626 &omap3xxx_gpio2_hwmod,
3627 &omap3xxx_gpio3_hwmod,
3628 &omap3xxx_gpio4_hwmod,
3629 &omap3xxx_gpio5_hwmod,
3630 &omap3xxx_gpio6_hwmod,
3631
3632 /* dma_system class*/
3633 &omap3xxx_dma_system_hwmod,
3634
3635 /* mcbsp class */
3636 &omap3xxx_mcbsp1_hwmod,
3637 &omap3xxx_mcbsp2_hwmod,
3638 &omap3xxx_mcbsp3_hwmod,
3639 &omap3xxx_mcbsp4_hwmod,
3640 &omap3xxx_mcbsp5_hwmod,
3641 &omap3xxx_mcbsp2_sidetone_hwmod,
3642 &omap3xxx_mcbsp3_sidetone_hwmod,
3643
3644 /* mailbox class */
3645 &omap3xxx_mailbox_hwmod,
3646
3647 /* mcspi class */
3648 &omap34xx_mcspi1,
3649 &omap34xx_mcspi2,
3650 &omap34xx_mcspi3,
3651 &omap34xx_mcspi4,
3652
3653 /* usbotg class */
3654 &omap3xxx_usbhsotg_hwmod,
3655
3656 /* usbotg for am35x */
3657 &am35xx_usbhsotg_hwmod,
3658
207 NULL, 3659 NULL,
208}; 3660};
209 3661
210int __init omap3xxx_hwmod_init(void) 3662int __init omap3xxx_hwmod_init(void)
211{ 3663{
212 return omap_hwmod_init(omap3xxx_hwmods); 3664 return omap_hwmod_register(omap3xxx_hwmods);
213} 3665}
214
215
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
new file mode 100644
index 000000000000..e1c69ffe0f69
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -0,0 +1,5183 @@
1/*
2 * Hardware modules present on the OMAP44xx chips
3 *
4 * Copyright (C) 2009-2011 Texas Instruments, Inc.
5 * Copyright (C) 2009-2010 Nokia Corporation
6 *
7 * Paul Walmsley
8 * Benoit Cousson
9 *
10 * This file is automatically generated from the OMAP hardware databases.
11 * We respectfully ask that any modifications to this file be coordinated
12 * with the public linux-omap@vger.kernel.org mailing list and the
13 * authors above to ensure that the autogeneration scripts are kept
14 * up-to-date with the file contents.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20
21#include <linux/io.h>
22
23#include <plat/omap_hwmod.h>
24#include <plat/cpu.h>
25#include <plat/gpio.h>
26#include <plat/dma.h>
27#include <plat/mcspi.h>
28#include <plat/mcbsp.h>
29#include <plat/mmc.h>
30
31#include "omap_hwmod_common_data.h"
32
33#include "cm1_44xx.h"
34#include "cm2_44xx.h"
35#include "prm44xx.h"
36#include "prm-regbits-44xx.h"
37#include "wd_timer.h"
38
39/* Base offset for all OMAP4 interrupts external to MPUSS */
40#define OMAP44XX_IRQ_GIC_START 32
41
42/* Base offset for all OMAP4 dma requests */
43#define OMAP44XX_DMA_REQ_START 1
44
45/* Backward references (IPs with Bus Master capability) */
46static struct omap_hwmod omap44xx_aess_hwmod;
47static struct omap_hwmod omap44xx_dma_system_hwmod;
48static struct omap_hwmod omap44xx_dmm_hwmod;
49static struct omap_hwmod omap44xx_dsp_hwmod;
50static struct omap_hwmod omap44xx_dss_hwmod;
51static struct omap_hwmod omap44xx_emif_fw_hwmod;
52static struct omap_hwmod omap44xx_hsi_hwmod;
53static struct omap_hwmod omap44xx_ipu_hwmod;
54static struct omap_hwmod omap44xx_iss_hwmod;
55static struct omap_hwmod omap44xx_iva_hwmod;
56static struct omap_hwmod omap44xx_l3_instr_hwmod;
57static struct omap_hwmod omap44xx_l3_main_1_hwmod;
58static struct omap_hwmod omap44xx_l3_main_2_hwmod;
59static struct omap_hwmod omap44xx_l3_main_3_hwmod;
60static struct omap_hwmod omap44xx_l4_abe_hwmod;
61static struct omap_hwmod omap44xx_l4_cfg_hwmod;
62static struct omap_hwmod omap44xx_l4_per_hwmod;
63static struct omap_hwmod omap44xx_l4_wkup_hwmod;
64static struct omap_hwmod omap44xx_mmc1_hwmod;
65static struct omap_hwmod omap44xx_mmc2_hwmod;
66static struct omap_hwmod omap44xx_mpu_hwmod;
67static struct omap_hwmod omap44xx_mpu_private_hwmod;
68static struct omap_hwmod omap44xx_usb_otg_hs_hwmod;
69
70/*
71 * Interconnects omap_hwmod structures
72 * hwmods that compose the global OMAP interconnect
73 */
74
75/*
76 * 'dmm' class
77 * instance(s): dmm
78 */
79static struct omap_hwmod_class omap44xx_dmm_hwmod_class = {
80 .name = "dmm",
81};
82
83/* dmm interface data */
84/* l3_main_1 -> dmm */
85static struct omap_hwmod_ocp_if omap44xx_l3_main_1__dmm = {
86 .master = &omap44xx_l3_main_1_hwmod,
87 .slave = &omap44xx_dmm_hwmod,
88 .clk = "l3_div_ck",
89 .user = OCP_USER_SDMA,
90};
91
92static struct omap_hwmod_addr_space omap44xx_dmm_addrs[] = {
93 {
94 .pa_start = 0x4e000000,
95 .pa_end = 0x4e0007ff,
96 .flags = ADDR_TYPE_RT
97 },
98};
99
100/* mpu -> dmm */
101static struct omap_hwmod_ocp_if omap44xx_mpu__dmm = {
102 .master = &omap44xx_mpu_hwmod,
103 .slave = &omap44xx_dmm_hwmod,
104 .clk = "l3_div_ck",
105 .addr = omap44xx_dmm_addrs,
106 .addr_cnt = ARRAY_SIZE(omap44xx_dmm_addrs),
107 .user = OCP_USER_MPU,
108};
109
110/* dmm slave ports */
111static struct omap_hwmod_ocp_if *omap44xx_dmm_slaves[] = {
112 &omap44xx_l3_main_1__dmm,
113 &omap44xx_mpu__dmm,
114};
115
116static struct omap_hwmod_irq_info omap44xx_dmm_irqs[] = {
117 { .irq = 113 + OMAP44XX_IRQ_GIC_START },
118};
119
120static struct omap_hwmod omap44xx_dmm_hwmod = {
121 .name = "dmm",
122 .class = &omap44xx_dmm_hwmod_class,
123 .slaves = omap44xx_dmm_slaves,
124 .slaves_cnt = ARRAY_SIZE(omap44xx_dmm_slaves),
125 .mpu_irqs = omap44xx_dmm_irqs,
126 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dmm_irqs),
127 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
128};
129
130/*
131 * 'emif_fw' class
132 * instance(s): emif_fw
133 */
134static struct omap_hwmod_class omap44xx_emif_fw_hwmod_class = {
135 .name = "emif_fw",
136};
137
138/* emif_fw interface data */
139/* dmm -> emif_fw */
140static struct omap_hwmod_ocp_if omap44xx_dmm__emif_fw = {
141 .master = &omap44xx_dmm_hwmod,
142 .slave = &omap44xx_emif_fw_hwmod,
143 .clk = "l3_div_ck",
144 .user = OCP_USER_MPU | OCP_USER_SDMA,
145};
146
147static struct omap_hwmod_addr_space omap44xx_emif_fw_addrs[] = {
148 {
149 .pa_start = 0x4a20c000,
150 .pa_end = 0x4a20c0ff,
151 .flags = ADDR_TYPE_RT
152 },
153};
154
155/* l4_cfg -> emif_fw */
156static struct omap_hwmod_ocp_if omap44xx_l4_cfg__emif_fw = {
157 .master = &omap44xx_l4_cfg_hwmod,
158 .slave = &omap44xx_emif_fw_hwmod,
159 .clk = "l4_div_ck",
160 .addr = omap44xx_emif_fw_addrs,
161 .addr_cnt = ARRAY_SIZE(omap44xx_emif_fw_addrs),
162 .user = OCP_USER_MPU,
163};
164
165/* emif_fw slave ports */
166static struct omap_hwmod_ocp_if *omap44xx_emif_fw_slaves[] = {
167 &omap44xx_dmm__emif_fw,
168 &omap44xx_l4_cfg__emif_fw,
169};
170
171static struct omap_hwmod omap44xx_emif_fw_hwmod = {
172 .name = "emif_fw",
173 .class = &omap44xx_emif_fw_hwmod_class,
174 .slaves = omap44xx_emif_fw_slaves,
175 .slaves_cnt = ARRAY_SIZE(omap44xx_emif_fw_slaves),
176 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
177};
178
179/*
180 * 'l3' class
181 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
182 */
183static struct omap_hwmod_class omap44xx_l3_hwmod_class = {
184 .name = "l3",
185};
186
187/* l3_instr interface data */
188/* iva -> l3_instr */
189static struct omap_hwmod_ocp_if omap44xx_iva__l3_instr = {
190 .master = &omap44xx_iva_hwmod,
191 .slave = &omap44xx_l3_instr_hwmod,
192 .clk = "l3_div_ck",
193 .user = OCP_USER_MPU | OCP_USER_SDMA,
194};
195
196/* l3_main_3 -> l3_instr */
197static struct omap_hwmod_ocp_if omap44xx_l3_main_3__l3_instr = {
198 .master = &omap44xx_l3_main_3_hwmod,
199 .slave = &omap44xx_l3_instr_hwmod,
200 .clk = "l3_div_ck",
201 .user = OCP_USER_MPU | OCP_USER_SDMA,
202};
203
204/* l3_instr slave ports */
205static struct omap_hwmod_ocp_if *omap44xx_l3_instr_slaves[] = {
206 &omap44xx_iva__l3_instr,
207 &omap44xx_l3_main_3__l3_instr,
208};
209
210static struct omap_hwmod omap44xx_l3_instr_hwmod = {
211 .name = "l3_instr",
212 .class = &omap44xx_l3_hwmod_class,
213 .slaves = omap44xx_l3_instr_slaves,
214 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_instr_slaves),
215 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
216};
217
218/* l3_main_1 interface data */
219/* dsp -> l3_main_1 */
220static struct omap_hwmod_ocp_if omap44xx_dsp__l3_main_1 = {
221 .master = &omap44xx_dsp_hwmod,
222 .slave = &omap44xx_l3_main_1_hwmod,
223 .clk = "l3_div_ck",
224 .user = OCP_USER_MPU | OCP_USER_SDMA,
225};
226
227/* dss -> l3_main_1 */
228static struct omap_hwmod_ocp_if omap44xx_dss__l3_main_1 = {
229 .master = &omap44xx_dss_hwmod,
230 .slave = &omap44xx_l3_main_1_hwmod,
231 .clk = "l3_div_ck",
232 .user = OCP_USER_MPU | OCP_USER_SDMA,
233};
234
235/* l3_main_2 -> l3_main_1 */
236static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_1 = {
237 .master = &omap44xx_l3_main_2_hwmod,
238 .slave = &omap44xx_l3_main_1_hwmod,
239 .clk = "l3_div_ck",
240 .user = OCP_USER_MPU | OCP_USER_SDMA,
241};
242
243/* l4_cfg -> l3_main_1 */
244static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_1 = {
245 .master = &omap44xx_l4_cfg_hwmod,
246 .slave = &omap44xx_l3_main_1_hwmod,
247 .clk = "l4_div_ck",
248 .user = OCP_USER_MPU | OCP_USER_SDMA,
249};
250
251/* mmc1 -> l3_main_1 */
252static struct omap_hwmod_ocp_if omap44xx_mmc1__l3_main_1 = {
253 .master = &omap44xx_mmc1_hwmod,
254 .slave = &omap44xx_l3_main_1_hwmod,
255 .clk = "l3_div_ck",
256 .user = OCP_USER_MPU | OCP_USER_SDMA,
257};
258
259/* mmc2 -> l3_main_1 */
260static struct omap_hwmod_ocp_if omap44xx_mmc2__l3_main_1 = {
261 .master = &omap44xx_mmc2_hwmod,
262 .slave = &omap44xx_l3_main_1_hwmod,
263 .clk = "l3_div_ck",
264 .user = OCP_USER_MPU | OCP_USER_SDMA,
265};
266
267/* L3 target configuration and error log registers */
268static struct omap_hwmod_irq_info omap44xx_l3_targ_irqs[] = {
269 { .irq = 9 + OMAP44XX_IRQ_GIC_START },
270 { .irq = 10 + OMAP44XX_IRQ_GIC_START },
271};
272
273static struct omap_hwmod_addr_space omap44xx_l3_main_1_addrs[] = {
274 {
275 .pa_start = 0x44000000,
276 .pa_end = 0x44000fff,
277 .flags = ADDR_TYPE_RT,
278 },
279};
280
281/* mpu -> l3_main_1 */
282static struct omap_hwmod_ocp_if omap44xx_mpu__l3_main_1 = {
283 .master = &omap44xx_mpu_hwmod,
284 .slave = &omap44xx_l3_main_1_hwmod,
285 .clk = "l3_div_ck",
286 .addr = omap44xx_l3_main_1_addrs,
287 .addr_cnt = ARRAY_SIZE(omap44xx_l3_main_1_addrs),
288 .user = OCP_USER_MPU | OCP_USER_SDMA,
289};
290
291/* l3_main_1 slave ports */
292static struct omap_hwmod_ocp_if *omap44xx_l3_main_1_slaves[] = {
293 &omap44xx_dsp__l3_main_1,
294 &omap44xx_dss__l3_main_1,
295 &omap44xx_l3_main_2__l3_main_1,
296 &omap44xx_l4_cfg__l3_main_1,
297 &omap44xx_mmc1__l3_main_1,
298 &omap44xx_mmc2__l3_main_1,
299 &omap44xx_mpu__l3_main_1,
300};
301
302static struct omap_hwmod omap44xx_l3_main_1_hwmod = {
303 .name = "l3_main_1",
304 .class = &omap44xx_l3_hwmod_class,
305 .mpu_irqs = omap44xx_l3_targ_irqs,
306 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_l3_targ_irqs),
307 .slaves = omap44xx_l3_main_1_slaves,
308 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_1_slaves),
309 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
310};
311
312/* l3_main_2 interface data */
313/* dma_system -> l3_main_2 */
314static struct omap_hwmod_ocp_if omap44xx_dma_system__l3_main_2 = {
315 .master = &omap44xx_dma_system_hwmod,
316 .slave = &omap44xx_l3_main_2_hwmod,
317 .clk = "l3_div_ck",
318 .user = OCP_USER_MPU | OCP_USER_SDMA,
319};
320
321/* hsi -> l3_main_2 */
322static struct omap_hwmod_ocp_if omap44xx_hsi__l3_main_2 = {
323 .master = &omap44xx_hsi_hwmod,
324 .slave = &omap44xx_l3_main_2_hwmod,
325 .clk = "l3_div_ck",
326 .user = OCP_USER_MPU | OCP_USER_SDMA,
327};
328
329/* ipu -> l3_main_2 */
330static struct omap_hwmod_ocp_if omap44xx_ipu__l3_main_2 = {
331 .master = &omap44xx_ipu_hwmod,
332 .slave = &omap44xx_l3_main_2_hwmod,
333 .clk = "l3_div_ck",
334 .user = OCP_USER_MPU | OCP_USER_SDMA,
335};
336
337/* iss -> l3_main_2 */
338static struct omap_hwmod_ocp_if omap44xx_iss__l3_main_2 = {
339 .master = &omap44xx_iss_hwmod,
340 .slave = &omap44xx_l3_main_2_hwmod,
341 .clk = "l3_div_ck",
342 .user = OCP_USER_MPU | OCP_USER_SDMA,
343};
344
345/* iva -> l3_main_2 */
346static struct omap_hwmod_ocp_if omap44xx_iva__l3_main_2 = {
347 .master = &omap44xx_iva_hwmod,
348 .slave = &omap44xx_l3_main_2_hwmod,
349 .clk = "l3_div_ck",
350 .user = OCP_USER_MPU | OCP_USER_SDMA,
351};
352
353static struct omap_hwmod_addr_space omap44xx_l3_main_2_addrs[] = {
354 {
355 .pa_start = 0x44800000,
356 .pa_end = 0x44801fff,
357 .flags = ADDR_TYPE_RT,
358 },
359};
360
361/* l3_main_1 -> l3_main_2 */
362static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_2 = {
363 .master = &omap44xx_l3_main_1_hwmod,
364 .slave = &omap44xx_l3_main_2_hwmod,
365 .clk = "l3_div_ck",
366 .addr = omap44xx_l3_main_2_addrs,
367 .addr_cnt = ARRAY_SIZE(omap44xx_l3_main_2_addrs),
368 .user = OCP_USER_MPU | OCP_USER_SDMA,
369};
370
371/* l4_cfg -> l3_main_2 */
372static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
373 .master = &omap44xx_l4_cfg_hwmod,
374 .slave = &omap44xx_l3_main_2_hwmod,
375 .clk = "l4_div_ck",
376 .user = OCP_USER_MPU | OCP_USER_SDMA,
377};
378
379/* usb_otg_hs -> l3_main_2 */
380static struct omap_hwmod_ocp_if omap44xx_usb_otg_hs__l3_main_2 = {
381 .master = &omap44xx_usb_otg_hs_hwmod,
382 .slave = &omap44xx_l3_main_2_hwmod,
383 .clk = "l3_div_ck",
384 .user = OCP_USER_MPU | OCP_USER_SDMA,
385};
386
387/* l3_main_2 slave ports */
388static struct omap_hwmod_ocp_if *omap44xx_l3_main_2_slaves[] = {
389 &omap44xx_dma_system__l3_main_2,
390 &omap44xx_hsi__l3_main_2,
391 &omap44xx_ipu__l3_main_2,
392 &omap44xx_iss__l3_main_2,
393 &omap44xx_iva__l3_main_2,
394 &omap44xx_l3_main_1__l3_main_2,
395 &omap44xx_l4_cfg__l3_main_2,
396 &omap44xx_usb_otg_hs__l3_main_2,
397};
398
399static struct omap_hwmod omap44xx_l3_main_2_hwmod = {
400 .name = "l3_main_2",
401 .class = &omap44xx_l3_hwmod_class,
402 .slaves = omap44xx_l3_main_2_slaves,
403 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_2_slaves),
404 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
405};
406
407/* l3_main_3 interface data */
408static struct omap_hwmod_addr_space omap44xx_l3_main_3_addrs[] = {
409 {
410 .pa_start = 0x45000000,
411 .pa_end = 0x45000fff,
412 .flags = ADDR_TYPE_RT,
413 },
414};
415
416/* l3_main_1 -> l3_main_3 */
417static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
418 .master = &omap44xx_l3_main_1_hwmod,
419 .slave = &omap44xx_l3_main_3_hwmod,
420 .clk = "l3_div_ck",
421 .addr = omap44xx_l3_main_3_addrs,
422 .addr_cnt = ARRAY_SIZE(omap44xx_l3_main_3_addrs),
423 .user = OCP_USER_MPU | OCP_USER_SDMA,
424};
425
426/* l3_main_2 -> l3_main_3 */
427static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l3_main_3 = {
428 .master = &omap44xx_l3_main_2_hwmod,
429 .slave = &omap44xx_l3_main_3_hwmod,
430 .clk = "l3_div_ck",
431 .user = OCP_USER_MPU | OCP_USER_SDMA,
432};
433
434/* l4_cfg -> l3_main_3 */
435static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_3 = {
436 .master = &omap44xx_l4_cfg_hwmod,
437 .slave = &omap44xx_l3_main_3_hwmod,
438 .clk = "l4_div_ck",
439 .user = OCP_USER_MPU | OCP_USER_SDMA,
440};
441
442/* l3_main_3 slave ports */
443static struct omap_hwmod_ocp_if *omap44xx_l3_main_3_slaves[] = {
444 &omap44xx_l3_main_1__l3_main_3,
445 &omap44xx_l3_main_2__l3_main_3,
446 &omap44xx_l4_cfg__l3_main_3,
447};
448
449static struct omap_hwmod omap44xx_l3_main_3_hwmod = {
450 .name = "l3_main_3",
451 .class = &omap44xx_l3_hwmod_class,
452 .slaves = omap44xx_l3_main_3_slaves,
453 .slaves_cnt = ARRAY_SIZE(omap44xx_l3_main_3_slaves),
454 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
455};
456
457/*
458 * 'l4' class
459 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
460 */
461static struct omap_hwmod_class omap44xx_l4_hwmod_class = {
462 .name = "l4",
463};
464
465/* l4_abe interface data */
466/* aess -> l4_abe */
467static struct omap_hwmod_ocp_if omap44xx_aess__l4_abe = {
468 .master = &omap44xx_aess_hwmod,
469 .slave = &omap44xx_l4_abe_hwmod,
470 .clk = "ocp_abe_iclk",
471 .user = OCP_USER_MPU | OCP_USER_SDMA,
472};
473
474/* dsp -> l4_abe */
475static struct omap_hwmod_ocp_if omap44xx_dsp__l4_abe = {
476 .master = &omap44xx_dsp_hwmod,
477 .slave = &omap44xx_l4_abe_hwmod,
478 .clk = "ocp_abe_iclk",
479 .user = OCP_USER_MPU | OCP_USER_SDMA,
480};
481
482/* l3_main_1 -> l4_abe */
483static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_abe = {
484 .master = &omap44xx_l3_main_1_hwmod,
485 .slave = &omap44xx_l4_abe_hwmod,
486 .clk = "l3_div_ck",
487 .user = OCP_USER_MPU | OCP_USER_SDMA,
488};
489
490/* mpu -> l4_abe */
491static struct omap_hwmod_ocp_if omap44xx_mpu__l4_abe = {
492 .master = &omap44xx_mpu_hwmod,
493 .slave = &omap44xx_l4_abe_hwmod,
494 .clk = "ocp_abe_iclk",
495 .user = OCP_USER_MPU | OCP_USER_SDMA,
496};
497
498/* l4_abe slave ports */
499static struct omap_hwmod_ocp_if *omap44xx_l4_abe_slaves[] = {
500 &omap44xx_aess__l4_abe,
501 &omap44xx_dsp__l4_abe,
502 &omap44xx_l3_main_1__l4_abe,
503 &omap44xx_mpu__l4_abe,
504};
505
506static struct omap_hwmod omap44xx_l4_abe_hwmod = {
507 .name = "l4_abe",
508 .class = &omap44xx_l4_hwmod_class,
509 .slaves = omap44xx_l4_abe_slaves,
510 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_abe_slaves),
511 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
512};
513
514/* l4_cfg interface data */
515/* l3_main_1 -> l4_cfg */
516static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l4_cfg = {
517 .master = &omap44xx_l3_main_1_hwmod,
518 .slave = &omap44xx_l4_cfg_hwmod,
519 .clk = "l3_div_ck",
520 .user = OCP_USER_MPU | OCP_USER_SDMA,
521};
522
523/* l4_cfg slave ports */
524static struct omap_hwmod_ocp_if *omap44xx_l4_cfg_slaves[] = {
525 &omap44xx_l3_main_1__l4_cfg,
526};
527
528static struct omap_hwmod omap44xx_l4_cfg_hwmod = {
529 .name = "l4_cfg",
530 .class = &omap44xx_l4_hwmod_class,
531 .slaves = omap44xx_l4_cfg_slaves,
532 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_cfg_slaves),
533 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
534};
535
536/* l4_per interface data */
537/* l3_main_2 -> l4_per */
538static struct omap_hwmod_ocp_if omap44xx_l3_main_2__l4_per = {
539 .master = &omap44xx_l3_main_2_hwmod,
540 .slave = &omap44xx_l4_per_hwmod,
541 .clk = "l3_div_ck",
542 .user = OCP_USER_MPU | OCP_USER_SDMA,
543};
544
545/* l4_per slave ports */
546static struct omap_hwmod_ocp_if *omap44xx_l4_per_slaves[] = {
547 &omap44xx_l3_main_2__l4_per,
548};
549
550static struct omap_hwmod omap44xx_l4_per_hwmod = {
551 .name = "l4_per",
552 .class = &omap44xx_l4_hwmod_class,
553 .slaves = omap44xx_l4_per_slaves,
554 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_per_slaves),
555 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
556};
557
558/* l4_wkup interface data */
559/* l4_cfg -> l4_wkup */
560static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l4_wkup = {
561 .master = &omap44xx_l4_cfg_hwmod,
562 .slave = &omap44xx_l4_wkup_hwmod,
563 .clk = "l4_div_ck",
564 .user = OCP_USER_MPU | OCP_USER_SDMA,
565};
566
567/* l4_wkup slave ports */
568static struct omap_hwmod_ocp_if *omap44xx_l4_wkup_slaves[] = {
569 &omap44xx_l4_cfg__l4_wkup,
570};
571
572static struct omap_hwmod omap44xx_l4_wkup_hwmod = {
573 .name = "l4_wkup",
574 .class = &omap44xx_l4_hwmod_class,
575 .slaves = omap44xx_l4_wkup_slaves,
576 .slaves_cnt = ARRAY_SIZE(omap44xx_l4_wkup_slaves),
577 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
578};
579
580/*
581 * 'mpu_bus' class
582 * instance(s): mpu_private
583 */
584static struct omap_hwmod_class omap44xx_mpu_bus_hwmod_class = {
585 .name = "mpu_bus",
586};
587
588/* mpu_private interface data */
589/* mpu -> mpu_private */
590static struct omap_hwmod_ocp_if omap44xx_mpu__mpu_private = {
591 .master = &omap44xx_mpu_hwmod,
592 .slave = &omap44xx_mpu_private_hwmod,
593 .clk = "l3_div_ck",
594 .user = OCP_USER_MPU | OCP_USER_SDMA,
595};
596
597/* mpu_private slave ports */
598static struct omap_hwmod_ocp_if *omap44xx_mpu_private_slaves[] = {
599 &omap44xx_mpu__mpu_private,
600};
601
602static struct omap_hwmod omap44xx_mpu_private_hwmod = {
603 .name = "mpu_private",
604 .class = &omap44xx_mpu_bus_hwmod_class,
605 .slaves = omap44xx_mpu_private_slaves,
606 .slaves_cnt = ARRAY_SIZE(omap44xx_mpu_private_slaves),
607 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
608};
609
610/*
611 * Modules omap_hwmod structures
612 *
613 * The following IPs are excluded for the moment because:
614 * - They do not need an explicit SW control using omap_hwmod API.
615 * - They still need to be validated with the driver
616 * properly adapted to omap_hwmod / omap_device
617 *
618 * c2c
619 * c2c_target_fw
620 * cm_core
621 * cm_core_aon
622 * ctrl_module_core
623 * ctrl_module_pad_core
624 * ctrl_module_pad_wkup
625 * ctrl_module_wkup
626 * debugss
627 * efuse_ctrl_cust
628 * efuse_ctrl_std
629 * elm
630 * emif1
631 * emif2
632 * fdif
633 * gpmc
634 * gpu
635 * hdq1w
636 * hsi
637 * ocmc_ram
638 * ocp2scp_usb_phy
639 * ocp_wp_noc
640 * prcm_mpu
641 * prm
642 * scrm
643 * sl2if
644 * slimbus1
645 * slimbus2
646 * usb_host_fs
647 * usb_host_hs
648 * usb_phy_cm
649 * usb_tll_hs
650 * usim
651 */
652
653/*
654 * 'aess' class
655 * audio engine sub system
656 */
657
658static struct omap_hwmod_class_sysconfig omap44xx_aess_sysc = {
659 .rev_offs = 0x0000,
660 .sysc_offs = 0x0010,
661 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
662 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
663 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
664 .sysc_fields = &omap_hwmod_sysc_type2,
665};
666
667static struct omap_hwmod_class omap44xx_aess_hwmod_class = {
668 .name = "aess",
669 .sysc = &omap44xx_aess_sysc,
670};
671
672/* aess */
673static struct omap_hwmod_irq_info omap44xx_aess_irqs[] = {
674 { .irq = 99 + OMAP44XX_IRQ_GIC_START },
675};
676
677static struct omap_hwmod_dma_info omap44xx_aess_sdma_reqs[] = {
678 { .name = "fifo0", .dma_req = 100 + OMAP44XX_DMA_REQ_START },
679 { .name = "fifo1", .dma_req = 101 + OMAP44XX_DMA_REQ_START },
680 { .name = "fifo2", .dma_req = 102 + OMAP44XX_DMA_REQ_START },
681 { .name = "fifo3", .dma_req = 103 + OMAP44XX_DMA_REQ_START },
682 { .name = "fifo4", .dma_req = 104 + OMAP44XX_DMA_REQ_START },
683 { .name = "fifo5", .dma_req = 105 + OMAP44XX_DMA_REQ_START },
684 { .name = "fifo6", .dma_req = 106 + OMAP44XX_DMA_REQ_START },
685 { .name = "fifo7", .dma_req = 107 + OMAP44XX_DMA_REQ_START },
686};
687
688/* aess master ports */
689static struct omap_hwmod_ocp_if *omap44xx_aess_masters[] = {
690 &omap44xx_aess__l4_abe,
691};
692
693static struct omap_hwmod_addr_space omap44xx_aess_addrs[] = {
694 {
695 .pa_start = 0x401f1000,
696 .pa_end = 0x401f13ff,
697 .flags = ADDR_TYPE_RT
698 },
699};
700
701/* l4_abe -> aess */
702static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess = {
703 .master = &omap44xx_l4_abe_hwmod,
704 .slave = &omap44xx_aess_hwmod,
705 .clk = "ocp_abe_iclk",
706 .addr = omap44xx_aess_addrs,
707 .addr_cnt = ARRAY_SIZE(omap44xx_aess_addrs),
708 .user = OCP_USER_MPU,
709};
710
711static struct omap_hwmod_addr_space omap44xx_aess_dma_addrs[] = {
712 {
713 .pa_start = 0x490f1000,
714 .pa_end = 0x490f13ff,
715 .flags = ADDR_TYPE_RT
716 },
717};
718
719/* l4_abe -> aess (dma) */
720static struct omap_hwmod_ocp_if omap44xx_l4_abe__aess_dma = {
721 .master = &omap44xx_l4_abe_hwmod,
722 .slave = &omap44xx_aess_hwmod,
723 .clk = "ocp_abe_iclk",
724 .addr = omap44xx_aess_dma_addrs,
725 .addr_cnt = ARRAY_SIZE(omap44xx_aess_dma_addrs),
726 .user = OCP_USER_SDMA,
727};
728
729/* aess slave ports */
730static struct omap_hwmod_ocp_if *omap44xx_aess_slaves[] = {
731 &omap44xx_l4_abe__aess,
732 &omap44xx_l4_abe__aess_dma,
733};
734
735static struct omap_hwmod omap44xx_aess_hwmod = {
736 .name = "aess",
737 .class = &omap44xx_aess_hwmod_class,
738 .mpu_irqs = omap44xx_aess_irqs,
739 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_aess_irqs),
740 .sdma_reqs = omap44xx_aess_sdma_reqs,
741 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_aess_sdma_reqs),
742 .main_clk = "aess_fck",
743 .prcm = {
744 .omap4 = {
745 .clkctrl_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
746 },
747 },
748 .slaves = omap44xx_aess_slaves,
749 .slaves_cnt = ARRAY_SIZE(omap44xx_aess_slaves),
750 .masters = omap44xx_aess_masters,
751 .masters_cnt = ARRAY_SIZE(omap44xx_aess_masters),
752 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
753};
754
755/*
756 * 'bandgap' class
757 * bangap reference for ldo regulators
758 */
759
760static struct omap_hwmod_class omap44xx_bandgap_hwmod_class = {
761 .name = "bandgap",
762};
763
764/* bandgap */
765static struct omap_hwmod_opt_clk bandgap_opt_clks[] = {
766 { .role = "fclk", .clk = "bandgap_fclk" },
767};
768
769static struct omap_hwmod omap44xx_bandgap_hwmod = {
770 .name = "bandgap",
771 .class = &omap44xx_bandgap_hwmod_class,
772 .prcm = {
773 .omap4 = {
774 .clkctrl_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
775 },
776 },
777 .opt_clks = bandgap_opt_clks,
778 .opt_clks_cnt = ARRAY_SIZE(bandgap_opt_clks),
779 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
780};
781
782/*
783 * 'counter' class
784 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
785 */
786
787static struct omap_hwmod_class_sysconfig omap44xx_counter_sysc = {
788 .rev_offs = 0x0000,
789 .sysc_offs = 0x0004,
790 .sysc_flags = SYSC_HAS_SIDLEMODE,
791 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
792 SIDLE_SMART_WKUP),
793 .sysc_fields = &omap_hwmod_sysc_type1,
794};
795
796static struct omap_hwmod_class omap44xx_counter_hwmod_class = {
797 .name = "counter",
798 .sysc = &omap44xx_counter_sysc,
799};
800
801/* counter_32k */
802static struct omap_hwmod omap44xx_counter_32k_hwmod;
803static struct omap_hwmod_addr_space omap44xx_counter_32k_addrs[] = {
804 {
805 .pa_start = 0x4a304000,
806 .pa_end = 0x4a30401f,
807 .flags = ADDR_TYPE_RT
808 },
809};
810
811/* l4_wkup -> counter_32k */
812static struct omap_hwmod_ocp_if omap44xx_l4_wkup__counter_32k = {
813 .master = &omap44xx_l4_wkup_hwmod,
814 .slave = &omap44xx_counter_32k_hwmod,
815 .clk = "l4_wkup_clk_mux_ck",
816 .addr = omap44xx_counter_32k_addrs,
817 .addr_cnt = ARRAY_SIZE(omap44xx_counter_32k_addrs),
818 .user = OCP_USER_MPU | OCP_USER_SDMA,
819};
820
821/* counter_32k slave ports */
822static struct omap_hwmod_ocp_if *omap44xx_counter_32k_slaves[] = {
823 &omap44xx_l4_wkup__counter_32k,
824};
825
826static struct omap_hwmod omap44xx_counter_32k_hwmod = {
827 .name = "counter_32k",
828 .class = &omap44xx_counter_hwmod_class,
829 .flags = HWMOD_SWSUP_SIDLE,
830 .main_clk = "sys_32k_ck",
831 .prcm = {
832 .omap4 = {
833 .clkctrl_reg = OMAP4430_CM_WKUP_SYNCTIMER_CLKCTRL,
834 },
835 },
836 .slaves = omap44xx_counter_32k_slaves,
837 .slaves_cnt = ARRAY_SIZE(omap44xx_counter_32k_slaves),
838 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
839};
840
841/*
842 * 'dma' class
843 * dma controller for data exchange between memory to memory (i.e. internal or
844 * external memory) and gp peripherals to memory or memory to gp peripherals
845 */
846
847static struct omap_hwmod_class_sysconfig omap44xx_dma_sysc = {
848 .rev_offs = 0x0000,
849 .sysc_offs = 0x002c,
850 .syss_offs = 0x0028,
851 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
852 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
853 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
854 SYSS_HAS_RESET_STATUS),
855 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
856 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
857 .sysc_fields = &omap_hwmod_sysc_type1,
858};
859
860static struct omap_hwmod_class omap44xx_dma_hwmod_class = {
861 .name = "dma",
862 .sysc = &omap44xx_dma_sysc,
863};
864
865/* dma dev_attr */
866static struct omap_dma_dev_attr dma_dev_attr = {
867 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
868 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
869 .lch_count = 32,
870};
871
872/* dma_system */
873static struct omap_hwmod_irq_info omap44xx_dma_system_irqs[] = {
874 { .name = "0", .irq = 12 + OMAP44XX_IRQ_GIC_START },
875 { .name = "1", .irq = 13 + OMAP44XX_IRQ_GIC_START },
876 { .name = "2", .irq = 14 + OMAP44XX_IRQ_GIC_START },
877 { .name = "3", .irq = 15 + OMAP44XX_IRQ_GIC_START },
878};
879
880/* dma_system master ports */
881static struct omap_hwmod_ocp_if *omap44xx_dma_system_masters[] = {
882 &omap44xx_dma_system__l3_main_2,
883};
884
885static struct omap_hwmod_addr_space omap44xx_dma_system_addrs[] = {
886 {
887 .pa_start = 0x4a056000,
888 .pa_end = 0x4a056fff,
889 .flags = ADDR_TYPE_RT
890 },
891};
892
893/* l4_cfg -> dma_system */
894static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dma_system = {
895 .master = &omap44xx_l4_cfg_hwmod,
896 .slave = &omap44xx_dma_system_hwmod,
897 .clk = "l4_div_ck",
898 .addr = omap44xx_dma_system_addrs,
899 .addr_cnt = ARRAY_SIZE(omap44xx_dma_system_addrs),
900 .user = OCP_USER_MPU | OCP_USER_SDMA,
901};
902
903/* dma_system slave ports */
904static struct omap_hwmod_ocp_if *omap44xx_dma_system_slaves[] = {
905 &omap44xx_l4_cfg__dma_system,
906};
907
908static struct omap_hwmod omap44xx_dma_system_hwmod = {
909 .name = "dma_system",
910 .class = &omap44xx_dma_hwmod_class,
911 .mpu_irqs = omap44xx_dma_system_irqs,
912 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dma_system_irqs),
913 .main_clk = "l3_div_ck",
914 .prcm = {
915 .omap4 = {
916 .clkctrl_reg = OMAP4430_CM_SDMA_SDMA_CLKCTRL,
917 },
918 },
919 .dev_attr = &dma_dev_attr,
920 .slaves = omap44xx_dma_system_slaves,
921 .slaves_cnt = ARRAY_SIZE(omap44xx_dma_system_slaves),
922 .masters = omap44xx_dma_system_masters,
923 .masters_cnt = ARRAY_SIZE(omap44xx_dma_system_masters),
924 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
925};
926
927/*
928 * 'dmic' class
929 * digital microphone controller
930 */
931
932static struct omap_hwmod_class_sysconfig omap44xx_dmic_sysc = {
933 .rev_offs = 0x0000,
934 .sysc_offs = 0x0010,
935 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
936 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
937 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
938 SIDLE_SMART_WKUP),
939 .sysc_fields = &omap_hwmod_sysc_type2,
940};
941
942static struct omap_hwmod_class omap44xx_dmic_hwmod_class = {
943 .name = "dmic",
944 .sysc = &omap44xx_dmic_sysc,
945};
946
947/* dmic */
948static struct omap_hwmod omap44xx_dmic_hwmod;
949static struct omap_hwmod_irq_info omap44xx_dmic_irqs[] = {
950 { .irq = 114 + OMAP44XX_IRQ_GIC_START },
951};
952
953static struct omap_hwmod_dma_info omap44xx_dmic_sdma_reqs[] = {
954 { .dma_req = 66 + OMAP44XX_DMA_REQ_START },
955};
956
957static struct omap_hwmod_addr_space omap44xx_dmic_addrs[] = {
958 {
959 .pa_start = 0x4012e000,
960 .pa_end = 0x4012e07f,
961 .flags = ADDR_TYPE_RT
962 },
963};
964
965/* l4_abe -> dmic */
966static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
967 .master = &omap44xx_l4_abe_hwmod,
968 .slave = &omap44xx_dmic_hwmod,
969 .clk = "ocp_abe_iclk",
970 .addr = omap44xx_dmic_addrs,
971 .addr_cnt = ARRAY_SIZE(omap44xx_dmic_addrs),
972 .user = OCP_USER_MPU,
973};
974
975static struct omap_hwmod_addr_space omap44xx_dmic_dma_addrs[] = {
976 {
977 .pa_start = 0x4902e000,
978 .pa_end = 0x4902e07f,
979 .flags = ADDR_TYPE_RT
980 },
981};
982
983/* l4_abe -> dmic (dma) */
984static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic_dma = {
985 .master = &omap44xx_l4_abe_hwmod,
986 .slave = &omap44xx_dmic_hwmod,
987 .clk = "ocp_abe_iclk",
988 .addr = omap44xx_dmic_dma_addrs,
989 .addr_cnt = ARRAY_SIZE(omap44xx_dmic_dma_addrs),
990 .user = OCP_USER_SDMA,
991};
992
993/* dmic slave ports */
994static struct omap_hwmod_ocp_if *omap44xx_dmic_slaves[] = {
995 &omap44xx_l4_abe__dmic,
996 &omap44xx_l4_abe__dmic_dma,
997};
998
999static struct omap_hwmod omap44xx_dmic_hwmod = {
1000 .name = "dmic",
1001 .class = &omap44xx_dmic_hwmod_class,
1002 .mpu_irqs = omap44xx_dmic_irqs,
1003 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dmic_irqs),
1004 .sdma_reqs = omap44xx_dmic_sdma_reqs,
1005 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dmic_sdma_reqs),
1006 .main_clk = "dmic_fck",
1007 .prcm = {
1008 .omap4 = {
1009 .clkctrl_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1010 },
1011 },
1012 .slaves = omap44xx_dmic_slaves,
1013 .slaves_cnt = ARRAY_SIZE(omap44xx_dmic_slaves),
1014 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1015};
1016
1017/*
1018 * 'dsp' class
1019 * dsp sub-system
1020 */
1021
1022static struct omap_hwmod_class omap44xx_dsp_hwmod_class = {
1023 .name = "dsp",
1024};
1025
1026/* dsp */
1027static struct omap_hwmod_irq_info omap44xx_dsp_irqs[] = {
1028 { .irq = 28 + OMAP44XX_IRQ_GIC_START },
1029};
1030
1031static struct omap_hwmod_rst_info omap44xx_dsp_resets[] = {
1032 { .name = "mmu_cache", .rst_shift = 1 },
1033};
1034
1035static struct omap_hwmod_rst_info omap44xx_dsp_c0_resets[] = {
1036 { .name = "dsp", .rst_shift = 0 },
1037};
1038
1039/* dsp -> iva */
1040static struct omap_hwmod_ocp_if omap44xx_dsp__iva = {
1041 .master = &omap44xx_dsp_hwmod,
1042 .slave = &omap44xx_iva_hwmod,
1043 .clk = "dpll_iva_m5x2_ck",
1044};
1045
1046/* dsp master ports */
1047static struct omap_hwmod_ocp_if *omap44xx_dsp_masters[] = {
1048 &omap44xx_dsp__l3_main_1,
1049 &omap44xx_dsp__l4_abe,
1050 &omap44xx_dsp__iva,
1051};
1052
1053/* l4_cfg -> dsp */
1054static struct omap_hwmod_ocp_if omap44xx_l4_cfg__dsp = {
1055 .master = &omap44xx_l4_cfg_hwmod,
1056 .slave = &omap44xx_dsp_hwmod,
1057 .clk = "l4_div_ck",
1058 .user = OCP_USER_MPU | OCP_USER_SDMA,
1059};
1060
1061/* dsp slave ports */
1062static struct omap_hwmod_ocp_if *omap44xx_dsp_slaves[] = {
1063 &omap44xx_l4_cfg__dsp,
1064};
1065
1066/* Pseudo hwmod for reset control purpose only */
1067static struct omap_hwmod omap44xx_dsp_c0_hwmod = {
1068 .name = "dsp_c0",
1069 .class = &omap44xx_dsp_hwmod_class,
1070 .flags = HWMOD_INIT_NO_RESET,
1071 .rst_lines = omap44xx_dsp_c0_resets,
1072 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_c0_resets),
1073 .prcm = {
1074 .omap4 = {
1075 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
1076 },
1077 },
1078 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1079};
1080
1081static struct omap_hwmod omap44xx_dsp_hwmod = {
1082 .name = "dsp",
1083 .class = &omap44xx_dsp_hwmod_class,
1084 .mpu_irqs = omap44xx_dsp_irqs,
1085 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dsp_irqs),
1086 .rst_lines = omap44xx_dsp_resets,
1087 .rst_lines_cnt = ARRAY_SIZE(omap44xx_dsp_resets),
1088 .main_clk = "dsp_fck",
1089 .prcm = {
1090 .omap4 = {
1091 .clkctrl_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
1092 .rstctrl_reg = OMAP4430_RM_TESLA_RSTCTRL,
1093 },
1094 },
1095 .slaves = omap44xx_dsp_slaves,
1096 .slaves_cnt = ARRAY_SIZE(omap44xx_dsp_slaves),
1097 .masters = omap44xx_dsp_masters,
1098 .masters_cnt = ARRAY_SIZE(omap44xx_dsp_masters),
1099 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1100};
1101
1102/*
1103 * 'dss' class
1104 * display sub-system
1105 */
1106
1107static struct omap_hwmod_class_sysconfig omap44xx_dss_sysc = {
1108 .rev_offs = 0x0000,
1109 .syss_offs = 0x0014,
1110 .sysc_flags = SYSS_HAS_RESET_STATUS,
1111};
1112
1113static struct omap_hwmod_class omap44xx_dss_hwmod_class = {
1114 .name = "dss",
1115 .sysc = &omap44xx_dss_sysc,
1116};
1117
1118/* dss */
1119/* dss master ports */
1120static struct omap_hwmod_ocp_if *omap44xx_dss_masters[] = {
1121 &omap44xx_dss__l3_main_1,
1122};
1123
1124static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
1125 {
1126 .pa_start = 0x58000000,
1127 .pa_end = 0x5800007f,
1128 .flags = ADDR_TYPE_RT
1129 },
1130};
1131
1132/* l3_main_2 -> dss */
1133static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss = {
1134 .master = &omap44xx_l3_main_2_hwmod,
1135 .slave = &omap44xx_dss_hwmod,
1136 .clk = "l3_div_ck",
1137 .addr = omap44xx_dss_dma_addrs,
1138 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dma_addrs),
1139 .user = OCP_USER_SDMA,
1140};
1141
1142static struct omap_hwmod_addr_space omap44xx_dss_addrs[] = {
1143 {
1144 .pa_start = 0x48040000,
1145 .pa_end = 0x4804007f,
1146 .flags = ADDR_TYPE_RT
1147 },
1148};
1149
1150/* l4_per -> dss */
1151static struct omap_hwmod_ocp_if omap44xx_l4_per__dss = {
1152 .master = &omap44xx_l4_per_hwmod,
1153 .slave = &omap44xx_dss_hwmod,
1154 .clk = "l4_div_ck",
1155 .addr = omap44xx_dss_addrs,
1156 .addr_cnt = ARRAY_SIZE(omap44xx_dss_addrs),
1157 .user = OCP_USER_MPU,
1158};
1159
1160/* dss slave ports */
1161static struct omap_hwmod_ocp_if *omap44xx_dss_slaves[] = {
1162 &omap44xx_l3_main_2__dss,
1163 &omap44xx_l4_per__dss,
1164};
1165
1166static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1167 { .role = "sys_clk", .clk = "dss_sys_clk" },
1168 { .role = "tv_clk", .clk = "dss_tv_clk" },
1169 { .role = "dss_clk", .clk = "dss_dss_clk" },
1170 { .role = "video_clk", .clk = "dss_48mhz_clk" },
1171};
1172
1173static struct omap_hwmod omap44xx_dss_hwmod = {
1174 .name = "dss_core",
1175 .class = &omap44xx_dss_hwmod_class,
1176 .main_clk = "dss_fck",
1177 .prcm = {
1178 .omap4 = {
1179 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1180 },
1181 },
1182 .opt_clks = dss_opt_clks,
1183 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1184 .slaves = omap44xx_dss_slaves,
1185 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_slaves),
1186 .masters = omap44xx_dss_masters,
1187 .masters_cnt = ARRAY_SIZE(omap44xx_dss_masters),
1188 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1189};
1190
1191/*
1192 * 'dispc' class
1193 * display controller
1194 */
1195
1196static struct omap_hwmod_class_sysconfig omap44xx_dispc_sysc = {
1197 .rev_offs = 0x0000,
1198 .sysc_offs = 0x0010,
1199 .syss_offs = 0x0014,
1200 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1201 SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
1202 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1203 SYSS_HAS_RESET_STATUS),
1204 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1205 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1206 .sysc_fields = &omap_hwmod_sysc_type1,
1207};
1208
1209static struct omap_hwmod_class omap44xx_dispc_hwmod_class = {
1210 .name = "dispc",
1211 .sysc = &omap44xx_dispc_sysc,
1212};
1213
1214/* dss_dispc */
1215static struct omap_hwmod omap44xx_dss_dispc_hwmod;
1216static struct omap_hwmod_irq_info omap44xx_dss_dispc_irqs[] = {
1217 { .irq = 25 + OMAP44XX_IRQ_GIC_START },
1218};
1219
1220static struct omap_hwmod_dma_info omap44xx_dss_dispc_sdma_reqs[] = {
1221 { .dma_req = 5 + OMAP44XX_DMA_REQ_START },
1222};
1223
1224static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
1225 {
1226 .pa_start = 0x58001000,
1227 .pa_end = 0x58001fff,
1228 .flags = ADDR_TYPE_RT
1229 },
1230};
1231
1232/* l3_main_2 -> dss_dispc */
1233static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dispc = {
1234 .master = &omap44xx_l3_main_2_hwmod,
1235 .slave = &omap44xx_dss_dispc_hwmod,
1236 .clk = "l3_div_ck",
1237 .addr = omap44xx_dss_dispc_dma_addrs,
1238 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dispc_dma_addrs),
1239 .user = OCP_USER_SDMA,
1240};
1241
1242static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
1243 {
1244 .pa_start = 0x48041000,
1245 .pa_end = 0x48041fff,
1246 .flags = ADDR_TYPE_RT
1247 },
1248};
1249
1250/* l4_per -> dss_dispc */
1251static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
1252 .master = &omap44xx_l4_per_hwmod,
1253 .slave = &omap44xx_dss_dispc_hwmod,
1254 .clk = "l4_div_ck",
1255 .addr = omap44xx_dss_dispc_addrs,
1256 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dispc_addrs),
1257 .user = OCP_USER_MPU,
1258};
1259
1260/* dss_dispc slave ports */
1261static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
1262 &omap44xx_l3_main_2__dss_dispc,
1263 &omap44xx_l4_per__dss_dispc,
1264};
1265
1266static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
1267 .name = "dss_dispc",
1268 .class = &omap44xx_dispc_hwmod_class,
1269 .mpu_irqs = omap44xx_dss_dispc_irqs,
1270 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dispc_irqs),
1271 .sdma_reqs = omap44xx_dss_dispc_sdma_reqs,
1272 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dispc_sdma_reqs),
1273 .main_clk = "dss_fck",
1274 .prcm = {
1275 .omap4 = {
1276 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1277 },
1278 },
1279 .slaves = omap44xx_dss_dispc_slaves,
1280 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
1281 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1282};
1283
1284/*
1285 * 'dsi' class
1286 * display serial interface controller
1287 */
1288
1289static struct omap_hwmod_class_sysconfig omap44xx_dsi_sysc = {
1290 .rev_offs = 0x0000,
1291 .sysc_offs = 0x0010,
1292 .syss_offs = 0x0014,
1293 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
1294 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1295 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1296 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1297 .sysc_fields = &omap_hwmod_sysc_type1,
1298};
1299
1300static struct omap_hwmod_class omap44xx_dsi_hwmod_class = {
1301 .name = "dsi",
1302 .sysc = &omap44xx_dsi_sysc,
1303};
1304
1305/* dss_dsi1 */
1306static struct omap_hwmod omap44xx_dss_dsi1_hwmod;
1307static struct omap_hwmod_irq_info omap44xx_dss_dsi1_irqs[] = {
1308 { .irq = 53 + OMAP44XX_IRQ_GIC_START },
1309};
1310
1311static struct omap_hwmod_dma_info omap44xx_dss_dsi1_sdma_reqs[] = {
1312 { .dma_req = 74 + OMAP44XX_DMA_REQ_START },
1313};
1314
1315static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
1316 {
1317 .pa_start = 0x58004000,
1318 .pa_end = 0x580041ff,
1319 .flags = ADDR_TYPE_RT
1320 },
1321};
1322
1323/* l3_main_2 -> dss_dsi1 */
1324static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi1 = {
1325 .master = &omap44xx_l3_main_2_hwmod,
1326 .slave = &omap44xx_dss_dsi1_hwmod,
1327 .clk = "l3_div_ck",
1328 .addr = omap44xx_dss_dsi1_dma_addrs,
1329 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_dma_addrs),
1330 .user = OCP_USER_SDMA,
1331};
1332
1333static struct omap_hwmod_addr_space omap44xx_dss_dsi1_addrs[] = {
1334 {
1335 .pa_start = 0x48044000,
1336 .pa_end = 0x480441ff,
1337 .flags = ADDR_TYPE_RT
1338 },
1339};
1340
1341/* l4_per -> dss_dsi1 */
1342static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi1 = {
1343 .master = &omap44xx_l4_per_hwmod,
1344 .slave = &omap44xx_dss_dsi1_hwmod,
1345 .clk = "l4_div_ck",
1346 .addr = omap44xx_dss_dsi1_addrs,
1347 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_addrs),
1348 .user = OCP_USER_MPU,
1349};
1350
1351/* dss_dsi1 slave ports */
1352static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
1353 &omap44xx_l3_main_2__dss_dsi1,
1354 &omap44xx_l4_per__dss_dsi1,
1355};
1356
1357static struct omap_hwmod omap44xx_dss_dsi1_hwmod = {
1358 .name = "dss_dsi1",
1359 .class = &omap44xx_dsi_hwmod_class,
1360 .mpu_irqs = omap44xx_dss_dsi1_irqs,
1361 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_irqs),
1362 .sdma_reqs = omap44xx_dss_dsi1_sdma_reqs,
1363 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_sdma_reqs),
1364 .main_clk = "dss_fck",
1365 .prcm = {
1366 .omap4 = {
1367 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1368 },
1369 },
1370 .slaves = omap44xx_dss_dsi1_slaves,
1371 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi1_slaves),
1372 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1373};
1374
1375/* dss_dsi2 */
1376static struct omap_hwmod omap44xx_dss_dsi2_hwmod;
1377static struct omap_hwmod_irq_info omap44xx_dss_dsi2_irqs[] = {
1378 { .irq = 84 + OMAP44XX_IRQ_GIC_START },
1379};
1380
1381static struct omap_hwmod_dma_info omap44xx_dss_dsi2_sdma_reqs[] = {
1382 { .dma_req = 83 + OMAP44XX_DMA_REQ_START },
1383};
1384
1385static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
1386 {
1387 .pa_start = 0x58005000,
1388 .pa_end = 0x580051ff,
1389 .flags = ADDR_TYPE_RT
1390 },
1391};
1392
1393/* l3_main_2 -> dss_dsi2 */
1394static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_dsi2 = {
1395 .master = &omap44xx_l3_main_2_hwmod,
1396 .slave = &omap44xx_dss_dsi2_hwmod,
1397 .clk = "l3_div_ck",
1398 .addr = omap44xx_dss_dsi2_dma_addrs,
1399 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_dma_addrs),
1400 .user = OCP_USER_SDMA,
1401};
1402
1403static struct omap_hwmod_addr_space omap44xx_dss_dsi2_addrs[] = {
1404 {
1405 .pa_start = 0x48045000,
1406 .pa_end = 0x480451ff,
1407 .flags = ADDR_TYPE_RT
1408 },
1409};
1410
1411/* l4_per -> dss_dsi2 */
1412static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dsi2 = {
1413 .master = &omap44xx_l4_per_hwmod,
1414 .slave = &omap44xx_dss_dsi2_hwmod,
1415 .clk = "l4_div_ck",
1416 .addr = omap44xx_dss_dsi2_addrs,
1417 .addr_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_addrs),
1418 .user = OCP_USER_MPU,
1419};
1420
1421/* dss_dsi2 slave ports */
1422static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
1423 &omap44xx_l3_main_2__dss_dsi2,
1424 &omap44xx_l4_per__dss_dsi2,
1425};
1426
1427static struct omap_hwmod omap44xx_dss_dsi2_hwmod = {
1428 .name = "dss_dsi2",
1429 .class = &omap44xx_dsi_hwmod_class,
1430 .mpu_irqs = omap44xx_dss_dsi2_irqs,
1431 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_irqs),
1432 .sdma_reqs = omap44xx_dss_dsi2_sdma_reqs,
1433 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_sdma_reqs),
1434 .main_clk = "dss_fck",
1435 .prcm = {
1436 .omap4 = {
1437 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1438 },
1439 },
1440 .slaves = omap44xx_dss_dsi2_slaves,
1441 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dsi2_slaves),
1442 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1443};
1444
1445/*
1446 * 'hdmi' class
1447 * hdmi controller
1448 */
1449
1450static struct omap_hwmod_class_sysconfig omap44xx_hdmi_sysc = {
1451 .rev_offs = 0x0000,
1452 .sysc_offs = 0x0010,
1453 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1454 SYSC_HAS_SOFTRESET),
1455 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1456 SIDLE_SMART_WKUP),
1457 .sysc_fields = &omap_hwmod_sysc_type2,
1458};
1459
1460static struct omap_hwmod_class omap44xx_hdmi_hwmod_class = {
1461 .name = "hdmi",
1462 .sysc = &omap44xx_hdmi_sysc,
1463};
1464
1465/* dss_hdmi */
1466static struct omap_hwmod omap44xx_dss_hdmi_hwmod;
1467static struct omap_hwmod_irq_info omap44xx_dss_hdmi_irqs[] = {
1468 { .irq = 101 + OMAP44XX_IRQ_GIC_START },
1469};
1470
1471static struct omap_hwmod_dma_info omap44xx_dss_hdmi_sdma_reqs[] = {
1472 { .dma_req = 75 + OMAP44XX_DMA_REQ_START },
1473};
1474
1475static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
1476 {
1477 .pa_start = 0x58006000,
1478 .pa_end = 0x58006fff,
1479 .flags = ADDR_TYPE_RT
1480 },
1481};
1482
1483/* l3_main_2 -> dss_hdmi */
1484static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_hdmi = {
1485 .master = &omap44xx_l3_main_2_hwmod,
1486 .slave = &omap44xx_dss_hdmi_hwmod,
1487 .clk = "l3_div_ck",
1488 .addr = omap44xx_dss_hdmi_dma_addrs,
1489 .addr_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_dma_addrs),
1490 .user = OCP_USER_SDMA,
1491};
1492
1493static struct omap_hwmod_addr_space omap44xx_dss_hdmi_addrs[] = {
1494 {
1495 .pa_start = 0x48046000,
1496 .pa_end = 0x48046fff,
1497 .flags = ADDR_TYPE_RT
1498 },
1499};
1500
1501/* l4_per -> dss_hdmi */
1502static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_hdmi = {
1503 .master = &omap44xx_l4_per_hwmod,
1504 .slave = &omap44xx_dss_hdmi_hwmod,
1505 .clk = "l4_div_ck",
1506 .addr = omap44xx_dss_hdmi_addrs,
1507 .addr_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_addrs),
1508 .user = OCP_USER_MPU,
1509};
1510
1511/* dss_hdmi slave ports */
1512static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
1513 &omap44xx_l3_main_2__dss_hdmi,
1514 &omap44xx_l4_per__dss_hdmi,
1515};
1516
1517static struct omap_hwmod omap44xx_dss_hdmi_hwmod = {
1518 .name = "dss_hdmi",
1519 .class = &omap44xx_hdmi_hwmod_class,
1520 .mpu_irqs = omap44xx_dss_hdmi_irqs,
1521 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_irqs),
1522 .sdma_reqs = omap44xx_dss_hdmi_sdma_reqs,
1523 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_sdma_reqs),
1524 .main_clk = "dss_fck",
1525 .prcm = {
1526 .omap4 = {
1527 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1528 },
1529 },
1530 .slaves = omap44xx_dss_hdmi_slaves,
1531 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_hdmi_slaves),
1532 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1533};
1534
1535/*
1536 * 'rfbi' class
1537 * remote frame buffer interface
1538 */
1539
1540static struct omap_hwmod_class_sysconfig omap44xx_rfbi_sysc = {
1541 .rev_offs = 0x0000,
1542 .sysc_offs = 0x0010,
1543 .syss_offs = 0x0014,
1544 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
1545 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1546 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1547 .sysc_fields = &omap_hwmod_sysc_type1,
1548};
1549
1550static struct omap_hwmod_class omap44xx_rfbi_hwmod_class = {
1551 .name = "rfbi",
1552 .sysc = &omap44xx_rfbi_sysc,
1553};
1554
1555/* dss_rfbi */
1556static struct omap_hwmod omap44xx_dss_rfbi_hwmod;
1557static struct omap_hwmod_dma_info omap44xx_dss_rfbi_sdma_reqs[] = {
1558 { .dma_req = 13 + OMAP44XX_DMA_REQ_START },
1559};
1560
1561static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
1562 {
1563 .pa_start = 0x58002000,
1564 .pa_end = 0x580020ff,
1565 .flags = ADDR_TYPE_RT
1566 },
1567};
1568
1569/* l3_main_2 -> dss_rfbi */
1570static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_rfbi = {
1571 .master = &omap44xx_l3_main_2_hwmod,
1572 .slave = &omap44xx_dss_rfbi_hwmod,
1573 .clk = "l3_div_ck",
1574 .addr = omap44xx_dss_rfbi_dma_addrs,
1575 .addr_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_dma_addrs),
1576 .user = OCP_USER_SDMA,
1577};
1578
1579static struct omap_hwmod_addr_space omap44xx_dss_rfbi_addrs[] = {
1580 {
1581 .pa_start = 0x48042000,
1582 .pa_end = 0x480420ff,
1583 .flags = ADDR_TYPE_RT
1584 },
1585};
1586
1587/* l4_per -> dss_rfbi */
1588static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_rfbi = {
1589 .master = &omap44xx_l4_per_hwmod,
1590 .slave = &omap44xx_dss_rfbi_hwmod,
1591 .clk = "l4_div_ck",
1592 .addr = omap44xx_dss_rfbi_addrs,
1593 .addr_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_addrs),
1594 .user = OCP_USER_MPU,
1595};
1596
1597/* dss_rfbi slave ports */
1598static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
1599 &omap44xx_l3_main_2__dss_rfbi,
1600 &omap44xx_l4_per__dss_rfbi,
1601};
1602
1603static struct omap_hwmod omap44xx_dss_rfbi_hwmod = {
1604 .name = "dss_rfbi",
1605 .class = &omap44xx_rfbi_hwmod_class,
1606 .sdma_reqs = omap44xx_dss_rfbi_sdma_reqs,
1607 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_sdma_reqs),
1608 .main_clk = "dss_fck",
1609 .prcm = {
1610 .omap4 = {
1611 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1612 },
1613 },
1614 .slaves = omap44xx_dss_rfbi_slaves,
1615 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_rfbi_slaves),
1616 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1617};
1618
1619/*
1620 * 'venc' class
1621 * video encoder
1622 */
1623
1624static struct omap_hwmod_class omap44xx_venc_hwmod_class = {
1625 .name = "venc",
1626};
1627
1628/* dss_venc */
1629static struct omap_hwmod omap44xx_dss_venc_hwmod;
1630static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
1631 {
1632 .pa_start = 0x58003000,
1633 .pa_end = 0x580030ff,
1634 .flags = ADDR_TYPE_RT
1635 },
1636};
1637
1638/* l3_main_2 -> dss_venc */
1639static struct omap_hwmod_ocp_if omap44xx_l3_main_2__dss_venc = {
1640 .master = &omap44xx_l3_main_2_hwmod,
1641 .slave = &omap44xx_dss_venc_hwmod,
1642 .clk = "l3_div_ck",
1643 .addr = omap44xx_dss_venc_dma_addrs,
1644 .addr_cnt = ARRAY_SIZE(omap44xx_dss_venc_dma_addrs),
1645 .user = OCP_USER_SDMA,
1646};
1647
1648static struct omap_hwmod_addr_space omap44xx_dss_venc_addrs[] = {
1649 {
1650 .pa_start = 0x48043000,
1651 .pa_end = 0x480430ff,
1652 .flags = ADDR_TYPE_RT
1653 },
1654};
1655
1656/* l4_per -> dss_venc */
1657static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_venc = {
1658 .master = &omap44xx_l4_per_hwmod,
1659 .slave = &omap44xx_dss_venc_hwmod,
1660 .clk = "l4_div_ck",
1661 .addr = omap44xx_dss_venc_addrs,
1662 .addr_cnt = ARRAY_SIZE(omap44xx_dss_venc_addrs),
1663 .user = OCP_USER_MPU,
1664};
1665
1666/* dss_venc slave ports */
1667static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
1668 &omap44xx_l3_main_2__dss_venc,
1669 &omap44xx_l4_per__dss_venc,
1670};
1671
1672static struct omap_hwmod omap44xx_dss_venc_hwmod = {
1673 .name = "dss_venc",
1674 .class = &omap44xx_venc_hwmod_class,
1675 .main_clk = "dss_fck",
1676 .prcm = {
1677 .omap4 = {
1678 .clkctrl_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1679 },
1680 },
1681 .slaves = omap44xx_dss_venc_slaves,
1682 .slaves_cnt = ARRAY_SIZE(omap44xx_dss_venc_slaves),
1683 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1684};
1685
1686/*
1687 * 'gpio' class
1688 * general purpose io module
1689 */
1690
1691static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
1692 .rev_offs = 0x0000,
1693 .sysc_offs = 0x0010,
1694 .syss_offs = 0x0114,
1695 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1696 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1697 SYSS_HAS_RESET_STATUS),
1698 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1699 SIDLE_SMART_WKUP),
1700 .sysc_fields = &omap_hwmod_sysc_type1,
1701};
1702
1703static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
1704 .name = "gpio",
1705 .sysc = &omap44xx_gpio_sysc,
1706 .rev = 2,
1707};
1708
1709/* gpio dev_attr */
1710static struct omap_gpio_dev_attr gpio_dev_attr = {
1711 .bank_width = 32,
1712 .dbck_flag = true,
1713};
1714
1715/* gpio1 */
1716static struct omap_hwmod omap44xx_gpio1_hwmod;
1717static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
1718 { .irq = 29 + OMAP44XX_IRQ_GIC_START },
1719};
1720
1721static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
1722 {
1723 .pa_start = 0x4a310000,
1724 .pa_end = 0x4a3101ff,
1725 .flags = ADDR_TYPE_RT
1726 },
1727};
1728
1729/* l4_wkup -> gpio1 */
1730static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
1731 .master = &omap44xx_l4_wkup_hwmod,
1732 .slave = &omap44xx_gpio1_hwmod,
1733 .clk = "l4_wkup_clk_mux_ck",
1734 .addr = omap44xx_gpio1_addrs,
1735 .addr_cnt = ARRAY_SIZE(omap44xx_gpio1_addrs),
1736 .user = OCP_USER_MPU | OCP_USER_SDMA,
1737};
1738
1739/* gpio1 slave ports */
1740static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
1741 &omap44xx_l4_wkup__gpio1,
1742};
1743
1744static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
1745 { .role = "dbclk", .clk = "gpio1_dbclk" },
1746};
1747
1748static struct omap_hwmod omap44xx_gpio1_hwmod = {
1749 .name = "gpio1",
1750 .class = &omap44xx_gpio_hwmod_class,
1751 .mpu_irqs = omap44xx_gpio1_irqs,
1752 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio1_irqs),
1753 .main_clk = "gpio1_ick",
1754 .prcm = {
1755 .omap4 = {
1756 .clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
1757 },
1758 },
1759 .opt_clks = gpio1_opt_clks,
1760 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
1761 .dev_attr = &gpio_dev_attr,
1762 .slaves = omap44xx_gpio1_slaves,
1763 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
1764 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1765};
1766
1767/* gpio2 */
1768static struct omap_hwmod omap44xx_gpio2_hwmod;
1769static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
1770 { .irq = 30 + OMAP44XX_IRQ_GIC_START },
1771};
1772
1773static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
1774 {
1775 .pa_start = 0x48055000,
1776 .pa_end = 0x480551ff,
1777 .flags = ADDR_TYPE_RT
1778 },
1779};
1780
1781/* l4_per -> gpio2 */
1782static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
1783 .master = &omap44xx_l4_per_hwmod,
1784 .slave = &omap44xx_gpio2_hwmod,
1785 .clk = "l4_div_ck",
1786 .addr = omap44xx_gpio2_addrs,
1787 .addr_cnt = ARRAY_SIZE(omap44xx_gpio2_addrs),
1788 .user = OCP_USER_MPU | OCP_USER_SDMA,
1789};
1790
1791/* gpio2 slave ports */
1792static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
1793 &omap44xx_l4_per__gpio2,
1794};
1795
1796static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
1797 { .role = "dbclk", .clk = "gpio2_dbclk" },
1798};
1799
1800static struct omap_hwmod omap44xx_gpio2_hwmod = {
1801 .name = "gpio2",
1802 .class = &omap44xx_gpio_hwmod_class,
1803 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1804 .mpu_irqs = omap44xx_gpio2_irqs,
1805 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio2_irqs),
1806 .main_clk = "gpio2_ick",
1807 .prcm = {
1808 .omap4 = {
1809 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
1810 },
1811 },
1812 .opt_clks = gpio2_opt_clks,
1813 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
1814 .dev_attr = &gpio_dev_attr,
1815 .slaves = omap44xx_gpio2_slaves,
1816 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
1817 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1818};
1819
1820/* gpio3 */
1821static struct omap_hwmod omap44xx_gpio3_hwmod;
1822static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
1823 { .irq = 31 + OMAP44XX_IRQ_GIC_START },
1824};
1825
1826static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
1827 {
1828 .pa_start = 0x48057000,
1829 .pa_end = 0x480571ff,
1830 .flags = ADDR_TYPE_RT
1831 },
1832};
1833
1834/* l4_per -> gpio3 */
1835static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
1836 .master = &omap44xx_l4_per_hwmod,
1837 .slave = &omap44xx_gpio3_hwmod,
1838 .clk = "l4_div_ck",
1839 .addr = omap44xx_gpio3_addrs,
1840 .addr_cnt = ARRAY_SIZE(omap44xx_gpio3_addrs),
1841 .user = OCP_USER_MPU | OCP_USER_SDMA,
1842};
1843
1844/* gpio3 slave ports */
1845static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
1846 &omap44xx_l4_per__gpio3,
1847};
1848
1849static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
1850 { .role = "dbclk", .clk = "gpio3_dbclk" },
1851};
1852
1853static struct omap_hwmod omap44xx_gpio3_hwmod = {
1854 .name = "gpio3",
1855 .class = &omap44xx_gpio_hwmod_class,
1856 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1857 .mpu_irqs = omap44xx_gpio3_irqs,
1858 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio3_irqs),
1859 .main_clk = "gpio3_ick",
1860 .prcm = {
1861 .omap4 = {
1862 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
1863 },
1864 },
1865 .opt_clks = gpio3_opt_clks,
1866 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1867 .dev_attr = &gpio_dev_attr,
1868 .slaves = omap44xx_gpio3_slaves,
1869 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
1870 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1871};
1872
1873/* gpio4 */
1874static struct omap_hwmod omap44xx_gpio4_hwmod;
1875static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
1876 { .irq = 32 + OMAP44XX_IRQ_GIC_START },
1877};
1878
1879static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
1880 {
1881 .pa_start = 0x48059000,
1882 .pa_end = 0x480591ff,
1883 .flags = ADDR_TYPE_RT
1884 },
1885};
1886
1887/* l4_per -> gpio4 */
1888static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
1889 .master = &omap44xx_l4_per_hwmod,
1890 .slave = &omap44xx_gpio4_hwmod,
1891 .clk = "l4_div_ck",
1892 .addr = omap44xx_gpio4_addrs,
1893 .addr_cnt = ARRAY_SIZE(omap44xx_gpio4_addrs),
1894 .user = OCP_USER_MPU | OCP_USER_SDMA,
1895};
1896
1897/* gpio4 slave ports */
1898static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
1899 &omap44xx_l4_per__gpio4,
1900};
1901
1902static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
1903 { .role = "dbclk", .clk = "gpio4_dbclk" },
1904};
1905
1906static struct omap_hwmod omap44xx_gpio4_hwmod = {
1907 .name = "gpio4",
1908 .class = &omap44xx_gpio_hwmod_class,
1909 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1910 .mpu_irqs = omap44xx_gpio4_irqs,
1911 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio4_irqs),
1912 .main_clk = "gpio4_ick",
1913 .prcm = {
1914 .omap4 = {
1915 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
1916 },
1917 },
1918 .opt_clks = gpio4_opt_clks,
1919 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
1920 .dev_attr = &gpio_dev_attr,
1921 .slaves = omap44xx_gpio4_slaves,
1922 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
1923 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1924};
1925
1926/* gpio5 */
1927static struct omap_hwmod omap44xx_gpio5_hwmod;
1928static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
1929 { .irq = 33 + OMAP44XX_IRQ_GIC_START },
1930};
1931
1932static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
1933 {
1934 .pa_start = 0x4805b000,
1935 .pa_end = 0x4805b1ff,
1936 .flags = ADDR_TYPE_RT
1937 },
1938};
1939
1940/* l4_per -> gpio5 */
1941static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
1942 .master = &omap44xx_l4_per_hwmod,
1943 .slave = &omap44xx_gpio5_hwmod,
1944 .clk = "l4_div_ck",
1945 .addr = omap44xx_gpio5_addrs,
1946 .addr_cnt = ARRAY_SIZE(omap44xx_gpio5_addrs),
1947 .user = OCP_USER_MPU | OCP_USER_SDMA,
1948};
1949
1950/* gpio5 slave ports */
1951static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
1952 &omap44xx_l4_per__gpio5,
1953};
1954
1955static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
1956 { .role = "dbclk", .clk = "gpio5_dbclk" },
1957};
1958
1959static struct omap_hwmod omap44xx_gpio5_hwmod = {
1960 .name = "gpio5",
1961 .class = &omap44xx_gpio_hwmod_class,
1962 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1963 .mpu_irqs = omap44xx_gpio5_irqs,
1964 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio5_irqs),
1965 .main_clk = "gpio5_ick",
1966 .prcm = {
1967 .omap4 = {
1968 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
1969 },
1970 },
1971 .opt_clks = gpio5_opt_clks,
1972 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
1973 .dev_attr = &gpio_dev_attr,
1974 .slaves = omap44xx_gpio5_slaves,
1975 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
1976 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1977};
1978
1979/* gpio6 */
1980static struct omap_hwmod omap44xx_gpio6_hwmod;
1981static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
1982 { .irq = 34 + OMAP44XX_IRQ_GIC_START },
1983};
1984
1985static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
1986 {
1987 .pa_start = 0x4805d000,
1988 .pa_end = 0x4805d1ff,
1989 .flags = ADDR_TYPE_RT
1990 },
1991};
1992
1993/* l4_per -> gpio6 */
1994static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
1995 .master = &omap44xx_l4_per_hwmod,
1996 .slave = &omap44xx_gpio6_hwmod,
1997 .clk = "l4_div_ck",
1998 .addr = omap44xx_gpio6_addrs,
1999 .addr_cnt = ARRAY_SIZE(omap44xx_gpio6_addrs),
2000 .user = OCP_USER_MPU | OCP_USER_SDMA,
2001};
2002
2003/* gpio6 slave ports */
2004static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
2005 &omap44xx_l4_per__gpio6,
2006};
2007
2008static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
2009 { .role = "dbclk", .clk = "gpio6_dbclk" },
2010};
2011
2012static struct omap_hwmod omap44xx_gpio6_hwmod = {
2013 .name = "gpio6",
2014 .class = &omap44xx_gpio_hwmod_class,
2015 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2016 .mpu_irqs = omap44xx_gpio6_irqs,
2017 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio6_irqs),
2018 .main_clk = "gpio6_ick",
2019 .prcm = {
2020 .omap4 = {
2021 .clkctrl_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
2022 },
2023 },
2024 .opt_clks = gpio6_opt_clks,
2025 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
2026 .dev_attr = &gpio_dev_attr,
2027 .slaves = omap44xx_gpio6_slaves,
2028 .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
2029 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2030};
2031
2032/*
2033 * 'hsi' class
2034 * mipi high-speed synchronous serial interface (multichannel and full-duplex
2035 * serial if)
2036 */
2037
2038static struct omap_hwmod_class_sysconfig omap44xx_hsi_sysc = {
2039 .rev_offs = 0x0000,
2040 .sysc_offs = 0x0010,
2041 .syss_offs = 0x0014,
2042 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_EMUFREE |
2043 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
2044 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2045 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2046 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2047 MSTANDBY_SMART),
2048 .sysc_fields = &omap_hwmod_sysc_type1,
2049};
2050
2051static struct omap_hwmod_class omap44xx_hsi_hwmod_class = {
2052 .name = "hsi",
2053 .sysc = &omap44xx_hsi_sysc,
2054};
2055
2056/* hsi */
2057static struct omap_hwmod_irq_info omap44xx_hsi_irqs[] = {
2058 { .name = "mpu_p1", .irq = 67 + OMAP44XX_IRQ_GIC_START },
2059 { .name = "mpu_p2", .irq = 68 + OMAP44XX_IRQ_GIC_START },
2060 { .name = "mpu_dma", .irq = 71 + OMAP44XX_IRQ_GIC_START },
2061};
2062
2063/* hsi master ports */
2064static struct omap_hwmod_ocp_if *omap44xx_hsi_masters[] = {
2065 &omap44xx_hsi__l3_main_2,
2066};
2067
2068static struct omap_hwmod_addr_space omap44xx_hsi_addrs[] = {
2069 {
2070 .pa_start = 0x4a058000,
2071 .pa_end = 0x4a05bfff,
2072 .flags = ADDR_TYPE_RT
2073 },
2074};
2075
2076/* l4_cfg -> hsi */
2077static struct omap_hwmod_ocp_if omap44xx_l4_cfg__hsi = {
2078 .master = &omap44xx_l4_cfg_hwmod,
2079 .slave = &omap44xx_hsi_hwmod,
2080 .clk = "l4_div_ck",
2081 .addr = omap44xx_hsi_addrs,
2082 .addr_cnt = ARRAY_SIZE(omap44xx_hsi_addrs),
2083 .user = OCP_USER_MPU | OCP_USER_SDMA,
2084};
2085
2086/* hsi slave ports */
2087static struct omap_hwmod_ocp_if *omap44xx_hsi_slaves[] = {
2088 &omap44xx_l4_cfg__hsi,
2089};
2090
2091static struct omap_hwmod omap44xx_hsi_hwmod = {
2092 .name = "hsi",
2093 .class = &omap44xx_hsi_hwmod_class,
2094 .mpu_irqs = omap44xx_hsi_irqs,
2095 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_hsi_irqs),
2096 .main_clk = "hsi_fck",
2097 .prcm = {
2098 .omap4 = {
2099 .clkctrl_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
2100 },
2101 },
2102 .slaves = omap44xx_hsi_slaves,
2103 .slaves_cnt = ARRAY_SIZE(omap44xx_hsi_slaves),
2104 .masters = omap44xx_hsi_masters,
2105 .masters_cnt = ARRAY_SIZE(omap44xx_hsi_masters),
2106 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2107};
2108
2109/*
2110 * 'i2c' class
2111 * multimaster high-speed i2c controller
2112 */
2113
2114static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
2115 .sysc_offs = 0x0010,
2116 .syss_offs = 0x0090,
2117 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2118 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
2119 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
2120 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2121 SIDLE_SMART_WKUP),
2122 .sysc_fields = &omap_hwmod_sysc_type1,
2123};
2124
2125static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
2126 .name = "i2c",
2127 .sysc = &omap44xx_i2c_sysc,
2128};
2129
2130/* i2c1 */
2131static struct omap_hwmod omap44xx_i2c1_hwmod;
2132static struct omap_hwmod_irq_info omap44xx_i2c1_irqs[] = {
2133 { .irq = 56 + OMAP44XX_IRQ_GIC_START },
2134};
2135
2136static struct omap_hwmod_dma_info omap44xx_i2c1_sdma_reqs[] = {
2137 { .name = "tx", .dma_req = 26 + OMAP44XX_DMA_REQ_START },
2138 { .name = "rx", .dma_req = 27 + OMAP44XX_DMA_REQ_START },
2139};
2140
2141static struct omap_hwmod_addr_space omap44xx_i2c1_addrs[] = {
2142 {
2143 .pa_start = 0x48070000,
2144 .pa_end = 0x480700ff,
2145 .flags = ADDR_TYPE_RT
2146 },
2147};
2148
2149/* l4_per -> i2c1 */
2150static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c1 = {
2151 .master = &omap44xx_l4_per_hwmod,
2152 .slave = &omap44xx_i2c1_hwmod,
2153 .clk = "l4_div_ck",
2154 .addr = omap44xx_i2c1_addrs,
2155 .addr_cnt = ARRAY_SIZE(omap44xx_i2c1_addrs),
2156 .user = OCP_USER_MPU | OCP_USER_SDMA,
2157};
2158
2159/* i2c1 slave ports */
2160static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
2161 &omap44xx_l4_per__i2c1,
2162};
2163
2164static struct omap_hwmod omap44xx_i2c1_hwmod = {
2165 .name = "i2c1",
2166 .class = &omap44xx_i2c_hwmod_class,
2167 .flags = HWMOD_INIT_NO_RESET,
2168 .mpu_irqs = omap44xx_i2c1_irqs,
2169 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c1_irqs),
2170 .sdma_reqs = omap44xx_i2c1_sdma_reqs,
2171 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c1_sdma_reqs),
2172 .main_clk = "i2c1_fck",
2173 .prcm = {
2174 .omap4 = {
2175 .clkctrl_reg = OMAP4430_CM_L4PER_I2C1_CLKCTRL,
2176 },
2177 },
2178 .slaves = omap44xx_i2c1_slaves,
2179 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c1_slaves),
2180 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2181};
2182
2183/* i2c2 */
2184static struct omap_hwmod omap44xx_i2c2_hwmod;
2185static struct omap_hwmod_irq_info omap44xx_i2c2_irqs[] = {
2186 { .irq = 57 + OMAP44XX_IRQ_GIC_START },
2187};
2188
2189static struct omap_hwmod_dma_info omap44xx_i2c2_sdma_reqs[] = {
2190 { .name = "tx", .dma_req = 28 + OMAP44XX_DMA_REQ_START },
2191 { .name = "rx", .dma_req = 29 + OMAP44XX_DMA_REQ_START },
2192};
2193
2194static struct omap_hwmod_addr_space omap44xx_i2c2_addrs[] = {
2195 {
2196 .pa_start = 0x48072000,
2197 .pa_end = 0x480720ff,
2198 .flags = ADDR_TYPE_RT
2199 },
2200};
2201
2202/* l4_per -> i2c2 */
2203static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c2 = {
2204 .master = &omap44xx_l4_per_hwmod,
2205 .slave = &omap44xx_i2c2_hwmod,
2206 .clk = "l4_div_ck",
2207 .addr = omap44xx_i2c2_addrs,
2208 .addr_cnt = ARRAY_SIZE(omap44xx_i2c2_addrs),
2209 .user = OCP_USER_MPU | OCP_USER_SDMA,
2210};
2211
2212/* i2c2 slave ports */
2213static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
2214 &omap44xx_l4_per__i2c2,
2215};
2216
2217static struct omap_hwmod omap44xx_i2c2_hwmod = {
2218 .name = "i2c2",
2219 .class = &omap44xx_i2c_hwmod_class,
2220 .flags = HWMOD_INIT_NO_RESET,
2221 .mpu_irqs = omap44xx_i2c2_irqs,
2222 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c2_irqs),
2223 .sdma_reqs = omap44xx_i2c2_sdma_reqs,
2224 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c2_sdma_reqs),
2225 .main_clk = "i2c2_fck",
2226 .prcm = {
2227 .omap4 = {
2228 .clkctrl_reg = OMAP4430_CM_L4PER_I2C2_CLKCTRL,
2229 },
2230 },
2231 .slaves = omap44xx_i2c2_slaves,
2232 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c2_slaves),
2233 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2234};
2235
2236/* i2c3 */
2237static struct omap_hwmod omap44xx_i2c3_hwmod;
2238static struct omap_hwmod_irq_info omap44xx_i2c3_irqs[] = {
2239 { .irq = 61 + OMAP44XX_IRQ_GIC_START },
2240};
2241
2242static struct omap_hwmod_dma_info omap44xx_i2c3_sdma_reqs[] = {
2243 { .name = "tx", .dma_req = 24 + OMAP44XX_DMA_REQ_START },
2244 { .name = "rx", .dma_req = 25 + OMAP44XX_DMA_REQ_START },
2245};
2246
2247static struct omap_hwmod_addr_space omap44xx_i2c3_addrs[] = {
2248 {
2249 .pa_start = 0x48060000,
2250 .pa_end = 0x480600ff,
2251 .flags = ADDR_TYPE_RT
2252 },
2253};
2254
2255/* l4_per -> i2c3 */
2256static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c3 = {
2257 .master = &omap44xx_l4_per_hwmod,
2258 .slave = &omap44xx_i2c3_hwmod,
2259 .clk = "l4_div_ck",
2260 .addr = omap44xx_i2c3_addrs,
2261 .addr_cnt = ARRAY_SIZE(omap44xx_i2c3_addrs),
2262 .user = OCP_USER_MPU | OCP_USER_SDMA,
2263};
2264
2265/* i2c3 slave ports */
2266static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
2267 &omap44xx_l4_per__i2c3,
2268};
2269
2270static struct omap_hwmod omap44xx_i2c3_hwmod = {
2271 .name = "i2c3",
2272 .class = &omap44xx_i2c_hwmod_class,
2273 .flags = HWMOD_INIT_NO_RESET,
2274 .mpu_irqs = omap44xx_i2c3_irqs,
2275 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c3_irqs),
2276 .sdma_reqs = omap44xx_i2c3_sdma_reqs,
2277 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c3_sdma_reqs),
2278 .main_clk = "i2c3_fck",
2279 .prcm = {
2280 .omap4 = {
2281 .clkctrl_reg = OMAP4430_CM_L4PER_I2C3_CLKCTRL,
2282 },
2283 },
2284 .slaves = omap44xx_i2c3_slaves,
2285 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c3_slaves),
2286 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2287};
2288
2289/* i2c4 */
2290static struct omap_hwmod omap44xx_i2c4_hwmod;
2291static struct omap_hwmod_irq_info omap44xx_i2c4_irqs[] = {
2292 { .irq = 62 + OMAP44XX_IRQ_GIC_START },
2293};
2294
2295static struct omap_hwmod_dma_info omap44xx_i2c4_sdma_reqs[] = {
2296 { .name = "tx", .dma_req = 123 + OMAP44XX_DMA_REQ_START },
2297 { .name = "rx", .dma_req = 124 + OMAP44XX_DMA_REQ_START },
2298};
2299
2300static struct omap_hwmod_addr_space omap44xx_i2c4_addrs[] = {
2301 {
2302 .pa_start = 0x48350000,
2303 .pa_end = 0x483500ff,
2304 .flags = ADDR_TYPE_RT
2305 },
2306};
2307
2308/* l4_per -> i2c4 */
2309static struct omap_hwmod_ocp_if omap44xx_l4_per__i2c4 = {
2310 .master = &omap44xx_l4_per_hwmod,
2311 .slave = &omap44xx_i2c4_hwmod,
2312 .clk = "l4_div_ck",
2313 .addr = omap44xx_i2c4_addrs,
2314 .addr_cnt = ARRAY_SIZE(omap44xx_i2c4_addrs),
2315 .user = OCP_USER_MPU | OCP_USER_SDMA,
2316};
2317
2318/* i2c4 slave ports */
2319static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
2320 &omap44xx_l4_per__i2c4,
2321};
2322
2323static struct omap_hwmod omap44xx_i2c4_hwmod = {
2324 .name = "i2c4",
2325 .class = &omap44xx_i2c_hwmod_class,
2326 .flags = HWMOD_INIT_NO_RESET,
2327 .mpu_irqs = omap44xx_i2c4_irqs,
2328 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_i2c4_irqs),
2329 .sdma_reqs = omap44xx_i2c4_sdma_reqs,
2330 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_i2c4_sdma_reqs),
2331 .main_clk = "i2c4_fck",
2332 .prcm = {
2333 .omap4 = {
2334 .clkctrl_reg = OMAP4430_CM_L4PER_I2C4_CLKCTRL,
2335 },
2336 },
2337 .slaves = omap44xx_i2c4_slaves,
2338 .slaves_cnt = ARRAY_SIZE(omap44xx_i2c4_slaves),
2339 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2340};
2341
2342/*
2343 * 'ipu' class
2344 * imaging processor unit
2345 */
2346
2347static struct omap_hwmod_class omap44xx_ipu_hwmod_class = {
2348 .name = "ipu",
2349};
2350
2351/* ipu */
2352static struct omap_hwmod_irq_info omap44xx_ipu_irqs[] = {
2353 { .irq = 100 + OMAP44XX_IRQ_GIC_START },
2354};
2355
2356static struct omap_hwmod_rst_info omap44xx_ipu_c0_resets[] = {
2357 { .name = "cpu0", .rst_shift = 0 },
2358};
2359
2360static struct omap_hwmod_rst_info omap44xx_ipu_c1_resets[] = {
2361 { .name = "cpu1", .rst_shift = 1 },
2362};
2363
2364static struct omap_hwmod_rst_info omap44xx_ipu_resets[] = {
2365 { .name = "mmu_cache", .rst_shift = 2 },
2366};
2367
2368/* ipu master ports */
2369static struct omap_hwmod_ocp_if *omap44xx_ipu_masters[] = {
2370 &omap44xx_ipu__l3_main_2,
2371};
2372
2373/* l3_main_2 -> ipu */
2374static struct omap_hwmod_ocp_if omap44xx_l3_main_2__ipu = {
2375 .master = &omap44xx_l3_main_2_hwmod,
2376 .slave = &omap44xx_ipu_hwmod,
2377 .clk = "l3_div_ck",
2378 .user = OCP_USER_MPU | OCP_USER_SDMA,
2379};
2380
2381/* ipu slave ports */
2382static struct omap_hwmod_ocp_if *omap44xx_ipu_slaves[] = {
2383 &omap44xx_l3_main_2__ipu,
2384};
2385
2386/* Pseudo hwmod for reset control purpose only */
2387static struct omap_hwmod omap44xx_ipu_c0_hwmod = {
2388 .name = "ipu_c0",
2389 .class = &omap44xx_ipu_hwmod_class,
2390 .flags = HWMOD_INIT_NO_RESET,
2391 .rst_lines = omap44xx_ipu_c0_resets,
2392 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c0_resets),
2393 .prcm = {
2394 .omap4 = {
2395 .rstctrl_reg = OMAP4430_RM_DUCATI_RSTCTRL,
2396 },
2397 },
2398 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2399};
2400
2401/* Pseudo hwmod for reset control purpose only */
2402static struct omap_hwmod omap44xx_ipu_c1_hwmod = {
2403 .name = "ipu_c1",
2404 .class = &omap44xx_ipu_hwmod_class,
2405 .flags = HWMOD_INIT_NO_RESET,
2406 .rst_lines = omap44xx_ipu_c1_resets,
2407 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_c1_resets),
2408 .prcm = {
2409 .omap4 = {
2410 .rstctrl_reg = OMAP4430_RM_DUCATI_RSTCTRL,
2411 },
2412 },
2413 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2414};
2415
2416static struct omap_hwmod omap44xx_ipu_hwmod = {
2417 .name = "ipu",
2418 .class = &omap44xx_ipu_hwmod_class,
2419 .mpu_irqs = omap44xx_ipu_irqs,
2420 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_ipu_irqs),
2421 .rst_lines = omap44xx_ipu_resets,
2422 .rst_lines_cnt = ARRAY_SIZE(omap44xx_ipu_resets),
2423 .main_clk = "ipu_fck",
2424 .prcm = {
2425 .omap4 = {
2426 .clkctrl_reg = OMAP4430_CM_DUCATI_DUCATI_CLKCTRL,
2427 .rstctrl_reg = OMAP4430_RM_DUCATI_RSTCTRL,
2428 },
2429 },
2430 .slaves = omap44xx_ipu_slaves,
2431 .slaves_cnt = ARRAY_SIZE(omap44xx_ipu_slaves),
2432 .masters = omap44xx_ipu_masters,
2433 .masters_cnt = ARRAY_SIZE(omap44xx_ipu_masters),
2434 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2435};
2436
2437/*
2438 * 'iss' class
2439 * external images sensor pixel data processor
2440 */
2441
2442static struct omap_hwmod_class_sysconfig omap44xx_iss_sysc = {
2443 .rev_offs = 0x0000,
2444 .sysc_offs = 0x0010,
2445 .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
2446 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2447 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2448 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
2449 MSTANDBY_SMART),
2450 .sysc_fields = &omap_hwmod_sysc_type2,
2451};
2452
2453static struct omap_hwmod_class omap44xx_iss_hwmod_class = {
2454 .name = "iss",
2455 .sysc = &omap44xx_iss_sysc,
2456};
2457
2458/* iss */
2459static struct omap_hwmod_irq_info omap44xx_iss_irqs[] = {
2460 { .irq = 24 + OMAP44XX_IRQ_GIC_START },
2461};
2462
2463static struct omap_hwmod_dma_info omap44xx_iss_sdma_reqs[] = {
2464 { .name = "1", .dma_req = 8 + OMAP44XX_DMA_REQ_START },
2465 { .name = "2", .dma_req = 9 + OMAP44XX_DMA_REQ_START },
2466 { .name = "3", .dma_req = 11 + OMAP44XX_DMA_REQ_START },
2467 { .name = "4", .dma_req = 12 + OMAP44XX_DMA_REQ_START },
2468};
2469
2470/* iss master ports */
2471static struct omap_hwmod_ocp_if *omap44xx_iss_masters[] = {
2472 &omap44xx_iss__l3_main_2,
2473};
2474
2475static struct omap_hwmod_addr_space omap44xx_iss_addrs[] = {
2476 {
2477 .pa_start = 0x52000000,
2478 .pa_end = 0x520000ff,
2479 .flags = ADDR_TYPE_RT
2480 },
2481};
2482
2483/* l3_main_2 -> iss */
2484static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iss = {
2485 .master = &omap44xx_l3_main_2_hwmod,
2486 .slave = &omap44xx_iss_hwmod,
2487 .clk = "l3_div_ck",
2488 .addr = omap44xx_iss_addrs,
2489 .addr_cnt = ARRAY_SIZE(omap44xx_iss_addrs),
2490 .user = OCP_USER_MPU | OCP_USER_SDMA,
2491};
2492
2493/* iss slave ports */
2494static struct omap_hwmod_ocp_if *omap44xx_iss_slaves[] = {
2495 &omap44xx_l3_main_2__iss,
2496};
2497
2498static struct omap_hwmod_opt_clk iss_opt_clks[] = {
2499 { .role = "ctrlclk", .clk = "iss_ctrlclk" },
2500};
2501
2502static struct omap_hwmod omap44xx_iss_hwmod = {
2503 .name = "iss",
2504 .class = &omap44xx_iss_hwmod_class,
2505 .mpu_irqs = omap44xx_iss_irqs,
2506 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_iss_irqs),
2507 .sdma_reqs = omap44xx_iss_sdma_reqs,
2508 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_iss_sdma_reqs),
2509 .main_clk = "iss_fck",
2510 .prcm = {
2511 .omap4 = {
2512 .clkctrl_reg = OMAP4430_CM_CAM_ISS_CLKCTRL,
2513 },
2514 },
2515 .opt_clks = iss_opt_clks,
2516 .opt_clks_cnt = ARRAY_SIZE(iss_opt_clks),
2517 .slaves = omap44xx_iss_slaves,
2518 .slaves_cnt = ARRAY_SIZE(omap44xx_iss_slaves),
2519 .masters = omap44xx_iss_masters,
2520 .masters_cnt = ARRAY_SIZE(omap44xx_iss_masters),
2521 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2522};
2523
2524/*
2525 * 'iva' class
2526 * multi-standard video encoder/decoder hardware accelerator
2527 */
2528
2529static struct omap_hwmod_class omap44xx_iva_hwmod_class = {
2530 .name = "iva",
2531};
2532
2533/* iva */
2534static struct omap_hwmod_irq_info omap44xx_iva_irqs[] = {
2535 { .name = "sync_1", .irq = 103 + OMAP44XX_IRQ_GIC_START },
2536 { .name = "sync_0", .irq = 104 + OMAP44XX_IRQ_GIC_START },
2537 { .name = "mailbox_0", .irq = 107 + OMAP44XX_IRQ_GIC_START },
2538};
2539
2540static struct omap_hwmod_rst_info omap44xx_iva_resets[] = {
2541 { .name = "logic", .rst_shift = 2 },
2542};
2543
2544static struct omap_hwmod_rst_info omap44xx_iva_seq0_resets[] = {
2545 { .name = "seq0", .rst_shift = 0 },
2546};
2547
2548static struct omap_hwmod_rst_info omap44xx_iva_seq1_resets[] = {
2549 { .name = "seq1", .rst_shift = 1 },
2550};
2551
2552/* iva master ports */
2553static struct omap_hwmod_ocp_if *omap44xx_iva_masters[] = {
2554 &omap44xx_iva__l3_main_2,
2555 &omap44xx_iva__l3_instr,
2556};
2557
2558static struct omap_hwmod_addr_space omap44xx_iva_addrs[] = {
2559 {
2560 .pa_start = 0x5a000000,
2561 .pa_end = 0x5a07ffff,
2562 .flags = ADDR_TYPE_RT
2563 },
2564};
2565
2566/* l3_main_2 -> iva */
2567static struct omap_hwmod_ocp_if omap44xx_l3_main_2__iva = {
2568 .master = &omap44xx_l3_main_2_hwmod,
2569 .slave = &omap44xx_iva_hwmod,
2570 .clk = "l3_div_ck",
2571 .addr = omap44xx_iva_addrs,
2572 .addr_cnt = ARRAY_SIZE(omap44xx_iva_addrs),
2573 .user = OCP_USER_MPU,
2574};
2575
2576/* iva slave ports */
2577static struct omap_hwmod_ocp_if *omap44xx_iva_slaves[] = {
2578 &omap44xx_dsp__iva,
2579 &omap44xx_l3_main_2__iva,
2580};
2581
2582/* Pseudo hwmod for reset control purpose only */
2583static struct omap_hwmod omap44xx_iva_seq0_hwmod = {
2584 .name = "iva_seq0",
2585 .class = &omap44xx_iva_hwmod_class,
2586 .flags = HWMOD_INIT_NO_RESET,
2587 .rst_lines = omap44xx_iva_seq0_resets,
2588 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq0_resets),
2589 .prcm = {
2590 .omap4 = {
2591 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2592 },
2593 },
2594 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2595};
2596
2597/* Pseudo hwmod for reset control purpose only */
2598static struct omap_hwmod omap44xx_iva_seq1_hwmod = {
2599 .name = "iva_seq1",
2600 .class = &omap44xx_iva_hwmod_class,
2601 .flags = HWMOD_INIT_NO_RESET,
2602 .rst_lines = omap44xx_iva_seq1_resets,
2603 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_seq1_resets),
2604 .prcm = {
2605 .omap4 = {
2606 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2607 },
2608 },
2609 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2610};
2611
2612static struct omap_hwmod omap44xx_iva_hwmod = {
2613 .name = "iva",
2614 .class = &omap44xx_iva_hwmod_class,
2615 .mpu_irqs = omap44xx_iva_irqs,
2616 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_iva_irqs),
2617 .rst_lines = omap44xx_iva_resets,
2618 .rst_lines_cnt = ARRAY_SIZE(omap44xx_iva_resets),
2619 .main_clk = "iva_fck",
2620 .prcm = {
2621 .omap4 = {
2622 .clkctrl_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
2623 .rstctrl_reg = OMAP4430_RM_IVAHD_RSTCTRL,
2624 },
2625 },
2626 .slaves = omap44xx_iva_slaves,
2627 .slaves_cnt = ARRAY_SIZE(omap44xx_iva_slaves),
2628 .masters = omap44xx_iva_masters,
2629 .masters_cnt = ARRAY_SIZE(omap44xx_iva_masters),
2630 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2631};
2632
2633/*
2634 * 'kbd' class
2635 * keyboard controller
2636 */
2637
2638static struct omap_hwmod_class_sysconfig omap44xx_kbd_sysc = {
2639 .rev_offs = 0x0000,
2640 .sysc_offs = 0x0010,
2641 .syss_offs = 0x0014,
2642 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
2643 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
2644 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
2645 SYSS_HAS_RESET_STATUS),
2646 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2647 .sysc_fields = &omap_hwmod_sysc_type1,
2648};
2649
2650static struct omap_hwmod_class omap44xx_kbd_hwmod_class = {
2651 .name = "kbd",
2652 .sysc = &omap44xx_kbd_sysc,
2653};
2654
2655/* kbd */
2656static struct omap_hwmod omap44xx_kbd_hwmod;
2657static struct omap_hwmod_irq_info omap44xx_kbd_irqs[] = {
2658 { .irq = 120 + OMAP44XX_IRQ_GIC_START },
2659};
2660
2661static struct omap_hwmod_addr_space omap44xx_kbd_addrs[] = {
2662 {
2663 .pa_start = 0x4a31c000,
2664 .pa_end = 0x4a31c07f,
2665 .flags = ADDR_TYPE_RT
2666 },
2667};
2668
2669/* l4_wkup -> kbd */
2670static struct omap_hwmod_ocp_if omap44xx_l4_wkup__kbd = {
2671 .master = &omap44xx_l4_wkup_hwmod,
2672 .slave = &omap44xx_kbd_hwmod,
2673 .clk = "l4_wkup_clk_mux_ck",
2674 .addr = omap44xx_kbd_addrs,
2675 .addr_cnt = ARRAY_SIZE(omap44xx_kbd_addrs),
2676 .user = OCP_USER_MPU | OCP_USER_SDMA,
2677};
2678
2679/* kbd slave ports */
2680static struct omap_hwmod_ocp_if *omap44xx_kbd_slaves[] = {
2681 &omap44xx_l4_wkup__kbd,
2682};
2683
2684static struct omap_hwmod omap44xx_kbd_hwmod = {
2685 .name = "kbd",
2686 .class = &omap44xx_kbd_hwmod_class,
2687 .mpu_irqs = omap44xx_kbd_irqs,
2688 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_kbd_irqs),
2689 .main_clk = "kbd_fck",
2690 .prcm = {
2691 .omap4 = {
2692 .clkctrl_reg = OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL,
2693 },
2694 },
2695 .slaves = omap44xx_kbd_slaves,
2696 .slaves_cnt = ARRAY_SIZE(omap44xx_kbd_slaves),
2697 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2698};
2699
2700/*
2701 * 'mailbox' class
2702 * mailbox module allowing communication between the on-chip processors using a
2703 * queued mailbox-interrupt mechanism.
2704 */
2705
2706static struct omap_hwmod_class_sysconfig omap44xx_mailbox_sysc = {
2707 .rev_offs = 0x0000,
2708 .sysc_offs = 0x0010,
2709 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
2710 SYSC_HAS_SOFTRESET),
2711 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2712 .sysc_fields = &omap_hwmod_sysc_type2,
2713};
2714
2715static struct omap_hwmod_class omap44xx_mailbox_hwmod_class = {
2716 .name = "mailbox",
2717 .sysc = &omap44xx_mailbox_sysc,
2718};
2719
2720/* mailbox */
2721static struct omap_hwmod omap44xx_mailbox_hwmod;
2722static struct omap_hwmod_irq_info omap44xx_mailbox_irqs[] = {
2723 { .irq = 26 + OMAP44XX_IRQ_GIC_START },
2724};
2725
2726static struct omap_hwmod_addr_space omap44xx_mailbox_addrs[] = {
2727 {
2728 .pa_start = 0x4a0f4000,
2729 .pa_end = 0x4a0f41ff,
2730 .flags = ADDR_TYPE_RT
2731 },
2732};
2733
2734/* l4_cfg -> mailbox */
2735static struct omap_hwmod_ocp_if omap44xx_l4_cfg__mailbox = {
2736 .master = &omap44xx_l4_cfg_hwmod,
2737 .slave = &omap44xx_mailbox_hwmod,
2738 .clk = "l4_div_ck",
2739 .addr = omap44xx_mailbox_addrs,
2740 .addr_cnt = ARRAY_SIZE(omap44xx_mailbox_addrs),
2741 .user = OCP_USER_MPU | OCP_USER_SDMA,
2742};
2743
2744/* mailbox slave ports */
2745static struct omap_hwmod_ocp_if *omap44xx_mailbox_slaves[] = {
2746 &omap44xx_l4_cfg__mailbox,
2747};
2748
2749static struct omap_hwmod omap44xx_mailbox_hwmod = {
2750 .name = "mailbox",
2751 .class = &omap44xx_mailbox_hwmod_class,
2752 .mpu_irqs = omap44xx_mailbox_irqs,
2753 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mailbox_irqs),
2754 .prcm = {
2755 .omap4 = {
2756 .clkctrl_reg = OMAP4430_CM_L4CFG_MAILBOX_CLKCTRL,
2757 },
2758 },
2759 .slaves = omap44xx_mailbox_slaves,
2760 .slaves_cnt = ARRAY_SIZE(omap44xx_mailbox_slaves),
2761 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2762};
2763
2764/*
2765 * 'mcbsp' class
2766 * multi channel buffered serial port controller
2767 */
2768
2769static struct omap_hwmod_class_sysconfig omap44xx_mcbsp_sysc = {
2770 .sysc_offs = 0x008c,
2771 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
2772 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
2773 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2774 .sysc_fields = &omap_hwmod_sysc_type1,
2775};
2776
2777static struct omap_hwmod_class omap44xx_mcbsp_hwmod_class = {
2778 .name = "mcbsp",
2779 .sysc = &omap44xx_mcbsp_sysc,
2780 .rev = MCBSP_CONFIG_TYPE4,
2781};
2782
2783/* mcbsp1 */
2784static struct omap_hwmod omap44xx_mcbsp1_hwmod;
2785static struct omap_hwmod_irq_info omap44xx_mcbsp1_irqs[] = {
2786 { .irq = 17 + OMAP44XX_IRQ_GIC_START },
2787};
2788
2789static struct omap_hwmod_dma_info omap44xx_mcbsp1_sdma_reqs[] = {
2790 { .name = "tx", .dma_req = 32 + OMAP44XX_DMA_REQ_START },
2791 { .name = "rx", .dma_req = 33 + OMAP44XX_DMA_REQ_START },
2792};
2793
2794static struct omap_hwmod_addr_space omap44xx_mcbsp1_addrs[] = {
2795 {
2796 .name = "mpu",
2797 .pa_start = 0x40122000,
2798 .pa_end = 0x401220ff,
2799 .flags = ADDR_TYPE_RT
2800 },
2801};
2802
2803/* l4_abe -> mcbsp1 */
2804static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
2805 .master = &omap44xx_l4_abe_hwmod,
2806 .slave = &omap44xx_mcbsp1_hwmod,
2807 .clk = "ocp_abe_iclk",
2808 .addr = omap44xx_mcbsp1_addrs,
2809 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp1_addrs),
2810 .user = OCP_USER_MPU,
2811};
2812
2813static struct omap_hwmod_addr_space omap44xx_mcbsp1_dma_addrs[] = {
2814 {
2815 .name = "dma",
2816 .pa_start = 0x49022000,
2817 .pa_end = 0x490220ff,
2818 .flags = ADDR_TYPE_RT
2819 },
2820};
2821
2822/* l4_abe -> mcbsp1 (dma) */
2823static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1_dma = {
2824 .master = &omap44xx_l4_abe_hwmod,
2825 .slave = &omap44xx_mcbsp1_hwmod,
2826 .clk = "ocp_abe_iclk",
2827 .addr = omap44xx_mcbsp1_dma_addrs,
2828 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp1_dma_addrs),
2829 .user = OCP_USER_SDMA,
2830};
2831
2832/* mcbsp1 slave ports */
2833static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
2834 &omap44xx_l4_abe__mcbsp1,
2835 &omap44xx_l4_abe__mcbsp1_dma,
2836};
2837
2838static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
2839 .name = "mcbsp1",
2840 .class = &omap44xx_mcbsp_hwmod_class,
2841 .mpu_irqs = omap44xx_mcbsp1_irqs,
2842 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp1_irqs),
2843 .sdma_reqs = omap44xx_mcbsp1_sdma_reqs,
2844 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp1_sdma_reqs),
2845 .main_clk = "mcbsp1_fck",
2846 .prcm = {
2847 .omap4 = {
2848 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
2849 },
2850 },
2851 .slaves = omap44xx_mcbsp1_slaves,
2852 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
2853 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2854};
2855
2856/* mcbsp2 */
2857static struct omap_hwmod omap44xx_mcbsp2_hwmod;
2858static struct omap_hwmod_irq_info omap44xx_mcbsp2_irqs[] = {
2859 { .irq = 22 + OMAP44XX_IRQ_GIC_START },
2860};
2861
2862static struct omap_hwmod_dma_info omap44xx_mcbsp2_sdma_reqs[] = {
2863 { .name = "tx", .dma_req = 16 + OMAP44XX_DMA_REQ_START },
2864 { .name = "rx", .dma_req = 17 + OMAP44XX_DMA_REQ_START },
2865};
2866
2867static struct omap_hwmod_addr_space omap44xx_mcbsp2_addrs[] = {
2868 {
2869 .name = "mpu",
2870 .pa_start = 0x40124000,
2871 .pa_end = 0x401240ff,
2872 .flags = ADDR_TYPE_RT
2873 },
2874};
2875
2876/* l4_abe -> mcbsp2 */
2877static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
2878 .master = &omap44xx_l4_abe_hwmod,
2879 .slave = &omap44xx_mcbsp2_hwmod,
2880 .clk = "ocp_abe_iclk",
2881 .addr = omap44xx_mcbsp2_addrs,
2882 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp2_addrs),
2883 .user = OCP_USER_MPU,
2884};
2885
2886static struct omap_hwmod_addr_space omap44xx_mcbsp2_dma_addrs[] = {
2887 {
2888 .name = "dma",
2889 .pa_start = 0x49024000,
2890 .pa_end = 0x490240ff,
2891 .flags = ADDR_TYPE_RT
2892 },
2893};
2894
2895/* l4_abe -> mcbsp2 (dma) */
2896static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2_dma = {
2897 .master = &omap44xx_l4_abe_hwmod,
2898 .slave = &omap44xx_mcbsp2_hwmod,
2899 .clk = "ocp_abe_iclk",
2900 .addr = omap44xx_mcbsp2_dma_addrs,
2901 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp2_dma_addrs),
2902 .user = OCP_USER_SDMA,
2903};
2904
2905/* mcbsp2 slave ports */
2906static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
2907 &omap44xx_l4_abe__mcbsp2,
2908 &omap44xx_l4_abe__mcbsp2_dma,
2909};
2910
2911static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
2912 .name = "mcbsp2",
2913 .class = &omap44xx_mcbsp_hwmod_class,
2914 .mpu_irqs = omap44xx_mcbsp2_irqs,
2915 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp2_irqs),
2916 .sdma_reqs = omap44xx_mcbsp2_sdma_reqs,
2917 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp2_sdma_reqs),
2918 .main_clk = "mcbsp2_fck",
2919 .prcm = {
2920 .omap4 = {
2921 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
2922 },
2923 },
2924 .slaves = omap44xx_mcbsp2_slaves,
2925 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
2926 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2927};
2928
2929/* mcbsp3 */
2930static struct omap_hwmod omap44xx_mcbsp3_hwmod;
2931static struct omap_hwmod_irq_info omap44xx_mcbsp3_irqs[] = {
2932 { .irq = 23 + OMAP44XX_IRQ_GIC_START },
2933};
2934
2935static struct omap_hwmod_dma_info omap44xx_mcbsp3_sdma_reqs[] = {
2936 { .name = "tx", .dma_req = 18 + OMAP44XX_DMA_REQ_START },
2937 { .name = "rx", .dma_req = 19 + OMAP44XX_DMA_REQ_START },
2938};
2939
2940static struct omap_hwmod_addr_space omap44xx_mcbsp3_addrs[] = {
2941 {
2942 .name = "mpu",
2943 .pa_start = 0x40126000,
2944 .pa_end = 0x401260ff,
2945 .flags = ADDR_TYPE_RT
2946 },
2947};
2948
2949/* l4_abe -> mcbsp3 */
2950static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
2951 .master = &omap44xx_l4_abe_hwmod,
2952 .slave = &omap44xx_mcbsp3_hwmod,
2953 .clk = "ocp_abe_iclk",
2954 .addr = omap44xx_mcbsp3_addrs,
2955 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp3_addrs),
2956 .user = OCP_USER_MPU,
2957};
2958
2959static struct omap_hwmod_addr_space omap44xx_mcbsp3_dma_addrs[] = {
2960 {
2961 .name = "dma",
2962 .pa_start = 0x49026000,
2963 .pa_end = 0x490260ff,
2964 .flags = ADDR_TYPE_RT
2965 },
2966};
2967
2968/* l4_abe -> mcbsp3 (dma) */
2969static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3_dma = {
2970 .master = &omap44xx_l4_abe_hwmod,
2971 .slave = &omap44xx_mcbsp3_hwmod,
2972 .clk = "ocp_abe_iclk",
2973 .addr = omap44xx_mcbsp3_dma_addrs,
2974 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp3_dma_addrs),
2975 .user = OCP_USER_SDMA,
2976};
2977
2978/* mcbsp3 slave ports */
2979static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
2980 &omap44xx_l4_abe__mcbsp3,
2981 &omap44xx_l4_abe__mcbsp3_dma,
2982};
2983
2984static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
2985 .name = "mcbsp3",
2986 .class = &omap44xx_mcbsp_hwmod_class,
2987 .mpu_irqs = omap44xx_mcbsp3_irqs,
2988 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp3_irqs),
2989 .sdma_reqs = omap44xx_mcbsp3_sdma_reqs,
2990 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp3_sdma_reqs),
2991 .main_clk = "mcbsp3_fck",
2992 .prcm = {
2993 .omap4 = {
2994 .clkctrl_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
2995 },
2996 },
2997 .slaves = omap44xx_mcbsp3_slaves,
2998 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
2999 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3000};
3001
3002/* mcbsp4 */
3003static struct omap_hwmod omap44xx_mcbsp4_hwmod;
3004static struct omap_hwmod_irq_info omap44xx_mcbsp4_irqs[] = {
3005 { .irq = 16 + OMAP44XX_IRQ_GIC_START },
3006};
3007
3008static struct omap_hwmod_dma_info omap44xx_mcbsp4_sdma_reqs[] = {
3009 { .name = "tx", .dma_req = 30 + OMAP44XX_DMA_REQ_START },
3010 { .name = "rx", .dma_req = 31 + OMAP44XX_DMA_REQ_START },
3011};
3012
3013static struct omap_hwmod_addr_space omap44xx_mcbsp4_addrs[] = {
3014 {
3015 .pa_start = 0x48096000,
3016 .pa_end = 0x480960ff,
3017 .flags = ADDR_TYPE_RT
3018 },
3019};
3020
3021/* l4_per -> mcbsp4 */
3022static struct omap_hwmod_ocp_if omap44xx_l4_per__mcbsp4 = {
3023 .master = &omap44xx_l4_per_hwmod,
3024 .slave = &omap44xx_mcbsp4_hwmod,
3025 .clk = "l4_div_ck",
3026 .addr = omap44xx_mcbsp4_addrs,
3027 .addr_cnt = ARRAY_SIZE(omap44xx_mcbsp4_addrs),
3028 .user = OCP_USER_MPU | OCP_USER_SDMA,
3029};
3030
3031/* mcbsp4 slave ports */
3032static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
3033 &omap44xx_l4_per__mcbsp4,
3034};
3035
3036static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
3037 .name = "mcbsp4",
3038 .class = &omap44xx_mcbsp_hwmod_class,
3039 .mpu_irqs = omap44xx_mcbsp4_irqs,
3040 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcbsp4_irqs),
3041 .sdma_reqs = omap44xx_mcbsp4_sdma_reqs,
3042 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcbsp4_sdma_reqs),
3043 .main_clk = "mcbsp4_fck",
3044 .prcm = {
3045 .omap4 = {
3046 .clkctrl_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
3047 },
3048 },
3049 .slaves = omap44xx_mcbsp4_slaves,
3050 .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
3051 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3052};
3053
3054/*
3055 * 'mcpdm' class
3056 * multi channel pdm controller (proprietary interface with phoenix power
3057 * ic)
3058 */
3059
3060static struct omap_hwmod_class_sysconfig omap44xx_mcpdm_sysc = {
3061 .rev_offs = 0x0000,
3062 .sysc_offs = 0x0010,
3063 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3064 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3065 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3066 SIDLE_SMART_WKUP),
3067 .sysc_fields = &omap_hwmod_sysc_type2,
3068};
3069
3070static struct omap_hwmod_class omap44xx_mcpdm_hwmod_class = {
3071 .name = "mcpdm",
3072 .sysc = &omap44xx_mcpdm_sysc,
3073};
3074
3075/* mcpdm */
3076static struct omap_hwmod omap44xx_mcpdm_hwmod;
3077static struct omap_hwmod_irq_info omap44xx_mcpdm_irqs[] = {
3078 { .irq = 112 + OMAP44XX_IRQ_GIC_START },
3079};
3080
3081static struct omap_hwmod_dma_info omap44xx_mcpdm_sdma_reqs[] = {
3082 { .name = "up_link", .dma_req = 64 + OMAP44XX_DMA_REQ_START },
3083 { .name = "dn_link", .dma_req = 65 + OMAP44XX_DMA_REQ_START },
3084};
3085
3086static struct omap_hwmod_addr_space omap44xx_mcpdm_addrs[] = {
3087 {
3088 .pa_start = 0x40132000,
3089 .pa_end = 0x4013207f,
3090 .flags = ADDR_TYPE_RT
3091 },
3092};
3093
3094/* l4_abe -> mcpdm */
3095static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
3096 .master = &omap44xx_l4_abe_hwmod,
3097 .slave = &omap44xx_mcpdm_hwmod,
3098 .clk = "ocp_abe_iclk",
3099 .addr = omap44xx_mcpdm_addrs,
3100 .addr_cnt = ARRAY_SIZE(omap44xx_mcpdm_addrs),
3101 .user = OCP_USER_MPU,
3102};
3103
3104static struct omap_hwmod_addr_space omap44xx_mcpdm_dma_addrs[] = {
3105 {
3106 .pa_start = 0x49032000,
3107 .pa_end = 0x4903207f,
3108 .flags = ADDR_TYPE_RT
3109 },
3110};
3111
3112/* l4_abe -> mcpdm (dma) */
3113static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm_dma = {
3114 .master = &omap44xx_l4_abe_hwmod,
3115 .slave = &omap44xx_mcpdm_hwmod,
3116 .clk = "ocp_abe_iclk",
3117 .addr = omap44xx_mcpdm_dma_addrs,
3118 .addr_cnt = ARRAY_SIZE(omap44xx_mcpdm_dma_addrs),
3119 .user = OCP_USER_SDMA,
3120};
3121
3122/* mcpdm slave ports */
3123static struct omap_hwmod_ocp_if *omap44xx_mcpdm_slaves[] = {
3124 &omap44xx_l4_abe__mcpdm,
3125 &omap44xx_l4_abe__mcpdm_dma,
3126};
3127
3128static struct omap_hwmod omap44xx_mcpdm_hwmod = {
3129 .name = "mcpdm",
3130 .class = &omap44xx_mcpdm_hwmod_class,
3131 .mpu_irqs = omap44xx_mcpdm_irqs,
3132 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcpdm_irqs),
3133 .sdma_reqs = omap44xx_mcpdm_sdma_reqs,
3134 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcpdm_sdma_reqs),
3135 .main_clk = "mcpdm_fck",
3136 .prcm = {
3137 .omap4 = {
3138 .clkctrl_reg = OMAP4430_CM1_ABE_PDM_CLKCTRL,
3139 },
3140 },
3141 .slaves = omap44xx_mcpdm_slaves,
3142 .slaves_cnt = ARRAY_SIZE(omap44xx_mcpdm_slaves),
3143 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3144};
3145
3146/*
3147 * 'mcspi' class
3148 * multichannel serial port interface (mcspi) / master/slave synchronous serial
3149 * bus
3150 */
3151
3152static struct omap_hwmod_class_sysconfig omap44xx_mcspi_sysc = {
3153 .rev_offs = 0x0000,
3154 .sysc_offs = 0x0010,
3155 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
3156 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
3157 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3158 SIDLE_SMART_WKUP),
3159 .sysc_fields = &omap_hwmod_sysc_type2,
3160};
3161
3162static struct omap_hwmod_class omap44xx_mcspi_hwmod_class = {
3163 .name = "mcspi",
3164 .sysc = &omap44xx_mcspi_sysc,
3165 .rev = OMAP4_MCSPI_REV,
3166};
3167
3168/* mcspi1 */
3169static struct omap_hwmod omap44xx_mcspi1_hwmod;
3170static struct omap_hwmod_irq_info omap44xx_mcspi1_irqs[] = {
3171 { .irq = 65 + OMAP44XX_IRQ_GIC_START },
3172};
3173
3174static struct omap_hwmod_dma_info omap44xx_mcspi1_sdma_reqs[] = {
3175 { .name = "tx0", .dma_req = 34 + OMAP44XX_DMA_REQ_START },
3176 { .name = "rx0", .dma_req = 35 + OMAP44XX_DMA_REQ_START },
3177 { .name = "tx1", .dma_req = 36 + OMAP44XX_DMA_REQ_START },
3178 { .name = "rx1", .dma_req = 37 + OMAP44XX_DMA_REQ_START },
3179 { .name = "tx2", .dma_req = 38 + OMAP44XX_DMA_REQ_START },
3180 { .name = "rx2", .dma_req = 39 + OMAP44XX_DMA_REQ_START },
3181 { .name = "tx3", .dma_req = 40 + OMAP44XX_DMA_REQ_START },
3182 { .name = "rx3", .dma_req = 41 + OMAP44XX_DMA_REQ_START },
3183};
3184
3185static struct omap_hwmod_addr_space omap44xx_mcspi1_addrs[] = {
3186 {
3187 .pa_start = 0x48098000,
3188 .pa_end = 0x480981ff,
3189 .flags = ADDR_TYPE_RT
3190 },
3191};
3192
3193/* l4_per -> mcspi1 */
3194static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi1 = {
3195 .master = &omap44xx_l4_per_hwmod,
3196 .slave = &omap44xx_mcspi1_hwmod,
3197 .clk = "l4_div_ck",
3198 .addr = omap44xx_mcspi1_addrs,
3199 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi1_addrs),
3200 .user = OCP_USER_MPU | OCP_USER_SDMA,
3201};
3202
3203/* mcspi1 slave ports */
3204static struct omap_hwmod_ocp_if *omap44xx_mcspi1_slaves[] = {
3205 &omap44xx_l4_per__mcspi1,
3206};
3207
3208/* mcspi1 dev_attr */
3209static struct omap2_mcspi_dev_attr mcspi1_dev_attr = {
3210 .num_chipselect = 4,
3211};
3212
3213static struct omap_hwmod omap44xx_mcspi1_hwmod = {
3214 .name = "mcspi1",
3215 .class = &omap44xx_mcspi_hwmod_class,
3216 .mpu_irqs = omap44xx_mcspi1_irqs,
3217 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi1_irqs),
3218 .sdma_reqs = omap44xx_mcspi1_sdma_reqs,
3219 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi1_sdma_reqs),
3220 .main_clk = "mcspi1_fck",
3221 .prcm = {
3222 .omap4 = {
3223 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI1_CLKCTRL,
3224 },
3225 },
3226 .dev_attr = &mcspi1_dev_attr,
3227 .slaves = omap44xx_mcspi1_slaves,
3228 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi1_slaves),
3229 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3230};
3231
3232/* mcspi2 */
3233static struct omap_hwmod omap44xx_mcspi2_hwmod;
3234static struct omap_hwmod_irq_info omap44xx_mcspi2_irqs[] = {
3235 { .irq = 66 + OMAP44XX_IRQ_GIC_START },
3236};
3237
3238static struct omap_hwmod_dma_info omap44xx_mcspi2_sdma_reqs[] = {
3239 { .name = "tx0", .dma_req = 42 + OMAP44XX_DMA_REQ_START },
3240 { .name = "rx0", .dma_req = 43 + OMAP44XX_DMA_REQ_START },
3241 { .name = "tx1", .dma_req = 44 + OMAP44XX_DMA_REQ_START },
3242 { .name = "rx1", .dma_req = 45 + OMAP44XX_DMA_REQ_START },
3243};
3244
3245static struct omap_hwmod_addr_space omap44xx_mcspi2_addrs[] = {
3246 {
3247 .pa_start = 0x4809a000,
3248 .pa_end = 0x4809a1ff,
3249 .flags = ADDR_TYPE_RT
3250 },
3251};
3252
3253/* l4_per -> mcspi2 */
3254static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi2 = {
3255 .master = &omap44xx_l4_per_hwmod,
3256 .slave = &omap44xx_mcspi2_hwmod,
3257 .clk = "l4_div_ck",
3258 .addr = omap44xx_mcspi2_addrs,
3259 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi2_addrs),
3260 .user = OCP_USER_MPU | OCP_USER_SDMA,
3261};
3262
3263/* mcspi2 slave ports */
3264static struct omap_hwmod_ocp_if *omap44xx_mcspi2_slaves[] = {
3265 &omap44xx_l4_per__mcspi2,
3266};
3267
3268/* mcspi2 dev_attr */
3269static struct omap2_mcspi_dev_attr mcspi2_dev_attr = {
3270 .num_chipselect = 2,
3271};
3272
3273static struct omap_hwmod omap44xx_mcspi2_hwmod = {
3274 .name = "mcspi2",
3275 .class = &omap44xx_mcspi_hwmod_class,
3276 .mpu_irqs = omap44xx_mcspi2_irqs,
3277 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi2_irqs),
3278 .sdma_reqs = omap44xx_mcspi2_sdma_reqs,
3279 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi2_sdma_reqs),
3280 .main_clk = "mcspi2_fck",
3281 .prcm = {
3282 .omap4 = {
3283 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI2_CLKCTRL,
3284 },
3285 },
3286 .dev_attr = &mcspi2_dev_attr,
3287 .slaves = omap44xx_mcspi2_slaves,
3288 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi2_slaves),
3289 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3290};
3291
3292/* mcspi3 */
3293static struct omap_hwmod omap44xx_mcspi3_hwmod;
3294static struct omap_hwmod_irq_info omap44xx_mcspi3_irqs[] = {
3295 { .irq = 91 + OMAP44XX_IRQ_GIC_START },
3296};
3297
3298static struct omap_hwmod_dma_info omap44xx_mcspi3_sdma_reqs[] = {
3299 { .name = "tx0", .dma_req = 14 + OMAP44XX_DMA_REQ_START },
3300 { .name = "rx0", .dma_req = 15 + OMAP44XX_DMA_REQ_START },
3301 { .name = "tx1", .dma_req = 22 + OMAP44XX_DMA_REQ_START },
3302 { .name = "rx1", .dma_req = 23 + OMAP44XX_DMA_REQ_START },
3303};
3304
3305static struct omap_hwmod_addr_space omap44xx_mcspi3_addrs[] = {
3306 {
3307 .pa_start = 0x480b8000,
3308 .pa_end = 0x480b81ff,
3309 .flags = ADDR_TYPE_RT
3310 },
3311};
3312
3313/* l4_per -> mcspi3 */
3314static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi3 = {
3315 .master = &omap44xx_l4_per_hwmod,
3316 .slave = &omap44xx_mcspi3_hwmod,
3317 .clk = "l4_div_ck",
3318 .addr = omap44xx_mcspi3_addrs,
3319 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi3_addrs),
3320 .user = OCP_USER_MPU | OCP_USER_SDMA,
3321};
3322
3323/* mcspi3 slave ports */
3324static struct omap_hwmod_ocp_if *omap44xx_mcspi3_slaves[] = {
3325 &omap44xx_l4_per__mcspi3,
3326};
3327
3328/* mcspi3 dev_attr */
3329static struct omap2_mcspi_dev_attr mcspi3_dev_attr = {
3330 .num_chipselect = 2,
3331};
3332
3333static struct omap_hwmod omap44xx_mcspi3_hwmod = {
3334 .name = "mcspi3",
3335 .class = &omap44xx_mcspi_hwmod_class,
3336 .mpu_irqs = omap44xx_mcspi3_irqs,
3337 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi3_irqs),
3338 .sdma_reqs = omap44xx_mcspi3_sdma_reqs,
3339 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi3_sdma_reqs),
3340 .main_clk = "mcspi3_fck",
3341 .prcm = {
3342 .omap4 = {
3343 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI3_CLKCTRL,
3344 },
3345 },
3346 .dev_attr = &mcspi3_dev_attr,
3347 .slaves = omap44xx_mcspi3_slaves,
3348 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi3_slaves),
3349 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3350};
3351
3352/* mcspi4 */
3353static struct omap_hwmod omap44xx_mcspi4_hwmod;
3354static struct omap_hwmod_irq_info omap44xx_mcspi4_irqs[] = {
3355 { .irq = 48 + OMAP44XX_IRQ_GIC_START },
3356};
3357
3358static struct omap_hwmod_dma_info omap44xx_mcspi4_sdma_reqs[] = {
3359 { .name = "tx0", .dma_req = 69 + OMAP44XX_DMA_REQ_START },
3360 { .name = "rx0", .dma_req = 70 + OMAP44XX_DMA_REQ_START },
3361};
3362
3363static struct omap_hwmod_addr_space omap44xx_mcspi4_addrs[] = {
3364 {
3365 .pa_start = 0x480ba000,
3366 .pa_end = 0x480ba1ff,
3367 .flags = ADDR_TYPE_RT
3368 },
3369};
3370
3371/* l4_per -> mcspi4 */
3372static struct omap_hwmod_ocp_if omap44xx_l4_per__mcspi4 = {
3373 .master = &omap44xx_l4_per_hwmod,
3374 .slave = &omap44xx_mcspi4_hwmod,
3375 .clk = "l4_div_ck",
3376 .addr = omap44xx_mcspi4_addrs,
3377 .addr_cnt = ARRAY_SIZE(omap44xx_mcspi4_addrs),
3378 .user = OCP_USER_MPU | OCP_USER_SDMA,
3379};
3380
3381/* mcspi4 slave ports */
3382static struct omap_hwmod_ocp_if *omap44xx_mcspi4_slaves[] = {
3383 &omap44xx_l4_per__mcspi4,
3384};
3385
3386/* mcspi4 dev_attr */
3387static struct omap2_mcspi_dev_attr mcspi4_dev_attr = {
3388 .num_chipselect = 1,
3389};
3390
3391static struct omap_hwmod omap44xx_mcspi4_hwmod = {
3392 .name = "mcspi4",
3393 .class = &omap44xx_mcspi_hwmod_class,
3394 .mpu_irqs = omap44xx_mcspi4_irqs,
3395 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mcspi4_irqs),
3396 .sdma_reqs = omap44xx_mcspi4_sdma_reqs,
3397 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mcspi4_sdma_reqs),
3398 .main_clk = "mcspi4_fck",
3399 .prcm = {
3400 .omap4 = {
3401 .clkctrl_reg = OMAP4430_CM_L4PER_MCSPI4_CLKCTRL,
3402 },
3403 },
3404 .dev_attr = &mcspi4_dev_attr,
3405 .slaves = omap44xx_mcspi4_slaves,
3406 .slaves_cnt = ARRAY_SIZE(omap44xx_mcspi4_slaves),
3407 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3408};
3409
3410/*
3411 * 'mmc' class
3412 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
3413 */
3414
3415static struct omap_hwmod_class_sysconfig omap44xx_mmc_sysc = {
3416 .rev_offs = 0x0000,
3417 .sysc_offs = 0x0010,
3418 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
3419 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
3420 SYSC_HAS_SOFTRESET),
3421 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3422 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
3423 MSTANDBY_SMART),
3424 .sysc_fields = &omap_hwmod_sysc_type2,
3425};
3426
3427static struct omap_hwmod_class omap44xx_mmc_hwmod_class = {
3428 .name = "mmc",
3429 .sysc = &omap44xx_mmc_sysc,
3430};
3431
3432/* mmc1 */
3433
3434static struct omap_hwmod_irq_info omap44xx_mmc1_irqs[] = {
3435 { .irq = 83 + OMAP44XX_IRQ_GIC_START },
3436};
3437
3438static struct omap_hwmod_dma_info omap44xx_mmc1_sdma_reqs[] = {
3439 { .name = "tx", .dma_req = 60 + OMAP44XX_DMA_REQ_START },
3440 { .name = "rx", .dma_req = 61 + OMAP44XX_DMA_REQ_START },
3441};
3442
3443/* mmc1 master ports */
3444static struct omap_hwmod_ocp_if *omap44xx_mmc1_masters[] = {
3445 &omap44xx_mmc1__l3_main_1,
3446};
3447
3448static struct omap_hwmod_addr_space omap44xx_mmc1_addrs[] = {
3449 {
3450 .pa_start = 0x4809c000,
3451 .pa_end = 0x4809c3ff,
3452 .flags = ADDR_TYPE_RT
3453 },
3454};
3455
3456/* l4_per -> mmc1 */
3457static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc1 = {
3458 .master = &omap44xx_l4_per_hwmod,
3459 .slave = &omap44xx_mmc1_hwmod,
3460 .clk = "l4_div_ck",
3461 .addr = omap44xx_mmc1_addrs,
3462 .addr_cnt = ARRAY_SIZE(omap44xx_mmc1_addrs),
3463 .user = OCP_USER_MPU | OCP_USER_SDMA,
3464};
3465
3466/* mmc1 slave ports */
3467static struct omap_hwmod_ocp_if *omap44xx_mmc1_slaves[] = {
3468 &omap44xx_l4_per__mmc1,
3469};
3470
3471/* mmc1 dev_attr */
3472static struct omap_mmc_dev_attr mmc1_dev_attr = {
3473 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
3474};
3475
3476static struct omap_hwmod omap44xx_mmc1_hwmod = {
3477 .name = "mmc1",
3478 .class = &omap44xx_mmc_hwmod_class,
3479 .mpu_irqs = omap44xx_mmc1_irqs,
3480 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mmc1_irqs),
3481 .sdma_reqs = omap44xx_mmc1_sdma_reqs,
3482 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mmc1_sdma_reqs),
3483 .main_clk = "mmc1_fck",
3484 .prcm = {
3485 .omap4 = {
3486 .clkctrl_reg = OMAP4430_CM_L3INIT_MMC1_CLKCTRL,
3487 },
3488 },
3489 .dev_attr = &mmc1_dev_attr,
3490 .slaves = omap44xx_mmc1_slaves,
3491 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc1_slaves),
3492 .masters = omap44xx_mmc1_masters,
3493 .masters_cnt = ARRAY_SIZE(omap44xx_mmc1_masters),
3494 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3495};
3496
3497/* mmc2 */
3498static struct omap_hwmod_irq_info omap44xx_mmc2_irqs[] = {
3499 { .irq = 86 + OMAP44XX_IRQ_GIC_START },
3500};
3501
3502static struct omap_hwmod_dma_info omap44xx_mmc2_sdma_reqs[] = {
3503 { .name = "tx", .dma_req = 46 + OMAP44XX_DMA_REQ_START },
3504 { .name = "rx", .dma_req = 47 + OMAP44XX_DMA_REQ_START },
3505};
3506
3507/* mmc2 master ports */
3508static struct omap_hwmod_ocp_if *omap44xx_mmc2_masters[] = {
3509 &omap44xx_mmc2__l3_main_1,
3510};
3511
3512static struct omap_hwmod_addr_space omap44xx_mmc2_addrs[] = {
3513 {
3514 .pa_start = 0x480b4000,
3515 .pa_end = 0x480b43ff,
3516 .flags = ADDR_TYPE_RT
3517 },
3518};
3519
3520/* l4_per -> mmc2 */
3521static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc2 = {
3522 .master = &omap44xx_l4_per_hwmod,
3523 .slave = &omap44xx_mmc2_hwmod,
3524 .clk = "l4_div_ck",
3525 .addr = omap44xx_mmc2_addrs,
3526 .addr_cnt = ARRAY_SIZE(omap44xx_mmc2_addrs),
3527 .user = OCP_USER_MPU | OCP_USER_SDMA,
3528};
3529
3530/* mmc2 slave ports */
3531static struct omap_hwmod_ocp_if *omap44xx_mmc2_slaves[] = {
3532 &omap44xx_l4_per__mmc2,
3533};
3534
3535static struct omap_hwmod omap44xx_mmc2_hwmod = {
3536 .name = "mmc2",
3537 .class = &omap44xx_mmc_hwmod_class,
3538 .mpu_irqs = omap44xx_mmc2_irqs,
3539 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mmc2_irqs),
3540 .sdma_reqs = omap44xx_mmc2_sdma_reqs,
3541 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mmc2_sdma_reqs),
3542 .main_clk = "mmc2_fck",
3543 .prcm = {
3544 .omap4 = {
3545 .clkctrl_reg = OMAP4430_CM_L3INIT_MMC2_CLKCTRL,
3546 },
3547 },
3548 .slaves = omap44xx_mmc2_slaves,
3549 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc2_slaves),
3550 .masters = omap44xx_mmc2_masters,
3551 .masters_cnt = ARRAY_SIZE(omap44xx_mmc2_masters),
3552 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3553};
3554
3555/* mmc3 */
3556static struct omap_hwmod omap44xx_mmc3_hwmod;
3557static struct omap_hwmod_irq_info omap44xx_mmc3_irqs[] = {
3558 { .irq = 94 + OMAP44XX_IRQ_GIC_START },
3559};
3560
3561static struct omap_hwmod_dma_info omap44xx_mmc3_sdma_reqs[] = {
3562 { .name = "tx", .dma_req = 76 + OMAP44XX_DMA_REQ_START },
3563 { .name = "rx", .dma_req = 77 + OMAP44XX_DMA_REQ_START },
3564};
3565
3566static struct omap_hwmod_addr_space omap44xx_mmc3_addrs[] = {
3567 {
3568 .pa_start = 0x480ad000,
3569 .pa_end = 0x480ad3ff,
3570 .flags = ADDR_TYPE_RT
3571 },
3572};
3573
3574/* l4_per -> mmc3 */
3575static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc3 = {
3576 .master = &omap44xx_l4_per_hwmod,
3577 .slave = &omap44xx_mmc3_hwmod,
3578 .clk = "l4_div_ck",
3579 .addr = omap44xx_mmc3_addrs,
3580 .addr_cnt = ARRAY_SIZE(omap44xx_mmc3_addrs),
3581 .user = OCP_USER_MPU | OCP_USER_SDMA,
3582};
3583
3584/* mmc3 slave ports */
3585static struct omap_hwmod_ocp_if *omap44xx_mmc3_slaves[] = {
3586 &omap44xx_l4_per__mmc3,
3587};
3588
3589static struct omap_hwmod omap44xx_mmc3_hwmod = {
3590 .name = "mmc3",
3591 .class = &omap44xx_mmc_hwmod_class,
3592 .mpu_irqs = omap44xx_mmc3_irqs,
3593 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mmc3_irqs),
3594 .sdma_reqs = omap44xx_mmc3_sdma_reqs,
3595 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mmc3_sdma_reqs),
3596 .main_clk = "mmc3_fck",
3597 .prcm = {
3598 .omap4 = {
3599 .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD3_CLKCTRL,
3600 },
3601 },
3602 .slaves = omap44xx_mmc3_slaves,
3603 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc3_slaves),
3604 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3605};
3606
3607/* mmc4 */
3608static struct omap_hwmod omap44xx_mmc4_hwmod;
3609static struct omap_hwmod_irq_info omap44xx_mmc4_irqs[] = {
3610 { .irq = 96 + OMAP44XX_IRQ_GIC_START },
3611};
3612
3613static struct omap_hwmod_dma_info omap44xx_mmc4_sdma_reqs[] = {
3614 { .name = "tx", .dma_req = 56 + OMAP44XX_DMA_REQ_START },
3615 { .name = "rx", .dma_req = 57 + OMAP44XX_DMA_REQ_START },
3616};
3617
3618static struct omap_hwmod_addr_space omap44xx_mmc4_addrs[] = {
3619 {
3620 .pa_start = 0x480d1000,
3621 .pa_end = 0x480d13ff,
3622 .flags = ADDR_TYPE_RT
3623 },
3624};
3625
3626/* l4_per -> mmc4 */
3627static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc4 = {
3628 .master = &omap44xx_l4_per_hwmod,
3629 .slave = &omap44xx_mmc4_hwmod,
3630 .clk = "l4_div_ck",
3631 .addr = omap44xx_mmc4_addrs,
3632 .addr_cnt = ARRAY_SIZE(omap44xx_mmc4_addrs),
3633 .user = OCP_USER_MPU | OCP_USER_SDMA,
3634};
3635
3636/* mmc4 slave ports */
3637static struct omap_hwmod_ocp_if *omap44xx_mmc4_slaves[] = {
3638 &omap44xx_l4_per__mmc4,
3639};
3640
3641static struct omap_hwmod omap44xx_mmc4_hwmod = {
3642 .name = "mmc4",
3643 .class = &omap44xx_mmc_hwmod_class,
3644 .mpu_irqs = omap44xx_mmc4_irqs,
3645 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mmc4_irqs),
3646 .sdma_reqs = omap44xx_mmc4_sdma_reqs,
3647 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mmc4_sdma_reqs),
3648 .main_clk = "mmc4_fck",
3649 .prcm = {
3650 .omap4 = {
3651 .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD4_CLKCTRL,
3652 },
3653 },
3654 .slaves = omap44xx_mmc4_slaves,
3655 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc4_slaves),
3656 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3657};
3658
3659/* mmc5 */
3660static struct omap_hwmod omap44xx_mmc5_hwmod;
3661static struct omap_hwmod_irq_info omap44xx_mmc5_irqs[] = {
3662 { .irq = 59 + OMAP44XX_IRQ_GIC_START },
3663};
3664
3665static struct omap_hwmod_dma_info omap44xx_mmc5_sdma_reqs[] = {
3666 { .name = "tx", .dma_req = 58 + OMAP44XX_DMA_REQ_START },
3667 { .name = "rx", .dma_req = 59 + OMAP44XX_DMA_REQ_START },
3668};
3669
3670static struct omap_hwmod_addr_space omap44xx_mmc5_addrs[] = {
3671 {
3672 .pa_start = 0x480d5000,
3673 .pa_end = 0x480d53ff,
3674 .flags = ADDR_TYPE_RT
3675 },
3676};
3677
3678/* l4_per -> mmc5 */
3679static struct omap_hwmod_ocp_if omap44xx_l4_per__mmc5 = {
3680 .master = &omap44xx_l4_per_hwmod,
3681 .slave = &omap44xx_mmc5_hwmod,
3682 .clk = "l4_div_ck",
3683 .addr = omap44xx_mmc5_addrs,
3684 .addr_cnt = ARRAY_SIZE(omap44xx_mmc5_addrs),
3685 .user = OCP_USER_MPU | OCP_USER_SDMA,
3686};
3687
3688/* mmc5 slave ports */
3689static struct omap_hwmod_ocp_if *omap44xx_mmc5_slaves[] = {
3690 &omap44xx_l4_per__mmc5,
3691};
3692
3693static struct omap_hwmod omap44xx_mmc5_hwmod = {
3694 .name = "mmc5",
3695 .class = &omap44xx_mmc_hwmod_class,
3696 .mpu_irqs = omap44xx_mmc5_irqs,
3697 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mmc5_irqs),
3698 .sdma_reqs = omap44xx_mmc5_sdma_reqs,
3699 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_mmc5_sdma_reqs),
3700 .main_clk = "mmc5_fck",
3701 .prcm = {
3702 .omap4 = {
3703 .clkctrl_reg = OMAP4430_CM_L4PER_MMCSD5_CLKCTRL,
3704 },
3705 },
3706 .slaves = omap44xx_mmc5_slaves,
3707 .slaves_cnt = ARRAY_SIZE(omap44xx_mmc5_slaves),
3708 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3709};
3710
3711/*
3712 * 'mpu' class
3713 * mpu sub-system
3714 */
3715
3716static struct omap_hwmod_class omap44xx_mpu_hwmod_class = {
3717 .name = "mpu",
3718};
3719
3720/* mpu */
3721static struct omap_hwmod_irq_info omap44xx_mpu_irqs[] = {
3722 { .name = "pl310", .irq = 0 + OMAP44XX_IRQ_GIC_START },
3723 { .name = "cti0", .irq = 1 + OMAP44XX_IRQ_GIC_START },
3724 { .name = "cti1", .irq = 2 + OMAP44XX_IRQ_GIC_START },
3725};
3726
3727/* mpu master ports */
3728static struct omap_hwmod_ocp_if *omap44xx_mpu_masters[] = {
3729 &omap44xx_mpu__l3_main_1,
3730 &omap44xx_mpu__l4_abe,
3731 &omap44xx_mpu__dmm,
3732};
3733
3734static struct omap_hwmod omap44xx_mpu_hwmod = {
3735 .name = "mpu",
3736 .class = &omap44xx_mpu_hwmod_class,
3737 .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
3738 .mpu_irqs = omap44xx_mpu_irqs,
3739 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_mpu_irqs),
3740 .main_clk = "dpll_mpu_m2_ck",
3741 .prcm = {
3742 .omap4 = {
3743 .clkctrl_reg = OMAP4430_CM_MPU_MPU_CLKCTRL,
3744 },
3745 },
3746 .masters = omap44xx_mpu_masters,
3747 .masters_cnt = ARRAY_SIZE(omap44xx_mpu_masters),
3748 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3749};
3750
3751/*
3752 * 'smartreflex' class
3753 * smartreflex module (monitor silicon performance and outputs a measure of
3754 * performance error)
3755 */
3756
3757/* The IP is not compliant to type1 / type2 scheme */
3758static struct omap_hwmod_sysc_fields omap_hwmod_sysc_type_smartreflex = {
3759 .sidle_shift = 24,
3760 .enwkup_shift = 26,
3761};
3762
3763static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
3764 .sysc_offs = 0x0038,
3765 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE),
3766 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3767 SIDLE_SMART_WKUP),
3768 .sysc_fields = &omap_hwmod_sysc_type_smartreflex,
3769};
3770
3771static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
3772 .name = "smartreflex",
3773 .sysc = &omap44xx_smartreflex_sysc,
3774 .rev = 2,
3775};
3776
3777/* smartreflex_core */
3778static struct omap_hwmod omap44xx_smartreflex_core_hwmod;
3779static struct omap_hwmod_irq_info omap44xx_smartreflex_core_irqs[] = {
3780 { .irq = 19 + OMAP44XX_IRQ_GIC_START },
3781};
3782
3783static struct omap_hwmod_addr_space omap44xx_smartreflex_core_addrs[] = {
3784 {
3785 .pa_start = 0x4a0dd000,
3786 .pa_end = 0x4a0dd03f,
3787 .flags = ADDR_TYPE_RT
3788 },
3789};
3790
3791/* l4_cfg -> smartreflex_core */
3792static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_core = {
3793 .master = &omap44xx_l4_cfg_hwmod,
3794 .slave = &omap44xx_smartreflex_core_hwmod,
3795 .clk = "l4_div_ck",
3796 .addr = omap44xx_smartreflex_core_addrs,
3797 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_addrs),
3798 .user = OCP_USER_MPU | OCP_USER_SDMA,
3799};
3800
3801/* smartreflex_core slave ports */
3802static struct omap_hwmod_ocp_if *omap44xx_smartreflex_core_slaves[] = {
3803 &omap44xx_l4_cfg__smartreflex_core,
3804};
3805
3806static struct omap_hwmod omap44xx_smartreflex_core_hwmod = {
3807 .name = "smartreflex_core",
3808 .class = &omap44xx_smartreflex_hwmod_class,
3809 .mpu_irqs = omap44xx_smartreflex_core_irqs,
3810 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_irqs),
3811 .main_clk = "smartreflex_core_fck",
3812 .vdd_name = "core",
3813 .prcm = {
3814 .omap4 = {
3815 .clkctrl_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
3816 },
3817 },
3818 .slaves = omap44xx_smartreflex_core_slaves,
3819 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_core_slaves),
3820 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3821};
3822
3823/* smartreflex_iva */
3824static struct omap_hwmod omap44xx_smartreflex_iva_hwmod;
3825static struct omap_hwmod_irq_info omap44xx_smartreflex_iva_irqs[] = {
3826 { .irq = 102 + OMAP44XX_IRQ_GIC_START },
3827};
3828
3829static struct omap_hwmod_addr_space omap44xx_smartreflex_iva_addrs[] = {
3830 {
3831 .pa_start = 0x4a0db000,
3832 .pa_end = 0x4a0db03f,
3833 .flags = ADDR_TYPE_RT
3834 },
3835};
3836
3837/* l4_cfg -> smartreflex_iva */
3838static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_iva = {
3839 .master = &omap44xx_l4_cfg_hwmod,
3840 .slave = &omap44xx_smartreflex_iva_hwmod,
3841 .clk = "l4_div_ck",
3842 .addr = omap44xx_smartreflex_iva_addrs,
3843 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_addrs),
3844 .user = OCP_USER_MPU | OCP_USER_SDMA,
3845};
3846
3847/* smartreflex_iva slave ports */
3848static struct omap_hwmod_ocp_if *omap44xx_smartreflex_iva_slaves[] = {
3849 &omap44xx_l4_cfg__smartreflex_iva,
3850};
3851
3852static struct omap_hwmod omap44xx_smartreflex_iva_hwmod = {
3853 .name = "smartreflex_iva",
3854 .class = &omap44xx_smartreflex_hwmod_class,
3855 .mpu_irqs = omap44xx_smartreflex_iva_irqs,
3856 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_irqs),
3857 .main_clk = "smartreflex_iva_fck",
3858 .vdd_name = "iva",
3859 .prcm = {
3860 .omap4 = {
3861 .clkctrl_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
3862 },
3863 },
3864 .slaves = omap44xx_smartreflex_iva_slaves,
3865 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_iva_slaves),
3866 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3867};
3868
3869/* smartreflex_mpu */
3870static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod;
3871static struct omap_hwmod_irq_info omap44xx_smartreflex_mpu_irqs[] = {
3872 { .irq = 18 + OMAP44XX_IRQ_GIC_START },
3873};
3874
3875static struct omap_hwmod_addr_space omap44xx_smartreflex_mpu_addrs[] = {
3876 {
3877 .pa_start = 0x4a0d9000,
3878 .pa_end = 0x4a0d903f,
3879 .flags = ADDR_TYPE_RT
3880 },
3881};
3882
3883/* l4_cfg -> smartreflex_mpu */
3884static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
3885 .master = &omap44xx_l4_cfg_hwmod,
3886 .slave = &omap44xx_smartreflex_mpu_hwmod,
3887 .clk = "l4_div_ck",
3888 .addr = omap44xx_smartreflex_mpu_addrs,
3889 .addr_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_addrs),
3890 .user = OCP_USER_MPU | OCP_USER_SDMA,
3891};
3892
3893/* smartreflex_mpu slave ports */
3894static struct omap_hwmod_ocp_if *omap44xx_smartreflex_mpu_slaves[] = {
3895 &omap44xx_l4_cfg__smartreflex_mpu,
3896};
3897
3898static struct omap_hwmod omap44xx_smartreflex_mpu_hwmod = {
3899 .name = "smartreflex_mpu",
3900 .class = &omap44xx_smartreflex_hwmod_class,
3901 .mpu_irqs = omap44xx_smartreflex_mpu_irqs,
3902 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_irqs),
3903 .main_clk = "smartreflex_mpu_fck",
3904 .vdd_name = "mpu",
3905 .prcm = {
3906 .omap4 = {
3907 .clkctrl_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
3908 },
3909 },
3910 .slaves = omap44xx_smartreflex_mpu_slaves,
3911 .slaves_cnt = ARRAY_SIZE(omap44xx_smartreflex_mpu_slaves),
3912 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3913};
3914
3915/*
3916 * 'spinlock' class
3917 * spinlock provides hardware assistance for synchronizing the processes
3918 * running on multiple processors
3919 */
3920
3921static struct omap_hwmod_class_sysconfig omap44xx_spinlock_sysc = {
3922 .rev_offs = 0x0000,
3923 .sysc_offs = 0x0010,
3924 .syss_offs = 0x0014,
3925 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
3926 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
3927 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
3928 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
3929 SIDLE_SMART_WKUP),
3930 .sysc_fields = &omap_hwmod_sysc_type1,
3931};
3932
3933static struct omap_hwmod_class omap44xx_spinlock_hwmod_class = {
3934 .name = "spinlock",
3935 .sysc = &omap44xx_spinlock_sysc,
3936};
3937
3938/* spinlock */
3939static struct omap_hwmod omap44xx_spinlock_hwmod;
3940static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
3941 {
3942 .pa_start = 0x4a0f6000,
3943 .pa_end = 0x4a0f6fff,
3944 .flags = ADDR_TYPE_RT
3945 },
3946};
3947
3948/* l4_cfg -> spinlock */
3949static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
3950 .master = &omap44xx_l4_cfg_hwmod,
3951 .slave = &omap44xx_spinlock_hwmod,
3952 .clk = "l4_div_ck",
3953 .addr = omap44xx_spinlock_addrs,
3954 .addr_cnt = ARRAY_SIZE(omap44xx_spinlock_addrs),
3955 .user = OCP_USER_MPU | OCP_USER_SDMA,
3956};
3957
3958/* spinlock slave ports */
3959static struct omap_hwmod_ocp_if *omap44xx_spinlock_slaves[] = {
3960 &omap44xx_l4_cfg__spinlock,
3961};
3962
3963static struct omap_hwmod omap44xx_spinlock_hwmod = {
3964 .name = "spinlock",
3965 .class = &omap44xx_spinlock_hwmod_class,
3966 .prcm = {
3967 .omap4 = {
3968 .clkctrl_reg = OMAP4430_CM_L4CFG_HW_SEM_CLKCTRL,
3969 },
3970 },
3971 .slaves = omap44xx_spinlock_slaves,
3972 .slaves_cnt = ARRAY_SIZE(omap44xx_spinlock_slaves),
3973 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3974};
3975
3976/*
3977 * 'timer' class
3978 * general purpose timer module with accurate 1ms tick
3979 * This class contains several variants: ['timer_1ms', 'timer']
3980 */
3981
3982static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {
3983 .rev_offs = 0x0000,
3984 .sysc_offs = 0x0010,
3985 .syss_offs = 0x0014,
3986 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
3987 SYSC_HAS_EMUFREE | SYSC_HAS_ENAWAKEUP |
3988 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
3989 SYSS_HAS_RESET_STATUS),
3990 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
3991 .sysc_fields = &omap_hwmod_sysc_type1,
3992};
3993
3994static struct omap_hwmod_class omap44xx_timer_1ms_hwmod_class = {
3995 .name = "timer",
3996 .sysc = &omap44xx_timer_1ms_sysc,
3997};
3998
3999static struct omap_hwmod_class_sysconfig omap44xx_timer_sysc = {
4000 .rev_offs = 0x0000,
4001 .sysc_offs = 0x0010,
4002 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
4003 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
4004 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4005 SIDLE_SMART_WKUP),
4006 .sysc_fields = &omap_hwmod_sysc_type2,
4007};
4008
4009static struct omap_hwmod_class omap44xx_timer_hwmod_class = {
4010 .name = "timer",
4011 .sysc = &omap44xx_timer_sysc,
4012};
4013
4014/* timer1 */
4015static struct omap_hwmod omap44xx_timer1_hwmod;
4016static struct omap_hwmod_irq_info omap44xx_timer1_irqs[] = {
4017 { .irq = 37 + OMAP44XX_IRQ_GIC_START },
4018};
4019
4020static struct omap_hwmod_addr_space omap44xx_timer1_addrs[] = {
4021 {
4022 .pa_start = 0x4a318000,
4023 .pa_end = 0x4a31807f,
4024 .flags = ADDR_TYPE_RT
4025 },
4026};
4027
4028/* l4_wkup -> timer1 */
4029static struct omap_hwmod_ocp_if omap44xx_l4_wkup__timer1 = {
4030 .master = &omap44xx_l4_wkup_hwmod,
4031 .slave = &omap44xx_timer1_hwmod,
4032 .clk = "l4_wkup_clk_mux_ck",
4033 .addr = omap44xx_timer1_addrs,
4034 .addr_cnt = ARRAY_SIZE(omap44xx_timer1_addrs),
4035 .user = OCP_USER_MPU | OCP_USER_SDMA,
4036};
4037
4038/* timer1 slave ports */
4039static struct omap_hwmod_ocp_if *omap44xx_timer1_slaves[] = {
4040 &omap44xx_l4_wkup__timer1,
4041};
4042
4043static struct omap_hwmod omap44xx_timer1_hwmod = {
4044 .name = "timer1",
4045 .class = &omap44xx_timer_1ms_hwmod_class,
4046 .mpu_irqs = omap44xx_timer1_irqs,
4047 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer1_irqs),
4048 .main_clk = "timer1_fck",
4049 .prcm = {
4050 .omap4 = {
4051 .clkctrl_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
4052 },
4053 },
4054 .slaves = omap44xx_timer1_slaves,
4055 .slaves_cnt = ARRAY_SIZE(omap44xx_timer1_slaves),
4056 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4057};
4058
4059/* timer2 */
4060static struct omap_hwmod omap44xx_timer2_hwmod;
4061static struct omap_hwmod_irq_info omap44xx_timer2_irqs[] = {
4062 { .irq = 38 + OMAP44XX_IRQ_GIC_START },
4063};
4064
4065static struct omap_hwmod_addr_space omap44xx_timer2_addrs[] = {
4066 {
4067 .pa_start = 0x48032000,
4068 .pa_end = 0x4803207f,
4069 .flags = ADDR_TYPE_RT
4070 },
4071};
4072
4073/* l4_per -> timer2 */
4074static struct omap_hwmod_ocp_if omap44xx_l4_per__timer2 = {
4075 .master = &omap44xx_l4_per_hwmod,
4076 .slave = &omap44xx_timer2_hwmod,
4077 .clk = "l4_div_ck",
4078 .addr = omap44xx_timer2_addrs,
4079 .addr_cnt = ARRAY_SIZE(omap44xx_timer2_addrs),
4080 .user = OCP_USER_MPU | OCP_USER_SDMA,
4081};
4082
4083/* timer2 slave ports */
4084static struct omap_hwmod_ocp_if *omap44xx_timer2_slaves[] = {
4085 &omap44xx_l4_per__timer2,
4086};
4087
4088static struct omap_hwmod omap44xx_timer2_hwmod = {
4089 .name = "timer2",
4090 .class = &omap44xx_timer_1ms_hwmod_class,
4091 .mpu_irqs = omap44xx_timer2_irqs,
4092 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer2_irqs),
4093 .main_clk = "timer2_fck",
4094 .prcm = {
4095 .omap4 = {
4096 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
4097 },
4098 },
4099 .slaves = omap44xx_timer2_slaves,
4100 .slaves_cnt = ARRAY_SIZE(omap44xx_timer2_slaves),
4101 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4102};
4103
4104/* timer3 */
4105static struct omap_hwmod omap44xx_timer3_hwmod;
4106static struct omap_hwmod_irq_info omap44xx_timer3_irqs[] = {
4107 { .irq = 39 + OMAP44XX_IRQ_GIC_START },
4108};
4109
4110static struct omap_hwmod_addr_space omap44xx_timer3_addrs[] = {
4111 {
4112 .pa_start = 0x48034000,
4113 .pa_end = 0x4803407f,
4114 .flags = ADDR_TYPE_RT
4115 },
4116};
4117
4118/* l4_per -> timer3 */
4119static struct omap_hwmod_ocp_if omap44xx_l4_per__timer3 = {
4120 .master = &omap44xx_l4_per_hwmod,
4121 .slave = &omap44xx_timer3_hwmod,
4122 .clk = "l4_div_ck",
4123 .addr = omap44xx_timer3_addrs,
4124 .addr_cnt = ARRAY_SIZE(omap44xx_timer3_addrs),
4125 .user = OCP_USER_MPU | OCP_USER_SDMA,
4126};
4127
4128/* timer3 slave ports */
4129static struct omap_hwmod_ocp_if *omap44xx_timer3_slaves[] = {
4130 &omap44xx_l4_per__timer3,
4131};
4132
4133static struct omap_hwmod omap44xx_timer3_hwmod = {
4134 .name = "timer3",
4135 .class = &omap44xx_timer_hwmod_class,
4136 .mpu_irqs = omap44xx_timer3_irqs,
4137 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer3_irqs),
4138 .main_clk = "timer3_fck",
4139 .prcm = {
4140 .omap4 = {
4141 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
4142 },
4143 },
4144 .slaves = omap44xx_timer3_slaves,
4145 .slaves_cnt = ARRAY_SIZE(omap44xx_timer3_slaves),
4146 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4147};
4148
4149/* timer4 */
4150static struct omap_hwmod omap44xx_timer4_hwmod;
4151static struct omap_hwmod_irq_info omap44xx_timer4_irqs[] = {
4152 { .irq = 40 + OMAP44XX_IRQ_GIC_START },
4153};
4154
4155static struct omap_hwmod_addr_space omap44xx_timer4_addrs[] = {
4156 {
4157 .pa_start = 0x48036000,
4158 .pa_end = 0x4803607f,
4159 .flags = ADDR_TYPE_RT
4160 },
4161};
4162
4163/* l4_per -> timer4 */
4164static struct omap_hwmod_ocp_if omap44xx_l4_per__timer4 = {
4165 .master = &omap44xx_l4_per_hwmod,
4166 .slave = &omap44xx_timer4_hwmod,
4167 .clk = "l4_div_ck",
4168 .addr = omap44xx_timer4_addrs,
4169 .addr_cnt = ARRAY_SIZE(omap44xx_timer4_addrs),
4170 .user = OCP_USER_MPU | OCP_USER_SDMA,
4171};
4172
4173/* timer4 slave ports */
4174static struct omap_hwmod_ocp_if *omap44xx_timer4_slaves[] = {
4175 &omap44xx_l4_per__timer4,
4176};
4177
4178static struct omap_hwmod omap44xx_timer4_hwmod = {
4179 .name = "timer4",
4180 .class = &omap44xx_timer_hwmod_class,
4181 .mpu_irqs = omap44xx_timer4_irqs,
4182 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer4_irqs),
4183 .main_clk = "timer4_fck",
4184 .prcm = {
4185 .omap4 = {
4186 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
4187 },
4188 },
4189 .slaves = omap44xx_timer4_slaves,
4190 .slaves_cnt = ARRAY_SIZE(omap44xx_timer4_slaves),
4191 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4192};
4193
4194/* timer5 */
4195static struct omap_hwmod omap44xx_timer5_hwmod;
4196static struct omap_hwmod_irq_info omap44xx_timer5_irqs[] = {
4197 { .irq = 41 + OMAP44XX_IRQ_GIC_START },
4198};
4199
4200static struct omap_hwmod_addr_space omap44xx_timer5_addrs[] = {
4201 {
4202 .pa_start = 0x40138000,
4203 .pa_end = 0x4013807f,
4204 .flags = ADDR_TYPE_RT
4205 },
4206};
4207
4208/* l4_abe -> timer5 */
4209static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
4210 .master = &omap44xx_l4_abe_hwmod,
4211 .slave = &omap44xx_timer5_hwmod,
4212 .clk = "ocp_abe_iclk",
4213 .addr = omap44xx_timer5_addrs,
4214 .addr_cnt = ARRAY_SIZE(omap44xx_timer5_addrs),
4215 .user = OCP_USER_MPU,
4216};
4217
4218static struct omap_hwmod_addr_space omap44xx_timer5_dma_addrs[] = {
4219 {
4220 .pa_start = 0x49038000,
4221 .pa_end = 0x4903807f,
4222 .flags = ADDR_TYPE_RT
4223 },
4224};
4225
4226/* l4_abe -> timer5 (dma) */
4227static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
4228 .master = &omap44xx_l4_abe_hwmod,
4229 .slave = &omap44xx_timer5_hwmod,
4230 .clk = "ocp_abe_iclk",
4231 .addr = omap44xx_timer5_dma_addrs,
4232 .addr_cnt = ARRAY_SIZE(omap44xx_timer5_dma_addrs),
4233 .user = OCP_USER_SDMA,
4234};
4235
4236/* timer5 slave ports */
4237static struct omap_hwmod_ocp_if *omap44xx_timer5_slaves[] = {
4238 &omap44xx_l4_abe__timer5,
4239 &omap44xx_l4_abe__timer5_dma,
4240};
4241
4242static struct omap_hwmod omap44xx_timer5_hwmod = {
4243 .name = "timer5",
4244 .class = &omap44xx_timer_hwmod_class,
4245 .mpu_irqs = omap44xx_timer5_irqs,
4246 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer5_irqs),
4247 .main_clk = "timer5_fck",
4248 .prcm = {
4249 .omap4 = {
4250 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
4251 },
4252 },
4253 .slaves = omap44xx_timer5_slaves,
4254 .slaves_cnt = ARRAY_SIZE(omap44xx_timer5_slaves),
4255 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4256};
4257
4258/* timer6 */
4259static struct omap_hwmod omap44xx_timer6_hwmod;
4260static struct omap_hwmod_irq_info omap44xx_timer6_irqs[] = {
4261 { .irq = 42 + OMAP44XX_IRQ_GIC_START },
4262};
4263
4264static struct omap_hwmod_addr_space omap44xx_timer6_addrs[] = {
4265 {
4266 .pa_start = 0x4013a000,
4267 .pa_end = 0x4013a07f,
4268 .flags = ADDR_TYPE_RT
4269 },
4270};
4271
4272/* l4_abe -> timer6 */
4273static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
4274 .master = &omap44xx_l4_abe_hwmod,
4275 .slave = &omap44xx_timer6_hwmod,
4276 .clk = "ocp_abe_iclk",
4277 .addr = omap44xx_timer6_addrs,
4278 .addr_cnt = ARRAY_SIZE(omap44xx_timer6_addrs),
4279 .user = OCP_USER_MPU,
4280};
4281
4282static struct omap_hwmod_addr_space omap44xx_timer6_dma_addrs[] = {
4283 {
4284 .pa_start = 0x4903a000,
4285 .pa_end = 0x4903a07f,
4286 .flags = ADDR_TYPE_RT
4287 },
4288};
4289
4290/* l4_abe -> timer6 (dma) */
4291static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
4292 .master = &omap44xx_l4_abe_hwmod,
4293 .slave = &omap44xx_timer6_hwmod,
4294 .clk = "ocp_abe_iclk",
4295 .addr = omap44xx_timer6_dma_addrs,
4296 .addr_cnt = ARRAY_SIZE(omap44xx_timer6_dma_addrs),
4297 .user = OCP_USER_SDMA,
4298};
4299
4300/* timer6 slave ports */
4301static struct omap_hwmod_ocp_if *omap44xx_timer6_slaves[] = {
4302 &omap44xx_l4_abe__timer6,
4303 &omap44xx_l4_abe__timer6_dma,
4304};
4305
4306static struct omap_hwmod omap44xx_timer6_hwmod = {
4307 .name = "timer6",
4308 .class = &omap44xx_timer_hwmod_class,
4309 .mpu_irqs = omap44xx_timer6_irqs,
4310 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer6_irqs),
4311 .main_clk = "timer6_fck",
4312 .prcm = {
4313 .omap4 = {
4314 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
4315 },
4316 },
4317 .slaves = omap44xx_timer6_slaves,
4318 .slaves_cnt = ARRAY_SIZE(omap44xx_timer6_slaves),
4319 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4320};
4321
4322/* timer7 */
4323static struct omap_hwmod omap44xx_timer7_hwmod;
4324static struct omap_hwmod_irq_info omap44xx_timer7_irqs[] = {
4325 { .irq = 43 + OMAP44XX_IRQ_GIC_START },
4326};
4327
4328static struct omap_hwmod_addr_space omap44xx_timer7_addrs[] = {
4329 {
4330 .pa_start = 0x4013c000,
4331 .pa_end = 0x4013c07f,
4332 .flags = ADDR_TYPE_RT
4333 },
4334};
4335
4336/* l4_abe -> timer7 */
4337static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
4338 .master = &omap44xx_l4_abe_hwmod,
4339 .slave = &omap44xx_timer7_hwmod,
4340 .clk = "ocp_abe_iclk",
4341 .addr = omap44xx_timer7_addrs,
4342 .addr_cnt = ARRAY_SIZE(omap44xx_timer7_addrs),
4343 .user = OCP_USER_MPU,
4344};
4345
4346static struct omap_hwmod_addr_space omap44xx_timer7_dma_addrs[] = {
4347 {
4348 .pa_start = 0x4903c000,
4349 .pa_end = 0x4903c07f,
4350 .flags = ADDR_TYPE_RT
4351 },
4352};
4353
4354/* l4_abe -> timer7 (dma) */
4355static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
4356 .master = &omap44xx_l4_abe_hwmod,
4357 .slave = &omap44xx_timer7_hwmod,
4358 .clk = "ocp_abe_iclk",
4359 .addr = omap44xx_timer7_dma_addrs,
4360 .addr_cnt = ARRAY_SIZE(omap44xx_timer7_dma_addrs),
4361 .user = OCP_USER_SDMA,
4362};
4363
4364/* timer7 slave ports */
4365static struct omap_hwmod_ocp_if *omap44xx_timer7_slaves[] = {
4366 &omap44xx_l4_abe__timer7,
4367 &omap44xx_l4_abe__timer7_dma,
4368};
4369
4370static struct omap_hwmod omap44xx_timer7_hwmod = {
4371 .name = "timer7",
4372 .class = &omap44xx_timer_hwmod_class,
4373 .mpu_irqs = omap44xx_timer7_irqs,
4374 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer7_irqs),
4375 .main_clk = "timer7_fck",
4376 .prcm = {
4377 .omap4 = {
4378 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
4379 },
4380 },
4381 .slaves = omap44xx_timer7_slaves,
4382 .slaves_cnt = ARRAY_SIZE(omap44xx_timer7_slaves),
4383 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4384};
4385
4386/* timer8 */
4387static struct omap_hwmod omap44xx_timer8_hwmod;
4388static struct omap_hwmod_irq_info omap44xx_timer8_irqs[] = {
4389 { .irq = 44 + OMAP44XX_IRQ_GIC_START },
4390};
4391
4392static struct omap_hwmod_addr_space omap44xx_timer8_addrs[] = {
4393 {
4394 .pa_start = 0x4013e000,
4395 .pa_end = 0x4013e07f,
4396 .flags = ADDR_TYPE_RT
4397 },
4398};
4399
4400/* l4_abe -> timer8 */
4401static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
4402 .master = &omap44xx_l4_abe_hwmod,
4403 .slave = &omap44xx_timer8_hwmod,
4404 .clk = "ocp_abe_iclk",
4405 .addr = omap44xx_timer8_addrs,
4406 .addr_cnt = ARRAY_SIZE(omap44xx_timer8_addrs),
4407 .user = OCP_USER_MPU,
4408};
4409
4410static struct omap_hwmod_addr_space omap44xx_timer8_dma_addrs[] = {
4411 {
4412 .pa_start = 0x4903e000,
4413 .pa_end = 0x4903e07f,
4414 .flags = ADDR_TYPE_RT
4415 },
4416};
4417
4418/* l4_abe -> timer8 (dma) */
4419static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
4420 .master = &omap44xx_l4_abe_hwmod,
4421 .slave = &omap44xx_timer8_hwmod,
4422 .clk = "ocp_abe_iclk",
4423 .addr = omap44xx_timer8_dma_addrs,
4424 .addr_cnt = ARRAY_SIZE(omap44xx_timer8_dma_addrs),
4425 .user = OCP_USER_SDMA,
4426};
4427
4428/* timer8 slave ports */
4429static struct omap_hwmod_ocp_if *omap44xx_timer8_slaves[] = {
4430 &omap44xx_l4_abe__timer8,
4431 &omap44xx_l4_abe__timer8_dma,
4432};
4433
4434static struct omap_hwmod omap44xx_timer8_hwmod = {
4435 .name = "timer8",
4436 .class = &omap44xx_timer_hwmod_class,
4437 .mpu_irqs = omap44xx_timer8_irqs,
4438 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer8_irqs),
4439 .main_clk = "timer8_fck",
4440 .prcm = {
4441 .omap4 = {
4442 .clkctrl_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
4443 },
4444 },
4445 .slaves = omap44xx_timer8_slaves,
4446 .slaves_cnt = ARRAY_SIZE(omap44xx_timer8_slaves),
4447 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4448};
4449
4450/* timer9 */
4451static struct omap_hwmod omap44xx_timer9_hwmod;
4452static struct omap_hwmod_irq_info omap44xx_timer9_irqs[] = {
4453 { .irq = 45 + OMAP44XX_IRQ_GIC_START },
4454};
4455
4456static struct omap_hwmod_addr_space omap44xx_timer9_addrs[] = {
4457 {
4458 .pa_start = 0x4803e000,
4459 .pa_end = 0x4803e07f,
4460 .flags = ADDR_TYPE_RT
4461 },
4462};
4463
4464/* l4_per -> timer9 */
4465static struct omap_hwmod_ocp_if omap44xx_l4_per__timer9 = {
4466 .master = &omap44xx_l4_per_hwmod,
4467 .slave = &omap44xx_timer9_hwmod,
4468 .clk = "l4_div_ck",
4469 .addr = omap44xx_timer9_addrs,
4470 .addr_cnt = ARRAY_SIZE(omap44xx_timer9_addrs),
4471 .user = OCP_USER_MPU | OCP_USER_SDMA,
4472};
4473
4474/* timer9 slave ports */
4475static struct omap_hwmod_ocp_if *omap44xx_timer9_slaves[] = {
4476 &omap44xx_l4_per__timer9,
4477};
4478
4479static struct omap_hwmod omap44xx_timer9_hwmod = {
4480 .name = "timer9",
4481 .class = &omap44xx_timer_hwmod_class,
4482 .mpu_irqs = omap44xx_timer9_irqs,
4483 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer9_irqs),
4484 .main_clk = "timer9_fck",
4485 .prcm = {
4486 .omap4 = {
4487 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
4488 },
4489 },
4490 .slaves = omap44xx_timer9_slaves,
4491 .slaves_cnt = ARRAY_SIZE(omap44xx_timer9_slaves),
4492 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4493};
4494
4495/* timer10 */
4496static struct omap_hwmod omap44xx_timer10_hwmod;
4497static struct omap_hwmod_irq_info omap44xx_timer10_irqs[] = {
4498 { .irq = 46 + OMAP44XX_IRQ_GIC_START },
4499};
4500
4501static struct omap_hwmod_addr_space omap44xx_timer10_addrs[] = {
4502 {
4503 .pa_start = 0x48086000,
4504 .pa_end = 0x4808607f,
4505 .flags = ADDR_TYPE_RT
4506 },
4507};
4508
4509/* l4_per -> timer10 */
4510static struct omap_hwmod_ocp_if omap44xx_l4_per__timer10 = {
4511 .master = &omap44xx_l4_per_hwmod,
4512 .slave = &omap44xx_timer10_hwmod,
4513 .clk = "l4_div_ck",
4514 .addr = omap44xx_timer10_addrs,
4515 .addr_cnt = ARRAY_SIZE(omap44xx_timer10_addrs),
4516 .user = OCP_USER_MPU | OCP_USER_SDMA,
4517};
4518
4519/* timer10 slave ports */
4520static struct omap_hwmod_ocp_if *omap44xx_timer10_slaves[] = {
4521 &omap44xx_l4_per__timer10,
4522};
4523
4524static struct omap_hwmod omap44xx_timer10_hwmod = {
4525 .name = "timer10",
4526 .class = &omap44xx_timer_1ms_hwmod_class,
4527 .mpu_irqs = omap44xx_timer10_irqs,
4528 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer10_irqs),
4529 .main_clk = "timer10_fck",
4530 .prcm = {
4531 .omap4 = {
4532 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
4533 },
4534 },
4535 .slaves = omap44xx_timer10_slaves,
4536 .slaves_cnt = ARRAY_SIZE(omap44xx_timer10_slaves),
4537 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4538};
4539
4540/* timer11 */
4541static struct omap_hwmod omap44xx_timer11_hwmod;
4542static struct omap_hwmod_irq_info omap44xx_timer11_irqs[] = {
4543 { .irq = 47 + OMAP44XX_IRQ_GIC_START },
4544};
4545
4546static struct omap_hwmod_addr_space omap44xx_timer11_addrs[] = {
4547 {
4548 .pa_start = 0x48088000,
4549 .pa_end = 0x4808807f,
4550 .flags = ADDR_TYPE_RT
4551 },
4552};
4553
4554/* l4_per -> timer11 */
4555static struct omap_hwmod_ocp_if omap44xx_l4_per__timer11 = {
4556 .master = &omap44xx_l4_per_hwmod,
4557 .slave = &omap44xx_timer11_hwmod,
4558 .clk = "l4_div_ck",
4559 .addr = omap44xx_timer11_addrs,
4560 .addr_cnt = ARRAY_SIZE(omap44xx_timer11_addrs),
4561 .user = OCP_USER_MPU | OCP_USER_SDMA,
4562};
4563
4564/* timer11 slave ports */
4565static struct omap_hwmod_ocp_if *omap44xx_timer11_slaves[] = {
4566 &omap44xx_l4_per__timer11,
4567};
4568
4569static struct omap_hwmod omap44xx_timer11_hwmod = {
4570 .name = "timer11",
4571 .class = &omap44xx_timer_hwmod_class,
4572 .mpu_irqs = omap44xx_timer11_irqs,
4573 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_timer11_irqs),
4574 .main_clk = "timer11_fck",
4575 .prcm = {
4576 .omap4 = {
4577 .clkctrl_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
4578 },
4579 },
4580 .slaves = omap44xx_timer11_slaves,
4581 .slaves_cnt = ARRAY_SIZE(omap44xx_timer11_slaves),
4582 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4583};
4584
4585/*
4586 * 'uart' class
4587 * universal asynchronous receiver/transmitter (uart)
4588 */
4589
4590static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = {
4591 .rev_offs = 0x0050,
4592 .sysc_offs = 0x0054,
4593 .syss_offs = 0x0058,
4594 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
4595 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
4596 SYSS_HAS_RESET_STATUS),
4597 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4598 SIDLE_SMART_WKUP),
4599 .sysc_fields = &omap_hwmod_sysc_type1,
4600};
4601
4602static struct omap_hwmod_class omap44xx_uart_hwmod_class = {
4603 .name = "uart",
4604 .sysc = &omap44xx_uart_sysc,
4605};
4606
4607/* uart1 */
4608static struct omap_hwmod omap44xx_uart1_hwmod;
4609static struct omap_hwmod_irq_info omap44xx_uart1_irqs[] = {
4610 { .irq = 72 + OMAP44XX_IRQ_GIC_START },
4611};
4612
4613static struct omap_hwmod_dma_info omap44xx_uart1_sdma_reqs[] = {
4614 { .name = "tx", .dma_req = 48 + OMAP44XX_DMA_REQ_START },
4615 { .name = "rx", .dma_req = 49 + OMAP44XX_DMA_REQ_START },
4616};
4617
4618static struct omap_hwmod_addr_space omap44xx_uart1_addrs[] = {
4619 {
4620 .pa_start = 0x4806a000,
4621 .pa_end = 0x4806a0ff,
4622 .flags = ADDR_TYPE_RT
4623 },
4624};
4625
4626/* l4_per -> uart1 */
4627static struct omap_hwmod_ocp_if omap44xx_l4_per__uart1 = {
4628 .master = &omap44xx_l4_per_hwmod,
4629 .slave = &omap44xx_uart1_hwmod,
4630 .clk = "l4_div_ck",
4631 .addr = omap44xx_uart1_addrs,
4632 .addr_cnt = ARRAY_SIZE(omap44xx_uart1_addrs),
4633 .user = OCP_USER_MPU | OCP_USER_SDMA,
4634};
4635
4636/* uart1 slave ports */
4637static struct omap_hwmod_ocp_if *omap44xx_uart1_slaves[] = {
4638 &omap44xx_l4_per__uart1,
4639};
4640
4641static struct omap_hwmod omap44xx_uart1_hwmod = {
4642 .name = "uart1",
4643 .class = &omap44xx_uart_hwmod_class,
4644 .mpu_irqs = omap44xx_uart1_irqs,
4645 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart1_irqs),
4646 .sdma_reqs = omap44xx_uart1_sdma_reqs,
4647 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart1_sdma_reqs),
4648 .main_clk = "uart1_fck",
4649 .prcm = {
4650 .omap4 = {
4651 .clkctrl_reg = OMAP4430_CM_L4PER_UART1_CLKCTRL,
4652 },
4653 },
4654 .slaves = omap44xx_uart1_slaves,
4655 .slaves_cnt = ARRAY_SIZE(omap44xx_uart1_slaves),
4656 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4657};
4658
4659/* uart2 */
4660static struct omap_hwmod omap44xx_uart2_hwmod;
4661static struct omap_hwmod_irq_info omap44xx_uart2_irqs[] = {
4662 { .irq = 73 + OMAP44XX_IRQ_GIC_START },
4663};
4664
4665static struct omap_hwmod_dma_info omap44xx_uart2_sdma_reqs[] = {
4666 { .name = "tx", .dma_req = 50 + OMAP44XX_DMA_REQ_START },
4667 { .name = "rx", .dma_req = 51 + OMAP44XX_DMA_REQ_START },
4668};
4669
4670static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = {
4671 {
4672 .pa_start = 0x4806c000,
4673 .pa_end = 0x4806c0ff,
4674 .flags = ADDR_TYPE_RT
4675 },
4676};
4677
4678/* l4_per -> uart2 */
4679static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = {
4680 .master = &omap44xx_l4_per_hwmod,
4681 .slave = &omap44xx_uart2_hwmod,
4682 .clk = "l4_div_ck",
4683 .addr = omap44xx_uart2_addrs,
4684 .addr_cnt = ARRAY_SIZE(omap44xx_uart2_addrs),
4685 .user = OCP_USER_MPU | OCP_USER_SDMA,
4686};
4687
4688/* uart2 slave ports */
4689static struct omap_hwmod_ocp_if *omap44xx_uart2_slaves[] = {
4690 &omap44xx_l4_per__uart2,
4691};
4692
4693static struct omap_hwmod omap44xx_uart2_hwmod = {
4694 .name = "uart2",
4695 .class = &omap44xx_uart_hwmod_class,
4696 .mpu_irqs = omap44xx_uart2_irqs,
4697 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart2_irqs),
4698 .sdma_reqs = omap44xx_uart2_sdma_reqs,
4699 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart2_sdma_reqs),
4700 .main_clk = "uart2_fck",
4701 .prcm = {
4702 .omap4 = {
4703 .clkctrl_reg = OMAP4430_CM_L4PER_UART2_CLKCTRL,
4704 },
4705 },
4706 .slaves = omap44xx_uart2_slaves,
4707 .slaves_cnt = ARRAY_SIZE(omap44xx_uart2_slaves),
4708 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4709};
4710
4711/* uart3 */
4712static struct omap_hwmod omap44xx_uart3_hwmod;
4713static struct omap_hwmod_irq_info omap44xx_uart3_irqs[] = {
4714 { .irq = 74 + OMAP44XX_IRQ_GIC_START },
4715};
4716
4717static struct omap_hwmod_dma_info omap44xx_uart3_sdma_reqs[] = {
4718 { .name = "tx", .dma_req = 52 + OMAP44XX_DMA_REQ_START },
4719 { .name = "rx", .dma_req = 53 + OMAP44XX_DMA_REQ_START },
4720};
4721
4722static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = {
4723 {
4724 .pa_start = 0x48020000,
4725 .pa_end = 0x480200ff,
4726 .flags = ADDR_TYPE_RT
4727 },
4728};
4729
4730/* l4_per -> uart3 */
4731static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = {
4732 .master = &omap44xx_l4_per_hwmod,
4733 .slave = &omap44xx_uart3_hwmod,
4734 .clk = "l4_div_ck",
4735 .addr = omap44xx_uart3_addrs,
4736 .addr_cnt = ARRAY_SIZE(omap44xx_uart3_addrs),
4737 .user = OCP_USER_MPU | OCP_USER_SDMA,
4738};
4739
4740/* uart3 slave ports */
4741static struct omap_hwmod_ocp_if *omap44xx_uart3_slaves[] = {
4742 &omap44xx_l4_per__uart3,
4743};
4744
4745static struct omap_hwmod omap44xx_uart3_hwmod = {
4746 .name = "uart3",
4747 .class = &omap44xx_uart_hwmod_class,
4748 .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET),
4749 .mpu_irqs = omap44xx_uart3_irqs,
4750 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart3_irqs),
4751 .sdma_reqs = omap44xx_uart3_sdma_reqs,
4752 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart3_sdma_reqs),
4753 .main_clk = "uart3_fck",
4754 .prcm = {
4755 .omap4 = {
4756 .clkctrl_reg = OMAP4430_CM_L4PER_UART3_CLKCTRL,
4757 },
4758 },
4759 .slaves = omap44xx_uart3_slaves,
4760 .slaves_cnt = ARRAY_SIZE(omap44xx_uart3_slaves),
4761 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4762};
4763
4764/* uart4 */
4765static struct omap_hwmod omap44xx_uart4_hwmod;
4766static struct omap_hwmod_irq_info omap44xx_uart4_irqs[] = {
4767 { .irq = 70 + OMAP44XX_IRQ_GIC_START },
4768};
4769
4770static struct omap_hwmod_dma_info omap44xx_uart4_sdma_reqs[] = {
4771 { .name = "tx", .dma_req = 54 + OMAP44XX_DMA_REQ_START },
4772 { .name = "rx", .dma_req = 55 + OMAP44XX_DMA_REQ_START },
4773};
4774
4775static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = {
4776 {
4777 .pa_start = 0x4806e000,
4778 .pa_end = 0x4806e0ff,
4779 .flags = ADDR_TYPE_RT
4780 },
4781};
4782
4783/* l4_per -> uart4 */
4784static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = {
4785 .master = &omap44xx_l4_per_hwmod,
4786 .slave = &omap44xx_uart4_hwmod,
4787 .clk = "l4_div_ck",
4788 .addr = omap44xx_uart4_addrs,
4789 .addr_cnt = ARRAY_SIZE(omap44xx_uart4_addrs),
4790 .user = OCP_USER_MPU | OCP_USER_SDMA,
4791};
4792
4793/* uart4 slave ports */
4794static struct omap_hwmod_ocp_if *omap44xx_uart4_slaves[] = {
4795 &omap44xx_l4_per__uart4,
4796};
4797
4798static struct omap_hwmod omap44xx_uart4_hwmod = {
4799 .name = "uart4",
4800 .class = &omap44xx_uart_hwmod_class,
4801 .mpu_irqs = omap44xx_uart4_irqs,
4802 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_uart4_irqs),
4803 .sdma_reqs = omap44xx_uart4_sdma_reqs,
4804 .sdma_reqs_cnt = ARRAY_SIZE(omap44xx_uart4_sdma_reqs),
4805 .main_clk = "uart4_fck",
4806 .prcm = {
4807 .omap4 = {
4808 .clkctrl_reg = OMAP4430_CM_L4PER_UART4_CLKCTRL,
4809 },
4810 },
4811 .slaves = omap44xx_uart4_slaves,
4812 .slaves_cnt = ARRAY_SIZE(omap44xx_uart4_slaves),
4813 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4814};
4815
4816/*
4817 * 'usb_otg_hs' class
4818 * high-speed on-the-go universal serial bus (usb_otg_hs) controller
4819 */
4820
4821static struct omap_hwmod_class_sysconfig omap44xx_usb_otg_hs_sysc = {
4822 .rev_offs = 0x0400,
4823 .sysc_offs = 0x0404,
4824 .syss_offs = 0x0408,
4825 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
4826 SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
4827 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
4828 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4829 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
4830 MSTANDBY_SMART),
4831 .sysc_fields = &omap_hwmod_sysc_type1,
4832};
4833
4834static struct omap_hwmod_class omap44xx_usb_otg_hs_hwmod_class = {
4835 .name = "usb_otg_hs",
4836 .sysc = &omap44xx_usb_otg_hs_sysc,
4837};
4838
4839/* usb_otg_hs */
4840static struct omap_hwmod_irq_info omap44xx_usb_otg_hs_irqs[] = {
4841 { .name = "mc", .irq = 92 + OMAP44XX_IRQ_GIC_START },
4842 { .name = "dma", .irq = 93 + OMAP44XX_IRQ_GIC_START },
4843};
4844
4845/* usb_otg_hs master ports */
4846static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_masters[] = {
4847 &omap44xx_usb_otg_hs__l3_main_2,
4848};
4849
4850static struct omap_hwmod_addr_space omap44xx_usb_otg_hs_addrs[] = {
4851 {
4852 .pa_start = 0x4a0ab000,
4853 .pa_end = 0x4a0ab003,
4854 .flags = ADDR_TYPE_RT
4855 },
4856};
4857
4858/* l4_cfg -> usb_otg_hs */
4859static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_otg_hs = {
4860 .master = &omap44xx_l4_cfg_hwmod,
4861 .slave = &omap44xx_usb_otg_hs_hwmod,
4862 .clk = "l4_div_ck",
4863 .addr = omap44xx_usb_otg_hs_addrs,
4864 .addr_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_addrs),
4865 .user = OCP_USER_MPU | OCP_USER_SDMA,
4866};
4867
4868/* usb_otg_hs slave ports */
4869static struct omap_hwmod_ocp_if *omap44xx_usb_otg_hs_slaves[] = {
4870 &omap44xx_l4_cfg__usb_otg_hs,
4871};
4872
4873static struct omap_hwmod_opt_clk usb_otg_hs_opt_clks[] = {
4874 { .role = "xclk", .clk = "usb_otg_hs_xclk" },
4875};
4876
4877static struct omap_hwmod omap44xx_usb_otg_hs_hwmod = {
4878 .name = "usb_otg_hs",
4879 .class = &omap44xx_usb_otg_hs_hwmod_class,
4880 .flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
4881 .mpu_irqs = omap44xx_usb_otg_hs_irqs,
4882 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_irqs),
4883 .main_clk = "usb_otg_hs_ick",
4884 .prcm = {
4885 .omap4 = {
4886 .clkctrl_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
4887 },
4888 },
4889 .opt_clks = usb_otg_hs_opt_clks,
4890 .opt_clks_cnt = ARRAY_SIZE(usb_otg_hs_opt_clks),
4891 .slaves = omap44xx_usb_otg_hs_slaves,
4892 .slaves_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_slaves),
4893 .masters = omap44xx_usb_otg_hs_masters,
4894 .masters_cnt = ARRAY_SIZE(omap44xx_usb_otg_hs_masters),
4895 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4896};
4897
4898/*
4899 * 'wd_timer' class
4900 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
4901 * overflow condition
4902 */
4903
4904static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = {
4905 .rev_offs = 0x0000,
4906 .sysc_offs = 0x0010,
4907 .syss_offs = 0x0014,
4908 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
4909 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
4910 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
4911 SIDLE_SMART_WKUP),
4912 .sysc_fields = &omap_hwmod_sysc_type1,
4913};
4914
4915static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
4916 .name = "wd_timer",
4917 .sysc = &omap44xx_wd_timer_sysc,
4918 .pre_shutdown = &omap2_wd_timer_disable,
4919};
4920
4921/* wd_timer2 */
4922static struct omap_hwmod omap44xx_wd_timer2_hwmod;
4923static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
4924 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
4925};
4926
4927static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = {
4928 {
4929 .pa_start = 0x4a314000,
4930 .pa_end = 0x4a31407f,
4931 .flags = ADDR_TYPE_RT
4932 },
4933};
4934
4935/* l4_wkup -> wd_timer2 */
4936static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = {
4937 .master = &omap44xx_l4_wkup_hwmod,
4938 .slave = &omap44xx_wd_timer2_hwmod,
4939 .clk = "l4_wkup_clk_mux_ck",
4940 .addr = omap44xx_wd_timer2_addrs,
4941 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer2_addrs),
4942 .user = OCP_USER_MPU | OCP_USER_SDMA,
4943};
4944
4945/* wd_timer2 slave ports */
4946static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
4947 &omap44xx_l4_wkup__wd_timer2,
4948};
4949
4950static struct omap_hwmod omap44xx_wd_timer2_hwmod = {
4951 .name = "wd_timer2",
4952 .class = &omap44xx_wd_timer_hwmod_class,
4953 .mpu_irqs = omap44xx_wd_timer2_irqs,
4954 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer2_irqs),
4955 .main_clk = "wd_timer2_fck",
4956 .prcm = {
4957 .omap4 = {
4958 .clkctrl_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
4959 },
4960 },
4961 .slaves = omap44xx_wd_timer2_slaves,
4962 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves),
4963 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
4964};
4965
4966/* wd_timer3 */
4967static struct omap_hwmod omap44xx_wd_timer3_hwmod;
4968static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
4969 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
4970};
4971
4972static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = {
4973 {
4974 .pa_start = 0x40130000,
4975 .pa_end = 0x4013007f,
4976 .flags = ADDR_TYPE_RT
4977 },
4978};
4979
4980/* l4_abe -> wd_timer3 */
4981static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = {
4982 .master = &omap44xx_l4_abe_hwmod,
4983 .slave = &omap44xx_wd_timer3_hwmod,
4984 .clk = "ocp_abe_iclk",
4985 .addr = omap44xx_wd_timer3_addrs,
4986 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_addrs),
4987 .user = OCP_USER_MPU,
4988};
4989
4990static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = {
4991 {
4992 .pa_start = 0x49030000,
4993 .pa_end = 0x4903007f,
4994 .flags = ADDR_TYPE_RT
4995 },
4996};
4997
4998/* l4_abe -> wd_timer3 (dma) */
4999static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = {
5000 .master = &omap44xx_l4_abe_hwmod,
5001 .slave = &omap44xx_wd_timer3_hwmod,
5002 .clk = "ocp_abe_iclk",
5003 .addr = omap44xx_wd_timer3_dma_addrs,
5004 .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_dma_addrs),
5005 .user = OCP_USER_SDMA,
5006};
5007
5008/* wd_timer3 slave ports */
5009static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
5010 &omap44xx_l4_abe__wd_timer3,
5011 &omap44xx_l4_abe__wd_timer3_dma,
5012};
5013
5014static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
5015 .name = "wd_timer3",
5016 .class = &omap44xx_wd_timer_hwmod_class,
5017 .mpu_irqs = omap44xx_wd_timer3_irqs,
5018 .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer3_irqs),
5019 .main_clk = "wd_timer3_fck",
5020 .prcm = {
5021 .omap4 = {
5022 .clkctrl_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
5023 },
5024 },
5025 .slaves = omap44xx_wd_timer3_slaves,
5026 .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves),
5027 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
5028};
5029
5030static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
5031
5032 /* dmm class */
5033 &omap44xx_dmm_hwmod,
5034
5035 /* emif_fw class */
5036 &omap44xx_emif_fw_hwmod,
5037
5038 /* l3 class */
5039 &omap44xx_l3_instr_hwmod,
5040 &omap44xx_l3_main_1_hwmod,
5041 &omap44xx_l3_main_2_hwmod,
5042 &omap44xx_l3_main_3_hwmod,
5043
5044 /* l4 class */
5045 &omap44xx_l4_abe_hwmod,
5046 &omap44xx_l4_cfg_hwmod,
5047 &omap44xx_l4_per_hwmod,
5048 &omap44xx_l4_wkup_hwmod,
5049
5050 /* mpu_bus class */
5051 &omap44xx_mpu_private_hwmod,
5052
5053 /* aess class */
5054/* &omap44xx_aess_hwmod, */
5055
5056 /* bandgap class */
5057 &omap44xx_bandgap_hwmod,
5058
5059 /* counter class */
5060/* &omap44xx_counter_32k_hwmod, */
5061
5062 /* dma class */
5063 &omap44xx_dma_system_hwmod,
5064
5065 /* dmic class */
5066 &omap44xx_dmic_hwmod,
5067
5068 /* dsp class */
5069 &omap44xx_dsp_hwmod,
5070 &omap44xx_dsp_c0_hwmod,
5071
5072 /* dss class */
5073 &omap44xx_dss_hwmod,
5074 &omap44xx_dss_dispc_hwmod,
5075 &omap44xx_dss_dsi1_hwmod,
5076 &omap44xx_dss_dsi2_hwmod,
5077 &omap44xx_dss_hdmi_hwmod,
5078 &omap44xx_dss_rfbi_hwmod,
5079 &omap44xx_dss_venc_hwmod,
5080
5081 /* gpio class */
5082 &omap44xx_gpio1_hwmod,
5083 &omap44xx_gpio2_hwmod,
5084 &omap44xx_gpio3_hwmod,
5085 &omap44xx_gpio4_hwmod,
5086 &omap44xx_gpio5_hwmod,
5087 &omap44xx_gpio6_hwmod,
5088
5089 /* hsi class */
5090/* &omap44xx_hsi_hwmod, */
5091
5092 /* i2c class */
5093 &omap44xx_i2c1_hwmod,
5094 &omap44xx_i2c2_hwmod,
5095 &omap44xx_i2c3_hwmod,
5096 &omap44xx_i2c4_hwmod,
5097
5098 /* ipu class */
5099 &omap44xx_ipu_hwmod,
5100 &omap44xx_ipu_c0_hwmod,
5101 &omap44xx_ipu_c1_hwmod,
5102
5103 /* iss class */
5104/* &omap44xx_iss_hwmod, */
5105
5106 /* iva class */
5107 &omap44xx_iva_hwmod,
5108 &omap44xx_iva_seq0_hwmod,
5109 &omap44xx_iva_seq1_hwmod,
5110
5111 /* kbd class */
5112 &omap44xx_kbd_hwmod,
5113
5114 /* mailbox class */
5115 &omap44xx_mailbox_hwmod,
5116
5117 /* mcbsp class */
5118 &omap44xx_mcbsp1_hwmod,
5119 &omap44xx_mcbsp2_hwmod,
5120 &omap44xx_mcbsp3_hwmod,
5121 &omap44xx_mcbsp4_hwmod,
5122
5123 /* mcpdm class */
5124/* &omap44xx_mcpdm_hwmod, */
5125
5126 /* mcspi class */
5127 &omap44xx_mcspi1_hwmod,
5128 &omap44xx_mcspi2_hwmod,
5129 &omap44xx_mcspi3_hwmod,
5130 &omap44xx_mcspi4_hwmod,
5131
5132 /* mmc class */
5133 &omap44xx_mmc1_hwmod,
5134 &omap44xx_mmc2_hwmod,
5135 &omap44xx_mmc3_hwmod,
5136 &omap44xx_mmc4_hwmod,
5137 &omap44xx_mmc5_hwmod,
5138
5139 /* mpu class */
5140 &omap44xx_mpu_hwmod,
5141
5142 /* smartreflex class */
5143 &omap44xx_smartreflex_core_hwmod,
5144 &omap44xx_smartreflex_iva_hwmod,
5145 &omap44xx_smartreflex_mpu_hwmod,
5146
5147 /* spinlock class */
5148 &omap44xx_spinlock_hwmod,
5149
5150 /* timer class */
5151 &omap44xx_timer1_hwmod,
5152 &omap44xx_timer2_hwmod,
5153 &omap44xx_timer3_hwmod,
5154 &omap44xx_timer4_hwmod,
5155 &omap44xx_timer5_hwmod,
5156 &omap44xx_timer6_hwmod,
5157 &omap44xx_timer7_hwmod,
5158 &omap44xx_timer8_hwmod,
5159 &omap44xx_timer9_hwmod,
5160 &omap44xx_timer10_hwmod,
5161 &omap44xx_timer11_hwmod,
5162
5163 /* uart class */
5164 &omap44xx_uart1_hwmod,
5165 &omap44xx_uart2_hwmod,
5166 &omap44xx_uart3_hwmod,
5167 &omap44xx_uart4_hwmod,
5168
5169 /* usb_otg_hs class */
5170 &omap44xx_usb_otg_hs_hwmod,
5171
5172 /* wd_timer class */
5173 &omap44xx_wd_timer2_hwmod,
5174 &omap44xx_wd_timer3_hwmod,
5175
5176 NULL,
5177};
5178
5179int __init omap44xx_hwmod_init(void)
5180{
5181 return omap_hwmod_register(omap44xx_hwmods);
5182}
5183
diff --git a/arch/arm/mach-omap2/omap_l3_noc.c b/arch/arm/mach-omap2/omap_l3_noc.c
new file mode 100644
index 000000000000..7b9f1909ddb2
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_l3_noc.c
@@ -0,0 +1,248 @@
1/*
2 * OMAP4XXX L3 Interconnect error handling driver
3 *
4 * Copyright (C) 2011 Texas Corporation
5 * Santosh Shilimkar <santosh.shilimkar@ti.com>
6 * Sricharan <r.sricharan@ti.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 as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 * USA
22 */
23#include <linux/init.h>
24#include <linux/io.h>
25#include <linux/platform_device.h>
26#include <linux/interrupt.h>
27#include <linux/kernel.h>
28#include <linux/slab.h>
29
30#include "omap_l3_noc.h"
31
32/*
33 * Interrupt Handler for L3 error detection.
34 * 1) Identify the L3 clockdomain partition to which the error belongs to.
35 * 2) Identify the slave where the error information is logged
36 * 3) Print the logged information.
37 * 4) Add dump stack to provide kernel trace.
38 *
39 * Two Types of errors :
40 * 1) Custom errors in L3 :
41 * Target like DMM/FW/EMIF generates SRESP=ERR error
42 * 2) Standard L3 error:
43 * - Unsupported CMD.
44 * L3 tries to access target while it is idle
45 * - OCP disconnect.
46 * - Address hole error:
47 * If DSS/ISS/FDIF/USBHOSTFS access a target where they
48 * do not have connectivity, the error is logged in
49 * their default target which is DMM2.
50 *
51 * On High Secure devices, firewall errors are possible and those
52 * can be trapped as well. But the trapping is implemented as part
53 * secure software and hence need not be implemented here.
54 */
55static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
56{
57
58 struct omap4_l3 *l3 = _l3;
59 int inttype, i, j;
60 int err_src = 0;
61 u32 std_err_main_addr, std_err_main, err_reg;
62 u32 base, slave_addr, clear;
63 char *source_name;
64
65 /* Get the Type of interrupt */
66 inttype = irq == l3->app_irq ? L3_APPLICATION_ERROR : L3_DEBUG_ERROR;
67
68 for (i = 0; i < L3_MODULES; i++) {
69 /*
70 * Read the regerr register of the clock domain
71 * to determine the source
72 */
73 base = (u32)l3->l3_base[i];
74 err_reg = readl(base + l3_flagmux[i] + (inttype << 3));
75
76 /* Get the corresponding error and analyse */
77 if (err_reg) {
78 /* Identify the source from control status register */
79 for (j = 0; !(err_reg & (1 << j)); j++)
80 ;
81
82 err_src = j;
83 /* Read the stderrlog_main_source from clk domain */
84 std_err_main_addr = base + *(l3_targ[i] + err_src);
85 std_err_main = readl(std_err_main_addr);
86
87 switch (std_err_main & CUSTOM_ERROR) {
88 case STANDARD_ERROR:
89 source_name =
90 l3_targ_stderrlog_main_name[i][err_src];
91
92 slave_addr = std_err_main_addr +
93 L3_SLAVE_ADDRESS_OFFSET;
94 WARN(true, "L3 standard error: SOURCE:%s at address 0x%x\n",
95 source_name, readl(slave_addr));
96 /* clear the std error log*/
97 clear = std_err_main | CLEAR_STDERR_LOG;
98 writel(clear, std_err_main_addr);
99 break;
100
101 case CUSTOM_ERROR:
102 source_name =
103 l3_targ_stderrlog_main_name[i][err_src];
104
105 WARN(true, "CUSTOM SRESP error with SOURCE:%s\n",
106 source_name);
107 /* clear the std error log*/
108 clear = std_err_main | CLEAR_STDERR_LOG;
109 writel(clear, std_err_main_addr);
110 break;
111
112 default:
113 /* Nothing to be handled here as of now */
114 break;
115 }
116 /* Error found so break the for loop */
117 break;
118 }
119 }
120 return IRQ_HANDLED;
121}
122
123static int __init omap4_l3_probe(struct platform_device *pdev)
124{
125 static struct omap4_l3 *l3;
126 struct resource *res;
127 int ret;
128 int irq;
129
130 l3 = kzalloc(sizeof(*l3), GFP_KERNEL);
131 if (!l3)
132 return -ENOMEM;
133
134 platform_set_drvdata(pdev, l3);
135 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
136 if (!res) {
137 dev_err(&pdev->dev, "couldn't find resource 0\n");
138 ret = -ENODEV;
139 goto err0;
140 }
141
142 l3->l3_base[0] = ioremap(res->start, resource_size(res));
143 if (!l3->l3_base[0]) {
144 dev_err(&pdev->dev, "ioremap failed\n");
145 ret = -ENOMEM;
146 goto err0;
147 }
148
149 res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
150 if (!res) {
151 dev_err(&pdev->dev, "couldn't find resource 1\n");
152 ret = -ENODEV;
153 goto err1;
154 }
155
156 l3->l3_base[1] = ioremap(res->start, resource_size(res));
157 if (!l3->l3_base[1]) {
158 dev_err(&pdev->dev, "ioremap failed\n");
159 ret = -ENOMEM;
160 goto err1;
161 }
162
163 res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
164 if (!res) {
165 dev_err(&pdev->dev, "couldn't find resource 2\n");
166 ret = -ENODEV;
167 goto err2;
168 }
169
170 l3->l3_base[2] = ioremap(res->start, resource_size(res));
171 if (!l3->l3_base[2]) {
172 dev_err(&pdev->dev, "ioremap failed\n");
173 ret = -ENOMEM;
174 goto err2;
175 }
176
177 /*
178 * Setup interrupt Handlers
179 */
180 irq = platform_get_irq(pdev, 0);
181 ret = request_irq(irq,
182 l3_interrupt_handler,
183 IRQF_DISABLED, "l3-dbg-irq", l3);
184 if (ret) {
185 pr_crit("L3: request_irq failed to register for 0x%x\n",
186 OMAP44XX_IRQ_L3_DBG);
187 goto err3;
188 }
189 l3->debug_irq = irq;
190
191 irq = platform_get_irq(pdev, 1);
192 ret = request_irq(irq,
193 l3_interrupt_handler,
194 IRQF_DISABLED, "l3-app-irq", l3);
195 if (ret) {
196 pr_crit("L3: request_irq failed to register for 0x%x\n",
197 OMAP44XX_IRQ_L3_APP);
198 goto err4;
199 }
200 l3->app_irq = irq;
201
202 return 0;
203
204err4:
205 free_irq(l3->debug_irq, l3);
206err3:
207 iounmap(l3->l3_base[2]);
208err2:
209 iounmap(l3->l3_base[1]);
210err1:
211 iounmap(l3->l3_base[0]);
212err0:
213 kfree(l3);
214 return ret;
215}
216
217static int __exit omap4_l3_remove(struct platform_device *pdev)
218{
219 struct omap4_l3 *l3 = platform_get_drvdata(pdev);
220
221 free_irq(l3->app_irq, l3);
222 free_irq(l3->debug_irq, l3);
223 iounmap(l3->l3_base[0]);
224 iounmap(l3->l3_base[1]);
225 iounmap(l3->l3_base[2]);
226 kfree(l3);
227
228 return 0;
229}
230
231static struct platform_driver omap4_l3_driver = {
232 .remove = __exit_p(omap4_l3_remove),
233 .driver = {
234 .name = "omap_l3_noc",
235 },
236};
237
238static int __init omap4_l3_init(void)
239{
240 return platform_driver_probe(&omap4_l3_driver, omap4_l3_probe);
241}
242postcore_initcall_sync(omap4_l3_init);
243
244static void __exit omap4_l3_exit(void)
245{
246 platform_driver_unregister(&omap4_l3_driver);
247}
248module_exit(omap4_l3_exit);
diff --git a/arch/arm/mach-omap2/omap_l3_noc.h b/arch/arm/mach-omap2/omap_l3_noc.h
new file mode 100644
index 000000000000..359b83348aed
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_l3_noc.h
@@ -0,0 +1,132 @@
1 /*
2 * OMAP4XXX L3 Interconnect error handling driver header
3 *
4 * Copyright (C) 2011 Texas Corporation
5 * Santosh Shilimkar <santosh.shilimkar@ti.com>
6 * sricharan <r.sricharan@ti.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 as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 * USA
22 */
23#ifndef __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
24#define __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
25
26/*
27 * L3 register offsets
28 */
29#define L3_MODULES 3
30#define CLEAR_STDERR_LOG (1 << 31)
31#define CUSTOM_ERROR 0x2
32#define STANDARD_ERROR 0x0
33#define INBAND_ERROR 0x0
34#define EMIF_KERRLOG_OFFSET 0x10
35#define L3_SLAVE_ADDRESS_OFFSET 0x14
36#define LOGICAL_ADDR_ERRORLOG 0x4
37#define L3_APPLICATION_ERROR 0x0
38#define L3_DEBUG_ERROR 0x1
39
40u32 l3_flagmux[L3_MODULES] = {
41 0x50C,
42 0x100C,
43 0X020C
44};
45
46/*
47 * L3 Target standard Error register offsets
48 */
49u32 l3_targ_stderrlog_main_clk1[] = {
50 0x148, /* DMM1 */
51 0x248, /* DMM2 */
52 0x348, /* ABE */
53 0x448, /* L4CFG */
54 0x648 /* CLK2 PWR DISC */
55};
56
57u32 l3_targ_stderrlog_main_clk2[] = {
58 0x548, /* CORTEX M3 */
59 0x348, /* DSS */
60 0x148, /* GPMC */
61 0x448, /* ISS */
62 0x748, /* IVAHD */
63 0xD48, /* missing in TRM corresponds to AES1*/
64 0x948, /* L4 PER0*/
65 0x248, /* OCMRAM */
66 0x148, /* missing in TRM corresponds to GPMC sERROR*/
67 0x648, /* SGX */
68 0x848, /* SL2 */
69 0x1648, /* C2C */
70 0x1148, /* missing in TRM corresponds PWR DISC CLK1*/
71 0xF48, /* missing in TRM corrsponds to SHA1*/
72 0xE48, /* missing in TRM corresponds to AES2*/
73 0xC48, /* L4 PER3 */
74 0xA48, /* L4 PER1*/
75 0xB48 /* L4 PER2*/
76};
77
78u32 l3_targ_stderrlog_main_clk3[] = {
79 0x0148 /* EMUSS */
80};
81
82char *l3_targ_stderrlog_main_name[L3_MODULES][18] = {
83 {
84 "DMM1",
85 "DMM2",
86 "ABE",
87 "L4CFG",
88 "CLK2 PWR DISC",
89 },
90 {
91 "CORTEX M3" ,
92 "DSS ",
93 "GPMC ",
94 "ISS ",
95 "IVAHD ",
96 "AES1",
97 "L4 PER0",
98 "OCMRAM ",
99 "GPMC sERROR",
100 "SGX ",
101 "SL2 ",
102 "C2C ",
103 "PWR DISC CLK1",
104 "SHA1",
105 "AES2",
106 "L4 PER3",
107 "L4 PER1",
108 "L4 PER2",
109 },
110 {
111 "EMUSS",
112 },
113};
114
115u32 *l3_targ[L3_MODULES] = {
116 l3_targ_stderrlog_main_clk1,
117 l3_targ_stderrlog_main_clk2,
118 l3_targ_stderrlog_main_clk3,
119};
120
121struct omap4_l3 {
122 struct device *dev;
123 struct clk *ick;
124
125 /* memory base */
126 void __iomem *l3_base[4];
127
128 int debug_irq;
129 int app_irq;
130};
131
132#endif
diff --git a/arch/arm/mach-omap2/omap_l3_smx.c b/arch/arm/mach-omap2/omap_l3_smx.c
new file mode 100644
index 000000000000..873c0e33b512
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_l3_smx.c
@@ -0,0 +1,299 @@
1 /*
2 * OMAP3XXX L3 Interconnect Driver
3 *
4 * Copyright (C) 2011 Texas Corporation
5 * Felipe Balbi <balbi@ti.com>
6 * Santosh Shilimkar <santosh.shilimkar@ti.com>
7 * Sricharan <r.sricharan@ti.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22 * USA
23 */
24
25#include <linux/kernel.h>
26#include <linux/slab.h>
27#include <linux/platform_device.h>
28#include <linux/interrupt.h>
29#include <linux/io.h>
30#include "omap_l3_smx.h"
31
32static inline u64 omap3_l3_readll(void __iomem *base, u16 reg)
33{
34 return __raw_readll(base + reg);
35}
36
37static inline void omap3_l3_writell(void __iomem *base, u16 reg, u64 value)
38{
39 __raw_writell(value, base + reg);
40}
41
42static inline enum omap3_l3_code omap3_l3_decode_error_code(u64 error)
43{
44 return (error & 0x0f000000) >> L3_ERROR_LOG_CODE;
45}
46
47static inline u32 omap3_l3_decode_addr(u64 error_addr)
48{
49 return error_addr & 0xffffffff;
50}
51
52static inline unsigned omap3_l3_decode_cmd(u64 error)
53{
54 return (error & 0x07) >> L3_ERROR_LOG_CMD;
55}
56
57static inline enum omap3_l3_initiator_id omap3_l3_decode_initid(u64 error)
58{
59 return (error & 0xff00) >> L3_ERROR_LOG_INITID;
60}
61
62static inline unsigned omap3_l3_decode_req_info(u64 error)
63{
64 return (error >> 32) & 0xffff;
65}
66
67static char *omap3_l3_code_string(u8 code)
68{
69 switch (code) {
70 case OMAP_L3_CODE_NOERROR:
71 return "No Error";
72 case OMAP_L3_CODE_UNSUP_CMD:
73 return "Unsupported Command";
74 case OMAP_L3_CODE_ADDR_HOLE:
75 return "Address Hole";
76 case OMAP_L3_CODE_PROTECT_VIOLATION:
77 return "Protection Violation";
78 case OMAP_L3_CODE_IN_BAND_ERR:
79 return "In-band Error";
80 case OMAP_L3_CODE_REQ_TOUT_NOT_ACCEPT:
81 return "Request Timeout Not Accepted";
82 case OMAP_L3_CODE_REQ_TOUT_NO_RESP:
83 return "Request Timeout, no response";
84 default:
85 return "UNKNOWN error";
86 }
87}
88
89static char *omap3_l3_initiator_string(u8 initid)
90{
91 switch (initid) {
92 case OMAP_L3_LCD:
93 return "LCD";
94 case OMAP_L3_SAD2D:
95 return "SAD2D";
96 case OMAP_L3_IA_MPU_SS_1:
97 case OMAP_L3_IA_MPU_SS_2:
98 case OMAP_L3_IA_MPU_SS_3:
99 case OMAP_L3_IA_MPU_SS_4:
100 case OMAP_L3_IA_MPU_SS_5:
101 return "MPU";
102 case OMAP_L3_IA_IVA_SS_1:
103 case OMAP_L3_IA_IVA_SS_2:
104 case OMAP_L3_IA_IVA_SS_3:
105 return "IVA_SS";
106 case OMAP_L3_IA_IVA_SS_DMA_1:
107 case OMAP_L3_IA_IVA_SS_DMA_2:
108 case OMAP_L3_IA_IVA_SS_DMA_3:
109 case OMAP_L3_IA_IVA_SS_DMA_4:
110 case OMAP_L3_IA_IVA_SS_DMA_5:
111 case OMAP_L3_IA_IVA_SS_DMA_6:
112 return "IVA_SS_DMA";
113 case OMAP_L3_IA_SGX:
114 return "SGX";
115 case OMAP_L3_IA_CAM_1:
116 case OMAP_L3_IA_CAM_2:
117 case OMAP_L3_IA_CAM_3:
118 return "CAM";
119 case OMAP_L3_IA_DAP:
120 return "DAP";
121 case OMAP_L3_SDMA_WR_1:
122 case OMAP_L3_SDMA_WR_2:
123 return "SDMA_WR";
124 case OMAP_L3_SDMA_RD_1:
125 case OMAP_L3_SDMA_RD_2:
126 case OMAP_L3_SDMA_RD_3:
127 case OMAP_L3_SDMA_RD_4:
128 return "SDMA_RD";
129 case OMAP_L3_USBOTG:
130 return "USB_OTG";
131 case OMAP_L3_USBHOST:
132 return "USB_HOST";
133 default:
134 return "UNKNOWN Initiator";
135 }
136}
137
138/**
139 * omap3_l3_block_irq - handles a register block's irq
140 * @l3: struct omap3_l3 *
141 * @base: register block base address
142 * @error: L3_ERROR_LOG register of our block
143 *
144 * Called in hard-irq context. Caller should take care of locking
145 *
146 * OMAP36xx TRM gives, on page 2001, Figure 9-10, the Typical Error
147 * Analysis Sequence, we are following that sequence here, please
148 * refer to that Figure for more information on the subject.
149 */
150static irqreturn_t omap3_l3_block_irq(struct omap3_l3 *l3,
151 u64 error, int error_addr)
152{
153 u8 code = omap3_l3_decode_error_code(error);
154 u8 initid = omap3_l3_decode_initid(error);
155 u8 multi = error & L3_ERROR_LOG_MULTI;
156 u32 address = omap3_l3_decode_addr(error_addr);
157
158 WARN(true, "%s seen by %s %s at address %x\n",
159 omap3_l3_code_string(code),
160 omap3_l3_initiator_string(initid),
161 multi ? "Multiple Errors" : "",
162 address);
163
164 return IRQ_HANDLED;
165}
166
167static irqreturn_t omap3_l3_app_irq(int irq, void *_l3)
168{
169 struct omap3_l3 *l3 = _l3;
170 u64 status, clear;
171 u64 error;
172 u64 error_addr;
173 u64 err_source = 0;
174 void __iomem *base;
175 int int_type;
176 irqreturn_t ret = IRQ_NONE;
177
178 int_type = irq == l3->app_irq ? L3_APPLICATION_ERROR : L3_DEBUG_ERROR;
179 if (!int_type) {
180 status = omap3_l3_readll(l3->rt, L3_SI_FLAG_STATUS_0);
181 /*
182 * if we have a timeout error, there's nothing we can
183 * do besides rebooting the board. So let's BUG on any
184 * of such errors and handle the others. timeout error
185 * is severe and not expected to occur.
186 */
187 BUG_ON(status & L3_STATUS_0_TIMEOUT_MASK);
188 } else {
189 status = omap3_l3_readll(l3->rt, L3_SI_FLAG_STATUS_1);
190 /* No timeout error for debug sources */
191 }
192
193 /* identify the error source */
194 for (err_source = 0; !(status & (1 << err_source)); err_source++)
195 ;
196
197 base = l3->rt + *(omap3_l3_bases[int_type] + err_source);
198 error = omap3_l3_readll(base, L3_ERROR_LOG);
199 if (error) {
200 error_addr = omap3_l3_readll(base, L3_ERROR_LOG_ADDR);
201
202 ret |= omap3_l3_block_irq(l3, error, error_addr);
203 }
204
205 /* Clear the status register */
206 clear = (L3_AGENT_STATUS_CLEAR_IA << int_type) |
207 L3_AGENT_STATUS_CLEAR_TA;
208 omap3_l3_writell(base, L3_AGENT_STATUS, clear);
209
210 /* clear the error log register */
211 omap3_l3_writell(base, L3_ERROR_LOG, error);
212
213 return ret;
214}
215
216static int __init omap3_l3_probe(struct platform_device *pdev)
217{
218 struct omap3_l3 *l3;
219 struct resource *res;
220 int ret;
221
222 l3 = kzalloc(sizeof(*l3), GFP_KERNEL);
223 if (!l3)
224 return -ENOMEM;
225
226 platform_set_drvdata(pdev, l3);
227
228 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
229 if (!res) {
230 dev_err(&pdev->dev, "couldn't find resource\n");
231 ret = -ENODEV;
232 goto err0;
233 }
234 l3->rt = ioremap(res->start, resource_size(res));
235 if (!l3->rt) {
236 dev_err(&pdev->dev, "ioremap failed\n");
237 ret = -ENOMEM;
238 goto err0;
239 }
240
241 l3->debug_irq = platform_get_irq(pdev, 0);
242 ret = request_irq(l3->debug_irq, omap3_l3_app_irq,
243 IRQF_DISABLED | IRQF_TRIGGER_RISING,
244 "l3-debug-irq", l3);
245 if (ret) {
246 dev_err(&pdev->dev, "couldn't request debug irq\n");
247 goto err1;
248 }
249
250 l3->app_irq = platform_get_irq(pdev, 1);
251 ret = request_irq(l3->app_irq, omap3_l3_app_irq,
252 IRQF_DISABLED | IRQF_TRIGGER_RISING,
253 "l3-app-irq", l3);
254 if (ret) {
255 dev_err(&pdev->dev, "couldn't request app irq\n");
256 goto err2;
257 }
258
259 return 0;
260
261err2:
262 free_irq(l3->debug_irq, l3);
263err1:
264 iounmap(l3->rt);
265err0:
266 kfree(l3);
267 return ret;
268}
269
270static int __exit omap3_l3_remove(struct platform_device *pdev)
271{
272 struct omap3_l3 *l3 = platform_get_drvdata(pdev);
273
274 free_irq(l3->app_irq, l3);
275 free_irq(l3->debug_irq, l3);
276 iounmap(l3->rt);
277 kfree(l3);
278
279 return 0;
280}
281
282static struct platform_driver omap3_l3_driver = {
283 .remove = __exit_p(omap3_l3_remove),
284 .driver = {
285 .name = "omap_l3_smx",
286 },
287};
288
289static int __init omap3_l3_init(void)
290{
291 return platform_driver_probe(&omap3_l3_driver, omap3_l3_probe);
292}
293postcore_initcall_sync(omap3_l3_init);
294
295static void __exit omap3_l3_exit(void)
296{
297 platform_driver_unregister(&omap3_l3_driver);
298}
299module_exit(omap3_l3_exit);
diff --git a/arch/arm/mach-omap2/omap_l3_smx.h b/arch/arm/mach-omap2/omap_l3_smx.h
new file mode 100644
index 000000000000..ba2ed9a850cc
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_l3_smx.h
@@ -0,0 +1,338 @@
1 /*
2 * OMAP3XXX L3 Interconnect Driver header
3 *
4 * Copyright (C) 2011 Texas Corporation
5 * Felipe Balbi <balbi@ti.com>
6 * Santosh Shilimkar <santosh.shilimkar@ti.com>
7 * sricharan <r.sricharan@ti.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22 * USA
23 */
24#ifndef __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
25#define __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H
26
27/* Register definitions. All 64-bit wide */
28#define L3_COMPONENT 0x000
29#define L3_CORE 0x018
30#define L3_AGENT_CONTROL 0x020
31#define L3_AGENT_STATUS 0x028
32#define L3_ERROR_LOG 0x058
33
34#define L3_ERROR_LOG_MULTI (1 << 31)
35#define L3_ERROR_LOG_SECONDARY (1 << 30)
36
37#define L3_ERROR_LOG_ADDR 0x060
38
39/* Register definitions for Sideband Interconnect */
40#define L3_SI_CONTROL 0x020
41#define L3_SI_FLAG_STATUS_0 0x510
42
43const u64 shift = 1;
44
45#define L3_STATUS_0_MPUIA_BRST (shift << 0)
46#define L3_STATUS_0_MPUIA_RSP (shift << 1)
47#define L3_STATUS_0_MPUIA_INBAND (shift << 2)
48#define L3_STATUS_0_IVAIA_BRST (shift << 6)
49#define L3_STATUS_0_IVAIA_RSP (shift << 7)
50#define L3_STATUS_0_IVAIA_INBAND (shift << 8)
51#define L3_STATUS_0_SGXIA_BRST (shift << 9)
52#define L3_STATUS_0_SGXIA_RSP (shift << 10)
53#define L3_STATUS_0_SGXIA_MERROR (shift << 11)
54#define L3_STATUS_0_CAMIA_BRST (shift << 12)
55#define L3_STATUS_0_CAMIA_RSP (shift << 13)
56#define L3_STATUS_0_CAMIA_INBAND (shift << 14)
57#define L3_STATUS_0_DISPIA_BRST (shift << 15)
58#define L3_STATUS_0_DISPIA_RSP (shift << 16)
59#define L3_STATUS_0_DMARDIA_BRST (shift << 18)
60#define L3_STATUS_0_DMARDIA_RSP (shift << 19)
61#define L3_STATUS_0_DMAWRIA_BRST (shift << 21)
62#define L3_STATUS_0_DMAWRIA_RSP (shift << 22)
63#define L3_STATUS_0_USBOTGIA_BRST (shift << 24)
64#define L3_STATUS_0_USBOTGIA_RSP (shift << 25)
65#define L3_STATUS_0_USBOTGIA_INBAND (shift << 26)
66#define L3_STATUS_0_USBHOSTIA_BRST (shift << 27)
67#define L3_STATUS_0_USBHOSTIA_INBAND (shift << 28)
68#define L3_STATUS_0_SMSTA_REQ (shift << 48)
69#define L3_STATUS_0_GPMCTA_REQ (shift << 49)
70#define L3_STATUS_0_OCMRAMTA_REQ (shift << 50)
71#define L3_STATUS_0_OCMROMTA_REQ (shift << 51)
72#define L3_STATUS_0_IVATA_REQ (shift << 54)
73#define L3_STATUS_0_SGXTA_REQ (shift << 55)
74#define L3_STATUS_0_SGXTA_SERROR (shift << 56)
75#define L3_STATUS_0_GPMCTA_SERROR (shift << 57)
76#define L3_STATUS_0_L4CORETA_REQ (shift << 58)
77#define L3_STATUS_0_L4PERTA_REQ (shift << 59)
78#define L3_STATUS_0_L4EMUTA_REQ (shift << 60)
79#define L3_STATUS_0_MAD2DTA_REQ (shift << 61)
80
81#define L3_STATUS_0_TIMEOUT_MASK (L3_STATUS_0_MPUIA_BRST \
82 | L3_STATUS_0_MPUIA_RSP \
83 | L3_STATUS_0_IVAIA_BRST \
84 | L3_STATUS_0_IVAIA_RSP \
85 | L3_STATUS_0_SGXIA_BRST \
86 | L3_STATUS_0_SGXIA_RSP \
87 | L3_STATUS_0_CAMIA_BRST \
88 | L3_STATUS_0_CAMIA_RSP \
89 | L3_STATUS_0_DISPIA_BRST \
90 | L3_STATUS_0_DISPIA_RSP \
91 | L3_STATUS_0_DMARDIA_BRST \
92 | L3_STATUS_0_DMARDIA_RSP \
93 | L3_STATUS_0_DMAWRIA_BRST \
94 | L3_STATUS_0_DMAWRIA_RSP \
95 | L3_STATUS_0_USBOTGIA_BRST \
96 | L3_STATUS_0_USBOTGIA_RSP \
97 | L3_STATUS_0_USBHOSTIA_BRST \
98 | L3_STATUS_0_SMSTA_REQ \
99 | L3_STATUS_0_GPMCTA_REQ \
100 | L3_STATUS_0_OCMRAMTA_REQ \
101 | L3_STATUS_0_OCMROMTA_REQ \
102 | L3_STATUS_0_IVATA_REQ \
103 | L3_STATUS_0_SGXTA_REQ \
104 | L3_STATUS_0_L4CORETA_REQ \
105 | L3_STATUS_0_L4PERTA_REQ \
106 | L3_STATUS_0_L4EMUTA_REQ \
107 | L3_STATUS_0_MAD2DTA_REQ)
108
109#define L3_SI_FLAG_STATUS_1 0x530
110
111#define L3_STATUS_1_MPU_DATAIA (1 << 0)
112#define L3_STATUS_1_DAPIA0 (1 << 3)
113#define L3_STATUS_1_DAPIA1 (1 << 4)
114#define L3_STATUS_1_IVAIA (1 << 6)
115
116#define L3_PM_ERROR_LOG 0x020
117#define L3_PM_CONTROL 0x028
118#define L3_PM_ERROR_CLEAR_SINGLE 0x030
119#define L3_PM_ERROR_CLEAR_MULTI 0x038
120#define L3_PM_REQ_INFO_PERMISSION(n) (0x048 + (0x020 * n))
121#define L3_PM_READ_PERMISSION(n) (0x050 + (0x020 * n))
122#define L3_PM_WRITE_PERMISSION(n) (0x058 + (0x020 * n))
123#define L3_PM_ADDR_MATCH(n) (0x060 + (0x020 * n))
124
125/* L3 error log bit fields. Common for IA and TA */
126#define L3_ERROR_LOG_CODE 24
127#define L3_ERROR_LOG_INITID 8
128#define L3_ERROR_LOG_CMD 0
129
130/* L3 agent status bit fields. */
131#define L3_AGENT_STATUS_CLEAR_IA 0x10000000
132#define L3_AGENT_STATUS_CLEAR_TA 0x01000000
133
134#define OMAP34xx_IRQ_L3_APP 10
135#define L3_APPLICATION_ERROR 0x0
136#define L3_DEBUG_ERROR 0x1
137
138enum omap3_l3_initiator_id {
139 /* LCD has 1 ID */
140 OMAP_L3_LCD = 29,
141 /* SAD2D has 1 ID */
142 OMAP_L3_SAD2D = 28,
143 /* MPU has 5 IDs */
144 OMAP_L3_IA_MPU_SS_1 = 27,
145 OMAP_L3_IA_MPU_SS_2 = 26,
146 OMAP_L3_IA_MPU_SS_3 = 25,
147 OMAP_L3_IA_MPU_SS_4 = 24,
148 OMAP_L3_IA_MPU_SS_5 = 23,
149 /* IVA2.2 SS has 3 IDs*/
150 OMAP_L3_IA_IVA_SS_1 = 22,
151 OMAP_L3_IA_IVA_SS_2 = 21,
152 OMAP_L3_IA_IVA_SS_3 = 20,
153 /* IVA 2.2 SS DMA has 6 IDS */
154 OMAP_L3_IA_IVA_SS_DMA_1 = 19,
155 OMAP_L3_IA_IVA_SS_DMA_2 = 18,
156 OMAP_L3_IA_IVA_SS_DMA_3 = 17,
157 OMAP_L3_IA_IVA_SS_DMA_4 = 16,
158 OMAP_L3_IA_IVA_SS_DMA_5 = 15,
159 OMAP_L3_IA_IVA_SS_DMA_6 = 14,
160 /* SGX has 1 ID */
161 OMAP_L3_IA_SGX = 13,
162 /* CAM has 3 ID */
163 OMAP_L3_IA_CAM_1 = 12,
164 OMAP_L3_IA_CAM_2 = 11,
165 OMAP_L3_IA_CAM_3 = 10,
166 /* DAP has 1 ID */
167 OMAP_L3_IA_DAP = 9,
168 /* SDMA WR has 2 IDs */
169 OMAP_L3_SDMA_WR_1 = 8,
170 OMAP_L3_SDMA_WR_2 = 7,
171 /* SDMA RD has 4 IDs */
172 OMAP_L3_SDMA_RD_1 = 6,
173 OMAP_L3_SDMA_RD_2 = 5,
174 OMAP_L3_SDMA_RD_3 = 4,
175 OMAP_L3_SDMA_RD_4 = 3,
176 /* HSUSB OTG has 1 ID */
177 OMAP_L3_USBOTG = 2,
178 /* HSUSB HOST has 1 ID */
179 OMAP_L3_USBHOST = 1,
180};
181
182enum omap3_l3_code {
183 OMAP_L3_CODE_NOERROR = 0,
184 OMAP_L3_CODE_UNSUP_CMD = 1,
185 OMAP_L3_CODE_ADDR_HOLE = 2,
186 OMAP_L3_CODE_PROTECT_VIOLATION = 3,
187 OMAP_L3_CODE_IN_BAND_ERR = 4,
188 /* codes 5 and 6 are reserved */
189 OMAP_L3_CODE_REQ_TOUT_NOT_ACCEPT = 7,
190 OMAP_L3_CODE_REQ_TOUT_NO_RESP = 8,
191 /* codes 9 - 15 are also reserved */
192};
193
194struct omap3_l3 {
195 struct device *dev;
196 struct clk *ick;
197
198 /* memory base*/
199 void __iomem *rt;
200
201 int debug_irq;
202 int app_irq;
203
204 /* true when and inband functional error occurs */
205 unsigned inband:1;
206};
207
208/* offsets for l3 agents in order with the Flag status register */
209unsigned int __iomem omap3_l3_app_bases[] = {
210 /* MPU IA */
211 0x1400,
212 0x1400,
213 0x1400,
214 /* RESERVED */
215 0,
216 0,
217 0,
218 /* IVA 2.2 IA */
219 0x1800,
220 0x1800,
221 0x1800,
222 /* SGX IA */
223 0x1c00,
224 0x1c00,
225 /* RESERVED */
226 0,
227 /* CAMERA IA */
228 0x5800,
229 0x5800,
230 0x5800,
231 /* DISPLAY IA */
232 0x5400,
233 0x5400,
234 /* RESERVED */
235 0,
236 /*SDMA RD IA */
237 0x4c00,
238 0x4c00,
239 /* RESERVED */
240 0,
241 /* SDMA WR IA */
242 0x5000,
243 0x5000,
244 /* RESERVED */
245 0,
246 /* USB OTG IA */
247 0x4400,
248 0x4400,
249 0x4400,
250 /* USB HOST IA */
251 0x4000,
252 0x4000,
253 /* RESERVED */
254 0,
255 0,
256 0,
257 0,
258 /* SAD2D IA */
259 0x3000,
260 0x3000,
261 0x3000,
262 /* RESERVED */
263 0,
264 0,
265 0,
266 0,
267 0,
268 0,
269 0,
270 0,
271 0,
272 0,
273 0,
274 0,
275 /* SMA TA */
276 0x2000,
277 /* GPMC TA */
278 0x2400,
279 /* OCM RAM TA */
280 0x2800,
281 /* OCM ROM TA */
282 0x2C00,
283 /* L4 CORE TA */
284 0x6800,
285 /* L4 PER TA */
286 0x6c00,
287 /* IVA 2.2 TA */
288 0x6000,
289 /* SGX TA */
290 0x6400,
291 /* L4 EMU TA */
292 0x7000,
293 /* GPMC TA */
294 0x2400,
295 /* L4 CORE TA */
296 0x6800,
297 /* L4 PER TA */
298 0x6c00,
299 /* L4 EMU TA */
300 0x7000,
301 /* MAD2D TA */
302 0x3400,
303 /* RESERVED */
304 0,
305 0,
306};
307
308unsigned int __iomem omap3_l3_debug_bases[] = {
309 /* MPU DATA IA */
310 0x1400,
311 /* RESERVED */
312 0,
313 0,
314 /* DAP IA */
315 0x5c00,
316 0x5c00,
317 /* RESERVED */
318 0,
319 /* IVA 2.2 IA */
320 0x1800,
321 /* REST RESERVED */
322};
323
324u32 *omap3_l3_bases[] = {
325 omap3_l3_app_bases,
326 omap3_l3_debug_bases,
327};
328
329/*
330 * REVISIT define __raw_readll/__raw_writell here, but move them to
331 * <asm/io.h> at some point
332 */
333#define __raw_writell(v, a) (__chk_io_ptr(a), \
334 *(volatile u64 __force *)(a) = (v))
335#define __raw_readll(a) (__chk_io_ptr(a), \
336 *(volatile u64 __force *)(a))
337
338#endif
diff --git a/arch/arm/mach-omap2/omap_opp_data.h b/arch/arm/mach-omap2/omap_opp_data.h
new file mode 100644
index 000000000000..c784c12f98a1
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_opp_data.h
@@ -0,0 +1,96 @@
1/*
2 * OMAP SoC specific OPP Data helpers
3 *
4 * Copyright (C) 2009-2010 Texas Instruments Incorporated - http://www.ti.com/
5 * Nishanth Menon
6 * Kevin Hilman
7 * Copyright (C) 2010 Nokia Corporation.
8 * Eduardo Valentin
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 *
14 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
15 * kind, whether express or implied; without even the implied warranty
16 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 */
19#ifndef __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H
20#define __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H
21
22#include <plat/omap_hwmod.h>
23
24#include "voltage.h"
25
26/*
27 * *BIG FAT WARNING*:
28 * USE the following ONLY in opp data initialization common to an SoC.
29 * DO NOT USE these in board files/pm core etc.
30 */
31
32/**
33 * struct omap_opp_def - OMAP OPP Definition
34 * @hwmod_name: Name of the hwmod for this domain
35 * @freq: Frequency in hertz corresponding to this OPP
36 * @u_volt: Nominal voltage in microvolts corresponding to this OPP
37 * @default_available: True/false - is this OPP available by default
38 *
39 * OMAP SOCs have a standard set of tuples consisting of frequency and voltage
40 * pairs that the device will support per voltage domain. This is called
41 * Operating Points or OPP. The actual definitions of OMAP Operating Points
42 * varies over silicon within the same family of devices. For a specific
43 * domain, you can have a set of {frequency, voltage} pairs and this is denoted
44 * by an array of omap_opp_def. As the kernel boots and more information is
45 * available, a set of these are activated based on the precise nature of
46 * device the kernel boots up on. It is interesting to remember that each IP
47 * which belongs to a voltage domain may define their own set of OPPs on top
48 * of this - but this is handled by the appropriate driver.
49 */
50struct omap_opp_def {
51 char *hwmod_name;
52
53 unsigned long freq;
54 unsigned long u_volt;
55
56 bool default_available;
57};
58
59/*
60 * Initialization wrapper used to define an OPP for OMAP variants.
61 */
62#define OPP_INITIALIZER(_hwmod_name, _enabled, _freq, _uv) \
63{ \
64 .hwmod_name = _hwmod_name, \
65 .default_available = _enabled, \
66 .freq = _freq, \
67 .u_volt = _uv, \
68}
69
70/*
71 * Initialization wrapper used to define SmartReflex process data
72 * XXX Is this needed? Just use C99 initializers in data files?
73 */
74#define VOLT_DATA_DEFINE(_v_nom, _efuse_offs, _errminlimit, _errgain) \
75{ \
76 .volt_nominal = _v_nom, \
77 .sr_efuse_offs = _efuse_offs, \
78 .sr_errminlimit = _errminlimit, \
79 .vp_errgain = _errgain \
80}
81
82/* Use this to initialize the default table */
83extern int __init omap_init_opp_table(struct omap_opp_def *opp_def,
84 u32 opp_def_size);
85
86
87extern struct omap_volt_data omap34xx_vddmpu_volt_data[];
88extern struct omap_volt_data omap34xx_vddcore_volt_data[];
89extern struct omap_volt_data omap36xx_vddmpu_volt_data[];
90extern struct omap_volt_data omap36xx_vddcore_volt_data[];
91
92extern struct omap_volt_data omap44xx_vdd_mpu_volt_data[];
93extern struct omap_volt_data omap44xx_vdd_iva_volt_data[];
94extern struct omap_volt_data omap44xx_vdd_core_volt_data[];
95
96#endif /* __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H */
diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c
new file mode 100644
index 000000000000..58775e3c8476
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_phy_internal.c
@@ -0,0 +1,262 @@
1/*
2 * This file configures the internal USB PHY in OMAP4430. Used
3 * with TWL6030 transceiver and MUSB on OMAP4430.
4 *
5 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * Author: Hema HK <hemahk@ti.com>
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *
22 */
23
24#include <linux/types.h>
25#include <linux/delay.h>
26#include <linux/clk.h>
27#include <linux/io.h>
28#include <linux/err.h>
29#include <linux/usb.h>
30
31#include <plat/usb.h>
32#include "control.h"
33
34/* OMAP control module register for UTMI PHY */
35#define CONTROL_DEV_CONF 0x300
36#define PHY_PD 0x1
37
38#define USBOTGHS_CONTROL 0x33c
39#define AVALID BIT(0)
40#define BVALID BIT(1)
41#define VBUSVALID BIT(2)
42#define SESSEND BIT(3)
43#define IDDIG BIT(4)
44
45static struct clk *phyclk, *clk48m, *clk32k;
46static void __iomem *ctrl_base;
47static int usbotghs_control;
48
49int omap4430_phy_init(struct device *dev)
50{
51 ctrl_base = ioremap(OMAP443X_SCM_BASE, SZ_1K);
52 if (!ctrl_base) {
53 pr_err("control module ioremap failed\n");
54 return -ENOMEM;
55 }
56 /* Power down the phy */
57 __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
58
59 if (!dev) {
60 iounmap(ctrl_base);
61 return 0;
62 }
63
64 phyclk = clk_get(dev, "ocp2scp_usb_phy_ick");
65 if (IS_ERR(phyclk)) {
66 dev_err(dev, "cannot clk_get ocp2scp_usb_phy_ick\n");
67 iounmap(ctrl_base);
68 return PTR_ERR(phyclk);
69 }
70
71 clk48m = clk_get(dev, "ocp2scp_usb_phy_phy_48m");
72 if (IS_ERR(clk48m)) {
73 dev_err(dev, "cannot clk_get ocp2scp_usb_phy_phy_48m\n");
74 clk_put(phyclk);
75 iounmap(ctrl_base);
76 return PTR_ERR(clk48m);
77 }
78
79 clk32k = clk_get(dev, "usb_phy_cm_clk32k");
80 if (IS_ERR(clk32k)) {
81 dev_err(dev, "cannot clk_get usb_phy_cm_clk32k\n");
82 clk_put(phyclk);
83 clk_put(clk48m);
84 iounmap(ctrl_base);
85 return PTR_ERR(clk32k);
86 }
87 return 0;
88}
89
90int omap4430_phy_set_clk(struct device *dev, int on)
91{
92 static int state;
93
94 if (on && !state) {
95 /* Enable the phy clocks */
96 clk_enable(phyclk);
97 clk_enable(clk48m);
98 clk_enable(clk32k);
99 state = 1;
100 } else if (state) {
101 /* Disable the phy clocks */
102 clk_disable(phyclk);
103 clk_disable(clk48m);
104 clk_disable(clk32k);
105 state = 0;
106 }
107 return 0;
108}
109
110int omap4430_phy_power(struct device *dev, int ID, int on)
111{
112 if (on) {
113 if (ID)
114 /* enable VBUS valid, IDDIG groung */
115 __raw_writel(AVALID | VBUSVALID, ctrl_base +
116 USBOTGHS_CONTROL);
117 else
118 /*
119 * Enable VBUS Valid, AValid and IDDIG
120 * high impedance
121 */
122 __raw_writel(IDDIG | AVALID | VBUSVALID,
123 ctrl_base + USBOTGHS_CONTROL);
124 } else {
125 /* Enable session END and IDIG to high impedance. */
126 __raw_writel(SESSEND | IDDIG, ctrl_base +
127 USBOTGHS_CONTROL);
128 }
129 return 0;
130}
131
132int omap4430_phy_suspend(struct device *dev, int suspend)
133{
134 if (suspend) {
135 /* Disable the clocks */
136 omap4430_phy_set_clk(dev, 0);
137 /* Power down the phy */
138 __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
139
140 /* save the context */
141 usbotghs_control = __raw_readl(ctrl_base + USBOTGHS_CONTROL);
142 } else {
143 /* Enable the internel phy clcoks */
144 omap4430_phy_set_clk(dev, 1);
145 /* power on the phy */
146 if (__raw_readl(ctrl_base + CONTROL_DEV_CONF) & PHY_PD) {
147 __raw_writel(~PHY_PD, ctrl_base + CONTROL_DEV_CONF);
148 mdelay(200);
149 }
150
151 /* restore the context */
152 __raw_writel(usbotghs_control, ctrl_base + USBOTGHS_CONTROL);
153 }
154
155 return 0;
156}
157
158int omap4430_phy_exit(struct device *dev)
159{
160 if (ctrl_base)
161 iounmap(ctrl_base);
162 if (phyclk)
163 clk_put(phyclk);
164 if (clk48m)
165 clk_put(clk48m);
166 if (clk32k)
167 clk_put(clk32k);
168
169 return 0;
170}
171
172void am35x_musb_reset(void)
173{
174 u32 regval;
175
176 /* Reset the musb interface */
177 regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
178
179 regval |= AM35XX_USBOTGSS_SW_RST;
180 omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET);
181
182 regval &= ~AM35XX_USBOTGSS_SW_RST;
183 omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET);
184
185 regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET);
186}
187
188void am35x_musb_phy_power(u8 on)
189{
190 unsigned long timeout = jiffies + msecs_to_jiffies(100);
191 u32 devconf2;
192
193 if (on) {
194 /*
195 * Start the on-chip PHY and its PLL.
196 */
197 devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
198
199 devconf2 &= ~(CONF2_RESET | CONF2_PHYPWRDN | CONF2_OTGPWRDN);
200 devconf2 |= CONF2_PHY_PLLON;
201
202 omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
203
204 pr_info(KERN_INFO "Waiting for PHY clock good...\n");
205 while (!(omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2)
206 & CONF2_PHYCLKGD)) {
207 cpu_relax();
208
209 if (time_after(jiffies, timeout)) {
210 pr_err(KERN_ERR "musb PHY clock good timed out\n");
211 break;
212 }
213 }
214 } else {
215 /*
216 * Power down the on-chip PHY.
217 */
218 devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
219
220 devconf2 &= ~CONF2_PHY_PLLON;
221 devconf2 |= CONF2_PHYPWRDN | CONF2_OTGPWRDN;
222 omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
223 }
224}
225
226void am35x_musb_clear_irq(void)
227{
228 u32 regval;
229
230 regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
231 regval |= AM35XX_USBOTGSS_INT_CLR;
232 omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR);
233 regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR);
234}
235
236void am35x_set_mode(u8 musb_mode)
237{
238 u32 devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2);
239
240 devconf2 &= ~CONF2_OTGMODE;
241 switch (musb_mode) {
242#ifdef CONFIG_USB_MUSB_HDRC_HCD
243 case MUSB_HOST: /* Force VBUS valid, ID = 0 */
244 devconf2 |= CONF2_FORCE_HOST;
245 break;
246#endif
247#ifdef CONFIG_USB_GADGET_MUSB_HDRC
248 case MUSB_PERIPHERAL: /* Force VBUS valid, ID = 1 */
249 devconf2 |= CONF2_FORCE_DEVICE;
250 break;
251#endif
252#ifdef CONFIG_USB_MUSB_OTG
253 case MUSB_OTG: /* Don't override the VBUS/ID comparators */
254 devconf2 |= CONF2_NO_OVERRIDE;
255 break;
256#endif
257 default:
258 pr_info(KERN_INFO "Unsupported mode %u\n", musb_mode);
259 }
260
261 omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2);
262}
diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c
new file mode 100644
index 000000000000..07d6140baa9d
--- /dev/null
+++ b/arch/arm/mach-omap2/omap_twl.c
@@ -0,0 +1,339 @@
1/**
2 * OMAP and TWL PMIC specific intializations.
3 *
4 * Copyright (C) 2010 Texas Instruments Incorporated.
5 * Thara Gopinath
6 * Copyright (C) 2009 Texas Instruments Incorporated.
7 * Nishanth Menon
8 * Copyright (C) 2009 Nokia Corporation
9 * Paul Walmsley
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#include <linux/err.h>
17#include <linux/io.h>
18#include <linux/kernel.h>
19#include <linux/i2c/twl.h>
20
21#include "voltage.h"
22
23#include "pm.h"
24
25#define OMAP3_SRI2C_SLAVE_ADDR 0x12
26#define OMAP3_VDD_MPU_SR_CONTROL_REG 0x00
27#define OMAP3_VDD_CORE_SR_CONTROL_REG 0x01
28#define OMAP3_VP_CONFIG_ERROROFFSET 0x00
29#define OMAP3_VP_VSTEPMIN_VSTEPMIN 0x1
30#define OMAP3_VP_VSTEPMAX_VSTEPMAX 0x04
31#define OMAP3_VP_VLIMITTO_TIMEOUT_US 200
32
33#define OMAP3430_VP1_VLIMITTO_VDDMIN 0x14
34#define OMAP3430_VP1_VLIMITTO_VDDMAX 0x42
35#define OMAP3430_VP2_VLIMITTO_VDDMIN 0x18
36#define OMAP3430_VP2_VLIMITTO_VDDMAX 0x2c
37
38#define OMAP3630_VP1_VLIMITTO_VDDMIN 0x18
39#define OMAP3630_VP1_VLIMITTO_VDDMAX 0x3c
40#define OMAP3630_VP2_VLIMITTO_VDDMIN 0x18
41#define OMAP3630_VP2_VLIMITTO_VDDMAX 0x30
42
43#define OMAP4_SRI2C_SLAVE_ADDR 0x12
44#define OMAP4_VDD_MPU_SR_VOLT_REG 0x55
45#define OMAP4_VDD_IVA_SR_VOLT_REG 0x5B
46#define OMAP4_VDD_CORE_SR_VOLT_REG 0x61
47
48#define OMAP4_VP_CONFIG_ERROROFFSET 0x00
49#define OMAP4_VP_VSTEPMIN_VSTEPMIN 0x01
50#define OMAP4_VP_VSTEPMAX_VSTEPMAX 0x04
51#define OMAP4_VP_VLIMITTO_TIMEOUT_US 200
52
53#define OMAP4_VP_MPU_VLIMITTO_VDDMIN 0xA
54#define OMAP4_VP_MPU_VLIMITTO_VDDMAX 0x39
55#define OMAP4_VP_IVA_VLIMITTO_VDDMIN 0xA
56#define OMAP4_VP_IVA_VLIMITTO_VDDMAX 0x2D
57#define OMAP4_VP_CORE_VLIMITTO_VDDMIN 0xA
58#define OMAP4_VP_CORE_VLIMITTO_VDDMAX 0x28
59
60static bool is_offset_valid;
61static u8 smps_offset;
62/*
63 * Flag to ensure Smartreflex bit in TWL
64 * being cleared in board file is not overwritten.
65 */
66static bool __initdata twl_sr_enable_autoinit;
67
68#define TWL4030_DCDC_GLOBAL_CFG 0x06
69#define REG_SMPS_OFFSET 0xE0
70#define SMARTREFLEX_ENABLE BIT(3)
71
72static unsigned long twl4030_vsel_to_uv(const u8 vsel)
73{
74 return (((vsel * 125) + 6000)) * 100;
75}
76
77static u8 twl4030_uv_to_vsel(unsigned long uv)
78{
79 return DIV_ROUND_UP(uv - 600000, 12500);
80}
81
82static unsigned long twl6030_vsel_to_uv(const u8 vsel)
83{
84 /*
85 * In TWL6030 depending on the value of SMPS_OFFSET
86 * efuse register the voltage range supported in
87 * standard mode can be either between 0.6V - 1.3V or
88 * 0.7V - 1.4V. In TWL6030 ES1.0 SMPS_OFFSET efuse
89 * is programmed to all 0's where as starting from
90 * TWL6030 ES1.1 the efuse is programmed to 1
91 */
92 if (!is_offset_valid) {
93 twl_i2c_read_u8(TWL6030_MODULE_ID0, &smps_offset,
94 REG_SMPS_OFFSET);
95 is_offset_valid = true;
96 }
97
98 /*
99 * There is no specific formula for voltage to vsel
100 * conversion above 1.3V. There are special hardcoded
101 * values for voltages above 1.3V. Currently we are
102 * hardcoding only for 1.35 V which is used for 1GH OPP for
103 * OMAP4430.
104 */
105 if (vsel == 0x3A)
106 return 1350000;
107
108 if (smps_offset & 0x8)
109 return ((((vsel - 1) * 125) + 7000)) * 100;
110 else
111 return ((((vsel - 1) * 125) + 6000)) * 100;
112}
113
114static u8 twl6030_uv_to_vsel(unsigned long uv)
115{
116 /*
117 * In TWL6030 depending on the value of SMPS_OFFSET
118 * efuse register the voltage range supported in
119 * standard mode can be either between 0.6V - 1.3V or
120 * 0.7V - 1.4V. In TWL6030 ES1.0 SMPS_OFFSET efuse
121 * is programmed to all 0's where as starting from
122 * TWL6030 ES1.1 the efuse is programmed to 1
123 */
124 if (!is_offset_valid) {
125 twl_i2c_read_u8(TWL6030_MODULE_ID0, &smps_offset,
126 REG_SMPS_OFFSET);
127 is_offset_valid = true;
128 }
129
130 /*
131 * There is no specific formula for voltage to vsel
132 * conversion above 1.3V. There are special hardcoded
133 * values for voltages above 1.3V. Currently we are
134 * hardcoding only for 1.35 V which is used for 1GH OPP for
135 * OMAP4430.
136 */
137 if (uv == 1350000)
138 return 0x3A;
139
140 if (smps_offset & 0x8)
141 return DIV_ROUND_UP(uv - 700000, 12500) + 1;
142 else
143 return DIV_ROUND_UP(uv - 600000, 12500) + 1;
144}
145
146static struct omap_volt_pmic_info omap3_mpu_volt_info = {
147 .slew_rate = 4000,
148 .step_size = 12500,
149 .on_volt = 1200000,
150 .onlp_volt = 1000000,
151 .ret_volt = 975000,
152 .off_volt = 600000,
153 .volt_setup_time = 0xfff,
154 .vp_erroroffset = OMAP3_VP_CONFIG_ERROROFFSET,
155 .vp_vstepmin = OMAP3_VP_VSTEPMIN_VSTEPMIN,
156 .vp_vstepmax = OMAP3_VP_VSTEPMAX_VSTEPMAX,
157 .vp_vddmin = OMAP3430_VP1_VLIMITTO_VDDMIN,
158 .vp_vddmax = OMAP3430_VP1_VLIMITTO_VDDMAX,
159 .vp_timeout_us = OMAP3_VP_VLIMITTO_TIMEOUT_US,
160 .i2c_slave_addr = OMAP3_SRI2C_SLAVE_ADDR,
161 .pmic_reg = OMAP3_VDD_MPU_SR_CONTROL_REG,
162 .vsel_to_uv = twl4030_vsel_to_uv,
163 .uv_to_vsel = twl4030_uv_to_vsel,
164};
165
166static struct omap_volt_pmic_info omap3_core_volt_info = {
167 .slew_rate = 4000,
168 .step_size = 12500,
169 .on_volt = 1200000,
170 .onlp_volt = 1000000,
171 .ret_volt = 975000,
172 .off_volt = 600000,
173 .volt_setup_time = 0xfff,
174 .vp_erroroffset = OMAP3_VP_CONFIG_ERROROFFSET,
175 .vp_vstepmin = OMAP3_VP_VSTEPMIN_VSTEPMIN,
176 .vp_vstepmax = OMAP3_VP_VSTEPMAX_VSTEPMAX,
177 .vp_vddmin = OMAP3430_VP2_VLIMITTO_VDDMIN,
178 .vp_vddmax = OMAP3430_VP2_VLIMITTO_VDDMAX,
179 .vp_timeout_us = OMAP3_VP_VLIMITTO_TIMEOUT_US,
180 .i2c_slave_addr = OMAP3_SRI2C_SLAVE_ADDR,
181 .pmic_reg = OMAP3_VDD_CORE_SR_CONTROL_REG,
182 .vsel_to_uv = twl4030_vsel_to_uv,
183 .uv_to_vsel = twl4030_uv_to_vsel,
184};
185
186static struct omap_volt_pmic_info omap4_mpu_volt_info = {
187 .slew_rate = 4000,
188 .step_size = 12500,
189 .on_volt = 1350000,
190 .onlp_volt = 1350000,
191 .ret_volt = 837500,
192 .off_volt = 600000,
193 .volt_setup_time = 0,
194 .vp_erroroffset = OMAP4_VP_CONFIG_ERROROFFSET,
195 .vp_vstepmin = OMAP4_VP_VSTEPMIN_VSTEPMIN,
196 .vp_vstepmax = OMAP4_VP_VSTEPMAX_VSTEPMAX,
197 .vp_vddmin = OMAP4_VP_MPU_VLIMITTO_VDDMIN,
198 .vp_vddmax = OMAP4_VP_MPU_VLIMITTO_VDDMAX,
199 .vp_timeout_us = OMAP4_VP_VLIMITTO_TIMEOUT_US,
200 .i2c_slave_addr = OMAP4_SRI2C_SLAVE_ADDR,
201 .pmic_reg = OMAP4_VDD_MPU_SR_VOLT_REG,
202 .vsel_to_uv = twl6030_vsel_to_uv,
203 .uv_to_vsel = twl6030_uv_to_vsel,
204};
205
206static struct omap_volt_pmic_info omap4_iva_volt_info = {
207 .slew_rate = 4000,
208 .step_size = 12500,
209 .on_volt = 1100000,
210 .onlp_volt = 1100000,
211 .ret_volt = 837500,
212 .off_volt = 600000,
213 .volt_setup_time = 0,
214 .vp_erroroffset = OMAP4_VP_CONFIG_ERROROFFSET,
215 .vp_vstepmin = OMAP4_VP_VSTEPMIN_VSTEPMIN,
216 .vp_vstepmax = OMAP4_VP_VSTEPMAX_VSTEPMAX,
217 .vp_vddmin = OMAP4_VP_IVA_VLIMITTO_VDDMIN,
218 .vp_vddmax = OMAP4_VP_IVA_VLIMITTO_VDDMAX,
219 .vp_timeout_us = OMAP4_VP_VLIMITTO_TIMEOUT_US,
220 .i2c_slave_addr = OMAP4_SRI2C_SLAVE_ADDR,
221 .pmic_reg = OMAP4_VDD_IVA_SR_VOLT_REG,
222 .vsel_to_uv = twl6030_vsel_to_uv,
223 .uv_to_vsel = twl6030_uv_to_vsel,
224};
225
226static struct omap_volt_pmic_info omap4_core_volt_info = {
227 .slew_rate = 4000,
228 .step_size = 12500,
229 .on_volt = 1100000,
230 .onlp_volt = 1100000,
231 .ret_volt = 837500,
232 .off_volt = 600000,
233 .volt_setup_time = 0,
234 .vp_erroroffset = OMAP4_VP_CONFIG_ERROROFFSET,
235 .vp_vstepmin = OMAP4_VP_VSTEPMIN_VSTEPMIN,
236 .vp_vstepmax = OMAP4_VP_VSTEPMAX_VSTEPMAX,
237 .vp_vddmin = OMAP4_VP_CORE_VLIMITTO_VDDMIN,
238 .vp_vddmax = OMAP4_VP_CORE_VLIMITTO_VDDMAX,
239 .vp_timeout_us = OMAP4_VP_VLIMITTO_TIMEOUT_US,
240 .i2c_slave_addr = OMAP4_SRI2C_SLAVE_ADDR,
241 .pmic_reg = OMAP4_VDD_CORE_SR_VOLT_REG,
242 .vsel_to_uv = twl6030_vsel_to_uv,
243 .uv_to_vsel = twl6030_uv_to_vsel,
244};
245
246int __init omap4_twl_init(void)
247{
248 struct voltagedomain *voltdm;
249
250 if (!cpu_is_omap44xx())
251 return -ENODEV;
252
253 voltdm = omap_voltage_domain_lookup("mpu");
254 omap_voltage_register_pmic(voltdm, &omap4_mpu_volt_info);
255
256 voltdm = omap_voltage_domain_lookup("iva");
257 omap_voltage_register_pmic(voltdm, &omap4_iva_volt_info);
258
259 voltdm = omap_voltage_domain_lookup("core");
260 omap_voltage_register_pmic(voltdm, &omap4_core_volt_info);
261
262 return 0;
263}
264
265int __init omap3_twl_init(void)
266{
267 struct voltagedomain *voltdm;
268
269 if (!cpu_is_omap34xx())
270 return -ENODEV;
271
272 if (cpu_is_omap3630()) {
273 omap3_mpu_volt_info.vp_vddmin = OMAP3630_VP1_VLIMITTO_VDDMIN;
274 omap3_mpu_volt_info.vp_vddmax = OMAP3630_VP1_VLIMITTO_VDDMAX;
275 omap3_core_volt_info.vp_vddmin = OMAP3630_VP2_VLIMITTO_VDDMIN;
276 omap3_core_volt_info.vp_vddmax = OMAP3630_VP2_VLIMITTO_VDDMAX;
277 }
278
279 /*
280 * The smartreflex bit on twl4030 specifies if the setting of voltage
281 * is done over the I2C_SR path. Since this setting is independent of
282 * the actual usage of smartreflex AVS module, we enable TWL SR bit
283 * by default irrespective of whether smartreflex AVS module is enabled
284 * on the OMAP side or not. This is because without this bit enabled,
285 * the voltage scaling through vp forceupdate/bypass mechanism of
286 * voltage scaling will not function on TWL over I2C_SR.
287 */
288 if (!twl_sr_enable_autoinit)
289 omap3_twl_set_sr_bit(true);
290
291 voltdm = omap_voltage_domain_lookup("mpu");
292 omap_voltage_register_pmic(voltdm, &omap3_mpu_volt_info);
293
294 voltdm = omap_voltage_domain_lookup("core");
295 omap_voltage_register_pmic(voltdm, &omap3_core_volt_info);
296
297 return 0;
298}
299
300/**
301 * omap3_twl_set_sr_bit() - Set/Clear SR bit on TWL
302 * @enable: enable SR mode in twl or not
303 *
304 * If 'enable' is true, enables Smartreflex bit on TWL 4030 to make sure
305 * voltage scaling through OMAP SR works. Else, the smartreflex bit
306 * on twl4030 is cleared as there are platforms which use OMAP3 and T2 but
307 * use Synchronized Scaling Hardware Strategy (ENABLE_VMODE=1) and Direct
308 * Strategy Software Scaling Mode (ENABLE_VMODE=0), for setting the voltages,
309 * in those scenarios this bit is to be cleared (enable = false).
310 *
311 * Returns 0 on success, error is returned if I2C read/write fails.
312 */
313int __init omap3_twl_set_sr_bit(bool enable)
314{
315 u8 temp;
316 int ret;
317 if (twl_sr_enable_autoinit)
318 pr_warning("%s: unexpected multiple calls\n", __func__);
319
320 ret = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &temp,
321 TWL4030_DCDC_GLOBAL_CFG);
322 if (ret)
323 goto err;
324
325 if (enable)
326 temp |= SMARTREFLEX_ENABLE;
327 else
328 temp &= ~SMARTREFLEX_ENABLE;
329
330 ret = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp,
331 TWL4030_DCDC_GLOBAL_CFG);
332 if (!ret) {
333 twl_sr_enable_autoinit = true;
334 return 0;
335 }
336err:
337 pr_err("%s: Error access to TWL4030 (%d)\n", __func__, ret);
338 return ret;
339}
diff --git a/arch/arm/mach-omap2/opp.c b/arch/arm/mach-omap2/opp.c
new file mode 100644
index 000000000000..ab8b35b780b5
--- /dev/null
+++ b/arch/arm/mach-omap2/opp.c
@@ -0,0 +1,93 @@
1/*
2 * OMAP SoC specific OPP wrapper function
3 *
4 * Copyright (C) 2009-2010 Texas Instruments Incorporated - http://www.ti.com/
5 * Nishanth Menon
6 * Kevin Hilman
7 * Copyright (C) 2010 Nokia Corporation.
8 * Eduardo Valentin
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 *
14 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
15 * kind, whether express or implied; without even the implied warranty
16 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 */
19#include <linux/module.h>
20#include <linux/opp.h>
21
22#include <plat/omap_device.h>
23
24#include "omap_opp_data.h"
25
26/* Temp variable to allow multiple calls */
27static u8 __initdata omap_table_init;
28
29/**
30 * omap_init_opp_table() - Initialize opp table as per the CPU type
31 * @opp_def: opp default list for this silicon
32 * @opp_def_size: number of opp entries for this silicon
33 *
34 * Register the initial OPP table with the OPP library based on the CPU
35 * type. This is meant to be used only by SoC specific registration.
36 */
37int __init omap_init_opp_table(struct omap_opp_def *opp_def,
38 u32 opp_def_size)
39{
40 int i, r;
41
42 if (!opp_def || !opp_def_size) {
43 pr_err("%s: invalid params!\n", __func__);
44 return -EINVAL;
45 }
46
47 /*
48 * Initialize only if not already initialized even if the previous
49 * call failed, because, no reason we'd succeed again.
50 */
51 if (omap_table_init)
52 return -EEXIST;
53 omap_table_init = 1;
54
55 /* Lets now register with OPP library */
56 for (i = 0; i < opp_def_size; i++) {
57 struct omap_hwmod *oh;
58 struct device *dev;
59
60 if (!opp_def->hwmod_name) {
61 pr_err("%s: NULL name of omap_hwmod, failing [%d].\n",
62 __func__, i);
63 return -EINVAL;
64 }
65 oh = omap_hwmod_lookup(opp_def->hwmod_name);
66 if (!oh || !oh->od) {
67 pr_warn("%s: no hwmod or odev for %s, [%d] "
68 "cannot add OPPs.\n", __func__,
69 opp_def->hwmod_name, i);
70 return -EINVAL;
71 }
72 dev = &oh->od->pdev.dev;
73
74 r = opp_add(dev, opp_def->freq, opp_def->u_volt);
75 if (r) {
76 dev_err(dev, "%s: add OPP %ld failed for %s [%d] "
77 "result=%d\n",
78 __func__, opp_def->freq,
79 opp_def->hwmod_name, i, r);
80 } else {
81 if (!opp_def->default_available)
82 r = opp_disable(dev, opp_def->freq);
83 if (r)
84 dev_err(dev, "%s: disable %ld failed for %s "
85 "[%d] result=%d\n",
86 __func__, opp_def->freq,
87 opp_def->hwmod_name, i, r);
88 }
89 opp_def++;
90 }
91
92 return 0;
93}
diff --git a/arch/arm/mach-omap2/opp2xxx.h b/arch/arm/mach-omap2/opp2xxx.h
index 38b730550506..8affc66a92c2 100644
--- a/arch/arm/mach-omap2/opp2xxx.h
+++ b/arch/arm/mach-omap2/opp2xxx.h
@@ -418,7 +418,7 @@ struct prcm_config {
418 418
419extern const struct prcm_config omap2420_rate_table[]; 419extern const struct prcm_config omap2420_rate_table[];
420 420
421#ifdef CONFIG_ARCH_OMAP2430 421#ifdef CONFIG_SOC_OMAP2430
422extern const struct prcm_config omap2430_rate_table[]; 422extern const struct prcm_config omap2430_rate_table[];
423#else 423#else
424#define omap2430_rate_table NULL 424#define omap2430_rate_table NULL
diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
new file mode 100644
index 000000000000..d95f3f945d4a
--- /dev/null
+++ b/arch/arm/mach-omap2/opp3xxx_data.c
@@ -0,0 +1,172 @@
1/*
2 * OMAP3 OPP table definitions.
3 *
4 * Copyright (C) 2009-2010 Texas Instruments Incorporated - http://www.ti.com/
5 * Nishanth Menon
6 * Kevin Hilman
7 * Copyright (C) 2010-2011 Nokia Corporation.
8 * Eduardo Valentin
9 * Paul Walmsley
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
16 * kind, whether express or implied; without even the implied warranty
17 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 */
20#include <linux/module.h>
21
22#include <plat/cpu.h>
23
24#include "control.h"
25#include "omap_opp_data.h"
26#include "pm.h"
27
28/* 34xx */
29
30/* VDD1 */
31
32#define OMAP3430_VDD_MPU_OPP1_UV 975000
33#define OMAP3430_VDD_MPU_OPP2_UV 1075000
34#define OMAP3430_VDD_MPU_OPP3_UV 1200000
35#define OMAP3430_VDD_MPU_OPP4_UV 1270000
36#define OMAP3430_VDD_MPU_OPP5_UV 1350000
37
38struct omap_volt_data omap34xx_vddmpu_volt_data[] = {
39 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP1_UV, OMAP343X_CONTROL_FUSE_OPP1_VDD1, 0xf4, 0x0c),
40 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP2_UV, OMAP343X_CONTROL_FUSE_OPP2_VDD1, 0xf4, 0x0c),
41 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP3_UV, OMAP343X_CONTROL_FUSE_OPP3_VDD1, 0xf9, 0x18),
42 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP4_UV, OMAP343X_CONTROL_FUSE_OPP4_VDD1, 0xf9, 0x18),
43 VOLT_DATA_DEFINE(OMAP3430_VDD_MPU_OPP5_UV, OMAP343X_CONTROL_FUSE_OPP5_VDD1, 0xf9, 0x18),
44 VOLT_DATA_DEFINE(0, 0, 0, 0),
45};
46
47/* VDD2 */
48
49#define OMAP3430_VDD_CORE_OPP1_UV 975000
50#define OMAP3430_VDD_CORE_OPP2_UV 1050000
51#define OMAP3430_VDD_CORE_OPP3_UV 1150000
52
53struct omap_volt_data omap34xx_vddcore_volt_data[] = {
54 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP1_UV, OMAP343X_CONTROL_FUSE_OPP1_VDD2, 0xf4, 0x0c),
55 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP2_UV, OMAP343X_CONTROL_FUSE_OPP2_VDD2, 0xf4, 0x0c),
56 VOLT_DATA_DEFINE(OMAP3430_VDD_CORE_OPP3_UV, OMAP343X_CONTROL_FUSE_OPP3_VDD2, 0xf9, 0x18),
57 VOLT_DATA_DEFINE(0, 0, 0, 0),
58};
59
60/* 36xx */
61
62/* VDD1 */
63
64#define OMAP3630_VDD_MPU_OPP50_UV 1012500
65#define OMAP3630_VDD_MPU_OPP100_UV 1200000
66#define OMAP3630_VDD_MPU_OPP120_UV 1325000
67#define OMAP3630_VDD_MPU_OPP1G_UV 1375000
68
69struct omap_volt_data omap36xx_vddmpu_volt_data[] = {
70 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP50_UV, OMAP3630_CONTROL_FUSE_OPP50_VDD1, 0xf4, 0x0c),
71 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP100_UV, OMAP3630_CONTROL_FUSE_OPP100_VDD1, 0xf9, 0x16),
72 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP120_UV, OMAP3630_CONTROL_FUSE_OPP120_VDD1, 0xfa, 0x23),
73 VOLT_DATA_DEFINE(OMAP3630_VDD_MPU_OPP1G_UV, OMAP3630_CONTROL_FUSE_OPP1G_VDD1, 0xfa, 0x27),
74 VOLT_DATA_DEFINE(0, 0, 0, 0),
75};
76
77/* VDD2 */
78
79#define OMAP3630_VDD_CORE_OPP50_UV 1000000
80#define OMAP3630_VDD_CORE_OPP100_UV 1200000
81
82struct omap_volt_data omap36xx_vddcore_volt_data[] = {
83 VOLT_DATA_DEFINE(OMAP3630_VDD_CORE_OPP50_UV, OMAP3630_CONTROL_FUSE_OPP50_VDD2, 0xf4, 0x0c),
84 VOLT_DATA_DEFINE(OMAP3630_VDD_CORE_OPP100_UV, OMAP3630_CONTROL_FUSE_OPP100_VDD2, 0xf9, 0x16),
85 VOLT_DATA_DEFINE(0, 0, 0, 0),
86};
87
88/* OPP data */
89
90static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
91 /* MPU OPP1 */
92 OPP_INITIALIZER("mpu", true, 125000000, OMAP3430_VDD_MPU_OPP1_UV),
93 /* MPU OPP2 */
94 OPP_INITIALIZER("mpu", true, 250000000, OMAP3430_VDD_MPU_OPP2_UV),
95 /* MPU OPP3 */
96 OPP_INITIALIZER("mpu", true, 500000000, OMAP3430_VDD_MPU_OPP3_UV),
97 /* MPU OPP4 */
98 OPP_INITIALIZER("mpu", true, 550000000, OMAP3430_VDD_MPU_OPP4_UV),
99 /* MPU OPP5 */
100 OPP_INITIALIZER("mpu", true, 600000000, OMAP3430_VDD_MPU_OPP5_UV),
101
102 /*
103 * L3 OPP1 - 41.5 MHz is disabled because: The voltage for that OPP is
104 * almost the same than the one at 83MHz thus providing very little
105 * gain for the power point of view. In term of energy it will even
106 * increase the consumption due to the very negative performance
107 * impact that frequency will do to the MPU and the whole system in
108 * general.
109 */
110 OPP_INITIALIZER("l3_main", false, 41500000, OMAP3430_VDD_CORE_OPP1_UV),
111 /* L3 OPP2 */
112 OPP_INITIALIZER("l3_main", true, 83000000, OMAP3430_VDD_CORE_OPP2_UV),
113 /* L3 OPP3 */
114 OPP_INITIALIZER("l3_main", true, 166000000, OMAP3430_VDD_CORE_OPP3_UV),
115
116 /* DSP OPP1 */
117 OPP_INITIALIZER("iva", true, 90000000, OMAP3430_VDD_MPU_OPP1_UV),
118 /* DSP OPP2 */
119 OPP_INITIALIZER("iva", true, 180000000, OMAP3430_VDD_MPU_OPP2_UV),
120 /* DSP OPP3 */
121 OPP_INITIALIZER("iva", true, 360000000, OMAP3430_VDD_MPU_OPP3_UV),
122 /* DSP OPP4 */
123 OPP_INITIALIZER("iva", true, 400000000, OMAP3430_VDD_MPU_OPP4_UV),
124 /* DSP OPP5 */
125 OPP_INITIALIZER("iva", true, 430000000, OMAP3430_VDD_MPU_OPP5_UV),
126};
127
128static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
129 /* MPU OPP1 - OPP50 */
130 OPP_INITIALIZER("mpu", true, 300000000, OMAP3630_VDD_MPU_OPP50_UV),
131 /* MPU OPP2 - OPP100 */
132 OPP_INITIALIZER("mpu", true, 600000000, OMAP3630_VDD_MPU_OPP100_UV),
133 /* MPU OPP3 - OPP-Turbo */
134 OPP_INITIALIZER("mpu", false, 800000000, OMAP3630_VDD_MPU_OPP120_UV),
135 /* MPU OPP4 - OPP-SB */
136 OPP_INITIALIZER("mpu", false, 1000000000, OMAP3630_VDD_MPU_OPP1G_UV),
137
138 /* L3 OPP1 - OPP50 */
139 OPP_INITIALIZER("l3_main", true, 100000000, OMAP3630_VDD_CORE_OPP50_UV),
140 /* L3 OPP2 - OPP100, OPP-Turbo, OPP-SB */
141 OPP_INITIALIZER("l3_main", true, 200000000, OMAP3630_VDD_CORE_OPP100_UV),
142
143 /* DSP OPP1 - OPP50 */
144 OPP_INITIALIZER("iva", true, 260000000, OMAP3630_VDD_MPU_OPP50_UV),
145 /* DSP OPP2 - OPP100 */
146 OPP_INITIALIZER("iva", true, 520000000, OMAP3630_VDD_MPU_OPP100_UV),
147 /* DSP OPP3 - OPP-Turbo */
148 OPP_INITIALIZER("iva", false, 660000000, OMAP3630_VDD_MPU_OPP120_UV),
149 /* DSP OPP4 - OPP-SB */
150 OPP_INITIALIZER("iva", false, 800000000, OMAP3630_VDD_MPU_OPP1G_UV),
151};
152
153/**
154 * omap3_opp_init() - initialize omap3 opp table
155 */
156int __init omap3_opp_init(void)
157{
158 int r = -ENODEV;
159
160 if (!cpu_is_omap34xx())
161 return r;
162
163 if (cpu_is_omap3630())
164 r = omap_init_opp_table(omap36xx_opp_def_list,
165 ARRAY_SIZE(omap36xx_opp_def_list));
166 else
167 r = omap_init_opp_table(omap34xx_opp_def_list,
168 ARRAY_SIZE(omap34xx_opp_def_list));
169
170 return r;
171}
172device_initcall(omap3_opp_init);
diff --git a/arch/arm/mach-omap2/opp4xxx_data.c b/arch/arm/mach-omap2/opp4xxx_data.c
new file mode 100644
index 000000000000..2293ba27101b
--- /dev/null
+++ b/arch/arm/mach-omap2/opp4xxx_data.c
@@ -0,0 +1,105 @@
1/*
2 * OMAP4 OPP table definitions.
3 *
4 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
5 * Nishanth Menon
6 * Kevin Hilman
7 * Thara Gopinath
8 * Copyright (C) 2010-2011 Nokia Corporation.
9 * Eduardo Valentin
10 * Paul Walmsley
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
15 *
16 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
17 * kind, whether express or implied; without even the implied warranty
18 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 */
21#include <linux/module.h>
22
23#include <plat/cpu.h>
24
25#include "control.h"
26#include "omap_opp_data.h"
27#include "pm.h"
28
29/*
30 * Structures containing OMAP4430 voltage supported and various
31 * voltage dependent data for each VDD.
32 */
33
34#define OMAP4430_VDD_MPU_OPP50_UV 1025000
35#define OMAP4430_VDD_MPU_OPP100_UV 1200000
36#define OMAP4430_VDD_MPU_OPPTURBO_UV 1313000
37#define OMAP4430_VDD_MPU_OPPNITRO_UV 1375000
38
39struct omap_volt_data omap44xx_vdd_mpu_volt_data[] = {
40 VOLT_DATA_DEFINE(OMAP4430_VDD_MPU_OPP50_UV, OMAP44XX_CONTROL_FUSE_MPU_OPP50, 0xf4, 0x0c),
41 VOLT_DATA_DEFINE(OMAP4430_VDD_MPU_OPP100_UV, OMAP44XX_CONTROL_FUSE_MPU_OPP100, 0xf9, 0x16),
42 VOLT_DATA_DEFINE(OMAP4430_VDD_MPU_OPPTURBO_UV, OMAP44XX_CONTROL_FUSE_MPU_OPPTURBO, 0xfa, 0x23),
43 VOLT_DATA_DEFINE(OMAP4430_VDD_MPU_OPPNITRO_UV, OMAP44XX_CONTROL_FUSE_MPU_OPPNITRO, 0xfa, 0x27),
44 VOLT_DATA_DEFINE(0, 0, 0, 0),
45};
46
47#define OMAP4430_VDD_IVA_OPP50_UV 1013000
48#define OMAP4430_VDD_IVA_OPP100_UV 1188000
49#define OMAP4430_VDD_IVA_OPPTURBO_UV 1300000
50
51struct omap_volt_data omap44xx_vdd_iva_volt_data[] = {
52 VOLT_DATA_DEFINE(OMAP4430_VDD_IVA_OPP50_UV, OMAP44XX_CONTROL_FUSE_IVA_OPP50, 0xf4, 0x0c),
53 VOLT_DATA_DEFINE(OMAP4430_VDD_IVA_OPP100_UV, OMAP44XX_CONTROL_FUSE_IVA_OPP100, 0xf9, 0x16),
54 VOLT_DATA_DEFINE(OMAP4430_VDD_IVA_OPPTURBO_UV, OMAP44XX_CONTROL_FUSE_IVA_OPPTURBO, 0xfa, 0x23),
55 VOLT_DATA_DEFINE(0, 0, 0, 0),
56};
57
58#define OMAP4430_VDD_CORE_OPP50_UV 1025000
59#define OMAP4430_VDD_CORE_OPP100_UV 1200000
60
61struct omap_volt_data omap44xx_vdd_core_volt_data[] = {
62 VOLT_DATA_DEFINE(OMAP4430_VDD_CORE_OPP50_UV, OMAP44XX_CONTROL_FUSE_CORE_OPP50, 0xf4, 0x0c),
63 VOLT_DATA_DEFINE(OMAP4430_VDD_CORE_OPP100_UV, OMAP44XX_CONTROL_FUSE_CORE_OPP100, 0xf9, 0x16),
64 VOLT_DATA_DEFINE(0, 0, 0, 0),
65};
66
67
68static struct omap_opp_def __initdata omap44xx_opp_def_list[] = {
69 /* MPU OPP1 - OPP50 */
70 OPP_INITIALIZER("mpu", true, 300000000, OMAP4430_VDD_MPU_OPP50_UV),
71 /* MPU OPP2 - OPP100 */
72 OPP_INITIALIZER("mpu", true, 600000000, OMAP4430_VDD_MPU_OPP100_UV),
73 /* MPU OPP3 - OPP-Turbo */
74 OPP_INITIALIZER("mpu", true, 800000000, OMAP4430_VDD_MPU_OPPTURBO_UV),
75 /* MPU OPP4 - OPP-SB */
76 OPP_INITIALIZER("mpu", true, 1008000000, OMAP4430_VDD_MPU_OPPNITRO_UV),
77 /* L3 OPP1 - OPP50 */
78 OPP_INITIALIZER("l3_main_1", true, 100000000, OMAP4430_VDD_CORE_OPP50_UV),
79 /* L3 OPP2 - OPP100, OPP-Turbo, OPP-SB */
80 OPP_INITIALIZER("l3_main_1", true, 200000000, OMAP4430_VDD_CORE_OPP100_UV),
81 /* IVA OPP1 - OPP50 */
82 OPP_INITIALIZER("iva", true, 133000000, OMAP4430_VDD_IVA_OPP50_UV),
83 /* IVA OPP2 - OPP100 */
84 OPP_INITIALIZER("iva", true, 266100000, OMAP4430_VDD_IVA_OPP100_UV),
85 /* IVA OPP3 - OPP-Turbo */
86 OPP_INITIALIZER("iva", false, 332000000, OMAP4430_VDD_IVA_OPPTURBO_UV),
87 /* TODO: add DSP, aess, fdif, gpu */
88};
89
90/**
91 * omap4_opp_init() - initialize omap4 opp table
92 */
93int __init omap4_opp_init(void)
94{
95 int r = -ENODEV;
96
97 if (!cpu_is_omap44xx())
98 return r;
99
100 r = omap_init_opp_table(omap44xx_opp_def_list,
101 ARRAY_SIZE(omap44xx_opp_def_list));
102
103 return r;
104}
105device_initcall(omap4_opp_init);
diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c
index 723b44e252fd..e01da45c0537 100644
--- a/arch/arm/mach-omap2/pm-debug.c
+++ b/arch/arm/mach-omap2/pm-debug.c
@@ -29,21 +29,27 @@
29 29
30#include <plat/clock.h> 30#include <plat/clock.h>
31#include <plat/board.h> 31#include <plat/board.h>
32#include <plat/powerdomain.h> 32#include "powerdomain.h"
33#include <plat/clockdomain.h> 33#include "clockdomain.h"
34#include <plat/dmtimer.h>
35#include <plat/omap-pm.h>
34 36
35#include "prm.h" 37#include "cm2xxx_3xxx.h"
36#include "cm.h" 38#include "prm2xxx_3xxx.h"
37#include "pm.h" 39#include "pm.h"
38 40
39int omap2_pm_debug; 41int omap2_pm_debug;
42u32 enable_off_mode;
43u32 sleep_while_idle;
44u32 wakeup_timer_seconds;
45u32 wakeup_timer_milliseconds;
40 46
41#define DUMP_PRM_MOD_REG(mod, reg) \ 47#define DUMP_PRM_MOD_REG(mod, reg) \
42 regs[reg_count].name = #mod "." #reg; \ 48 regs[reg_count].name = #mod "." #reg; \
43 regs[reg_count++].val = prm_read_mod_reg(mod, reg) 49 regs[reg_count++].val = omap2_prm_read_mod_reg(mod, reg)
44#define DUMP_CM_MOD_REG(mod, reg) \ 50#define DUMP_CM_MOD_REG(mod, reg) \
45 regs[reg_count].name = #mod "." #reg; \ 51 regs[reg_count].name = #mod "." #reg; \
46 regs[reg_count++].val = cm_read_mod_reg(mod, reg) 52 regs[reg_count++].val = omap2_cm_read_mod_reg(mod, reg)
47#define DUMP_PRM_REG(reg) \ 53#define DUMP_PRM_REG(reg) \
48 regs[reg_count].name = #reg; \ 54 regs[reg_count].name = #reg; \
49 regs[reg_count++].val = __raw_readl(reg) 55 regs[reg_count++].val = __raw_readl(reg)
@@ -156,17 +162,34 @@ void omap2_pm_dump(int mode, int resume, unsigned int us)
156 printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val); 162 printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val);
157} 163}
158 164
165void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds)
166{
167 u32 tick_rate, cycles;
168
169 if (!seconds && !milliseconds)
170 return;
171
172 tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
173 cycles = tick_rate * seconds + tick_rate * milliseconds / 1000;
174 omap_dm_timer_stop(gptimer_wakeup);
175 omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
176
177 pr_info("PM: Resume timer in %u.%03u secs"
178 " (%d ticks at %d ticks/sec.)\n",
179 seconds, milliseconds, cycles, tick_rate);
180}
181
159#ifdef CONFIG_DEBUG_FS 182#ifdef CONFIG_DEBUG_FS
160#include <linux/debugfs.h> 183#include <linux/debugfs.h>
161#include <linux/seq_file.h> 184#include <linux/seq_file.h>
162 185
163static void pm_dbg_regset_store(u32 *ptr); 186static void pm_dbg_regset_store(u32 *ptr);
164 187
165struct dentry *pm_dbg_dir; 188static struct dentry *pm_dbg_dir;
166 189
167static int pm_dbg_init_done; 190static int pm_dbg_init_done;
168 191
169static int __init pm_dbg_init(void); 192static int pm_dbg_init(void);
170 193
171enum { 194enum {
172 DEBUG_FILE_COUNTERS = 0, 195 DEBUG_FILE_COUNTERS = 0,
@@ -306,10 +329,10 @@ static void pm_dbg_regset_store(u32 *ptr)
306 for (j = pm_dbg_reg_modules[i].low; 329 for (j = pm_dbg_reg_modules[i].low;
307 j <= pm_dbg_reg_modules[i].high; j += 4) { 330 j <= pm_dbg_reg_modules[i].high; j += 4) {
308 if (pm_dbg_reg_modules[i].type == MOD_CM) 331 if (pm_dbg_reg_modules[i].type == MOD_CM)
309 val = cm_read_mod_reg( 332 val = omap2_cm_read_mod_reg(
310 pm_dbg_reg_modules[i].offset, j); 333 pm_dbg_reg_modules[i].offset, j);
311 else 334 else
312 val = prm_read_mod_reg( 335 val = omap2_prm_read_mod_reg(
313 pm_dbg_reg_modules[i].offset, j); 336 pm_dbg_reg_modules[i].offset, j);
314 *(ptr++) = val; 337 *(ptr++) = val;
315 } 338 }
@@ -494,8 +517,10 @@ int pm_dbg_regset_init(int reg_set)
494 517
495static int pwrdm_suspend_get(void *data, u64 *val) 518static int pwrdm_suspend_get(void *data, u64 *val)
496{ 519{
497 int ret; 520 int ret = -EINVAL;
498 ret = omap3_pm_get_suspend_state((struct powerdomain *)data); 521
522 if (cpu_is_omap34xx())
523 ret = omap3_pm_get_suspend_state((struct powerdomain *)data);
499 *val = ret; 524 *val = ret;
500 525
501 if (ret >= 0) 526 if (ret >= 0)
@@ -505,7 +530,10 @@ static int pwrdm_suspend_get(void *data, u64 *val)
505 530
506static int pwrdm_suspend_set(void *data, u64 val) 531static int pwrdm_suspend_set(void *data, u64 val)
507{ 532{
508 return omap3_pm_set_suspend_state((struct powerdomain *)data, (int)val); 533 if (cpu_is_omap34xx())
534 return omap3_pm_set_suspend_state(
535 (struct powerdomain *)data, (int)val);
536 return -EINVAL;
509} 537}
510 538
511DEFINE_SIMPLE_ATTRIBUTE(pwrdm_suspend_fops, pwrdm_suspend_get, 539DEFINE_SIMPLE_ATTRIBUTE(pwrdm_suspend_fops, pwrdm_suspend_get,
@@ -553,15 +581,21 @@ static int option_set(void *data, u64 val)
553 581
554 *option = val; 582 *option = val;
555 583
556 if (option == &enable_off_mode) 584 if (option == &enable_off_mode) {
557 omap3_pm_off_mode_enable(val); 585 if (val)
586 omap_pm_enable_off_mode();
587 else
588 omap_pm_disable_off_mode();
589 if (cpu_is_omap34xx())
590 omap3_pm_off_mode_enable(val);
591 }
558 592
559 return 0; 593 return 0;
560} 594}
561 595
562DEFINE_SIMPLE_ATTRIBUTE(pm_dbg_option_fops, option_get, option_set, "%llu\n"); 596DEFINE_SIMPLE_ATTRIBUTE(pm_dbg_option_fops, option_get, option_set, "%llu\n");
563 597
564static int __init pm_dbg_init(void) 598static int pm_dbg_init(void)
565{ 599{
566 int i; 600 int i;
567 struct dentry *d; 601 struct dentry *d;
@@ -603,12 +637,15 @@ static int __init pm_dbg_init(void)
603 637
604 } 638 }
605 639
606 (void) debugfs_create_file("enable_off_mode", S_IRUGO | S_IWUGO, d, 640 (void) debugfs_create_file("enable_off_mode", S_IRUGO | S_IWUSR, d,
607 &enable_off_mode, &pm_dbg_option_fops); 641 &enable_off_mode, &pm_dbg_option_fops);
608 (void) debugfs_create_file("sleep_while_idle", S_IRUGO | S_IWUGO, d, 642 (void) debugfs_create_file("sleep_while_idle", S_IRUGO | S_IWUSR, d,
609 &sleep_while_idle, &pm_dbg_option_fops); 643 &sleep_while_idle, &pm_dbg_option_fops);
610 (void) debugfs_create_file("wakeup_timer_seconds", S_IRUGO | S_IWUGO, d, 644 (void) debugfs_create_file("wakeup_timer_seconds", S_IRUGO | S_IWUSR, d,
611 &wakeup_timer_seconds, &pm_dbg_option_fops); 645 &wakeup_timer_seconds, &pm_dbg_option_fops);
646 (void) debugfs_create_file("wakeup_timer_milliseconds",
647 S_IRUGO | S_IWUSR, d, &wakeup_timer_milliseconds,
648 &pm_dbg_option_fops);
612 pm_dbg_init_done = 1; 649 pm_dbg_init_done = 1;
613 650
614 return 0; 651 return 0;
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
index 68f9f2e95891..49486f522dca 100644
--- a/arch/arm/mach-omap2/pm.c
+++ b/arch/arm/mach-omap2/pm.c
@@ -13,16 +13,23 @@
13#include <linux/init.h> 13#include <linux/init.h>
14#include <linux/io.h> 14#include <linux/io.h>
15#include <linux/err.h> 15#include <linux/err.h>
16#include <linux/opp.h>
16 17
17#include <plat/omap-pm.h> 18#include <plat/omap-pm.h>
18#include <plat/omap_device.h> 19#include <plat/omap_device.h>
19#include <plat/common.h> 20#include <plat/common.h>
20 21
22#include "voltage.h"
23#include "powerdomain.h"
24#include "clockdomain.h"
25#include "pm.h"
26
21static struct omap_device_pm_latency *pm_lats; 27static struct omap_device_pm_latency *pm_lats;
22 28
23static struct device *mpu_dev; 29static struct device *mpu_dev;
24static struct device *dsp_dev; 30static struct device *iva_dev;
25static struct device *l3_dev; 31static struct device *l3_dev;
32static struct device *dsp_dev;
26 33
27struct device *omap2_get_mpuss_device(void) 34struct device *omap2_get_mpuss_device(void)
28{ 35{
@@ -30,10 +37,10 @@ struct device *omap2_get_mpuss_device(void)
30 return mpu_dev; 37 return mpu_dev;
31} 38}
32 39
33struct device *omap2_get_dsp_device(void) 40struct device *omap2_get_iva_device(void)
34{ 41{
35 WARN_ON_ONCE(!dsp_dev); 42 WARN_ON_ONCE(!iva_dev);
36 return dsp_dev; 43 return iva_dev;
37} 44}
38 45
39struct device *omap2_get_l3_device(void) 46struct device *omap2_get_l3_device(void)
@@ -42,6 +49,13 @@ struct device *omap2_get_l3_device(void)
42 return l3_dev; 49 return l3_dev;
43} 50}
44 51
52struct device *omap4_get_dsp_device(void)
53{
54 WARN_ON_ONCE(!dsp_dev);
55 return dsp_dev;
56}
57EXPORT_SYMBOL(omap4_get_dsp_device);
58
45/* static int _init_omap_device(struct omap_hwmod *oh, void *user) */ 59/* static int _init_omap_device(struct omap_hwmod *oh, void *user) */
46static int _init_omap_device(char *name, struct device **new_dev) 60static int _init_omap_device(char *name, struct device **new_dev)
47{ 61{
@@ -69,8 +83,161 @@ static int _init_omap_device(char *name, struct device **new_dev)
69static void omap2_init_processor_devices(void) 83static void omap2_init_processor_devices(void)
70{ 84{
71 _init_omap_device("mpu", &mpu_dev); 85 _init_omap_device("mpu", &mpu_dev);
72 _init_omap_device("iva", &dsp_dev); 86 if (omap3_has_iva())
73 _init_omap_device("l3_main", &l3_dev); 87 _init_omap_device("iva", &iva_dev);
88
89 if (cpu_is_omap44xx()) {
90 _init_omap_device("l3_main_1", &l3_dev);
91 _init_omap_device("dsp", &dsp_dev);
92 _init_omap_device("iva", &iva_dev);
93 } else {
94 _init_omap_device("l3_main", &l3_dev);
95 }
96}
97
98/* Types of sleep_switch used in omap_set_pwrdm_state */
99#define FORCEWAKEUP_SWITCH 0
100#define LOWPOWERSTATE_SWITCH 1
101
102/*
103 * This sets pwrdm state (other than mpu & core. Currently only ON &
104 * RET are supported.
105 */
106int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
107{
108 u32 cur_state;
109 int sleep_switch = 0;
110 int ret = 0;
111
112 if (pwrdm == NULL || IS_ERR(pwrdm))
113 return -EINVAL;
114
115 while (!(pwrdm->pwrsts & (1 << state))) {
116 if (state == PWRDM_POWER_OFF)
117 return ret;
118 state--;
119 }
120
121 cur_state = pwrdm_read_next_pwrst(pwrdm);
122 if (cur_state == state)
123 return ret;
124
125 if (pwrdm_read_pwrst(pwrdm) < PWRDM_POWER_ON) {
126 if ((pwrdm_read_pwrst(pwrdm) > state) &&
127 (pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE)) {
128 sleep_switch = LOWPOWERSTATE_SWITCH;
129 } else {
130 clkdm_wakeup(pwrdm->pwrdm_clkdms[0]);
131 pwrdm_wait_transition(pwrdm);
132 sleep_switch = FORCEWAKEUP_SWITCH;
133 }
134 }
135
136 ret = pwrdm_set_next_pwrst(pwrdm, state);
137 if (ret) {
138 printk(KERN_ERR "Unable to set state of powerdomain: %s\n",
139 pwrdm->name);
140 goto err;
141 }
142
143 switch (sleep_switch) {
144 case FORCEWAKEUP_SWITCH:
145 if (pwrdm->pwrdm_clkdms[0]->flags & CLKDM_CAN_ENABLE_AUTO)
146 clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]);
147 else
148 clkdm_sleep(pwrdm->pwrdm_clkdms[0]);
149 break;
150 case LOWPOWERSTATE_SWITCH:
151 pwrdm_set_lowpwrstchange(pwrdm);
152 break;
153 default:
154 return ret;
155 }
156
157 pwrdm_wait_transition(pwrdm);
158 pwrdm_state_switch(pwrdm);
159err:
160 return ret;
161}
162
163/*
164 * This API is to be called during init to put the various voltage
165 * domains to the voltage as per the opp table. Typically we boot up
166 * at the nominal voltage. So this function finds out the rate of
167 * the clock associated with the voltage domain, finds out the correct
168 * opp entry and puts the voltage domain to the voltage specifies
169 * in the opp entry
170 */
171static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,
172 struct device *dev)
173{
174 struct voltagedomain *voltdm;
175 struct clk *clk;
176 struct opp *opp;
177 unsigned long freq, bootup_volt;
178
179 if (!vdd_name || !clk_name || !dev) {
180 printk(KERN_ERR "%s: Invalid parameters!\n", __func__);
181 goto exit;
182 }
183
184 voltdm = omap_voltage_domain_lookup(vdd_name);
185 if (IS_ERR(voltdm)) {
186 printk(KERN_ERR "%s: Unable to get vdd pointer for vdd_%s\n",
187 __func__, vdd_name);
188 goto exit;
189 }
190
191 clk = clk_get(NULL, clk_name);
192 if (IS_ERR(clk)) {
193 printk(KERN_ERR "%s: unable to get clk %s\n",
194 __func__, clk_name);
195 goto exit;
196 }
197
198 freq = clk->rate;
199 clk_put(clk);
200
201 opp = opp_find_freq_ceil(dev, &freq);
202 if (IS_ERR(opp)) {
203 printk(KERN_ERR "%s: unable to find boot up OPP for vdd_%s\n",
204 __func__, vdd_name);
205 goto exit;
206 }
207
208 bootup_volt = opp_get_voltage(opp);
209 if (!bootup_volt) {
210 printk(KERN_ERR "%s: unable to find voltage corresponding"
211 "to the bootup OPP for vdd_%s\n", __func__, vdd_name);
212 goto exit;
213 }
214
215 omap_voltage_scale_vdd(voltdm, bootup_volt);
216 return 0;
217
218exit:
219 printk(KERN_ERR "%s: Unable to put vdd_%s to its init voltage\n\n",
220 __func__, vdd_name);
221 return -EINVAL;
222}
223
224static void __init omap3_init_voltages(void)
225{
226 if (!cpu_is_omap34xx())
227 return;
228
229 omap2_set_init_voltage("mpu", "dpll1_ck", mpu_dev);
230 omap2_set_init_voltage("core", "l3_ick", l3_dev);
231}
232
233static void __init omap4_init_voltages(void)
234{
235 if (!cpu_is_omap44xx())
236 return;
237
238 omap2_set_init_voltage("mpu", "dpll_mpu_ck", mpu_dev);
239 omap2_set_init_voltage("core", "l3_div_ck", l3_dev);
240 omap2_set_init_voltage("iva", "dpll_iva_m5x2_ck", iva_dev);
74} 241}
75 242
76static int __init omap2_common_pm_init(void) 243static int __init omap2_common_pm_init(void)
@@ -80,5 +247,24 @@ static int __init omap2_common_pm_init(void)
80 247
81 return 0; 248 return 0;
82} 249}
83device_initcall(omap2_common_pm_init); 250postcore_initcall(omap2_common_pm_init);
84 251
252static int __init omap2_common_pm_late_init(void)
253{
254 /* Init the OMAP TWL parameters */
255 omap3_twl_init();
256 omap4_twl_init();
257
258 /* Init the voltage layer */
259 omap_voltage_late_init();
260
261 /* Initialize the voltages */
262 omap3_init_voltages();
263 omap4_init_voltages();
264
265 /* Smartreflex device init */
266 omap_devinit_smartreflex();
267
268 return 0;
269}
270late_initcall(omap2_common_pm_late_init);
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
index 3de6ece23fc8..45bcfce77352 100644
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -11,23 +11,41 @@
11#ifndef __ARCH_ARM_MACH_OMAP2_PM_H 11#ifndef __ARCH_ARM_MACH_OMAP2_PM_H
12#define __ARCH_ARM_MACH_OMAP2_PM_H 12#define __ARCH_ARM_MACH_OMAP2_PM_H
13 13
14#include <plat/powerdomain.h> 14#include <linux/err.h>
15 15
16extern u32 enable_off_mode; 16#include "powerdomain.h"
17extern u32 sleep_while_idle;
18 17
19extern void *omap3_secure_ram_storage; 18extern void *omap3_secure_ram_storage;
20extern void omap3_pm_off_mode_enable(int); 19extern void omap3_pm_off_mode_enable(int);
21extern void omap_sram_idle(void); 20extern void omap_sram_idle(void);
22extern int omap3_can_sleep(void); 21extern int omap3_can_sleep(void);
23extern int set_pwrdm_state(struct powerdomain *pwrdm, u32 state); 22extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state);
24extern int omap3_idle_init(void); 23extern int omap3_idle_init(void);
25 24
25#if defined(CONFIG_PM_OPP)
26extern int omap3_opp_init(void);
27extern int omap4_opp_init(void);
28#else
29static inline int omap3_opp_init(void)
30{
31 return -EINVAL;
32}
33static inline int omap4_opp_init(void)
34{
35 return -EINVAL;
36}
37#endif
38
39/*
40 * cpuidle mach specific parameters
41 *
42 * The board code can override the default C-states definition using
43 * omap3_pm_init_cpuidle
44 */
26struct cpuidle_params { 45struct cpuidle_params {
27 u8 valid; 46 u32 exit_latency; /* exit_latency = sleep + wake-up latencies */
28 u32 sleep_latency; 47 u32 target_residency;
29 u32 wake_latency; 48 u8 valid; /* validates the C-state */
30 u32 threshold;
31}; 49};
32 50
33#if defined(CONFIG_PM) && defined(CONFIG_CPU_IDLE) 51#if defined(CONFIG_PM) && defined(CONFIG_CPU_IDLE)
@@ -48,14 +66,16 @@ extern struct omap_dm_timer *gptimer_wakeup;
48 66
49#ifdef CONFIG_PM_DEBUG 67#ifdef CONFIG_PM_DEBUG
50extern void omap2_pm_dump(int mode, int resume, unsigned int us); 68extern void omap2_pm_dump(int mode, int resume, unsigned int us);
69extern void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds);
51extern int omap2_pm_debug; 70extern int omap2_pm_debug;
71extern u32 enable_off_mode;
72extern u32 sleep_while_idle;
52#else 73#else
53#define omap2_pm_dump(mode, resume, us) do {} while (0); 74#define omap2_pm_dump(mode, resume, us) do {} while (0);
75#define omap2_pm_wakeup_on_timer(seconds, milliseconds) do {} while (0);
54#define omap2_pm_debug 0 76#define omap2_pm_debug 0
55#endif 77#define enable_off_mode 0
56 78#define sleep_while_idle 0
57#if defined(CONFIG_CPU_IDLE)
58extern void omap3_cpuidle_update_states(void);
59#endif 79#endif
60 80
61#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS) 81#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
@@ -73,13 +93,51 @@ extern void omap24xx_idle_loop_suspend(void);
73extern void omap24xx_cpu_suspend(u32 dll_ctrl, void __iomem *sdrc_dlla_ctrl, 93extern void omap24xx_cpu_suspend(u32 dll_ctrl, void __iomem *sdrc_dlla_ctrl,
74 void __iomem *sdrc_power); 94 void __iomem *sdrc_power);
75extern void omap34xx_cpu_suspend(u32 *addr, int save_state); 95extern void omap34xx_cpu_suspend(u32 *addr, int save_state);
76extern void save_secure_ram_context(u32 *addr); 96extern int save_secure_ram_context(u32 *addr);
77extern void omap3_save_scratchpad_contents(void); 97extern void omap3_save_scratchpad_contents(void);
78 98
79extern unsigned int omap24xx_idle_loop_suspend_sz; 99extern unsigned int omap24xx_idle_loop_suspend_sz;
80extern unsigned int omap34xx_suspend_sz;
81extern unsigned int save_secure_ram_context_sz; 100extern unsigned int save_secure_ram_context_sz;
82extern unsigned int omap24xx_cpu_suspend_sz; 101extern unsigned int omap24xx_cpu_suspend_sz;
83extern unsigned int omap34xx_cpu_suspend_sz; 102extern unsigned int omap34xx_cpu_suspend_sz;
84 103
104#define PM_RTA_ERRATUM_i608 (1 << 0)
105#define PM_SDRC_WAKEUP_ERRATUM_i583 (1 << 1)
106
107#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3)
108extern u16 pm34xx_errata;
109#define IS_PM34XX_ERRATUM(id) (pm34xx_errata & (id))
110extern void enable_omap3630_toggle_l2_on_restore(void);
111#else
112#define IS_PM34XX_ERRATUM(id) 0
113static inline void enable_omap3630_toggle_l2_on_restore(void) { }
114#endif /* defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3) */
115
116#ifdef CONFIG_OMAP_SMARTREFLEX
117extern int omap_devinit_smartreflex(void);
118extern void omap_enable_smartreflex_on_init(void);
119#else
120static inline int omap_devinit_smartreflex(void)
121{
122 return -EINVAL;
123}
124
125static inline void omap_enable_smartreflex_on_init(void) {}
126#endif
127
128#ifdef CONFIG_TWL4030_CORE
129extern int omap3_twl_init(void);
130extern int omap4_twl_init(void);
131extern int omap3_twl_set_sr_bit(bool enable);
132#else
133static inline int omap3_twl_init(void)
134{
135 return -EINVAL;
136}
137static inline int omap4_twl_init(void)
138{
139 return -EINVAL;
140}
141#endif
142
85#endif 143#endif
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c
index 6aeedeacdad8..df3ded6fe194 100644
--- a/arch/arm/mach-omap2/pm24xx.c
+++ b/arch/arm/mach-omap2/pm24xx.c
@@ -30,6 +30,7 @@
30#include <linux/irq.h> 30#include <linux/irq.h>
31#include <linux/time.h> 31#include <linux/time.h>
32#include <linux/gpio.h> 32#include <linux/gpio.h>
33#include <linux/console.h>
33 34
34#include <asm/mach/time.h> 35#include <asm/mach/time.h>
35#include <asm/mach/irq.h> 36#include <asm/mach/irq.h>
@@ -38,19 +39,32 @@
38#include <mach/irqs.h> 39#include <mach/irqs.h>
39#include <plat/clock.h> 40#include <plat/clock.h>
40#include <plat/sram.h> 41#include <plat/sram.h>
41#include <plat/control.h>
42#include <plat/dma.h> 42#include <plat/dma.h>
43#include <plat/board.h> 43#include <plat/board.h>
44 44
45#include "prm.h" 45#include "prm2xxx_3xxx.h"
46#include "prm-regbits-24xx.h" 46#include "prm-regbits-24xx.h"
47#include "cm.h" 47#include "cm2xxx_3xxx.h"
48#include "cm-regbits-24xx.h" 48#include "cm-regbits-24xx.h"
49#include "sdrc.h" 49#include "sdrc.h"
50#include "pm.h" 50#include "pm.h"
51#include "control.h"
51 52
52#include <plat/powerdomain.h> 53#include "powerdomain.h"
53#include <plat/clockdomain.h> 54#include "clockdomain.h"
55
56#ifdef CONFIG_SUSPEND
57static suspend_state_t suspend_state = PM_SUSPEND_ON;
58static inline bool is_suspending(void)
59{
60 return (suspend_state != PM_SUSPEND_ON);
61}
62#else
63static inline bool is_suspending(void)
64{
65 return false;
66}
67#endif
54 68
55static void (*omap2_sram_idle)(void); 69static void (*omap2_sram_idle)(void);
56static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl, 70static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl,
@@ -65,8 +79,8 @@ static int omap2_fclks_active(void)
65{ 79{
66 u32 f1, f2; 80 u32 f1, f2;
67 81
68 f1 = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); 82 f1 = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
69 f2 = cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2); 83 f2 = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2);
70 84
71 /* Ignore UART clocks. These are handled by UART core (serial.c) */ 85 /* Ignore UART clocks. These are handled by UART core (serial.c) */
72 f1 &= ~(OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_UART2_MASK); 86 f1 &= ~(OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_UART2_MASK);
@@ -91,9 +105,9 @@ static void omap2_enter_full_retention(void)
91 105
92 /* Clear old wake-up events */ 106 /* Clear old wake-up events */
93 /* REVISIT: These write to reserved bits? */ 107 /* REVISIT: These write to reserved bits? */
94 prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1); 108 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
95 prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2); 109 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
96 prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST); 110 omap2_prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST);
97 111
98 /* 112 /*
99 * Set MPU powerdomain's next power state to RETENTION; 113 * Set MPU powerdomain's next power state to RETENTION;
@@ -106,7 +120,7 @@ static void omap2_enter_full_retention(void)
106 l = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0) | OMAP24XX_USBSTANDBYCTRL; 120 l = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0) | OMAP24XX_USBSTANDBYCTRL;
107 omap_ctrl_writel(l, OMAP2_CONTROL_DEVCONF0); 121 omap_ctrl_writel(l, OMAP2_CONTROL_DEVCONF0);
108 122
109 omap2_gpio_prepare_for_idle(PWRDM_POWER_RET); 123 omap2_gpio_prepare_for_idle(0);
110 124
111 if (omap2_pm_debug) { 125 if (omap2_pm_debug) {
112 omap2_pm_dump(0, 0, 0); 126 omap2_pm_dump(0, 0, 0);
@@ -118,6 +132,11 @@ static void omap2_enter_full_retention(void)
118 if (omap_irq_pending()) 132 if (omap_irq_pending())
119 goto no_sleep; 133 goto no_sleep;
120 134
135 /* Block console output in case it is on one of the OMAP UARTs */
136 if (!is_suspending())
137 if (!console_trylock())
138 goto no_sleep;
139
121 omap_uart_prepare_idle(0); 140 omap_uart_prepare_idle(0);
122 omap_uart_prepare_idle(1); 141 omap_uart_prepare_idle(1);
123 omap_uart_prepare_idle(2); 142 omap_uart_prepare_idle(2);
@@ -131,6 +150,9 @@ static void omap2_enter_full_retention(void)
131 omap_uart_resume_idle(1); 150 omap_uart_resume_idle(1);
132 omap_uart_resume_idle(0); 151 omap_uart_resume_idle(0);
133 152
153 if (!is_suspending())
154 console_unlock();
155
134no_sleep: 156no_sleep:
135 if (omap2_pm_debug) { 157 if (omap2_pm_debug) {
136 unsigned long long tmp; 158 unsigned long long tmp;
@@ -145,30 +167,30 @@ no_sleep:
145 clk_enable(osc_ck); 167 clk_enable(osc_ck);
146 168
147 /* clear CORE wake-up events */ 169 /* clear CORE wake-up events */
148 prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1); 170 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
149 prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2); 171 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
150 172
151 /* wakeup domain events - bit 1: GPT1, bit5 GPIO */ 173 /* wakeup domain events - bit 1: GPT1, bit5 GPIO */
152 prm_clear_mod_reg_bits(0x4 | 0x1, WKUP_MOD, PM_WKST); 174 omap2_prm_clear_mod_reg_bits(0x4 | 0x1, WKUP_MOD, PM_WKST);
153 175
154 /* MPU domain wake events */ 176 /* MPU domain wake events */
155 l = prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET); 177 l = omap2_prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
156 if (l & 0x01) 178 if (l & 0x01)
157 prm_write_mod_reg(0x01, OCP_MOD, 179 omap2_prm_write_mod_reg(0x01, OCP_MOD,
158 OMAP2_PRCM_IRQSTATUS_MPU_OFFSET); 180 OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
159 if (l & 0x20) 181 if (l & 0x20)
160 prm_write_mod_reg(0x20, OCP_MOD, 182 omap2_prm_write_mod_reg(0x20, OCP_MOD,
161 OMAP2_PRCM_IRQSTATUS_MPU_OFFSET); 183 OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
162 184
163 /* Mask future PRCM-to-MPU interrupts */ 185 /* Mask future PRCM-to-MPU interrupts */
164 prm_write_mod_reg(0x0, OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET); 186 omap2_prm_write_mod_reg(0x0, OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET);
165} 187}
166 188
167static int omap2_i2c_active(void) 189static int omap2_i2c_active(void)
168{ 190{
169 u32 l; 191 u32 l;
170 192
171 l = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); 193 l = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
172 return l & (OMAP2420_EN_I2C2_MASK | OMAP2420_EN_I2C1_MASK); 194 return l & (OMAP2420_EN_I2C2_MASK | OMAP2420_EN_I2C1_MASK);
173} 195}
174 196
@@ -179,13 +201,13 @@ static int omap2_allow_mpu_retention(void)
179 u32 l; 201 u32 l;
180 202
181 /* Check for MMC, UART2, UART1, McSPI2, McSPI1 and DSS1. */ 203 /* Check for MMC, UART2, UART1, McSPI2, McSPI1 and DSS1. */
182 l = cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); 204 l = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
183 if (l & (OMAP2420_EN_MMC_MASK | OMAP24XX_EN_UART2_MASK | 205 if (l & (OMAP2420_EN_MMC_MASK | OMAP24XX_EN_UART2_MASK |
184 OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_MCSPI2_MASK | 206 OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_MCSPI2_MASK |
185 OMAP24XX_EN_MCSPI1_MASK | OMAP24XX_EN_DSS1_MASK)) 207 OMAP24XX_EN_MCSPI1_MASK | OMAP24XX_EN_DSS1_MASK))
186 return 0; 208 return 0;
187 /* Check for UART3. */ 209 /* Check for UART3. */
188 l = cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2); 210 l = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2);
189 if (l & OMAP24XX_EN_UART3_MASK) 211 if (l & OMAP24XX_EN_UART3_MASK)
190 return 0; 212 return 0;
191 if (sti_console_enabled) 213 if (sti_console_enabled)
@@ -208,18 +230,18 @@ static void omap2_enter_mpu_retention(void)
208 * it is in retention mode. */ 230 * it is in retention mode. */
209 if (omap2_allow_mpu_retention()) { 231 if (omap2_allow_mpu_retention()) {
210 /* REVISIT: These write to reserved bits? */ 232 /* REVISIT: These write to reserved bits? */
211 prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1); 233 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, PM_WKST1);
212 prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2); 234 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP24XX_PM_WKST2);
213 prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST); 235 omap2_prm_write_mod_reg(0xffffffff, WKUP_MOD, PM_WKST);
214 236
215 /* Try to enter MPU retention */ 237 /* Try to enter MPU retention */
216 prm_write_mod_reg((0x01 << OMAP_POWERSTATE_SHIFT) | 238 omap2_prm_write_mod_reg((0x01 << OMAP_POWERSTATE_SHIFT) |
217 OMAP_LOGICRETSTATE_MASK, 239 OMAP_LOGICRETSTATE_MASK,
218 MPU_MOD, OMAP2_PM_PWSTCTRL); 240 MPU_MOD, OMAP2_PM_PWSTCTRL);
219 } else { 241 } else {
220 /* Block MPU retention */ 242 /* Block MPU retention */
221 243
222 prm_write_mod_reg(OMAP_LOGICRETSTATE_MASK, MPU_MOD, 244 omap2_prm_write_mod_reg(OMAP_LOGICRETSTATE_MASK, MPU_MOD,
223 OMAP2_PM_PWSTCTRL); 245 OMAP2_PM_PWSTCTRL);
224 only_idle = 1; 246 only_idle = 1;
225 } 247 }
@@ -245,6 +267,8 @@ static int omap2_can_sleep(void)
245{ 267{
246 if (omap2_fclks_active()) 268 if (omap2_fclks_active())
247 return 0; 269 return 0;
270 if (!omap_uart_can_sleep())
271 return 0;
248 if (osc_ck->usecount > 1) 272 if (osc_ck->usecount > 1)
249 return 0; 273 return 0;
250 if (omap_dma_running()) 274 if (omap_dma_running())
@@ -275,10 +299,11 @@ out:
275 local_irq_enable(); 299 local_irq_enable();
276} 300}
277 301
278static int omap2_pm_prepare(void) 302#ifdef CONFIG_SUSPEND
303static int omap2_pm_begin(suspend_state_t state)
279{ 304{
280 /* We cannot sleep in idle until we have resumed */
281 disable_hlt(); 305 disable_hlt();
306 suspend_state = state;
282 return 0; 307 return 0;
283} 308}
284 309
@@ -286,9 +311,9 @@ static int omap2_pm_suspend(void)
286{ 311{
287 u32 wken_wkup, mir1; 312 u32 wken_wkup, mir1;
288 313
289 wken_wkup = prm_read_mod_reg(WKUP_MOD, PM_WKEN); 314 wken_wkup = omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
290 wken_wkup &= ~OMAP24XX_EN_GPT1_MASK; 315 wken_wkup &= ~OMAP24XX_EN_GPT1_MASK;
291 prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN); 316 omap2_prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN);
292 317
293 /* Mask GPT1 */ 318 /* Mask GPT1 */
294 mir1 = omap_readl(0x480fe0a4); 319 mir1 = omap_readl(0x480fe0a4);
@@ -298,7 +323,7 @@ static int omap2_pm_suspend(void)
298 omap2_enter_full_retention(); 323 omap2_enter_full_retention();
299 324
300 omap_writel(mir1, 0x480fe0a4); 325 omap_writel(mir1, 0x480fe0a4);
301 prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN); 326 omap2_prm_write_mod_reg(wken_wkup, WKUP_MOD, PM_WKEN);
302 327
303 return 0; 328 return 0;
304} 329}
@@ -319,29 +344,30 @@ static int omap2_pm_enter(suspend_state_t state)
319 return ret; 344 return ret;
320} 345}
321 346
322static void omap2_pm_finish(void) 347static void omap2_pm_end(void)
323{ 348{
349 suspend_state = PM_SUSPEND_ON;
324 enable_hlt(); 350 enable_hlt();
325} 351}
326 352
327static struct platform_suspend_ops omap_pm_ops = { 353static const struct platform_suspend_ops omap_pm_ops = {
328 .prepare = omap2_pm_prepare, 354 .begin = omap2_pm_begin,
329 .enter = omap2_pm_enter, 355 .enter = omap2_pm_enter,
330 .finish = omap2_pm_finish, 356 .end = omap2_pm_end,
331 .valid = suspend_valid_only_mem, 357 .valid = suspend_valid_only_mem,
332}; 358};
359#else
360static const struct platform_suspend_ops __initdata omap_pm_ops;
361#endif /* CONFIG_SUSPEND */
333 362
334/* XXX This function should be shareable between OMAP2xxx and OMAP3 */ 363/* XXX This function should be shareable between OMAP2xxx and OMAP3 */
335static int __init clkdms_setup(struct clockdomain *clkdm, void *unused) 364static int __init clkdms_setup(struct clockdomain *clkdm, void *unused)
336{ 365{
337 clkdm_clear_all_wkdeps(clkdm);
338 clkdm_clear_all_sleepdeps(clkdm);
339
340 if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO) 366 if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO)
341 omap2_clkdm_allow_idle(clkdm); 367 clkdm_allow_idle(clkdm);
342 else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP && 368 else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP &&
343 atomic_read(&clkdm->usecount) == 0) 369 atomic_read(&clkdm->usecount) == 0)
344 omap2_clkdm_sleep(clkdm); 370 clkdm_sleep(clkdm);
345 return 0; 371 return 0;
346} 372}
347 373
@@ -350,8 +376,11 @@ static void __init prcm_setup_regs(void)
350 int i, num_mem_banks; 376 int i, num_mem_banks;
351 struct powerdomain *pwrdm; 377 struct powerdomain *pwrdm;
352 378
353 /* Enable autoidle */ 379 /*
354 prm_write_mod_reg(OMAP24XX_AUTOIDLE_MASK, OCP_MOD, 380 * Enable autoidle
381 * XXX This should be handled by hwmod code or PRCM init code
382 */
383 omap2_prm_write_mod_reg(OMAP24XX_AUTOIDLE_MASK, OCP_MOD,
355 OMAP2_PRCM_SYSCONFIG_OFFSET); 384 OMAP2_PRCM_SYSCONFIG_OFFSET);
356 385
357 /* 386 /*
@@ -376,101 +405,34 @@ static void __init prcm_setup_regs(void)
376 405
377 pwrdm = clkdm_get_pwrdm(dsp_clkdm); 406 pwrdm = clkdm_get_pwrdm(dsp_clkdm);
378 pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF); 407 pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF);
379 omap2_clkdm_sleep(dsp_clkdm); 408 clkdm_sleep(dsp_clkdm);
380 409
381 pwrdm = clkdm_get_pwrdm(gfx_clkdm); 410 pwrdm = clkdm_get_pwrdm(gfx_clkdm);
382 pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF); 411 pwrdm_set_next_pwrst(pwrdm, PWRDM_POWER_OFF);
383 omap2_clkdm_sleep(gfx_clkdm); 412 clkdm_sleep(gfx_clkdm);
384 413
385 /* 414 /* Enable hardware-supervised idle for all clkdms */
386 * Clear clockdomain wakeup dependencies and enable
387 * hardware-supervised idle for all clkdms
388 */
389 clkdm_for_each(clkdms_setup, NULL); 415 clkdm_for_each(clkdms_setup, NULL);
390 clkdm_add_wkdep(mpu_clkdm, wkup_clkdm); 416 clkdm_add_wkdep(mpu_clkdm, wkup_clkdm);
391 417
392 /* Enable clock autoidle for all domains */
393 cm_write_mod_reg(OMAP24XX_AUTO_CAM_MASK |
394 OMAP24XX_AUTO_MAILBOXES_MASK |
395 OMAP24XX_AUTO_WDT4_MASK |
396 OMAP2420_AUTO_WDT3_MASK |
397 OMAP24XX_AUTO_MSPRO_MASK |
398 OMAP2420_AUTO_MMC_MASK |
399 OMAP24XX_AUTO_FAC_MASK |
400 OMAP2420_AUTO_EAC_MASK |
401 OMAP24XX_AUTO_HDQ_MASK |
402 OMAP24XX_AUTO_UART2_MASK |
403 OMAP24XX_AUTO_UART1_MASK |
404 OMAP24XX_AUTO_I2C2_MASK |
405 OMAP24XX_AUTO_I2C1_MASK |
406 OMAP24XX_AUTO_MCSPI2_MASK |
407 OMAP24XX_AUTO_MCSPI1_MASK |
408 OMAP24XX_AUTO_MCBSP2_MASK |
409 OMAP24XX_AUTO_MCBSP1_MASK |
410 OMAP24XX_AUTO_GPT12_MASK |
411 OMAP24XX_AUTO_GPT11_MASK |
412 OMAP24XX_AUTO_GPT10_MASK |
413 OMAP24XX_AUTO_GPT9_MASK |
414 OMAP24XX_AUTO_GPT8_MASK |
415 OMAP24XX_AUTO_GPT7_MASK |
416 OMAP24XX_AUTO_GPT6_MASK |
417 OMAP24XX_AUTO_GPT5_MASK |
418 OMAP24XX_AUTO_GPT4_MASK |
419 OMAP24XX_AUTO_GPT3_MASK |
420 OMAP24XX_AUTO_GPT2_MASK |
421 OMAP2420_AUTO_VLYNQ_MASK |
422 OMAP24XX_AUTO_DSS_MASK,
423 CORE_MOD, CM_AUTOIDLE1);
424 cm_write_mod_reg(OMAP24XX_AUTO_UART3_MASK |
425 OMAP24XX_AUTO_SSI_MASK |
426 OMAP24XX_AUTO_USB_MASK,
427 CORE_MOD, CM_AUTOIDLE2);
428 cm_write_mod_reg(OMAP24XX_AUTO_SDRC_MASK |
429 OMAP24XX_AUTO_GPMC_MASK |
430 OMAP24XX_AUTO_SDMA_MASK,
431 CORE_MOD, CM_AUTOIDLE3);
432 cm_write_mod_reg(OMAP24XX_AUTO_PKA_MASK |
433 OMAP24XX_AUTO_AES_MASK |
434 OMAP24XX_AUTO_RNG_MASK |
435 OMAP24XX_AUTO_SHA_MASK |
436 OMAP24XX_AUTO_DES_MASK,
437 CORE_MOD, OMAP24XX_CM_AUTOIDLE4);
438
439 cm_write_mod_reg(OMAP2420_AUTO_DSP_IPI_MASK, OMAP24XX_DSP_MOD,
440 CM_AUTOIDLE);
441
442 /* Put DPLL and both APLLs into autoidle mode */
443 cm_write_mod_reg((0x03 << OMAP24XX_AUTO_DPLL_SHIFT) |
444 (0x03 << OMAP24XX_AUTO_96M_SHIFT) |
445 (0x03 << OMAP24XX_AUTO_54M_SHIFT),
446 PLL_MOD, CM_AUTOIDLE);
447
448 cm_write_mod_reg(OMAP24XX_AUTO_OMAPCTRL_MASK |
449 OMAP24XX_AUTO_WDT1_MASK |
450 OMAP24XX_AUTO_MPU_WDT_MASK |
451 OMAP24XX_AUTO_GPIOS_MASK |
452 OMAP24XX_AUTO_32KSYNC_MASK |
453 OMAP24XX_AUTO_GPT1_MASK,
454 WKUP_MOD, CM_AUTOIDLE);
455
456 /* REVISIT: Configure number of 32 kHz clock cycles for sys_clk 418 /* REVISIT: Configure number of 32 kHz clock cycles for sys_clk
457 * stabilisation */ 419 * stabilisation */
458 prm_write_mod_reg(15 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD, 420 omap2_prm_write_mod_reg(15 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD,
459 OMAP2_PRCM_CLKSSETUP_OFFSET); 421 OMAP2_PRCM_CLKSSETUP_OFFSET);
460 422
461 /* Configure automatic voltage transition */ 423 /* Configure automatic voltage transition */
462 prm_write_mod_reg(2 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD, 424 omap2_prm_write_mod_reg(2 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_GR_MOD,
463 OMAP2_PRCM_VOLTSETUP_OFFSET); 425 OMAP2_PRCM_VOLTSETUP_OFFSET);
464 prm_write_mod_reg(OMAP24XX_AUTO_EXTVOLT_MASK | 426 omap2_prm_write_mod_reg(OMAP24XX_AUTO_EXTVOLT_MASK |
465 (0x1 << OMAP24XX_SETOFF_LEVEL_SHIFT) | 427 (0x1 << OMAP24XX_SETOFF_LEVEL_SHIFT) |
466 OMAP24XX_MEMRETCTRL_MASK | 428 OMAP24XX_MEMRETCTRL_MASK |
467 (0x1 << OMAP24XX_SETRET_LEVEL_SHIFT) | 429 (0x1 << OMAP24XX_SETRET_LEVEL_SHIFT) |
468 (0x0 << OMAP24XX_VOLT_LEVEL_SHIFT), 430 (0x0 << OMAP24XX_VOLT_LEVEL_SHIFT),
469 OMAP24XX_GR_MOD, OMAP2_PRCM_VOLTCTRL_OFFSET); 431 OMAP24XX_GR_MOD, OMAP2_PRCM_VOLTCTRL_OFFSET);
470 432
471 /* Enable wake-up events */ 433 /* Enable wake-up events */
472 prm_write_mod_reg(OMAP24XX_EN_GPIOS_MASK | OMAP24XX_EN_GPT1_MASK, 434 omap2_prm_write_mod_reg(OMAP24XX_EN_GPIOS_MASK | OMAP24XX_EN_GPT1_MASK,
473 WKUP_MOD, PM_WKEN); 435 WKUP_MOD, PM_WKEN);
474} 436}
475 437
476static int __init omap2_pm_init(void) 438static int __init omap2_pm_init(void)
@@ -481,7 +443,7 @@ static int __init omap2_pm_init(void)
481 return -ENODEV; 443 return -ENODEV;
482 444
483 printk(KERN_INFO "Power Management for OMAP2 initializing\n"); 445 printk(KERN_INFO "Power Management for OMAP2 initializing\n");
484 l = prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_REVISION_OFFSET); 446 l = omap2_prm_read_mod_reg(OCP_MOD, OMAP2_PRCM_REVISION_OFFSET);
485 printk(KERN_INFO "PRCM revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f); 447 printk(KERN_INFO "PRCM revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);
486 448
487 /* Look up important powerdomains */ 449 /* Look up important powerdomains */
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 7b03426c72a3..c155c9d1c82c 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -28,37 +28,49 @@
28#include <linux/clk.h> 28#include <linux/clk.h>
29#include <linux/delay.h> 29#include <linux/delay.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31#include <linux/console.h>
32#include <trace/events/power.h>
31 33
32#include <plat/sram.h> 34#include <plat/sram.h>
33#include <plat/clockdomain.h> 35#include "clockdomain.h"
34#include <plat/powerdomain.h> 36#include "powerdomain.h"
35#include <plat/control.h>
36#include <plat/serial.h> 37#include <plat/serial.h>
37#include <plat/sdrc.h> 38#include <plat/sdrc.h>
38#include <plat/prcm.h> 39#include <plat/prcm.h>
39#include <plat/gpmc.h> 40#include <plat/gpmc.h>
40#include <plat/dma.h> 41#include <plat/dma.h>
41#include <plat/dmtimer.h>
42 42
43#include <asm/tlbflush.h> 43#include <asm/tlbflush.h>
44 44
45#include "cm.h" 45#include "cm2xxx_3xxx.h"
46#include "cm-regbits-34xx.h" 46#include "cm-regbits-34xx.h"
47#include "prm-regbits-34xx.h" 47#include "prm-regbits-34xx.h"
48 48
49#include "prm.h" 49#include "prm2xxx_3xxx.h"
50#include "pm.h" 50#include "pm.h"
51#include "sdrc.h" 51#include "sdrc.h"
52#include "control.h"
53
54#ifdef CONFIG_SUSPEND
55static suspend_state_t suspend_state = PM_SUSPEND_ON;
56static inline bool is_suspending(void)
57{
58 return (suspend_state != PM_SUSPEND_ON);
59}
60#else
61static inline bool is_suspending(void)
62{
63 return false;
64}
65#endif
52 66
53/* Scratchpad offsets */ 67/* Scratchpad offsets */
54#define OMAP343X_TABLE_ADDRESS_OFFSET 0x31 68#define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4
55#define OMAP343X_TABLE_VALUE_OFFSET 0x30 69#define OMAP343X_TABLE_VALUE_OFFSET 0xc0
56#define OMAP343X_CONTROL_REG_VALUE_OFFSET 0x32 70#define OMAP343X_CONTROL_REG_VALUE_OFFSET 0xc8
57 71
58u32 enable_off_mode; 72/* pm34xx errata defined in pm.h */
59u32 sleep_while_idle; 73u16 pm34xx_errata;
60u32 wakeup_timer_seconds;
61u32 wakeup_timer_milliseconds;
62 74
63struct power_state { 75struct power_state {
64 struct powerdomain *pwrdm; 76 struct powerdomain *pwrdm;
@@ -94,12 +106,12 @@ static void omap3_enable_io_chain(void)
94 int timeout = 0; 106 int timeout = 0;
95 107
96 if (omap_rev() >= OMAP3430_REV_ES3_1) { 108 if (omap_rev() >= OMAP3430_REV_ES3_1) {
97 prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, 109 omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
98 PM_WKEN); 110 PM_WKEN);
99 /* Do a readback to assure write has been done */ 111 /* Do a readback to assure write has been done */
100 prm_read_mod_reg(WKUP_MOD, PM_WKEN); 112 omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN);
101 113
102 while (!(prm_read_mod_reg(WKUP_MOD, PM_WKEN) & 114 while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN) &
103 OMAP3430_ST_IO_CHAIN_MASK)) { 115 OMAP3430_ST_IO_CHAIN_MASK)) {
104 timeout++; 116 timeout++;
105 if (timeout > 1000) { 117 if (timeout > 1000) {
@@ -107,7 +119,7 @@ static void omap3_enable_io_chain(void)
107 "activation failed.\n"); 119 "activation failed.\n");
108 return; 120 return;
109 } 121 }
110 prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, 122 omap2_prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK,
111 WKUP_MOD, PM_WKEN); 123 WKUP_MOD, PM_WKEN);
112 } 124 }
113 } 125 }
@@ -116,26 +128,17 @@ static void omap3_enable_io_chain(void)
116static void omap3_disable_io_chain(void) 128static void omap3_disable_io_chain(void)
117{ 129{
118 if (omap_rev() >= OMAP3430_REV_ES3_1) 130 if (omap_rev() >= OMAP3430_REV_ES3_1)
119 prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, 131 omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD,
120 PM_WKEN); 132 PM_WKEN);
121} 133}
122 134
123static void omap3_core_save_context(void) 135static void omap3_core_save_context(void)
124{ 136{
125 u32 control_padconf_off; 137 omap3_ctrl_save_padconf();
126
127 /* Save the padconf registers */
128 control_padconf_off = omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_OFF);
129 control_padconf_off |= START_PADCONF_SAVE;
130 omap_ctrl_writel(control_padconf_off, OMAP343X_CONTROL_PADCONF_OFF);
131 /* wait for the save to complete */
132 while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
133 & PADCONF_SAVE_DONE))
134 udelay(1);
135 138
136 /* 139 /*
137 * Force write last pad into memory, as this can fail in some 140 * Force write last pad into memory, as this can fail in some
138 * cases according to erratas 1.157, 1.185 141 * cases according to errata 1.157, 1.185
139 */ 142 */
140 omap_ctrl_writel(omap_ctrl_readl(OMAP343X_PADCONF_ETK_D14), 143 omap_ctrl_writel(omap_ctrl_readl(OMAP343X_PADCONF_ETK_D14),
141 OMAP343X_CONTROL_MEM_WKUP + 0x2a0); 144 OMAP343X_CONTROL_MEM_WKUP + 0x2a0);
@@ -166,9 +169,10 @@ static void omap3_core_restore_context(void)
166 * once during boot sequence, but this works as we are not using secure 169 * once during boot sequence, but this works as we are not using secure
167 * services. 170 * services.
168 */ 171 */
169static void omap3_save_secure_ram_context(u32 target_mpu_state) 172static void omap3_save_secure_ram_context(void)
170{ 173{
171 u32 ret; 174 u32 ret;
175 int mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm);
172 176
173 if (omap_type() != OMAP2_DEVICE_TYPE_GP) { 177 if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
174 /* 178 /*
@@ -179,7 +183,7 @@ static void omap3_save_secure_ram_context(u32 target_mpu_state)
179 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON); 183 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
180 ret = _omap_save_secure_sram((u32 *) 184 ret = _omap_save_secure_sram((u32 *)
181 __pa(omap3_secure_ram_storage)); 185 __pa(omap3_secure_ram_storage));
182 pwrdm_set_next_pwrst(mpu_pwrdm, target_mpu_state); 186 pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state);
183 /* Following is for error tracking, it should not happen */ 187 /* Following is for error tracking, it should not happen */
184 if (ret) { 188 if (ret) {
185 printk(KERN_ERR "save_secure_sram() returns %08x\n", 189 printk(KERN_ERR "save_secure_sram() returns %08x\n",
@@ -210,27 +214,27 @@ static int prcm_clear_mod_irqs(s16 module, u8 regs)
210 OMAP3430ES2_PM_MPUGRPSEL3 : OMAP3430_PM_MPUGRPSEL; 214 OMAP3430ES2_PM_MPUGRPSEL3 : OMAP3430_PM_MPUGRPSEL;
211 int c = 0; 215 int c = 0;
212 216
213 wkst = prm_read_mod_reg(module, wkst_off); 217 wkst = omap2_prm_read_mod_reg(module, wkst_off);
214 wkst &= prm_read_mod_reg(module, grpsel_off); 218 wkst &= omap2_prm_read_mod_reg(module, grpsel_off);
215 if (wkst) { 219 if (wkst) {
216 iclk = cm_read_mod_reg(module, iclk_off); 220 iclk = omap2_cm_read_mod_reg(module, iclk_off);
217 fclk = cm_read_mod_reg(module, fclk_off); 221 fclk = omap2_cm_read_mod_reg(module, fclk_off);
218 while (wkst) { 222 while (wkst) {
219 clken = wkst; 223 clken = wkst;
220 cm_set_mod_reg_bits(clken, module, iclk_off); 224 omap2_cm_set_mod_reg_bits(clken, module, iclk_off);
221 /* 225 /*
222 * For USBHOST, we don't know whether HOST1 or 226 * For USBHOST, we don't know whether HOST1 or
223 * HOST2 woke us up, so enable both f-clocks 227 * HOST2 woke us up, so enable both f-clocks
224 */ 228 */
225 if (module == OMAP3430ES2_USBHOST_MOD) 229 if (module == OMAP3430ES2_USBHOST_MOD)
226 clken |= 1 << OMAP3430ES2_EN_USBHOST2_SHIFT; 230 clken |= 1 << OMAP3430ES2_EN_USBHOST2_SHIFT;
227 cm_set_mod_reg_bits(clken, module, fclk_off); 231 omap2_cm_set_mod_reg_bits(clken, module, fclk_off);
228 prm_write_mod_reg(wkst, module, wkst_off); 232 omap2_prm_write_mod_reg(wkst, module, wkst_off);
229 wkst = prm_read_mod_reg(module, wkst_off); 233 wkst = omap2_prm_read_mod_reg(module, wkst_off);
230 c++; 234 c++;
231 } 235 }
232 cm_write_mod_reg(iclk, module, iclk_off); 236 omap2_cm_write_mod_reg(iclk, module, iclk_off);
233 cm_write_mod_reg(fclk, module, fclk_off); 237 omap2_cm_write_mod_reg(fclk, module, fclk_off);
234 } 238 }
235 239
236 return c; 240 return c;
@@ -273,9 +277,9 @@ static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id)
273 u32 irqenable_mpu, irqstatus_mpu; 277 u32 irqenable_mpu, irqstatus_mpu;
274 int c = 0; 278 int c = 0;
275 279
276 irqenable_mpu = prm_read_mod_reg(OCP_MOD, 280 irqenable_mpu = omap2_prm_read_mod_reg(OCP_MOD,
277 OMAP3_PRM_IRQENABLE_MPU_OFFSET); 281 OMAP3_PRM_IRQENABLE_MPU_OFFSET);
278 irqstatus_mpu = prm_read_mod_reg(OCP_MOD, 282 irqstatus_mpu = omap2_prm_read_mod_reg(OCP_MOD,
279 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 283 OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
280 irqstatus_mpu &= irqenable_mpu; 284 irqstatus_mpu &= irqenable_mpu;
281 285
@@ -296,10 +300,10 @@ static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id)
296 "no code to handle it (%08x)\n", irqstatus_mpu); 300 "no code to handle it (%08x)\n", irqstatus_mpu);
297 } 301 }
298 302
299 prm_write_mod_reg(irqstatus_mpu, OCP_MOD, 303 omap2_prm_write_mod_reg(irqstatus_mpu, OCP_MOD,
300 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 304 OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
301 305
302 irqstatus_mpu = prm_read_mod_reg(OCP_MOD, 306 irqstatus_mpu = omap2_prm_read_mod_reg(OCP_MOD,
303 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 307 OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
304 irqstatus_mpu &= irqenable_mpu; 308 irqstatus_mpu &= irqenable_mpu;
305 309
@@ -308,15 +312,10 @@ static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id)
308 return IRQ_HANDLED; 312 return IRQ_HANDLED;
309} 313}
310 314
311static void restore_control_register(u32 val)
312{
313 __asm__ __volatile__ ("mcr p15, 0, %0, c1, c0, 0" : : "r" (val));
314}
315
316/* Function to restore the table entry that was modified for enabling MMU */ 315/* Function to restore the table entry that was modified for enabling MMU */
317static void restore_table_entry(void) 316static void restore_table_entry(void)
318{ 317{
319 u32 *scratchpad_address; 318 void __iomem *scratchpad_address;
320 u32 previous_value, control_reg_value; 319 u32 previous_value, control_reg_value;
321 u32 *address; 320 u32 *address;
322 321
@@ -334,7 +333,7 @@ static void restore_table_entry(void)
334 control_reg_value = __raw_readl(scratchpad_address 333 control_reg_value = __raw_readl(scratchpad_address
335 + OMAP343X_CONTROL_REG_VALUE_OFFSET); 334 + OMAP343X_CONTROL_REG_VALUE_OFFSET);
336 /* This will enable caches and prediction */ 335 /* This will enable caches and prediction */
337 restore_control_register(control_reg_value); 336 set_cr(control_reg_value);
338} 337}
339 338
340void omap_sram_idle(void) 339void omap_sram_idle(void)
@@ -349,9 +348,9 @@ void omap_sram_idle(void)
349 int mpu_next_state = PWRDM_POWER_ON; 348 int mpu_next_state = PWRDM_POWER_ON;
350 int per_next_state = PWRDM_POWER_ON; 349 int per_next_state = PWRDM_POWER_ON;
351 int core_next_state = PWRDM_POWER_ON; 350 int core_next_state = PWRDM_POWER_ON;
351 int per_going_off;
352 int core_prev_state, per_prev_state; 352 int core_prev_state, per_prev_state;
353 u32 sdrc_pwr = 0; 353 u32 sdrc_pwr = 0;
354 int per_state_modified = 0;
355 354
356 if (!_omap_sram_idle) 355 if (!_omap_sram_idle)
357 return; 356 return;
@@ -385,37 +384,37 @@ void omap_sram_idle(void)
385 /* Enable IO-PAD and IO-CHAIN wakeups */ 384 /* Enable IO-PAD and IO-CHAIN wakeups */
386 per_next_state = pwrdm_read_next_pwrst(per_pwrdm); 385 per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
387 core_next_state = pwrdm_read_next_pwrst(core_pwrdm); 386 core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
388 if (omap3_has_io_wakeup() && \ 387 if (omap3_has_io_wakeup() &&
389 (per_next_state < PWRDM_POWER_ON || 388 (per_next_state < PWRDM_POWER_ON ||
390 core_next_state < PWRDM_POWER_ON)) { 389 core_next_state < PWRDM_POWER_ON)) {
391 prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); 390 omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
392 omap3_enable_io_chain(); 391 omap3_enable_io_chain();
393 } 392 }
394 393
394 /* Block console output in case it is on one of the OMAP UARTs */
395 if (!is_suspending())
396 if (per_next_state < PWRDM_POWER_ON ||
397 core_next_state < PWRDM_POWER_ON)
398 if (!console_trylock())
399 goto console_still_active;
400
395 /* PER */ 401 /* PER */
396 if (per_next_state < PWRDM_POWER_ON) { 402 if (per_next_state < PWRDM_POWER_ON) {
403 per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;
397 omap_uart_prepare_idle(2); 404 omap_uart_prepare_idle(2);
398 omap2_gpio_prepare_for_idle(per_next_state); 405 omap_uart_prepare_idle(3);
399 if (per_next_state == PWRDM_POWER_OFF) { 406 omap2_gpio_prepare_for_idle(per_going_off);
400 if (core_next_state == PWRDM_POWER_ON) { 407 if (per_next_state == PWRDM_POWER_OFF)
401 per_next_state = PWRDM_POWER_RET;
402 pwrdm_set_next_pwrst(per_pwrdm, per_next_state);
403 per_state_modified = 1;
404 } else
405 omap3_per_save_context(); 408 omap3_per_save_context();
406 }
407 } 409 }
408 410
409 if (pwrdm_read_pwrst(cam_pwrdm) == PWRDM_POWER_ON)
410 omap2_clkdm_deny_idle(mpu_pwrdm->pwrdm_clkdms[0]);
411
412 /* CORE */ 411 /* CORE */
413 if (core_next_state < PWRDM_POWER_ON) { 412 if (core_next_state < PWRDM_POWER_ON) {
414 omap_uart_prepare_idle(0); 413 omap_uart_prepare_idle(0);
415 omap_uart_prepare_idle(1); 414 omap_uart_prepare_idle(1);
416 if (core_next_state == PWRDM_POWER_OFF) { 415 if (core_next_state == PWRDM_POWER_OFF) {
417 omap3_core_save_context(); 416 omap3_core_save_context();
418 omap3_prcm_save_context(); 417 omap3_cm_save_context();
419 } 418 }
420 } 419 }
421 420
@@ -424,7 +423,7 @@ void omap_sram_idle(void)
424 /* 423 /*
425 * On EMU/HS devices ROM code restores a SRDC value 424 * On EMU/HS devices ROM code restores a SRDC value
426 * from scratchpad which has automatic self refresh on timeout 425 * from scratchpad which has automatic self refresh on timeout
427 * of AUTO_CNT = 1 enabled. This takes care of errata 1.142. 426 * of AUTO_CNT = 1 enabled. This takes care of erratum ID i443.
428 * Hence store/restore the SDRC_POWER register here. 427 * Hence store/restore the SDRC_POWER register here.
429 */ 428 */
430 if (omap_rev() >= OMAP3430_REV_ES3_0 && 429 if (omap_rev() >= OMAP3430_REV_ES3_0 &&
@@ -455,14 +454,14 @@ void omap_sram_idle(void)
455 core_prev_state = pwrdm_read_prev_pwrst(core_pwrdm); 454 core_prev_state = pwrdm_read_prev_pwrst(core_pwrdm);
456 if (core_prev_state == PWRDM_POWER_OFF) { 455 if (core_prev_state == PWRDM_POWER_OFF) {
457 omap3_core_restore_context(); 456 omap3_core_restore_context();
458 omap3_prcm_restore_context(); 457 omap3_cm_restore_context();
459 omap3_sram_restore_context(); 458 omap3_sram_restore_context();
460 omap2_sms_restore_context(); 459 omap2_sms_restore_context();
461 } 460 }
462 omap_uart_resume_idle(0); 461 omap_uart_resume_idle(0);
463 omap_uart_resume_idle(1); 462 omap_uart_resume_idle(1);
464 if (core_next_state == PWRDM_POWER_OFF) 463 if (core_next_state == PWRDM_POWER_OFF)
465 prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK, 464 omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,
466 OMAP3430_GR_MOD, 465 OMAP3430_GR_MOD,
467 OMAP3_PRM_VOLTCTRL_OFFSET); 466 OMAP3_PRM_VOLTCTRL_OFFSET);
468 } 467 }
@@ -475,21 +474,25 @@ void omap_sram_idle(void)
475 if (per_prev_state == PWRDM_POWER_OFF) 474 if (per_prev_state == PWRDM_POWER_OFF)
476 omap3_per_restore_context(); 475 omap3_per_restore_context();
477 omap_uart_resume_idle(2); 476 omap_uart_resume_idle(2);
478 if (per_state_modified) 477 omap_uart_resume_idle(3);
479 pwrdm_set_next_pwrst(per_pwrdm, PWRDM_POWER_OFF);
480 } 478 }
481 479
480 if (!is_suspending())
481 console_unlock();
482
483console_still_active:
482 /* Disable IO-PAD and IO-CHAIN wakeup */ 484 /* Disable IO-PAD and IO-CHAIN wakeup */
483 if (omap3_has_io_wakeup() && 485 if (omap3_has_io_wakeup() &&
484 (per_next_state < PWRDM_POWER_ON || 486 (per_next_state < PWRDM_POWER_ON ||
485 core_next_state < PWRDM_POWER_ON)) { 487 core_next_state < PWRDM_POWER_ON)) {
486 prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); 488 omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD,
489 PM_WKEN);
487 omap3_disable_io_chain(); 490 omap3_disable_io_chain();
488 } 491 }
489 492
490 pwrdm_post_transition(); 493 pwrdm_post_transition();
491 494
492 omap2_clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); 495 clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]);
493} 496}
494 497
495int omap3_can_sleep(void) 498int omap3_can_sleep(void)
@@ -501,51 +504,6 @@ int omap3_can_sleep(void)
501 return 1; 504 return 1;
502} 505}
503 506
504/* This sets pwrdm state (other than mpu & core. Currently only ON &
505 * RET are supported. Function is assuming that clkdm doesn't have
506 * hw_sup mode enabled. */
507int set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
508{
509 u32 cur_state;
510 int sleep_switch = 0;
511 int ret = 0;
512
513 if (pwrdm == NULL || IS_ERR(pwrdm))
514 return -EINVAL;
515
516 while (!(pwrdm->pwrsts & (1 << state))) {
517 if (state == PWRDM_POWER_OFF)
518 return ret;
519 state--;
520 }
521
522 cur_state = pwrdm_read_next_pwrst(pwrdm);
523 if (cur_state == state)
524 return ret;
525
526 if (pwrdm_read_pwrst(pwrdm) < PWRDM_POWER_ON) {
527 omap2_clkdm_wakeup(pwrdm->pwrdm_clkdms[0]);
528 sleep_switch = 1;
529 pwrdm_wait_transition(pwrdm);
530 }
531
532 ret = pwrdm_set_next_pwrst(pwrdm, state);
533 if (ret) {
534 printk(KERN_ERR "Unable to set state of powerdomain: %s\n",
535 pwrdm->name);
536 goto err;
537 }
538
539 if (sleep_switch) {
540 omap2_clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]);
541 pwrdm_wait_transition(pwrdm);
542 pwrdm_state_switch(pwrdm);
543 }
544
545err:
546 return ret;
547}
548
549static void omap3_pm_idle(void) 507static void omap3_pm_idle(void)
550{ 508{
551 local_irq_disable(); 509 local_irq_disable();
@@ -557,39 +515,20 @@ static void omap3_pm_idle(void)
557 if (omap_irq_pending() || need_resched()) 515 if (omap_irq_pending() || need_resched())
558 goto out; 516 goto out;
559 517
518 trace_power_start(POWER_CSTATE, 1, smp_processor_id());
519 trace_cpu_idle(1, smp_processor_id());
520
560 omap_sram_idle(); 521 omap_sram_idle();
561 522
523 trace_power_end(smp_processor_id());
524 trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id());
525
562out: 526out:
563 local_fiq_enable(); 527 local_fiq_enable();
564 local_irq_enable(); 528 local_irq_enable();
565} 529}
566 530
567#ifdef CONFIG_SUSPEND 531#ifdef CONFIG_SUSPEND
568static suspend_state_t suspend_state;
569
570static void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds)
571{
572 u32 tick_rate, cycles;
573
574 if (!seconds && !milliseconds)
575 return;
576
577 tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
578 cycles = tick_rate * seconds + tick_rate * milliseconds / 1000;
579 omap_dm_timer_stop(gptimer_wakeup);
580 omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
581
582 pr_info("PM: Resume timer in %u.%03u secs"
583 " (%d ticks at %d ticks/sec.)\n",
584 seconds, milliseconds, cycles, tick_rate);
585}
586
587static int omap3_pm_prepare(void)
588{
589 disable_hlt();
590 return 0;
591}
592
593static int omap3_pm_suspend(void) 532static int omap3_pm_suspend(void)
594{ 533{
595 struct power_state *pwrst; 534 struct power_state *pwrst;
@@ -604,7 +543,7 @@ static int omap3_pm_suspend(void)
604 pwrst->saved_state = pwrdm_read_next_pwrst(pwrst->pwrdm); 543 pwrst->saved_state = pwrdm_read_next_pwrst(pwrst->pwrdm);
605 /* Set ones wanted by suspend */ 544 /* Set ones wanted by suspend */
606 list_for_each_entry(pwrst, &pwrst_list, node) { 545 list_for_each_entry(pwrst, &pwrst_list, node) {
607 if (set_pwrdm_state(pwrst->pwrdm, pwrst->next_state)) 546 if (omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state))
608 goto restore; 547 goto restore;
609 if (pwrdm_clear_all_prev_pwrst(pwrst->pwrdm)) 548 if (pwrdm_clear_all_prev_pwrst(pwrst->pwrdm))
610 goto restore; 549 goto restore;
@@ -625,7 +564,7 @@ restore:
625 pwrst->pwrdm->name, pwrst->next_state); 564 pwrst->pwrdm->name, pwrst->next_state);
626 ret = -1; 565 ret = -1;
627 } 566 }
628 set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state); 567 omap_set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);
629 } 568 }
630 if (ret) 569 if (ret)
631 printk(KERN_ERR "Could not enter target state in pm_suspend\n"); 570 printk(KERN_ERR "Could not enter target state in pm_suspend\n");
@@ -652,14 +591,10 @@ static int omap3_pm_enter(suspend_state_t unused)
652 return ret; 591 return ret;
653} 592}
654 593
655static void omap3_pm_finish(void)
656{
657 enable_hlt();
658}
659
660/* Hooks to enable / disable UART interrupts during suspend */ 594/* Hooks to enable / disable UART interrupts during suspend */
661static int omap3_pm_begin(suspend_state_t state) 595static int omap3_pm_begin(suspend_state_t state)
662{ 596{
597 disable_hlt();
663 suspend_state = state; 598 suspend_state = state;
664 omap_uart_enable_irqs(0); 599 omap_uart_enable_irqs(0);
665 return 0; 600 return 0;
@@ -669,15 +604,14 @@ static void omap3_pm_end(void)
669{ 604{
670 suspend_state = PM_SUSPEND_ON; 605 suspend_state = PM_SUSPEND_ON;
671 omap_uart_enable_irqs(1); 606 omap_uart_enable_irqs(1);
607 enable_hlt();
672 return; 608 return;
673} 609}
674 610
675static struct platform_suspend_ops omap_pm_ops = { 611static const struct platform_suspend_ops omap_pm_ops = {
676 .begin = omap3_pm_begin, 612 .begin = omap3_pm_begin,
677 .end = omap3_pm_end, 613 .end = omap3_pm_end,
678 .prepare = omap3_pm_prepare,
679 .enter = omap3_pm_enter, 614 .enter = omap3_pm_enter,
680 .finish = omap3_pm_finish,
681 .valid = suspend_valid_only_mem, 615 .valid = suspend_valid_only_mem,
682}; 616};
683#endif /* CONFIG_SUSPEND */ 617#endif /* CONFIG_SUSPEND */
@@ -696,21 +630,21 @@ static struct platform_suspend_ops omap_pm_ops = {
696static void __init omap3_iva_idle(void) 630static void __init omap3_iva_idle(void)
697{ 631{
698 /* ensure IVA2 clock is disabled */ 632 /* ensure IVA2 clock is disabled */
699 cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN); 633 omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
700 634
701 /* if no clock activity, nothing else to do */ 635 /* if no clock activity, nothing else to do */
702 if (!(cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) & 636 if (!(omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) &
703 OMAP3430_CLKACTIVITY_IVA2_MASK)) 637 OMAP3430_CLKACTIVITY_IVA2_MASK))
704 return; 638 return;
705 639
706 /* Reset IVA2 */ 640 /* Reset IVA2 */
707 prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK | 641 omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
708 OMAP3430_RST2_IVA2_MASK | 642 OMAP3430_RST2_IVA2_MASK |
709 OMAP3430_RST3_IVA2_MASK, 643 OMAP3430_RST3_IVA2_MASK,
710 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 644 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
711 645
712 /* Enable IVA2 clock */ 646 /* Enable IVA2 clock */
713 cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK, 647 omap2_cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK,
714 OMAP3430_IVA2_MOD, CM_FCLKEN); 648 OMAP3430_IVA2_MOD, CM_FCLKEN);
715 649
716 /* Set IVA2 boot mode to 'idle' */ 650 /* Set IVA2 boot mode to 'idle' */
@@ -718,13 +652,13 @@ static void __init omap3_iva_idle(void)
718 OMAP343X_CONTROL_IVA2_BOOTMOD); 652 OMAP343X_CONTROL_IVA2_BOOTMOD);
719 653
720 /* Un-reset IVA2 */ 654 /* Un-reset IVA2 */
721 prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 655 omap2_prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
722 656
723 /* Disable IVA2 clock */ 657 /* Disable IVA2 clock */
724 cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN); 658 omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN);
725 659
726 /* Reset IVA2 */ 660 /* Reset IVA2 */
727 prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK | 661 omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK |
728 OMAP3430_RST2_IVA2_MASK | 662 OMAP3430_RST2_IVA2_MASK |
729 OMAP3430_RST3_IVA2_MASK, 663 OMAP3430_RST3_IVA2_MASK,
730 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 664 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL);
@@ -748,184 +682,61 @@ static void __init omap3_d2d_idle(void)
748 omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_IDLEACK); 682 omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_IDLEACK);
749 683
750 /* reset modem */ 684 /* reset modem */
751 prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON_MASK | 685 omap2_prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON_MASK |
752 OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST_MASK, 686 OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST_MASK,
753 CORE_MOD, OMAP2_RM_RSTCTRL); 687 CORE_MOD, OMAP2_RM_RSTCTRL);
754 prm_write_mod_reg(0, CORE_MOD, OMAP2_RM_RSTCTRL); 688 omap2_prm_write_mod_reg(0, CORE_MOD, OMAP2_RM_RSTCTRL);
755} 689}
756 690
757static void __init prcm_setup_regs(void) 691static void __init prcm_setup_regs(void)
758{ 692{
759 /* XXX Reset all wkdeps. This should be done when initializing 693 u32 omap3630_en_uart4_mask = cpu_is_omap3630() ?
760 * powerdomains */ 694 OMAP3630_EN_UART4_MASK : 0;
761 prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP); 695 u32 omap3630_grpsel_uart4_mask = cpu_is_omap3630() ?
762 prm_write_mod_reg(0, MPU_MOD, PM_WKDEP); 696 OMAP3630_GRPSEL_UART4_MASK : 0;
763 prm_write_mod_reg(0, OMAP3430_DSS_MOD, PM_WKDEP);
764 prm_write_mod_reg(0, OMAP3430_NEON_MOD, PM_WKDEP);
765 prm_write_mod_reg(0, OMAP3430_CAM_MOD, PM_WKDEP);
766 prm_write_mod_reg(0, OMAP3430_PER_MOD, PM_WKDEP);
767 if (omap_rev() > OMAP3430_REV_ES1_0) {
768 prm_write_mod_reg(0, OMAP3430ES2_SGX_MOD, PM_WKDEP);
769 prm_write_mod_reg(0, OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
770 } else
771 prm_write_mod_reg(0, GFX_MOD, PM_WKDEP);
772
773 /*
774 * Enable interface clock autoidle for all modules.
775 * Note that in the long run this should be done by clockfw
776 */
777 cm_write_mod_reg(
778 OMAP3430_AUTO_MODEM_MASK |
779 OMAP3430ES2_AUTO_MMC3_MASK |
780 OMAP3430ES2_AUTO_ICR_MASK |
781 OMAP3430_AUTO_AES2_MASK |
782 OMAP3430_AUTO_SHA12_MASK |
783 OMAP3430_AUTO_DES2_MASK |
784 OMAP3430_AUTO_MMC2_MASK |
785 OMAP3430_AUTO_MMC1_MASK |
786 OMAP3430_AUTO_MSPRO_MASK |
787 OMAP3430_AUTO_HDQ_MASK |
788 OMAP3430_AUTO_MCSPI4_MASK |
789 OMAP3430_AUTO_MCSPI3_MASK |
790 OMAP3430_AUTO_MCSPI2_MASK |
791 OMAP3430_AUTO_MCSPI1_MASK |
792 OMAP3430_AUTO_I2C3_MASK |
793 OMAP3430_AUTO_I2C2_MASK |
794 OMAP3430_AUTO_I2C1_MASK |
795 OMAP3430_AUTO_UART2_MASK |
796 OMAP3430_AUTO_UART1_MASK |
797 OMAP3430_AUTO_GPT11_MASK |
798 OMAP3430_AUTO_GPT10_MASK |
799 OMAP3430_AUTO_MCBSP5_MASK |
800 OMAP3430_AUTO_MCBSP1_MASK |
801 OMAP3430ES1_AUTO_FAC_MASK | /* This is es1 only */
802 OMAP3430_AUTO_MAILBOXES_MASK |
803 OMAP3430_AUTO_OMAPCTRL_MASK |
804 OMAP3430ES1_AUTO_FSHOSTUSB_MASK |
805 OMAP3430_AUTO_HSOTGUSB_MASK |
806 OMAP3430_AUTO_SAD2D_MASK |
807 OMAP3430_AUTO_SSI_MASK,
808 CORE_MOD, CM_AUTOIDLE1);
809
810 cm_write_mod_reg(
811 OMAP3430_AUTO_PKA_MASK |
812 OMAP3430_AUTO_AES1_MASK |
813 OMAP3430_AUTO_RNG_MASK |
814 OMAP3430_AUTO_SHA11_MASK |
815 OMAP3430_AUTO_DES1_MASK,
816 CORE_MOD, CM_AUTOIDLE2);
817
818 if (omap_rev() > OMAP3430_REV_ES1_0) {
819 cm_write_mod_reg(
820 OMAP3430_AUTO_MAD2D_MASK |
821 OMAP3430ES2_AUTO_USBTLL_MASK,
822 CORE_MOD, CM_AUTOIDLE3);
823 }
824
825 cm_write_mod_reg(
826 OMAP3430_AUTO_WDT2_MASK |
827 OMAP3430_AUTO_WDT1_MASK |
828 OMAP3430_AUTO_GPIO1_MASK |
829 OMAP3430_AUTO_32KSYNC_MASK |
830 OMAP3430_AUTO_GPT12_MASK |
831 OMAP3430_AUTO_GPT1_MASK,
832 WKUP_MOD, CM_AUTOIDLE);
833
834 cm_write_mod_reg(
835 OMAP3430_AUTO_DSS_MASK,
836 OMAP3430_DSS_MOD,
837 CM_AUTOIDLE);
838
839 cm_write_mod_reg(
840 OMAP3430_AUTO_CAM_MASK,
841 OMAP3430_CAM_MOD,
842 CM_AUTOIDLE);
843
844 cm_write_mod_reg(
845 OMAP3430_AUTO_GPIO6_MASK |
846 OMAP3430_AUTO_GPIO5_MASK |
847 OMAP3430_AUTO_GPIO4_MASK |
848 OMAP3430_AUTO_GPIO3_MASK |
849 OMAP3430_AUTO_GPIO2_MASK |
850 OMAP3430_AUTO_WDT3_MASK |
851 OMAP3430_AUTO_UART3_MASK |
852 OMAP3430_AUTO_GPT9_MASK |
853 OMAP3430_AUTO_GPT8_MASK |
854 OMAP3430_AUTO_GPT7_MASK |
855 OMAP3430_AUTO_GPT6_MASK |
856 OMAP3430_AUTO_GPT5_MASK |
857 OMAP3430_AUTO_GPT4_MASK |
858 OMAP3430_AUTO_GPT3_MASK |
859 OMAP3430_AUTO_GPT2_MASK |
860 OMAP3430_AUTO_MCBSP4_MASK |
861 OMAP3430_AUTO_MCBSP3_MASK |
862 OMAP3430_AUTO_MCBSP2_MASK,
863 OMAP3430_PER_MOD,
864 CM_AUTOIDLE);
865
866 if (omap_rev() > OMAP3430_REV_ES1_0) {
867 cm_write_mod_reg(
868 OMAP3430ES2_AUTO_USBHOST_MASK,
869 OMAP3430ES2_USBHOST_MOD,
870 CM_AUTOIDLE);
871 }
872 697
698 /* XXX This should be handled by hwmod code or SCM init code */
873 omap_ctrl_writel(OMAP3430_AUTOIDLE_MASK, OMAP2_CONTROL_SYSCONFIG); 699 omap_ctrl_writel(OMAP3430_AUTOIDLE_MASK, OMAP2_CONTROL_SYSCONFIG);
874 700
875 /* 701 /*
876 * Set all plls to autoidle. This is needed until autoidle is
877 * enabled by clockfw
878 */
879 cm_write_mod_reg(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT,
880 OMAP3430_IVA2_MOD, CM_AUTOIDLE2);
881 cm_write_mod_reg(1 << OMAP3430_AUTO_MPU_DPLL_SHIFT,
882 MPU_MOD,
883 CM_AUTOIDLE2);
884 cm_write_mod_reg((1 << OMAP3430_AUTO_PERIPH_DPLL_SHIFT) |
885 (1 << OMAP3430_AUTO_CORE_DPLL_SHIFT),
886 PLL_MOD,
887 CM_AUTOIDLE);
888 cm_write_mod_reg(1 << OMAP3430ES2_AUTO_PERIPH2_DPLL_SHIFT,
889 PLL_MOD,
890 CM_AUTOIDLE2);
891
892 /*
893 * Enable control of expternal oscillator through 702 * Enable control of expternal oscillator through
894 * sys_clkreq. In the long run clock framework should 703 * sys_clkreq. In the long run clock framework should
895 * take care of this. 704 * take care of this.
896 */ 705 */
897 prm_rmw_mod_reg_bits(OMAP_AUTOEXTCLKMODE_MASK, 706 omap2_prm_rmw_mod_reg_bits(OMAP_AUTOEXTCLKMODE_MASK,
898 1 << OMAP_AUTOEXTCLKMODE_SHIFT, 707 1 << OMAP_AUTOEXTCLKMODE_SHIFT,
899 OMAP3430_GR_MOD, 708 OMAP3430_GR_MOD,
900 OMAP3_PRM_CLKSRC_CTRL_OFFSET); 709 OMAP3_PRM_CLKSRC_CTRL_OFFSET);
901 710
902 /* setup wakup source */ 711 /* setup wakup source */
903 prm_write_mod_reg(OMAP3430_EN_IO_MASK | OMAP3430_EN_GPIO1_MASK | 712 omap2_prm_write_mod_reg(OMAP3430_EN_IO_MASK | OMAP3430_EN_GPIO1_MASK |
904 OMAP3430_EN_GPT1_MASK | OMAP3430_EN_GPT12_MASK, 713 OMAP3430_EN_GPT1_MASK | OMAP3430_EN_GPT12_MASK,
905 WKUP_MOD, PM_WKEN); 714 WKUP_MOD, PM_WKEN);
906 /* No need to write EN_IO, that is always enabled */ 715 /* No need to write EN_IO, that is always enabled */
907 prm_write_mod_reg(OMAP3430_GRPSEL_GPIO1_MASK | 716 omap2_prm_write_mod_reg(OMAP3430_GRPSEL_GPIO1_MASK |
908 OMAP3430_GRPSEL_GPT1_MASK | 717 OMAP3430_GRPSEL_GPT1_MASK |
909 OMAP3430_GRPSEL_GPT12_MASK, 718 OMAP3430_GRPSEL_GPT12_MASK,
910 WKUP_MOD, OMAP3430_PM_MPUGRPSEL); 719 WKUP_MOD, OMAP3430_PM_MPUGRPSEL);
911 /* For some reason IO doesn't generate wakeup event even if 720 /* For some reason IO doesn't generate wakeup event even if
912 * it is selected to mpu wakeup goup */ 721 * it is selected to mpu wakeup goup */
913 prm_write_mod_reg(OMAP3430_IO_EN_MASK | OMAP3430_WKUP_EN_MASK, 722 omap2_prm_write_mod_reg(OMAP3430_IO_EN_MASK | OMAP3430_WKUP_EN_MASK,
914 OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); 723 OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET);
915 724
916 /* Enable PM_WKEN to support DSS LPR */ 725 /* Enable PM_WKEN to support DSS LPR */
917 prm_write_mod_reg(OMAP3430_PM_WKEN_DSS_EN_DSS_MASK, 726 omap2_prm_write_mod_reg(OMAP3430_PM_WKEN_DSS_EN_DSS_MASK,
918 OMAP3430_DSS_MOD, PM_WKEN); 727 OMAP3430_DSS_MOD, PM_WKEN);
919 728
920 /* Enable wakeups in PER */ 729 /* Enable wakeups in PER */
921 prm_write_mod_reg(OMAP3430_EN_GPIO2_MASK | OMAP3430_EN_GPIO3_MASK | 730 omap2_prm_write_mod_reg(omap3630_en_uart4_mask |
731 OMAP3430_EN_GPIO2_MASK | OMAP3430_EN_GPIO3_MASK |
922 OMAP3430_EN_GPIO4_MASK | OMAP3430_EN_GPIO5_MASK | 732 OMAP3430_EN_GPIO4_MASK | OMAP3430_EN_GPIO5_MASK |
923 OMAP3430_EN_GPIO6_MASK | OMAP3430_EN_UART3_MASK | 733 OMAP3430_EN_GPIO6_MASK | OMAP3430_EN_UART3_MASK |
924 OMAP3430_EN_MCBSP2_MASK | OMAP3430_EN_MCBSP3_MASK | 734 OMAP3430_EN_MCBSP2_MASK | OMAP3430_EN_MCBSP3_MASK |
925 OMAP3430_EN_MCBSP4_MASK, 735 OMAP3430_EN_MCBSP4_MASK,
926 OMAP3430_PER_MOD, PM_WKEN); 736 OMAP3430_PER_MOD, PM_WKEN);
927 /* and allow them to wake up MPU */ 737 /* and allow them to wake up MPU */
928 prm_write_mod_reg(OMAP3430_GRPSEL_GPIO2_MASK | 738 omap2_prm_write_mod_reg(omap3630_grpsel_uart4_mask |
739 OMAP3430_GRPSEL_GPIO2_MASK |
929 OMAP3430_GRPSEL_GPIO3_MASK | 740 OMAP3430_GRPSEL_GPIO3_MASK |
930 OMAP3430_GRPSEL_GPIO4_MASK | 741 OMAP3430_GRPSEL_GPIO4_MASK |
931 OMAP3430_GRPSEL_GPIO5_MASK | 742 OMAP3430_GRPSEL_GPIO5_MASK |
@@ -937,22 +748,22 @@ static void __init prcm_setup_regs(void)
937 OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); 748 OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL);
938 749
939 /* Don't attach IVA interrupts */ 750 /* Don't attach IVA interrupts */
940 prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); 751 omap2_prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL);
941 prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); 752 omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1);
942 prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); 753 omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3);
943 prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL); 754 omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL);
944 755
945 /* Clear any pending 'reset' flags */ 756 /* Clear any pending 'reset' flags */
946 prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST); 757 omap2_prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST);
947 prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP2_RM_RSTST); 758 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP2_RM_RSTST);
948 prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, OMAP2_RM_RSTST); 759 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, OMAP2_RM_RSTST);
949 prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, OMAP2_RM_RSTST); 760 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, OMAP2_RM_RSTST);
950 prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, OMAP2_RM_RSTST); 761 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, OMAP2_RM_RSTST);
951 prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, OMAP2_RM_RSTST); 762 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, OMAP2_RM_RSTST);
952 prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, OMAP2_RM_RSTST); 763 omap2_prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, OMAP2_RM_RSTST);
953 764
954 /* Clear any pending PRCM interrupts */ 765 /* Clear any pending PRCM interrupts */
955 prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 766 omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
956 767
957 omap3_iva_idle(); 768 omap3_iva_idle();
958 omap3_d2d_idle(); 769 omap3_d2d_idle();
@@ -968,13 +779,17 @@ void omap3_pm_off_mode_enable(int enable)
968 else 779 else
969 state = PWRDM_POWER_RET; 780 state = PWRDM_POWER_RET;
970 781
971#ifdef CONFIG_CPU_IDLE
972 omap3_cpuidle_update_states();
973#endif
974
975 list_for_each_entry(pwrst, &pwrst_list, node) { 782 list_for_each_entry(pwrst, &pwrst_list, node) {
976 pwrst->next_state = state; 783 if (IS_PM34XX_ERRATUM(PM_SDRC_WAKEUP_ERRATUM_i583) &&
977 set_pwrdm_state(pwrst->pwrdm, state); 784 pwrst->pwrdm == core_pwrdm &&
785 state == PWRDM_POWER_OFF) {
786 pwrst->next_state = PWRDM_POWER_RET;
787 pr_warn("%s: Core OFF disabled due to errata i583\n",
788 __func__);
789 } else {
790 pwrst->next_state = state;
791 }
792 omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state);
978 } 793 }
979} 794}
980 795
@@ -1019,7 +834,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
1019 if (pwrdm_has_hdwr_sar(pwrdm)) 834 if (pwrdm_has_hdwr_sar(pwrdm))
1020 pwrdm_enable_hdwr_sar(pwrdm); 835 pwrdm_enable_hdwr_sar(pwrdm);
1021 836
1022 return set_pwrdm_state(pwrst->pwrdm, pwrst->next_state); 837 return omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state);
1023} 838}
1024 839
1025/* 840/*
@@ -1029,14 +844,11 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
1029 */ 844 */
1030static int __init clkdms_setup(struct clockdomain *clkdm, void *unused) 845static int __init clkdms_setup(struct clockdomain *clkdm, void *unused)
1031{ 846{
1032 clkdm_clear_all_wkdeps(clkdm);
1033 clkdm_clear_all_sleepdeps(clkdm);
1034
1035 if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO) 847 if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO)
1036 omap2_clkdm_allow_idle(clkdm); 848 clkdm_allow_idle(clkdm);
1037 else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP && 849 else if (clkdm->flags & CLKDM_CAN_FORCE_SLEEP &&
1038 atomic_read(&clkdm->usecount) == 0) 850 atomic_read(&clkdm->usecount) == 0)
1039 omap2_clkdm_sleep(clkdm); 851 clkdm_sleep(clkdm);
1040 return 0; 852 return 0;
1041} 853}
1042 854
@@ -1049,6 +861,17 @@ void omap_push_sram_idle(void)
1049 save_secure_ram_context_sz); 861 save_secure_ram_context_sz);
1050} 862}
1051 863
864static void __init pm_errata_configure(void)
865{
866 if (cpu_is_omap3630()) {
867 pm34xx_errata |= PM_RTA_ERRATUM_i608;
868 /* Enable the l2 cache toggling in sleep logic */
869 enable_omap3630_toggle_l2_on_restore();
870 if (omap_rev() < OMAP3630_REV_ES1_2)
871 pm34xx_errata |= PM_SDRC_WAKEUP_ERRATUM_i583;
872 }
873}
874
1052static int __init omap3_pm_init(void) 875static int __init omap3_pm_init(void)
1053{ 876{
1054 struct power_state *pwrst, *tmp; 877 struct power_state *pwrst, *tmp;
@@ -1058,7 +881,7 @@ static int __init omap3_pm_init(void)
1058 if (!cpu_is_omap34xx()) 881 if (!cpu_is_omap34xx())
1059 return -ENODEV; 882 return -ENODEV;
1060 883
1061 printk(KERN_ERR "Power Management for TI OMAP3.\n"); 884 pm_errata_configure();
1062 885
1063 /* XXX prcm_setup_regs needs to be before enabling hw 886 /* XXX prcm_setup_regs needs to be before enabling hw
1064 * supervised mode for powerdomains */ 887 * supervised mode for powerdomains */
@@ -1105,6 +928,14 @@ static int __init omap3_pm_init(void)
1105 pm_idle = omap3_pm_idle; 928 pm_idle = omap3_pm_idle;
1106 omap3_idle_init(); 929 omap3_idle_init();
1107 930
931 /*
932 * RTA is disabled during initialization as per erratum i608
933 * it is safer to disable RTA by the bootloader, but we would like
934 * to be doubly sure here and prevent any mishaps.
935 */
936 if (IS_PM34XX_ERRATUM(PM_RTA_ERRATUM_i608))
937 omap3630_ctrl_disable_rta();
938
1108 clkdm_add_wkdep(neon_clkdm, mpu_clkdm); 939 clkdm_add_wkdep(neon_clkdm, mpu_clkdm);
1109 if (omap_type() != OMAP2_DEVICE_TYPE_GP) { 940 if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
1110 omap3_secure_ram_storage = 941 omap3_secure_ram_storage =
@@ -1117,7 +948,7 @@ static int __init omap3_pm_init(void)
1117 local_fiq_disable(); 948 local_fiq_disable();
1118 949
1119 omap_dma_global_context_save(); 950 omap_dma_global_context_save();
1120 omap3_save_secure_ram_context(PWRDM_POWER_ON); 951 omap3_save_secure_ram_context();
1121 omap_dma_global_context_restore(); 952 omap_dma_global_context_restore();
1122 953
1123 local_irq_enable(); 954 local_irq_enable();
diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c
index 54544b4fc76b..59a870be8390 100644
--- a/arch/arm/mach-omap2/pm44xx.c
+++ b/arch/arm/mach-omap2/pm44xx.c
@@ -16,7 +16,7 @@
16#include <linux/err.h> 16#include <linux/err.h>
17#include <linux/slab.h> 17#include <linux/slab.h>
18 18
19#include <plat/powerdomain.h> 19#include "powerdomain.h"
20#include <mach/omap4-common.h> 20#include <mach/omap4-common.h>
21 21
22struct power_state { 22struct power_state {
@@ -31,12 +31,6 @@ struct power_state {
31static LIST_HEAD(pwrst_list); 31static LIST_HEAD(pwrst_list);
32 32
33#ifdef CONFIG_SUSPEND 33#ifdef CONFIG_SUSPEND
34static int omap4_pm_prepare(void)
35{
36 disable_hlt();
37 return 0;
38}
39
40static int omap4_pm_suspend(void) 34static int omap4_pm_suspend(void)
41{ 35{
42 do_wfi(); 36 do_wfi();
@@ -59,28 +53,22 @@ static int omap4_pm_enter(suspend_state_t suspend_state)
59 return ret; 53 return ret;
60} 54}
61 55
62static void omap4_pm_finish(void)
63{
64 enable_hlt();
65 return;
66}
67
68static int omap4_pm_begin(suspend_state_t state) 56static int omap4_pm_begin(suspend_state_t state)
69{ 57{
58 disable_hlt();
70 return 0; 59 return 0;
71} 60}
72 61
73static void omap4_pm_end(void) 62static void omap4_pm_end(void)
74{ 63{
64 enable_hlt();
75 return; 65 return;
76} 66}
77 67
78static struct platform_suspend_ops omap_pm_ops = { 68static const struct platform_suspend_ops omap_pm_ops = {
79 .begin = omap4_pm_begin, 69 .begin = omap4_pm_begin,
80 .end = omap4_pm_end, 70 .end = omap4_pm_end,
81 .prepare = omap4_pm_prepare,
82 .enter = omap4_pm_enter, 71 .enter = omap4_pm_enter,
83 .finish = omap4_pm_finish,
84 .valid = suspend_valid_only_mem, 72 .valid = suspend_valid_only_mem,
85}; 73};
86#endif /* CONFIG_SUSPEND */ 74#endif /* CONFIG_SUSPEND */
@@ -117,13 +105,11 @@ static int __init omap4_pm_init(void)
117 105
118 pr_err("Power Management for TI OMAP4.\n"); 106 pr_err("Power Management for TI OMAP4.\n");
119 107
120#ifdef CONFIG_PM
121 ret = pwrdm_for_each(pwrdms_setup, NULL); 108 ret = pwrdm_for_each(pwrdms_setup, NULL);
122 if (ret) { 109 if (ret) {
123 pr_err("Failed to setup powerdomains\n"); 110 pr_err("Failed to setup powerdomains\n");
124 goto err2; 111 goto err2;
125 } 112 }
126#endif
127 113
128#ifdef CONFIG_SUSPEND 114#ifdef CONFIG_SUSPEND
129 suspend_set_ops(&omap_pm_ops); 115 suspend_set_ops(&omap_pm_ops);
diff --git a/arch/arm/mach-omap2/powerdomain-common.c b/arch/arm/mach-omap2/powerdomain-common.c
new file mode 100644
index 000000000000..171fccd208c7
--- /dev/null
+++ b/arch/arm/mach-omap2/powerdomain-common.c
@@ -0,0 +1,110 @@
1/*
2 * linux/arch/arm/mach-omap2/powerdomain-common.c
3 * Contains common powerdomain framework functions
4 *
5 * Copyright (C) 2010 Texas Instruments, Inc.
6 * Copyright (C) 2010 Nokia Corporation
7 *
8 * Derived from mach-omap2/powerdomain.c written by Paul Walmsley
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/errno.h>
16#include <linux/kernel.h>
17#include "pm.h"
18#include "cm.h"
19#include "cm-regbits-34xx.h"
20#include "cm-regbits-44xx.h"
21#include "prm-regbits-34xx.h"
22#include "prm-regbits-44xx.h"
23
24/*
25 * OMAP3 and OMAP4 specific register bit initialisations
26 * Notice that the names here are not according to each power
27 * domain but the bit mapping used applies to all of them
28 */
29/* OMAP3 and OMAP4 Memory Onstate Masks (common across all power domains) */
30#define OMAP_MEM0_ONSTATE_MASK OMAP3430_SHAREDL1CACHEFLATONSTATE_MASK
31#define OMAP_MEM1_ONSTATE_MASK OMAP3430_L1FLATMEMONSTATE_MASK
32#define OMAP_MEM2_ONSTATE_MASK OMAP3430_SHAREDL2CACHEFLATONSTATE_MASK
33#define OMAP_MEM3_ONSTATE_MASK OMAP3430_L2FLATMEMONSTATE_MASK
34#define OMAP_MEM4_ONSTATE_MASK OMAP4430_OCP_NRET_BANK_ONSTATE_MASK
35
36/* OMAP3 and OMAP4 Memory Retstate Masks (common across all power domains) */
37#define OMAP_MEM0_RETSTATE_MASK OMAP3430_SHAREDL1CACHEFLATRETSTATE_MASK
38#define OMAP_MEM1_RETSTATE_MASK OMAP3430_L1FLATMEMRETSTATE_MASK
39#define OMAP_MEM2_RETSTATE_MASK OMAP3430_SHAREDL2CACHEFLATRETSTATE_MASK
40#define OMAP_MEM3_RETSTATE_MASK OMAP3430_L2FLATMEMRETSTATE_MASK
41#define OMAP_MEM4_RETSTATE_MASK OMAP4430_OCP_NRET_BANK_RETSTATE_MASK
42
43/* OMAP3 and OMAP4 Memory Status bits */
44#define OMAP_MEM0_STATEST_MASK OMAP3430_SHAREDL1CACHEFLATSTATEST_MASK
45#define OMAP_MEM1_STATEST_MASK OMAP3430_L1FLATMEMSTATEST_MASK
46#define OMAP_MEM2_STATEST_MASK OMAP3430_SHAREDL2CACHEFLATSTATEST_MASK
47#define OMAP_MEM3_STATEST_MASK OMAP3430_L2FLATMEMSTATEST_MASK
48#define OMAP_MEM4_STATEST_MASK OMAP4430_OCP_NRET_BANK_STATEST_MASK
49
50/* Common Internal functions used across OMAP rev's*/
51u32 omap2_pwrdm_get_mem_bank_onstate_mask(u8 bank)
52{
53 switch (bank) {
54 case 0:
55 return OMAP_MEM0_ONSTATE_MASK;
56 case 1:
57 return OMAP_MEM1_ONSTATE_MASK;
58 case 2:
59 return OMAP_MEM2_ONSTATE_MASK;
60 case 3:
61 return OMAP_MEM3_ONSTATE_MASK;
62 case 4:
63 return OMAP_MEM4_ONSTATE_MASK;
64 default:
65 WARN_ON(1); /* should never happen */
66 return -EEXIST;
67 }
68 return 0;
69}
70
71u32 omap2_pwrdm_get_mem_bank_retst_mask(u8 bank)
72{
73 switch (bank) {
74 case 0:
75 return OMAP_MEM0_RETSTATE_MASK;
76 case 1:
77 return OMAP_MEM1_RETSTATE_MASK;
78 case 2:
79 return OMAP_MEM2_RETSTATE_MASK;
80 case 3:
81 return OMAP_MEM3_RETSTATE_MASK;
82 case 4:
83 return OMAP_MEM4_RETSTATE_MASK;
84 default:
85 WARN_ON(1); /* should never happen */
86 return -EEXIST;
87 }
88 return 0;
89}
90
91u32 omap2_pwrdm_get_mem_bank_stst_mask(u8 bank)
92{
93 switch (bank) {
94 case 0:
95 return OMAP_MEM0_STATEST_MASK;
96 case 1:
97 return OMAP_MEM1_STATEST_MASK;
98 case 2:
99 return OMAP_MEM2_STATEST_MASK;
100 case 3:
101 return OMAP_MEM3_STATEST_MASK;
102 case 4:
103 return OMAP_MEM4_STATEST_MASK;
104 default:
105 WARN_ON(1); /* should never happen */
106 return -EEXIST;
107 }
108 return 0;
109}
110
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
index 6527ec30dc17..9af08473bf10 100644
--- a/arch/arm/mach-omap2/powerdomain.c
+++ b/arch/arm/mach-omap2/powerdomain.c
@@ -2,7 +2,7 @@
2 * OMAP powerdomain control 2 * OMAP powerdomain control
3 * 3 *
4 * Copyright (C) 2007-2008 Texas Instruments, Inc. 4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
5 * Copyright (C) 2007-2009 Nokia Corporation 5 * Copyright (C) 2007-2011 Nokia Corporation
6 * 6 *
7 * Written by Paul Walmsley 7 * Written by Paul Walmsley
8 * Added OMAP4 specific support by Abhijit Pagare <abhijitpagare@ti.com> 8 * Added OMAP4 specific support by Abhijit Pagare <abhijitpagare@ti.com>
@@ -15,71 +15,39 @@
15#undef DEBUG 15#undef DEBUG
16 16
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/module.h>
19#include <linux/types.h> 18#include <linux/types.h>
20#include <linux/delay.h>
21#include <linux/spinlock.h>
22#include <linux/list.h> 19#include <linux/list.h>
23#include <linux/errno.h> 20#include <linux/errno.h>
24#include <linux/err.h> 21#include <linux/string.h>
25#include <linux/io.h> 22#include <trace/events/power.h>
26 23
27#include <asm/atomic.h> 24#include "cm2xxx_3xxx.h"
28 25#include "prcm44xx.h"
29#include "cm.h" 26#include "cm44xx.h"
30#include "cm-regbits-34xx.h" 27#include "prm2xxx_3xxx.h"
31#include "cm-regbits-44xx.h" 28#include "prm44xx.h"
32#include "prm.h"
33#include "prm-regbits-34xx.h"
34#include "prm-regbits-44xx.h"
35 29
30#include <asm/cpu.h>
36#include <plat/cpu.h> 31#include <plat/cpu.h>
37#include <plat/powerdomain.h> 32#include "powerdomain.h"
38#include <plat/clockdomain.h> 33#include "clockdomain.h"
39#include <plat/prcm.h> 34#include <plat/prcm.h>
40 35
41#include "pm.h" 36#include "pm.h"
42 37
38#define PWRDM_TRACE_STATES_FLAG (1<<31)
39
43enum { 40enum {
44 PWRDM_STATE_NOW = 0, 41 PWRDM_STATE_NOW = 0,
45 PWRDM_STATE_PREV, 42 PWRDM_STATE_PREV,
46}; 43};
47 44
48/* Variable holding value of the CPU dependent PWRSTCTRL Register Offset */
49static u16 pwrstctrl_reg_offs;
50
51/* Variable holding value of the CPU dependent PWRSTST Register Offset */
52static u16 pwrstst_reg_offs;
53
54/* OMAP3 and OMAP4 specific register bit initialisations
55 * Notice that the names here are not according to each power
56 * domain but the bit mapping used applies to all of them
57 */
58
59/* OMAP3 and OMAP4 Memory Onstate Masks (common across all power domains) */
60#define OMAP_MEM0_ONSTATE_MASK OMAP3430_SHAREDL1CACHEFLATONSTATE_MASK
61#define OMAP_MEM1_ONSTATE_MASK OMAP3430_L1FLATMEMONSTATE_MASK
62#define OMAP_MEM2_ONSTATE_MASK OMAP3430_SHAREDL2CACHEFLATONSTATE_MASK
63#define OMAP_MEM3_ONSTATE_MASK OMAP3430_L2FLATMEMONSTATE_MASK
64#define OMAP_MEM4_ONSTATE_MASK OMAP4430_OCP_NRET_BANK_ONSTATE_MASK
65
66/* OMAP3 and OMAP4 Memory Retstate Masks (common across all power domains) */
67#define OMAP_MEM0_RETSTATE_MASK OMAP3430_SHAREDL1CACHEFLATRETSTATE_MASK
68#define OMAP_MEM1_RETSTATE_MASK OMAP3430_L1FLATMEMRETSTATE_MASK
69#define OMAP_MEM2_RETSTATE_MASK OMAP3430_SHAREDL2CACHEFLATRETSTATE_MASK
70#define OMAP_MEM3_RETSTATE_MASK OMAP3430_L2FLATMEMRETSTATE_MASK
71#define OMAP_MEM4_RETSTATE_MASK OMAP4430_OCP_NRET_BANK_RETSTATE_MASK
72
73/* OMAP3 and OMAP4 Memory Status bits */
74#define OMAP_MEM0_STATEST_MASK OMAP3430_SHAREDL1CACHEFLATSTATEST_MASK
75#define OMAP_MEM1_STATEST_MASK OMAP3430_L1FLATMEMSTATEST_MASK
76#define OMAP_MEM2_STATEST_MASK OMAP3430_SHAREDL2CACHEFLATSTATEST_MASK
77#define OMAP_MEM3_STATEST_MASK OMAP3430_L2FLATMEMSTATEST_MASK
78#define OMAP_MEM4_STATEST_MASK OMAP4430_OCP_NRET_BANK_STATEST_MASK
79 45
80/* pwrdm_list contains all registered struct powerdomains */ 46/* pwrdm_list contains all registered struct powerdomains */
81static LIST_HEAD(pwrdm_list); 47static LIST_HEAD(pwrdm_list);
82 48
49static struct pwrdm_ops *arch_pwrdm;
50
83/* Private functions */ 51/* Private functions */
84 52
85static struct powerdomain *_pwrdm_lookup(const char *name) 53static struct powerdomain *_pwrdm_lookup(const char *name)
@@ -110,12 +78,19 @@ static int _pwrdm_register(struct powerdomain *pwrdm)
110{ 78{
111 int i; 79 int i;
112 80
113 if (!pwrdm) 81 if (!pwrdm || !pwrdm->name)
114 return -EINVAL; 82 return -EINVAL;
115 83
116 if (!omap_chip_is(pwrdm->omap_chip)) 84 if (!omap_chip_is(pwrdm->omap_chip))
117 return -EINVAL; 85 return -EINVAL;
118 86
87 if (cpu_is_omap44xx() &&
88 pwrdm->prcm_partition == OMAP4430_INVALID_PRCM_PARTITION) {
89 pr_err("powerdomain: %s: missing OMAP4 PRCM partition ID\n",
90 pwrdm->name);
91 return -EINVAL;
92 }
93
119 if (_pwrdm_lookup(pwrdm->name)) 94 if (_pwrdm_lookup(pwrdm->name))
120 return -EEXIST; 95 return -EEXIST;
121 96
@@ -160,8 +135,7 @@ static void _update_logic_membank_counters(struct powerdomain *pwrdm)
160static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag) 135static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag)
161{ 136{
162 137
163 int prev; 138 int prev, state, trace_state = 0;
164 int state;
165 139
166 if (pwrdm == NULL) 140 if (pwrdm == NULL)
167 return -EINVAL; 141 return -EINVAL;
@@ -178,6 +152,17 @@ static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag)
178 pwrdm->state_counter[prev]++; 152 pwrdm->state_counter[prev]++;
179 if (prev == PWRDM_POWER_RET) 153 if (prev == PWRDM_POWER_RET)
180 _update_logic_membank_counters(pwrdm); 154 _update_logic_membank_counters(pwrdm);
155 /*
156 * If the power domain did not hit the desired state,
157 * generate a trace event with both the desired and hit states
158 */
159 if (state != prev) {
160 trace_state = (PWRDM_TRACE_STATES_FLAG |
161 ((state & OMAP_POWERSTATE_MASK) << 8) |
162 ((prev & OMAP_POWERSTATE_MASK) << 0));
163 trace_power_domain_target(pwrdm->name, trace_state,
164 smp_processor_id());
165 }
181 break; 166 break;
182 default: 167 default:
183 return -EINVAL; 168 return -EINVAL;
@@ -211,6 +196,7 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused)
211/** 196/**
212 * pwrdm_init - set up the powerdomain layer 197 * pwrdm_init - set up the powerdomain layer
213 * @pwrdm_list: array of struct powerdomain pointers to register 198 * @pwrdm_list: array of struct powerdomain pointers to register
199 * @custom_funcs: func pointers for arch specific implementations
214 * 200 *
215 * Loop through the array of powerdomains @pwrdm_list, registering all 201 * Loop through the array of powerdomains @pwrdm_list, registering all
216 * that are available on the current CPU. If pwrdm_list is supplied 202 * that are available on the current CPU. If pwrdm_list is supplied
@@ -218,21 +204,14 @@ static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm, void *unused)
218 * registered. No return value. XXX pwrdm_list is not really a 204 * registered. No return value. XXX pwrdm_list is not really a
219 * "list"; it is an array. Rename appropriately. 205 * "list"; it is an array. Rename appropriately.
220 */ 206 */
221void pwrdm_init(struct powerdomain **pwrdm_list) 207void pwrdm_init(struct powerdomain **pwrdm_list, struct pwrdm_ops *custom_funcs)
222{ 208{
223 struct powerdomain **p = NULL; 209 struct powerdomain **p = NULL;
224 210
225 if (cpu_is_omap24xx() || cpu_is_omap34xx()) { 211 if (!custom_funcs)
226 pwrstctrl_reg_offs = OMAP2_PM_PWSTCTRL; 212 WARN(1, "powerdomain: No custom pwrdm functions registered\n");
227 pwrstst_reg_offs = OMAP2_PM_PWSTST; 213 else
228 } else if (cpu_is_omap44xx()) { 214 arch_pwrdm = custom_funcs;
229 pwrstctrl_reg_offs = OMAP4_PM_PWSTCTRL;
230 pwrstst_reg_offs = OMAP4_PM_PWSTST;
231 } else {
232 printk(KERN_ERR "Power Domain struct not supported for " \
233 "this CPU\n");
234 return;
235 }
236 215
237 if (pwrdm_list) { 216 if (pwrdm_list) {
238 for (p = pwrdm_list; *p; p++) 217 for (p = pwrdm_list; *p; p++)
@@ -431,6 +410,8 @@ int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm)
431 */ 410 */
432int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) 411int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
433{ 412{
413 int ret = -EINVAL;
414
434 if (!pwrdm) 415 if (!pwrdm)
435 return -EINVAL; 416 return -EINVAL;
436 417
@@ -440,11 +421,15 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
440 pr_debug("powerdomain: setting next powerstate for %s to %0x\n", 421 pr_debug("powerdomain: setting next powerstate for %s to %0x\n",
441 pwrdm->name, pwrst); 422 pwrdm->name, pwrst);
442 423
443 prm_rmw_mod_reg_bits(OMAP_POWERSTATE_MASK, 424 if (arch_pwrdm && arch_pwrdm->pwrdm_set_next_pwrst) {
444 (pwrst << OMAP_POWERSTATE_SHIFT), 425 /* Trace the pwrdm desired target state */
445 pwrdm->prcm_offs, pwrstctrl_reg_offs); 426 trace_power_domain_target(pwrdm->name, pwrst,
427 smp_processor_id());
428 /* Program the pwrdm desired target state */
429 ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst);
430 }
446 431
447 return 0; 432 return ret;
448} 433}
449 434
450/** 435/**
@@ -457,11 +442,15 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
457 */ 442 */
458int pwrdm_read_next_pwrst(struct powerdomain *pwrdm) 443int pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
459{ 444{
445 int ret = -EINVAL;
446
460 if (!pwrdm) 447 if (!pwrdm)
461 return -EINVAL; 448 return -EINVAL;
462 449
463 return prm_read_mod_bits_shift(pwrdm->prcm_offs, 450 if (arch_pwrdm && arch_pwrdm->pwrdm_read_next_pwrst)
464 pwrstctrl_reg_offs, OMAP_POWERSTATE_MASK); 451 ret = arch_pwrdm->pwrdm_read_next_pwrst(pwrdm);
452
453 return ret;
465} 454}
466 455
467/** 456/**
@@ -474,11 +463,15 @@ int pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
474 */ 463 */
475int pwrdm_read_pwrst(struct powerdomain *pwrdm) 464int pwrdm_read_pwrst(struct powerdomain *pwrdm)
476{ 465{
466 int ret = -EINVAL;
467
477 if (!pwrdm) 468 if (!pwrdm)
478 return -EINVAL; 469 return -EINVAL;
479 470
480 return prm_read_mod_bits_shift(pwrdm->prcm_offs, 471 if (arch_pwrdm && arch_pwrdm->pwrdm_read_pwrst)
481 pwrstst_reg_offs, OMAP_POWERSTATEST_MASK); 472 ret = arch_pwrdm->pwrdm_read_pwrst(pwrdm);
473
474 return ret;
482} 475}
483 476
484/** 477/**
@@ -491,11 +484,15 @@ int pwrdm_read_pwrst(struct powerdomain *pwrdm)
491 */ 484 */
492int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) 485int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
493{ 486{
487 int ret = -EINVAL;
488
494 if (!pwrdm) 489 if (!pwrdm)
495 return -EINVAL; 490 return -EINVAL;
496 491
497 return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST, 492 if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_pwrst)
498 OMAP3430_LASTPOWERSTATEENTERED_MASK); 493 ret = arch_pwrdm->pwrdm_read_prev_pwrst(pwrdm);
494
495 return ret;
499} 496}
500 497
501/** 498/**
@@ -511,7 +508,7 @@ int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
511 */ 508 */
512int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst) 509int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
513{ 510{
514 u32 v; 511 int ret = -EINVAL;
515 512
516 if (!pwrdm) 513 if (!pwrdm)
517 return -EINVAL; 514 return -EINVAL;
@@ -522,17 +519,10 @@ int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
522 pr_debug("powerdomain: setting next logic powerstate for %s to %0x\n", 519 pr_debug("powerdomain: setting next logic powerstate for %s to %0x\n",
523 pwrdm->name, pwrst); 520 pwrdm->name, pwrst);
524 521
525 /* 522 if (arch_pwrdm && arch_pwrdm->pwrdm_set_logic_retst)
526 * The register bit names below may not correspond to the 523 ret = arch_pwrdm->pwrdm_set_logic_retst(pwrdm, pwrst);
527 * actual names of the bits in each powerdomain's register,
528 * but the type of value returned is the same for each
529 * powerdomain.
530 */
531 v = pwrst << __ffs(OMAP3430_LOGICL1CACHERETSTATE_MASK);
532 prm_rmw_mod_reg_bits(OMAP3430_LOGICL1CACHERETSTATE_MASK, v,
533 pwrdm->prcm_offs, pwrstctrl_reg_offs);
534 524
535 return 0; 525 return ret;
536} 526}
537 527
538/** 528/**
@@ -552,7 +542,7 @@ int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
552 */ 542 */
553int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst) 543int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
554{ 544{
555 u32 m; 545 int ret = -EINVAL;
556 546
557 if (!pwrdm) 547 if (!pwrdm)
558 return -EINVAL; 548 return -EINVAL;
@@ -566,37 +556,10 @@ int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
566 pr_debug("powerdomain: setting next memory powerstate for domain %s " 556 pr_debug("powerdomain: setting next memory powerstate for domain %s "
567 "bank %0x while pwrdm-ON to %0x\n", pwrdm->name, bank, pwrst); 557 "bank %0x while pwrdm-ON to %0x\n", pwrdm->name, bank, pwrst);
568 558
569 /* 559 if (arch_pwrdm && arch_pwrdm->pwrdm_set_mem_onst)
570 * The register bit names below may not correspond to the 560 ret = arch_pwrdm->pwrdm_set_mem_onst(pwrdm, bank, pwrst);
571 * actual names of the bits in each powerdomain's register,
572 * but the type of value returned is the same for each
573 * powerdomain.
574 */
575 switch (bank) {
576 case 0:
577 m = OMAP_MEM0_ONSTATE_MASK;
578 break;
579 case 1:
580 m = OMAP_MEM1_ONSTATE_MASK;
581 break;
582 case 2:
583 m = OMAP_MEM2_ONSTATE_MASK;
584 break;
585 case 3:
586 m = OMAP_MEM3_ONSTATE_MASK;
587 break;
588 case 4:
589 m = OMAP_MEM4_ONSTATE_MASK;
590 break;
591 default:
592 WARN_ON(1); /* should never happen */
593 return -EEXIST;
594 }
595 561
596 prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)), 562 return ret;
597 pwrdm->prcm_offs, pwrstctrl_reg_offs);
598
599 return 0;
600} 563}
601 564
602/** 565/**
@@ -617,7 +580,7 @@ int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
617 */ 580 */
618int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst) 581int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
619{ 582{
620 u32 m; 583 int ret = -EINVAL;
621 584
622 if (!pwrdm) 585 if (!pwrdm)
623 return -EINVAL; 586 return -EINVAL;
@@ -631,37 +594,10 @@ int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
631 pr_debug("powerdomain: setting next memory powerstate for domain %s " 594 pr_debug("powerdomain: setting next memory powerstate for domain %s "
632 "bank %0x while pwrdm-RET to %0x\n", pwrdm->name, bank, pwrst); 595 "bank %0x while pwrdm-RET to %0x\n", pwrdm->name, bank, pwrst);
633 596
634 /* 597 if (arch_pwrdm && arch_pwrdm->pwrdm_set_mem_retst)
635 * The register bit names below may not correspond to the 598 ret = arch_pwrdm->pwrdm_set_mem_retst(pwrdm, bank, pwrst);
636 * actual names of the bits in each powerdomain's register,
637 * but the type of value returned is the same for each
638 * powerdomain.
639 */
640 switch (bank) {
641 case 0:
642 m = OMAP_MEM0_RETSTATE_MASK;
643 break;
644 case 1:
645 m = OMAP_MEM1_RETSTATE_MASK;
646 break;
647 case 2:
648 m = OMAP_MEM2_RETSTATE_MASK;
649 break;
650 case 3:
651 m = OMAP_MEM3_RETSTATE_MASK;
652 break;
653 case 4:
654 m = OMAP_MEM4_RETSTATE_MASK;
655 break;
656 default:
657 WARN_ON(1); /* should never happen */
658 return -EEXIST;
659 }
660
661 prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)), pwrdm->prcm_offs,
662 pwrstctrl_reg_offs);
663 599
664 return 0; 600 return ret;
665} 601}
666 602
667/** 603/**
@@ -675,11 +611,15 @@ int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst)
675 */ 611 */
676int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm) 612int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
677{ 613{
614 int ret = -EINVAL;
615
678 if (!pwrdm) 616 if (!pwrdm)
679 return -EINVAL; 617 return -EINVAL;
680 618
681 return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstst_reg_offs, 619 if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_pwrst)
682 OMAP3430_LOGICSTATEST_MASK); 620 ret = arch_pwrdm->pwrdm_read_logic_pwrst(pwrdm);
621
622 return ret;
683} 623}
684 624
685/** 625/**
@@ -692,17 +632,15 @@ int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
692 */ 632 */
693int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm) 633int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
694{ 634{
635 int ret = -EINVAL;
636
695 if (!pwrdm) 637 if (!pwrdm)
696 return -EINVAL; 638 return -EINVAL;
697 639
698 /* 640 if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_logic_pwrst)
699 * The register bit names below may not correspond to the 641 ret = arch_pwrdm->pwrdm_read_prev_logic_pwrst(pwrdm);
700 * actual names of the bits in each powerdomain's register, 642
701 * but the type of value returned is the same for each 643 return ret;
702 * powerdomain.
703 */
704 return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST,
705 OMAP3430_LASTLOGICSTATEENTERED_MASK);
706} 644}
707 645
708/** 646/**
@@ -715,17 +653,15 @@ int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
715 */ 653 */
716int pwrdm_read_logic_retst(struct powerdomain *pwrdm) 654int pwrdm_read_logic_retst(struct powerdomain *pwrdm)
717{ 655{
656 int ret = -EINVAL;
657
718 if (!pwrdm) 658 if (!pwrdm)
719 return -EINVAL; 659 return -EINVAL;
720 660
721 /* 661 if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_retst)
722 * The register bit names below may not correspond to the 662 ret = arch_pwrdm->pwrdm_read_logic_retst(pwrdm);
723 * actual names of the bits in each powerdomain's register, 663
724 * but the type of value returned is the same for each 664 return ret;
725 * powerdomain.
726 */
727 return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstctrl_reg_offs,
728 OMAP3430_LOGICSTATEST_MASK);
729} 665}
730 666
731/** 667/**
@@ -740,46 +676,21 @@ int pwrdm_read_logic_retst(struct powerdomain *pwrdm)
740 */ 676 */
741int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank) 677int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
742{ 678{
743 u32 m; 679 int ret = -EINVAL;
744 680
745 if (!pwrdm) 681 if (!pwrdm)
746 return -EINVAL; 682 return ret;
747 683
748 if (pwrdm->banks < (bank + 1)) 684 if (pwrdm->banks < (bank + 1))
749 return -EEXIST; 685 return ret;
750 686
751 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK) 687 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK)
752 bank = 1; 688 bank = 1;
753 689
754 /* 690 if (arch_pwrdm && arch_pwrdm->pwrdm_read_mem_pwrst)
755 * The register bit names below may not correspond to the 691 ret = arch_pwrdm->pwrdm_read_mem_pwrst(pwrdm, bank);
756 * actual names of the bits in each powerdomain's register,
757 * but the type of value returned is the same for each
758 * powerdomain.
759 */
760 switch (bank) {
761 case 0:
762 m = OMAP_MEM0_STATEST_MASK;
763 break;
764 case 1:
765 m = OMAP_MEM1_STATEST_MASK;
766 break;
767 case 2:
768 m = OMAP_MEM2_STATEST_MASK;
769 break;
770 case 3:
771 m = OMAP_MEM3_STATEST_MASK;
772 break;
773 case 4:
774 m = OMAP_MEM4_STATEST_MASK;
775 break;
776 default:
777 WARN_ON(1); /* should never happen */
778 return -EEXIST;
779 }
780 692
781 return prm_read_mod_bits_shift(pwrdm->prcm_offs, 693 return ret;
782 pwrstst_reg_offs, m);
783} 694}
784 695
785/** 696/**
@@ -795,43 +706,21 @@ int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
795 */ 706 */
796int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank) 707int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
797{ 708{
798 u32 m; 709 int ret = -EINVAL;
799 710
800 if (!pwrdm) 711 if (!pwrdm)
801 return -EINVAL; 712 return ret;
802 713
803 if (pwrdm->banks < (bank + 1)) 714 if (pwrdm->banks < (bank + 1))
804 return -EEXIST; 715 return ret;
805 716
806 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK) 717 if (pwrdm->flags & PWRDM_HAS_MPU_QUIRK)
807 bank = 1; 718 bank = 1;
808 719
809 /* 720 if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_mem_pwrst)
810 * The register bit names below may not correspond to the 721 ret = arch_pwrdm->pwrdm_read_prev_mem_pwrst(pwrdm, bank);
811 * actual names of the bits in each powerdomain's register,
812 * but the type of value returned is the same for each
813 * powerdomain.
814 */
815 switch (bank) {
816 case 0:
817 m = OMAP3430_LASTMEM1STATEENTERED_MASK;
818 break;
819 case 1:
820 m = OMAP3430_LASTMEM2STATEENTERED_MASK;
821 break;
822 case 2:
823 m = OMAP3430_LASTSHAREDL2CACHEFLATSTATEENTERED_MASK;
824 break;
825 case 3:
826 m = OMAP3430_LASTL2FLATMEMSTATEENTERED_MASK;
827 break;
828 default:
829 WARN_ON(1); /* should never happen */
830 return -EEXIST;
831 }
832 722
833 return prm_read_mod_bits_shift(pwrdm->prcm_offs, 723 return ret;
834 OMAP3430_PM_PREPWSTST, m);
835} 724}
836 725
837/** 726/**
@@ -846,43 +735,18 @@ int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
846 */ 735 */
847int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank) 736int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
848{ 737{
849 u32 m; 738 int ret = -EINVAL;
850 739
851 if (!pwrdm) 740 if (!pwrdm)
852 return -EINVAL; 741 return ret;
853 742
854 if (pwrdm->banks < (bank + 1)) 743 if (pwrdm->banks < (bank + 1))
855 return -EEXIST; 744 return ret;
856 745
857 /* 746 if (arch_pwrdm && arch_pwrdm->pwrdm_read_mem_retst)
858 * The register bit names below may not correspond to the 747 ret = arch_pwrdm->pwrdm_read_mem_retst(pwrdm, bank);
859 * actual names of the bits in each powerdomain's register,
860 * but the type of value returned is the same for each
861 * powerdomain.
862 */
863 switch (bank) {
864 case 0:
865 m = OMAP_MEM0_RETSTATE_MASK;
866 break;
867 case 1:
868 m = OMAP_MEM1_RETSTATE_MASK;
869 break;
870 case 2:
871 m = OMAP_MEM2_RETSTATE_MASK;
872 break;
873 case 3:
874 m = OMAP_MEM3_RETSTATE_MASK;
875 break;
876 case 4:
877 m = OMAP_MEM4_RETSTATE_MASK;
878 break;
879 default:
880 WARN_ON(1); /* should never happen */
881 return -EEXIST;
882 }
883 748
884 return prm_read_mod_bits_shift(pwrdm->prcm_offs, 749 return ret;
885 pwrstctrl_reg_offs, m);
886} 750}
887 751
888/** 752/**
@@ -896,8 +760,10 @@ int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
896 */ 760 */
897int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm) 761int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
898{ 762{
763 int ret = -EINVAL;
764
899 if (!pwrdm) 765 if (!pwrdm)
900 return -EINVAL; 766 return ret;
901 767
902 /* 768 /*
903 * XXX should get the powerdomain's current state here; 769 * XXX should get the powerdomain's current state here;
@@ -907,9 +773,10 @@ int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
907 pr_debug("powerdomain: clearing previous power state reg for %s\n", 773 pr_debug("powerdomain: clearing previous power state reg for %s\n",
908 pwrdm->name); 774 pwrdm->name);
909 775
910 prm_write_mod_reg(0, pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST); 776 if (arch_pwrdm && arch_pwrdm->pwrdm_clear_all_prev_pwrst)
777 ret = arch_pwrdm->pwrdm_clear_all_prev_pwrst(pwrdm);
911 778
912 return 0; 779 return ret;
913} 780}
914 781
915/** 782/**
@@ -925,19 +792,21 @@ int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
925 */ 792 */
926int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm) 793int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm)
927{ 794{
795 int ret = -EINVAL;
796
928 if (!pwrdm) 797 if (!pwrdm)
929 return -EINVAL; 798 return ret;
930 799
931 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR)) 800 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR))
932 return -EINVAL; 801 return ret;
933 802
934 pr_debug("powerdomain: %s: setting SAVEANDRESTORE bit\n", 803 pr_debug("powerdomain: %s: setting SAVEANDRESTORE bit\n",
935 pwrdm->name); 804 pwrdm->name);
936 805
937 prm_rmw_mod_reg_bits(0, 1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT, 806 if (arch_pwrdm && arch_pwrdm->pwrdm_enable_hdwr_sar)
938 pwrdm->prcm_offs, pwrstctrl_reg_offs); 807 ret = arch_pwrdm->pwrdm_enable_hdwr_sar(pwrdm);
939 808
940 return 0; 809 return ret;
941} 810}
942 811
943/** 812/**
@@ -953,19 +822,21 @@ int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm)
953 */ 822 */
954int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm) 823int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm)
955{ 824{
825 int ret = -EINVAL;
826
956 if (!pwrdm) 827 if (!pwrdm)
957 return -EINVAL; 828 return ret;
958 829
959 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR)) 830 if (!(pwrdm->flags & PWRDM_HAS_HDWR_SAR))
960 return -EINVAL; 831 return ret;
961 832
962 pr_debug("powerdomain: %s: clearing SAVEANDRESTORE bit\n", 833 pr_debug("powerdomain: %s: clearing SAVEANDRESTORE bit\n",
963 pwrdm->name); 834 pwrdm->name);
964 835
965 prm_rmw_mod_reg_bits(1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT, 0, 836 if (arch_pwrdm && arch_pwrdm->pwrdm_disable_hdwr_sar)
966 pwrdm->prcm_offs, pwrstctrl_reg_offs); 837 ret = arch_pwrdm->pwrdm_disable_hdwr_sar(pwrdm);
967 838
968 return 0; 839 return ret;
969} 840}
970 841
971/** 842/**
@@ -992,6 +863,8 @@ bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm)
992 */ 863 */
993int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm) 864int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
994{ 865{
866 int ret = -EINVAL;
867
995 if (!pwrdm) 868 if (!pwrdm)
996 return -EINVAL; 869 return -EINVAL;
997 870
@@ -1001,11 +874,10 @@ int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
1001 pr_debug("powerdomain: %s: setting LOWPOWERSTATECHANGE bit\n", 874 pr_debug("powerdomain: %s: setting LOWPOWERSTATECHANGE bit\n",
1002 pwrdm->name); 875 pwrdm->name);
1003 876
1004 prm_rmw_mod_reg_bits(OMAP4430_LOWPOWERSTATECHANGE_MASK, 877 if (arch_pwrdm && arch_pwrdm->pwrdm_set_lowpwrstchange)
1005 (1 << OMAP4430_LOWPOWERSTATECHANGE_SHIFT), 878 ret = arch_pwrdm->pwrdm_set_lowpwrstchange(pwrdm);
1006 pwrdm->prcm_offs, pwrstctrl_reg_offs);
1007 879
1008 return 0; 880 return ret;
1009} 881}
1010 882
1011/** 883/**
@@ -1020,32 +892,15 @@ int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
1020 */ 892 */
1021int pwrdm_wait_transition(struct powerdomain *pwrdm) 893int pwrdm_wait_transition(struct powerdomain *pwrdm)
1022{ 894{
1023 u32 c = 0; 895 int ret = -EINVAL;
1024 896
1025 if (!pwrdm) 897 if (!pwrdm)
1026 return -EINVAL; 898 return -EINVAL;
1027 899
1028 /* 900 if (arch_pwrdm && arch_pwrdm->pwrdm_wait_transition)
1029 * REVISIT: pwrdm_wait_transition() may be better implemented 901 ret = arch_pwrdm->pwrdm_wait_transition(pwrdm);
1030 * via a callback and a periodic timer check -- how long do we expect
1031 * powerdomain transitions to take?
1032 */
1033
1034 /* XXX Is this udelay() value meaningful? */
1035 while ((prm_read_mod_reg(pwrdm->prcm_offs, pwrstst_reg_offs) &
1036 OMAP_INTRANSITION_MASK) &&
1037 (c++ < PWRDM_TRANSITION_BAILOUT))
1038 udelay(1);
1039
1040 if (c > PWRDM_TRANSITION_BAILOUT) {
1041 printk(KERN_ERR "powerdomain: waited too long for "
1042 "powerdomain %s to complete transition\n", pwrdm->name);
1043 return -EAGAIN;
1044 }
1045
1046 pr_debug("powerdomain: completed transition in %d loops\n", c);
1047 902
1048 return 0; 903 return ret;
1049} 904}
1050 905
1051int pwrdm_state_switch(struct powerdomain *pwrdm) 906int pwrdm_state_switch(struct powerdomain *pwrdm)
@@ -1075,3 +930,72 @@ int pwrdm_post_transition(void)
1075 return 0; 930 return 0;
1076} 931}
1077 932
933/**
934 * pwrdm_get_context_loss_count - get powerdomain's context loss count
935 * @pwrdm: struct powerdomain * to wait for
936 *
937 * Context loss count is the sum of powerdomain off-mode counter, the
938 * logic off counter and the per-bank memory off counter. Returns 0
939 * (and WARNs) upon error, otherwise, returns the context loss count.
940 */
941u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm)
942{
943 int i, count;
944
945 if (!pwrdm) {
946 WARN(1, "powerdomain: %s: pwrdm is null\n", __func__);
947 return 0;
948 }
949
950 count = pwrdm->state_counter[PWRDM_POWER_OFF];
951 count += pwrdm->ret_logic_off_counter;
952
953 for (i = 0; i < pwrdm->banks; i++)
954 count += pwrdm->ret_mem_off_counter[i];
955
956 pr_debug("powerdomain: %s: context loss count = %u\n",
957 pwrdm->name, count);
958
959 return count;
960}
961
962/**
963 * pwrdm_can_ever_lose_context - can this powerdomain ever lose context?
964 * @pwrdm: struct powerdomain *
965 *
966 * Given a struct powerdomain * @pwrdm, returns 1 if the powerdomain
967 * can lose either memory or logic context or if @pwrdm is invalid, or
968 * returns 0 otherwise. This function is not concerned with how the
969 * powerdomain registers are programmed (i.e., to go off or not); it's
970 * concerned with whether it's ever possible for this powerdomain to
971 * go off while some other part of the chip is active. This function
972 * assumes that every powerdomain can go to either ON or INACTIVE.
973 */
974bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm)
975{
976 int i;
977
978 if (IS_ERR_OR_NULL(pwrdm)) {
979 pr_debug("powerdomain: %s: invalid powerdomain pointer\n",
980 __func__);
981 return 1;
982 }
983
984 if (pwrdm->pwrsts & PWRSTS_OFF)
985 return 1;
986
987 if (pwrdm->pwrsts & PWRSTS_RET) {
988 if (pwrdm->pwrsts_logic_ret & PWRSTS_OFF)
989 return 1;
990
991 for (i = 0; i < pwrdm->banks; i++)
992 if (pwrdm->pwrsts_mem_ret[i] & PWRSTS_OFF)
993 return 1;
994 }
995
996 for (i = 0; i < pwrdm->banks; i++)
997 if (pwrdm->pwrsts_mem_on[i] & PWRSTS_OFF)
998 return 1;
999
1000 return 0;
1001}
diff --git a/arch/arm/mach-omap2/powerdomain.h b/arch/arm/mach-omap2/powerdomain.h
new file mode 100644
index 000000000000..d23d979b9c34
--- /dev/null
+++ b/arch/arm/mach-omap2/powerdomain.h
@@ -0,0 +1,230 @@
1/*
2 * OMAP2/3/4 powerdomain control
3 *
4 * Copyright (C) 2007-2008, 2010 Texas Instruments, Inc.
5 * Copyright (C) 2007-2011 Nokia Corporation
6 *
7 * Paul Walmsley
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 *
13 * XXX This should be moved to the mach-omap2/ directory at the earliest
14 * opportunity.
15 */
16
17#ifndef __ARCH_ARM_MACH_OMAP2_POWERDOMAIN_H
18#define __ARCH_ARM_MACH_OMAP2_POWERDOMAIN_H
19
20#include <linux/types.h>
21#include <linux/list.h>
22
23#include <linux/atomic.h>
24
25#include <plat/cpu.h>
26
27/* Powerdomain basic power states */
28#define PWRDM_POWER_OFF 0x0
29#define PWRDM_POWER_RET 0x1
30#define PWRDM_POWER_INACTIVE 0x2
31#define PWRDM_POWER_ON 0x3
32
33#define PWRDM_MAX_PWRSTS 4
34
35/* Powerdomain allowable state bitfields */
36#define PWRSTS_ON (1 << PWRDM_POWER_ON)
37#define PWRSTS_INACTIVE (1 << PWRDM_POWER_INACTIVE)
38#define PWRSTS_RET (1 << PWRDM_POWER_RET)
39#define PWRSTS_OFF (1 << PWRDM_POWER_OFF)
40
41#define PWRSTS_OFF_ON (PWRSTS_OFF | PWRSTS_ON)
42#define PWRSTS_OFF_RET (PWRSTS_OFF | PWRSTS_RET)
43#define PWRSTS_RET_ON (PWRSTS_RET | PWRSTS_ON)
44#define PWRSTS_OFF_RET_ON (PWRSTS_OFF_RET | PWRSTS_ON)
45
46
47/* Powerdomain flags */
48#define PWRDM_HAS_HDWR_SAR (1 << 0) /* hardware save-and-restore support */
49#define PWRDM_HAS_MPU_QUIRK (1 << 1) /* MPU pwr domain has MEM bank 0 bits
50 * in MEM bank 1 position. This is
51 * true for OMAP3430
52 */
53#define PWRDM_HAS_LOWPOWERSTATECHANGE (1 << 2) /*
54 * support to transition from a
55 * sleep state to a lower sleep
56 * state without waking up the
57 * powerdomain
58 */
59
60/*
61 * Number of memory banks that are power-controllable. On OMAP4430, the
62 * maximum is 5.
63 */
64#define PWRDM_MAX_MEM_BANKS 5
65
66/*
67 * Maximum number of clockdomains that can be associated with a powerdomain.
68 * CORE powerdomain on OMAP4 is the worst case
69 */
70#define PWRDM_MAX_CLKDMS 9
71
72/* XXX A completely arbitrary number. What is reasonable here? */
73#define PWRDM_TRANSITION_BAILOUT 100000
74
75struct clockdomain;
76struct powerdomain;
77
78/**
79 * struct powerdomain - OMAP powerdomain
80 * @name: Powerdomain name
81 * @omap_chip: represents the OMAP chip types containing this pwrdm
82 * @prcm_offs: the address offset from CM_BASE/PRM_BASE
83 * @prcm_partition: (OMAP4 only) the PRCM partition ID containing @prcm_offs
84 * @pwrsts: Possible powerdomain power states
85 * @pwrsts_logic_ret: Possible logic power states when pwrdm in RETENTION
86 * @flags: Powerdomain flags
87 * @banks: Number of software-controllable memory banks in this powerdomain
88 * @pwrsts_mem_ret: Possible memory bank pwrstates when pwrdm in RETENTION
89 * @pwrsts_mem_on: Possible memory bank pwrstates when pwrdm in ON
90 * @pwrdm_clkdms: Clockdomains in this powerdomain
91 * @node: list_head linking all powerdomains
92 * @state:
93 * @state_counter:
94 * @timer:
95 * @state_timer:
96 *
97 * @prcm_partition possible values are defined in mach-omap2/prcm44xx.h.
98 */
99struct powerdomain {
100 const char *name;
101 const struct omap_chip_id omap_chip;
102 const s16 prcm_offs;
103 const u8 pwrsts;
104 const u8 pwrsts_logic_ret;
105 const u8 flags;
106 const u8 banks;
107 const u8 pwrsts_mem_ret[PWRDM_MAX_MEM_BANKS];
108 const u8 pwrsts_mem_on[PWRDM_MAX_MEM_BANKS];
109 const u8 prcm_partition;
110 struct clockdomain *pwrdm_clkdms[PWRDM_MAX_CLKDMS];
111 struct list_head node;
112 int state;
113 unsigned state_counter[PWRDM_MAX_PWRSTS];
114 unsigned ret_logic_off_counter;
115 unsigned ret_mem_off_counter[PWRDM_MAX_MEM_BANKS];
116
117#ifdef CONFIG_PM_DEBUG
118 s64 timer;
119 s64 state_timer[PWRDM_MAX_PWRSTS];
120#endif
121};
122
123/**
124 * struct pwrdm_ops - Arch specific function implementations
125 * @pwrdm_set_next_pwrst: Set the target power state for a pd
126 * @pwrdm_read_next_pwrst: Read the target power state set for a pd
127 * @pwrdm_read_pwrst: Read the current power state of a pd
128 * @pwrdm_read_prev_pwrst: Read the prev power state entered by the pd
129 * @pwrdm_set_logic_retst: Set the logic state in RET for a pd
130 * @pwrdm_set_mem_onst: Set the Memory state in ON for a pd
131 * @pwrdm_set_mem_retst: Set the Memory state in RET for a pd
132 * @pwrdm_read_logic_pwrst: Read the current logic state of a pd
133 * @pwrdm_read_prev_logic_pwrst: Read the previous logic state entered by a pd
134 * @pwrdm_read_logic_retst: Read the logic state in RET for a pd
135 * @pwrdm_read_mem_pwrst: Read the current memory state of a pd
136 * @pwrdm_read_prev_mem_pwrst: Read the previous memory state entered by a pd
137 * @pwrdm_read_mem_retst: Read the memory state in RET for a pd
138 * @pwrdm_clear_all_prev_pwrst: Clear all previous power states logged for a pd
139 * @pwrdm_enable_hdwr_sar: Enable Hardware Save-Restore feature for the pd
140 * @pwrdm_disable_hdwr_sar: Disable Hardware Save-Restore feature for a pd
141 * @pwrdm_set_lowpwrstchange: Enable pd transitions from a shallow to deep sleep
142 * @pwrdm_wait_transition: Wait for a pd state transition to complete
143 */
144struct pwrdm_ops {
145 int (*pwrdm_set_next_pwrst)(struct powerdomain *pwrdm, u8 pwrst);
146 int (*pwrdm_read_next_pwrst)(struct powerdomain *pwrdm);
147 int (*pwrdm_read_pwrst)(struct powerdomain *pwrdm);
148 int (*pwrdm_read_prev_pwrst)(struct powerdomain *pwrdm);
149 int (*pwrdm_set_logic_retst)(struct powerdomain *pwrdm, u8 pwrst);
150 int (*pwrdm_set_mem_onst)(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
151 int (*pwrdm_set_mem_retst)(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
152 int (*pwrdm_read_logic_pwrst)(struct powerdomain *pwrdm);
153 int (*pwrdm_read_prev_logic_pwrst)(struct powerdomain *pwrdm);
154 int (*pwrdm_read_logic_retst)(struct powerdomain *pwrdm);
155 int (*pwrdm_read_mem_pwrst)(struct powerdomain *pwrdm, u8 bank);
156 int (*pwrdm_read_prev_mem_pwrst)(struct powerdomain *pwrdm, u8 bank);
157 int (*pwrdm_read_mem_retst)(struct powerdomain *pwrdm, u8 bank);
158 int (*pwrdm_clear_all_prev_pwrst)(struct powerdomain *pwrdm);
159 int (*pwrdm_enable_hdwr_sar)(struct powerdomain *pwrdm);
160 int (*pwrdm_disable_hdwr_sar)(struct powerdomain *pwrdm);
161 int (*pwrdm_set_lowpwrstchange)(struct powerdomain *pwrdm);
162 int (*pwrdm_wait_transition)(struct powerdomain *pwrdm);
163};
164
165void pwrdm_init(struct powerdomain **pwrdm_list, struct pwrdm_ops *custom_funcs);
166
167struct powerdomain *pwrdm_lookup(const char *name);
168
169int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm, void *user),
170 void *user);
171int pwrdm_for_each_nolock(int (*fn)(struct powerdomain *pwrdm, void *user),
172 void *user);
173
174int pwrdm_add_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
175int pwrdm_del_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
176int pwrdm_for_each_clkdm(struct powerdomain *pwrdm,
177 int (*fn)(struct powerdomain *pwrdm,
178 struct clockdomain *clkdm));
179
180int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm);
181
182int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst);
183int pwrdm_read_next_pwrst(struct powerdomain *pwrdm);
184int pwrdm_read_pwrst(struct powerdomain *pwrdm);
185int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm);
186int pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm);
187
188int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst);
189int pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
190int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst);
191
192int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm);
193int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm);
194int pwrdm_read_logic_retst(struct powerdomain *pwrdm);
195int pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank);
196int pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank);
197int pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank);
198
199int pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm);
200int pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm);
201bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm);
202
203int pwrdm_wait_transition(struct powerdomain *pwrdm);
204
205int pwrdm_state_switch(struct powerdomain *pwrdm);
206int pwrdm_clkdm_state_switch(struct clockdomain *clkdm);
207int pwrdm_pre_transition(void);
208int pwrdm_post_transition(void);
209int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm);
210u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm);
211bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm);
212
213extern void omap2xxx_powerdomains_init(void);
214extern void omap3xxx_powerdomains_init(void);
215extern void omap44xx_powerdomains_init(void);
216
217extern struct pwrdm_ops omap2_pwrdm_operations;
218extern struct pwrdm_ops omap3_pwrdm_operations;
219extern struct pwrdm_ops omap4_pwrdm_operations;
220
221/* Common Internal functions used across OMAP rev's */
222extern u32 omap2_pwrdm_get_mem_bank_onstate_mask(u8 bank);
223extern u32 omap2_pwrdm_get_mem_bank_retst_mask(u8 bank);
224extern u32 omap2_pwrdm_get_mem_bank_stst_mask(u8 bank);
225
226extern struct powerdomain wkup_omap2_pwrdm;
227extern struct powerdomain gfx_omap2_pwrdm;
228
229
230#endif
diff --git a/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c b/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c
new file mode 100644
index 000000000000..cf600e22bf8e
--- /dev/null
+++ b/arch/arm/mach-omap2/powerdomain2xxx_3xxx.c
@@ -0,0 +1,241 @@
1/*
2 * OMAP2 and OMAP3 powerdomain control
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2007-2009 Nokia Corporation
6 *
7 * Derived from mach-omap2/powerdomain.c written by Paul Walmsley
8 * Rajendra Nayak <rnayak@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/io.h>
16#include <linux/errno.h>
17#include <linux/delay.h>
18
19#include <plat/prcm.h>
20
21#include "powerdomain.h"
22#include "prm.h"
23#include "prm-regbits-24xx.h"
24#include "prm-regbits-34xx.h"
25
26
27/* Common functions across OMAP2 and OMAP3 */
28static int omap2_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
29{
30 omap2_prm_rmw_mod_reg_bits(OMAP_POWERSTATE_MASK,
31 (pwrst << OMAP_POWERSTATE_SHIFT),
32 pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
33 return 0;
34}
35
36static int omap2_pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
37{
38 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
39 OMAP2_PM_PWSTCTRL,
40 OMAP_POWERSTATE_MASK);
41}
42
43static int omap2_pwrdm_read_pwrst(struct powerdomain *pwrdm)
44{
45 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
46 OMAP2_PM_PWSTST,
47 OMAP_POWERSTATEST_MASK);
48}
49
50static int omap2_pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank,
51 u8 pwrst)
52{
53 u32 m;
54
55 m = omap2_pwrdm_get_mem_bank_onstate_mask(bank);
56
57 omap2_prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)), pwrdm->prcm_offs,
58 OMAP2_PM_PWSTCTRL);
59
60 return 0;
61}
62
63static int omap2_pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank,
64 u8 pwrst)
65{
66 u32 m;
67
68 m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
69
70 omap2_prm_rmw_mod_reg_bits(m, (pwrst << __ffs(m)), pwrdm->prcm_offs,
71 OMAP2_PM_PWSTCTRL);
72
73 return 0;
74}
75
76static int omap2_pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
77{
78 u32 m;
79
80 m = omap2_pwrdm_get_mem_bank_stst_mask(bank);
81
82 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP2_PM_PWSTST,
83 m);
84}
85
86static int omap2_pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
87{
88 u32 m;
89
90 m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
91
92 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
93 OMAP2_PM_PWSTCTRL, m);
94}
95
96static int omap2_pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
97{
98 u32 v;
99
100 v = pwrst << __ffs(OMAP3430_LOGICL1CACHERETSTATE_MASK);
101 omap2_prm_rmw_mod_reg_bits(OMAP3430_LOGICL1CACHERETSTATE_MASK, v,
102 pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
103
104 return 0;
105}
106
107static int omap2_pwrdm_wait_transition(struct powerdomain *pwrdm)
108{
109 u32 c = 0;
110
111 /*
112 * REVISIT: pwrdm_wait_transition() may be better implemented
113 * via a callback and a periodic timer check -- how long do we expect
114 * powerdomain transitions to take?
115 */
116
117 /* XXX Is this udelay() value meaningful? */
118 while ((omap2_prm_read_mod_reg(pwrdm->prcm_offs, OMAP2_PM_PWSTST) &
119 OMAP_INTRANSITION_MASK) &&
120 (c++ < PWRDM_TRANSITION_BAILOUT))
121 udelay(1);
122
123 if (c > PWRDM_TRANSITION_BAILOUT) {
124 printk(KERN_ERR "powerdomain: waited too long for "
125 "powerdomain %s to complete transition\n", pwrdm->name);
126 return -EAGAIN;
127 }
128
129 pr_debug("powerdomain: completed transition in %d loops\n", c);
130
131 return 0;
132}
133
134/* Applicable only for OMAP3. Not supported on OMAP2 */
135static int omap3_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
136{
137 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
138 OMAP3430_PM_PREPWSTST,
139 OMAP3430_LASTPOWERSTATEENTERED_MASK);
140}
141
142static int omap3_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
143{
144 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
145 OMAP2_PM_PWSTST,
146 OMAP3430_LOGICSTATEST_MASK);
147}
148
149static int omap3_pwrdm_read_logic_retst(struct powerdomain *pwrdm)
150{
151 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
152 OMAP2_PM_PWSTCTRL,
153 OMAP3430_LOGICSTATEST_MASK);
154}
155
156static int omap3_pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
157{
158 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
159 OMAP3430_PM_PREPWSTST,
160 OMAP3430_LASTLOGICSTATEENTERED_MASK);
161}
162
163static int omap3_get_mem_bank_lastmemst_mask(u8 bank)
164{
165 switch (bank) {
166 case 0:
167 return OMAP3430_LASTMEM1STATEENTERED_MASK;
168 case 1:
169 return OMAP3430_LASTMEM2STATEENTERED_MASK;
170 case 2:
171 return OMAP3430_LASTSHAREDL2CACHEFLATSTATEENTERED_MASK;
172 case 3:
173 return OMAP3430_LASTL2FLATMEMSTATEENTERED_MASK;
174 default:
175 WARN_ON(1); /* should never happen */
176 return -EEXIST;
177 }
178 return 0;
179}
180
181static int omap3_pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
182{
183 u32 m;
184
185 m = omap3_get_mem_bank_lastmemst_mask(bank);
186
187 return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
188 OMAP3430_PM_PREPWSTST, m);
189}
190
191static int omap3_pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
192{
193 omap2_prm_write_mod_reg(0, pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST);
194 return 0;
195}
196
197static int omap3_pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm)
198{
199 return omap2_prm_rmw_mod_reg_bits(0,
200 1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT,
201 pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
202}
203
204static int omap3_pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm)
205{
206 return omap2_prm_rmw_mod_reg_bits(1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT,
207 0, pwrdm->prcm_offs,
208 OMAP2_PM_PWSTCTRL);
209}
210
211struct pwrdm_ops omap2_pwrdm_operations = {
212 .pwrdm_set_next_pwrst = omap2_pwrdm_set_next_pwrst,
213 .pwrdm_read_next_pwrst = omap2_pwrdm_read_next_pwrst,
214 .pwrdm_read_pwrst = omap2_pwrdm_read_pwrst,
215 .pwrdm_set_logic_retst = omap2_pwrdm_set_logic_retst,
216 .pwrdm_set_mem_onst = omap2_pwrdm_set_mem_onst,
217 .pwrdm_set_mem_retst = omap2_pwrdm_set_mem_retst,
218 .pwrdm_read_mem_pwrst = omap2_pwrdm_read_mem_pwrst,
219 .pwrdm_read_mem_retst = omap2_pwrdm_read_mem_retst,
220 .pwrdm_wait_transition = omap2_pwrdm_wait_transition,
221};
222
223struct pwrdm_ops omap3_pwrdm_operations = {
224 .pwrdm_set_next_pwrst = omap2_pwrdm_set_next_pwrst,
225 .pwrdm_read_next_pwrst = omap2_pwrdm_read_next_pwrst,
226 .pwrdm_read_pwrst = omap2_pwrdm_read_pwrst,
227 .pwrdm_read_prev_pwrst = omap3_pwrdm_read_prev_pwrst,
228 .pwrdm_set_logic_retst = omap2_pwrdm_set_logic_retst,
229 .pwrdm_read_logic_pwrst = omap3_pwrdm_read_logic_pwrst,
230 .pwrdm_read_logic_retst = omap3_pwrdm_read_logic_retst,
231 .pwrdm_read_prev_logic_pwrst = omap3_pwrdm_read_prev_logic_pwrst,
232 .pwrdm_set_mem_onst = omap2_pwrdm_set_mem_onst,
233 .pwrdm_set_mem_retst = omap2_pwrdm_set_mem_retst,
234 .pwrdm_read_mem_pwrst = omap2_pwrdm_read_mem_pwrst,
235 .pwrdm_read_mem_retst = omap2_pwrdm_read_mem_retst,
236 .pwrdm_read_prev_mem_pwrst = omap3_pwrdm_read_prev_mem_pwrst,
237 .pwrdm_clear_all_prev_pwrst = omap3_pwrdm_clear_all_prev_pwrst,
238 .pwrdm_enable_hdwr_sar = omap3_pwrdm_enable_hdwr_sar,
239 .pwrdm_disable_hdwr_sar = omap3_pwrdm_disable_hdwr_sar,
240 .pwrdm_wait_transition = omap2_pwrdm_wait_transition,
241};
diff --git a/arch/arm/mach-omap2/powerdomain44xx.c b/arch/arm/mach-omap2/powerdomain44xx.c
new file mode 100644
index 000000000000..a7880af4b3d9
--- /dev/null
+++ b/arch/arm/mach-omap2/powerdomain44xx.c
@@ -0,0 +1,225 @@
1/*
2 * OMAP4 powerdomain control
3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2007-2009 Nokia Corporation
6 *
7 * Derived from mach-omap2/powerdomain.c written by Paul Walmsley
8 * Rajendra Nayak <rnayak@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14
15#include <linux/io.h>
16#include <linux/errno.h>
17#include <linux/delay.h>
18
19#include "powerdomain.h"
20#include <plat/prcm.h>
21#include "prm2xxx_3xxx.h"
22#include "prm44xx.h"
23#include "prminst44xx.h"
24#include "prm-regbits-44xx.h"
25
26static int omap4_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
27{
28 omap4_prminst_rmw_inst_reg_bits(OMAP_POWERSTATE_MASK,
29 (pwrst << OMAP_POWERSTATE_SHIFT),
30 pwrdm->prcm_partition,
31 pwrdm->prcm_offs, OMAP4_PM_PWSTCTRL);
32 return 0;
33}
34
35static int omap4_pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
36{
37 u32 v;
38
39 v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
40 OMAP4_PM_PWSTCTRL);
41 v &= OMAP_POWERSTATE_MASK;
42 v >>= OMAP_POWERSTATE_SHIFT;
43
44 return v;
45}
46
47static int omap4_pwrdm_read_pwrst(struct powerdomain *pwrdm)
48{
49 u32 v;
50
51 v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
52 OMAP4_PM_PWSTST);
53 v &= OMAP_POWERSTATEST_MASK;
54 v >>= OMAP_POWERSTATEST_SHIFT;
55
56 return v;
57}
58
59static int omap4_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
60{
61 u32 v;
62
63 v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
64 OMAP4_PM_PWSTST);
65 v &= OMAP4430_LASTPOWERSTATEENTERED_MASK;
66 v >>= OMAP4430_LASTPOWERSTATEENTERED_SHIFT;
67
68 return v;
69}
70
71static int omap4_pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
72{
73 omap4_prminst_rmw_inst_reg_bits(OMAP4430_LOWPOWERSTATECHANGE_MASK,
74 (1 << OMAP4430_LOWPOWERSTATECHANGE_SHIFT),
75 pwrdm->prcm_partition,
76 pwrdm->prcm_offs, OMAP4_PM_PWSTCTRL);
77 return 0;
78}
79
80static int omap4_pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
81{
82 omap4_prminst_rmw_inst_reg_bits(OMAP4430_LASTPOWERSTATEENTERED_MASK,
83 OMAP4430_LASTPOWERSTATEENTERED_MASK,
84 pwrdm->prcm_partition,
85 pwrdm->prcm_offs, OMAP4_PM_PWSTST);
86 return 0;
87}
88
89static int omap4_pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst)
90{
91 u32 v;
92
93 v = pwrst << __ffs(OMAP4430_LOGICRETSTATE_MASK);
94 omap4_prminst_rmw_inst_reg_bits(OMAP4430_LOGICRETSTATE_MASK, v,
95 pwrdm->prcm_partition, pwrdm->prcm_offs,
96 OMAP4_PM_PWSTCTRL);
97
98 return 0;
99}
100
101static int omap4_pwrdm_set_mem_onst(struct powerdomain *pwrdm, u8 bank,
102 u8 pwrst)
103{
104 u32 m;
105
106 m = omap2_pwrdm_get_mem_bank_onstate_mask(bank);
107
108 omap4_prminst_rmw_inst_reg_bits(m, (pwrst << __ffs(m)),
109 pwrdm->prcm_partition, pwrdm->prcm_offs,
110 OMAP4_PM_PWSTCTRL);
111
112 return 0;
113}
114
115static int omap4_pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank,
116 u8 pwrst)
117{
118 u32 m;
119
120 m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
121
122 omap4_prminst_rmw_inst_reg_bits(m, (pwrst << __ffs(m)),
123 pwrdm->prcm_partition, pwrdm->prcm_offs,
124 OMAP4_PM_PWSTCTRL);
125
126 return 0;
127}
128
129static int omap4_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
130{
131 u32 v;
132
133 v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
134 OMAP4_PM_PWSTST);
135 v &= OMAP4430_LOGICSTATEST_MASK;
136 v >>= OMAP4430_LOGICSTATEST_SHIFT;
137
138 return v;
139}
140
141static int omap4_pwrdm_read_logic_retst(struct powerdomain *pwrdm)
142{
143 u32 v;
144
145 v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
146 OMAP4_PM_PWSTCTRL);
147 v &= OMAP4430_LOGICRETSTATE_MASK;
148 v >>= OMAP4430_LOGICRETSTATE_SHIFT;
149
150 return v;
151}
152
153static int omap4_pwrdm_read_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
154{
155 u32 m, v;
156
157 m = omap2_pwrdm_get_mem_bank_stst_mask(bank);
158
159 v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
160 OMAP4_PM_PWSTST);
161 v &= m;
162 v >>= __ffs(m);
163
164 return v;
165}
166
167static int omap4_pwrdm_read_mem_retst(struct powerdomain *pwrdm, u8 bank)
168{
169 u32 m, v;
170
171 m = omap2_pwrdm_get_mem_bank_retst_mask(bank);
172
173 v = omap4_prminst_read_inst_reg(pwrdm->prcm_partition, pwrdm->prcm_offs,
174 OMAP4_PM_PWSTCTRL);
175 v &= m;
176 v >>= __ffs(m);
177
178 return v;
179}
180
181static int omap4_pwrdm_wait_transition(struct powerdomain *pwrdm)
182{
183 u32 c = 0;
184
185 /*
186 * REVISIT: pwrdm_wait_transition() may be better implemented
187 * via a callback and a periodic timer check -- how long do we expect
188 * powerdomain transitions to take?
189 */
190
191 /* XXX Is this udelay() value meaningful? */
192 while ((omap4_prminst_read_inst_reg(pwrdm->prcm_partition,
193 pwrdm->prcm_offs,
194 OMAP4_PM_PWSTST) &
195 OMAP_INTRANSITION_MASK) &&
196 (c++ < PWRDM_TRANSITION_BAILOUT))
197 udelay(1);
198
199 if (c > PWRDM_TRANSITION_BAILOUT) {
200 printk(KERN_ERR "powerdomain: waited too long for "
201 "powerdomain %s to complete transition\n", pwrdm->name);
202 return -EAGAIN;
203 }
204
205 pr_debug("powerdomain: completed transition in %d loops\n", c);
206
207 return 0;
208}
209
210struct pwrdm_ops omap4_pwrdm_operations = {
211 .pwrdm_set_next_pwrst = omap4_pwrdm_set_next_pwrst,
212 .pwrdm_read_next_pwrst = omap4_pwrdm_read_next_pwrst,
213 .pwrdm_read_pwrst = omap4_pwrdm_read_pwrst,
214 .pwrdm_read_prev_pwrst = omap4_pwrdm_read_prev_pwrst,
215 .pwrdm_set_lowpwrstchange = omap4_pwrdm_set_lowpwrstchange,
216 .pwrdm_clear_all_prev_pwrst = omap4_pwrdm_clear_all_prev_pwrst,
217 .pwrdm_set_logic_retst = omap4_pwrdm_set_logic_retst,
218 .pwrdm_read_logic_pwrst = omap4_pwrdm_read_logic_pwrst,
219 .pwrdm_read_logic_retst = omap4_pwrdm_read_logic_retst,
220 .pwrdm_read_mem_pwrst = omap4_pwrdm_read_mem_pwrst,
221 .pwrdm_read_mem_retst = omap4_pwrdm_read_mem_retst,
222 .pwrdm_set_mem_onst = omap4_pwrdm_set_mem_onst,
223 .pwrdm_set_mem_retst = omap4_pwrdm_set_mem_retst,
224 .pwrdm_wait_transition = omap4_pwrdm_wait_transition,
225};
diff --git a/arch/arm/mach-omap2/powerdomains.h b/arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.c
index 105cbcaefd3b..4210c3399769 100644
--- a/arch/arm/mach-omap2/powerdomains.h
+++ b/arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.c
@@ -2,10 +2,9 @@
2 * OMAP2/3 common powerdomain definitions 2 * OMAP2/3 common powerdomain definitions
3 * 3 *
4 * Copyright (C) 2007-2008 Texas Instruments, Inc. 4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
5 * Copyright (C) 2007-2009 Nokia Corporation 5 * Copyright (C) 2007-2011 Nokia Corporation
6 * 6 *
7 * Written by Paul Walmsley 7 * Paul Walmsley, Jouni Högander
8 * Debugging and integration fixes by Jouni Högander
9 * 8 *
10 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as 10 * it under the terms of the GNU General Public License version 2 as
@@ -18,9 +17,6 @@
18 * Clock Domain Framework 17 * Clock Domain Framework
19 */ 18 */
20 19
21#ifndef ARCH_ARM_MACH_OMAP2_POWERDOMAINS
22#define ARCH_ARM_MACH_OMAP2_POWERDOMAINS
23
24/* 20/*
25 * This file contains all of the powerdomains that have some element 21 * This file contains all of the powerdomains that have some element
26 * of software control for the OMAP24xx and OMAP34xx chips. 22 * of software control for the OMAP24xx and OMAP34xx chips.
@@ -49,105 +45,36 @@
49 * address offset is different between the C55 and C64 DSPs. 45 * address offset is different between the C55 and C64 DSPs.
50 */ 46 */
51 47
52#include <plat/powerdomain.h> 48#include "powerdomain.h"
53 49
54#include "prcm-common.h" 50#include "prcm-common.h"
55#include "prm.h" 51#include "prm.h"
56#include "cm.h"
57#include "powerdomains24xx.h"
58#include "powerdomains34xx.h"
59#include "powerdomains44xx.h"
60 52
61/* OMAP2/3-common powerdomains */ 53/* OMAP2/3-common powerdomains */
62 54
63#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
64
65/* 55/*
66 * The GFX powerdomain is not present on 3430ES2, but currently we do not 56 * The GFX powerdomain is not present on 3430ES2, but currently we do not
67 * have a macro to filter it out at compile-time. 57 * have a macro to filter it out at compile-time.
68 */ 58 */
69static struct powerdomain gfx_omap2_pwrdm = { 59struct powerdomain gfx_omap2_pwrdm = {
70 .name = "gfx_pwrdm", 60 .name = "gfx_pwrdm",
71 .prcm_offs = GFX_MOD, 61 .prcm_offs = GFX_MOD,
72 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | 62 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX |
73 CHIP_IS_OMAP3430ES1), 63 CHIP_IS_OMAP3430ES1),
74 .pwrsts = PWRSTS_OFF_RET_ON, 64 .pwrsts = PWRSTS_OFF_RET_ON,
75 .pwrsts_logic_ret = PWRDM_POWER_RET, 65 .pwrsts_logic_ret = PWRSTS_RET,
76 .banks = 1, 66 .banks = 1,
77 .pwrsts_mem_ret = { 67 .pwrsts_mem_ret = {
78 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */ 68 [0] = PWRSTS_RET, /* MEMRETSTATE */
79 }, 69 },
80 .pwrsts_mem_on = { 70 .pwrsts_mem_on = {
81 [0] = PWRDM_POWER_ON, /* MEMONSTATE */ 71 [0] = PWRSTS_ON, /* MEMONSTATE */
82 }, 72 },
83}; 73};
84 74
85static struct powerdomain wkup_omap2_pwrdm = { 75struct powerdomain wkup_omap2_pwrdm = {
86 .name = "wkup_pwrdm", 76 .name = "wkup_pwrdm",
87 .prcm_offs = WKUP_MOD, 77 .prcm_offs = WKUP_MOD,
88 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430), 78 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
79 .pwrsts = PWRSTS_ON,
89}; 80};
90
91#endif
92
93
94/* As powerdomains are added or removed above, this list must also be changed */
95static struct powerdomain *powerdomains_omap[] __initdata = {
96
97#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
98 &wkup_omap2_pwrdm,
99 &gfx_omap2_pwrdm,
100#endif
101
102#ifdef CONFIG_ARCH_OMAP2
103 &dsp_pwrdm,
104 &mpu_24xx_pwrdm,
105 &core_24xx_pwrdm,
106#endif
107
108#ifdef CONFIG_ARCH_OMAP2430
109 &mdm_pwrdm,
110#endif
111
112#ifdef CONFIG_ARCH_OMAP3
113 &iva2_pwrdm,
114 &mpu_3xxx_pwrdm,
115 &neon_pwrdm,
116 &core_3xxx_pre_es3_1_pwrdm,
117 &core_3xxx_es3_1_pwrdm,
118 &cam_pwrdm,
119 &dss_pwrdm,
120 &per_pwrdm,
121 &emu_pwrdm,
122 &sgx_pwrdm,
123 &usbhost_pwrdm,
124 &dpll1_pwrdm,
125 &dpll2_pwrdm,
126 &dpll3_pwrdm,
127 &dpll4_pwrdm,
128 &dpll5_pwrdm,
129#endif
130
131#ifdef CONFIG_ARCH_OMAP4
132 &core_44xx_pwrdm,
133 &gfx_44xx_pwrdm,
134 &abe_44xx_pwrdm,
135 &dss_44xx_pwrdm,
136 &tesla_44xx_pwrdm,
137 &wkup_44xx_pwrdm,
138 &cpu0_44xx_pwrdm,
139 &cpu1_44xx_pwrdm,
140 &emu_44xx_pwrdm,
141 &mpu_44xx_pwrdm,
142 &ivahd_44xx_pwrdm,
143 &cam_44xx_pwrdm,
144 &l3init_44xx_pwrdm,
145 &l4per_44xx_pwrdm,
146 &always_on_core_44xx_pwrdm,
147 &cefuse_44xx_pwrdm,
148#endif
149 NULL
150};
151
152
153#endif
diff --git a/arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.h b/arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.h
new file mode 100644
index 000000000000..fa311669d53d
--- /dev/null
+++ b/arch/arm/mach-omap2/powerdomains2xxx_3xxx_data.h
@@ -0,0 +1,22 @@
1/*
2 * OMAP2/3 common powerdomains - prototypes
3 *
4 * Copyright (C) 2008 Texas Instruments, Inc.
5 * Copyright (C) 2008-2010 Nokia Corporation
6 *
7 * Paul Walmsley
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#ifndef __ARCH_ARM_MACH_OMAP2_POWERDOMAINS2XXX_3XXX_DATA_H
15#define __ARCH_ARM_MACH_OMAP2_POWERDOMAINS2XXX_3XXX_DATA_H
16
17#include "powerdomain.h"
18
19extern struct powerdomain gfx_omap2_pwrdm;
20extern struct powerdomain wkup_omap2_pwrdm;
21
22#endif
diff --git a/arch/arm/mach-omap2/powerdomains24xx.h b/arch/arm/mach-omap2/powerdomains2xxx_data.c
index 775093add9b6..cc389fb2005d 100644
--- a/arch/arm/mach-omap2/powerdomains24xx.h
+++ b/arch/arm/mach-omap2/powerdomains2xxx_data.c
@@ -1,37 +1,28 @@
1/* 1/*
2 * OMAP24XX powerdomain definitions 2 * OMAP2XXX powerdomain definitions
3 * 3 *
4 * Copyright (C) 2007-2008 Texas Instruments, Inc. 4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
5 * Copyright (C) 2007-2009 Nokia Corporation 5 * Copyright (C) 2007-2011 Nokia Corporation
6 * 6 *
7 * Written by Paul Walmsley 7 * Paul Walmsley, Jouni Högander
8 * Debugging and integration fixes by Jouni Högander
9 * 8 *
10 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as 10 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation. 11 * published by the Free Software Foundation.
13 */ 12 */
14 13
15#ifndef ARCH_ARM_MACH_OMAP2_POWERDOMAINS24XX 14#include <linux/kernel.h>
16#define ARCH_ARM_MACH_OMAP2_POWERDOMAINS24XX 15#include <linux/init.h>
17 16
18/* 17#include "powerdomain.h"
19 * N.B. If powerdomains are added or removed from this file, update 18#include "powerdomains2xxx_3xxx_data.h"
20 * the array in mach-omap2/powerdomains.h.
21 */
22
23#include <plat/powerdomain.h>
24 19
25#include "prcm-common.h" 20#include "prcm-common.h"
26#include "prm.h" 21#include "prm2xxx_3xxx.h"
27#include "prm-regbits-24xx.h" 22#include "prm-regbits-24xx.h"
28#include "cm.h"
29#include "cm-regbits-24xx.h"
30 23
31/* 24XX powerdomains and dependencies */ 24/* 24XX powerdomains and dependencies */
32 25
33#ifdef CONFIG_ARCH_OMAP2
34
35/* Powerdomains */ 26/* Powerdomains */
36 27
37static struct powerdomain dsp_pwrdm = { 28static struct powerdomain dsp_pwrdm = {
@@ -39,13 +30,13 @@ static struct powerdomain dsp_pwrdm = {
39 .prcm_offs = OMAP24XX_DSP_MOD, 30 .prcm_offs = OMAP24XX_DSP_MOD,
40 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX), 31 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
41 .pwrsts = PWRSTS_OFF_RET_ON, 32 .pwrsts = PWRSTS_OFF_RET_ON,
42 .pwrsts_logic_ret = PWRDM_POWER_RET, 33 .pwrsts_logic_ret = PWRSTS_RET,
43 .banks = 1, 34 .banks = 1,
44 .pwrsts_mem_ret = { 35 .pwrsts_mem_ret = {
45 [0] = PWRDM_POWER_RET, 36 [0] = PWRSTS_RET,
46 }, 37 },
47 .pwrsts_mem_on = { 38 .pwrsts_mem_on = {
48 [0] = PWRDM_POWER_ON, 39 [0] = PWRSTS_ON,
49 }, 40 },
50}; 41};
51 42
@@ -57,10 +48,10 @@ static struct powerdomain mpu_24xx_pwrdm = {
57 .pwrsts_logic_ret = PWRSTS_OFF_RET, 48 .pwrsts_logic_ret = PWRSTS_OFF_RET,
58 .banks = 1, 49 .banks = 1,
59 .pwrsts_mem_ret = { 50 .pwrsts_mem_ret = {
60 [0] = PWRDM_POWER_RET, 51 [0] = PWRSTS_RET,
61 }, 52 },
62 .pwrsts_mem_on = { 53 .pwrsts_mem_on = {
63 [0] = PWRDM_POWER_ON, 54 [0] = PWRSTS_ON,
64 }, 55 },
65}; 56};
66 57
@@ -82,15 +73,12 @@ static struct powerdomain core_24xx_pwrdm = {
82 }, 73 },
83}; 74};
84 75
85#endif /* CONFIG_ARCH_OMAP2 */
86
87
88 76
89/* 77/*
90 * 2430-specific powerdomains 78 * 2430-specific powerdomains
91 */ 79 */
92 80
93#ifdef CONFIG_ARCH_OMAP2430 81#ifdef CONFIG_SOC_OMAP2430
94 82
95/* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */ 83/* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */
96 84
@@ -99,17 +87,37 @@ static struct powerdomain mdm_pwrdm = {
99 .prcm_offs = OMAP2430_MDM_MOD, 87 .prcm_offs = OMAP2430_MDM_MOD,
100 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), 88 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
101 .pwrsts = PWRSTS_OFF_RET_ON, 89 .pwrsts = PWRSTS_OFF_RET_ON,
102 .pwrsts_logic_ret = PWRDM_POWER_RET, 90 .pwrsts_logic_ret = PWRSTS_RET,
103 .banks = 1, 91 .banks = 1,
104 .pwrsts_mem_ret = { 92 .pwrsts_mem_ret = {
105 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */ 93 [0] = PWRSTS_RET, /* MEMRETSTATE */
106 }, 94 },
107 .pwrsts_mem_on = { 95 .pwrsts_mem_on = {
108 [0] = PWRDM_POWER_ON, /* MEMONSTATE */ 96 [0] = PWRSTS_ON, /* MEMONSTATE */
109 }, 97 },
110}; 98};
111 99
112#endif /* CONFIG_ARCH_OMAP2430 */ 100#endif /* CONFIG_SOC_OMAP2430 */
113 101
102/* As powerdomains are added or removed above, this list must also be changed */
103static struct powerdomain *powerdomains_omap2xxx[] __initdata = {
114 104
105 &wkup_omap2_pwrdm,
106 &gfx_omap2_pwrdm,
107
108#ifdef CONFIG_ARCH_OMAP2
109 &dsp_pwrdm,
110 &mpu_24xx_pwrdm,
111 &core_24xx_pwrdm,
112#endif
113
114#ifdef CONFIG_SOC_OMAP2430
115 &mdm_pwrdm,
115#endif 116#endif
117 NULL
118};
119
120void __init omap2xxx_powerdomains_init(void)
121{
122 pwrdm_init(powerdomains_omap2xxx, &omap2_pwrdm_operations);
123}
diff --git a/arch/arm/mach-omap2/powerdomains34xx.h b/arch/arm/mach-omap2/powerdomains3xxx_data.c
index fa904861668b..469a920a74dc 100644
--- a/arch/arm/mach-omap2/powerdomains34xx.h
+++ b/arch/arm/mach-omap2/powerdomains3xxx_data.c
@@ -2,30 +2,25 @@
2 * OMAP3 powerdomain definitions 2 * OMAP3 powerdomain definitions
3 * 3 *
4 * Copyright (C) 2007-2008 Texas Instruments, Inc. 4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
5 * Copyright (C) 2007-2010 Nokia Corporation 5 * Copyright (C) 2007-2011 Nokia Corporation
6 * 6 *
7 * Written by Paul Walmsley 7 * Paul Walmsley, Jouni Högander
8 * Debugging and integration fixes by Jouni Högander
9 * 8 *
10 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as 10 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation. 11 * published by the Free Software Foundation.
13 */ 12 */
14 13
15#ifndef ARCH_ARM_MACH_OMAP2_POWERDOMAINS34XX 14#include <linux/kernel.h>
16#define ARCH_ARM_MACH_OMAP2_POWERDOMAINS34XX 15#include <linux/init.h>
17 16
18/* 17#include "powerdomain.h"
19 * N.B. If powerdomains are added or removed from this file, update 18#include "powerdomains2xxx_3xxx_data.h"
20 * the array in mach-omap2/powerdomains.h.
21 */
22
23#include <plat/powerdomain.h>
24 19
25#include "prcm-common.h" 20#include "prcm-common.h"
26#include "prm.h" 21#include "prm2xxx_3xxx.h"
27#include "prm-regbits-34xx.h" 22#include "prm-regbits-34xx.h"
28#include "cm.h" 23#include "cm2xxx_3xxx.h"
29#include "cm-regbits-34xx.h" 24#include "cm-regbits-34xx.h"
30 25
31/* 26/*
@@ -52,10 +47,10 @@ static struct powerdomain iva2_pwrdm = {
52 [3] = PWRSTS_OFF_RET, 47 [3] = PWRSTS_OFF_RET,
53 }, 48 },
54 .pwrsts_mem_on = { 49 .pwrsts_mem_on = {
55 [0] = PWRDM_POWER_ON, 50 [0] = PWRSTS_ON,
56 [1] = PWRDM_POWER_ON, 51 [1] = PWRSTS_ON,
57 [2] = PWRSTS_OFF_ON, 52 [2] = PWRSTS_OFF_ON,
58 [3] = PWRDM_POWER_ON, 53 [3] = PWRSTS_ON,
59 }, 54 },
60}; 55};
61 56
@@ -77,9 +72,13 @@ static struct powerdomain mpu_3xxx_pwrdm = {
77 72
78/* 73/*
79 * The USBTLL Save-and-Restore mechanism is broken on 74 * The USBTLL Save-and-Restore mechanism is broken on
80 * 3430s upto ES3.0 and 3630ES1.0. Hence this feature 75 * 3430s up to ES3.0 and 3630ES1.0. Hence this feature
81 * needs to be disabled on these chips. 76 * needs to be disabled on these chips.
82 * Refer: 3430 errata ID i459 and 3630 errata ID i579 77 * Refer: 3430 errata ID i459 and 3630 errata ID i579
78 *
79 * Note: setting the SAR flag could help for errata ID i478
80 * which applies to 3430 <= ES3.1, but since the SAR feature
81 * is broken, do not use it.
83 */ 82 */
84static struct powerdomain core_3xxx_pre_es3_1_pwrdm = { 83static struct powerdomain core_3xxx_pre_es3_1_pwrdm = {
85 .name = "core_pwrdm", 84 .name = "core_pwrdm",
@@ -108,6 +107,10 @@ static struct powerdomain core_3xxx_es3_1_pwrdm = {
108 CHIP_GE_OMAP3630ES1_1), 107 CHIP_GE_OMAP3630ES1_1),
109 .pwrsts = PWRSTS_OFF_RET_ON, 108 .pwrsts = PWRSTS_OFF_RET_ON,
110 .pwrsts_logic_ret = PWRSTS_OFF_RET, 109 .pwrsts_logic_ret = PWRSTS_OFF_RET,
110 /*
111 * Setting the SAR flag for errata ID i478 which applies
112 * to 3430 <= ES3.1
113 */
111 .flags = PWRDM_HAS_HDWR_SAR, /* for USBTLL only */ 114 .flags = PWRDM_HAS_HDWR_SAR, /* for USBTLL only */
112 .banks = 2, 115 .banks = 2,
113 .pwrsts_mem_ret = { 116 .pwrsts_mem_ret = {
@@ -125,13 +128,13 @@ static struct powerdomain dss_pwrdm = {
125 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 128 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
126 .prcm_offs = OMAP3430_DSS_MOD, 129 .prcm_offs = OMAP3430_DSS_MOD,
127 .pwrsts = PWRSTS_OFF_RET_ON, 130 .pwrsts = PWRSTS_OFF_RET_ON,
128 .pwrsts_logic_ret = PWRDM_POWER_RET, 131 .pwrsts_logic_ret = PWRSTS_RET,
129 .banks = 1, 132 .banks = 1,
130 .pwrsts_mem_ret = { 133 .pwrsts_mem_ret = {
131 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */ 134 [0] = PWRSTS_RET, /* MEMRETSTATE */
132 }, 135 },
133 .pwrsts_mem_on = { 136 .pwrsts_mem_on = {
134 [0] = PWRDM_POWER_ON, /* MEMONSTATE */ 137 [0] = PWRSTS_ON, /* MEMONSTATE */
135 }, 138 },
136}; 139};
137 140
@@ -146,13 +149,13 @@ static struct powerdomain sgx_pwrdm = {
146 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2), 149 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
147 /* XXX This is accurate for 3430 SGX, but what about GFX? */ 150 /* XXX This is accurate for 3430 SGX, but what about GFX? */
148 .pwrsts = PWRSTS_OFF_ON, 151 .pwrsts = PWRSTS_OFF_ON,
149 .pwrsts_logic_ret = PWRDM_POWER_RET, 152 .pwrsts_logic_ret = PWRSTS_RET,
150 .banks = 1, 153 .banks = 1,
151 .pwrsts_mem_ret = { 154 .pwrsts_mem_ret = {
152 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */ 155 [0] = PWRSTS_RET, /* MEMRETSTATE */
153 }, 156 },
154 .pwrsts_mem_on = { 157 .pwrsts_mem_on = {
155 [0] = PWRDM_POWER_ON, /* MEMONSTATE */ 158 [0] = PWRSTS_ON, /* MEMONSTATE */
156 }, 159 },
157}; 160};
158 161
@@ -161,13 +164,13 @@ static struct powerdomain cam_pwrdm = {
161 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 164 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
162 .prcm_offs = OMAP3430_CAM_MOD, 165 .prcm_offs = OMAP3430_CAM_MOD,
163 .pwrsts = PWRSTS_OFF_RET_ON, 166 .pwrsts = PWRSTS_OFF_RET_ON,
164 .pwrsts_logic_ret = PWRDM_POWER_RET, 167 .pwrsts_logic_ret = PWRSTS_RET,
165 .banks = 1, 168 .banks = 1,
166 .pwrsts_mem_ret = { 169 .pwrsts_mem_ret = {
167 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */ 170 [0] = PWRSTS_RET, /* MEMRETSTATE */
168 }, 171 },
169 .pwrsts_mem_on = { 172 .pwrsts_mem_on = {
170 [0] = PWRDM_POWER_ON, /* MEMONSTATE */ 173 [0] = PWRSTS_ON, /* MEMONSTATE */
171 }, 174 },
172}; 175};
173 176
@@ -179,10 +182,10 @@ static struct powerdomain per_pwrdm = {
179 .pwrsts_logic_ret = PWRSTS_OFF_RET, 182 .pwrsts_logic_ret = PWRSTS_OFF_RET,
180 .banks = 1, 183 .banks = 1,
181 .pwrsts_mem_ret = { 184 .pwrsts_mem_ret = {
182 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */ 185 [0] = PWRSTS_RET, /* MEMRETSTATE */
183 }, 186 },
184 .pwrsts_mem_on = { 187 .pwrsts_mem_on = {
185 [0] = PWRDM_POWER_ON, /* MEMONSTATE */ 188 [0] = PWRSTS_ON, /* MEMONSTATE */
186 }, 189 },
187}; 190};
188 191
@@ -197,7 +200,7 @@ static struct powerdomain neon_pwrdm = {
197 .prcm_offs = OMAP3430_NEON_MOD, 200 .prcm_offs = OMAP3430_NEON_MOD,
198 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), 201 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
199 .pwrsts = PWRSTS_OFF_RET_ON, 202 .pwrsts = PWRSTS_OFF_RET_ON,
200 .pwrsts_logic_ret = PWRDM_POWER_RET, 203 .pwrsts_logic_ret = PWRSTS_RET,
201}; 204};
202 205
203static struct powerdomain usbhost_pwrdm = { 206static struct powerdomain usbhost_pwrdm = {
@@ -205,7 +208,7 @@ static struct powerdomain usbhost_pwrdm = {
205 .prcm_offs = OMAP3430ES2_USBHOST_MOD, 208 .prcm_offs = OMAP3430ES2_USBHOST_MOD,
206 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2), 209 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
207 .pwrsts = PWRSTS_OFF_RET_ON, 210 .pwrsts = PWRSTS_OFF_RET_ON,
208 .pwrsts_logic_ret = PWRDM_POWER_RET, 211 .pwrsts_logic_ret = PWRSTS_RET,
209 /* 212 /*
210 * REVISIT: Enabling usb host save and restore mechanism seems to 213 * REVISIT: Enabling usb host save and restore mechanism seems to
211 * leave the usb host domain permanently in ACTIVE mode after 214 * leave the usb host domain permanently in ACTIVE mode after
@@ -215,10 +218,10 @@ static struct powerdomain usbhost_pwrdm = {
215 /*.flags = PWRDM_HAS_HDWR_SAR,*/ /* for USBHOST ctrlr only */ 218 /*.flags = PWRDM_HAS_HDWR_SAR,*/ /* for USBHOST ctrlr only */
216 .banks = 1, 219 .banks = 1,
217 .pwrsts_mem_ret = { 220 .pwrsts_mem_ret = {
218 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */ 221 [0] = PWRSTS_RET, /* MEMRETSTATE */
219 }, 222 },
220 .pwrsts_mem_on = { 223 .pwrsts_mem_on = {
221 [0] = PWRDM_POWER_ON, /* MEMONSTATE */ 224 [0] = PWRSTS_ON, /* MEMONSTATE */
222 }, 225 },
223}; 226};
224 227
@@ -252,8 +255,33 @@ static struct powerdomain dpll5_pwrdm = {
252 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2), 255 .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2),
253}; 256};
254 257
258/* As powerdomains are added or removed above, this list must also be changed */
259static struct powerdomain *powerdomains_omap3xxx[] __initdata = {
255 260
256#endif /* CONFIG_ARCH_OMAP3 */ 261 &wkup_omap2_pwrdm,
262 &gfx_omap2_pwrdm,
263 &iva2_pwrdm,
264 &mpu_3xxx_pwrdm,
265 &neon_pwrdm,
266 &core_3xxx_pre_es3_1_pwrdm,
267 &core_3xxx_es3_1_pwrdm,
268 &cam_pwrdm,
269 &dss_pwrdm,
270 &per_pwrdm,
271 &emu_pwrdm,
272 &sgx_pwrdm,
273 &usbhost_pwrdm,
274 &dpll1_pwrdm,
275 &dpll2_pwrdm,
276 &dpll3_pwrdm,
277 &dpll4_pwrdm,
278 &dpll5_pwrdm,
279#endif
280 NULL
281};
257 282
258 283
259#endif 284void __init omap3xxx_powerdomains_init(void)
285{
286 pwrdm_init(powerdomains_omap3xxx, &omap3_pwrdm_operations);
287}
diff --git a/arch/arm/mach-omap2/powerdomains44xx.h b/arch/arm/mach-omap2/powerdomains44xx_data.c
index c7219513472a..c4222c7036a5 100644
--- a/arch/arm/mach-omap2/powerdomains44xx.h
+++ b/arch/arm/mach-omap2/powerdomains44xx_data.c
@@ -2,7 +2,7 @@
2 * OMAP4 Power domains framework 2 * OMAP4 Power domains framework
3 * 3 *
4 * Copyright (C) 2009-2010 Texas Instruments, Inc. 4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2009-2010 Nokia Corporation 5 * Copyright (C) 2009-2011 Nokia Corporation
6 * 6 *
7 * Abhijit Pagare (abhijitpagare@ti.com) 7 * Abhijit Pagare (abhijitpagare@ti.com)
8 * Benoit Cousson (b-cousson@ti.com) 8 * Benoit Cousson (b-cousson@ti.com)
@@ -19,40 +19,39 @@
19 * published by the Free Software Foundation. 19 * published by the Free Software Foundation.
20 */ 20 */
21 21
22#ifndef __ARCH_ARM_MACH_OMAP2_POWERDOMAINS44XX_H 22#include <linux/kernel.h>
23#define __ARCH_ARM_MACH_OMAP2_POWERDOMAINS44XX_H 23#include <linux/init.h>
24 24
25#include <plat/powerdomain.h> 25#include "powerdomain.h"
26 26
27#include "prcm-common.h" 27#include "prcm-common.h"
28#include "cm.h" 28#include "prcm44xx.h"
29#include "cm-regbits-44xx.h"
30#include "prm.h"
31#include "prm-regbits-44xx.h" 29#include "prm-regbits-44xx.h"
32 30#include "prm44xx.h"
33#if defined(CONFIG_ARCH_OMAP4) 31#include "prcm_mpu44xx.h"
34 32
35/* core_44xx_pwrdm: CORE power domain */ 33/* core_44xx_pwrdm: CORE power domain */
36static struct powerdomain core_44xx_pwrdm = { 34static struct powerdomain core_44xx_pwrdm = {
37 .name = "core_pwrdm", 35 .name = "core_pwrdm",
38 .prcm_offs = OMAP4430_PRM_CORE_MOD, 36 .prcm_offs = OMAP4430_PRM_CORE_INST,
37 .prcm_partition = OMAP4430_PRM_PARTITION,
39 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 38 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
40 .pwrsts = PWRSTS_RET_ON, 39 .pwrsts = PWRSTS_RET_ON,
41 .pwrsts_logic_ret = PWRSTS_OFF_RET, 40 .pwrsts_logic_ret = PWRSTS_OFF_RET,
42 .banks = 5, 41 .banks = 5,
43 .pwrsts_mem_ret = { 42 .pwrsts_mem_ret = {
44 [0] = PWRDM_POWER_OFF, /* core_nret_bank */ 43 [0] = PWRSTS_OFF, /* core_nret_bank */
45 [1] = PWRSTS_OFF_RET, /* core_ocmram */ 44 [1] = PWRSTS_OFF_RET, /* core_ocmram */
46 [2] = PWRDM_POWER_RET, /* core_other_bank */ 45 [2] = PWRSTS_RET, /* core_other_bank */
47 [3] = PWRSTS_OFF_RET, /* ducati_l2ram */ 46 [3] = PWRSTS_OFF_RET, /* ducati_l2ram */
48 [4] = PWRSTS_OFF_RET, /* ducati_unicache */ 47 [4] = PWRSTS_OFF_RET, /* ducati_unicache */
49 }, 48 },
50 .pwrsts_mem_on = { 49 .pwrsts_mem_on = {
51 [0] = PWRDM_POWER_ON, /* core_nret_bank */ 50 [0] = PWRSTS_ON, /* core_nret_bank */
52 [1] = PWRSTS_OFF_RET, /* core_ocmram */ 51 [1] = PWRSTS_OFF_RET, /* core_ocmram */
53 [2] = PWRDM_POWER_ON, /* core_other_bank */ 52 [2] = PWRSTS_ON, /* core_other_bank */
54 [3] = PWRDM_POWER_ON, /* ducati_l2ram */ 53 [3] = PWRSTS_ON, /* ducati_l2ram */
55 [4] = PWRDM_POWER_ON, /* ducati_unicache */ 54 [4] = PWRSTS_ON, /* ducati_unicache */
56 }, 55 },
57 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 56 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
58}; 57};
@@ -60,15 +59,16 @@ static struct powerdomain core_44xx_pwrdm = {
60/* gfx_44xx_pwrdm: 3D accelerator power domain */ 59/* gfx_44xx_pwrdm: 3D accelerator power domain */
61static struct powerdomain gfx_44xx_pwrdm = { 60static struct powerdomain gfx_44xx_pwrdm = {
62 .name = "gfx_pwrdm", 61 .name = "gfx_pwrdm",
63 .prcm_offs = OMAP4430_PRM_GFX_MOD, 62 .prcm_offs = OMAP4430_PRM_GFX_INST,
63 .prcm_partition = OMAP4430_PRM_PARTITION,
64 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 64 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
65 .pwrsts = PWRSTS_OFF_ON, 65 .pwrsts = PWRSTS_OFF_ON,
66 .banks = 1, 66 .banks = 1,
67 .pwrsts_mem_ret = { 67 .pwrsts_mem_ret = {
68 [0] = PWRDM_POWER_OFF, /* gfx_mem */ 68 [0] = PWRSTS_OFF, /* gfx_mem */
69 }, 69 },
70 .pwrsts_mem_on = { 70 .pwrsts_mem_on = {
71 [0] = PWRDM_POWER_ON, /* gfx_mem */ 71 [0] = PWRSTS_ON, /* gfx_mem */
72 }, 72 },
73 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 73 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
74}; 74};
@@ -76,18 +76,19 @@ static struct powerdomain gfx_44xx_pwrdm = {
76/* abe_44xx_pwrdm: Audio back end power domain */ 76/* abe_44xx_pwrdm: Audio back end power domain */
77static struct powerdomain abe_44xx_pwrdm = { 77static struct powerdomain abe_44xx_pwrdm = {
78 .name = "abe_pwrdm", 78 .name = "abe_pwrdm",
79 .prcm_offs = OMAP4430_PRM_ABE_MOD, 79 .prcm_offs = OMAP4430_PRM_ABE_INST,
80 .prcm_partition = OMAP4430_PRM_PARTITION,
80 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 81 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
81 .pwrsts = PWRSTS_OFF_RET_ON, 82 .pwrsts = PWRSTS_OFF_RET_ON,
82 .pwrsts_logic_ret = PWRDM_POWER_OFF, 83 .pwrsts_logic_ret = PWRSTS_OFF,
83 .banks = 2, 84 .banks = 2,
84 .pwrsts_mem_ret = { 85 .pwrsts_mem_ret = {
85 [0] = PWRDM_POWER_RET, /* aessmem */ 86 [0] = PWRSTS_RET, /* aessmem */
86 [1] = PWRDM_POWER_OFF, /* periphmem */ 87 [1] = PWRSTS_OFF, /* periphmem */
87 }, 88 },
88 .pwrsts_mem_on = { 89 .pwrsts_mem_on = {
89 [0] = PWRDM_POWER_ON, /* aessmem */ 90 [0] = PWRSTS_ON, /* aessmem */
90 [1] = PWRDM_POWER_ON, /* periphmem */ 91 [1] = PWRSTS_ON, /* periphmem */
91 }, 92 },
92 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 93 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
93}; 94};
@@ -95,16 +96,17 @@ static struct powerdomain abe_44xx_pwrdm = {
95/* dss_44xx_pwrdm: Display subsystem power domain */ 96/* dss_44xx_pwrdm: Display subsystem power domain */
96static struct powerdomain dss_44xx_pwrdm = { 97static struct powerdomain dss_44xx_pwrdm = {
97 .name = "dss_pwrdm", 98 .name = "dss_pwrdm",
98 .prcm_offs = OMAP4430_PRM_DSS_MOD, 99 .prcm_offs = OMAP4430_PRM_DSS_INST,
100 .prcm_partition = OMAP4430_PRM_PARTITION,
99 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 101 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
100 .pwrsts = PWRSTS_OFF_RET_ON, 102 .pwrsts = PWRSTS_OFF_RET_ON,
101 .pwrsts_logic_ret = PWRSTS_OFF_RET, 103 .pwrsts_logic_ret = PWRSTS_OFF,
102 .banks = 1, 104 .banks = 1,
103 .pwrsts_mem_ret = { 105 .pwrsts_mem_ret = {
104 [0] = PWRDM_POWER_OFF, /* dss_mem */ 106 [0] = PWRSTS_OFF, /* dss_mem */
105 }, 107 },
106 .pwrsts_mem_on = { 108 .pwrsts_mem_on = {
107 [0] = PWRDM_POWER_ON, /* dss_mem */ 109 [0] = PWRSTS_ON, /* dss_mem */
108 }, 110 },
109 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 111 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
110}; 112};
@@ -112,20 +114,21 @@ static struct powerdomain dss_44xx_pwrdm = {
112/* tesla_44xx_pwrdm: Tesla processor power domain */ 114/* tesla_44xx_pwrdm: Tesla processor power domain */
113static struct powerdomain tesla_44xx_pwrdm = { 115static struct powerdomain tesla_44xx_pwrdm = {
114 .name = "tesla_pwrdm", 116 .name = "tesla_pwrdm",
115 .prcm_offs = OMAP4430_PRM_TESLA_MOD, 117 .prcm_offs = OMAP4430_PRM_TESLA_INST,
118 .prcm_partition = OMAP4430_PRM_PARTITION,
116 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 119 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
117 .pwrsts = PWRSTS_OFF_RET_ON, 120 .pwrsts = PWRSTS_OFF_RET_ON,
118 .pwrsts_logic_ret = PWRSTS_OFF_RET, 121 .pwrsts_logic_ret = PWRSTS_OFF_RET,
119 .banks = 3, 122 .banks = 3,
120 .pwrsts_mem_ret = { 123 .pwrsts_mem_ret = {
121 [0] = PWRDM_POWER_RET, /* tesla_edma */ 124 [0] = PWRSTS_RET, /* tesla_edma */
122 [1] = PWRSTS_OFF_RET, /* tesla_l1 */ 125 [1] = PWRSTS_OFF_RET, /* tesla_l1 */
123 [2] = PWRSTS_OFF_RET, /* tesla_l2 */ 126 [2] = PWRSTS_OFF_RET, /* tesla_l2 */
124 }, 127 },
125 .pwrsts_mem_on = { 128 .pwrsts_mem_on = {
126 [0] = PWRDM_POWER_ON, /* tesla_edma */ 129 [0] = PWRSTS_ON, /* tesla_edma */
127 [1] = PWRDM_POWER_ON, /* tesla_l1 */ 130 [1] = PWRSTS_ON, /* tesla_l1 */
128 [2] = PWRDM_POWER_ON, /* tesla_l2 */ 131 [2] = PWRSTS_ON, /* tesla_l2 */
129 }, 132 },
130 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 133 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
131}; 134};
@@ -133,22 +136,24 @@ static struct powerdomain tesla_44xx_pwrdm = {
133/* wkup_44xx_pwrdm: Wake-up power domain */ 136/* wkup_44xx_pwrdm: Wake-up power domain */
134static struct powerdomain wkup_44xx_pwrdm = { 137static struct powerdomain wkup_44xx_pwrdm = {
135 .name = "wkup_pwrdm", 138 .name = "wkup_pwrdm",
136 .prcm_offs = OMAP4430_PRM_WKUP_MOD, 139 .prcm_offs = OMAP4430_PRM_WKUP_INST,
140 .prcm_partition = OMAP4430_PRM_PARTITION,
137 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 141 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
138 .pwrsts = PWRSTS_ON, 142 .pwrsts = PWRSTS_ON,
139 .banks = 1, 143 .banks = 1,
140 .pwrsts_mem_ret = { 144 .pwrsts_mem_ret = {
141 [0] = PWRDM_POWER_OFF, /* wkup_bank */ 145 [0] = PWRSTS_OFF, /* wkup_bank */
142 }, 146 },
143 .pwrsts_mem_on = { 147 .pwrsts_mem_on = {
144 [0] = PWRDM_POWER_ON, /* wkup_bank */ 148 [0] = PWRSTS_ON, /* wkup_bank */
145 }, 149 },
146}; 150};
147 151
148/* cpu0_44xx_pwrdm: MPU0 processor and Neon coprocessor power domain */ 152/* cpu0_44xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
149static struct powerdomain cpu0_44xx_pwrdm = { 153static struct powerdomain cpu0_44xx_pwrdm = {
150 .name = "cpu0_pwrdm", 154 .name = "cpu0_pwrdm",
151 .prcm_offs = OMAP4430_PRCM_MPU_CPU0_MOD, 155 .prcm_offs = OMAP4430_PRCM_MPU_CPU0_INST,
156 .prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
152 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 157 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
153 .pwrsts = PWRSTS_OFF_RET_ON, 158 .pwrsts = PWRSTS_OFF_RET_ON,
154 .pwrsts_logic_ret = PWRSTS_OFF_RET, 159 .pwrsts_logic_ret = PWRSTS_OFF_RET,
@@ -157,14 +162,15 @@ static struct powerdomain cpu0_44xx_pwrdm = {
157 [0] = PWRSTS_OFF_RET, /* cpu0_l1 */ 162 [0] = PWRSTS_OFF_RET, /* cpu0_l1 */
158 }, 163 },
159 .pwrsts_mem_on = { 164 .pwrsts_mem_on = {
160 [0] = PWRDM_POWER_ON, /* cpu0_l1 */ 165 [0] = PWRSTS_ON, /* cpu0_l1 */
161 }, 166 },
162}; 167};
163 168
164/* cpu1_44xx_pwrdm: MPU1 processor and Neon coprocessor power domain */ 169/* cpu1_44xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
165static struct powerdomain cpu1_44xx_pwrdm = { 170static struct powerdomain cpu1_44xx_pwrdm = {
166 .name = "cpu1_pwrdm", 171 .name = "cpu1_pwrdm",
167 .prcm_offs = OMAP4430_PRCM_MPU_CPU1_MOD, 172 .prcm_offs = OMAP4430_PRCM_MPU_CPU1_INST,
173 .prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
168 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 174 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
169 .pwrsts = PWRSTS_OFF_RET_ON, 175 .pwrsts = PWRSTS_OFF_RET_ON,
170 .pwrsts_logic_ret = PWRSTS_OFF_RET, 176 .pwrsts_logic_ret = PWRSTS_OFF_RET,
@@ -173,29 +179,31 @@ static struct powerdomain cpu1_44xx_pwrdm = {
173 [0] = PWRSTS_OFF_RET, /* cpu1_l1 */ 179 [0] = PWRSTS_OFF_RET, /* cpu1_l1 */
174 }, 180 },
175 .pwrsts_mem_on = { 181 .pwrsts_mem_on = {
176 [0] = PWRDM_POWER_ON, /* cpu1_l1 */ 182 [0] = PWRSTS_ON, /* cpu1_l1 */
177 }, 183 },
178}; 184};
179 185
180/* emu_44xx_pwrdm: Emulation power domain */ 186/* emu_44xx_pwrdm: Emulation power domain */
181static struct powerdomain emu_44xx_pwrdm = { 187static struct powerdomain emu_44xx_pwrdm = {
182 .name = "emu_pwrdm", 188 .name = "emu_pwrdm",
183 .prcm_offs = OMAP4430_PRM_EMU_MOD, 189 .prcm_offs = OMAP4430_PRM_EMU_INST,
190 .prcm_partition = OMAP4430_PRM_PARTITION,
184 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 191 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
185 .pwrsts = PWRSTS_OFF_ON, 192 .pwrsts = PWRSTS_OFF_ON,
186 .banks = 1, 193 .banks = 1,
187 .pwrsts_mem_ret = { 194 .pwrsts_mem_ret = {
188 [0] = PWRDM_POWER_OFF, /* emu_bank */ 195 [0] = PWRSTS_OFF, /* emu_bank */
189 }, 196 },
190 .pwrsts_mem_on = { 197 .pwrsts_mem_on = {
191 [0] = PWRDM_POWER_ON, /* emu_bank */ 198 [0] = PWRSTS_ON, /* emu_bank */
192 }, 199 },
193}; 200};
194 201
195/* mpu_44xx_pwrdm: Modena processor and the Neon coprocessor power domain */ 202/* mpu_44xx_pwrdm: Modena processor and the Neon coprocessor power domain */
196static struct powerdomain mpu_44xx_pwrdm = { 203static struct powerdomain mpu_44xx_pwrdm = {
197 .name = "mpu_pwrdm", 204 .name = "mpu_pwrdm",
198 .prcm_offs = OMAP4430_PRM_MPU_MOD, 205 .prcm_offs = OMAP4430_PRM_MPU_INST,
206 .prcm_partition = OMAP4430_PRM_PARTITION,
199 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 207 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
200 .pwrsts = PWRSTS_OFF_RET_ON, 208 .pwrsts = PWRSTS_OFF_RET_ON,
201 .pwrsts_logic_ret = PWRSTS_OFF_RET, 209 .pwrsts_logic_ret = PWRSTS_OFF_RET,
@@ -203,34 +211,35 @@ static struct powerdomain mpu_44xx_pwrdm = {
203 .pwrsts_mem_ret = { 211 .pwrsts_mem_ret = {
204 [0] = PWRSTS_OFF_RET, /* mpu_l1 */ 212 [0] = PWRSTS_OFF_RET, /* mpu_l1 */
205 [1] = PWRSTS_OFF_RET, /* mpu_l2 */ 213 [1] = PWRSTS_OFF_RET, /* mpu_l2 */
206 [2] = PWRDM_POWER_RET, /* mpu_ram */ 214 [2] = PWRSTS_RET, /* mpu_ram */
207 }, 215 },
208 .pwrsts_mem_on = { 216 .pwrsts_mem_on = {
209 [0] = PWRDM_POWER_ON, /* mpu_l1 */ 217 [0] = PWRSTS_ON, /* mpu_l1 */
210 [1] = PWRDM_POWER_ON, /* mpu_l2 */ 218 [1] = PWRSTS_ON, /* mpu_l2 */
211 [2] = PWRDM_POWER_ON, /* mpu_ram */ 219 [2] = PWRSTS_ON, /* mpu_ram */
212 }, 220 },
213}; 221};
214 222
215/* ivahd_44xx_pwrdm: IVA-HD power domain */ 223/* ivahd_44xx_pwrdm: IVA-HD power domain */
216static struct powerdomain ivahd_44xx_pwrdm = { 224static struct powerdomain ivahd_44xx_pwrdm = {
217 .name = "ivahd_pwrdm", 225 .name = "ivahd_pwrdm",
218 .prcm_offs = OMAP4430_PRM_IVAHD_MOD, 226 .prcm_offs = OMAP4430_PRM_IVAHD_INST,
227 .prcm_partition = OMAP4430_PRM_PARTITION,
219 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 228 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
220 .pwrsts = PWRSTS_OFF_RET_ON, 229 .pwrsts = PWRSTS_OFF_RET_ON,
221 .pwrsts_logic_ret = PWRDM_POWER_OFF, 230 .pwrsts_logic_ret = PWRSTS_OFF,
222 .banks = 4, 231 .banks = 4,
223 .pwrsts_mem_ret = { 232 .pwrsts_mem_ret = {
224 [0] = PWRDM_POWER_OFF, /* hwa_mem */ 233 [0] = PWRSTS_OFF, /* hwa_mem */
225 [1] = PWRSTS_OFF_RET, /* sl2_mem */ 234 [1] = PWRSTS_OFF_RET, /* sl2_mem */
226 [2] = PWRSTS_OFF_RET, /* tcm1_mem */ 235 [2] = PWRSTS_OFF_RET, /* tcm1_mem */
227 [3] = PWRSTS_OFF_RET, /* tcm2_mem */ 236 [3] = PWRSTS_OFF_RET, /* tcm2_mem */
228 }, 237 },
229 .pwrsts_mem_on = { 238 .pwrsts_mem_on = {
230 [0] = PWRDM_POWER_ON, /* hwa_mem */ 239 [0] = PWRSTS_ON, /* hwa_mem */
231 [1] = PWRDM_POWER_ON, /* sl2_mem */ 240 [1] = PWRSTS_ON, /* sl2_mem */
232 [2] = PWRDM_POWER_ON, /* tcm1_mem */ 241 [2] = PWRSTS_ON, /* tcm1_mem */
233 [3] = PWRDM_POWER_ON, /* tcm2_mem */ 242 [3] = PWRSTS_ON, /* tcm2_mem */
234 }, 243 },
235 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 244 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
236}; 245};
@@ -238,15 +247,16 @@ static struct powerdomain ivahd_44xx_pwrdm = {
238/* cam_44xx_pwrdm: Camera subsystem power domain */ 247/* cam_44xx_pwrdm: Camera subsystem power domain */
239static struct powerdomain cam_44xx_pwrdm = { 248static struct powerdomain cam_44xx_pwrdm = {
240 .name = "cam_pwrdm", 249 .name = "cam_pwrdm",
241 .prcm_offs = OMAP4430_PRM_CAM_MOD, 250 .prcm_offs = OMAP4430_PRM_CAM_INST,
251 .prcm_partition = OMAP4430_PRM_PARTITION,
242 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 252 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
243 .pwrsts = PWRSTS_OFF_ON, 253 .pwrsts = PWRSTS_OFF_ON,
244 .banks = 1, 254 .banks = 1,
245 .pwrsts_mem_ret = { 255 .pwrsts_mem_ret = {
246 [0] = PWRDM_POWER_OFF, /* cam_mem */ 256 [0] = PWRSTS_OFF, /* cam_mem */
247 }, 257 },
248 .pwrsts_mem_on = { 258 .pwrsts_mem_on = {
249 [0] = PWRDM_POWER_ON, /* cam_mem */ 259 [0] = PWRSTS_ON, /* cam_mem */
250 }, 260 },
251 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 261 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
252}; 262};
@@ -254,16 +264,17 @@ static struct powerdomain cam_44xx_pwrdm = {
254/* l3init_44xx_pwrdm: L3 initators pheripherals power domain */ 264/* l3init_44xx_pwrdm: L3 initators pheripherals power domain */
255static struct powerdomain l3init_44xx_pwrdm = { 265static struct powerdomain l3init_44xx_pwrdm = {
256 .name = "l3init_pwrdm", 266 .name = "l3init_pwrdm",
257 .prcm_offs = OMAP4430_PRM_L3INIT_MOD, 267 .prcm_offs = OMAP4430_PRM_L3INIT_INST,
268 .prcm_partition = OMAP4430_PRM_PARTITION,
258 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 269 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
259 .pwrsts = PWRSTS_OFF_RET_ON, 270 .pwrsts = PWRSTS_RET_ON,
260 .pwrsts_logic_ret = PWRSTS_OFF_RET, 271 .pwrsts_logic_ret = PWRSTS_OFF_RET,
261 .banks = 1, 272 .banks = 1,
262 .pwrsts_mem_ret = { 273 .pwrsts_mem_ret = {
263 [0] = PWRDM_POWER_OFF, /* l3init_bank1 */ 274 [0] = PWRSTS_OFF, /* l3init_bank1 */
264 }, 275 },
265 .pwrsts_mem_on = { 276 .pwrsts_mem_on = {
266 [0] = PWRDM_POWER_ON, /* l3init_bank1 */ 277 [0] = PWRSTS_ON, /* l3init_bank1 */
267 }, 278 },
268 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 279 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
269}; 280};
@@ -271,18 +282,19 @@ static struct powerdomain l3init_44xx_pwrdm = {
271/* l4per_44xx_pwrdm: Target peripherals power domain */ 282/* l4per_44xx_pwrdm: Target peripherals power domain */
272static struct powerdomain l4per_44xx_pwrdm = { 283static struct powerdomain l4per_44xx_pwrdm = {
273 .name = "l4per_pwrdm", 284 .name = "l4per_pwrdm",
274 .prcm_offs = OMAP4430_PRM_L4PER_MOD, 285 .prcm_offs = OMAP4430_PRM_L4PER_INST,
286 .prcm_partition = OMAP4430_PRM_PARTITION,
275 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 287 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
276 .pwrsts = PWRSTS_OFF_RET_ON, 288 .pwrsts = PWRSTS_RET_ON,
277 .pwrsts_logic_ret = PWRSTS_OFF_RET, 289 .pwrsts_logic_ret = PWRSTS_OFF_RET,
278 .banks = 2, 290 .banks = 2,
279 .pwrsts_mem_ret = { 291 .pwrsts_mem_ret = {
280 [0] = PWRDM_POWER_OFF, /* nonretained_bank */ 292 [0] = PWRSTS_OFF, /* nonretained_bank */
281 [1] = PWRDM_POWER_RET, /* retained_bank */ 293 [1] = PWRSTS_RET, /* retained_bank */
282 }, 294 },
283 .pwrsts_mem_on = { 295 .pwrsts_mem_on = {
284 [0] = PWRDM_POWER_ON, /* nonretained_bank */ 296 [0] = PWRSTS_ON, /* nonretained_bank */
285 [1] = PWRDM_POWER_ON, /* retained_bank */ 297 [1] = PWRSTS_ON, /* retained_bank */
286 }, 298 },
287 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 299 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
288}; 300};
@@ -293,7 +305,8 @@ static struct powerdomain l4per_44xx_pwrdm = {
293 */ 305 */
294static struct powerdomain always_on_core_44xx_pwrdm = { 306static struct powerdomain always_on_core_44xx_pwrdm = {
295 .name = "always_on_core_pwrdm", 307 .name = "always_on_core_pwrdm",
296 .prcm_offs = OMAP4430_PRM_ALWAYS_ON_MOD, 308 .prcm_offs = OMAP4430_PRM_ALWAYS_ON_INST,
309 .prcm_partition = OMAP4430_PRM_PARTITION,
297 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 310 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
298 .pwrsts = PWRSTS_ON, 311 .pwrsts = PWRSTS_ON,
299}; 312};
@@ -301,7 +314,8 @@ static struct powerdomain always_on_core_44xx_pwrdm = {
301/* cefuse_44xx_pwrdm: Customer efuse controller power domain */ 314/* cefuse_44xx_pwrdm: Customer efuse controller power domain */
302static struct powerdomain cefuse_44xx_pwrdm = { 315static struct powerdomain cefuse_44xx_pwrdm = {
303 .name = "cefuse_pwrdm", 316 .name = "cefuse_pwrdm",
304 .prcm_offs = OMAP4430_PRM_CEFUSE_MOD, 317 .prcm_offs = OMAP4430_PRM_CEFUSE_INST,
318 .prcm_partition = OMAP4430_PRM_PARTITION,
305 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), 319 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
306 .pwrsts = PWRSTS_OFF_ON, 320 .pwrsts = PWRSTS_OFF_ON,
307}; 321};
@@ -314,6 +328,28 @@ static struct powerdomain cefuse_44xx_pwrdm = {
314 * stdefuse 328 * stdefuse
315 */ 329 */
316 330
317#endif 331/* As powerdomains are added or removed above, this list must also be changed */
332static struct powerdomain *powerdomains_omap44xx[] __initdata = {
333 &core_44xx_pwrdm,
334 &gfx_44xx_pwrdm,
335 &abe_44xx_pwrdm,
336 &dss_44xx_pwrdm,
337 &tesla_44xx_pwrdm,
338 &wkup_44xx_pwrdm,
339 &cpu0_44xx_pwrdm,
340 &cpu1_44xx_pwrdm,
341 &emu_44xx_pwrdm,
342 &mpu_44xx_pwrdm,
343 &ivahd_44xx_pwrdm,
344 &cam_44xx_pwrdm,
345 &l3init_44xx_pwrdm,
346 &l4per_44xx_pwrdm,
347 &always_on_core_44xx_pwrdm,
348 &cefuse_44xx_pwrdm,
349 NULL
350};
318 351
319#endif 352void __init omap44xx_powerdomains_init(void)
353{
354 pwrdm_init(powerdomains_omap44xx, &omap4_pwrdm_operations);
355}
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h
index 995b7edbf18d..0363dcb0ef93 100644
--- a/arch/arm/mach-omap2/prcm-common.h
+++ b/arch/arm/mach-omap2/prcm-common.h
@@ -8,15 +8,12 @@
8 * Copyright (C) 2007-2009 Nokia Corporation 8 * Copyright (C) 2007-2009 Nokia Corporation
9 * 9 *
10 * Written by Paul Walmsley 10 * Written by Paul Walmsley
11 * OMAP4 defines in this file are automatically generated from the OMAP hardware
12 * databases.
13 * 11 *
14 * This program is free software; you can redistribute it and/or modify 12 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as 13 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation. 14 * published by the Free Software Foundation.
17 */ 15 */
18 16
19
20/* Module offsets from both CM_BASE & PRM_BASE */ 17/* Module offsets from both CM_BASE & PRM_BASE */
21 18
22/* 19/*
@@ -51,75 +48,6 @@
51#define OMAP3430_NEON_MOD 0xb00 48#define OMAP3430_NEON_MOD 0xb00
52#define OMAP3430ES2_USBHOST_MOD 0xc00 49#define OMAP3430ES2_USBHOST_MOD 0xc00
53 50
54#define BITS(n_bit) \
55 (((1 << n_bit) - 1) | (1 << n_bit))
56
57#define BITFIELD(l_bit, u_bit) \
58 (BITS(u_bit) & ~((BITS(l_bit)) >> 1))
59
60/* OMAP44XX specific module offsets */
61
62/* CM1 instances */
63
64#define OMAP4430_CM1_OCP_SOCKET_MOD 0x0000
65#define OMAP4430_CM1_CKGEN_MOD 0x0100
66#define OMAP4430_CM1_MPU_MOD 0x0300
67#define OMAP4430_CM1_TESLA_MOD 0x0400
68#define OMAP4430_CM1_ABE_MOD 0x0500
69#define OMAP4430_CM1_RESTORE_MOD 0x0e00
70#define OMAP4430_CM1_INSTR_MOD 0x0f00
71
72/* CM2 instances */
73
74#define OMAP4430_CM2_OCP_SOCKET_MOD 0x0000
75#define OMAP4430_CM2_CKGEN_MOD 0x0100
76#define OMAP4430_CM2_ALWAYS_ON_MOD 0x0600
77#define OMAP4430_CM2_CORE_MOD 0x0700
78#define OMAP4430_CM2_IVAHD_MOD 0x0f00
79#define OMAP4430_CM2_CAM_MOD 0x1000
80#define OMAP4430_CM2_DSS_MOD 0x1100
81#define OMAP4430_CM2_GFX_MOD 0x1200
82#define OMAP4430_CM2_L3INIT_MOD 0x1300
83#define OMAP4430_CM2_L4PER_MOD 0x1400
84#define OMAP4430_CM2_CEFUSE_MOD 0x1600
85#define OMAP4430_CM2_RESTORE_MOD 0x1e00
86#define OMAP4430_CM2_INSTR_MOD 0x1f00
87
88/* PRM instances */
89
90#define OMAP4430_PRM_OCP_SOCKET_MOD 0x0000
91#define OMAP4430_PRM_CKGEN_MOD 0x0100
92#define OMAP4430_PRM_MPU_MOD 0x0300
93#define OMAP4430_PRM_TESLA_MOD 0x0400
94#define OMAP4430_PRM_ABE_MOD 0x0500
95#define OMAP4430_PRM_ALWAYS_ON_MOD 0x0600
96#define OMAP4430_PRM_CORE_MOD 0x0700
97#define OMAP4430_PRM_IVAHD_MOD 0x0f00
98#define OMAP4430_PRM_CAM_MOD 0x1000
99#define OMAP4430_PRM_DSS_MOD 0x1100
100#define OMAP4430_PRM_GFX_MOD 0x1200
101#define OMAP4430_PRM_L3INIT_MOD 0x1300
102#define OMAP4430_PRM_L4PER_MOD 0x1400
103#define OMAP4430_PRM_CEFUSE_MOD 0x1600
104#define OMAP4430_PRM_WKUP_MOD 0x1700
105#define OMAP4430_PRM_WKUP_CM_MOD 0x1800
106#define OMAP4430_PRM_EMU_MOD 0x1900
107#define OMAP4430_PRM_EMU_CM_MOD 0x1a00
108#define OMAP4430_PRM_DEVICE_MOD 0x1b00
109#define OMAP4430_PRM_INSTR_MOD 0x1f00
110
111/* SCRM instances */
112
113#define OMAP4430_SCRM_SCRM_MOD 0x0000
114
115/* PRCM_MPU instances */
116
117#define OMAP4430_PRCM_MPU_OCP_SOCKET_PRCM_MOD 0x0000
118#define OMAP4430_PRCM_MPU_DEVICE_PRM_MOD 0x0200
119#define OMAP4430_PRCM_MPU_CPU0_MOD 0x0400
120#define OMAP4430_PRCM_MPU_CPU1_MOD 0x0800
121
122
123/* 24XX register bits shared between CM & PRM registers */ 51/* 24XX register bits shared between CM & PRM registers */
124 52
125/* CM_FCLKEN1_CORE, CM_ICLKEN1_CORE, PM_WKEN1_CORE shared bits */ 53/* CM_FCLKEN1_CORE, CM_ICLKEN1_CORE, PM_WKEN1_CORE shared bits */
@@ -193,6 +121,10 @@
193#define OMAP24XX_ST_MCSPI2_MASK (1 << 18) 121#define OMAP24XX_ST_MCSPI2_MASK (1 << 18)
194#define OMAP24XX_ST_MCSPI1_SHIFT 17 122#define OMAP24XX_ST_MCSPI1_SHIFT 17
195#define OMAP24XX_ST_MCSPI1_MASK (1 << 17) 123#define OMAP24XX_ST_MCSPI1_MASK (1 << 17)
124#define OMAP24XX_ST_MCBSP2_SHIFT 16
125#define OMAP24XX_ST_MCBSP2_MASK (1 << 16)
126#define OMAP24XX_ST_MCBSP1_SHIFT 15
127#define OMAP24XX_ST_MCBSP1_MASK (1 << 15)
196#define OMAP24XX_ST_GPT12_SHIFT 14 128#define OMAP24XX_ST_GPT12_SHIFT 14
197#define OMAP24XX_ST_GPT12_MASK (1 << 14) 129#define OMAP24XX_ST_GPT12_MASK (1 << 14)
198#define OMAP24XX_ST_GPT11_SHIFT 13 130#define OMAP24XX_ST_GPT11_SHIFT 13
@@ -243,13 +175,14 @@
243#define OMAP24XX_EN_GPT1_MASK (1 << 0) 175#define OMAP24XX_EN_GPT1_MASK (1 << 0)
244 176
245/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */ 177/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */
246#define OMAP24XX_ST_GPIOS_SHIFT (1 << 2) 178#define OMAP24XX_ST_GPIOS_SHIFT 2
247#define OMAP24XX_ST_GPIOS_MASK 2 179#define OMAP24XX_ST_GPIOS_MASK (1 << 2)
248#define OMAP24XX_ST_GPT1_SHIFT (1 << 0) 180#define OMAP24XX_ST_GPT1_SHIFT 0
249#define OMAP24XX_ST_GPT1_MASK 0 181#define OMAP24XX_ST_GPT1_MASK (1 << 0)
250 182
251/* CM_IDLEST_MDM and PM_WKST_MDM shared bits */ 183/* CM_IDLEST_MDM and PM_WKST_MDM shared bits */
252#define OMAP2430_ST_MDM_SHIFT (1 << 0) 184#define OMAP2430_ST_MDM_SHIFT 0
185#define OMAP2430_ST_MDM_MASK (1 << 0)
253 186
254 187
255/* 3430 register bits shared between CM & PRM registers */ 188/* 3430 register bits shared between CM & PRM registers */
@@ -262,6 +195,8 @@
262#define OMAP3430_AUTOIDLE_MASK (1 << 0) 195#define OMAP3430_AUTOIDLE_MASK (1 << 0)
263 196
264/* CM_FCLKEN1_CORE, CM_ICLKEN1_CORE, PM_WKEN1_CORE shared bits */ 197/* CM_FCLKEN1_CORE, CM_ICLKEN1_CORE, PM_WKEN1_CORE shared bits */
198#define OMAP3430_EN_MMC3_MASK (1 << 30)
199#define OMAP3430_EN_MMC3_SHIFT 30
265#define OMAP3430_EN_MMC2_MASK (1 << 25) 200#define OMAP3430_EN_MMC2_MASK (1 << 25)
266#define OMAP3430_EN_MMC2_SHIFT 25 201#define OMAP3430_EN_MMC2_SHIFT 25
267#define OMAP3430_EN_MMC1_MASK (1 << 24) 202#define OMAP3430_EN_MMC1_MASK (1 << 24)
@@ -302,6 +237,8 @@
302#define OMAP3430_EN_HSOTGUSB_SHIFT 4 237#define OMAP3430_EN_HSOTGUSB_SHIFT 4
303 238
304/* PM_WKST1_CORE, CM_IDLEST1_CORE shared bits */ 239/* PM_WKST1_CORE, CM_IDLEST1_CORE shared bits */
240#define OMAP3430_ST_MMC3_SHIFT 30
241#define OMAP3430_ST_MMC3_MASK (1 << 30)
305#define OMAP3430_ST_MMC2_SHIFT 25 242#define OMAP3430_ST_MMC2_SHIFT 25
306#define OMAP3430_ST_MMC2_MASK (1 << 25) 243#define OMAP3430_ST_MMC2_MASK (1 << 25)
307#define OMAP3430_ST_MMC1_SHIFT 24 244#define OMAP3430_ST_MMC1_SHIFT 24
@@ -382,6 +319,9 @@
382#define OMAP3430_EN_MPU_SHIFT 1 319#define OMAP3430_EN_MPU_SHIFT 1
383 320
384/* CM_FCLKEN_PER, CM_ICLKEN_PER, PM_WKEN_PER shared bits */ 321/* CM_FCLKEN_PER, CM_ICLKEN_PER, PM_WKEN_PER shared bits */
322
323#define OMAP3630_EN_UART4_MASK (1 << 18)
324#define OMAP3630_EN_UART4_SHIFT 18
385#define OMAP3430_EN_GPIO6_MASK (1 << 17) 325#define OMAP3430_EN_GPIO6_MASK (1 << 17)
386#define OMAP3430_EN_GPIO6_SHIFT 17 326#define OMAP3430_EN_GPIO6_SHIFT 17
387#define OMAP3430_EN_GPIO5_MASK (1 << 16) 327#define OMAP3430_EN_GPIO5_MASK (1 << 16)
@@ -422,6 +362,8 @@
422#define OMAP3430_EN_MCBSP2_SHIFT 0 362#define OMAP3430_EN_MCBSP2_SHIFT 0
423 363
424/* CM_IDLEST_PER, PM_WKST_PER shared bits */ 364/* CM_IDLEST_PER, PM_WKST_PER shared bits */
365#define OMAP3630_ST_UART4_SHIFT 18
366#define OMAP3630_ST_UART4_MASK (1 << 18)
425#define OMAP3430_ST_GPIO6_SHIFT 17 367#define OMAP3430_ST_GPIO6_SHIFT 17
426#define OMAP3430_ST_GPIO6_MASK (1 << 17) 368#define OMAP3430_ST_GPIO6_MASK (1 << 17)
427#define OMAP3430_ST_GPIO5_SHIFT 16 369#define OMAP3430_ST_GPIO5_SHIFT 16
@@ -455,5 +397,18 @@
455#define OMAP3430_EN_CORE_SHIFT 0 397#define OMAP3430_EN_CORE_SHIFT 0
456#define OMAP3430_EN_CORE_MASK (1 << 0) 398#define OMAP3430_EN_CORE_MASK (1 << 0)
457 399
400
401/*
402 * MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP
403 * submodule to exit hardreset
404 */
405#define MAX_MODULE_HARDRESET_WAIT 10000
406
407# ifndef __ASSEMBLER__
408extern void __iomem *prm_base;
409extern void __iomem *cm_base;
410extern void __iomem *cm2_base;
411# endif
412
458#endif 413#endif
459 414
diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c
index c20137497c92..6be14389e4f3 100644
--- a/arch/arm/mach-omap2/prcm.c
+++ b/arch/arm/mach-omap2/prcm.c
@@ -17,123 +17,48 @@
17 * it under the terms of the GNU General Public License version 2 as 17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation. 18 * published by the Free Software Foundation.
19 */ 19 */
20#include <linux/module.h> 20
21#include <linux/kernel.h>
21#include <linux/init.h> 22#include <linux/init.h>
22#include <linux/clk.h> 23#include <linux/clk.h>
23#include <linux/io.h> 24#include <linux/io.h>
24#include <linux/delay.h> 25#include <linux/delay.h>
25 26
27#include <mach/system.h>
26#include <plat/common.h> 28#include <plat/common.h>
27#include <plat/prcm.h> 29#include <plat/prcm.h>
28#include <plat/irqs.h> 30#include <plat/irqs.h>
29#include <plat/control.h>
30 31
31#include "clock.h" 32#include "clock.h"
32#include "clock2xxx.h" 33#include "clock2xxx.h"
33#include "cm.h" 34#include "cm2xxx_3xxx.h"
34#include "prm.h" 35#include "prm2xxx_3xxx.h"
36#include "prm44xx.h"
37#include "prminst44xx.h"
35#include "prm-regbits-24xx.h" 38#include "prm-regbits-24xx.h"
39#include "prm-regbits-44xx.h"
40#include "control.h"
36 41
37static void __iomem *prm_base; 42void __iomem *prm_base;
38static void __iomem *cm_base; 43void __iomem *cm_base;
39static void __iomem *cm2_base; 44void __iomem *cm2_base;
40 45
41#define MAX_MODULE_ENABLE_WAIT 100000 46#define MAX_MODULE_ENABLE_WAIT 100000
42 47
43struct omap3_prcm_regs {
44 u32 control_padconf_sys_nirq;
45 u32 iva2_cm_clksel1;
46 u32 iva2_cm_clksel2;
47 u32 cm_sysconfig;
48 u32 sgx_cm_clksel;
49 u32 dss_cm_clksel;
50 u32 cam_cm_clksel;
51 u32 per_cm_clksel;
52 u32 emu_cm_clksel;
53 u32 emu_cm_clkstctrl;
54 u32 pll_cm_autoidle2;
55 u32 pll_cm_clksel4;
56 u32 pll_cm_clksel5;
57 u32 pll_cm_clken2;
58 u32 cm_polctrl;
59 u32 iva2_cm_fclken;
60 u32 iva2_cm_clken_pll;
61 u32 core_cm_fclken1;
62 u32 core_cm_fclken3;
63 u32 sgx_cm_fclken;
64 u32 wkup_cm_fclken;
65 u32 dss_cm_fclken;
66 u32 cam_cm_fclken;
67 u32 per_cm_fclken;
68 u32 usbhost_cm_fclken;
69 u32 core_cm_iclken1;
70 u32 core_cm_iclken2;
71 u32 core_cm_iclken3;
72 u32 sgx_cm_iclken;
73 u32 wkup_cm_iclken;
74 u32 dss_cm_iclken;
75 u32 cam_cm_iclken;
76 u32 per_cm_iclken;
77 u32 usbhost_cm_iclken;
78 u32 iva2_cm_autiidle2;
79 u32 mpu_cm_autoidle2;
80 u32 iva2_cm_clkstctrl;
81 u32 mpu_cm_clkstctrl;
82 u32 core_cm_clkstctrl;
83 u32 sgx_cm_clkstctrl;
84 u32 dss_cm_clkstctrl;
85 u32 cam_cm_clkstctrl;
86 u32 per_cm_clkstctrl;
87 u32 neon_cm_clkstctrl;
88 u32 usbhost_cm_clkstctrl;
89 u32 core_cm_autoidle1;
90 u32 core_cm_autoidle2;
91 u32 core_cm_autoidle3;
92 u32 wkup_cm_autoidle;
93 u32 dss_cm_autoidle;
94 u32 cam_cm_autoidle;
95 u32 per_cm_autoidle;
96 u32 usbhost_cm_autoidle;
97 u32 sgx_cm_sleepdep;
98 u32 dss_cm_sleepdep;
99 u32 cam_cm_sleepdep;
100 u32 per_cm_sleepdep;
101 u32 usbhost_cm_sleepdep;
102 u32 cm_clkout_ctrl;
103 u32 prm_clkout_ctrl;
104 u32 sgx_pm_wkdep;
105 u32 dss_pm_wkdep;
106 u32 cam_pm_wkdep;
107 u32 per_pm_wkdep;
108 u32 neon_pm_wkdep;
109 u32 usbhost_pm_wkdep;
110 u32 core_pm_mpugrpsel1;
111 u32 iva2_pm_ivagrpsel1;
112 u32 core_pm_mpugrpsel3;
113 u32 core_pm_ivagrpsel3;
114 u32 wkup_pm_mpugrpsel;
115 u32 wkup_pm_ivagrpsel;
116 u32 per_pm_mpugrpsel;
117 u32 per_pm_ivagrpsel;
118 u32 wkup_pm_wken;
119};
120
121struct omap3_prcm_regs prcm_context;
122
123u32 omap_prcm_get_reset_sources(void) 48u32 omap_prcm_get_reset_sources(void)
124{ 49{
125 /* XXX This presumably needs modification for 34XX */ 50 /* XXX This presumably needs modification for 34XX */
126 if (cpu_is_omap24xx() || cpu_is_omap34xx()) 51 if (cpu_is_omap24xx() || cpu_is_omap34xx())
127 return prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTST) & 0x7f; 52 return omap2_prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTST) & 0x7f;
128 if (cpu_is_omap44xx()) 53 if (cpu_is_omap44xx())
129 return prm_read_mod_reg(WKUP_MOD, OMAP4_RM_RSTST) & 0x7f; 54 return omap2_prm_read_mod_reg(WKUP_MOD, OMAP4_RM_RSTST) & 0x7f;
130 55
131 return 0; 56 return 0;
132} 57}
133EXPORT_SYMBOL(omap_prcm_get_reset_sources); 58EXPORT_SYMBOL(omap_prcm_get_reset_sources);
134 59
135/* Resets clock rates and reboots the system. Only called from system.h */ 60/* Resets clock rates and reboots the system. Only called from system.h */
136void omap_prcm_arch_reset(char mode, const char *cmd) 61static void omap_prcm_arch_reset(char mode, const char *cmd)
137{ 62{
138 s16 prcm_offs = 0; 63 s16 prcm_offs = 0;
139 64
@@ -142,103 +67,49 @@ void omap_prcm_arch_reset(char mode, const char *cmd)
142 67
143 prcm_offs = WKUP_MOD; 68 prcm_offs = WKUP_MOD;
144 } else if (cpu_is_omap34xx()) { 69 } else if (cpu_is_omap34xx()) {
145 u32 l;
146
147 prcm_offs = OMAP3430_GR_MOD; 70 prcm_offs = OMAP3430_GR_MOD;
148 l = ('B' << 24) | ('M' << 16) | (cmd ? (u8)*cmd : 0); 71 omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0));
149 /* Reserve the first word in scratchpad for communicating 72 } else if (cpu_is_omap44xx()) {
150 * with the boot ROM. A pointer to a data structure 73 omap4_prm_global_warm_sw_reset(); /* never returns */
151 * describing the boot process can be stored there, 74 } else {
152 * cf. OMAP34xx TRM, Initialization / Software Booting
153 * Configuration. */
154 omap_writel(l, OMAP343X_SCRATCHPAD + 4);
155 } else if (cpu_is_omap44xx())
156 prcm_offs = OMAP4430_PRM_DEVICE_MOD;
157 else
158 WARN_ON(1); 75 WARN_ON(1);
76 }
159 77
160 if (cpu_is_omap24xx() || cpu_is_omap34xx()) 78 /*
161 prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, prcm_offs, 79 * As per Errata i520, in some cases, user will not be able to
162 OMAP2_RM_RSTCTRL); 80 * access DDR memory after warm-reset.
163 if (cpu_is_omap44xx()) 81 * This situation occurs while the warm-reset happens during a read
164 prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, prcm_offs, 82 * access to DDR memory. In that particular condition, DDR memory
165 OMAP4_RM_RSTCTRL); 83 * does not respond to a corrupted read command due to the warm
166} 84 * reset occurrence but SDRC is waiting for read completion.
167 85 * SDRC is not sensitive to the warm reset, but the interconnect is
168static inline u32 __omap_prcm_read(void __iomem *base, s16 module, u16 reg) 86 * reset on the fly, thus causing a misalignment between SDRC logic,
169{ 87 * interconnect logic and DDR memory state.
170 BUG_ON(!base); 88 * WORKAROUND:
171 return __raw_readl(base + module + reg); 89 * Steps to perform before a Warm reset is trigged:
172} 90 * 1. enable self-refresh on idle request
173 91 * 2. put SDRC in idle
174static inline void __omap_prcm_write(u32 value, void __iomem *base, 92 * 3. wait until SDRC goes to idle
175 s16 module, u16 reg) 93 * 4. generate SW reset (Global SW reset)
176{ 94 *
177 BUG_ON(!base); 95 * Steps to be performed after warm reset occurs (in bootloader):
178 __raw_writel(value, base + module + reg); 96 * if HW warm reset is the source, apply below steps before any
179} 97 * accesses to SDRAM:
180 98 * 1. Reset SMS and SDRC and wait till reset is complete
181/* Read a register in a PRM module */ 99 * 2. Re-initialize SMS, SDRC and memory
182u32 prm_read_mod_reg(s16 module, u16 idx) 100 *
183{ 101 * NOTE: Above work around is required only if arch reset is implemented
184 return __omap_prcm_read(prm_base, module, idx); 102 * using Global SW reset(GLOBAL_SW_RST). DPLL3 reset does not need
185} 103 * the WA since it resets SDRC as well as part of cold reset.
186 104 */
187/* Write into a register in a PRM module */ 105
188void prm_write_mod_reg(u32 val, s16 module, u16 idx) 106 /* XXX should be moved to some OMAP2/3 specific code */
189{ 107 omap2_prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, prcm_offs,
190 __omap_prcm_write(val, prm_base, module, idx); 108 OMAP2_RM_RSTCTRL);
191} 109 omap2_prm_read_mod_reg(prcm_offs, OMAP2_RM_RSTCTRL); /* OCP barrier */
192
193/* Read-modify-write a register in a PRM module. Caller must lock */
194u32 prm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
195{
196 u32 v;
197
198 v = prm_read_mod_reg(module, idx);
199 v &= ~mask;
200 v |= bits;
201 prm_write_mod_reg(v, module, idx);
202
203 return v;
204}
205
206/* Read a PRM register, AND it, and shift the result down to bit 0 */
207u32 prm_read_mod_bits_shift(s16 domain, s16 idx, u32 mask)
208{
209 u32 v;
210
211 v = prm_read_mod_reg(domain, idx);
212 v &= mask;
213 v >>= __ffs(mask);
214
215 return v;
216}
217
218/* Read a register in a CM module */
219u32 cm_read_mod_reg(s16 module, u16 idx)
220{
221 return __omap_prcm_read(cm_base, module, idx);
222}
223
224/* Write into a register in a CM module */
225void cm_write_mod_reg(u32 val, s16 module, u16 idx)
226{
227 __omap_prcm_write(val, cm_base, module, idx);
228} 110}
229 111
230/* Read-modify-write a register in a CM module. Caller must lock */ 112void (*arch_reset)(char, const char *) = omap_prcm_arch_reset;
231u32 cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
232{
233 u32 v;
234
235 v = cm_read_mod_reg(module, idx);
236 v &= ~mask;
237 v |= bits;
238 cm_write_mod_reg(v, module, idx);
239
240 return v;
241}
242 113
243/** 114/**
244 * omap2_cm_wait_idlest - wait for IDLEST bit to indicate module readiness 115 * omap2_cm_wait_idlest - wait for IDLEST bit to indicate module readiness
@@ -249,6 +120,9 @@ u32 cm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
249 * 120 *
250 * Returns 1 if the module indicated readiness in time, or 0 if it 121 * Returns 1 if the module indicated readiness in time, or 0 if it
251 * failed to enable in roughly MAX_MODULE_ENABLE_WAIT microseconds. 122 * failed to enable in roughly MAX_MODULE_ENABLE_WAIT microseconds.
123 *
124 * XXX This function is deprecated. It should be removed once the
125 * hwmod conversion is complete.
252 */ 126 */
253int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest, 127int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest,
254 const char *name) 128 const char *name)
@@ -291,303 +165,3 @@ void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals)
291 WARN_ON(!cm2_base); 165 WARN_ON(!cm2_base);
292 } 166 }
293} 167}
294
295#ifdef CONFIG_ARCH_OMAP3
296void omap3_prcm_save_context(void)
297{
298 prcm_context.control_padconf_sys_nirq =
299 omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_SYSNIRQ);
300 prcm_context.iva2_cm_clksel1 =
301 cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL1);
302 prcm_context.iva2_cm_clksel2 =
303 cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL2);
304 prcm_context.cm_sysconfig = __raw_readl(OMAP3430_CM_SYSCONFIG);
305 prcm_context.sgx_cm_clksel =
306 cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_CLKSEL);
307 prcm_context.dss_cm_clksel =
308 cm_read_mod_reg(OMAP3430_DSS_MOD, CM_CLKSEL);
309 prcm_context.cam_cm_clksel =
310 cm_read_mod_reg(OMAP3430_CAM_MOD, CM_CLKSEL);
311 prcm_context.per_cm_clksel =
312 cm_read_mod_reg(OMAP3430_PER_MOD, CM_CLKSEL);
313 prcm_context.emu_cm_clksel =
314 cm_read_mod_reg(OMAP3430_EMU_MOD, CM_CLKSEL1);
315 prcm_context.emu_cm_clkstctrl =
316 cm_read_mod_reg(OMAP3430_EMU_MOD, OMAP2_CM_CLKSTCTRL);
317 prcm_context.pll_cm_autoidle2 =
318 cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE2);
319 prcm_context.pll_cm_clksel4 =
320 cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL4);
321 prcm_context.pll_cm_clksel5 =
322 cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKSEL5);
323 prcm_context.pll_cm_clken2 =
324 cm_read_mod_reg(PLL_MOD, OMAP3430ES2_CM_CLKEN2);
325 prcm_context.cm_polctrl = __raw_readl(OMAP3430_CM_POLCTRL);
326 prcm_context.iva2_cm_fclken =
327 cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_FCLKEN);
328 prcm_context.iva2_cm_clken_pll = cm_read_mod_reg(OMAP3430_IVA2_MOD,
329 OMAP3430_CM_CLKEN_PLL);
330 prcm_context.core_cm_fclken1 =
331 cm_read_mod_reg(CORE_MOD, CM_FCLKEN1);
332 prcm_context.core_cm_fclken3 =
333 cm_read_mod_reg(CORE_MOD, OMAP3430ES2_CM_FCLKEN3);
334 prcm_context.sgx_cm_fclken =
335 cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_FCLKEN);
336 prcm_context.wkup_cm_fclken =
337 cm_read_mod_reg(WKUP_MOD, CM_FCLKEN);
338 prcm_context.dss_cm_fclken =
339 cm_read_mod_reg(OMAP3430_DSS_MOD, CM_FCLKEN);
340 prcm_context.cam_cm_fclken =
341 cm_read_mod_reg(OMAP3430_CAM_MOD, CM_FCLKEN);
342 prcm_context.per_cm_fclken =
343 cm_read_mod_reg(OMAP3430_PER_MOD, CM_FCLKEN);
344 prcm_context.usbhost_cm_fclken =
345 cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
346 prcm_context.core_cm_iclken1 =
347 cm_read_mod_reg(CORE_MOD, CM_ICLKEN1);
348 prcm_context.core_cm_iclken2 =
349 cm_read_mod_reg(CORE_MOD, CM_ICLKEN2);
350 prcm_context.core_cm_iclken3 =
351 cm_read_mod_reg(CORE_MOD, CM_ICLKEN3);
352 prcm_context.sgx_cm_iclken =
353 cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_ICLKEN);
354 prcm_context.wkup_cm_iclken =
355 cm_read_mod_reg(WKUP_MOD, CM_ICLKEN);
356 prcm_context.dss_cm_iclken =
357 cm_read_mod_reg(OMAP3430_DSS_MOD, CM_ICLKEN);
358 prcm_context.cam_cm_iclken =
359 cm_read_mod_reg(OMAP3430_CAM_MOD, CM_ICLKEN);
360 prcm_context.per_cm_iclken =
361 cm_read_mod_reg(OMAP3430_PER_MOD, CM_ICLKEN);
362 prcm_context.usbhost_cm_iclken =
363 cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
364 prcm_context.iva2_cm_autiidle2 =
365 cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_AUTOIDLE2);
366 prcm_context.mpu_cm_autoidle2 =
367 cm_read_mod_reg(MPU_MOD, CM_AUTOIDLE2);
368 prcm_context.iva2_cm_clkstctrl =
369 cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP2_CM_CLKSTCTRL);
370 prcm_context.mpu_cm_clkstctrl =
371 cm_read_mod_reg(MPU_MOD, OMAP2_CM_CLKSTCTRL);
372 prcm_context.core_cm_clkstctrl =
373 cm_read_mod_reg(CORE_MOD, OMAP2_CM_CLKSTCTRL);
374 prcm_context.sgx_cm_clkstctrl =
375 cm_read_mod_reg(OMAP3430ES2_SGX_MOD,
376 OMAP2_CM_CLKSTCTRL);
377 prcm_context.dss_cm_clkstctrl =
378 cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP2_CM_CLKSTCTRL);
379 prcm_context.cam_cm_clkstctrl =
380 cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP2_CM_CLKSTCTRL);
381 prcm_context.per_cm_clkstctrl =
382 cm_read_mod_reg(OMAP3430_PER_MOD, OMAP2_CM_CLKSTCTRL);
383 prcm_context.neon_cm_clkstctrl =
384 cm_read_mod_reg(OMAP3430_NEON_MOD, OMAP2_CM_CLKSTCTRL);
385 prcm_context.usbhost_cm_clkstctrl =
386 cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD,
387 OMAP2_CM_CLKSTCTRL);
388 prcm_context.core_cm_autoidle1 =
389 cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE1);
390 prcm_context.core_cm_autoidle2 =
391 cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE2);
392 prcm_context.core_cm_autoidle3 =
393 cm_read_mod_reg(CORE_MOD, CM_AUTOIDLE3);
394 prcm_context.wkup_cm_autoidle =
395 cm_read_mod_reg(WKUP_MOD, CM_AUTOIDLE);
396 prcm_context.dss_cm_autoidle =
397 cm_read_mod_reg(OMAP3430_DSS_MOD, CM_AUTOIDLE);
398 prcm_context.cam_cm_autoidle =
399 cm_read_mod_reg(OMAP3430_CAM_MOD, CM_AUTOIDLE);
400 prcm_context.per_cm_autoidle =
401 cm_read_mod_reg(OMAP3430_PER_MOD, CM_AUTOIDLE);
402 prcm_context.usbhost_cm_autoidle =
403 cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
404 prcm_context.sgx_cm_sleepdep =
405 cm_read_mod_reg(OMAP3430ES2_SGX_MOD, OMAP3430_CM_SLEEPDEP);
406 prcm_context.dss_cm_sleepdep =
407 cm_read_mod_reg(OMAP3430_DSS_MOD, OMAP3430_CM_SLEEPDEP);
408 prcm_context.cam_cm_sleepdep =
409 cm_read_mod_reg(OMAP3430_CAM_MOD, OMAP3430_CM_SLEEPDEP);
410 prcm_context.per_cm_sleepdep =
411 cm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_CM_SLEEPDEP);
412 prcm_context.usbhost_cm_sleepdep =
413 cm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, OMAP3430_CM_SLEEPDEP);
414 prcm_context.cm_clkout_ctrl = cm_read_mod_reg(OMAP3430_CCR_MOD,
415 OMAP3_CM_CLKOUT_CTRL_OFFSET);
416 prcm_context.prm_clkout_ctrl = prm_read_mod_reg(OMAP3430_CCR_MOD,
417 OMAP3_PRM_CLKOUT_CTRL_OFFSET);
418 prcm_context.sgx_pm_wkdep =
419 prm_read_mod_reg(OMAP3430ES2_SGX_MOD, PM_WKDEP);
420 prcm_context.dss_pm_wkdep =
421 prm_read_mod_reg(OMAP3430_DSS_MOD, PM_WKDEP);
422 prcm_context.cam_pm_wkdep =
423 prm_read_mod_reg(OMAP3430_CAM_MOD, PM_WKDEP);
424 prcm_context.per_pm_wkdep =
425 prm_read_mod_reg(OMAP3430_PER_MOD, PM_WKDEP);
426 prcm_context.neon_pm_wkdep =
427 prm_read_mod_reg(OMAP3430_NEON_MOD, PM_WKDEP);
428 prcm_context.usbhost_pm_wkdep =
429 prm_read_mod_reg(OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
430 prcm_context.core_pm_mpugrpsel1 =
431 prm_read_mod_reg(CORE_MOD, OMAP3430_PM_MPUGRPSEL1);
432 prcm_context.iva2_pm_ivagrpsel1 =
433 prm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_PM_IVAGRPSEL1);
434 prcm_context.core_pm_mpugrpsel3 =
435 prm_read_mod_reg(CORE_MOD, OMAP3430ES2_PM_MPUGRPSEL3);
436 prcm_context.core_pm_ivagrpsel3 =
437 prm_read_mod_reg(CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3);
438 prcm_context.wkup_pm_mpugrpsel =
439 prm_read_mod_reg(WKUP_MOD, OMAP3430_PM_MPUGRPSEL);
440 prcm_context.wkup_pm_ivagrpsel =
441 prm_read_mod_reg(WKUP_MOD, OMAP3430_PM_IVAGRPSEL);
442 prcm_context.per_pm_mpugrpsel =
443 prm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL);
444 prcm_context.per_pm_ivagrpsel =
445 prm_read_mod_reg(OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL);
446 prcm_context.wkup_pm_wken = prm_read_mod_reg(WKUP_MOD, PM_WKEN);
447 return;
448}
449
450void omap3_prcm_restore_context(void)
451{
452 omap_ctrl_writel(prcm_context.control_padconf_sys_nirq,
453 OMAP343X_CONTROL_PADCONF_SYSNIRQ);
454 cm_write_mod_reg(prcm_context.iva2_cm_clksel1, OMAP3430_IVA2_MOD,
455 CM_CLKSEL1);
456 cm_write_mod_reg(prcm_context.iva2_cm_clksel2, OMAP3430_IVA2_MOD,
457 CM_CLKSEL2);
458 __raw_writel(prcm_context.cm_sysconfig, OMAP3430_CM_SYSCONFIG);
459 cm_write_mod_reg(prcm_context.sgx_cm_clksel, OMAP3430ES2_SGX_MOD,
460 CM_CLKSEL);
461 cm_write_mod_reg(prcm_context.dss_cm_clksel, OMAP3430_DSS_MOD,
462 CM_CLKSEL);
463 cm_write_mod_reg(prcm_context.cam_cm_clksel, OMAP3430_CAM_MOD,
464 CM_CLKSEL);
465 cm_write_mod_reg(prcm_context.per_cm_clksel, OMAP3430_PER_MOD,
466 CM_CLKSEL);
467 cm_write_mod_reg(prcm_context.emu_cm_clksel, OMAP3430_EMU_MOD,
468 CM_CLKSEL1);
469 cm_write_mod_reg(prcm_context.emu_cm_clkstctrl, OMAP3430_EMU_MOD,
470 OMAP2_CM_CLKSTCTRL);
471 cm_write_mod_reg(prcm_context.pll_cm_autoidle2, PLL_MOD,
472 CM_AUTOIDLE2);
473 cm_write_mod_reg(prcm_context.pll_cm_clksel4, PLL_MOD,
474 OMAP3430ES2_CM_CLKSEL4);
475 cm_write_mod_reg(prcm_context.pll_cm_clksel5, PLL_MOD,
476 OMAP3430ES2_CM_CLKSEL5);
477 cm_write_mod_reg(prcm_context.pll_cm_clken2, PLL_MOD,
478 OMAP3430ES2_CM_CLKEN2);
479 __raw_writel(prcm_context.cm_polctrl, OMAP3430_CM_POLCTRL);
480 cm_write_mod_reg(prcm_context.iva2_cm_fclken, OMAP3430_IVA2_MOD,
481 CM_FCLKEN);
482 cm_write_mod_reg(prcm_context.iva2_cm_clken_pll, OMAP3430_IVA2_MOD,
483 OMAP3430_CM_CLKEN_PLL);
484 cm_write_mod_reg(prcm_context.core_cm_fclken1, CORE_MOD, CM_FCLKEN1);
485 cm_write_mod_reg(prcm_context.core_cm_fclken3, CORE_MOD,
486 OMAP3430ES2_CM_FCLKEN3);
487 cm_write_mod_reg(prcm_context.sgx_cm_fclken, OMAP3430ES2_SGX_MOD,
488 CM_FCLKEN);
489 cm_write_mod_reg(prcm_context.wkup_cm_fclken, WKUP_MOD, CM_FCLKEN);
490 cm_write_mod_reg(prcm_context.dss_cm_fclken, OMAP3430_DSS_MOD,
491 CM_FCLKEN);
492 cm_write_mod_reg(prcm_context.cam_cm_fclken, OMAP3430_CAM_MOD,
493 CM_FCLKEN);
494 cm_write_mod_reg(prcm_context.per_cm_fclken, OMAP3430_PER_MOD,
495 CM_FCLKEN);
496 cm_write_mod_reg(prcm_context.usbhost_cm_fclken,
497 OMAP3430ES2_USBHOST_MOD, CM_FCLKEN);
498 cm_write_mod_reg(prcm_context.core_cm_iclken1, CORE_MOD, CM_ICLKEN1);
499 cm_write_mod_reg(prcm_context.core_cm_iclken2, CORE_MOD, CM_ICLKEN2);
500 cm_write_mod_reg(prcm_context.core_cm_iclken3, CORE_MOD, CM_ICLKEN3);
501 cm_write_mod_reg(prcm_context.sgx_cm_iclken, OMAP3430ES2_SGX_MOD,
502 CM_ICLKEN);
503 cm_write_mod_reg(prcm_context.wkup_cm_iclken, WKUP_MOD, CM_ICLKEN);
504 cm_write_mod_reg(prcm_context.dss_cm_iclken, OMAP3430_DSS_MOD,
505 CM_ICLKEN);
506 cm_write_mod_reg(prcm_context.cam_cm_iclken, OMAP3430_CAM_MOD,
507 CM_ICLKEN);
508 cm_write_mod_reg(prcm_context.per_cm_iclken, OMAP3430_PER_MOD,
509 CM_ICLKEN);
510 cm_write_mod_reg(prcm_context.usbhost_cm_iclken,
511 OMAP3430ES2_USBHOST_MOD, CM_ICLKEN);
512 cm_write_mod_reg(prcm_context.iva2_cm_autiidle2, OMAP3430_IVA2_MOD,
513 CM_AUTOIDLE2);
514 cm_write_mod_reg(prcm_context.mpu_cm_autoidle2, MPU_MOD, CM_AUTOIDLE2);
515 cm_write_mod_reg(prcm_context.iva2_cm_clkstctrl, OMAP3430_IVA2_MOD,
516 OMAP2_CM_CLKSTCTRL);
517 cm_write_mod_reg(prcm_context.mpu_cm_clkstctrl, MPU_MOD,
518 OMAP2_CM_CLKSTCTRL);
519 cm_write_mod_reg(prcm_context.core_cm_clkstctrl, CORE_MOD,
520 OMAP2_CM_CLKSTCTRL);
521 cm_write_mod_reg(prcm_context.sgx_cm_clkstctrl, OMAP3430ES2_SGX_MOD,
522 OMAP2_CM_CLKSTCTRL);
523 cm_write_mod_reg(prcm_context.dss_cm_clkstctrl, OMAP3430_DSS_MOD,
524 OMAP2_CM_CLKSTCTRL);
525 cm_write_mod_reg(prcm_context.cam_cm_clkstctrl, OMAP3430_CAM_MOD,
526 OMAP2_CM_CLKSTCTRL);
527 cm_write_mod_reg(prcm_context.per_cm_clkstctrl, OMAP3430_PER_MOD,
528 OMAP2_CM_CLKSTCTRL);
529 cm_write_mod_reg(prcm_context.neon_cm_clkstctrl, OMAP3430_NEON_MOD,
530 OMAP2_CM_CLKSTCTRL);
531 cm_write_mod_reg(prcm_context.usbhost_cm_clkstctrl,
532 OMAP3430ES2_USBHOST_MOD, OMAP2_CM_CLKSTCTRL);
533 cm_write_mod_reg(prcm_context.core_cm_autoidle1, CORE_MOD,
534 CM_AUTOIDLE1);
535 cm_write_mod_reg(prcm_context.core_cm_autoidle2, CORE_MOD,
536 CM_AUTOIDLE2);
537 cm_write_mod_reg(prcm_context.core_cm_autoidle3, CORE_MOD,
538 CM_AUTOIDLE3);
539 cm_write_mod_reg(prcm_context.wkup_cm_autoidle, WKUP_MOD, CM_AUTOIDLE);
540 cm_write_mod_reg(prcm_context.dss_cm_autoidle, OMAP3430_DSS_MOD,
541 CM_AUTOIDLE);
542 cm_write_mod_reg(prcm_context.cam_cm_autoidle, OMAP3430_CAM_MOD,
543 CM_AUTOIDLE);
544 cm_write_mod_reg(prcm_context.per_cm_autoidle, OMAP3430_PER_MOD,
545 CM_AUTOIDLE);
546 cm_write_mod_reg(prcm_context.usbhost_cm_autoidle,
547 OMAP3430ES2_USBHOST_MOD, CM_AUTOIDLE);
548 cm_write_mod_reg(prcm_context.sgx_cm_sleepdep, OMAP3430ES2_SGX_MOD,
549 OMAP3430_CM_SLEEPDEP);
550 cm_write_mod_reg(prcm_context.dss_cm_sleepdep, OMAP3430_DSS_MOD,
551 OMAP3430_CM_SLEEPDEP);
552 cm_write_mod_reg(prcm_context.cam_cm_sleepdep, OMAP3430_CAM_MOD,
553 OMAP3430_CM_SLEEPDEP);
554 cm_write_mod_reg(prcm_context.per_cm_sleepdep, OMAP3430_PER_MOD,
555 OMAP3430_CM_SLEEPDEP);
556 cm_write_mod_reg(prcm_context.usbhost_cm_sleepdep,
557 OMAP3430ES2_USBHOST_MOD, OMAP3430_CM_SLEEPDEP);
558 cm_write_mod_reg(prcm_context.cm_clkout_ctrl, OMAP3430_CCR_MOD,
559 OMAP3_CM_CLKOUT_CTRL_OFFSET);
560 prm_write_mod_reg(prcm_context.prm_clkout_ctrl, OMAP3430_CCR_MOD,
561 OMAP3_PRM_CLKOUT_CTRL_OFFSET);
562 prm_write_mod_reg(prcm_context.sgx_pm_wkdep, OMAP3430ES2_SGX_MOD,
563 PM_WKDEP);
564 prm_write_mod_reg(prcm_context.dss_pm_wkdep, OMAP3430_DSS_MOD,
565 PM_WKDEP);
566 prm_write_mod_reg(prcm_context.cam_pm_wkdep, OMAP3430_CAM_MOD,
567 PM_WKDEP);
568 prm_write_mod_reg(prcm_context.per_pm_wkdep, OMAP3430_PER_MOD,
569 PM_WKDEP);
570 prm_write_mod_reg(prcm_context.neon_pm_wkdep, OMAP3430_NEON_MOD,
571 PM_WKDEP);
572 prm_write_mod_reg(prcm_context.usbhost_pm_wkdep,
573 OMAP3430ES2_USBHOST_MOD, PM_WKDEP);
574 prm_write_mod_reg(prcm_context.core_pm_mpugrpsel1, CORE_MOD,
575 OMAP3430_PM_MPUGRPSEL1);
576 prm_write_mod_reg(prcm_context.iva2_pm_ivagrpsel1, OMAP3430_IVA2_MOD,
577 OMAP3430_PM_IVAGRPSEL1);
578 prm_write_mod_reg(prcm_context.core_pm_mpugrpsel3, CORE_MOD,
579 OMAP3430ES2_PM_MPUGRPSEL3);
580 prm_write_mod_reg(prcm_context.core_pm_ivagrpsel3, CORE_MOD,
581 OMAP3430ES2_PM_IVAGRPSEL3);
582 prm_write_mod_reg(prcm_context.wkup_pm_mpugrpsel, WKUP_MOD,
583 OMAP3430_PM_MPUGRPSEL);
584 prm_write_mod_reg(prcm_context.wkup_pm_ivagrpsel, WKUP_MOD,
585 OMAP3430_PM_IVAGRPSEL);
586 prm_write_mod_reg(prcm_context.per_pm_mpugrpsel, OMAP3430_PER_MOD,
587 OMAP3430_PM_MPUGRPSEL);
588 prm_write_mod_reg(prcm_context.per_pm_ivagrpsel, OMAP3430_PER_MOD,
589 OMAP3430_PM_IVAGRPSEL);
590 prm_write_mod_reg(prcm_context.wkup_pm_wken, WKUP_MOD, PM_WKEN);
591 return;
592}
593#endif
diff --git a/arch/arm/mach-omap2/prcm44xx.h b/arch/arm/mach-omap2/prcm44xx.h
new file mode 100644
index 000000000000..7334ffb9d2c1
--- /dev/null
+++ b/arch/arm/mach-omap2/prcm44xx.h
@@ -0,0 +1,42 @@
1/*
2 * OMAP4 PRCM definitions
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc.
5 * Copyright (C) 2010 Nokia Corporation
6 *
7 * Paul Walmsley
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 *
13 * This file contains macros and functions that are common to all of
14 * the PRM/CM/PRCM blocks on the OMAP4 devices: PRM, CM1, CM2,
15 * PRCM_MPU, SCRM
16 */
17
18#ifndef __ARCH_ARM_MACH_OMAP2_PRCM44XX_H
19#define __ARCH_ARM_MACH_OMAP2_PRCM44XX_H
20
21/*
22 * OMAP4 PRCM partition IDs
23 *
24 * The numbers and order are arbitrary, but 0 is reserved for the
25 * 'invalid' partition in case someone forgets to add a
26 * .prcm_partition field.
27 */
28#define OMAP4430_INVALID_PRCM_PARTITION 0
29#define OMAP4430_PRM_PARTITION 1
30#define OMAP4430_CM1_PARTITION 2
31#define OMAP4430_CM2_PARTITION 3
32#define OMAP4430_SCRM_PARTITION 4
33#define OMAP4430_PRCM_MPU_PARTITION 5
34
35/*
36 * OMAP4_MAX_PRCM_PARTITIONS: set to the highest value of the PRCM partition
37 * IDs, plus one
38 */
39#define OMAP4_MAX_PRCM_PARTITIONS 6
40
41
42#endif
diff --git a/arch/arm/mach-omap2/prcm_mpu44xx.c b/arch/arm/mach-omap2/prcm_mpu44xx.c
new file mode 100644
index 000000000000..171fe171a749
--- /dev/null
+++ b/arch/arm/mach-omap2/prcm_mpu44xx.c
@@ -0,0 +1,45 @@
1/*
2 * OMAP4 PRCM_MPU module functions
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/types.h>
14#include <linux/errno.h>
15#include <linux/err.h>
16#include <linux/io.h>
17
18#include <plat/common.h>
19
20#include "prcm_mpu44xx.h"
21#include "cm-regbits-44xx.h"
22
23/* PRCM_MPU low-level functions */
24
25u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 reg)
26{
27 return __raw_readl(OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
28}
29
30void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 reg)
31{
32 __raw_writel(val, OMAP44XX_PRCM_MPU_REGADDR(inst, reg));
33}
34
35u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 reg)
36{
37 u32 v;
38
39 v = omap4_prcm_mpu_read_inst_reg(inst, reg);
40 v &= ~mask;
41 v |= bits;
42 omap4_prcm_mpu_write_inst_reg(v, inst, reg);
43
44 return v;
45}
diff --git a/arch/arm/mach-omap2/prcm_mpu44xx.h b/arch/arm/mach-omap2/prcm_mpu44xx.h
new file mode 100644
index 000000000000..d22d1b43bccd
--- /dev/null
+++ b/arch/arm/mach-omap2/prcm_mpu44xx.h
@@ -0,0 +1,104 @@
1/*
2 * OMAP44xx PRCM MPU instance offset macros
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc.
5 * Copyright (C) 2010 Nokia Corporation
6 *
7 * Paul Walmsley (paul@pwsan.com)
8 * Rajendra Nayak (rnayak@ti.com)
9 * Benoit Cousson (b-cousson@ti.com)
10 *
11 * This file is automatically generated from the OMAP hardware databases.
12 * We respectfully ask that any modifications to this file be coordinated
13 * with the public linux-omap@vger.kernel.org mailing list and the
14 * authors above to ensure that the autogeneration scripts are kept
15 * up-to-date with the file contents.
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation.
20 *
21 * XXX This file needs to be updated to align on one of "OMAP4", "OMAP44XX",
22 * or "OMAP4430".
23 */
24
25#ifndef __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H
26#define __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H
27
28#define OMAP4430_PRCM_MPU_BASE 0x48243000
29
30#define OMAP44XX_PRCM_MPU_REGADDR(inst, reg) \
31 OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE + (inst) + (reg))
32
33/* PRCM_MPU instances */
34
35#define OMAP4430_PRCM_MPU_OCP_SOCKET_PRCM_INST 0x0000
36#define OMAP4430_PRCM_MPU_DEVICE_PRM_INST 0x0200
37#define OMAP4430_PRCM_MPU_CPU0_INST 0x0400
38#define OMAP4430_PRCM_MPU_CPU1_INST 0x0800
39
40/* PRCM_MPU clockdomain register offsets (from instance start) */
41#define OMAP4430_PRCM_MPU_CPU0_CPU0_CDOFFS 0x0018
42#define OMAP4430_PRCM_MPU_CPU1_CPU1_CDOFFS 0x0018
43
44
45/*
46 * PRCM_MPU
47 *
48 * The PRCM_MPU is a local PRCM inside the MPU subsystem. For the PRCM (global)
49 * point of view the PRCM_MPU is a single entity. It shares the same
50 * programming model as the global PRCM and thus can be assimilate as two new
51 * MOD inside the PRCM
52 */
53
54/* PRCM_MPU.OCP_SOCKET_PRCM register offsets */
55#define OMAP4_REVISION_PRCM_OFFSET 0x0000
56#define OMAP4430_REVISION_PRCM OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_OCP_SOCKET_PRCM_INST, 0x0000)
57
58/* PRCM_MPU.DEVICE_PRM register offsets */
59#define OMAP4_PRCM_MPU_PRM_RSTST_OFFSET 0x0000
60#define OMAP4430_PRCM_MPU_PRM_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_DEVICE_PRM_INST, 0x0000)
61#define OMAP4_PRCM_MPU_PRM_PSCON_COUNT_OFFSET 0x0004
62#define OMAP4430_PRCM_MPU_PRM_PSCON_COUNT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_DEVICE_PRM_INST, 0x0004)
63
64/* PRCM_MPU.CPU0 register offsets */
65#define OMAP4_PM_CPU0_PWRSTCTRL_OFFSET 0x0000
66#define OMAP4430_PM_CPU0_PWRSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0000)
67#define OMAP4_PM_CPU0_PWRSTST_OFFSET 0x0004
68#define OMAP4430_PM_CPU0_PWRSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0004)
69#define OMAP4_RM_CPU0_CPU0_CONTEXT_OFFSET 0x0008
70#define OMAP4430_RM_CPU0_CPU0_CONTEXT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0008)
71#define OMAP4_RM_CPU0_CPU0_RSTCTRL_OFFSET 0x000c
72#define OMAP4430_RM_CPU0_CPU0_RSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x000c)
73#define OMAP4_RM_CPU0_CPU0_RSTST_OFFSET 0x0010
74#define OMAP4430_RM_CPU0_CPU0_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0010)
75#define OMAP4_CM_CPU0_CPU0_CLKCTRL_OFFSET 0x0014
76#define OMAP4430_CM_CPU0_CPU0_CLKCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0014)
77#define OMAP4_CM_CPU0_CLKSTCTRL_OFFSET 0x0018
78#define OMAP4430_CM_CPU0_CLKSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_INST, 0x0018)
79
80/* PRCM_MPU.CPU1 register offsets */
81#define OMAP4_PM_CPU1_PWRSTCTRL_OFFSET 0x0000
82#define OMAP4430_PM_CPU1_PWRSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0000)
83#define OMAP4_PM_CPU1_PWRSTST_OFFSET 0x0004
84#define OMAP4430_PM_CPU1_PWRSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0004)
85#define OMAP4_RM_CPU1_CPU1_CONTEXT_OFFSET 0x0008
86#define OMAP4430_RM_CPU1_CPU1_CONTEXT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0008)
87#define OMAP4_RM_CPU1_CPU1_RSTCTRL_OFFSET 0x000c
88#define OMAP4430_RM_CPU1_CPU1_RSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x000c)
89#define OMAP4_RM_CPU1_CPU1_RSTST_OFFSET 0x0010
90#define OMAP4430_RM_CPU1_CPU1_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0010)
91#define OMAP4_CM_CPU1_CPU1_CLKCTRL_OFFSET 0x0014
92#define OMAP4430_CM_CPU1_CPU1_CLKCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0014)
93#define OMAP4_CM_CPU1_CLKSTCTRL_OFFSET 0x0018
94#define OMAP4430_CM_CPU1_CLKSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_INST, 0x0018)
95
96/* Function prototypes */
97# ifndef __ASSEMBLER__
98extern u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 idx);
99extern void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 idx);
100extern u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst,
101 s16 idx);
102# endif
103
104#endif
diff --git a/arch/arm/mach-omap2/prm-regbits-24xx.h b/arch/arm/mach-omap2/prm-regbits-24xx.h
index 0b188ffa710e..6ac966103f34 100644
--- a/arch/arm/mach-omap2/prm-regbits-24xx.h
+++ b/arch/arm/mach-omap2/prm-regbits-24xx.h
@@ -14,7 +14,7 @@
14 * published by the Free Software Foundation. 14 * published by the Free Software Foundation.
15 */ 15 */
16 16
17#include "prm.h" 17#include "prm2xxx_3xxx.h"
18 18
19/* Bits shared between registers */ 19/* Bits shared between registers */
20 20
diff --git a/arch/arm/mach-omap2/prm-regbits-34xx.h b/arch/arm/mach-omap2/prm-regbits-34xx.h
index 7fd6023edf96..64c087af6a8b 100644
--- a/arch/arm/mach-omap2/prm-regbits-34xx.h
+++ b/arch/arm/mach-omap2/prm-regbits-34xx.h
@@ -1,6 +1,3 @@
1#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
2#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
3
4/* 1/*
5 * OMAP3430 Power/Reset Management register bits 2 * OMAP3430 Power/Reset Management register bits
6 * 3 *
@@ -13,8 +10,11 @@
13 * it under the terms of the GNU General Public License version 2 as 10 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation. 11 * published by the Free Software Foundation.
15 */ 12 */
13#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
14#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_34XX_H
15
16 16
17#include "prm.h" 17#include "prm2xxx_3xxx.h"
18 18
19/* Shared register bits */ 19/* Shared register bits */
20 20
@@ -101,8 +101,11 @@
101#define OMAP3430_GRPSEL_MCSPI3_MASK (1 << 20) 101#define OMAP3430_GRPSEL_MCSPI3_MASK (1 << 20)
102#define OMAP3430_GRPSEL_MCSPI2_MASK (1 << 19) 102#define OMAP3430_GRPSEL_MCSPI2_MASK (1 << 19)
103#define OMAP3430_GRPSEL_MCSPI1_MASK (1 << 18) 103#define OMAP3430_GRPSEL_MCSPI1_MASK (1 << 18)
104#define OMAP3430_GRPSEL_I2C3_SHIFT 17
104#define OMAP3430_GRPSEL_I2C3_MASK (1 << 17) 105#define OMAP3430_GRPSEL_I2C3_MASK (1 << 17)
106#define OMAP3430_GRPSEL_I2C2_SHIFT 16
105#define OMAP3430_GRPSEL_I2C2_MASK (1 << 16) 107#define OMAP3430_GRPSEL_I2C2_MASK (1 << 16)
108#define OMAP3430_GRPSEL_I2C1_SHIFT 15
106#define OMAP3430_GRPSEL_I2C1_MASK (1 << 15) 109#define OMAP3430_GRPSEL_I2C1_MASK (1 << 15)
107#define OMAP3430_GRPSEL_UART2_MASK (1 << 14) 110#define OMAP3430_GRPSEL_UART2_MASK (1 << 14)
108#define OMAP3430_GRPSEL_UART1_MASK (1 << 13) 111#define OMAP3430_GRPSEL_UART1_MASK (1 << 13)
@@ -122,6 +125,7 @@
122#define OMAP3430_MEMRETSTATE_MASK (1 << 8) 125#define OMAP3430_MEMRETSTATE_MASK (1 << 8)
123 126
124/* PM_MPUGRPSEL_PER, PM_IVA2GRPSEL_PER shared bits */ 127/* PM_MPUGRPSEL_PER, PM_IVA2GRPSEL_PER shared bits */
128#define OMAP3630_GRPSEL_UART4_MASK (1 << 18)
125#define OMAP3430_GRPSEL_GPIO6_MASK (1 << 17) 129#define OMAP3430_GRPSEL_GPIO6_MASK (1 << 17)
126#define OMAP3430_GRPSEL_GPIO5_MASK (1 << 16) 130#define OMAP3430_GRPSEL_GPIO5_MASK (1 << 16)
127#define OMAP3430_GRPSEL_GPIO4_MASK (1 << 15) 131#define OMAP3430_GRPSEL_GPIO4_MASK (1 << 15)
diff --git a/arch/arm/mach-omap2/prm-regbits-44xx.h b/arch/arm/mach-omap2/prm-regbits-44xx.h
index 597be4a2b9ff..6d2776f6fc08 100644
--- a/arch/arm/mach-omap2/prm-regbits-44xx.h
+++ b/arch/arm/mach-omap2/prm-regbits-44xx.h
@@ -1,8 +1,8 @@
1/* 1/*
2 * OMAP44xx Power Management register bits 2 * OMAP44xx Power Management register bits
3 * 3 *
4 * Copyright (C) 2009 Texas Instruments, Inc. 4 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2009 Nokia Corporation 5 * Copyright (C) 2009-2010 Nokia Corporation
6 * 6 *
7 * Paul Walmsley (paul@pwsan.com) 7 * Paul Walmsley (paul@pwsan.com)
8 * Rajendra Nayak (rnayak@ti.com) 8 * Rajendra Nayak (rnayak@ti.com)
@@ -22,595 +22,617 @@
22#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_44XX_H 22#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_44XX_H
23#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_44XX_H 23#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_44XX_H
24 24
25#include "prm.h"
26
27 25
28/* 26/*
29 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP, 27 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
30 * PRM_LDO_SRAM_MPU_SETUP 28 * PRM_LDO_SRAM_MPU_SETUP
31 */ 29 */
32#define OMAP4430_ABBOFF_ACT_EXPORT_SHIFT 1 30#define OMAP4430_ABBOFF_ACT_EXPORT_SHIFT 1
33#define OMAP4430_ABBOFF_ACT_EXPORT_MASK BITFIELD(1, 1) 31#define OMAP4430_ABBOFF_ACT_EXPORT_MASK (1 << 1)
34 32
35/* 33/*
36 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP, 34 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
37 * PRM_LDO_SRAM_MPU_SETUP 35 * PRM_LDO_SRAM_MPU_SETUP
38 */ 36 */
39#define OMAP4430_ABBOFF_SLEEP_EXPORT_SHIFT 2 37#define OMAP4430_ABBOFF_SLEEP_EXPORT_SHIFT 2
40#define OMAP4430_ABBOFF_SLEEP_EXPORT_MASK BITFIELD(2, 2) 38#define OMAP4430_ABBOFF_SLEEP_EXPORT_MASK (1 << 2)
41 39
42/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 40/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
43#define OMAP4430_ABB_IVA_DONE_EN_SHIFT 31 41#define OMAP4430_ABB_IVA_DONE_EN_SHIFT 31
44#define OMAP4430_ABB_IVA_DONE_EN_MASK BITFIELD(31, 31) 42#define OMAP4430_ABB_IVA_DONE_EN_MASK (1 << 31)
45 43
46/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 44/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
47#define OMAP4430_ABB_IVA_DONE_ST_SHIFT 31 45#define OMAP4430_ABB_IVA_DONE_ST_SHIFT 31
48#define OMAP4430_ABB_IVA_DONE_ST_MASK BITFIELD(31, 31) 46#define OMAP4430_ABB_IVA_DONE_ST_MASK (1 << 31)
49 47
50/* Used by PRM_IRQENABLE_MPU_2 */ 48/* Used by PRM_IRQENABLE_MPU_2 */
51#define OMAP4430_ABB_MPU_DONE_EN_SHIFT 7 49#define OMAP4430_ABB_MPU_DONE_EN_SHIFT 7
52#define OMAP4430_ABB_MPU_DONE_EN_MASK BITFIELD(7, 7) 50#define OMAP4430_ABB_MPU_DONE_EN_MASK (1 << 7)
53 51
54/* Used by PRM_IRQSTATUS_MPU_2 */ 52/* Used by PRM_IRQSTATUS_MPU_2 */
55#define OMAP4430_ABB_MPU_DONE_ST_SHIFT 7 53#define OMAP4430_ABB_MPU_DONE_ST_SHIFT 7
56#define OMAP4430_ABB_MPU_DONE_ST_MASK BITFIELD(7, 7) 54#define OMAP4430_ABB_MPU_DONE_ST_MASK (1 << 7)
57 55
58/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */ 56/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */
59#define OMAP4430_ACTIVE_FBB_SEL_SHIFT 2 57#define OMAP4430_ACTIVE_FBB_SEL_SHIFT 2
60#define OMAP4430_ACTIVE_FBB_SEL_MASK BITFIELD(2, 2) 58#define OMAP4430_ACTIVE_FBB_SEL_MASK (1 << 2)
61 59
62/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */ 60/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */
63#define OMAP4430_ACTIVE_RBB_SEL_SHIFT 1 61#define OMAP4430_ACTIVE_RBB_SEL_SHIFT 1
64#define OMAP4430_ACTIVE_RBB_SEL_MASK BITFIELD(1, 1) 62#define OMAP4430_ACTIVE_RBB_SEL_MASK (1 << 1)
65 63
66/* Used by PM_ABE_PWRSTCTRL */ 64/* Used by PM_ABE_PWRSTCTRL */
67#define OMAP4430_AESSMEM_ONSTATE_SHIFT 16 65#define OMAP4430_AESSMEM_ONSTATE_SHIFT 16
68#define OMAP4430_AESSMEM_ONSTATE_MASK BITFIELD(16, 17) 66#define OMAP4430_AESSMEM_ONSTATE_MASK (0x3 << 16)
69 67
70/* Used by PM_ABE_PWRSTCTRL */ 68/* Used by PM_ABE_PWRSTCTRL */
71#define OMAP4430_AESSMEM_RETSTATE_SHIFT 8 69#define OMAP4430_AESSMEM_RETSTATE_SHIFT 8
72#define OMAP4430_AESSMEM_RETSTATE_MASK BITFIELD(8, 8) 70#define OMAP4430_AESSMEM_RETSTATE_MASK (1 << 8)
73 71
74/* Used by PM_ABE_PWRSTST */ 72/* Used by PM_ABE_PWRSTST */
75#define OMAP4430_AESSMEM_STATEST_SHIFT 4 73#define OMAP4430_AESSMEM_STATEST_SHIFT 4
76#define OMAP4430_AESSMEM_STATEST_MASK BITFIELD(4, 5) 74#define OMAP4430_AESSMEM_STATEST_MASK (0x3 << 4)
77 75
78/* 76/*
79 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP, 77 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
80 * PRM_LDO_SRAM_MPU_SETUP 78 * PRM_LDO_SRAM_MPU_SETUP
81 */ 79 */
82#define OMAP4430_AIPOFF_SHIFT 8 80#define OMAP4430_AIPOFF_SHIFT 8
83#define OMAP4430_AIPOFF_MASK BITFIELD(8, 8) 81#define OMAP4430_AIPOFF_MASK (1 << 8)
84 82
85/* Used by PRM_VOLTCTRL */ 83/* Used by PRM_VOLTCTRL */
86#define OMAP4430_AUTO_CTRL_VDD_CORE_L_SHIFT 0 84#define OMAP4430_AUTO_CTRL_VDD_CORE_L_SHIFT 0
87#define OMAP4430_AUTO_CTRL_VDD_CORE_L_MASK BITFIELD(0, 1) 85#define OMAP4430_AUTO_CTRL_VDD_CORE_L_MASK (0x3 << 0)
88 86
89/* Used by PRM_VOLTCTRL */ 87/* Used by PRM_VOLTCTRL */
90#define OMAP4430_AUTO_CTRL_VDD_IVA_L_SHIFT 4 88#define OMAP4430_AUTO_CTRL_VDD_IVA_L_SHIFT 4
91#define OMAP4430_AUTO_CTRL_VDD_IVA_L_MASK BITFIELD(4, 5) 89#define OMAP4430_AUTO_CTRL_VDD_IVA_L_MASK (0x3 << 4)
92 90
93/* Used by PRM_VOLTCTRL */ 91/* Used by PRM_VOLTCTRL */
94#define OMAP4430_AUTO_CTRL_VDD_MPU_L_SHIFT 2 92#define OMAP4430_AUTO_CTRL_VDD_MPU_L_SHIFT 2
95#define OMAP4430_AUTO_CTRL_VDD_MPU_L_MASK BITFIELD(2, 3) 93#define OMAP4430_AUTO_CTRL_VDD_MPU_L_MASK (0x3 << 2)
94
95/* Used by PRM_VC_ERRST */
96#define OMAP4430_BYPS_RA_ERR_SHIFT 25
97#define OMAP4430_BYPS_RA_ERR_MASK (1 << 25)
98
99/* Used by PRM_VC_ERRST */
100#define OMAP4430_BYPS_SA_ERR_SHIFT 24
101#define OMAP4430_BYPS_SA_ERR_MASK (1 << 24)
102
103/* Used by PRM_VC_ERRST */
104#define OMAP4430_BYPS_TIMEOUT_ERR_SHIFT 26
105#define OMAP4430_BYPS_TIMEOUT_ERR_MASK (1 << 26)
106
107/* Used by PRM_RSTST */
108#define OMAP4430_C2C_RST_SHIFT 10
109#define OMAP4430_C2C_RST_MASK (1 << 10)
96 110
97/* Used by PM_CAM_PWRSTCTRL */ 111/* Used by PM_CAM_PWRSTCTRL */
98#define OMAP4430_CAM_MEM_ONSTATE_SHIFT 16 112#define OMAP4430_CAM_MEM_ONSTATE_SHIFT 16
99#define OMAP4430_CAM_MEM_ONSTATE_MASK BITFIELD(16, 17) 113#define OMAP4430_CAM_MEM_ONSTATE_MASK (0x3 << 16)
100 114
101/* Used by PM_CAM_PWRSTST */ 115/* Used by PM_CAM_PWRSTST */
102#define OMAP4430_CAM_MEM_STATEST_SHIFT 4 116#define OMAP4430_CAM_MEM_STATEST_SHIFT 4
103#define OMAP4430_CAM_MEM_STATEST_MASK BITFIELD(4, 5) 117#define OMAP4430_CAM_MEM_STATEST_MASK (0x3 << 4)
104 118
105/* Used by PRM_CLKREQCTRL */ 119/* Used by PRM_CLKREQCTRL */
106#define OMAP4430_CLKREQ_COND_SHIFT 0 120#define OMAP4430_CLKREQ_COND_SHIFT 0
107#define OMAP4430_CLKREQ_COND_MASK BITFIELD(0, 2) 121#define OMAP4430_CLKREQ_COND_MASK (0x7 << 0)
108 122
109/* Used by PRM_VC_VAL_SMPS_RA_CMD */ 123/* Used by PRM_VC_VAL_SMPS_RA_CMD */
110#define OMAP4430_CMDRA_VDD_CORE_L_SHIFT 0 124#define OMAP4430_CMDRA_VDD_CORE_L_SHIFT 0
111#define OMAP4430_CMDRA_VDD_CORE_L_MASK BITFIELD(0, 7) 125#define OMAP4430_CMDRA_VDD_CORE_L_MASK (0xff << 0)
112 126
113/* Used by PRM_VC_VAL_SMPS_RA_CMD */ 127/* Used by PRM_VC_VAL_SMPS_RA_CMD */
114#define OMAP4430_CMDRA_VDD_IVA_L_SHIFT 8 128#define OMAP4430_CMDRA_VDD_IVA_L_SHIFT 8
115#define OMAP4430_CMDRA_VDD_IVA_L_MASK BITFIELD(8, 15) 129#define OMAP4430_CMDRA_VDD_IVA_L_MASK (0xff << 8)
116 130
117/* Used by PRM_VC_VAL_SMPS_RA_CMD */ 131/* Used by PRM_VC_VAL_SMPS_RA_CMD */
118#define OMAP4430_CMDRA_VDD_MPU_L_SHIFT 16 132#define OMAP4430_CMDRA_VDD_MPU_L_SHIFT 16
119#define OMAP4430_CMDRA_VDD_MPU_L_MASK BITFIELD(16, 23) 133#define OMAP4430_CMDRA_VDD_MPU_L_MASK (0xff << 16)
120 134
121/* Used by PRM_VC_CFG_CHANNEL */ 135/* Used by PRM_VC_CFG_CHANNEL */
122#define OMAP4430_CMD_VDD_CORE_L_SHIFT 4 136#define OMAP4430_CMD_VDD_CORE_L_SHIFT 4
123#define OMAP4430_CMD_VDD_CORE_L_MASK BITFIELD(4, 4) 137#define OMAP4430_CMD_VDD_CORE_L_MASK (1 << 4)
124 138
125/* Used by PRM_VC_CFG_CHANNEL */ 139/* Used by PRM_VC_CFG_CHANNEL */
126#define OMAP4430_CMD_VDD_IVA_L_SHIFT 12 140#define OMAP4430_CMD_VDD_IVA_L_SHIFT 12
127#define OMAP4430_CMD_VDD_IVA_L_MASK BITFIELD(12, 12) 141#define OMAP4430_CMD_VDD_IVA_L_MASK (1 << 12)
128 142
129/* Used by PRM_VC_CFG_CHANNEL */ 143/* Used by PRM_VC_CFG_CHANNEL */
130#define OMAP4430_CMD_VDD_MPU_L_SHIFT 17 144#define OMAP4430_CMD_VDD_MPU_L_SHIFT 17
131#define OMAP4430_CMD_VDD_MPU_L_MASK BITFIELD(17, 17) 145#define OMAP4430_CMD_VDD_MPU_L_MASK (1 << 17)
132 146
133/* Used by PM_CORE_PWRSTCTRL */ 147/* Used by PM_CORE_PWRSTCTRL */
134#define OMAP4430_CORE_OCMRAM_ONSTATE_SHIFT 18 148#define OMAP4430_CORE_OCMRAM_ONSTATE_SHIFT 18
135#define OMAP4430_CORE_OCMRAM_ONSTATE_MASK BITFIELD(18, 19) 149#define OMAP4430_CORE_OCMRAM_ONSTATE_MASK (0x3 << 18)
136 150
137/* Used by PM_CORE_PWRSTCTRL */ 151/* Used by PM_CORE_PWRSTCTRL */
138#define OMAP4430_CORE_OCMRAM_RETSTATE_SHIFT 9 152#define OMAP4430_CORE_OCMRAM_RETSTATE_SHIFT 9
139#define OMAP4430_CORE_OCMRAM_RETSTATE_MASK BITFIELD(9, 9) 153#define OMAP4430_CORE_OCMRAM_RETSTATE_MASK (1 << 9)
140 154
141/* Used by PM_CORE_PWRSTST */ 155/* Used by PM_CORE_PWRSTST */
142#define OMAP4430_CORE_OCMRAM_STATEST_SHIFT 6 156#define OMAP4430_CORE_OCMRAM_STATEST_SHIFT 6
143#define OMAP4430_CORE_OCMRAM_STATEST_MASK BITFIELD(6, 7) 157#define OMAP4430_CORE_OCMRAM_STATEST_MASK (0x3 << 6)
144 158
145/* Used by PM_CORE_PWRSTCTRL */ 159/* Used by PM_CORE_PWRSTCTRL */
146#define OMAP4430_CORE_OTHER_BANK_ONSTATE_SHIFT 16 160#define OMAP4430_CORE_OTHER_BANK_ONSTATE_SHIFT 16
147#define OMAP4430_CORE_OTHER_BANK_ONSTATE_MASK BITFIELD(16, 17) 161#define OMAP4430_CORE_OTHER_BANK_ONSTATE_MASK (0x3 << 16)
148 162
149/* Used by PM_CORE_PWRSTCTRL */ 163/* Used by PM_CORE_PWRSTCTRL */
150#define OMAP4430_CORE_OTHER_BANK_RETSTATE_SHIFT 8 164#define OMAP4430_CORE_OTHER_BANK_RETSTATE_SHIFT 8
151#define OMAP4430_CORE_OTHER_BANK_RETSTATE_MASK BITFIELD(8, 8) 165#define OMAP4430_CORE_OTHER_BANK_RETSTATE_MASK (1 << 8)
152 166
153/* Used by PM_CORE_PWRSTST */ 167/* Used by PM_CORE_PWRSTST */
154#define OMAP4430_CORE_OTHER_BANK_STATEST_SHIFT 4 168#define OMAP4430_CORE_OTHER_BANK_STATEST_SHIFT 4
155#define OMAP4430_CORE_OTHER_BANK_STATEST_MASK BITFIELD(4, 5) 169#define OMAP4430_CORE_OTHER_BANK_STATEST_MASK (0x3 << 4)
170
171/* Used by REVISION_PRM */
172#define OMAP4430_CUSTOM_SHIFT 6
173#define OMAP4430_CUSTOM_MASK (0x3 << 6)
156 174
157/* Used by PRM_VC_VAL_BYPASS */ 175/* Used by PRM_VC_VAL_BYPASS */
158#define OMAP4430_DATA_SHIFT 16 176#define OMAP4430_DATA_SHIFT 16
159#define OMAP4430_DATA_MASK BITFIELD(16, 23) 177#define OMAP4430_DATA_MASK (0xff << 16)
160 178
161/* Used by PRM_DEVICE_OFF_CTRL */ 179/* Used by PRM_DEVICE_OFF_CTRL */
162#define OMAP4430_DEVICE_OFF_ENABLE_SHIFT 0 180#define OMAP4430_DEVICE_OFF_ENABLE_SHIFT 0
163#define OMAP4430_DEVICE_OFF_ENABLE_MASK BITFIELD(0, 0) 181#define OMAP4430_DEVICE_OFF_ENABLE_MASK (1 << 0)
164 182
165/* Used by PRM_VC_CFG_I2C_MODE */ 183/* Used by PRM_VC_CFG_I2C_MODE */
166#define OMAP4430_DFILTEREN_SHIFT 6 184#define OMAP4430_DFILTEREN_SHIFT 6
167#define OMAP4430_DFILTEREN_MASK BITFIELD(6, 6) 185#define OMAP4430_DFILTEREN_MASK (1 << 6)
168 186
169/* Used by PRM_IRQENABLE_MPU, PRM_IRQENABLE_TESLA */ 187/*
188 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
189 * PRM_LDO_SRAM_MPU_SETUP, PRM_SRAM_WKUP_SETUP
190 */
191#define OMAP4430_DISABLE_RTA_EXPORT_SHIFT 0
192#define OMAP4430_DISABLE_RTA_EXPORT_MASK (1 << 0)
193
194/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU, PRM_IRQENABLE_TESLA */
170#define OMAP4430_DPLL_ABE_RECAL_EN_SHIFT 4 195#define OMAP4430_DPLL_ABE_RECAL_EN_SHIFT 4
171#define OMAP4430_DPLL_ABE_RECAL_EN_MASK BITFIELD(4, 4) 196#define OMAP4430_DPLL_ABE_RECAL_EN_MASK (1 << 4)
172 197
173/* Used by PRM_IRQSTATUS_MPU, PRM_IRQSTATUS_TESLA */ 198/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU, PRM_IRQSTATUS_TESLA */
174#define OMAP4430_DPLL_ABE_RECAL_ST_SHIFT 4 199#define OMAP4430_DPLL_ABE_RECAL_ST_SHIFT 4
175#define OMAP4430_DPLL_ABE_RECAL_ST_MASK BITFIELD(4, 4) 200#define OMAP4430_DPLL_ABE_RECAL_ST_MASK (1 << 4)
176 201
177/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 202/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
178#define OMAP4430_DPLL_CORE_RECAL_EN_SHIFT 0 203#define OMAP4430_DPLL_CORE_RECAL_EN_SHIFT 0
179#define OMAP4430_DPLL_CORE_RECAL_EN_MASK BITFIELD(0, 0) 204#define OMAP4430_DPLL_CORE_RECAL_EN_MASK (1 << 0)
180 205
181/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 206/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
182#define OMAP4430_DPLL_CORE_RECAL_ST_SHIFT 0 207#define OMAP4430_DPLL_CORE_RECAL_ST_SHIFT 0
183#define OMAP4430_DPLL_CORE_RECAL_ST_MASK BITFIELD(0, 0) 208#define OMAP4430_DPLL_CORE_RECAL_ST_MASK (1 << 0)
184 209
185/* Used by PRM_IRQENABLE_MPU */ 210/* Used by PRM_IRQENABLE_MPU */
186#define OMAP4430_DPLL_DDRPHY_RECAL_EN_SHIFT 6 211#define OMAP4430_DPLL_DDRPHY_RECAL_EN_SHIFT 6
187#define OMAP4430_DPLL_DDRPHY_RECAL_EN_MASK BITFIELD(6, 6) 212#define OMAP4430_DPLL_DDRPHY_RECAL_EN_MASK (1 << 6)
188 213
189/* Used by PRM_IRQSTATUS_MPU */ 214/* Used by PRM_IRQSTATUS_MPU */
190#define OMAP4430_DPLL_DDRPHY_RECAL_ST_SHIFT 6 215#define OMAP4430_DPLL_DDRPHY_RECAL_ST_SHIFT 6
191#define OMAP4430_DPLL_DDRPHY_RECAL_ST_MASK BITFIELD(6, 6) 216#define OMAP4430_DPLL_DDRPHY_RECAL_ST_MASK (1 << 6)
192 217
193/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU, PRM_IRQENABLE_TESLA */ 218/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU, PRM_IRQENABLE_TESLA */
194#define OMAP4430_DPLL_IVA_RECAL_EN_SHIFT 2 219#define OMAP4430_DPLL_IVA_RECAL_EN_SHIFT 2
195#define OMAP4430_DPLL_IVA_RECAL_EN_MASK BITFIELD(2, 2) 220#define OMAP4430_DPLL_IVA_RECAL_EN_MASK (1 << 2)
196 221
197/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU, PRM_IRQSTATUS_TESLA */ 222/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU, PRM_IRQSTATUS_TESLA */
198#define OMAP4430_DPLL_IVA_RECAL_ST_SHIFT 2 223#define OMAP4430_DPLL_IVA_RECAL_ST_SHIFT 2
199#define OMAP4430_DPLL_IVA_RECAL_ST_MASK BITFIELD(2, 2) 224#define OMAP4430_DPLL_IVA_RECAL_ST_MASK (1 << 2)
200 225
201/* Used by PRM_IRQENABLE_MPU */ 226/* Used by PRM_IRQENABLE_MPU */
202#define OMAP4430_DPLL_MPU_RECAL_EN_SHIFT 1 227#define OMAP4430_DPLL_MPU_RECAL_EN_SHIFT 1
203#define OMAP4430_DPLL_MPU_RECAL_EN_MASK BITFIELD(1, 1) 228#define OMAP4430_DPLL_MPU_RECAL_EN_MASK (1 << 1)
204 229
205/* Used by PRM_IRQSTATUS_MPU */ 230/* Used by PRM_IRQSTATUS_MPU */
206#define OMAP4430_DPLL_MPU_RECAL_ST_SHIFT 1 231#define OMAP4430_DPLL_MPU_RECAL_ST_SHIFT 1
207#define OMAP4430_DPLL_MPU_RECAL_ST_MASK BITFIELD(1, 1) 232#define OMAP4430_DPLL_MPU_RECAL_ST_MASK (1 << 1)
208 233
209/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 234/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
210#define OMAP4430_DPLL_PER_RECAL_EN_SHIFT 3 235#define OMAP4430_DPLL_PER_RECAL_EN_SHIFT 3
211#define OMAP4430_DPLL_PER_RECAL_EN_MASK BITFIELD(3, 3) 236#define OMAP4430_DPLL_PER_RECAL_EN_MASK (1 << 3)
212 237
213/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 238/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
214#define OMAP4430_DPLL_PER_RECAL_ST_SHIFT 3 239#define OMAP4430_DPLL_PER_RECAL_ST_SHIFT 3
215#define OMAP4430_DPLL_PER_RECAL_ST_MASK BITFIELD(3, 3) 240#define OMAP4430_DPLL_PER_RECAL_ST_MASK (1 << 3)
216 241
217/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 242/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
218#define OMAP4430_DPLL_UNIPRO_RECAL_EN_SHIFT 7 243#define OMAP4430_DPLL_UNIPRO_RECAL_EN_SHIFT 7
219#define OMAP4430_DPLL_UNIPRO_RECAL_EN_MASK BITFIELD(7, 7) 244#define OMAP4430_DPLL_UNIPRO_RECAL_EN_MASK (1 << 7)
220 245
221/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 246/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
222#define OMAP4430_DPLL_UNIPRO_RECAL_ST_SHIFT 7 247#define OMAP4430_DPLL_UNIPRO_RECAL_ST_SHIFT 7
223#define OMAP4430_DPLL_UNIPRO_RECAL_ST_MASK BITFIELD(7, 7) 248#define OMAP4430_DPLL_UNIPRO_RECAL_ST_MASK (1 << 7)
224
225/* Used by PRM_IRQENABLE_MPU */
226#define OMAP4430_DPLL_USB_RECAL_EN_SHIFT 5
227#define OMAP4430_DPLL_USB_RECAL_EN_MASK BITFIELD(5, 5)
228
229/* Used by PRM_IRQSTATUS_MPU */
230#define OMAP4430_DPLL_USB_RECAL_ST_SHIFT 5
231#define OMAP4430_DPLL_USB_RECAL_ST_MASK BITFIELD(5, 5)
232 249
233/* Used by PM_DSS_PWRSTCTRL */ 250/* Used by PM_DSS_PWRSTCTRL */
234#define OMAP4430_DSS_MEM_ONSTATE_SHIFT 16 251#define OMAP4430_DSS_MEM_ONSTATE_SHIFT 16
235#define OMAP4430_DSS_MEM_ONSTATE_MASK BITFIELD(16, 17) 252#define OMAP4430_DSS_MEM_ONSTATE_MASK (0x3 << 16)
236 253
237/* Used by PM_DSS_PWRSTCTRL */ 254/* Used by PM_DSS_PWRSTCTRL */
238#define OMAP4430_DSS_MEM_RETSTATE_SHIFT 8 255#define OMAP4430_DSS_MEM_RETSTATE_SHIFT 8
239#define OMAP4430_DSS_MEM_RETSTATE_MASK BITFIELD(8, 8) 256#define OMAP4430_DSS_MEM_RETSTATE_MASK (1 << 8)
240 257
241/* Used by PM_DSS_PWRSTST */ 258/* Used by PM_DSS_PWRSTST */
242#define OMAP4430_DSS_MEM_STATEST_SHIFT 4 259#define OMAP4430_DSS_MEM_STATEST_SHIFT 4
243#define OMAP4430_DSS_MEM_STATEST_MASK BITFIELD(4, 5) 260#define OMAP4430_DSS_MEM_STATEST_MASK (0x3 << 4)
244 261
245/* Used by PM_CORE_PWRSTCTRL */ 262/* Used by PM_CORE_PWRSTCTRL */
246#define OMAP4430_DUCATI_L2RAM_ONSTATE_SHIFT 20 263#define OMAP4430_DUCATI_L2RAM_ONSTATE_SHIFT 20
247#define OMAP4430_DUCATI_L2RAM_ONSTATE_MASK BITFIELD(20, 21) 264#define OMAP4430_DUCATI_L2RAM_ONSTATE_MASK (0x3 << 20)
248 265
249/* Used by PM_CORE_PWRSTCTRL */ 266/* Used by PM_CORE_PWRSTCTRL */
250#define OMAP4430_DUCATI_L2RAM_RETSTATE_SHIFT 10 267#define OMAP4430_DUCATI_L2RAM_RETSTATE_SHIFT 10
251#define OMAP4430_DUCATI_L2RAM_RETSTATE_MASK BITFIELD(10, 10) 268#define OMAP4430_DUCATI_L2RAM_RETSTATE_MASK (1 << 10)
252 269
253/* Used by PM_CORE_PWRSTST */ 270/* Used by PM_CORE_PWRSTST */
254#define OMAP4430_DUCATI_L2RAM_STATEST_SHIFT 8 271#define OMAP4430_DUCATI_L2RAM_STATEST_SHIFT 8
255#define OMAP4430_DUCATI_L2RAM_STATEST_MASK BITFIELD(8, 9) 272#define OMAP4430_DUCATI_L2RAM_STATEST_MASK (0x3 << 8)
256 273
257/* Used by PM_CORE_PWRSTCTRL */ 274/* Used by PM_CORE_PWRSTCTRL */
258#define OMAP4430_DUCATI_UNICACHE_ONSTATE_SHIFT 22 275#define OMAP4430_DUCATI_UNICACHE_ONSTATE_SHIFT 22
259#define OMAP4430_DUCATI_UNICACHE_ONSTATE_MASK BITFIELD(22, 23) 276#define OMAP4430_DUCATI_UNICACHE_ONSTATE_MASK (0x3 << 22)
260 277
261/* Used by PM_CORE_PWRSTCTRL */ 278/* Used by PM_CORE_PWRSTCTRL */
262#define OMAP4430_DUCATI_UNICACHE_RETSTATE_SHIFT 11 279#define OMAP4430_DUCATI_UNICACHE_RETSTATE_SHIFT 11
263#define OMAP4430_DUCATI_UNICACHE_RETSTATE_MASK BITFIELD(11, 11) 280#define OMAP4430_DUCATI_UNICACHE_RETSTATE_MASK (1 << 11)
264 281
265/* Used by PM_CORE_PWRSTST */ 282/* Used by PM_CORE_PWRSTST */
266#define OMAP4430_DUCATI_UNICACHE_STATEST_SHIFT 10 283#define OMAP4430_DUCATI_UNICACHE_STATEST_SHIFT 10
267#define OMAP4430_DUCATI_UNICACHE_STATEST_MASK BITFIELD(10, 11) 284#define OMAP4430_DUCATI_UNICACHE_STATEST_MASK (0x3 << 10)
268 285
269/* Used by RM_MPU_RSTST */ 286/* Used by RM_MPU_RSTST */
270#define OMAP4430_EMULATION_RST_SHIFT 0 287#define OMAP4430_EMULATION_RST_SHIFT 0
271#define OMAP4430_EMULATION_RST_MASK BITFIELD(0, 0) 288#define OMAP4430_EMULATION_RST_MASK (1 << 0)
272 289
273/* Used by RM_DUCATI_RSTST */ 290/* Used by RM_DUCATI_RSTST */
274#define OMAP4430_EMULATION_RST1ST_SHIFT 3 291#define OMAP4430_EMULATION_RST1ST_SHIFT 3
275#define OMAP4430_EMULATION_RST1ST_MASK BITFIELD(3, 3) 292#define OMAP4430_EMULATION_RST1ST_MASK (1 << 3)
276 293
277/* Used by RM_DUCATI_RSTST */ 294/* Used by RM_DUCATI_RSTST */
278#define OMAP4430_EMULATION_RST2ST_SHIFT 4 295#define OMAP4430_EMULATION_RST2ST_SHIFT 4
279#define OMAP4430_EMULATION_RST2ST_MASK BITFIELD(4, 4) 296#define OMAP4430_EMULATION_RST2ST_MASK (1 << 4)
280 297
281/* Used by RM_IVAHD_RSTST */ 298/* Used by RM_IVAHD_RSTST */
282#define OMAP4430_EMULATION_SEQ1_RST1ST_SHIFT 3 299#define OMAP4430_EMULATION_SEQ1_RST1ST_SHIFT 3
283#define OMAP4430_EMULATION_SEQ1_RST1ST_MASK BITFIELD(3, 3) 300#define OMAP4430_EMULATION_SEQ1_RST1ST_MASK (1 << 3)
284 301
285/* Used by RM_IVAHD_RSTST */ 302/* Used by RM_IVAHD_RSTST */
286#define OMAP4430_EMULATION_SEQ2_RST2ST_SHIFT 4 303#define OMAP4430_EMULATION_SEQ2_RST2ST_SHIFT 4
287#define OMAP4430_EMULATION_SEQ2_RST2ST_MASK BITFIELD(4, 4) 304#define OMAP4430_EMULATION_SEQ2_RST2ST_MASK (1 << 4)
288 305
289/* Used by PM_EMU_PWRSTCTRL */ 306/* Used by PM_EMU_PWRSTCTRL */
290#define OMAP4430_EMU_BANK_ONSTATE_SHIFT 16 307#define OMAP4430_EMU_BANK_ONSTATE_SHIFT 16
291#define OMAP4430_EMU_BANK_ONSTATE_MASK BITFIELD(16, 17) 308#define OMAP4430_EMU_BANK_ONSTATE_MASK (0x3 << 16)
292 309
293/* Used by PM_EMU_PWRSTST */ 310/* Used by PM_EMU_PWRSTST */
294#define OMAP4430_EMU_BANK_STATEST_SHIFT 4 311#define OMAP4430_EMU_BANK_STATEST_SHIFT 4
295#define OMAP4430_EMU_BANK_STATEST_MASK BITFIELD(4, 5) 312#define OMAP4430_EMU_BANK_STATEST_MASK (0x3 << 4)
296
297/*
298 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
299 * PRM_LDO_SRAM_MPU_SETUP, PRM_SRAM_WKUP_SETUP
300 */
301#define OMAP4430_ENABLE_RTA_EXPORT_SHIFT 0
302#define OMAP4430_ENABLE_RTA_EXPORT_MASK BITFIELD(0, 0)
303 313
304/* 314/*
305 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP, 315 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
306 * PRM_LDO_SRAM_MPU_SETUP 316 * PRM_LDO_SRAM_MPU_SETUP
307 */ 317 */
308#define OMAP4430_ENFUNC1_SHIFT 3 318#define OMAP4430_ENFUNC1_EXPORT_SHIFT 3
309#define OMAP4430_ENFUNC1_MASK BITFIELD(3, 3) 319#define OMAP4430_ENFUNC1_EXPORT_MASK (1 << 3)
310 320
311/* 321/*
312 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP, 322 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
313 * PRM_LDO_SRAM_MPU_SETUP 323 * PRM_LDO_SRAM_MPU_SETUP
314 */ 324 */
315#define OMAP4430_ENFUNC3_SHIFT 5 325#define OMAP4430_ENFUNC3_EXPORT_SHIFT 5
316#define OMAP4430_ENFUNC3_MASK BITFIELD(5, 5) 326#define OMAP4430_ENFUNC3_EXPORT_MASK (1 << 5)
317 327
318/* 328/*
319 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP, 329 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
320 * PRM_LDO_SRAM_MPU_SETUP 330 * PRM_LDO_SRAM_MPU_SETUP
321 */ 331 */
322#define OMAP4430_ENFUNC4_SHIFT 6 332#define OMAP4430_ENFUNC4_SHIFT 6
323#define OMAP4430_ENFUNC4_MASK BITFIELD(6, 6) 333#define OMAP4430_ENFUNC4_MASK (1 << 6)
324 334
325/* 335/*
326 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP, 336 * Used by PRM_LDO_SRAM_CORE_SETUP, PRM_LDO_SRAM_IVA_SETUP,
327 * PRM_LDO_SRAM_MPU_SETUP 337 * PRM_LDO_SRAM_MPU_SETUP
328 */ 338 */
329#define OMAP4430_ENFUNC5_SHIFT 7 339#define OMAP4430_ENFUNC5_SHIFT 7
330#define OMAP4430_ENFUNC5_MASK BITFIELD(7, 7) 340#define OMAP4430_ENFUNC5_MASK (1 << 7)
331 341
332/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */ 342/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */
333#define OMAP4430_ERRORGAIN_SHIFT 16 343#define OMAP4430_ERRORGAIN_SHIFT 16
334#define OMAP4430_ERRORGAIN_MASK BITFIELD(16, 23) 344#define OMAP4430_ERRORGAIN_MASK (0xff << 16)
335 345
336/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */ 346/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */
337#define OMAP4430_ERROROFFSET_SHIFT 24 347#define OMAP4430_ERROROFFSET_SHIFT 24
338#define OMAP4430_ERROROFFSET_MASK BITFIELD(24, 31) 348#define OMAP4430_ERROROFFSET_MASK (0xff << 24)
339 349
340/* Used by PRM_RSTST */ 350/* Used by PRM_RSTST */
341#define OMAP4430_EXTERNAL_WARM_RST_SHIFT 5 351#define OMAP4430_EXTERNAL_WARM_RST_SHIFT 5
342#define OMAP4430_EXTERNAL_WARM_RST_MASK BITFIELD(5, 5) 352#define OMAP4430_EXTERNAL_WARM_RST_MASK (1 << 5)
343 353
344/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */ 354/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */
345#define OMAP4430_FORCEUPDATE_SHIFT 1 355#define OMAP4430_FORCEUPDATE_SHIFT 1
346#define OMAP4430_FORCEUPDATE_MASK BITFIELD(1, 1) 356#define OMAP4430_FORCEUPDATE_MASK (1 << 1)
347 357
348/* Used by PRM_VP_CORE_VOLTAGE, PRM_VP_IVA_VOLTAGE, PRM_VP_MPU_VOLTAGE */ 358/* Used by PRM_VP_CORE_VOLTAGE, PRM_VP_IVA_VOLTAGE, PRM_VP_MPU_VOLTAGE */
349#define OMAP4430_FORCEUPDATEWAIT_SHIFT 8 359#define OMAP4430_FORCEUPDATEWAIT_SHIFT 8
350#define OMAP4430_FORCEUPDATEWAIT_MASK BITFIELD(8, 31) 360#define OMAP4430_FORCEUPDATEWAIT_MASK (0xffffff << 8)
351 361
352/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_TESLA */ 362/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_TESLA */
353#define OMAP4430_FORCEWKUP_EN_SHIFT 10 363#define OMAP4430_FORCEWKUP_EN_SHIFT 10
354#define OMAP4430_FORCEWKUP_EN_MASK BITFIELD(10, 10) 364#define OMAP4430_FORCEWKUP_EN_MASK (1 << 10)
355 365
356/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_TESLA */ 366/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_TESLA */
357#define OMAP4430_FORCEWKUP_ST_SHIFT 10 367#define OMAP4430_FORCEWKUP_ST_SHIFT 10
358#define OMAP4430_FORCEWKUP_ST_MASK BITFIELD(10, 10) 368#define OMAP4430_FORCEWKUP_ST_MASK (1 << 10)
369
370/* Used by REVISION_PRM */
371#define OMAP4430_FUNC_SHIFT 16
372#define OMAP4430_FUNC_MASK (0xfff << 16)
359 373
360/* Used by PM_GFX_PWRSTCTRL */ 374/* Used by PM_GFX_PWRSTCTRL */
361#define OMAP4430_GFX_MEM_ONSTATE_SHIFT 16 375#define OMAP4430_GFX_MEM_ONSTATE_SHIFT 16
362#define OMAP4430_GFX_MEM_ONSTATE_MASK BITFIELD(16, 17) 376#define OMAP4430_GFX_MEM_ONSTATE_MASK (0x3 << 16)
363 377
364/* Used by PM_GFX_PWRSTST */ 378/* Used by PM_GFX_PWRSTST */
365#define OMAP4430_GFX_MEM_STATEST_SHIFT 4 379#define OMAP4430_GFX_MEM_STATEST_SHIFT 4
366#define OMAP4430_GFX_MEM_STATEST_MASK BITFIELD(4, 5) 380#define OMAP4430_GFX_MEM_STATEST_MASK (0x3 << 4)
367 381
368/* Used by PRM_RSTST */ 382/* Used by PRM_RSTST */
369#define OMAP4430_GLOBAL_COLD_RST_SHIFT 0 383#define OMAP4430_GLOBAL_COLD_RST_SHIFT 0
370#define OMAP4430_GLOBAL_COLD_RST_MASK BITFIELD(0, 0) 384#define OMAP4430_GLOBAL_COLD_RST_MASK (1 << 0)
371 385
372/* Used by PRM_RSTST */ 386/* Used by PRM_RSTST */
373#define OMAP4430_GLOBAL_WARM_SW_RST_SHIFT 1 387#define OMAP4430_GLOBAL_WARM_SW_RST_SHIFT 1
374#define OMAP4430_GLOBAL_WARM_SW_RST_MASK BITFIELD(1, 1) 388#define OMAP4430_GLOBAL_WARM_SW_RST_MASK (1 << 1)
375 389
376/* Used by PRM_IO_PMCTRL */ 390/* Used by PRM_IO_PMCTRL */
377#define OMAP4430_GLOBAL_WUEN_SHIFT 16 391#define OMAP4430_GLOBAL_WUEN_SHIFT 16
378#define OMAP4430_GLOBAL_WUEN_MASK BITFIELD(16, 16) 392#define OMAP4430_GLOBAL_WUEN_MASK (1 << 16)
379 393
380/* Used by PRM_VC_CFG_I2C_MODE */ 394/* Used by PRM_VC_CFG_I2C_MODE */
381#define OMAP4430_HSMCODE_SHIFT 0 395#define OMAP4430_HSMCODE_SHIFT 0
382#define OMAP4430_HSMCODE_MASK BITFIELD(0, 2) 396#define OMAP4430_HSMCODE_MASK (0x7 << 0)
383 397
384/* Used by PRM_VC_CFG_I2C_MODE */ 398/* Used by PRM_VC_CFG_I2C_MODE */
385#define OMAP4430_HSMODEEN_SHIFT 3 399#define OMAP4430_HSMODEEN_SHIFT 3
386#define OMAP4430_HSMODEEN_MASK BITFIELD(3, 3) 400#define OMAP4430_HSMODEEN_MASK (1 << 3)
387 401
388/* Used by PRM_VC_CFG_I2C_CLK */ 402/* Used by PRM_VC_CFG_I2C_CLK */
389#define OMAP4430_HSSCLH_SHIFT 16 403#define OMAP4430_HSSCLH_SHIFT 16
390#define OMAP4430_HSSCLH_MASK BITFIELD(16, 23) 404#define OMAP4430_HSSCLH_MASK (0xff << 16)
391 405
392/* Used by PRM_VC_CFG_I2C_CLK */ 406/* Used by PRM_VC_CFG_I2C_CLK */
393#define OMAP4430_HSSCLL_SHIFT 24 407#define OMAP4430_HSSCLL_SHIFT 24
394#define OMAP4430_HSSCLL_MASK BITFIELD(24, 31) 408#define OMAP4430_HSSCLL_MASK (0xff << 24)
395 409
396/* Used by PM_IVAHD_PWRSTCTRL */ 410/* Used by PM_IVAHD_PWRSTCTRL */
397#define OMAP4430_HWA_MEM_ONSTATE_SHIFT 16 411#define OMAP4430_HWA_MEM_ONSTATE_SHIFT 16
398#define OMAP4430_HWA_MEM_ONSTATE_MASK BITFIELD(16, 17) 412#define OMAP4430_HWA_MEM_ONSTATE_MASK (0x3 << 16)
399 413
400/* Used by PM_IVAHD_PWRSTCTRL */ 414/* Used by PM_IVAHD_PWRSTCTRL */
401#define OMAP4430_HWA_MEM_RETSTATE_SHIFT 8 415#define OMAP4430_HWA_MEM_RETSTATE_SHIFT 8
402#define OMAP4430_HWA_MEM_RETSTATE_MASK BITFIELD(8, 8) 416#define OMAP4430_HWA_MEM_RETSTATE_MASK (1 << 8)
403 417
404/* Used by PM_IVAHD_PWRSTST */ 418/* Used by PM_IVAHD_PWRSTST */
405#define OMAP4430_HWA_MEM_STATEST_SHIFT 4 419#define OMAP4430_HWA_MEM_STATEST_SHIFT 4
406#define OMAP4430_HWA_MEM_STATEST_MASK BITFIELD(4, 5) 420#define OMAP4430_HWA_MEM_STATEST_MASK (0x3 << 4)
407 421
408/* Used by RM_MPU_RSTST */ 422/* Used by RM_MPU_RSTST */
409#define OMAP4430_ICECRUSHER_MPU_RST_SHIFT 1 423#define OMAP4430_ICECRUSHER_MPU_RST_SHIFT 1
410#define OMAP4430_ICECRUSHER_MPU_RST_MASK BITFIELD(1, 1) 424#define OMAP4430_ICECRUSHER_MPU_RST_MASK (1 << 1)
411 425
412/* Used by RM_DUCATI_RSTST */ 426/* Used by RM_DUCATI_RSTST */
413#define OMAP4430_ICECRUSHER_RST1ST_SHIFT 5 427#define OMAP4430_ICECRUSHER_RST1ST_SHIFT 5
414#define OMAP4430_ICECRUSHER_RST1ST_MASK BITFIELD(5, 5) 428#define OMAP4430_ICECRUSHER_RST1ST_MASK (1 << 5)
415 429
416/* Used by RM_DUCATI_RSTST */ 430/* Used by RM_DUCATI_RSTST */
417#define OMAP4430_ICECRUSHER_RST2ST_SHIFT 6 431#define OMAP4430_ICECRUSHER_RST2ST_SHIFT 6
418#define OMAP4430_ICECRUSHER_RST2ST_MASK BITFIELD(6, 6) 432#define OMAP4430_ICECRUSHER_RST2ST_MASK (1 << 6)
419 433
420/* Used by RM_IVAHD_RSTST */ 434/* Used by RM_IVAHD_RSTST */
421#define OMAP4430_ICECRUSHER_SEQ1_RST1ST_SHIFT 5 435#define OMAP4430_ICECRUSHER_SEQ1_RST1ST_SHIFT 5
422#define OMAP4430_ICECRUSHER_SEQ1_RST1ST_MASK BITFIELD(5, 5) 436#define OMAP4430_ICECRUSHER_SEQ1_RST1ST_MASK (1 << 5)
423 437
424/* Used by RM_IVAHD_RSTST */ 438/* Used by RM_IVAHD_RSTST */
425#define OMAP4430_ICECRUSHER_SEQ2_RST2ST_SHIFT 6 439#define OMAP4430_ICECRUSHER_SEQ2_RST2ST_SHIFT 6
426#define OMAP4430_ICECRUSHER_SEQ2_RST2ST_MASK BITFIELD(6, 6) 440#define OMAP4430_ICECRUSHER_SEQ2_RST2ST_MASK (1 << 6)
427 441
428/* Used by PRM_RSTST */ 442/* Used by PRM_RSTST */
429#define OMAP4430_ICEPICK_RST_SHIFT 9 443#define OMAP4430_ICEPICK_RST_SHIFT 9
430#define OMAP4430_ICEPICK_RST_MASK BITFIELD(9, 9) 444#define OMAP4430_ICEPICK_RST_MASK (1 << 9)
431 445
432/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */ 446/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */
433#define OMAP4430_INITVDD_SHIFT 2 447#define OMAP4430_INITVDD_SHIFT 2
434#define OMAP4430_INITVDD_MASK BITFIELD(2, 2) 448#define OMAP4430_INITVDD_MASK (1 << 2)
435 449
436/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */ 450/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */
437#define OMAP4430_INITVOLTAGE_SHIFT 8 451#define OMAP4430_INITVOLTAGE_SHIFT 8
438#define OMAP4430_INITVOLTAGE_MASK BITFIELD(8, 15) 452#define OMAP4430_INITVOLTAGE_MASK (0xff << 8)
439 453
440/* 454/*
441 * Used by PM_EMU_PWRSTST, PM_CORE_PWRSTST, PM_CAM_PWRSTST, PM_L3INIT_PWRSTST, 455 * Used by PM_ABE_PWRSTST, PM_CAM_PWRSTST, PM_CEFUSE_PWRSTST, PM_CORE_PWRSTST,
442 * PM_ABE_PWRSTST, PM_GFX_PWRSTST, PM_MPU_PWRSTST, PM_CEFUSE_PWRSTST, 456 * PM_DSS_PWRSTST, PM_EMU_PWRSTST, PM_GFX_PWRSTST, PM_IVAHD_PWRSTST,
443 * PM_DSS_PWRSTST, PM_L4PER_PWRSTST, PM_TESLA_PWRSTST, PM_IVAHD_PWRSTST 457 * PM_L3INIT_PWRSTST, PM_L4PER_PWRSTST, PM_MPU_PWRSTST, PM_TESLA_PWRSTST
444 */ 458 */
445#define OMAP4430_INTRANSITION_SHIFT 20 459#define OMAP4430_INTRANSITION_SHIFT 20
446#define OMAP4430_INTRANSITION_MASK BITFIELD(20, 20) 460#define OMAP4430_INTRANSITION_MASK (1 << 20)
447 461
448/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 462/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
449#define OMAP4430_IO_EN_SHIFT 9 463#define OMAP4430_IO_EN_SHIFT 9
450#define OMAP4430_IO_EN_MASK BITFIELD(9, 9) 464#define OMAP4430_IO_EN_MASK (1 << 9)
451 465
452/* Used by PRM_IO_PMCTRL */ 466/* Used by PRM_IO_PMCTRL */
453#define OMAP4430_IO_ON_STATUS_SHIFT 5 467#define OMAP4430_IO_ON_STATUS_SHIFT 5
454#define OMAP4430_IO_ON_STATUS_MASK BITFIELD(5, 5) 468#define OMAP4430_IO_ON_STATUS_MASK (1 << 5)
455 469
456/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 470/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
457#define OMAP4430_IO_ST_SHIFT 9 471#define OMAP4430_IO_ST_SHIFT 9
458#define OMAP4430_IO_ST_MASK BITFIELD(9, 9) 472#define OMAP4430_IO_ST_MASK (1 << 9)
459 473
460/* Used by PRM_IO_PMCTRL */ 474/* Used by PRM_IO_PMCTRL */
461#define OMAP4430_ISOCLK_OVERRIDE_SHIFT 0 475#define OMAP4430_ISOCLK_OVERRIDE_SHIFT 0
462#define OMAP4430_ISOCLK_OVERRIDE_MASK BITFIELD(0, 0) 476#define OMAP4430_ISOCLK_OVERRIDE_MASK (1 << 0)
463 477
464/* Used by PRM_IO_PMCTRL */ 478/* Used by PRM_IO_PMCTRL */
465#define OMAP4430_ISOCLK_STATUS_SHIFT 1 479#define OMAP4430_ISOCLK_STATUS_SHIFT 1
466#define OMAP4430_ISOCLK_STATUS_MASK BITFIELD(1, 1) 480#define OMAP4430_ISOCLK_STATUS_MASK (1 << 1)
467 481
468/* Used by PRM_IO_PMCTRL */ 482/* Used by PRM_IO_PMCTRL */
469#define OMAP4430_ISOOVR_EXTEND_SHIFT 4 483#define OMAP4430_ISOOVR_EXTEND_SHIFT 4
470#define OMAP4430_ISOOVR_EXTEND_MASK BITFIELD(4, 4) 484#define OMAP4430_ISOOVR_EXTEND_MASK (1 << 4)
471 485
472/* Used by PRM_IO_COUNT */ 486/* Used by PRM_IO_COUNT */
473#define OMAP4430_ISO_2_ON_TIME_SHIFT 0 487#define OMAP4430_ISO_2_ON_TIME_SHIFT 0
474#define OMAP4430_ISO_2_ON_TIME_MASK BITFIELD(0, 7) 488#define OMAP4430_ISO_2_ON_TIME_MASK (0xff << 0)
475 489
476/* Used by PM_L3INIT_PWRSTCTRL */ 490/* Used by PM_L3INIT_PWRSTCTRL */
477#define OMAP4430_L3INIT_BANK1_ONSTATE_SHIFT 16 491#define OMAP4430_L3INIT_BANK1_ONSTATE_SHIFT 16
478#define OMAP4430_L3INIT_BANK1_ONSTATE_MASK BITFIELD(16, 17) 492#define OMAP4430_L3INIT_BANK1_ONSTATE_MASK (0x3 << 16)
479 493
480/* Used by PM_L3INIT_PWRSTCTRL */ 494/* Used by PM_L3INIT_PWRSTCTRL */
481#define OMAP4430_L3INIT_BANK1_RETSTATE_SHIFT 8 495#define OMAP4430_L3INIT_BANK1_RETSTATE_SHIFT 8
482#define OMAP4430_L3INIT_BANK1_RETSTATE_MASK BITFIELD(8, 8) 496#define OMAP4430_L3INIT_BANK1_RETSTATE_MASK (1 << 8)
483 497
484/* Used by PM_L3INIT_PWRSTST */ 498/* Used by PM_L3INIT_PWRSTST */
485#define OMAP4430_L3INIT_BANK1_STATEST_SHIFT 4 499#define OMAP4430_L3INIT_BANK1_STATEST_SHIFT 4
486#define OMAP4430_L3INIT_BANK1_STATEST_MASK BITFIELD(4, 5) 500#define OMAP4430_L3INIT_BANK1_STATEST_MASK (0x3 << 4)
501
502/*
503 * Used by PM_ABE_PWRSTST, PM_CORE_PWRSTST, PM_IVAHD_PWRSTST,
504 * PM_L3INIT_PWRSTST, PM_L4PER_PWRSTST, PM_MPU_PWRSTST, PM_TESLA_PWRSTST
505 */
506#define OMAP4430_LASTPOWERSTATEENTERED_SHIFT 24
507#define OMAP4430_LASTPOWERSTATEENTERED_MASK (0x3 << 24)
487 508
488/* 509/*
489 * Used by PM_CORE_PWRSTCTRL, PM_L3INIT_PWRSTCTRL, PM_ABE_PWRSTCTRL, 510 * Used by PM_ABE_PWRSTCTRL, PM_CORE_PWRSTCTRL, PM_DSS_PWRSTCTRL,
490 * PM_MPU_PWRSTCTRL, PM_DSS_PWRSTCTRL, PM_L4PER_PWRSTCTRL, PM_TESLA_PWRSTCTRL, 511 * PM_IVAHD_PWRSTCTRL, PM_L3INIT_PWRSTCTRL, PM_L4PER_PWRSTCTRL,
491 * PM_IVAHD_PWRSTCTRL 512 * PM_MPU_PWRSTCTRL, PM_TESLA_PWRSTCTRL
492 */ 513 */
493#define OMAP4430_LOGICRETSTATE_SHIFT 2 514#define OMAP4430_LOGICRETSTATE_SHIFT 2
494#define OMAP4430_LOGICRETSTATE_MASK BITFIELD(2, 2) 515#define OMAP4430_LOGICRETSTATE_MASK (1 << 2)
495 516
496/* 517/*
497 * Used by PM_EMU_PWRSTST, PM_CORE_PWRSTST, PM_CAM_PWRSTST, PM_L3INIT_PWRSTST, 518 * Used by PM_ABE_PWRSTST, PM_CAM_PWRSTST, PM_CEFUSE_PWRSTST, PM_CORE_PWRSTST,
498 * PM_ABE_PWRSTST, PM_GFX_PWRSTST, PM_MPU_PWRSTST, PM_CEFUSE_PWRSTST, 519 * PM_DSS_PWRSTST, PM_EMU_PWRSTST, PM_GFX_PWRSTST, PM_IVAHD_PWRSTST,
499 * PM_DSS_PWRSTST, PM_L4PER_PWRSTST, PM_TESLA_PWRSTST, PM_IVAHD_PWRSTST 520 * PM_L3INIT_PWRSTST, PM_L4PER_PWRSTST, PM_MPU_PWRSTST, PM_TESLA_PWRSTST
500 */ 521 */
501#define OMAP4430_LOGICSTATEST_SHIFT 2 522#define OMAP4430_LOGICSTATEST_SHIFT 2
502#define OMAP4430_LOGICSTATEST_MASK BITFIELD(2, 2) 523#define OMAP4430_LOGICSTATEST_MASK (1 << 2)
503 524
504/* 525/*
505 * Used by RM_WKUP_GPIO1_CONTEXT, RM_WKUP_KEYBOARD_CONTEXT, 526 * Used by RM_ABE_AESS_CONTEXT, RM_ABE_DMIC_CONTEXT, RM_ABE_MCASP_CONTEXT,
506 * RM_WKUP_L4WKUP_CONTEXT, RM_WKUP_RTC_CONTEXT, RM_WKUP_SARRAM_CONTEXT,
507 * RM_WKUP_SYNCTIMER_CONTEXT, RM_WKUP_TIMER12_CONTEXT, RM_WKUP_TIMER1_CONTEXT,
508 * RM_WKUP_USIM_CONTEXT, RM_WKUP_WDT1_CONTEXT, RM_WKUP_WDT2_CONTEXT,
509 * RM_EMU_DEBUGSS_CONTEXT, RM_D2D_SAD2D_CONTEXT, RM_D2D_SAD2D_FW_CONTEXT,
510 * RM_DUCATI_DUCATI_CONTEXT, RM_L3INSTR_L3_3_CONTEXT,
511 * RM_L3INSTR_L3_INSTR_CONTEXT, RM_L3INSTR_OCP_WP1_CONTEXT,
512 * RM_L3_1_L3_1_CONTEXT, RM_L3_2_L3_2_CONTEXT, RM_L3_2_OCMC_RAM_CONTEXT,
513 * RM_L4CFG_L4_CFG_CONTEXT, RM_L4CFG_SAR_ROM_CONTEXT, RM_MEMIF_DLL_CONTEXT,
514 * RM_MEMIF_DLL_H_CONTEXT, RM_MEMIF_DMM_CONTEXT, RM_MEMIF_EMIF_FW_CONTEXT,
515 * RM_CAM_FDIF_CONTEXT, RM_CAM_ISS_CONTEXT, RM_L3INIT_CCPTX_CONTEXT,
516 * RM_L3INIT_EMAC_CONTEXT, RM_L3INIT_P1500_CONTEXT, RM_L3INIT_PCIESS_CONTEXT,
517 * RM_L3INIT_SATA_CONTEXT, RM_L3INIT_TPPSS_CONTEXT, RM_L3INIT_UNIPRO1_CONTEXT,
518 * RM_L3INIT_USBPHYOCP2SCP_CONTEXT, RM_L3INIT_XHPI_CONTEXT,
519 * RM_ABE_AESS_CONTEXT, RM_ABE_DMIC_CONTEXT, RM_ABE_MCASP_CONTEXT,
520 * RM_ABE_MCBSP1_CONTEXT, RM_ABE_MCBSP2_CONTEXT, RM_ABE_MCBSP3_CONTEXT, 527 * RM_ABE_MCBSP1_CONTEXT, RM_ABE_MCBSP2_CONTEXT, RM_ABE_MCBSP3_CONTEXT,
521 * RM_ABE_PDM_CONTEXT, RM_ABE_SLIMBUS_CONTEXT, RM_ABE_TIMER5_CONTEXT, 528 * RM_ABE_PDM_CONTEXT, RM_ABE_SLIMBUS_CONTEXT, RM_ABE_TIMER5_CONTEXT,
522 * RM_ABE_TIMER6_CONTEXT, RM_ABE_TIMER7_CONTEXT, RM_ABE_TIMER8_CONTEXT, 529 * RM_ABE_TIMER6_CONTEXT, RM_ABE_TIMER7_CONTEXT, RM_ABE_TIMER8_CONTEXT,
523 * RM_ABE_WDT3_CONTEXT, RM_GFX_GFX_CONTEXT, RM_MPU_MPU_CONTEXT, 530 * RM_ABE_WDT3_CONTEXT, RM_ALWON_MDMINTC_CONTEXT, RM_ALWON_SR_CORE_CONTEXT,
524 * RM_CEFUSE_CEFUSE_CONTEXT, RM_ALWON_MDMINTC_CONTEXT, 531 * RM_ALWON_SR_IVA_CONTEXT, RM_ALWON_SR_MPU_CONTEXT, RM_CAM_FDIF_CONTEXT,
525 * RM_ALWON_SR_CORE_CONTEXT, RM_ALWON_SR_IVA_CONTEXT, RM_ALWON_SR_MPU_CONTEXT, 532 * RM_CAM_ISS_CONTEXT, RM_CEFUSE_CEFUSE_CONTEXT, RM_D2D_SAD2D_CONTEXT,
526 * RM_DSS_DEISS_CONTEXT, RM_DSS_DSS_CONTEXT, RM_L4PER_ADC_CONTEXT, 533 * RM_D2D_SAD2D_FW_CONTEXT, RM_DSS_DEISS_CONTEXT, RM_DSS_DSS_CONTEXT,
527 * RM_L4PER_DMTIMER10_CONTEXT, RM_L4PER_DMTIMER11_CONTEXT, 534 * RM_DUCATI_DUCATI_CONTEXT, RM_EMU_DEBUGSS_CONTEXT, RM_GFX_GFX_CONTEXT,
528 * RM_L4PER_DMTIMER2_CONTEXT, RM_L4PER_DMTIMER3_CONTEXT, 535 * RM_IVAHD_IVAHD_CONTEXT, RM_IVAHD_SL2_CONTEXT, RM_L3INIT_CCPTX_CONTEXT,
529 * RM_L4PER_DMTIMER4_CONTEXT, RM_L4PER_DMTIMER9_CONTEXT, RM_L4PER_ELM_CONTEXT, 536 * RM_L3INIT_EMAC_CONTEXT, RM_L3INIT_P1500_CONTEXT, RM_L3INIT_PCIESS_CONTEXT,
530 * RM_L4PER_HDQ1W_CONTEXT, RM_L4PER_HECC1_CONTEXT, RM_L4PER_HECC2_CONTEXT, 537 * RM_L3INIT_SATA_CONTEXT, RM_L3INIT_TPPSS_CONTEXT, RM_L3INIT_UNIPRO1_CONTEXT,
531 * RM_L4PER_I2C2_CONTEXT, RM_L4PER_I2C3_CONTEXT, RM_L4PER_I2C4_CONTEXT, 538 * RM_L3INIT_USBPHYOCP2SCP_CONTEXT, RM_L3INIT_XHPI_CONTEXT,
532 * RM_L4PER_I2C5_CONTEXT, RM_L4PER_L4_PER_CONTEXT, RM_L4PER_MCASP2_CONTEXT, 539 * RM_L3INSTR_L3_3_CONTEXT, RM_L3INSTR_L3_INSTR_CONTEXT,
533 * RM_L4PER_MCASP3_CONTEXT, RM_L4PER_MCBSP4_CONTEXT, RM_L4PER_MCSPI1_CONTEXT, 540 * RM_L3INSTR_OCP_WP1_CONTEXT, RM_L3_1_L3_1_CONTEXT, RM_L3_2_L3_2_CONTEXT,
534 * RM_L4PER_MCSPI2_CONTEXT, RM_L4PER_MCSPI3_CONTEXT, RM_L4PER_MCSPI4_CONTEXT, 541 * RM_L3_2_OCMC_RAM_CONTEXT, RM_L4CFG_L4_CFG_CONTEXT, RM_L4CFG_SAR_ROM_CONTEXT,
535 * RM_L4PER_MGATE_CONTEXT, RM_L4PER_MMCSD3_CONTEXT, RM_L4PER_MMCSD4_CONTEXT, 542 * RM_L4PER_ADC_CONTEXT, RM_L4PER_DMTIMER10_CONTEXT,
536 * RM_L4PER_MMCSD5_CONTEXT, RM_L4PER_MSPROHG_CONTEXT, 543 * RM_L4PER_DMTIMER11_CONTEXT, RM_L4PER_DMTIMER2_CONTEXT,
537 * RM_L4PER_SLIMBUS2_CONTEXT, RM_L4SEC_PKAEIP29_CONTEXT, 544 * RM_L4PER_DMTIMER3_CONTEXT, RM_L4PER_DMTIMER4_CONTEXT,
538 * RM_TESLA_TESLA_CONTEXT, RM_IVAHD_IVAHD_CONTEXT, RM_IVAHD_SL2_CONTEXT 545 * RM_L4PER_DMTIMER9_CONTEXT, RM_L4PER_ELM_CONTEXT, RM_L4PER_HDQ1W_CONTEXT,
546 * RM_L4PER_HECC1_CONTEXT, RM_L4PER_HECC2_CONTEXT, RM_L4PER_I2C2_CONTEXT,
547 * RM_L4PER_I2C3_CONTEXT, RM_L4PER_I2C4_CONTEXT, RM_L4PER_I2C5_CONTEXT,
548 * RM_L4PER_L4_PER_CONTEXT, RM_L4PER_MCASP2_CONTEXT, RM_L4PER_MCASP3_CONTEXT,
549 * RM_L4PER_MCBSP4_CONTEXT, RM_L4PER_MCSPI1_CONTEXT, RM_L4PER_MCSPI2_CONTEXT,
550 * RM_L4PER_MCSPI3_CONTEXT, RM_L4PER_MCSPI4_CONTEXT, RM_L4PER_MGATE_CONTEXT,
551 * RM_L4PER_MMCSD3_CONTEXT, RM_L4PER_MMCSD4_CONTEXT, RM_L4PER_MMCSD5_CONTEXT,
552 * RM_L4PER_MSPROHG_CONTEXT, RM_L4PER_SLIMBUS2_CONTEXT,
553 * RM_L4SEC_PKAEIP29_CONTEXT, RM_MEMIF_DLL_CONTEXT, RM_MEMIF_DLL_H_CONTEXT,
554 * RM_MEMIF_DMM_CONTEXT, RM_MEMIF_EMIF_1_CONTEXT, RM_MEMIF_EMIF_2_CONTEXT,
555 * RM_MEMIF_EMIF_FW_CONTEXT, RM_MPU_MPU_CONTEXT, RM_TESLA_TESLA_CONTEXT,
556 * RM_WKUP_GPIO1_CONTEXT, RM_WKUP_KEYBOARD_CONTEXT, RM_WKUP_L4WKUP_CONTEXT,
557 * RM_WKUP_RTC_CONTEXT, RM_WKUP_SARRAM_CONTEXT, RM_WKUP_SYNCTIMER_CONTEXT,
558 * RM_WKUP_TIMER12_CONTEXT, RM_WKUP_TIMER1_CONTEXT, RM_WKUP_USIM_CONTEXT,
559 * RM_WKUP_WDT1_CONTEXT, RM_WKUP_WDT2_CONTEXT
539 */ 560 */
540#define OMAP4430_LOSTCONTEXT_DFF_SHIFT 0 561#define OMAP4430_LOSTCONTEXT_DFF_SHIFT 0
541#define OMAP4430_LOSTCONTEXT_DFF_MASK BITFIELD(0, 0) 562#define OMAP4430_LOSTCONTEXT_DFF_MASK (1 << 0)
542 563
543/* 564/*
544 * Used by RM_D2D_MODEM_ICR_CONTEXT, RM_D2D_SAD2D_CONTEXT, 565 * Used by RM_D2D_MODEM_ICR_CONTEXT, RM_D2D_SAD2D_CONTEXT,
545 * RM_D2D_SAD2D_FW_CONTEXT, RM_DUCATI_DUCATI_CONTEXT, RM_L3INSTR_L3_3_CONTEXT, 566 * RM_D2D_SAD2D_FW_CONTEXT, RM_DSS_DSS_CONTEXT, RM_DUCATI_DUCATI_CONTEXT,
567 * RM_L3INIT_HSI_CONTEXT, RM_L3INIT_MMC1_CONTEXT, RM_L3INIT_MMC2_CONTEXT,
568 * RM_L3INIT_MMC6_CONTEXT, RM_L3INIT_USB_HOST_CONTEXT,
569 * RM_L3INIT_USB_HOST_FS_CONTEXT, RM_L3INIT_USB_OTG_CONTEXT,
570 * RM_L3INIT_USB_TLL_CONTEXT, RM_L3INSTR_L3_3_CONTEXT,
546 * RM_L3INSTR_OCP_WP1_CONTEXT, RM_L3_1_L3_1_CONTEXT, RM_L3_2_GPMC_CONTEXT, 571 * RM_L3INSTR_OCP_WP1_CONTEXT, RM_L3_1_L3_1_CONTEXT, RM_L3_2_GPMC_CONTEXT,
547 * RM_L3_2_L3_2_CONTEXT, RM_L4CFG_HW_SEM_CONTEXT, RM_L4CFG_L4_CFG_CONTEXT, 572 * RM_L3_2_L3_2_CONTEXT, RM_L4CFG_HW_SEM_CONTEXT, RM_L4CFG_L4_CFG_CONTEXT,
548 * RM_L4CFG_MAILBOX_CONTEXT, RM_MEMIF_DMM_CONTEXT, RM_MEMIF_EMIF_1_CONTEXT, 573 * RM_L4CFG_MAILBOX_CONTEXT, RM_L4PER_GPIO2_CONTEXT, RM_L4PER_GPIO3_CONTEXT,
549 * RM_MEMIF_EMIF_2_CONTEXT, RM_MEMIF_EMIF_FW_CONTEXT, RM_MEMIF_EMIF_H1_CONTEXT, 574 * RM_L4PER_GPIO4_CONTEXT, RM_L4PER_GPIO5_CONTEXT, RM_L4PER_GPIO6_CONTEXT,
550 * RM_MEMIF_EMIF_H2_CONTEXT, RM_SDMA_SDMA_CONTEXT, RM_L3INIT_HSI_CONTEXT, 575 * RM_L4PER_I2C1_CONTEXT, RM_L4PER_L4_PER_CONTEXT, RM_L4PER_UART1_CONTEXT,
551 * RM_L3INIT_MMC1_CONTEXT, RM_L3INIT_MMC2_CONTEXT, RM_L3INIT_MMC6_CONTEXT, 576 * RM_L4PER_UART2_CONTEXT, RM_L4PER_UART3_CONTEXT, RM_L4PER_UART4_CONTEXT,
552 * RM_L3INIT_USB_HOST_CONTEXT, RM_L3INIT_USB_HOST_FS_CONTEXT, 577 * RM_L4SEC_AES1_CONTEXT, RM_L4SEC_AES2_CONTEXT, RM_L4SEC_CRYPTODMA_CONTEXT,
553 * RM_L3INIT_USB_OTG_CONTEXT, RM_L3INIT_USB_TLL_CONTEXT, RM_DSS_DSS_CONTEXT, 578 * RM_L4SEC_DES3DES_CONTEXT, RM_L4SEC_RNG_CONTEXT, RM_L4SEC_SHA2MD51_CONTEXT,
554 * RM_L4PER_GPIO2_CONTEXT, RM_L4PER_GPIO3_CONTEXT, RM_L4PER_GPIO4_CONTEXT, 579 * RM_MEMIF_DMM_CONTEXT, RM_MEMIF_EMIF_1_CONTEXT, RM_MEMIF_EMIF_2_CONTEXT,
555 * RM_L4PER_GPIO5_CONTEXT, RM_L4PER_GPIO6_CONTEXT, RM_L4PER_I2C1_CONTEXT, 580 * RM_MEMIF_EMIF_FW_CONTEXT, RM_MEMIF_EMIF_H1_CONTEXT,
556 * RM_L4PER_L4_PER_CONTEXT, RM_L4PER_UART1_CONTEXT, RM_L4PER_UART2_CONTEXT, 581 * RM_MEMIF_EMIF_H2_CONTEXT, RM_SDMA_SDMA_CONTEXT, RM_TESLA_TESLA_CONTEXT
557 * RM_L4PER_UART3_CONTEXT, RM_L4PER_UART4_CONTEXT, RM_L4SEC_AES1_CONTEXT,
558 * RM_L4SEC_AES2_CONTEXT, RM_L4SEC_CRYPTODMA_CONTEXT, RM_L4SEC_DES3DES_CONTEXT,
559 * RM_L4SEC_RNG_CONTEXT, RM_L4SEC_SHA2MD51_CONTEXT, RM_TESLA_TESLA_CONTEXT
560 */ 582 */
561#define OMAP4430_LOSTCONTEXT_RFF_SHIFT 1 583#define OMAP4430_LOSTCONTEXT_RFF_SHIFT 1
562#define OMAP4430_LOSTCONTEXT_RFF_MASK BITFIELD(1, 1) 584#define OMAP4430_LOSTCONTEXT_RFF_MASK (1 << 1)
563 585
564/* Used by RM_ABE_AESS_CONTEXT */ 586/* Used by RM_ABE_AESS_CONTEXT */
565#define OMAP4430_LOSTMEM_AESSMEM_SHIFT 8 587#define OMAP4430_LOSTMEM_AESSMEM_SHIFT 8
566#define OMAP4430_LOSTMEM_AESSMEM_MASK BITFIELD(8, 8) 588#define OMAP4430_LOSTMEM_AESSMEM_MASK (1 << 8)
567 589
568/* Used by RM_CAM_FDIF_CONTEXT, RM_CAM_ISS_CONTEXT */ 590/* Used by RM_CAM_FDIF_CONTEXT, RM_CAM_ISS_CONTEXT */
569#define OMAP4430_LOSTMEM_CAM_MEM_SHIFT 8 591#define OMAP4430_LOSTMEM_CAM_MEM_SHIFT 8
570#define OMAP4430_LOSTMEM_CAM_MEM_MASK BITFIELD(8, 8) 592#define OMAP4430_LOSTMEM_CAM_MEM_MASK (1 << 8)
571 593
572/* Used by RM_L3INSTR_OCP_WP1_CONTEXT */ 594/* Used by RM_L3INSTR_OCP_WP1_CONTEXT */
573#define OMAP4430_LOSTMEM_CORE_NRET_BANK_SHIFT 8 595#define OMAP4430_LOSTMEM_CORE_NRET_BANK_SHIFT 8
574#define OMAP4430_LOSTMEM_CORE_NRET_BANK_MASK BITFIELD(8, 8) 596#define OMAP4430_LOSTMEM_CORE_NRET_BANK_MASK (1 << 8)
575 597
576/* Renamed from LOSTMEM_CORE_NRET_BANK Used by RM_MEMIF_DMM_CONTEXT */ 598/* Renamed from LOSTMEM_CORE_NRET_BANK Used by RM_MEMIF_DMM_CONTEXT */
577#define OMAP4430_LOSTMEM_CORE_NRET_BANK_9_9_SHIFT 9 599#define OMAP4430_LOSTMEM_CORE_NRET_BANK_9_9_SHIFT 9
578#define OMAP4430_LOSTMEM_CORE_NRET_BANK_9_9_MASK BITFIELD(9, 9) 600#define OMAP4430_LOSTMEM_CORE_NRET_BANK_9_9_MASK (1 << 9)
579 601
580/* Used by RM_L3_2_OCMC_RAM_CONTEXT */ 602/* Used by RM_L3_2_OCMC_RAM_CONTEXT */
581#define OMAP4430_LOSTMEM_CORE_OCMRAM_SHIFT 8 603#define OMAP4430_LOSTMEM_CORE_OCMRAM_SHIFT 8
582#define OMAP4430_LOSTMEM_CORE_OCMRAM_MASK BITFIELD(8, 8) 604#define OMAP4430_LOSTMEM_CORE_OCMRAM_MASK (1 << 8)
583 605
584/* 606/*
585 * Used by RM_D2D_MODEM_ICR_CONTEXT, RM_MEMIF_DMM_CONTEXT, 607 * Used by RM_D2D_MODEM_ICR_CONTEXT, RM_MEMIF_DMM_CONTEXT,
586 * RM_SDMA_SDMA_CONTEXT 608 * RM_SDMA_SDMA_CONTEXT
587 */ 609 */
588#define OMAP4430_LOSTMEM_CORE_OTHER_BANK_SHIFT 8 610#define OMAP4430_LOSTMEM_CORE_OTHER_BANK_SHIFT 8
589#define OMAP4430_LOSTMEM_CORE_OTHER_BANK_MASK BITFIELD(8, 8) 611#define OMAP4430_LOSTMEM_CORE_OTHER_BANK_MASK (1 << 8)
590 612
591/* Used by RM_DSS_DEISS_CONTEXT, RM_DSS_DSS_CONTEXT */ 613/* Used by RM_DSS_DEISS_CONTEXT, RM_DSS_DSS_CONTEXT */
592#define OMAP4430_LOSTMEM_DSS_MEM_SHIFT 8 614#define OMAP4430_LOSTMEM_DSS_MEM_SHIFT 8
593#define OMAP4430_LOSTMEM_DSS_MEM_MASK BITFIELD(8, 8) 615#define OMAP4430_LOSTMEM_DSS_MEM_MASK (1 << 8)
594 616
595/* Used by RM_DUCATI_DUCATI_CONTEXT */ 617/* Used by RM_DUCATI_DUCATI_CONTEXT */
596#define OMAP4430_LOSTMEM_DUCATI_L2RAM_SHIFT 9 618#define OMAP4430_LOSTMEM_DUCATI_L2RAM_SHIFT 9
597#define OMAP4430_LOSTMEM_DUCATI_L2RAM_MASK BITFIELD(9, 9) 619#define OMAP4430_LOSTMEM_DUCATI_L2RAM_MASK (1 << 9)
598 620
599/* Used by RM_DUCATI_DUCATI_CONTEXT */ 621/* Used by RM_DUCATI_DUCATI_CONTEXT */
600#define OMAP4430_LOSTMEM_DUCATI_UNICACHE_SHIFT 8 622#define OMAP4430_LOSTMEM_DUCATI_UNICACHE_SHIFT 8
601#define OMAP4430_LOSTMEM_DUCATI_UNICACHE_MASK BITFIELD(8, 8) 623#define OMAP4430_LOSTMEM_DUCATI_UNICACHE_MASK (1 << 8)
602 624
603/* Used by RM_EMU_DEBUGSS_CONTEXT */ 625/* Used by RM_EMU_DEBUGSS_CONTEXT */
604#define OMAP4430_LOSTMEM_EMU_BANK_SHIFT 8 626#define OMAP4430_LOSTMEM_EMU_BANK_SHIFT 8
605#define OMAP4430_LOSTMEM_EMU_BANK_MASK BITFIELD(8, 8) 627#define OMAP4430_LOSTMEM_EMU_BANK_MASK (1 << 8)
606 628
607/* Used by RM_GFX_GFX_CONTEXT */ 629/* Used by RM_GFX_GFX_CONTEXT */
608#define OMAP4430_LOSTMEM_GFX_MEM_SHIFT 8 630#define OMAP4430_LOSTMEM_GFX_MEM_SHIFT 8
609#define OMAP4430_LOSTMEM_GFX_MEM_MASK BITFIELD(8, 8) 631#define OMAP4430_LOSTMEM_GFX_MEM_MASK (1 << 8)
610 632
611/* Used by RM_IVAHD_IVAHD_CONTEXT */ 633/* Used by RM_IVAHD_IVAHD_CONTEXT */
612#define OMAP4430_LOSTMEM_HWA_MEM_SHIFT 10 634#define OMAP4430_LOSTMEM_HWA_MEM_SHIFT 10
613#define OMAP4430_LOSTMEM_HWA_MEM_MASK BITFIELD(10, 10) 635#define OMAP4430_LOSTMEM_HWA_MEM_MASK (1 << 10)
614 636
615/* 637/*
616 * Used by RM_L3INIT_CCPTX_CONTEXT, RM_L3INIT_EMAC_CONTEXT, 638 * Used by RM_L3INIT_CCPTX_CONTEXT, RM_L3INIT_EMAC_CONTEXT,
@@ -620,19 +642,19 @@
620 * RM_L3INIT_USB_OTG_CONTEXT, RM_L3INIT_XHPI_CONTEXT 642 * RM_L3INIT_USB_OTG_CONTEXT, RM_L3INIT_XHPI_CONTEXT
621 */ 643 */
622#define OMAP4430_LOSTMEM_L3INIT_BANK1_SHIFT 8 644#define OMAP4430_LOSTMEM_L3INIT_BANK1_SHIFT 8
623#define OMAP4430_LOSTMEM_L3INIT_BANK1_MASK BITFIELD(8, 8) 645#define OMAP4430_LOSTMEM_L3INIT_BANK1_MASK (1 << 8)
624 646
625/* Used by RM_MPU_MPU_CONTEXT */ 647/* Used by RM_MPU_MPU_CONTEXT */
626#define OMAP4430_LOSTMEM_MPU_L1_SHIFT 8 648#define OMAP4430_LOSTMEM_MPU_L1_SHIFT 8
627#define OMAP4430_LOSTMEM_MPU_L1_MASK BITFIELD(8, 8) 649#define OMAP4430_LOSTMEM_MPU_L1_MASK (1 << 8)
628 650
629/* Used by RM_MPU_MPU_CONTEXT */ 651/* Used by RM_MPU_MPU_CONTEXT */
630#define OMAP4430_LOSTMEM_MPU_L2_SHIFT 9 652#define OMAP4430_LOSTMEM_MPU_L2_SHIFT 9
631#define OMAP4430_LOSTMEM_MPU_L2_MASK BITFIELD(9, 9) 653#define OMAP4430_LOSTMEM_MPU_L2_MASK (1 << 9)
632 654
633/* Used by RM_MPU_MPU_CONTEXT */ 655/* Used by RM_MPU_MPU_CONTEXT */
634#define OMAP4430_LOSTMEM_MPU_RAM_SHIFT 10 656#define OMAP4430_LOSTMEM_MPU_RAM_SHIFT 10
635#define OMAP4430_LOSTMEM_MPU_RAM_MASK BITFIELD(10, 10) 657#define OMAP4430_LOSTMEM_MPU_RAM_MASK (1 << 10)
636 658
637/* 659/*
638 * Used by RM_L4PER_HECC1_CONTEXT, RM_L4PER_HECC2_CONTEXT, 660 * Used by RM_L4PER_HECC1_CONTEXT, RM_L4PER_HECC2_CONTEXT,
@@ -640,14 +662,14 @@
640 * RM_L4PER_MMCSD5_CONTEXT, RM_L4PER_SLIMBUS2_CONTEXT, RM_L4SEC_PKAEIP29_CONTEXT 662 * RM_L4PER_MMCSD5_CONTEXT, RM_L4PER_SLIMBUS2_CONTEXT, RM_L4SEC_PKAEIP29_CONTEXT
641 */ 663 */
642#define OMAP4430_LOSTMEM_NONRETAINED_BANK_SHIFT 8 664#define OMAP4430_LOSTMEM_NONRETAINED_BANK_SHIFT 8
643#define OMAP4430_LOSTMEM_NONRETAINED_BANK_MASK BITFIELD(8, 8) 665#define OMAP4430_LOSTMEM_NONRETAINED_BANK_MASK (1 << 8)
644 666
645/* 667/*
646 * Used by RM_ABE_DMIC_CONTEXT, RM_ABE_MCBSP1_CONTEXT, RM_ABE_MCBSP2_CONTEXT, 668 * Used by RM_ABE_DMIC_CONTEXT, RM_ABE_MCBSP1_CONTEXT, RM_ABE_MCBSP2_CONTEXT,
647 * RM_ABE_MCBSP3_CONTEXT, RM_ABE_PDM_CONTEXT, RM_ABE_SLIMBUS_CONTEXT 669 * RM_ABE_MCBSP3_CONTEXT, RM_ABE_PDM_CONTEXT, RM_ABE_SLIMBUS_CONTEXT
648 */ 670 */
649#define OMAP4430_LOSTMEM_PERIHPMEM_SHIFT 8 671#define OMAP4430_LOSTMEM_PERIHPMEM_SHIFT 8
650#define OMAP4430_LOSTMEM_PERIHPMEM_MASK BITFIELD(8, 8) 672#define OMAP4430_LOSTMEM_PERIHPMEM_MASK (1 << 8)
651 673
652/* 674/*
653 * Used by RM_L4PER_MSPROHG_CONTEXT, RM_L4PER_UART1_CONTEXT, 675 * Used by RM_L4PER_MSPROHG_CONTEXT, RM_L4PER_UART1_CONTEXT,
@@ -655,245 +677,237 @@
655 * RM_L4SEC_CRYPTODMA_CONTEXT 677 * RM_L4SEC_CRYPTODMA_CONTEXT
656 */ 678 */
657#define OMAP4430_LOSTMEM_RETAINED_BANK_SHIFT 8 679#define OMAP4430_LOSTMEM_RETAINED_BANK_SHIFT 8
658#define OMAP4430_LOSTMEM_RETAINED_BANK_MASK BITFIELD(8, 8) 680#define OMAP4430_LOSTMEM_RETAINED_BANK_MASK (1 << 8)
659 681
660/* Used by RM_IVAHD_SL2_CONTEXT */ 682/* Used by RM_IVAHD_SL2_CONTEXT */
661#define OMAP4430_LOSTMEM_SL2_MEM_SHIFT 8 683#define OMAP4430_LOSTMEM_SL2_MEM_SHIFT 8
662#define OMAP4430_LOSTMEM_SL2_MEM_MASK BITFIELD(8, 8) 684#define OMAP4430_LOSTMEM_SL2_MEM_MASK (1 << 8)
663 685
664/* Used by RM_IVAHD_IVAHD_CONTEXT */ 686/* Used by RM_IVAHD_IVAHD_CONTEXT */
665#define OMAP4430_LOSTMEM_TCM1_MEM_SHIFT 8 687#define OMAP4430_LOSTMEM_TCM1_MEM_SHIFT 8
666#define OMAP4430_LOSTMEM_TCM1_MEM_MASK BITFIELD(8, 8) 688#define OMAP4430_LOSTMEM_TCM1_MEM_MASK (1 << 8)
667 689
668/* Used by RM_IVAHD_IVAHD_CONTEXT */ 690/* Used by RM_IVAHD_IVAHD_CONTEXT */
669#define OMAP4430_LOSTMEM_TCM2_MEM_SHIFT 9 691#define OMAP4430_LOSTMEM_TCM2_MEM_SHIFT 9
670#define OMAP4430_LOSTMEM_TCM2_MEM_MASK BITFIELD(9, 9) 692#define OMAP4430_LOSTMEM_TCM2_MEM_MASK (1 << 9)
671 693
672/* Used by RM_TESLA_TESLA_CONTEXT */ 694/* Used by RM_TESLA_TESLA_CONTEXT */
673#define OMAP4430_LOSTMEM_TESLA_EDMA_SHIFT 10 695#define OMAP4430_LOSTMEM_TESLA_EDMA_SHIFT 10
674#define OMAP4430_LOSTMEM_TESLA_EDMA_MASK BITFIELD(10, 10) 696#define OMAP4430_LOSTMEM_TESLA_EDMA_MASK (1 << 10)
675 697
676/* Used by RM_TESLA_TESLA_CONTEXT */ 698/* Used by RM_TESLA_TESLA_CONTEXT */
677#define OMAP4430_LOSTMEM_TESLA_L1_SHIFT 8 699#define OMAP4430_LOSTMEM_TESLA_L1_SHIFT 8
678#define OMAP4430_LOSTMEM_TESLA_L1_MASK BITFIELD(8, 8) 700#define OMAP4430_LOSTMEM_TESLA_L1_MASK (1 << 8)
679 701
680/* Used by RM_TESLA_TESLA_CONTEXT */ 702/* Used by RM_TESLA_TESLA_CONTEXT */
681#define OMAP4430_LOSTMEM_TESLA_L2_SHIFT 9 703#define OMAP4430_LOSTMEM_TESLA_L2_SHIFT 9
682#define OMAP4430_LOSTMEM_TESLA_L2_MASK BITFIELD(9, 9) 704#define OMAP4430_LOSTMEM_TESLA_L2_MASK (1 << 9)
683 705
684/* Used by RM_WKUP_SARRAM_CONTEXT */ 706/* Used by RM_WKUP_SARRAM_CONTEXT */
685#define OMAP4430_LOSTMEM_WKUP_BANK_SHIFT 8 707#define OMAP4430_LOSTMEM_WKUP_BANK_SHIFT 8
686#define OMAP4430_LOSTMEM_WKUP_BANK_MASK BITFIELD(8, 8) 708#define OMAP4430_LOSTMEM_WKUP_BANK_MASK (1 << 8)
687 709
688/* 710/*
689 * Used by PM_CORE_PWRSTCTRL, PM_CAM_PWRSTCTRL, PM_L3INIT_PWRSTCTRL, 711 * Used by PM_ABE_PWRSTCTRL, PM_CAM_PWRSTCTRL, PM_CEFUSE_PWRSTCTRL,
690 * PM_ABE_PWRSTCTRL, PM_GFX_PWRSTCTRL, PM_MPU_PWRSTCTRL, PM_CEFUSE_PWRSTCTRL, 712 * PM_CORE_PWRSTCTRL, PM_DSS_PWRSTCTRL, PM_GFX_PWRSTCTRL, PM_IVAHD_PWRSTCTRL,
691 * PM_DSS_PWRSTCTRL, PM_L4PER_PWRSTCTRL, PM_TESLA_PWRSTCTRL, PM_IVAHD_PWRSTCTRL 713 * PM_L3INIT_PWRSTCTRL, PM_L4PER_PWRSTCTRL, PM_MPU_PWRSTCTRL, PM_TESLA_PWRSTCTRL
692 */ 714 */
693#define OMAP4430_LOWPOWERSTATECHANGE_SHIFT 4 715#define OMAP4430_LOWPOWERSTATECHANGE_SHIFT 4
694#define OMAP4430_LOWPOWERSTATECHANGE_MASK BITFIELD(4, 4) 716#define OMAP4430_LOWPOWERSTATECHANGE_MASK (1 << 4)
695
696/* Used by PM_CORE_PWRSTCTRL */
697#define OMAP4430_MEMORYCHANGE_SHIFT 3
698#define OMAP4430_MEMORYCHANGE_MASK BITFIELD(3, 3)
699 717
700/* Used by PRM_MODEM_IF_CTRL */ 718/* Used by PRM_MODEM_IF_CTRL */
701#define OMAP4430_MODEM_READY_SHIFT 1 719#define OMAP4430_MODEM_READY_SHIFT 1
702#define OMAP4430_MODEM_READY_MASK BITFIELD(1, 1) 720#define OMAP4430_MODEM_READY_MASK (1 << 1)
703 721
704/* Used by PRM_MODEM_IF_CTRL */ 722/* Used by PRM_MODEM_IF_CTRL */
705#define OMAP4430_MODEM_SHUTDOWN_IRQ_SHIFT 9 723#define OMAP4430_MODEM_SHUTDOWN_IRQ_SHIFT 9
706#define OMAP4430_MODEM_SHUTDOWN_IRQ_MASK BITFIELD(9, 9) 724#define OMAP4430_MODEM_SHUTDOWN_IRQ_MASK (1 << 9)
707 725
708/* Used by PRM_MODEM_IF_CTRL */ 726/* Used by PRM_MODEM_IF_CTRL */
709#define OMAP4430_MODEM_SLEEP_ST_SHIFT 16 727#define OMAP4430_MODEM_SLEEP_ST_SHIFT 16
710#define OMAP4430_MODEM_SLEEP_ST_MASK BITFIELD(16, 16) 728#define OMAP4430_MODEM_SLEEP_ST_MASK (1 << 16)
711 729
712/* Used by PRM_MODEM_IF_CTRL */ 730/* Used by PRM_MODEM_IF_CTRL */
713#define OMAP4430_MODEM_WAKE_IRQ_SHIFT 8 731#define OMAP4430_MODEM_WAKE_IRQ_SHIFT 8
714#define OMAP4430_MODEM_WAKE_IRQ_MASK BITFIELD(8, 8) 732#define OMAP4430_MODEM_WAKE_IRQ_MASK (1 << 8)
715 733
716/* Used by PM_MPU_PWRSTCTRL */ 734/* Used by PM_MPU_PWRSTCTRL */
717#define OMAP4430_MPU_L1_ONSTATE_SHIFT 16 735#define OMAP4430_MPU_L1_ONSTATE_SHIFT 16
718#define OMAP4430_MPU_L1_ONSTATE_MASK BITFIELD(16, 17) 736#define OMAP4430_MPU_L1_ONSTATE_MASK (0x3 << 16)
719 737
720/* Used by PM_MPU_PWRSTCTRL */ 738/* Used by PM_MPU_PWRSTCTRL */
721#define OMAP4430_MPU_L1_RETSTATE_SHIFT 8 739#define OMAP4430_MPU_L1_RETSTATE_SHIFT 8
722#define OMAP4430_MPU_L1_RETSTATE_MASK BITFIELD(8, 8) 740#define OMAP4430_MPU_L1_RETSTATE_MASK (1 << 8)
723 741
724/* Used by PM_MPU_PWRSTST */ 742/* Used by PM_MPU_PWRSTST */
725#define OMAP4430_MPU_L1_STATEST_SHIFT 4 743#define OMAP4430_MPU_L1_STATEST_SHIFT 4
726#define OMAP4430_MPU_L1_STATEST_MASK BITFIELD(4, 5) 744#define OMAP4430_MPU_L1_STATEST_MASK (0x3 << 4)
727 745
728/* Used by PM_MPU_PWRSTCTRL */ 746/* Used by PM_MPU_PWRSTCTRL */
729#define OMAP4430_MPU_L2_ONSTATE_SHIFT 18 747#define OMAP4430_MPU_L2_ONSTATE_SHIFT 18
730#define OMAP4430_MPU_L2_ONSTATE_MASK BITFIELD(18, 19) 748#define OMAP4430_MPU_L2_ONSTATE_MASK (0x3 << 18)
731 749
732/* Used by PM_MPU_PWRSTCTRL */ 750/* Used by PM_MPU_PWRSTCTRL */
733#define OMAP4430_MPU_L2_RETSTATE_SHIFT 9 751#define OMAP4430_MPU_L2_RETSTATE_SHIFT 9
734#define OMAP4430_MPU_L2_RETSTATE_MASK BITFIELD(9, 9) 752#define OMAP4430_MPU_L2_RETSTATE_MASK (1 << 9)
735 753
736/* Used by PM_MPU_PWRSTST */ 754/* Used by PM_MPU_PWRSTST */
737#define OMAP4430_MPU_L2_STATEST_SHIFT 6 755#define OMAP4430_MPU_L2_STATEST_SHIFT 6
738#define OMAP4430_MPU_L2_STATEST_MASK BITFIELD(6, 7) 756#define OMAP4430_MPU_L2_STATEST_MASK (0x3 << 6)
739 757
740/* Used by PM_MPU_PWRSTCTRL */ 758/* Used by PM_MPU_PWRSTCTRL */
741#define OMAP4430_MPU_RAM_ONSTATE_SHIFT 20 759#define OMAP4430_MPU_RAM_ONSTATE_SHIFT 20
742#define OMAP4430_MPU_RAM_ONSTATE_MASK BITFIELD(20, 21) 760#define OMAP4430_MPU_RAM_ONSTATE_MASK (0x3 << 20)
743 761
744/* Used by PM_MPU_PWRSTCTRL */ 762/* Used by PM_MPU_PWRSTCTRL */
745#define OMAP4430_MPU_RAM_RETSTATE_SHIFT 10 763#define OMAP4430_MPU_RAM_RETSTATE_SHIFT 10
746#define OMAP4430_MPU_RAM_RETSTATE_MASK BITFIELD(10, 10) 764#define OMAP4430_MPU_RAM_RETSTATE_MASK (1 << 10)
747 765
748/* Used by PM_MPU_PWRSTST */ 766/* Used by PM_MPU_PWRSTST */
749#define OMAP4430_MPU_RAM_STATEST_SHIFT 8 767#define OMAP4430_MPU_RAM_STATEST_SHIFT 8
750#define OMAP4430_MPU_RAM_STATEST_MASK BITFIELD(8, 9) 768#define OMAP4430_MPU_RAM_STATEST_MASK (0x3 << 8)
751 769
752/* Used by PRM_RSTST */ 770/* Used by PRM_RSTST */
753#define OMAP4430_MPU_SECURITY_VIOL_RST_SHIFT 2 771#define OMAP4430_MPU_SECURITY_VIOL_RST_SHIFT 2
754#define OMAP4430_MPU_SECURITY_VIOL_RST_MASK BITFIELD(2, 2) 772#define OMAP4430_MPU_SECURITY_VIOL_RST_MASK (1 << 2)
755 773
756/* Used by PRM_RSTST */ 774/* Used by PRM_RSTST */
757#define OMAP4430_MPU_WDT_RST_SHIFT 3 775#define OMAP4430_MPU_WDT_RST_SHIFT 3
758#define OMAP4430_MPU_WDT_RST_MASK BITFIELD(3, 3) 776#define OMAP4430_MPU_WDT_RST_MASK (1 << 3)
759 777
760/* Used by PM_L4PER_PWRSTCTRL */ 778/* Used by PM_L4PER_PWRSTCTRL */
761#define OMAP4430_NONRETAINED_BANK_ONSTATE_SHIFT 18 779#define OMAP4430_NONRETAINED_BANK_ONSTATE_SHIFT 18
762#define OMAP4430_NONRETAINED_BANK_ONSTATE_MASK BITFIELD(18, 19) 780#define OMAP4430_NONRETAINED_BANK_ONSTATE_MASK (0x3 << 18)
763 781
764/* Used by PM_L4PER_PWRSTCTRL */ 782/* Used by PM_L4PER_PWRSTCTRL */
765#define OMAP4430_NONRETAINED_BANK_RETSTATE_SHIFT 9 783#define OMAP4430_NONRETAINED_BANK_RETSTATE_SHIFT 9
766#define OMAP4430_NONRETAINED_BANK_RETSTATE_MASK BITFIELD(9, 9) 784#define OMAP4430_NONRETAINED_BANK_RETSTATE_MASK (1 << 9)
767 785
768/* Used by PM_L4PER_PWRSTST */ 786/* Used by PM_L4PER_PWRSTST */
769#define OMAP4430_NONRETAINED_BANK_STATEST_SHIFT 6 787#define OMAP4430_NONRETAINED_BANK_STATEST_SHIFT 6
770#define OMAP4430_NONRETAINED_BANK_STATEST_MASK BITFIELD(6, 7) 788#define OMAP4430_NONRETAINED_BANK_STATEST_MASK (0x3 << 6)
771 789
772/* Used by PM_CORE_PWRSTCTRL */ 790/* Used by PM_CORE_PWRSTCTRL */
773#define OMAP4430_OCP_NRET_BANK_ONSTATE_SHIFT 24 791#define OMAP4430_OCP_NRET_BANK_ONSTATE_SHIFT 24
774#define OMAP4430_OCP_NRET_BANK_ONSTATE_MASK BITFIELD(24, 25) 792#define OMAP4430_OCP_NRET_BANK_ONSTATE_MASK (0x3 << 24)
775 793
776/* Used by PM_CORE_PWRSTCTRL */ 794/* Used by PM_CORE_PWRSTCTRL */
777#define OMAP4430_OCP_NRET_BANK_RETSTATE_SHIFT 12 795#define OMAP4430_OCP_NRET_BANK_RETSTATE_SHIFT 12
778#define OMAP4430_OCP_NRET_BANK_RETSTATE_MASK BITFIELD(12, 12) 796#define OMAP4430_OCP_NRET_BANK_RETSTATE_MASK (1 << 12)
779 797
780/* Used by PM_CORE_PWRSTST */ 798/* Used by PM_CORE_PWRSTST */
781#define OMAP4430_OCP_NRET_BANK_STATEST_SHIFT 12 799#define OMAP4430_OCP_NRET_BANK_STATEST_SHIFT 12
782#define OMAP4430_OCP_NRET_BANK_STATEST_MASK BITFIELD(12, 13) 800#define OMAP4430_OCP_NRET_BANK_STATEST_MASK (0x3 << 12)
783 801
784/* 802/*
785 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L, 803 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L,
786 * PRM_VC_VAL_CMD_VDD_MPU_L 804 * PRM_VC_VAL_CMD_VDD_MPU_L
787 */ 805 */
788#define OMAP4430_OFF_SHIFT 0 806#define OMAP4430_OFF_SHIFT 0
789#define OMAP4430_OFF_MASK BITFIELD(0, 7) 807#define OMAP4430_OFF_MASK (0xff << 0)
790
791/* Used by PRM_LDO_BANDGAP_CTRL */
792#define OMAP4430_OFF_ENABLE_SHIFT 0
793#define OMAP4430_OFF_ENABLE_MASK BITFIELD(0, 0)
794 808
795/* 809/*
796 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L, 810 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L,
797 * PRM_VC_VAL_CMD_VDD_MPU_L 811 * PRM_VC_VAL_CMD_VDD_MPU_L
798 */ 812 */
799#define OMAP4430_ON_SHIFT 24 813#define OMAP4430_ON_SHIFT 24
800#define OMAP4430_ON_MASK BITFIELD(24, 31) 814#define OMAP4430_ON_MASK (0xff << 24)
801 815
802/* 816/*
803 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L, 817 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L,
804 * PRM_VC_VAL_CMD_VDD_MPU_L 818 * PRM_VC_VAL_CMD_VDD_MPU_L
805 */ 819 */
806#define OMAP4430_ONLP_SHIFT 16 820#define OMAP4430_ONLP_SHIFT 16
807#define OMAP4430_ONLP_MASK BITFIELD(16, 23) 821#define OMAP4430_ONLP_MASK (0xff << 16)
808 822
809/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */ 823/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */
810#define OMAP4430_OPP_CHANGE_SHIFT 2 824#define OMAP4430_OPP_CHANGE_SHIFT 2
811#define OMAP4430_OPP_CHANGE_MASK BITFIELD(2, 2) 825#define OMAP4430_OPP_CHANGE_MASK (1 << 2)
812 826
813/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */ 827/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */
814#define OMAP4430_OPP_SEL_SHIFT 0 828#define OMAP4430_OPP_SEL_SHIFT 0
815#define OMAP4430_OPP_SEL_MASK BITFIELD(0, 1) 829#define OMAP4430_OPP_SEL_MASK (0x3 << 0)
816 830
817/* Used by PRM_SRAM_COUNT */ 831/* Used by PRM_SRAM_COUNT */
818#define OMAP4430_PCHARGECNT_VALUE_SHIFT 0 832#define OMAP4430_PCHARGECNT_VALUE_SHIFT 0
819#define OMAP4430_PCHARGECNT_VALUE_MASK BITFIELD(0, 5) 833#define OMAP4430_PCHARGECNT_VALUE_MASK (0x3f << 0)
820 834
821/* Used by PRM_PSCON_COUNT */ 835/* Used by PRM_PSCON_COUNT */
822#define OMAP4430_PCHARGE_TIME_SHIFT 0 836#define OMAP4430_PCHARGE_TIME_SHIFT 0
823#define OMAP4430_PCHARGE_TIME_MASK BITFIELD(0, 7) 837#define OMAP4430_PCHARGE_TIME_MASK (0xff << 0)
824 838
825/* Used by PM_ABE_PWRSTCTRL */ 839/* Used by PM_ABE_PWRSTCTRL */
826#define OMAP4430_PERIPHMEM_ONSTATE_SHIFT 20 840#define OMAP4430_PERIPHMEM_ONSTATE_SHIFT 20
827#define OMAP4430_PERIPHMEM_ONSTATE_MASK BITFIELD(20, 21) 841#define OMAP4430_PERIPHMEM_ONSTATE_MASK (0x3 << 20)
828 842
829/* Used by PM_ABE_PWRSTCTRL */ 843/* Used by PM_ABE_PWRSTCTRL */
830#define OMAP4430_PERIPHMEM_RETSTATE_SHIFT 10 844#define OMAP4430_PERIPHMEM_RETSTATE_SHIFT 10
831#define OMAP4430_PERIPHMEM_RETSTATE_MASK BITFIELD(10, 10) 845#define OMAP4430_PERIPHMEM_RETSTATE_MASK (1 << 10)
832 846
833/* Used by PM_ABE_PWRSTST */ 847/* Used by PM_ABE_PWRSTST */
834#define OMAP4430_PERIPHMEM_STATEST_SHIFT 8 848#define OMAP4430_PERIPHMEM_STATEST_SHIFT 8
835#define OMAP4430_PERIPHMEM_STATEST_MASK BITFIELD(8, 9) 849#define OMAP4430_PERIPHMEM_STATEST_MASK (0x3 << 8)
836 850
837/* Used by PRM_PHASE1_CNDP */ 851/* Used by PRM_PHASE1_CNDP */
838#define OMAP4430_PHASE1_CNDP_SHIFT 0 852#define OMAP4430_PHASE1_CNDP_SHIFT 0
839#define OMAP4430_PHASE1_CNDP_MASK BITFIELD(0, 31) 853#define OMAP4430_PHASE1_CNDP_MASK (0xffffffff << 0)
840 854
841/* Used by PRM_PHASE2A_CNDP */ 855/* Used by PRM_PHASE2A_CNDP */
842#define OMAP4430_PHASE2A_CNDP_SHIFT 0 856#define OMAP4430_PHASE2A_CNDP_SHIFT 0
843#define OMAP4430_PHASE2A_CNDP_MASK BITFIELD(0, 31) 857#define OMAP4430_PHASE2A_CNDP_MASK (0xffffffff << 0)
844 858
845/* Used by PRM_PHASE2B_CNDP */ 859/* Used by PRM_PHASE2B_CNDP */
846#define OMAP4430_PHASE2B_CNDP_SHIFT 0 860#define OMAP4430_PHASE2B_CNDP_SHIFT 0
847#define OMAP4430_PHASE2B_CNDP_MASK BITFIELD(0, 31) 861#define OMAP4430_PHASE2B_CNDP_MASK (0xffffffff << 0)
848 862
849/* Used by PRM_PSCON_COUNT */ 863/* Used by PRM_PSCON_COUNT */
850#define OMAP4430_PONOUT_2_PGOODIN_TIME_SHIFT 8 864#define OMAP4430_PONOUT_2_PGOODIN_TIME_SHIFT 8
851#define OMAP4430_PONOUT_2_PGOODIN_TIME_MASK BITFIELD(8, 15) 865#define OMAP4430_PONOUT_2_PGOODIN_TIME_MASK (0xff << 8)
852 866
853/* 867/*
854 * Used by PM_EMU_PWRSTCTRL, PM_CORE_PWRSTCTRL, PM_CAM_PWRSTCTRL, 868 * Used by PM_ABE_PWRSTCTRL, PM_CAM_PWRSTCTRL, PM_CEFUSE_PWRSTCTRL,
855 * PM_L3INIT_PWRSTCTRL, PM_ABE_PWRSTCTRL, PM_GFX_PWRSTCTRL, PM_MPU_PWRSTCTRL, 869 * PM_CORE_PWRSTCTRL, PM_DSS_PWRSTCTRL, PM_EMU_PWRSTCTRL, PM_GFX_PWRSTCTRL,
856 * PM_CEFUSE_PWRSTCTRL, PM_DSS_PWRSTCTRL, PM_L4PER_PWRSTCTRL, 870 * PM_IVAHD_PWRSTCTRL, PM_L3INIT_PWRSTCTRL, PM_L4PER_PWRSTCTRL,
857 * PM_TESLA_PWRSTCTRL, PM_IVAHD_PWRSTCTRL 871 * PM_MPU_PWRSTCTRL, PM_TESLA_PWRSTCTRL
858 */ 872 */
859#define OMAP4430_POWERSTATE_SHIFT 0 873#define OMAP4430_POWERSTATE_SHIFT 0
860#define OMAP4430_POWERSTATE_MASK BITFIELD(0, 1) 874#define OMAP4430_POWERSTATE_MASK (0x3 << 0)
861 875
862/* 876/*
863 * Used by PM_EMU_PWRSTST, PM_CORE_PWRSTST, PM_CAM_PWRSTST, PM_L3INIT_PWRSTST, 877 * Used by PM_ABE_PWRSTST, PM_CAM_PWRSTST, PM_CEFUSE_PWRSTST, PM_CORE_PWRSTST,
864 * PM_ABE_PWRSTST, PM_GFX_PWRSTST, PM_MPU_PWRSTST, PM_CEFUSE_PWRSTST, 878 * PM_DSS_PWRSTST, PM_EMU_PWRSTST, PM_GFX_PWRSTST, PM_IVAHD_PWRSTST,
865 * PM_DSS_PWRSTST, PM_L4PER_PWRSTST, PM_TESLA_PWRSTST, PM_IVAHD_PWRSTST 879 * PM_L3INIT_PWRSTST, PM_L4PER_PWRSTST, PM_MPU_PWRSTST, PM_TESLA_PWRSTST
866 */ 880 */
867#define OMAP4430_POWERSTATEST_SHIFT 0 881#define OMAP4430_POWERSTATEST_SHIFT 0
868#define OMAP4430_POWERSTATEST_MASK BITFIELD(0, 1) 882#define OMAP4430_POWERSTATEST_MASK (0x3 << 0)
869 883
870/* Used by PRM_PWRREQCTRL */ 884/* Used by PRM_PWRREQCTRL */
871#define OMAP4430_PWRREQ_COND_SHIFT 0 885#define OMAP4430_PWRREQ_COND_SHIFT 0
872#define OMAP4430_PWRREQ_COND_MASK BITFIELD(0, 1) 886#define OMAP4430_PWRREQ_COND_MASK (0x3 << 0)
873 887
874/* Used by PRM_VC_CFG_CHANNEL */ 888/* Used by PRM_VC_CFG_CHANNEL */
875#define OMAP4430_RACEN_VDD_CORE_L_SHIFT 3 889#define OMAP4430_RACEN_VDD_CORE_L_SHIFT 3
876#define OMAP4430_RACEN_VDD_CORE_L_MASK BITFIELD(3, 3) 890#define OMAP4430_RACEN_VDD_CORE_L_MASK (1 << 3)
877 891
878/* Used by PRM_VC_CFG_CHANNEL */ 892/* Used by PRM_VC_CFG_CHANNEL */
879#define OMAP4430_RACEN_VDD_IVA_L_SHIFT 11 893#define OMAP4430_RACEN_VDD_IVA_L_SHIFT 11
880#define OMAP4430_RACEN_VDD_IVA_L_MASK BITFIELD(11, 11) 894#define OMAP4430_RACEN_VDD_IVA_L_MASK (1 << 11)
881 895
882/* Used by PRM_VC_CFG_CHANNEL */ 896/* Used by PRM_VC_CFG_CHANNEL */
883#define OMAP4430_RACEN_VDD_MPU_L_SHIFT 20 897#define OMAP4430_RACEN_VDD_MPU_L_SHIFT 20
884#define OMAP4430_RACEN_VDD_MPU_L_MASK BITFIELD(20, 20) 898#define OMAP4430_RACEN_VDD_MPU_L_MASK (1 << 20)
885 899
886/* Used by PRM_VC_CFG_CHANNEL */ 900/* Used by PRM_VC_CFG_CHANNEL */
887#define OMAP4430_RAC_VDD_CORE_L_SHIFT 2 901#define OMAP4430_RAC_VDD_CORE_L_SHIFT 2
888#define OMAP4430_RAC_VDD_CORE_L_MASK BITFIELD(2, 2) 902#define OMAP4430_RAC_VDD_CORE_L_MASK (1 << 2)
889 903
890/* Used by PRM_VC_CFG_CHANNEL */ 904/* Used by PRM_VC_CFG_CHANNEL */
891#define OMAP4430_RAC_VDD_IVA_L_SHIFT 10 905#define OMAP4430_RAC_VDD_IVA_L_SHIFT 10
892#define OMAP4430_RAC_VDD_IVA_L_MASK BITFIELD(10, 10) 906#define OMAP4430_RAC_VDD_IVA_L_MASK (1 << 10)
893 907
894/* Used by PRM_VC_CFG_CHANNEL */ 908/* Used by PRM_VC_CFG_CHANNEL */
895#define OMAP4430_RAC_VDD_MPU_L_SHIFT 19 909#define OMAP4430_RAC_VDD_MPU_L_SHIFT 19
896#define OMAP4430_RAC_VDD_MPU_L_MASK BITFIELD(19, 19) 910#define OMAP4430_RAC_VDD_MPU_L_MASK (1 << 19)
897 911
898/* 912/*
899 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP, 913 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
@@ -901,7 +915,7 @@
901 * PRM_VOLTSETUP_MPU_RET_SLEEP 915 * PRM_VOLTSETUP_MPU_RET_SLEEP
902 */ 916 */
903#define OMAP4430_RAMP_DOWN_COUNT_SHIFT 16 917#define OMAP4430_RAMP_DOWN_COUNT_SHIFT 16
904#define OMAP4430_RAMP_DOWN_COUNT_MASK BITFIELD(16, 21) 918#define OMAP4430_RAMP_DOWN_COUNT_MASK (0x3f << 16)
905 919
906/* 920/*
907 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP, 921 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
@@ -909,7 +923,7 @@
909 * PRM_VOLTSETUP_MPU_RET_SLEEP 923 * PRM_VOLTSETUP_MPU_RET_SLEEP
910 */ 924 */
911#define OMAP4430_RAMP_DOWN_PRESCAL_SHIFT 24 925#define OMAP4430_RAMP_DOWN_PRESCAL_SHIFT 24
912#define OMAP4430_RAMP_DOWN_PRESCAL_MASK BITFIELD(24, 25) 926#define OMAP4430_RAMP_DOWN_PRESCAL_MASK (0x3 << 24)
913 927
914/* 928/*
915 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP, 929 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
@@ -917,7 +931,7 @@
917 * PRM_VOLTSETUP_MPU_RET_SLEEP 931 * PRM_VOLTSETUP_MPU_RET_SLEEP
918 */ 932 */
919#define OMAP4430_RAMP_UP_COUNT_SHIFT 0 933#define OMAP4430_RAMP_UP_COUNT_SHIFT 0
920#define OMAP4430_RAMP_UP_COUNT_MASK BITFIELD(0, 5) 934#define OMAP4430_RAMP_UP_COUNT_MASK (0x3f << 0)
921 935
922/* 936/*
923 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP, 937 * Used by PRM_VOLTSETUP_CORE_OFF, PRM_VOLTSETUP_CORE_RET_SLEEP,
@@ -925,1281 +939,1381 @@
925 * PRM_VOLTSETUP_MPU_RET_SLEEP 939 * PRM_VOLTSETUP_MPU_RET_SLEEP
926 */ 940 */
927#define OMAP4430_RAMP_UP_PRESCAL_SHIFT 8 941#define OMAP4430_RAMP_UP_PRESCAL_SHIFT 8
928#define OMAP4430_RAMP_UP_PRESCAL_MASK BITFIELD(8, 9) 942#define OMAP4430_RAMP_UP_PRESCAL_MASK (0x3 << 8)
929 943
930/* Used by PRM_VC_CFG_CHANNEL */ 944/* Used by PRM_VC_CFG_CHANNEL */
931#define OMAP4430_RAV_VDD_CORE_L_SHIFT 1 945#define OMAP4430_RAV_VDD_CORE_L_SHIFT 1
932#define OMAP4430_RAV_VDD_CORE_L_MASK BITFIELD(1, 1) 946#define OMAP4430_RAV_VDD_CORE_L_MASK (1 << 1)
933 947
934/* Used by PRM_VC_CFG_CHANNEL */ 948/* Used by PRM_VC_CFG_CHANNEL */
935#define OMAP4430_RAV_VDD_IVA_L_SHIFT 9 949#define OMAP4430_RAV_VDD_IVA_L_SHIFT 9
936#define OMAP4430_RAV_VDD_IVA_L_MASK BITFIELD(9, 9) 950#define OMAP4430_RAV_VDD_IVA_L_MASK (1 << 9)
937 951
938/* Used by PRM_VC_CFG_CHANNEL */ 952/* Used by PRM_VC_CFG_CHANNEL */
939#define OMAP4430_RAV_VDD_MPU_L_SHIFT 18 953#define OMAP4430_RAV_VDD_MPU_L_SHIFT 18
940#define OMAP4430_RAV_VDD_MPU_L_MASK BITFIELD(18, 18) 954#define OMAP4430_RAV_VDD_MPU_L_MASK (1 << 18)
941 955
942/* Used by PRM_VC_VAL_BYPASS */ 956/* Used by PRM_VC_VAL_BYPASS */
943#define OMAP4430_REGADDR_SHIFT 8 957#define OMAP4430_REGADDR_SHIFT 8
944#define OMAP4430_REGADDR_MASK BITFIELD(8, 15) 958#define OMAP4430_REGADDR_MASK (0xff << 8)
945 959
946/* 960/*
947 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L, 961 * Used by PRM_VC_VAL_CMD_VDD_CORE_L, PRM_VC_VAL_CMD_VDD_IVA_L,
948 * PRM_VC_VAL_CMD_VDD_MPU_L 962 * PRM_VC_VAL_CMD_VDD_MPU_L
949 */ 963 */
950#define OMAP4430_RET_SHIFT 8 964#define OMAP4430_RET_SHIFT 8
951#define OMAP4430_RET_MASK BITFIELD(8, 15) 965#define OMAP4430_RET_MASK (0xff << 8)
952 966
953/* Used by PM_L4PER_PWRSTCTRL */ 967/* Used by PM_L4PER_PWRSTCTRL */
954#define OMAP4430_RETAINED_BANK_ONSTATE_SHIFT 16 968#define OMAP4430_RETAINED_BANK_ONSTATE_SHIFT 16
955#define OMAP4430_RETAINED_BANK_ONSTATE_MASK BITFIELD(16, 17) 969#define OMAP4430_RETAINED_BANK_ONSTATE_MASK (0x3 << 16)
956 970
957/* Used by PM_L4PER_PWRSTCTRL */ 971/* Used by PM_L4PER_PWRSTCTRL */
958#define OMAP4430_RETAINED_BANK_RETSTATE_SHIFT 8 972#define OMAP4430_RETAINED_BANK_RETSTATE_SHIFT 8
959#define OMAP4430_RETAINED_BANK_RETSTATE_MASK BITFIELD(8, 8) 973#define OMAP4430_RETAINED_BANK_RETSTATE_MASK (1 << 8)
960 974
961/* Used by PM_L4PER_PWRSTST */ 975/* Used by PM_L4PER_PWRSTST */
962#define OMAP4430_RETAINED_BANK_STATEST_SHIFT 4 976#define OMAP4430_RETAINED_BANK_STATEST_SHIFT 4
963#define OMAP4430_RETAINED_BANK_STATEST_MASK BITFIELD(4, 5) 977#define OMAP4430_RETAINED_BANK_STATEST_MASK (0x3 << 4)
964 978
965/* 979/*
966 * Used by PRM_LDO_SRAM_CORE_CTRL, PRM_LDO_SRAM_IVA_CTRL, 980 * Used by PRM_LDO_SRAM_CORE_CTRL, PRM_LDO_SRAM_IVA_CTRL,
967 * PRM_LDO_SRAM_MPU_CTRL 981 * PRM_LDO_SRAM_MPU_CTRL
968 */ 982 */
969#define OMAP4430_RETMODE_ENABLE_SHIFT 0 983#define OMAP4430_RETMODE_ENABLE_SHIFT 0
970#define OMAP4430_RETMODE_ENABLE_MASK BITFIELD(0, 0) 984#define OMAP4430_RETMODE_ENABLE_MASK (1 << 0)
971
972/* Used by REVISION_PRM */
973#define OMAP4430_REV_SHIFT 0
974#define OMAP4430_REV_MASK BITFIELD(0, 7)
975 985
976/* Used by RM_DUCATI_RSTCTRL, RM_TESLA_RSTCTRL, RM_IVAHD_RSTCTRL */ 986/* Used by RM_DUCATI_RSTCTRL, RM_IVAHD_RSTCTRL, RM_TESLA_RSTCTRL */
977#define OMAP4430_RST1_SHIFT 0 987#define OMAP4430_RST1_SHIFT 0
978#define OMAP4430_RST1_MASK BITFIELD(0, 0) 988#define OMAP4430_RST1_MASK (1 << 0)
979 989
980/* Used by RM_DUCATI_RSTST, RM_TESLA_RSTST, RM_IVAHD_RSTST */ 990/* Used by RM_DUCATI_RSTST, RM_IVAHD_RSTST, RM_TESLA_RSTST */
981#define OMAP4430_RST1ST_SHIFT 0 991#define OMAP4430_RST1ST_SHIFT 0
982#define OMAP4430_RST1ST_MASK BITFIELD(0, 0) 992#define OMAP4430_RST1ST_MASK (1 << 0)
983 993
984/* Used by RM_DUCATI_RSTCTRL, RM_TESLA_RSTCTRL, RM_IVAHD_RSTCTRL */ 994/* Used by RM_DUCATI_RSTCTRL, RM_IVAHD_RSTCTRL, RM_TESLA_RSTCTRL */
985#define OMAP4430_RST2_SHIFT 1 995#define OMAP4430_RST2_SHIFT 1
986#define OMAP4430_RST2_MASK BITFIELD(1, 1) 996#define OMAP4430_RST2_MASK (1 << 1)
987 997
988/* Used by RM_DUCATI_RSTST, RM_TESLA_RSTST, RM_IVAHD_RSTST */ 998/* Used by RM_DUCATI_RSTST, RM_IVAHD_RSTST, RM_TESLA_RSTST */
989#define OMAP4430_RST2ST_SHIFT 1 999#define OMAP4430_RST2ST_SHIFT 1
990#define OMAP4430_RST2ST_MASK BITFIELD(1, 1) 1000#define OMAP4430_RST2ST_MASK (1 << 1)
991 1001
992/* Used by RM_DUCATI_RSTCTRL, RM_IVAHD_RSTCTRL */ 1002/* Used by RM_DUCATI_RSTCTRL, RM_IVAHD_RSTCTRL */
993#define OMAP4430_RST3_SHIFT 2 1003#define OMAP4430_RST3_SHIFT 2
994#define OMAP4430_RST3_MASK BITFIELD(2, 2) 1004#define OMAP4430_RST3_MASK (1 << 2)
995 1005
996/* Used by RM_DUCATI_RSTST, RM_IVAHD_RSTST */ 1006/* Used by RM_DUCATI_RSTST, RM_IVAHD_RSTST */
997#define OMAP4430_RST3ST_SHIFT 2 1007#define OMAP4430_RST3ST_SHIFT 2
998#define OMAP4430_RST3ST_MASK BITFIELD(2, 2) 1008#define OMAP4430_RST3ST_MASK (1 << 2)
999 1009
1000/* Used by PRM_RSTTIME */ 1010/* Used by PRM_RSTTIME */
1001#define OMAP4430_RSTTIME1_SHIFT 0 1011#define OMAP4430_RSTTIME1_SHIFT 0
1002#define OMAP4430_RSTTIME1_MASK BITFIELD(0, 9) 1012#define OMAP4430_RSTTIME1_MASK (0x3ff << 0)
1003 1013
1004/* Used by PRM_RSTTIME */ 1014/* Used by PRM_RSTTIME */
1005#define OMAP4430_RSTTIME2_SHIFT 10 1015#define OMAP4430_RSTTIME2_SHIFT 10
1006#define OMAP4430_RSTTIME2_MASK BITFIELD(10, 14) 1016#define OMAP4430_RSTTIME2_MASK (0x1f << 10)
1007 1017
1008/* Used by PRM_RSTCTRL */ 1018/* Used by PRM_RSTCTRL */
1009#define OMAP4430_RST_GLOBAL_COLD_SW_SHIFT 1 1019#define OMAP4430_RST_GLOBAL_COLD_SW_SHIFT 1
1010#define OMAP4430_RST_GLOBAL_COLD_SW_MASK BITFIELD(1, 1) 1020#define OMAP4430_RST_GLOBAL_COLD_SW_MASK (1 << 1)
1011 1021
1012/* Used by PRM_RSTCTRL */ 1022/* Used by PRM_RSTCTRL */
1013#define OMAP4430_RST_GLOBAL_WARM_SW_SHIFT 0 1023#define OMAP4430_RST_GLOBAL_WARM_SW_SHIFT 0
1014#define OMAP4430_RST_GLOBAL_WARM_SW_MASK BITFIELD(0, 0) 1024#define OMAP4430_RST_GLOBAL_WARM_SW_MASK (1 << 0)
1025
1026/* Used by REVISION_PRM */
1027#define OMAP4430_R_RTL_SHIFT 11
1028#define OMAP4430_R_RTL_MASK (0x1f << 11)
1015 1029
1016/* Used by PRM_VC_CFG_CHANNEL */ 1030/* Used by PRM_VC_CFG_CHANNEL */
1017#define OMAP4430_SA_VDD_CORE_L_SHIFT 0 1031#define OMAP4430_SA_VDD_CORE_L_SHIFT 0
1018#define OMAP4430_SA_VDD_CORE_L_MASK BITFIELD(0, 0) 1032#define OMAP4430_SA_VDD_CORE_L_MASK (1 << 0)
1019 1033
1020/* Renamed from SA_VDD_CORE_L Used by PRM_VC_SMPS_SA */ 1034/* Renamed from SA_VDD_CORE_L Used by PRM_VC_SMPS_SA */
1021#define OMAP4430_SA_VDD_CORE_L_0_6_SHIFT 0 1035#define OMAP4430_SA_VDD_CORE_L_0_6_SHIFT 0
1022#define OMAP4430_SA_VDD_CORE_L_0_6_MASK BITFIELD(0, 6) 1036#define OMAP4430_SA_VDD_CORE_L_0_6_MASK (0x7f << 0)
1023 1037
1024/* Used by PRM_VC_CFG_CHANNEL */ 1038/* Used by PRM_VC_CFG_CHANNEL */
1025#define OMAP4430_SA_VDD_IVA_L_SHIFT 8 1039#define OMAP4430_SA_VDD_IVA_L_SHIFT 8
1026#define OMAP4430_SA_VDD_IVA_L_MASK BITFIELD(8, 8) 1040#define OMAP4430_SA_VDD_IVA_L_MASK (1 << 8)
1027 1041
1028/* Renamed from SA_VDD_IVA_L Used by PRM_VC_SMPS_SA */ 1042/* Renamed from SA_VDD_IVA_L Used by PRM_VC_SMPS_SA */
1029#define OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_SHIFT 8 1043#define OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_SHIFT 8
1030#define OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK BITFIELD(8, 14) 1044#define OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK (0x7f << 8)
1031 1045
1032/* Used by PRM_VC_CFG_CHANNEL */ 1046/* Used by PRM_VC_CFG_CHANNEL */
1033#define OMAP4430_SA_VDD_MPU_L_SHIFT 16 1047#define OMAP4430_SA_VDD_MPU_L_SHIFT 16
1034#define OMAP4430_SA_VDD_MPU_L_MASK BITFIELD(16, 16) 1048#define OMAP4430_SA_VDD_MPU_L_MASK (1 << 16)
1035 1049
1036/* Renamed from SA_VDD_MPU_L Used by PRM_VC_SMPS_SA */ 1050/* Renamed from SA_VDD_MPU_L Used by PRM_VC_SMPS_SA */
1037#define OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_SHIFT 16 1051#define OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_SHIFT 16
1038#define OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK BITFIELD(16, 22) 1052#define OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK (0x7f << 16)
1053
1054/* Used by REVISION_PRM */
1055#define OMAP4430_SCHEME_SHIFT 30
1056#define OMAP4430_SCHEME_MASK (0x3 << 30)
1039 1057
1040/* Used by PRM_VC_CFG_I2C_CLK */ 1058/* Used by PRM_VC_CFG_I2C_CLK */
1041#define OMAP4430_SCLH_SHIFT 0 1059#define OMAP4430_SCLH_SHIFT 0
1042#define OMAP4430_SCLH_MASK BITFIELD(0, 7) 1060#define OMAP4430_SCLH_MASK (0xff << 0)
1043 1061
1044/* Used by PRM_VC_CFG_I2C_CLK */ 1062/* Used by PRM_VC_CFG_I2C_CLK */
1045#define OMAP4430_SCLL_SHIFT 8 1063#define OMAP4430_SCLL_SHIFT 8
1046#define OMAP4430_SCLL_MASK BITFIELD(8, 15) 1064#define OMAP4430_SCLL_MASK (0xff << 8)
1047 1065
1048/* Used by PRM_RSTST */ 1066/* Used by PRM_RSTST */
1049#define OMAP4430_SECURE_WDT_RST_SHIFT 4 1067#define OMAP4430_SECURE_WDT_RST_SHIFT 4
1050#define OMAP4430_SECURE_WDT_RST_MASK BITFIELD(4, 4) 1068#define OMAP4430_SECURE_WDT_RST_MASK (1 << 4)
1051 1069
1052/* Used by PM_IVAHD_PWRSTCTRL */ 1070/* Used by PM_IVAHD_PWRSTCTRL */
1053#define OMAP4430_SL2_MEM_ONSTATE_SHIFT 18 1071#define OMAP4430_SL2_MEM_ONSTATE_SHIFT 18
1054#define OMAP4430_SL2_MEM_ONSTATE_MASK BITFIELD(18, 19) 1072#define OMAP4430_SL2_MEM_ONSTATE_MASK (0x3 << 18)
1055 1073
1056/* Used by PM_IVAHD_PWRSTCTRL */ 1074/* Used by PM_IVAHD_PWRSTCTRL */
1057#define OMAP4430_SL2_MEM_RETSTATE_SHIFT 9 1075#define OMAP4430_SL2_MEM_RETSTATE_SHIFT 9
1058#define OMAP4430_SL2_MEM_RETSTATE_MASK BITFIELD(9, 9) 1076#define OMAP4430_SL2_MEM_RETSTATE_MASK (1 << 9)
1059 1077
1060/* Used by PM_IVAHD_PWRSTST */ 1078/* Used by PM_IVAHD_PWRSTST */
1061#define OMAP4430_SL2_MEM_STATEST_SHIFT 6 1079#define OMAP4430_SL2_MEM_STATEST_SHIFT 6
1062#define OMAP4430_SL2_MEM_STATEST_MASK BITFIELD(6, 7) 1080#define OMAP4430_SL2_MEM_STATEST_MASK (0x3 << 6)
1063 1081
1064/* Used by PRM_VC_VAL_BYPASS */ 1082/* Used by PRM_VC_VAL_BYPASS */
1065#define OMAP4430_SLAVEADDR_SHIFT 0 1083#define OMAP4430_SLAVEADDR_SHIFT 0
1066#define OMAP4430_SLAVEADDR_MASK BITFIELD(0, 6) 1084#define OMAP4430_SLAVEADDR_MASK (0x7f << 0)
1067 1085
1068/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */ 1086/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */
1069#define OMAP4430_SLEEP_RBB_SEL_SHIFT 3 1087#define OMAP4430_SLEEP_RBB_SEL_SHIFT 3
1070#define OMAP4430_SLEEP_RBB_SEL_MASK BITFIELD(3, 3) 1088#define OMAP4430_SLEEP_RBB_SEL_MASK (1 << 3)
1071 1089
1072/* Used by PRM_SRAM_COUNT */ 1090/* Used by PRM_SRAM_COUNT */
1073#define OMAP4430_SLPCNT_VALUE_SHIFT 16 1091#define OMAP4430_SLPCNT_VALUE_SHIFT 16
1074#define OMAP4430_SLPCNT_VALUE_MASK BITFIELD(16, 23) 1092#define OMAP4430_SLPCNT_VALUE_MASK (0xff << 16)
1075 1093
1076/* Used by PRM_VP_CORE_VSTEPMAX, PRM_VP_IVA_VSTEPMAX, PRM_VP_MPU_VSTEPMAX */ 1094/* Used by PRM_VP_CORE_VSTEPMAX, PRM_VP_IVA_VSTEPMAX, PRM_VP_MPU_VSTEPMAX */
1077#define OMAP4430_SMPSWAITTIMEMAX_SHIFT 8 1095#define OMAP4430_SMPSWAITTIMEMAX_SHIFT 8
1078#define OMAP4430_SMPSWAITTIMEMAX_MASK BITFIELD(8, 23) 1096#define OMAP4430_SMPSWAITTIMEMAX_MASK (0xffff << 8)
1079 1097
1080/* Used by PRM_VP_CORE_VSTEPMIN, PRM_VP_IVA_VSTEPMIN, PRM_VP_MPU_VSTEPMIN */ 1098/* Used by PRM_VP_CORE_VSTEPMIN, PRM_VP_IVA_VSTEPMIN, PRM_VP_MPU_VSTEPMIN */
1081#define OMAP4430_SMPSWAITTIMEMIN_SHIFT 8 1099#define OMAP4430_SMPSWAITTIMEMIN_SHIFT 8
1082#define OMAP4430_SMPSWAITTIMEMIN_MASK BITFIELD(8, 23) 1100#define OMAP4430_SMPSWAITTIMEMIN_MASK (0xffff << 8)
1101
1102/* Used by PRM_VC_ERRST */
1103#define OMAP4430_SMPS_RA_ERR_CORE_SHIFT 1
1104#define OMAP4430_SMPS_RA_ERR_CORE_MASK (1 << 1)
1105
1106/* Used by PRM_VC_ERRST */
1107#define OMAP4430_SMPS_RA_ERR_IVA_SHIFT 9
1108#define OMAP4430_SMPS_RA_ERR_IVA_MASK (1 << 9)
1109
1110/* Used by PRM_VC_ERRST */
1111#define OMAP4430_SMPS_RA_ERR_MPU_SHIFT 17
1112#define OMAP4430_SMPS_RA_ERR_MPU_MASK (1 << 17)
1113
1114/* Used by PRM_VC_ERRST */
1115#define OMAP4430_SMPS_SA_ERR_CORE_SHIFT 0
1116#define OMAP4430_SMPS_SA_ERR_CORE_MASK (1 << 0)
1117
1118/* Used by PRM_VC_ERRST */
1119#define OMAP4430_SMPS_SA_ERR_IVA_SHIFT 8
1120#define OMAP4430_SMPS_SA_ERR_IVA_MASK (1 << 8)
1121
1122/* Used by PRM_VC_ERRST */
1123#define OMAP4430_SMPS_SA_ERR_MPU_SHIFT 16
1124#define OMAP4430_SMPS_SA_ERR_MPU_MASK (1 << 16)
1125
1126/* Used by PRM_VC_ERRST */
1127#define OMAP4430_SMPS_TIMEOUT_ERR_CORE_SHIFT 2
1128#define OMAP4430_SMPS_TIMEOUT_ERR_CORE_MASK (1 << 2)
1129
1130/* Used by PRM_VC_ERRST */
1131#define OMAP4430_SMPS_TIMEOUT_ERR_IVA_SHIFT 10
1132#define OMAP4430_SMPS_TIMEOUT_ERR_IVA_MASK (1 << 10)
1133
1134/* Used by PRM_VC_ERRST */
1135#define OMAP4430_SMPS_TIMEOUT_ERR_MPU_SHIFT 18
1136#define OMAP4430_SMPS_TIMEOUT_ERR_MPU_MASK (1 << 18)
1083 1137
1084/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */ 1138/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */
1085#define OMAP4430_SR2EN_SHIFT 0 1139#define OMAP4430_SR2EN_SHIFT 0
1086#define OMAP4430_SR2EN_MASK BITFIELD(0, 0) 1140#define OMAP4430_SR2EN_MASK (1 << 0)
1087 1141
1088/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */ 1142/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */
1089#define OMAP4430_SR2_IN_TRANSITION_SHIFT 6 1143#define OMAP4430_SR2_IN_TRANSITION_SHIFT 6
1090#define OMAP4430_SR2_IN_TRANSITION_MASK BITFIELD(6, 6) 1144#define OMAP4430_SR2_IN_TRANSITION_MASK (1 << 6)
1091 1145
1092/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */ 1146/* Used by PRM_LDO_ABB_IVA_CTRL, PRM_LDO_ABB_MPU_CTRL */
1093#define OMAP4430_SR2_STATUS_SHIFT 3 1147#define OMAP4430_SR2_STATUS_SHIFT 3
1094#define OMAP4430_SR2_STATUS_MASK BITFIELD(3, 4) 1148#define OMAP4430_SR2_STATUS_MASK (0x3 << 3)
1095 1149
1096/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */ 1150/* Used by PRM_LDO_ABB_IVA_SETUP, PRM_LDO_ABB_MPU_SETUP */
1097#define OMAP4430_SR2_WTCNT_VALUE_SHIFT 8 1151#define OMAP4430_SR2_WTCNT_VALUE_SHIFT 8
1098#define OMAP4430_SR2_WTCNT_VALUE_MASK BITFIELD(8, 15) 1152#define OMAP4430_SR2_WTCNT_VALUE_MASK (0xff << 8)
1099 1153
1100/* 1154/*
1101 * Used by PRM_LDO_SRAM_CORE_CTRL, PRM_LDO_SRAM_IVA_CTRL, 1155 * Used by PRM_LDO_SRAM_CORE_CTRL, PRM_LDO_SRAM_IVA_CTRL,
1102 * PRM_LDO_SRAM_MPU_CTRL 1156 * PRM_LDO_SRAM_MPU_CTRL
1103 */ 1157 */
1104#define OMAP4430_SRAMLDO_STATUS_SHIFT 8 1158#define OMAP4430_SRAMLDO_STATUS_SHIFT 8
1105#define OMAP4430_SRAMLDO_STATUS_MASK BITFIELD(8, 8) 1159#define OMAP4430_SRAMLDO_STATUS_MASK (1 << 8)
1106 1160
1107/* 1161/*
1108 * Used by PRM_LDO_SRAM_CORE_CTRL, PRM_LDO_SRAM_IVA_CTRL, 1162 * Used by PRM_LDO_SRAM_CORE_CTRL, PRM_LDO_SRAM_IVA_CTRL,
1109 * PRM_LDO_SRAM_MPU_CTRL 1163 * PRM_LDO_SRAM_MPU_CTRL
1110 */ 1164 */
1111#define OMAP4430_SRAM_IN_TRANSITION_SHIFT 9 1165#define OMAP4430_SRAM_IN_TRANSITION_SHIFT 9
1112#define OMAP4430_SRAM_IN_TRANSITION_MASK BITFIELD(9, 9) 1166#define OMAP4430_SRAM_IN_TRANSITION_MASK (1 << 9)
1113 1167
1114/* Used by PRM_VC_CFG_I2C_MODE */ 1168/* Used by PRM_VC_CFG_I2C_MODE */
1115#define OMAP4430_SRMODEEN_SHIFT 4 1169#define OMAP4430_SRMODEEN_SHIFT 4
1116#define OMAP4430_SRMODEEN_MASK BITFIELD(4, 4) 1170#define OMAP4430_SRMODEEN_MASK (1 << 4)
1117 1171
1118/* Used by PRM_VOLTSETUP_WARMRESET */ 1172/* Used by PRM_VOLTSETUP_WARMRESET */
1119#define OMAP4430_STABLE_COUNT_SHIFT 0 1173#define OMAP4430_STABLE_COUNT_SHIFT 0
1120#define OMAP4430_STABLE_COUNT_MASK BITFIELD(0, 5) 1174#define OMAP4430_STABLE_COUNT_MASK (0x3f << 0)
1121 1175
1122/* Used by PRM_VOLTSETUP_WARMRESET */ 1176/* Used by PRM_VOLTSETUP_WARMRESET */
1123#define OMAP4430_STABLE_PRESCAL_SHIFT 8 1177#define OMAP4430_STABLE_PRESCAL_SHIFT 8
1124#define OMAP4430_STABLE_PRESCAL_MASK BITFIELD(8, 9) 1178#define OMAP4430_STABLE_PRESCAL_MASK (0x3 << 8)
1179
1180/* Used by PRM_LDO_BANDGAP_SETUP */
1181#define OMAP4430_STARTUP_COUNT_SHIFT 0
1182#define OMAP4430_STARTUP_COUNT_MASK (0xff << 0)
1183
1184/* Renamed from STARTUP_COUNT Used by PRM_SRAM_COUNT */
1185#define OMAP4430_STARTUP_COUNT_24_31_SHIFT 24
1186#define OMAP4430_STARTUP_COUNT_24_31_MASK (0xff << 24)
1125 1187
1126/* Used by PM_IVAHD_PWRSTCTRL */ 1188/* Used by PM_IVAHD_PWRSTCTRL */
1127#define OMAP4430_TCM1_MEM_ONSTATE_SHIFT 20 1189#define OMAP4430_TCM1_MEM_ONSTATE_SHIFT 20
1128#define OMAP4430_TCM1_MEM_ONSTATE_MASK BITFIELD(20, 21) 1190#define OMAP4430_TCM1_MEM_ONSTATE_MASK (0x3 << 20)
1129 1191
1130/* Used by PM_IVAHD_PWRSTCTRL */ 1192/* Used by PM_IVAHD_PWRSTCTRL */
1131#define OMAP4430_TCM1_MEM_RETSTATE_SHIFT 10 1193#define OMAP4430_TCM1_MEM_RETSTATE_SHIFT 10
1132#define OMAP4430_TCM1_MEM_RETSTATE_MASK BITFIELD(10, 10) 1194#define OMAP4430_TCM1_MEM_RETSTATE_MASK (1 << 10)
1133 1195
1134/* Used by PM_IVAHD_PWRSTST */ 1196/* Used by PM_IVAHD_PWRSTST */
1135#define OMAP4430_TCM1_MEM_STATEST_SHIFT 8 1197#define OMAP4430_TCM1_MEM_STATEST_SHIFT 8
1136#define OMAP4430_TCM1_MEM_STATEST_MASK BITFIELD(8, 9) 1198#define OMAP4430_TCM1_MEM_STATEST_MASK (0x3 << 8)
1137 1199
1138/* Used by PM_IVAHD_PWRSTCTRL */ 1200/* Used by PM_IVAHD_PWRSTCTRL */
1139#define OMAP4430_TCM2_MEM_ONSTATE_SHIFT 22 1201#define OMAP4430_TCM2_MEM_ONSTATE_SHIFT 22
1140#define OMAP4430_TCM2_MEM_ONSTATE_MASK BITFIELD(22, 23) 1202#define OMAP4430_TCM2_MEM_ONSTATE_MASK (0x3 << 22)
1141 1203
1142/* Used by PM_IVAHD_PWRSTCTRL */ 1204/* Used by PM_IVAHD_PWRSTCTRL */
1143#define OMAP4430_TCM2_MEM_RETSTATE_SHIFT 11 1205#define OMAP4430_TCM2_MEM_RETSTATE_SHIFT 11
1144#define OMAP4430_TCM2_MEM_RETSTATE_MASK BITFIELD(11, 11) 1206#define OMAP4430_TCM2_MEM_RETSTATE_MASK (1 << 11)
1145 1207
1146/* Used by PM_IVAHD_PWRSTST */ 1208/* Used by PM_IVAHD_PWRSTST */
1147#define OMAP4430_TCM2_MEM_STATEST_SHIFT 10 1209#define OMAP4430_TCM2_MEM_STATEST_SHIFT 10
1148#define OMAP4430_TCM2_MEM_STATEST_MASK BITFIELD(10, 11) 1210#define OMAP4430_TCM2_MEM_STATEST_MASK (0x3 << 10)
1149 1211
1150/* Used by RM_TESLA_RSTST */ 1212/* Used by RM_TESLA_RSTST */
1151#define OMAP4430_TESLASS_EMU_RSTST_SHIFT 2 1213#define OMAP4430_TESLASS_EMU_RSTST_SHIFT 2
1152#define OMAP4430_TESLASS_EMU_RSTST_MASK BITFIELD(2, 2) 1214#define OMAP4430_TESLASS_EMU_RSTST_MASK (1 << 2)
1153 1215
1154/* Used by RM_TESLA_RSTST */ 1216/* Used by RM_TESLA_RSTST */
1155#define OMAP4430_TESLA_DSP_EMU_REQ_RSTST_SHIFT 3 1217#define OMAP4430_TESLA_DSP_EMU_REQ_RSTST_SHIFT 3
1156#define OMAP4430_TESLA_DSP_EMU_REQ_RSTST_MASK BITFIELD(3, 3) 1218#define OMAP4430_TESLA_DSP_EMU_REQ_RSTST_MASK (1 << 3)
1157 1219
1158/* Used by PM_TESLA_PWRSTCTRL */ 1220/* Used by PM_TESLA_PWRSTCTRL */
1159#define OMAP4430_TESLA_EDMA_ONSTATE_SHIFT 20 1221#define OMAP4430_TESLA_EDMA_ONSTATE_SHIFT 20
1160#define OMAP4430_TESLA_EDMA_ONSTATE_MASK BITFIELD(20, 21) 1222#define OMAP4430_TESLA_EDMA_ONSTATE_MASK (0x3 << 20)
1161 1223
1162/* Used by PM_TESLA_PWRSTCTRL */ 1224/* Used by PM_TESLA_PWRSTCTRL */
1163#define OMAP4430_TESLA_EDMA_RETSTATE_SHIFT 10 1225#define OMAP4430_TESLA_EDMA_RETSTATE_SHIFT 10
1164#define OMAP4430_TESLA_EDMA_RETSTATE_MASK BITFIELD(10, 10) 1226#define OMAP4430_TESLA_EDMA_RETSTATE_MASK (1 << 10)
1165 1227
1166/* Used by PM_TESLA_PWRSTST */ 1228/* Used by PM_TESLA_PWRSTST */
1167#define OMAP4430_TESLA_EDMA_STATEST_SHIFT 8 1229#define OMAP4430_TESLA_EDMA_STATEST_SHIFT 8
1168#define OMAP4430_TESLA_EDMA_STATEST_MASK BITFIELD(8, 9) 1230#define OMAP4430_TESLA_EDMA_STATEST_MASK (0x3 << 8)
1169 1231
1170/* Used by PM_TESLA_PWRSTCTRL */ 1232/* Used by PM_TESLA_PWRSTCTRL */
1171#define OMAP4430_TESLA_L1_ONSTATE_SHIFT 16 1233#define OMAP4430_TESLA_L1_ONSTATE_SHIFT 16
1172#define OMAP4430_TESLA_L1_ONSTATE_MASK BITFIELD(16, 17) 1234#define OMAP4430_TESLA_L1_ONSTATE_MASK (0x3 << 16)
1173 1235
1174/* Used by PM_TESLA_PWRSTCTRL */ 1236/* Used by PM_TESLA_PWRSTCTRL */
1175#define OMAP4430_TESLA_L1_RETSTATE_SHIFT 8 1237#define OMAP4430_TESLA_L1_RETSTATE_SHIFT 8
1176#define OMAP4430_TESLA_L1_RETSTATE_MASK BITFIELD(8, 8) 1238#define OMAP4430_TESLA_L1_RETSTATE_MASK (1 << 8)
1177 1239
1178/* Used by PM_TESLA_PWRSTST */ 1240/* Used by PM_TESLA_PWRSTST */
1179#define OMAP4430_TESLA_L1_STATEST_SHIFT 4 1241#define OMAP4430_TESLA_L1_STATEST_SHIFT 4
1180#define OMAP4430_TESLA_L1_STATEST_MASK BITFIELD(4, 5) 1242#define OMAP4430_TESLA_L1_STATEST_MASK (0x3 << 4)
1181 1243
1182/* Used by PM_TESLA_PWRSTCTRL */ 1244/* Used by PM_TESLA_PWRSTCTRL */
1183#define OMAP4430_TESLA_L2_ONSTATE_SHIFT 18 1245#define OMAP4430_TESLA_L2_ONSTATE_SHIFT 18
1184#define OMAP4430_TESLA_L2_ONSTATE_MASK BITFIELD(18, 19) 1246#define OMAP4430_TESLA_L2_ONSTATE_MASK (0x3 << 18)
1185 1247
1186/* Used by PM_TESLA_PWRSTCTRL */ 1248/* Used by PM_TESLA_PWRSTCTRL */
1187#define OMAP4430_TESLA_L2_RETSTATE_SHIFT 9 1249#define OMAP4430_TESLA_L2_RETSTATE_SHIFT 9
1188#define OMAP4430_TESLA_L2_RETSTATE_MASK BITFIELD(9, 9) 1250#define OMAP4430_TESLA_L2_RETSTATE_MASK (1 << 9)
1189 1251
1190/* Used by PM_TESLA_PWRSTST */ 1252/* Used by PM_TESLA_PWRSTST */
1191#define OMAP4430_TESLA_L2_STATEST_SHIFT 6 1253#define OMAP4430_TESLA_L2_STATEST_SHIFT 6
1192#define OMAP4430_TESLA_L2_STATEST_MASK BITFIELD(6, 7) 1254#define OMAP4430_TESLA_L2_STATEST_MASK (0x3 << 6)
1193 1255
1194/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_IVA_VLIMITTO, PRM_VP_MPU_VLIMITTO */ 1256/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_IVA_VLIMITTO, PRM_VP_MPU_VLIMITTO */
1195#define OMAP4430_TIMEOUT_SHIFT 0 1257#define OMAP4430_TIMEOUT_SHIFT 0
1196#define OMAP4430_TIMEOUT_MASK BITFIELD(0, 15) 1258#define OMAP4430_TIMEOUT_MASK (0xffff << 0)
1197 1259
1198/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */ 1260/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */
1199#define OMAP4430_TIMEOUTEN_SHIFT 3 1261#define OMAP4430_TIMEOUTEN_SHIFT 3
1200#define OMAP4430_TIMEOUTEN_MASK BITFIELD(3, 3) 1262#define OMAP4430_TIMEOUTEN_MASK (1 << 3)
1201 1263
1202/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1264/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1203#define OMAP4430_TRANSITION_EN_SHIFT 8 1265#define OMAP4430_TRANSITION_EN_SHIFT 8
1204#define OMAP4430_TRANSITION_EN_MASK BITFIELD(8, 8) 1266#define OMAP4430_TRANSITION_EN_MASK (1 << 8)
1205 1267
1206/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1268/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1207#define OMAP4430_TRANSITION_ST_SHIFT 8 1269#define OMAP4430_TRANSITION_ST_SHIFT 8
1208#define OMAP4430_TRANSITION_ST_MASK BITFIELD(8, 8) 1270#define OMAP4430_TRANSITION_ST_MASK (1 << 8)
1209 1271
1210/* Used by PRM_VC_VAL_BYPASS */ 1272/* Used by PRM_VC_VAL_BYPASS */
1211#define OMAP4430_VALID_SHIFT 24 1273#define OMAP4430_VALID_SHIFT 24
1212#define OMAP4430_VALID_MASK BITFIELD(24, 24) 1274#define OMAP4430_VALID_MASK (1 << 24)
1213 1275
1214/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1276/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1215#define OMAP4430_VC_BYPASSACK_EN_SHIFT 14 1277#define OMAP4430_VC_BYPASSACK_EN_SHIFT 14
1216#define OMAP4430_VC_BYPASSACK_EN_MASK BITFIELD(14, 14) 1278#define OMAP4430_VC_BYPASSACK_EN_MASK (1 << 14)
1217 1279
1218/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1280/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1219#define OMAP4430_VC_BYPASSACK_ST_SHIFT 14 1281#define OMAP4430_VC_BYPASSACK_ST_SHIFT 14
1220#define OMAP4430_VC_BYPASSACK_ST_MASK BITFIELD(14, 14) 1282#define OMAP4430_VC_BYPASSACK_ST_MASK (1 << 14)
1283
1284/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1285#define OMAP4430_VC_CORE_VPACK_EN_SHIFT 22
1286#define OMAP4430_VC_CORE_VPACK_EN_MASK (1 << 22)
1287
1288/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1289#define OMAP4430_VC_CORE_VPACK_ST_SHIFT 22
1290#define OMAP4430_VC_CORE_VPACK_ST_MASK (1 << 22)
1221 1291
1222/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1292/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1223#define OMAP4430_VC_IVA_VPACK_EN_SHIFT 30 1293#define OMAP4430_VC_IVA_VPACK_EN_SHIFT 30
1224#define OMAP4430_VC_IVA_VPACK_EN_MASK BITFIELD(30, 30) 1294#define OMAP4430_VC_IVA_VPACK_EN_MASK (1 << 30)
1225 1295
1226/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1296/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1227#define OMAP4430_VC_IVA_VPACK_ST_SHIFT 30 1297#define OMAP4430_VC_IVA_VPACK_ST_SHIFT 30
1228#define OMAP4430_VC_IVA_VPACK_ST_MASK BITFIELD(30, 30) 1298#define OMAP4430_VC_IVA_VPACK_ST_MASK (1 << 30)
1229 1299
1230/* Used by PRM_IRQENABLE_MPU_2 */ 1300/* Used by PRM_IRQENABLE_MPU_2 */
1231#define OMAP4430_VC_MPU_VPACK_EN_SHIFT 6 1301#define OMAP4430_VC_MPU_VPACK_EN_SHIFT 6
1232#define OMAP4430_VC_MPU_VPACK_EN_MASK BITFIELD(6, 6) 1302#define OMAP4430_VC_MPU_VPACK_EN_MASK (1 << 6)
1233 1303
1234/* Used by PRM_IRQSTATUS_MPU_2 */ 1304/* Used by PRM_IRQSTATUS_MPU_2 */
1235#define OMAP4430_VC_MPU_VPACK_ST_SHIFT 6 1305#define OMAP4430_VC_MPU_VPACK_ST_SHIFT 6
1236#define OMAP4430_VC_MPU_VPACK_ST_MASK BITFIELD(6, 6) 1306#define OMAP4430_VC_MPU_VPACK_ST_MASK (1 << 6)
1237 1307
1238/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1308/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1239#define OMAP4430_VC_RAERR_EN_SHIFT 12 1309#define OMAP4430_VC_RAERR_EN_SHIFT 12
1240#define OMAP4430_VC_RAERR_EN_MASK BITFIELD(12, 12) 1310#define OMAP4430_VC_RAERR_EN_MASK (1 << 12)
1241 1311
1242/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1312/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1243#define OMAP4430_VC_RAERR_ST_SHIFT 12 1313#define OMAP4430_VC_RAERR_ST_SHIFT 12
1244#define OMAP4430_VC_RAERR_ST_MASK BITFIELD(12, 12) 1314#define OMAP4430_VC_RAERR_ST_MASK (1 << 12)
1245 1315
1246/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1316/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1247#define OMAP4430_VC_SAERR_EN_SHIFT 11 1317#define OMAP4430_VC_SAERR_EN_SHIFT 11
1248#define OMAP4430_VC_SAERR_EN_MASK BITFIELD(11, 11) 1318#define OMAP4430_VC_SAERR_EN_MASK (1 << 11)
1249 1319
1250/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1320/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1251#define OMAP4430_VC_SAERR_ST_SHIFT 11 1321#define OMAP4430_VC_SAERR_ST_SHIFT 11
1252#define OMAP4430_VC_SAERR_ST_MASK BITFIELD(11, 11) 1322#define OMAP4430_VC_SAERR_ST_MASK (1 << 11)
1253 1323
1254/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1324/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1255#define OMAP4430_VC_TOERR_EN_SHIFT 13 1325#define OMAP4430_VC_TOERR_EN_SHIFT 13
1256#define OMAP4430_VC_TOERR_EN_MASK BITFIELD(13, 13) 1326#define OMAP4430_VC_TOERR_EN_MASK (1 << 13)
1257 1327
1258/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1328/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1259#define OMAP4430_VC_TOERR_ST_SHIFT 13 1329#define OMAP4430_VC_TOERR_ST_SHIFT 13
1260#define OMAP4430_VC_TOERR_ST_MASK BITFIELD(13, 13) 1330#define OMAP4430_VC_TOERR_ST_MASK (1 << 13)
1261 1331
1262/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_IVA_VLIMITTO, PRM_VP_MPU_VLIMITTO */ 1332/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_IVA_VLIMITTO, PRM_VP_MPU_VLIMITTO */
1263#define OMAP4430_VDDMAX_SHIFT 24 1333#define OMAP4430_VDDMAX_SHIFT 24
1264#define OMAP4430_VDDMAX_MASK BITFIELD(24, 31) 1334#define OMAP4430_VDDMAX_MASK (0xff << 24)
1265 1335
1266/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_IVA_VLIMITTO, PRM_VP_MPU_VLIMITTO */ 1336/* Used by PRM_VP_CORE_VLIMITTO, PRM_VP_IVA_VLIMITTO, PRM_VP_MPU_VLIMITTO */
1267#define OMAP4430_VDDMIN_SHIFT 16 1337#define OMAP4430_VDDMIN_SHIFT 16
1268#define OMAP4430_VDDMIN_MASK BITFIELD(16, 23) 1338#define OMAP4430_VDDMIN_MASK (0xff << 16)
1269 1339
1270/* Used by PRM_VOLTCTRL */ 1340/* Used by PRM_VOLTCTRL */
1271#define OMAP4430_VDD_CORE_I2C_DISABLE_SHIFT 12 1341#define OMAP4430_VDD_CORE_I2C_DISABLE_SHIFT 12
1272#define OMAP4430_VDD_CORE_I2C_DISABLE_MASK BITFIELD(12, 12) 1342#define OMAP4430_VDD_CORE_I2C_DISABLE_MASK (1 << 12)
1273 1343
1274/* Used by PRM_RSTST */ 1344/* Used by PRM_RSTST */
1275#define OMAP4430_VDD_CORE_VOLT_MGR_RST_SHIFT 8 1345#define OMAP4430_VDD_CORE_VOLT_MGR_RST_SHIFT 8
1276#define OMAP4430_VDD_CORE_VOLT_MGR_RST_MASK BITFIELD(8, 8) 1346#define OMAP4430_VDD_CORE_VOLT_MGR_RST_MASK (1 << 8)
1277 1347
1278/* Used by PRM_VOLTCTRL */ 1348/* Used by PRM_VOLTCTRL */
1279#define OMAP4430_VDD_IVA_I2C_DISABLE_SHIFT 14 1349#define OMAP4430_VDD_IVA_I2C_DISABLE_SHIFT 14
1280#define OMAP4430_VDD_IVA_I2C_DISABLE_MASK BITFIELD(14, 14) 1350#define OMAP4430_VDD_IVA_I2C_DISABLE_MASK (1 << 14)
1281 1351
1282/* Used by PRM_VOLTCTRL */ 1352/* Used by PRM_VOLTCTRL */
1283#define OMAP4430_VDD_IVA_PRESENCE_SHIFT 9 1353#define OMAP4430_VDD_IVA_PRESENCE_SHIFT 9
1284#define OMAP4430_VDD_IVA_PRESENCE_MASK BITFIELD(9, 9) 1354#define OMAP4430_VDD_IVA_PRESENCE_MASK (1 << 9)
1285 1355
1286/* Used by PRM_RSTST */ 1356/* Used by PRM_RSTST */
1287#define OMAP4430_VDD_IVA_VOLT_MGR_RST_SHIFT 7 1357#define OMAP4430_VDD_IVA_VOLT_MGR_RST_SHIFT 7
1288#define OMAP4430_VDD_IVA_VOLT_MGR_RST_MASK BITFIELD(7, 7) 1358#define OMAP4430_VDD_IVA_VOLT_MGR_RST_MASK (1 << 7)
1289 1359
1290/* Used by PRM_VOLTCTRL */ 1360/* Used by PRM_VOLTCTRL */
1291#define OMAP4430_VDD_MPU_I2C_DISABLE_SHIFT 13 1361#define OMAP4430_VDD_MPU_I2C_DISABLE_SHIFT 13
1292#define OMAP4430_VDD_MPU_I2C_DISABLE_MASK BITFIELD(13, 13) 1362#define OMAP4430_VDD_MPU_I2C_DISABLE_MASK (1 << 13)
1293 1363
1294/* Used by PRM_VOLTCTRL */ 1364/* Used by PRM_VOLTCTRL */
1295#define OMAP4430_VDD_MPU_PRESENCE_SHIFT 8 1365#define OMAP4430_VDD_MPU_PRESENCE_SHIFT 8
1296#define OMAP4430_VDD_MPU_PRESENCE_MASK BITFIELD(8, 8) 1366#define OMAP4430_VDD_MPU_PRESENCE_MASK (1 << 8)
1297 1367
1298/* Used by PRM_RSTST */ 1368/* Used by PRM_RSTST */
1299#define OMAP4430_VDD_MPU_VOLT_MGR_RST_SHIFT 6 1369#define OMAP4430_VDD_MPU_VOLT_MGR_RST_SHIFT 6
1300#define OMAP4430_VDD_MPU_VOLT_MGR_RST_MASK BITFIELD(6, 6) 1370#define OMAP4430_VDD_MPU_VOLT_MGR_RST_MASK (1 << 6)
1371
1372/* Used by PRM_VC_ERRST */
1373#define OMAP4430_VFSM_RA_ERR_CORE_SHIFT 4
1374#define OMAP4430_VFSM_RA_ERR_CORE_MASK (1 << 4)
1375
1376/* Used by PRM_VC_ERRST */
1377#define OMAP4430_VFSM_RA_ERR_IVA_SHIFT 12
1378#define OMAP4430_VFSM_RA_ERR_IVA_MASK (1 << 12)
1379
1380/* Used by PRM_VC_ERRST */
1381#define OMAP4430_VFSM_RA_ERR_MPU_SHIFT 20
1382#define OMAP4430_VFSM_RA_ERR_MPU_MASK (1 << 20)
1383
1384/* Used by PRM_VC_ERRST */
1385#define OMAP4430_VFSM_SA_ERR_CORE_SHIFT 3
1386#define OMAP4430_VFSM_SA_ERR_CORE_MASK (1 << 3)
1387
1388/* Used by PRM_VC_ERRST */
1389#define OMAP4430_VFSM_SA_ERR_IVA_SHIFT 11
1390#define OMAP4430_VFSM_SA_ERR_IVA_MASK (1 << 11)
1391
1392/* Used by PRM_VC_ERRST */
1393#define OMAP4430_VFSM_SA_ERR_MPU_SHIFT 19
1394#define OMAP4430_VFSM_SA_ERR_MPU_MASK (1 << 19)
1395
1396/* Used by PRM_VC_ERRST */
1397#define OMAP4430_VFSM_TIMEOUT_ERR_CORE_SHIFT 5
1398#define OMAP4430_VFSM_TIMEOUT_ERR_CORE_MASK (1 << 5)
1399
1400/* Used by PRM_VC_ERRST */
1401#define OMAP4430_VFSM_TIMEOUT_ERR_IVA_SHIFT 13
1402#define OMAP4430_VFSM_TIMEOUT_ERR_IVA_MASK (1 << 13)
1403
1404/* Used by PRM_VC_ERRST */
1405#define OMAP4430_VFSM_TIMEOUT_ERR_MPU_SHIFT 21
1406#define OMAP4430_VFSM_TIMEOUT_ERR_MPU_MASK (1 << 21)
1301 1407
1302/* Used by PRM_VC_VAL_SMPS_RA_VOL */ 1408/* Used by PRM_VC_VAL_SMPS_RA_VOL */
1303#define OMAP4430_VOLRA_VDD_CORE_L_SHIFT 0 1409#define OMAP4430_VOLRA_VDD_CORE_L_SHIFT 0
1304#define OMAP4430_VOLRA_VDD_CORE_L_MASK BITFIELD(0, 7) 1410#define OMAP4430_VOLRA_VDD_CORE_L_MASK (0xff << 0)
1305 1411
1306/* Used by PRM_VC_VAL_SMPS_RA_VOL */ 1412/* Used by PRM_VC_VAL_SMPS_RA_VOL */
1307#define OMAP4430_VOLRA_VDD_IVA_L_SHIFT 8 1413#define OMAP4430_VOLRA_VDD_IVA_L_SHIFT 8
1308#define OMAP4430_VOLRA_VDD_IVA_L_MASK BITFIELD(8, 15) 1414#define OMAP4430_VOLRA_VDD_IVA_L_MASK (0xff << 8)
1309 1415
1310/* Used by PRM_VC_VAL_SMPS_RA_VOL */ 1416/* Used by PRM_VC_VAL_SMPS_RA_VOL */
1311#define OMAP4430_VOLRA_VDD_MPU_L_SHIFT 16 1417#define OMAP4430_VOLRA_VDD_MPU_L_SHIFT 16
1312#define OMAP4430_VOLRA_VDD_MPU_L_MASK BITFIELD(16, 23) 1418#define OMAP4430_VOLRA_VDD_MPU_L_MASK (0xff << 16)
1313 1419
1314/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */ 1420/* Used by PRM_VP_CORE_CONFIG, PRM_VP_IVA_CONFIG, PRM_VP_MPU_CONFIG */
1315#define OMAP4430_VPENABLE_SHIFT 0 1421#define OMAP4430_VPENABLE_SHIFT 0
1316#define OMAP4430_VPENABLE_MASK BITFIELD(0, 0) 1422#define OMAP4430_VPENABLE_MASK (1 << 0)
1317 1423
1318/* Used by PRM_VP_CORE_STATUS, PRM_VP_IVA_STATUS, PRM_VP_MPU_STATUS */ 1424/* Used by PRM_VP_CORE_STATUS, PRM_VP_IVA_STATUS, PRM_VP_MPU_STATUS */
1319#define OMAP4430_VPINIDLE_SHIFT 0 1425#define OMAP4430_VPINIDLE_SHIFT 0
1320#define OMAP4430_VPINIDLE_MASK BITFIELD(0, 0) 1426#define OMAP4430_VPINIDLE_MASK (1 << 0)
1321 1427
1322/* Used by PRM_VP_CORE_VOLTAGE, PRM_VP_IVA_VOLTAGE, PRM_VP_MPU_VOLTAGE */ 1428/* Used by PRM_VP_CORE_VOLTAGE, PRM_VP_IVA_VOLTAGE, PRM_VP_MPU_VOLTAGE */
1323#define OMAP4430_VPVOLTAGE_SHIFT 0 1429#define OMAP4430_VPVOLTAGE_SHIFT 0
1324#define OMAP4430_VPVOLTAGE_MASK BITFIELD(0, 7) 1430#define OMAP4430_VPVOLTAGE_MASK (0xff << 0)
1325 1431
1326/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1432/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1327#define OMAP4430_VP_CORE_EQVALUE_EN_SHIFT 20 1433#define OMAP4430_VP_CORE_EQVALUE_EN_SHIFT 20
1328#define OMAP4430_VP_CORE_EQVALUE_EN_MASK BITFIELD(20, 20) 1434#define OMAP4430_VP_CORE_EQVALUE_EN_MASK (1 << 20)
1329 1435
1330/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1436/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1331#define OMAP4430_VP_CORE_EQVALUE_ST_SHIFT 20 1437#define OMAP4430_VP_CORE_EQVALUE_ST_SHIFT 20
1332#define OMAP4430_VP_CORE_EQVALUE_ST_MASK BITFIELD(20, 20) 1438#define OMAP4430_VP_CORE_EQVALUE_ST_MASK (1 << 20)
1333 1439
1334/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1440/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1335#define OMAP4430_VP_CORE_MAXVDD_EN_SHIFT 18 1441#define OMAP4430_VP_CORE_MAXVDD_EN_SHIFT 18
1336#define OMAP4430_VP_CORE_MAXVDD_EN_MASK BITFIELD(18, 18) 1442#define OMAP4430_VP_CORE_MAXVDD_EN_MASK (1 << 18)
1337 1443
1338/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1444/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1339#define OMAP4430_VP_CORE_MAXVDD_ST_SHIFT 18 1445#define OMAP4430_VP_CORE_MAXVDD_ST_SHIFT 18
1340#define OMAP4430_VP_CORE_MAXVDD_ST_MASK BITFIELD(18, 18) 1446#define OMAP4430_VP_CORE_MAXVDD_ST_MASK (1 << 18)
1341 1447
1342/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1448/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1343#define OMAP4430_VP_CORE_MINVDD_EN_SHIFT 17 1449#define OMAP4430_VP_CORE_MINVDD_EN_SHIFT 17
1344#define OMAP4430_VP_CORE_MINVDD_EN_MASK BITFIELD(17, 17) 1450#define OMAP4430_VP_CORE_MINVDD_EN_MASK (1 << 17)
1345 1451
1346/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1452/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1347#define OMAP4430_VP_CORE_MINVDD_ST_SHIFT 17 1453#define OMAP4430_VP_CORE_MINVDD_ST_SHIFT 17
1348#define OMAP4430_VP_CORE_MINVDD_ST_MASK BITFIELD(17, 17) 1454#define OMAP4430_VP_CORE_MINVDD_ST_MASK (1 << 17)
1349 1455
1350/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1456/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1351#define OMAP4430_VP_CORE_NOSMPSACK_EN_SHIFT 19 1457#define OMAP4430_VP_CORE_NOSMPSACK_EN_SHIFT 19
1352#define OMAP4430_VP_CORE_NOSMPSACK_EN_MASK BITFIELD(19, 19) 1458#define OMAP4430_VP_CORE_NOSMPSACK_EN_MASK (1 << 19)
1353 1459
1354/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1460/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1355#define OMAP4430_VP_CORE_NOSMPSACK_ST_SHIFT 19 1461#define OMAP4430_VP_CORE_NOSMPSACK_ST_SHIFT 19
1356#define OMAP4430_VP_CORE_NOSMPSACK_ST_MASK BITFIELD(19, 19) 1462#define OMAP4430_VP_CORE_NOSMPSACK_ST_MASK (1 << 19)
1357 1463
1358/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1464/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1359#define OMAP4430_VP_CORE_OPPCHANGEDONE_EN_SHIFT 16 1465#define OMAP4430_VP_CORE_OPPCHANGEDONE_EN_SHIFT 16
1360#define OMAP4430_VP_CORE_OPPCHANGEDONE_EN_MASK BITFIELD(16, 16) 1466#define OMAP4430_VP_CORE_OPPCHANGEDONE_EN_MASK (1 << 16)
1361 1467
1362/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1468/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1363#define OMAP4430_VP_CORE_OPPCHANGEDONE_ST_SHIFT 16 1469#define OMAP4430_VP_CORE_OPPCHANGEDONE_ST_SHIFT 16
1364#define OMAP4430_VP_CORE_OPPCHANGEDONE_ST_MASK BITFIELD(16, 16) 1470#define OMAP4430_VP_CORE_OPPCHANGEDONE_ST_MASK (1 << 16)
1365 1471
1366/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1472/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1367#define OMAP4430_VP_CORE_TRANXDONE_EN_SHIFT 21 1473#define OMAP4430_VP_CORE_TRANXDONE_EN_SHIFT 21
1368#define OMAP4430_VP_CORE_TRANXDONE_EN_MASK BITFIELD(21, 21) 1474#define OMAP4430_VP_CORE_TRANXDONE_EN_MASK (1 << 21)
1369 1475
1370/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1476/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1371#define OMAP4430_VP_CORE_TRANXDONE_ST_SHIFT 21 1477#define OMAP4430_VP_CORE_TRANXDONE_ST_SHIFT 21
1372#define OMAP4430_VP_CORE_TRANXDONE_ST_MASK BITFIELD(21, 21) 1478#define OMAP4430_VP_CORE_TRANXDONE_ST_MASK (1 << 21)
1373 1479
1374/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1480/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1375#define OMAP4430_VP_IVA_EQVALUE_EN_SHIFT 28 1481#define OMAP4430_VP_IVA_EQVALUE_EN_SHIFT 28
1376#define OMAP4430_VP_IVA_EQVALUE_EN_MASK BITFIELD(28, 28) 1482#define OMAP4430_VP_IVA_EQVALUE_EN_MASK (1 << 28)
1377 1483
1378/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1484/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1379#define OMAP4430_VP_IVA_EQVALUE_ST_SHIFT 28 1485#define OMAP4430_VP_IVA_EQVALUE_ST_SHIFT 28
1380#define OMAP4430_VP_IVA_EQVALUE_ST_MASK BITFIELD(28, 28) 1486#define OMAP4430_VP_IVA_EQVALUE_ST_MASK (1 << 28)
1381 1487
1382/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1488/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1383#define OMAP4430_VP_IVA_MAXVDD_EN_SHIFT 26 1489#define OMAP4430_VP_IVA_MAXVDD_EN_SHIFT 26
1384#define OMAP4430_VP_IVA_MAXVDD_EN_MASK BITFIELD(26, 26) 1490#define OMAP4430_VP_IVA_MAXVDD_EN_MASK (1 << 26)
1385 1491
1386/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1492/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1387#define OMAP4430_VP_IVA_MAXVDD_ST_SHIFT 26 1493#define OMAP4430_VP_IVA_MAXVDD_ST_SHIFT 26
1388#define OMAP4430_VP_IVA_MAXVDD_ST_MASK BITFIELD(26, 26) 1494#define OMAP4430_VP_IVA_MAXVDD_ST_MASK (1 << 26)
1389 1495
1390/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1496/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1391#define OMAP4430_VP_IVA_MINVDD_EN_SHIFT 25 1497#define OMAP4430_VP_IVA_MINVDD_EN_SHIFT 25
1392#define OMAP4430_VP_IVA_MINVDD_EN_MASK BITFIELD(25, 25) 1498#define OMAP4430_VP_IVA_MINVDD_EN_MASK (1 << 25)
1393 1499
1394/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1500/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1395#define OMAP4430_VP_IVA_MINVDD_ST_SHIFT 25 1501#define OMAP4430_VP_IVA_MINVDD_ST_SHIFT 25
1396#define OMAP4430_VP_IVA_MINVDD_ST_MASK BITFIELD(25, 25) 1502#define OMAP4430_VP_IVA_MINVDD_ST_MASK (1 << 25)
1397 1503
1398/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1504/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1399#define OMAP4430_VP_IVA_NOSMPSACK_EN_SHIFT 27 1505#define OMAP4430_VP_IVA_NOSMPSACK_EN_SHIFT 27
1400#define OMAP4430_VP_IVA_NOSMPSACK_EN_MASK BITFIELD(27, 27) 1506#define OMAP4430_VP_IVA_NOSMPSACK_EN_MASK (1 << 27)
1401 1507
1402/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1508/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1403#define OMAP4430_VP_IVA_NOSMPSACK_ST_SHIFT 27 1509#define OMAP4430_VP_IVA_NOSMPSACK_ST_SHIFT 27
1404#define OMAP4430_VP_IVA_NOSMPSACK_ST_MASK BITFIELD(27, 27) 1510#define OMAP4430_VP_IVA_NOSMPSACK_ST_MASK (1 << 27)
1405 1511
1406/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1512/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1407#define OMAP4430_VP_IVA_OPPCHANGEDONE_EN_SHIFT 24 1513#define OMAP4430_VP_IVA_OPPCHANGEDONE_EN_SHIFT 24
1408#define OMAP4430_VP_IVA_OPPCHANGEDONE_EN_MASK BITFIELD(24, 24) 1514#define OMAP4430_VP_IVA_OPPCHANGEDONE_EN_MASK (1 << 24)
1409 1515
1410/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1516/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1411#define OMAP4430_VP_IVA_OPPCHANGEDONE_ST_SHIFT 24 1517#define OMAP4430_VP_IVA_OPPCHANGEDONE_ST_SHIFT 24
1412#define OMAP4430_VP_IVA_OPPCHANGEDONE_ST_MASK BITFIELD(24, 24) 1518#define OMAP4430_VP_IVA_OPPCHANGEDONE_ST_MASK (1 << 24)
1413 1519
1414/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */ 1520/* Used by PRM_IRQENABLE_DUCATI, PRM_IRQENABLE_MPU */
1415#define OMAP4430_VP_IVA_TRANXDONE_EN_SHIFT 29 1521#define OMAP4430_VP_IVA_TRANXDONE_EN_SHIFT 29
1416#define OMAP4430_VP_IVA_TRANXDONE_EN_MASK BITFIELD(29, 29) 1522#define OMAP4430_VP_IVA_TRANXDONE_EN_MASK (1 << 29)
1417 1523
1418/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */ 1524/* Used by PRM_IRQSTATUS_DUCATI, PRM_IRQSTATUS_MPU */
1419#define OMAP4430_VP_IVA_TRANXDONE_ST_SHIFT 29 1525#define OMAP4430_VP_IVA_TRANXDONE_ST_SHIFT 29
1420#define OMAP4430_VP_IVA_TRANXDONE_ST_MASK BITFIELD(29, 29) 1526#define OMAP4430_VP_IVA_TRANXDONE_ST_MASK (1 << 29)
1421 1527
1422/* Used by PRM_IRQENABLE_MPU_2 */ 1528/* Used by PRM_IRQENABLE_MPU_2 */
1423#define OMAP4430_VP_MPU_EQVALUE_EN_SHIFT 4 1529#define OMAP4430_VP_MPU_EQVALUE_EN_SHIFT 4
1424#define OMAP4430_VP_MPU_EQVALUE_EN_MASK BITFIELD(4, 4) 1530#define OMAP4430_VP_MPU_EQVALUE_EN_MASK (1 << 4)
1425 1531
1426/* Used by PRM_IRQSTATUS_MPU_2 */ 1532/* Used by PRM_IRQSTATUS_MPU_2 */
1427#define OMAP4430_VP_MPU_EQVALUE_ST_SHIFT 4 1533#define OMAP4430_VP_MPU_EQVALUE_ST_SHIFT 4
1428#define OMAP4430_VP_MPU_EQVALUE_ST_MASK BITFIELD(4, 4) 1534#define OMAP4430_VP_MPU_EQVALUE_ST_MASK (1 << 4)
1429 1535
1430/* Used by PRM_IRQENABLE_MPU_2 */ 1536/* Used by PRM_IRQENABLE_MPU_2 */
1431#define OMAP4430_VP_MPU_MAXVDD_EN_SHIFT 2 1537#define OMAP4430_VP_MPU_MAXVDD_EN_SHIFT 2
1432#define OMAP4430_VP_MPU_MAXVDD_EN_MASK BITFIELD(2, 2) 1538#define OMAP4430_VP_MPU_MAXVDD_EN_MASK (1 << 2)
1433 1539
1434/* Used by PRM_IRQSTATUS_MPU_2 */ 1540/* Used by PRM_IRQSTATUS_MPU_2 */
1435#define OMAP4430_VP_MPU_MAXVDD_ST_SHIFT 2 1541#define OMAP4430_VP_MPU_MAXVDD_ST_SHIFT 2
1436#define OMAP4430_VP_MPU_MAXVDD_ST_MASK BITFIELD(2, 2) 1542#define OMAP4430_VP_MPU_MAXVDD_ST_MASK (1 << 2)
1437 1543
1438/* Used by PRM_IRQENABLE_MPU_2 */ 1544/* Used by PRM_IRQENABLE_MPU_2 */
1439#define OMAP4430_VP_MPU_MINVDD_EN_SHIFT 1 1545#define OMAP4430_VP_MPU_MINVDD_EN_SHIFT 1
1440#define OMAP4430_VP_MPU_MINVDD_EN_MASK BITFIELD(1, 1) 1546#define OMAP4430_VP_MPU_MINVDD_EN_MASK (1 << 1)
1441 1547
1442/* Used by PRM_IRQSTATUS_MPU_2 */ 1548/* Used by PRM_IRQSTATUS_MPU_2 */
1443#define OMAP4430_VP_MPU_MINVDD_ST_SHIFT 1 1549#define OMAP4430_VP_MPU_MINVDD_ST_SHIFT 1
1444#define OMAP4430_VP_MPU_MINVDD_ST_MASK BITFIELD(1, 1) 1550#define OMAP4430_VP_MPU_MINVDD_ST_MASK (1 << 1)
1445 1551
1446/* Used by PRM_IRQENABLE_MPU_2 */ 1552/* Used by PRM_IRQENABLE_MPU_2 */
1447#define OMAP4430_VP_MPU_NOSMPSACK_EN_SHIFT 3 1553#define OMAP4430_VP_MPU_NOSMPSACK_EN_SHIFT 3
1448#define OMAP4430_VP_MPU_NOSMPSACK_EN_MASK BITFIELD(3, 3) 1554#define OMAP4430_VP_MPU_NOSMPSACK_EN_MASK (1 << 3)
1449 1555
1450/* Used by PRM_IRQSTATUS_MPU_2 */ 1556/* Used by PRM_IRQSTATUS_MPU_2 */
1451#define OMAP4430_VP_MPU_NOSMPSACK_ST_SHIFT 3 1557#define OMAP4430_VP_MPU_NOSMPSACK_ST_SHIFT 3
1452#define OMAP4430_VP_MPU_NOSMPSACK_ST_MASK BITFIELD(3, 3) 1558#define OMAP4430_VP_MPU_NOSMPSACK_ST_MASK (1 << 3)
1453 1559
1454/* Used by PRM_IRQENABLE_MPU_2 */ 1560/* Used by PRM_IRQENABLE_MPU_2 */
1455#define OMAP4430_VP_MPU_OPPCHANGEDONE_EN_SHIFT 0 1561#define OMAP4430_VP_MPU_OPPCHANGEDONE_EN_SHIFT 0
1456#define OMAP4430_VP_MPU_OPPCHANGEDONE_EN_MASK BITFIELD(0, 0) 1562#define OMAP4430_VP_MPU_OPPCHANGEDONE_EN_MASK (1 << 0)
1457 1563
1458/* Used by PRM_IRQSTATUS_MPU_2 */ 1564/* Used by PRM_IRQSTATUS_MPU_2 */
1459#define OMAP4430_VP_MPU_OPPCHANGEDONE_ST_SHIFT 0 1565#define OMAP4430_VP_MPU_OPPCHANGEDONE_ST_SHIFT 0
1460#define OMAP4430_VP_MPU_OPPCHANGEDONE_ST_MASK BITFIELD(0, 0) 1566#define OMAP4430_VP_MPU_OPPCHANGEDONE_ST_MASK (1 << 0)
1461 1567
1462/* Used by PRM_IRQENABLE_MPU_2 */ 1568/* Used by PRM_IRQENABLE_MPU_2 */
1463#define OMAP4430_VP_MPU_TRANXDONE_EN_SHIFT 5 1569#define OMAP4430_VP_MPU_TRANXDONE_EN_SHIFT 5
1464#define OMAP4430_VP_MPU_TRANXDONE_EN_MASK BITFIELD(5, 5) 1570#define OMAP4430_VP_MPU_TRANXDONE_EN_MASK (1 << 5)
1465 1571
1466/* Used by PRM_IRQSTATUS_MPU_2 */ 1572/* Used by PRM_IRQSTATUS_MPU_2 */
1467#define OMAP4430_VP_MPU_TRANXDONE_ST_SHIFT 5 1573#define OMAP4430_VP_MPU_TRANXDONE_ST_SHIFT 5
1468#define OMAP4430_VP_MPU_TRANXDONE_ST_MASK BITFIELD(5, 5) 1574#define OMAP4430_VP_MPU_TRANXDONE_ST_MASK (1 << 5)
1469 1575
1470/* Used by PRM_SRAM_COUNT */ 1576/* Used by PRM_SRAM_COUNT */
1471#define OMAP4430_VSETUPCNT_VALUE_SHIFT 8 1577#define OMAP4430_VSETUPCNT_VALUE_SHIFT 8
1472#define OMAP4430_VSETUPCNT_VALUE_MASK BITFIELD(8, 15) 1578#define OMAP4430_VSETUPCNT_VALUE_MASK (0xff << 8)
1473 1579
1474/* Used by PRM_VP_CORE_VSTEPMAX, PRM_VP_IVA_VSTEPMAX, PRM_VP_MPU_VSTEPMAX */ 1580/* Used by PRM_VP_CORE_VSTEPMAX, PRM_VP_IVA_VSTEPMAX, PRM_VP_MPU_VSTEPMAX */
1475#define OMAP4430_VSTEPMAX_SHIFT 0 1581#define OMAP4430_VSTEPMAX_SHIFT 0
1476#define OMAP4430_VSTEPMAX_MASK BITFIELD(0, 7) 1582#define OMAP4430_VSTEPMAX_MASK (0xff << 0)
1477 1583
1478/* Used by PRM_VP_CORE_VSTEPMIN, PRM_VP_IVA_VSTEPMIN, PRM_VP_MPU_VSTEPMIN */ 1584/* Used by PRM_VP_CORE_VSTEPMIN, PRM_VP_IVA_VSTEPMIN, PRM_VP_MPU_VSTEPMIN */
1479#define OMAP4430_VSTEPMIN_SHIFT 0 1585#define OMAP4430_VSTEPMIN_SHIFT 0
1480#define OMAP4430_VSTEPMIN_MASK BITFIELD(0, 7) 1586#define OMAP4430_VSTEPMIN_MASK (0xff << 0)
1481 1587
1482/* Used by PRM_MODEM_IF_CTRL */ 1588/* Used by PRM_MODEM_IF_CTRL */
1483#define OMAP4430_WAKE_MODEM_SHIFT 0 1589#define OMAP4430_WAKE_MODEM_SHIFT 0
1484#define OMAP4430_WAKE_MODEM_MASK BITFIELD(0, 0) 1590#define OMAP4430_WAKE_MODEM_MASK (1 << 0)
1485 1591
1486/* Used by PM_DSS_DSS_WKDEP */ 1592/* Used by PM_DSS_DSS_WKDEP */
1487#define OMAP4430_WKUPDEP_DISPC_DUCATI_SHIFT 1 1593#define OMAP4430_WKUPDEP_DISPC_DUCATI_SHIFT 1
1488#define OMAP4430_WKUPDEP_DISPC_DUCATI_MASK BITFIELD(1, 1) 1594#define OMAP4430_WKUPDEP_DISPC_DUCATI_MASK (1 << 1)
1489 1595
1490/* Used by PM_DSS_DSS_WKDEP */ 1596/* Used by PM_DSS_DSS_WKDEP */
1491#define OMAP4430_WKUPDEP_DISPC_MPU_SHIFT 0 1597#define OMAP4430_WKUPDEP_DISPC_MPU_SHIFT 0
1492#define OMAP4430_WKUPDEP_DISPC_MPU_MASK BITFIELD(0, 0) 1598#define OMAP4430_WKUPDEP_DISPC_MPU_MASK (1 << 0)
1493 1599
1494/* Used by PM_DSS_DSS_WKDEP */ 1600/* Used by PM_DSS_DSS_WKDEP */
1495#define OMAP4430_WKUPDEP_DISPC_SDMA_SHIFT 3 1601#define OMAP4430_WKUPDEP_DISPC_SDMA_SHIFT 3
1496#define OMAP4430_WKUPDEP_DISPC_SDMA_MASK BITFIELD(3, 3) 1602#define OMAP4430_WKUPDEP_DISPC_SDMA_MASK (1 << 3)
1497 1603
1498/* Used by PM_DSS_DSS_WKDEP */ 1604/* Used by PM_DSS_DSS_WKDEP */
1499#define OMAP4430_WKUPDEP_DISPC_TESLA_SHIFT 2 1605#define OMAP4430_WKUPDEP_DISPC_TESLA_SHIFT 2
1500#define OMAP4430_WKUPDEP_DISPC_TESLA_MASK BITFIELD(2, 2) 1606#define OMAP4430_WKUPDEP_DISPC_TESLA_MASK (1 << 2)
1501 1607
1502/* Used by PM_ABE_DMIC_WKDEP */ 1608/* Used by PM_ABE_DMIC_WKDEP */
1503#define OMAP4430_WKUPDEP_DMIC_DMA_SDMA_SHIFT 7 1609#define OMAP4430_WKUPDEP_DMIC_DMA_SDMA_SHIFT 7
1504#define OMAP4430_WKUPDEP_DMIC_DMA_SDMA_MASK BITFIELD(7, 7) 1610#define OMAP4430_WKUPDEP_DMIC_DMA_SDMA_MASK (1 << 7)
1505 1611
1506/* Used by PM_ABE_DMIC_WKDEP */ 1612/* Used by PM_ABE_DMIC_WKDEP */
1507#define OMAP4430_WKUPDEP_DMIC_DMA_TESLA_SHIFT 6 1613#define OMAP4430_WKUPDEP_DMIC_DMA_TESLA_SHIFT 6
1508#define OMAP4430_WKUPDEP_DMIC_DMA_TESLA_MASK BITFIELD(6, 6) 1614#define OMAP4430_WKUPDEP_DMIC_DMA_TESLA_MASK (1 << 6)
1509 1615
1510/* Used by PM_ABE_DMIC_WKDEP */ 1616/* Used by PM_ABE_DMIC_WKDEP */
1511#define OMAP4430_WKUPDEP_DMIC_IRQ_MPU_SHIFT 0 1617#define OMAP4430_WKUPDEP_DMIC_IRQ_MPU_SHIFT 0
1512#define OMAP4430_WKUPDEP_DMIC_IRQ_MPU_MASK BITFIELD(0, 0) 1618#define OMAP4430_WKUPDEP_DMIC_IRQ_MPU_MASK (1 << 0)
1513 1619
1514/* Used by PM_ABE_DMIC_WKDEP */ 1620/* Used by PM_ABE_DMIC_WKDEP */
1515#define OMAP4430_WKUPDEP_DMIC_IRQ_TESLA_SHIFT 2 1621#define OMAP4430_WKUPDEP_DMIC_IRQ_TESLA_SHIFT 2
1516#define OMAP4430_WKUPDEP_DMIC_IRQ_TESLA_MASK BITFIELD(2, 2) 1622#define OMAP4430_WKUPDEP_DMIC_IRQ_TESLA_MASK (1 << 2)
1517 1623
1518/* Used by PM_L4PER_DMTIMER10_WKDEP */ 1624/* Used by PM_L4PER_DMTIMER10_WKDEP */
1519#define OMAP4430_WKUPDEP_DMTIMER10_MPU_SHIFT 0 1625#define OMAP4430_WKUPDEP_DMTIMER10_MPU_SHIFT 0
1520#define OMAP4430_WKUPDEP_DMTIMER10_MPU_MASK BITFIELD(0, 0) 1626#define OMAP4430_WKUPDEP_DMTIMER10_MPU_MASK (1 << 0)
1521 1627
1522/* Used by PM_L4PER_DMTIMER11_WKDEP */ 1628/* Used by PM_L4PER_DMTIMER11_WKDEP */
1523#define OMAP4430_WKUPDEP_DMTIMER11_DUCATI_SHIFT 1 1629#define OMAP4430_WKUPDEP_DMTIMER11_DUCATI_SHIFT 1
1524#define OMAP4430_WKUPDEP_DMTIMER11_DUCATI_MASK BITFIELD(1, 1) 1630#define OMAP4430_WKUPDEP_DMTIMER11_DUCATI_MASK (1 << 1)
1525 1631
1526/* Used by PM_L4PER_DMTIMER11_WKDEP */ 1632/* Used by PM_L4PER_DMTIMER11_WKDEP */
1527#define OMAP4430_WKUPDEP_DMTIMER11_MPU_SHIFT 0 1633#define OMAP4430_WKUPDEP_DMTIMER11_MPU_SHIFT 0
1528#define OMAP4430_WKUPDEP_DMTIMER11_MPU_MASK BITFIELD(0, 0) 1634#define OMAP4430_WKUPDEP_DMTIMER11_MPU_MASK (1 << 0)
1529 1635
1530/* Used by PM_L4PER_DMTIMER2_WKDEP */ 1636/* Used by PM_L4PER_DMTIMER2_WKDEP */
1531#define OMAP4430_WKUPDEP_DMTIMER2_MPU_SHIFT 0 1637#define OMAP4430_WKUPDEP_DMTIMER2_MPU_SHIFT 0
1532#define OMAP4430_WKUPDEP_DMTIMER2_MPU_MASK BITFIELD(0, 0) 1638#define OMAP4430_WKUPDEP_DMTIMER2_MPU_MASK (1 << 0)
1533 1639
1534/* Used by PM_L4PER_DMTIMER3_WKDEP */ 1640/* Used by PM_L4PER_DMTIMER3_WKDEP */
1535#define OMAP4430_WKUPDEP_DMTIMER3_DUCATI_SHIFT 1 1641#define OMAP4430_WKUPDEP_DMTIMER3_DUCATI_SHIFT 1
1536#define OMAP4430_WKUPDEP_DMTIMER3_DUCATI_MASK BITFIELD(1, 1) 1642#define OMAP4430_WKUPDEP_DMTIMER3_DUCATI_MASK (1 << 1)
1537 1643
1538/* Used by PM_L4PER_DMTIMER3_WKDEP */ 1644/* Used by PM_L4PER_DMTIMER3_WKDEP */
1539#define OMAP4430_WKUPDEP_DMTIMER3_MPU_SHIFT 0 1645#define OMAP4430_WKUPDEP_DMTIMER3_MPU_SHIFT 0
1540#define OMAP4430_WKUPDEP_DMTIMER3_MPU_MASK BITFIELD(0, 0) 1646#define OMAP4430_WKUPDEP_DMTIMER3_MPU_MASK (1 << 0)
1541 1647
1542/* Used by PM_L4PER_DMTIMER4_WKDEP */ 1648/* Used by PM_L4PER_DMTIMER4_WKDEP */
1543#define OMAP4430_WKUPDEP_DMTIMER4_DUCATI_SHIFT 1 1649#define OMAP4430_WKUPDEP_DMTIMER4_DUCATI_SHIFT 1
1544#define OMAP4430_WKUPDEP_DMTIMER4_DUCATI_MASK BITFIELD(1, 1) 1650#define OMAP4430_WKUPDEP_DMTIMER4_DUCATI_MASK (1 << 1)
1545 1651
1546/* Used by PM_L4PER_DMTIMER4_WKDEP */ 1652/* Used by PM_L4PER_DMTIMER4_WKDEP */
1547#define OMAP4430_WKUPDEP_DMTIMER4_MPU_SHIFT 0 1653#define OMAP4430_WKUPDEP_DMTIMER4_MPU_SHIFT 0
1548#define OMAP4430_WKUPDEP_DMTIMER4_MPU_MASK BITFIELD(0, 0) 1654#define OMAP4430_WKUPDEP_DMTIMER4_MPU_MASK (1 << 0)
1549 1655
1550/* Used by PM_L4PER_DMTIMER9_WKDEP */ 1656/* Used by PM_L4PER_DMTIMER9_WKDEP */
1551#define OMAP4430_WKUPDEP_DMTIMER9_DUCATI_SHIFT 1 1657#define OMAP4430_WKUPDEP_DMTIMER9_DUCATI_SHIFT 1
1552#define OMAP4430_WKUPDEP_DMTIMER9_DUCATI_MASK BITFIELD(1, 1) 1658#define OMAP4430_WKUPDEP_DMTIMER9_DUCATI_MASK (1 << 1)
1553 1659
1554/* Used by PM_L4PER_DMTIMER9_WKDEP */ 1660/* Used by PM_L4PER_DMTIMER9_WKDEP */
1555#define OMAP4430_WKUPDEP_DMTIMER9_MPU_SHIFT 0 1661#define OMAP4430_WKUPDEP_DMTIMER9_MPU_SHIFT 0
1556#define OMAP4430_WKUPDEP_DMTIMER9_MPU_MASK BITFIELD(0, 0) 1662#define OMAP4430_WKUPDEP_DMTIMER9_MPU_MASK (1 << 0)
1557 1663
1558/* Used by PM_DSS_DSS_WKDEP */ 1664/* Used by PM_DSS_DSS_WKDEP */
1559#define OMAP4430_WKUPDEP_DSI1_DUCATI_SHIFT 5 1665#define OMAP4430_WKUPDEP_DSI1_DUCATI_SHIFT 5
1560#define OMAP4430_WKUPDEP_DSI1_DUCATI_MASK BITFIELD(5, 5) 1666#define OMAP4430_WKUPDEP_DSI1_DUCATI_MASK (1 << 5)
1561 1667
1562/* Used by PM_DSS_DSS_WKDEP */ 1668/* Used by PM_DSS_DSS_WKDEP */
1563#define OMAP4430_WKUPDEP_DSI1_MPU_SHIFT 4 1669#define OMAP4430_WKUPDEP_DSI1_MPU_SHIFT 4
1564#define OMAP4430_WKUPDEP_DSI1_MPU_MASK BITFIELD(4, 4) 1670#define OMAP4430_WKUPDEP_DSI1_MPU_MASK (1 << 4)
1565 1671
1566/* Used by PM_DSS_DSS_WKDEP */ 1672/* Used by PM_DSS_DSS_WKDEP */
1567#define OMAP4430_WKUPDEP_DSI1_SDMA_SHIFT 7 1673#define OMAP4430_WKUPDEP_DSI1_SDMA_SHIFT 7
1568#define OMAP4430_WKUPDEP_DSI1_SDMA_MASK BITFIELD(7, 7) 1674#define OMAP4430_WKUPDEP_DSI1_SDMA_MASK (1 << 7)
1569 1675
1570/* Used by PM_DSS_DSS_WKDEP */ 1676/* Used by PM_DSS_DSS_WKDEP */
1571#define OMAP4430_WKUPDEP_DSI1_TESLA_SHIFT 6 1677#define OMAP4430_WKUPDEP_DSI1_TESLA_SHIFT 6
1572#define OMAP4430_WKUPDEP_DSI1_TESLA_MASK BITFIELD(6, 6) 1678#define OMAP4430_WKUPDEP_DSI1_TESLA_MASK (1 << 6)
1573 1679
1574/* Used by PM_DSS_DSS_WKDEP */ 1680/* Used by PM_DSS_DSS_WKDEP */
1575#define OMAP4430_WKUPDEP_DSI2_DUCATI_SHIFT 9 1681#define OMAP4430_WKUPDEP_DSI2_DUCATI_SHIFT 9
1576#define OMAP4430_WKUPDEP_DSI2_DUCATI_MASK BITFIELD(9, 9) 1682#define OMAP4430_WKUPDEP_DSI2_DUCATI_MASK (1 << 9)
1577 1683
1578/* Used by PM_DSS_DSS_WKDEP */ 1684/* Used by PM_DSS_DSS_WKDEP */
1579#define OMAP4430_WKUPDEP_DSI2_MPU_SHIFT 8 1685#define OMAP4430_WKUPDEP_DSI2_MPU_SHIFT 8
1580#define OMAP4430_WKUPDEP_DSI2_MPU_MASK BITFIELD(8, 8) 1686#define OMAP4430_WKUPDEP_DSI2_MPU_MASK (1 << 8)
1581 1687
1582/* Used by PM_DSS_DSS_WKDEP */ 1688/* Used by PM_DSS_DSS_WKDEP */
1583#define OMAP4430_WKUPDEP_DSI2_SDMA_SHIFT 11 1689#define OMAP4430_WKUPDEP_DSI2_SDMA_SHIFT 11
1584#define OMAP4430_WKUPDEP_DSI2_SDMA_MASK BITFIELD(11, 11) 1690#define OMAP4430_WKUPDEP_DSI2_SDMA_MASK (1 << 11)
1585 1691
1586/* Used by PM_DSS_DSS_WKDEP */ 1692/* Used by PM_DSS_DSS_WKDEP */
1587#define OMAP4430_WKUPDEP_DSI2_TESLA_SHIFT 10 1693#define OMAP4430_WKUPDEP_DSI2_TESLA_SHIFT 10
1588#define OMAP4430_WKUPDEP_DSI2_TESLA_MASK BITFIELD(10, 10) 1694#define OMAP4430_WKUPDEP_DSI2_TESLA_MASK (1 << 10)
1589 1695
1590/* Used by PM_WKUP_GPIO1_WKDEP */ 1696/* Used by PM_WKUP_GPIO1_WKDEP */
1591#define OMAP4430_WKUPDEP_GPIO1_IRQ1_DUCATI_SHIFT 1 1697#define OMAP4430_WKUPDEP_GPIO1_IRQ1_DUCATI_SHIFT 1
1592#define OMAP4430_WKUPDEP_GPIO1_IRQ1_DUCATI_MASK BITFIELD(1, 1) 1698#define OMAP4430_WKUPDEP_GPIO1_IRQ1_DUCATI_MASK (1 << 1)
1593 1699
1594/* Used by PM_WKUP_GPIO1_WKDEP */ 1700/* Used by PM_WKUP_GPIO1_WKDEP */
1595#define OMAP4430_WKUPDEP_GPIO1_IRQ1_MPU_SHIFT 0 1701#define OMAP4430_WKUPDEP_GPIO1_IRQ1_MPU_SHIFT 0
1596#define OMAP4430_WKUPDEP_GPIO1_IRQ1_MPU_MASK BITFIELD(0, 0) 1702#define OMAP4430_WKUPDEP_GPIO1_IRQ1_MPU_MASK (1 << 0)
1597 1703
1598/* Used by PM_WKUP_GPIO1_WKDEP */ 1704/* Used by PM_WKUP_GPIO1_WKDEP */
1599#define OMAP4430_WKUPDEP_GPIO1_IRQ2_TESLA_SHIFT 6 1705#define OMAP4430_WKUPDEP_GPIO1_IRQ2_TESLA_SHIFT 6
1600#define OMAP4430_WKUPDEP_GPIO1_IRQ2_TESLA_MASK BITFIELD(6, 6) 1706#define OMAP4430_WKUPDEP_GPIO1_IRQ2_TESLA_MASK (1 << 6)
1601 1707
1602/* Used by PM_L4PER_GPIO2_WKDEP */ 1708/* Used by PM_L4PER_GPIO2_WKDEP */
1603#define OMAP4430_WKUPDEP_GPIO2_IRQ1_DUCATI_SHIFT 1 1709#define OMAP4430_WKUPDEP_GPIO2_IRQ1_DUCATI_SHIFT 1
1604#define OMAP4430_WKUPDEP_GPIO2_IRQ1_DUCATI_MASK BITFIELD(1, 1) 1710#define OMAP4430_WKUPDEP_GPIO2_IRQ1_DUCATI_MASK (1 << 1)
1605 1711
1606/* Used by PM_L4PER_GPIO2_WKDEP */ 1712/* Used by PM_L4PER_GPIO2_WKDEP */
1607#define OMAP4430_WKUPDEP_GPIO2_IRQ1_MPU_SHIFT 0 1713#define OMAP4430_WKUPDEP_GPIO2_IRQ1_MPU_SHIFT 0
1608#define OMAP4430_WKUPDEP_GPIO2_IRQ1_MPU_MASK BITFIELD(0, 0) 1714#define OMAP4430_WKUPDEP_GPIO2_IRQ1_MPU_MASK (1 << 0)
1609 1715
1610/* Used by PM_L4PER_GPIO2_WKDEP */ 1716/* Used by PM_L4PER_GPIO2_WKDEP */
1611#define OMAP4430_WKUPDEP_GPIO2_IRQ2_TESLA_SHIFT 6 1717#define OMAP4430_WKUPDEP_GPIO2_IRQ2_TESLA_SHIFT 6
1612#define OMAP4430_WKUPDEP_GPIO2_IRQ2_TESLA_MASK BITFIELD(6, 6) 1718#define OMAP4430_WKUPDEP_GPIO2_IRQ2_TESLA_MASK (1 << 6)
1613 1719
1614/* Used by PM_L4PER_GPIO3_WKDEP */ 1720/* Used by PM_L4PER_GPIO3_WKDEP */
1615#define OMAP4430_WKUPDEP_GPIO3_IRQ1_MPU_SHIFT 0 1721#define OMAP4430_WKUPDEP_GPIO3_IRQ1_MPU_SHIFT 0
1616#define OMAP4430_WKUPDEP_GPIO3_IRQ1_MPU_MASK BITFIELD(0, 0) 1722#define OMAP4430_WKUPDEP_GPIO3_IRQ1_MPU_MASK (1 << 0)
1617 1723
1618/* Used by PM_L4PER_GPIO3_WKDEP */ 1724/* Used by PM_L4PER_GPIO3_WKDEP */
1619#define OMAP4430_WKUPDEP_GPIO3_IRQ2_TESLA_SHIFT 6 1725#define OMAP4430_WKUPDEP_GPIO3_IRQ2_TESLA_SHIFT 6
1620#define OMAP4430_WKUPDEP_GPIO3_IRQ2_TESLA_MASK BITFIELD(6, 6) 1726#define OMAP4430_WKUPDEP_GPIO3_IRQ2_TESLA_MASK (1 << 6)
1621 1727
1622/* Used by PM_L4PER_GPIO4_WKDEP */ 1728/* Used by PM_L4PER_GPIO4_WKDEP */
1623#define OMAP4430_WKUPDEP_GPIO4_IRQ1_MPU_SHIFT 0 1729#define OMAP4430_WKUPDEP_GPIO4_IRQ1_MPU_SHIFT 0
1624#define OMAP4430_WKUPDEP_GPIO4_IRQ1_MPU_MASK BITFIELD(0, 0) 1730#define OMAP4430_WKUPDEP_GPIO4_IRQ1_MPU_MASK (1 << 0)
1625 1731
1626/* Used by PM_L4PER_GPIO4_WKDEP */ 1732/* Used by PM_L4PER_GPIO4_WKDEP */
1627#define OMAP4430_WKUPDEP_GPIO4_IRQ2_TESLA_SHIFT 6 1733#define OMAP4430_WKUPDEP_GPIO4_IRQ2_TESLA_SHIFT 6
1628#define OMAP4430_WKUPDEP_GPIO4_IRQ2_TESLA_MASK BITFIELD(6, 6) 1734#define OMAP4430_WKUPDEP_GPIO4_IRQ2_TESLA_MASK (1 << 6)
1629 1735
1630/* Used by PM_L4PER_GPIO5_WKDEP */ 1736/* Used by PM_L4PER_GPIO5_WKDEP */
1631#define OMAP4430_WKUPDEP_GPIO5_IRQ1_MPU_SHIFT 0 1737#define OMAP4430_WKUPDEP_GPIO5_IRQ1_MPU_SHIFT 0
1632#define OMAP4430_WKUPDEP_GPIO5_IRQ1_MPU_MASK BITFIELD(0, 0) 1738#define OMAP4430_WKUPDEP_GPIO5_IRQ1_MPU_MASK (1 << 0)
1633 1739
1634/* Used by PM_L4PER_GPIO5_WKDEP */ 1740/* Used by PM_L4PER_GPIO5_WKDEP */
1635#define OMAP4430_WKUPDEP_GPIO5_IRQ2_TESLA_SHIFT 6 1741#define OMAP4430_WKUPDEP_GPIO5_IRQ2_TESLA_SHIFT 6
1636#define OMAP4430_WKUPDEP_GPIO5_IRQ2_TESLA_MASK BITFIELD(6, 6) 1742#define OMAP4430_WKUPDEP_GPIO5_IRQ2_TESLA_MASK (1 << 6)
1637 1743
1638/* Used by PM_L4PER_GPIO6_WKDEP */ 1744/* Used by PM_L4PER_GPIO6_WKDEP */
1639#define OMAP4430_WKUPDEP_GPIO6_IRQ1_MPU_SHIFT 0 1745#define OMAP4430_WKUPDEP_GPIO6_IRQ1_MPU_SHIFT 0
1640#define OMAP4430_WKUPDEP_GPIO6_IRQ1_MPU_MASK BITFIELD(0, 0) 1746#define OMAP4430_WKUPDEP_GPIO6_IRQ1_MPU_MASK (1 << 0)
1641 1747
1642/* Used by PM_L4PER_GPIO6_WKDEP */ 1748/* Used by PM_L4PER_GPIO6_WKDEP */
1643#define OMAP4430_WKUPDEP_GPIO6_IRQ2_TESLA_SHIFT 6 1749#define OMAP4430_WKUPDEP_GPIO6_IRQ2_TESLA_SHIFT 6
1644#define OMAP4430_WKUPDEP_GPIO6_IRQ2_TESLA_MASK BITFIELD(6, 6) 1750#define OMAP4430_WKUPDEP_GPIO6_IRQ2_TESLA_MASK (1 << 6)
1645 1751
1646/* Used by PM_DSS_DSS_WKDEP */ 1752/* Used by PM_DSS_DSS_WKDEP */
1647#define OMAP4430_WKUPDEP_HDMIDMA_SDMA_SHIFT 19 1753#define OMAP4430_WKUPDEP_HDMIDMA_SDMA_SHIFT 19
1648#define OMAP4430_WKUPDEP_HDMIDMA_SDMA_MASK BITFIELD(19, 19) 1754#define OMAP4430_WKUPDEP_HDMIDMA_SDMA_MASK (1 << 19)
1649 1755
1650/* Used by PM_DSS_DSS_WKDEP */ 1756/* Used by PM_DSS_DSS_WKDEP */
1651#define OMAP4430_WKUPDEP_HDMIIRQ_DUCATI_SHIFT 13 1757#define OMAP4430_WKUPDEP_HDMIIRQ_DUCATI_SHIFT 13
1652#define OMAP4430_WKUPDEP_HDMIIRQ_DUCATI_MASK BITFIELD(13, 13) 1758#define OMAP4430_WKUPDEP_HDMIIRQ_DUCATI_MASK (1 << 13)
1653 1759
1654/* Used by PM_DSS_DSS_WKDEP */ 1760/* Used by PM_DSS_DSS_WKDEP */
1655#define OMAP4430_WKUPDEP_HDMIIRQ_MPU_SHIFT 12 1761#define OMAP4430_WKUPDEP_HDMIIRQ_MPU_SHIFT 12
1656#define OMAP4430_WKUPDEP_HDMIIRQ_MPU_MASK BITFIELD(12, 12) 1762#define OMAP4430_WKUPDEP_HDMIIRQ_MPU_MASK (1 << 12)
1657 1763
1658/* Used by PM_DSS_DSS_WKDEP */ 1764/* Used by PM_DSS_DSS_WKDEP */
1659#define OMAP4430_WKUPDEP_HDMIIRQ_TESLA_SHIFT 14 1765#define OMAP4430_WKUPDEP_HDMIIRQ_TESLA_SHIFT 14
1660#define OMAP4430_WKUPDEP_HDMIIRQ_TESLA_MASK BITFIELD(14, 14) 1766#define OMAP4430_WKUPDEP_HDMIIRQ_TESLA_MASK (1 << 14)
1661 1767
1662/* Used by PM_L4PER_HECC1_WKDEP */ 1768/* Used by PM_L4PER_HECC1_WKDEP */
1663#define OMAP4430_WKUPDEP_HECC1_MPU_SHIFT 0 1769#define OMAP4430_WKUPDEP_HECC1_MPU_SHIFT 0
1664#define OMAP4430_WKUPDEP_HECC1_MPU_MASK BITFIELD(0, 0) 1770#define OMAP4430_WKUPDEP_HECC1_MPU_MASK (1 << 0)
1665 1771
1666/* Used by PM_L4PER_HECC2_WKDEP */ 1772/* Used by PM_L4PER_HECC2_WKDEP */
1667#define OMAP4430_WKUPDEP_HECC2_MPU_SHIFT 0 1773#define OMAP4430_WKUPDEP_HECC2_MPU_SHIFT 0
1668#define OMAP4430_WKUPDEP_HECC2_MPU_MASK BITFIELD(0, 0) 1774#define OMAP4430_WKUPDEP_HECC2_MPU_MASK (1 << 0)
1669 1775
1670/* Used by PM_L3INIT_HSI_WKDEP */ 1776/* Used by PM_L3INIT_HSI_WKDEP */
1671#define OMAP4430_WKUPDEP_HSI_DSP_TESLA_SHIFT 6 1777#define OMAP4430_WKUPDEP_HSI_DSP_TESLA_SHIFT 6
1672#define OMAP4430_WKUPDEP_HSI_DSP_TESLA_MASK BITFIELD(6, 6) 1778#define OMAP4430_WKUPDEP_HSI_DSP_TESLA_MASK (1 << 6)
1673 1779
1674/* Used by PM_L3INIT_HSI_WKDEP */ 1780/* Used by PM_L3INIT_HSI_WKDEP */
1675#define OMAP4430_WKUPDEP_HSI_MCU_DUCATI_SHIFT 1 1781#define OMAP4430_WKUPDEP_HSI_MCU_DUCATI_SHIFT 1
1676#define OMAP4430_WKUPDEP_HSI_MCU_DUCATI_MASK BITFIELD(1, 1) 1782#define OMAP4430_WKUPDEP_HSI_MCU_DUCATI_MASK (1 << 1)
1677 1783
1678/* Used by PM_L3INIT_HSI_WKDEP */ 1784/* Used by PM_L3INIT_HSI_WKDEP */
1679#define OMAP4430_WKUPDEP_HSI_MCU_MPU_SHIFT 0 1785#define OMAP4430_WKUPDEP_HSI_MCU_MPU_SHIFT 0
1680#define OMAP4430_WKUPDEP_HSI_MCU_MPU_MASK BITFIELD(0, 0) 1786#define OMAP4430_WKUPDEP_HSI_MCU_MPU_MASK (1 << 0)
1681 1787
1682/* Used by PM_L4PER_I2C1_WKDEP */ 1788/* Used by PM_L4PER_I2C1_WKDEP */
1683#define OMAP4430_WKUPDEP_I2C1_DMA_SDMA_SHIFT 7 1789#define OMAP4430_WKUPDEP_I2C1_DMA_SDMA_SHIFT 7
1684#define OMAP4430_WKUPDEP_I2C1_DMA_SDMA_MASK BITFIELD(7, 7) 1790#define OMAP4430_WKUPDEP_I2C1_DMA_SDMA_MASK (1 << 7)
1685 1791
1686/* Used by PM_L4PER_I2C1_WKDEP */ 1792/* Used by PM_L4PER_I2C1_WKDEP */
1687#define OMAP4430_WKUPDEP_I2C1_IRQ_DUCATI_SHIFT 1 1793#define OMAP4430_WKUPDEP_I2C1_IRQ_DUCATI_SHIFT 1
1688#define OMAP4430_WKUPDEP_I2C1_IRQ_DUCATI_MASK BITFIELD(1, 1) 1794#define OMAP4430_WKUPDEP_I2C1_IRQ_DUCATI_MASK (1 << 1)
1689 1795
1690/* Used by PM_L4PER_I2C1_WKDEP */ 1796/* Used by PM_L4PER_I2C1_WKDEP */
1691#define OMAP4430_WKUPDEP_I2C1_IRQ_MPU_SHIFT 0 1797#define OMAP4430_WKUPDEP_I2C1_IRQ_MPU_SHIFT 0
1692#define OMAP4430_WKUPDEP_I2C1_IRQ_MPU_MASK BITFIELD(0, 0) 1798#define OMAP4430_WKUPDEP_I2C1_IRQ_MPU_MASK (1 << 0)
1693 1799
1694/* Used by PM_L4PER_I2C2_WKDEP */ 1800/* Used by PM_L4PER_I2C2_WKDEP */
1695#define OMAP4430_WKUPDEP_I2C2_DMA_SDMA_SHIFT 7 1801#define OMAP4430_WKUPDEP_I2C2_DMA_SDMA_SHIFT 7
1696#define OMAP4430_WKUPDEP_I2C2_DMA_SDMA_MASK BITFIELD(7, 7) 1802#define OMAP4430_WKUPDEP_I2C2_DMA_SDMA_MASK (1 << 7)
1697 1803
1698/* Used by PM_L4PER_I2C2_WKDEP */ 1804/* Used by PM_L4PER_I2C2_WKDEP */
1699#define OMAP4430_WKUPDEP_I2C2_IRQ_DUCATI_SHIFT 1 1805#define OMAP4430_WKUPDEP_I2C2_IRQ_DUCATI_SHIFT 1
1700#define OMAP4430_WKUPDEP_I2C2_IRQ_DUCATI_MASK BITFIELD(1, 1) 1806#define OMAP4430_WKUPDEP_I2C2_IRQ_DUCATI_MASK (1 << 1)
1701 1807
1702/* Used by PM_L4PER_I2C2_WKDEP */ 1808/* Used by PM_L4PER_I2C2_WKDEP */
1703#define OMAP4430_WKUPDEP_I2C2_IRQ_MPU_SHIFT 0 1809#define OMAP4430_WKUPDEP_I2C2_IRQ_MPU_SHIFT 0
1704#define OMAP4430_WKUPDEP_I2C2_IRQ_MPU_MASK BITFIELD(0, 0) 1810#define OMAP4430_WKUPDEP_I2C2_IRQ_MPU_MASK (1 << 0)
1705 1811
1706/* Used by PM_L4PER_I2C3_WKDEP */ 1812/* Used by PM_L4PER_I2C3_WKDEP */
1707#define OMAP4430_WKUPDEP_I2C3_DMA_SDMA_SHIFT 7 1813#define OMAP4430_WKUPDEP_I2C3_DMA_SDMA_SHIFT 7
1708#define OMAP4430_WKUPDEP_I2C3_DMA_SDMA_MASK BITFIELD(7, 7) 1814#define OMAP4430_WKUPDEP_I2C3_DMA_SDMA_MASK (1 << 7)
1709 1815
1710/* Used by PM_L4PER_I2C3_WKDEP */ 1816/* Used by PM_L4PER_I2C3_WKDEP */
1711#define OMAP4430_WKUPDEP_I2C3_IRQ_DUCATI_SHIFT 1 1817#define OMAP4430_WKUPDEP_I2C3_IRQ_DUCATI_SHIFT 1
1712#define OMAP4430_WKUPDEP_I2C3_IRQ_DUCATI_MASK BITFIELD(1, 1) 1818#define OMAP4430_WKUPDEP_I2C3_IRQ_DUCATI_MASK (1 << 1)
1713 1819
1714/* Used by PM_L4PER_I2C3_WKDEP */ 1820/* Used by PM_L4PER_I2C3_WKDEP */
1715#define OMAP4430_WKUPDEP_I2C3_IRQ_MPU_SHIFT 0 1821#define OMAP4430_WKUPDEP_I2C3_IRQ_MPU_SHIFT 0
1716#define OMAP4430_WKUPDEP_I2C3_IRQ_MPU_MASK BITFIELD(0, 0) 1822#define OMAP4430_WKUPDEP_I2C3_IRQ_MPU_MASK (1 << 0)
1717 1823
1718/* Used by PM_L4PER_I2C4_WKDEP */ 1824/* Used by PM_L4PER_I2C4_WKDEP */
1719#define OMAP4430_WKUPDEP_I2C4_DMA_SDMA_SHIFT 7 1825#define OMAP4430_WKUPDEP_I2C4_DMA_SDMA_SHIFT 7
1720#define OMAP4430_WKUPDEP_I2C4_DMA_SDMA_MASK BITFIELD(7, 7) 1826#define OMAP4430_WKUPDEP_I2C4_DMA_SDMA_MASK (1 << 7)
1721 1827
1722/* Used by PM_L4PER_I2C4_WKDEP */ 1828/* Used by PM_L4PER_I2C4_WKDEP */
1723#define OMAP4430_WKUPDEP_I2C4_IRQ_DUCATI_SHIFT 1 1829#define OMAP4430_WKUPDEP_I2C4_IRQ_DUCATI_SHIFT 1
1724#define OMAP4430_WKUPDEP_I2C4_IRQ_DUCATI_MASK BITFIELD(1, 1) 1830#define OMAP4430_WKUPDEP_I2C4_IRQ_DUCATI_MASK (1 << 1)
1725 1831
1726/* Used by PM_L4PER_I2C4_WKDEP */ 1832/* Used by PM_L4PER_I2C4_WKDEP */
1727#define OMAP4430_WKUPDEP_I2C4_IRQ_MPU_SHIFT 0 1833#define OMAP4430_WKUPDEP_I2C4_IRQ_MPU_SHIFT 0
1728#define OMAP4430_WKUPDEP_I2C4_IRQ_MPU_MASK BITFIELD(0, 0) 1834#define OMAP4430_WKUPDEP_I2C4_IRQ_MPU_MASK (1 << 0)
1729 1835
1730/* Used by PM_L4PER_I2C5_WKDEP */ 1836/* Used by PM_L4PER_I2C5_WKDEP */
1731#define OMAP4430_WKUPDEP_I2C5_DMA_SDMA_SHIFT 7 1837#define OMAP4430_WKUPDEP_I2C5_DMA_SDMA_SHIFT 7
1732#define OMAP4430_WKUPDEP_I2C5_DMA_SDMA_MASK BITFIELD(7, 7) 1838#define OMAP4430_WKUPDEP_I2C5_DMA_SDMA_MASK (1 << 7)
1733 1839
1734/* Used by PM_L4PER_I2C5_WKDEP */ 1840/* Used by PM_L4PER_I2C5_WKDEP */
1735#define OMAP4430_WKUPDEP_I2C5_IRQ_MPU_SHIFT 0 1841#define OMAP4430_WKUPDEP_I2C5_IRQ_MPU_SHIFT 0
1736#define OMAP4430_WKUPDEP_I2C5_IRQ_MPU_MASK BITFIELD(0, 0) 1842#define OMAP4430_WKUPDEP_I2C5_IRQ_MPU_MASK (1 << 0)
1737 1843
1738/* Used by PM_WKUP_KEYBOARD_WKDEP */ 1844/* Used by PM_WKUP_KEYBOARD_WKDEP */
1739#define OMAP4430_WKUPDEP_KEYBOARD_MPU_SHIFT 0 1845#define OMAP4430_WKUPDEP_KEYBOARD_MPU_SHIFT 0
1740#define OMAP4430_WKUPDEP_KEYBOARD_MPU_MASK BITFIELD(0, 0) 1846#define OMAP4430_WKUPDEP_KEYBOARD_MPU_MASK (1 << 0)
1741 1847
1742/* Used by PM_ABE_MCASP_WKDEP */ 1848/* Used by PM_ABE_MCASP_WKDEP */
1743#define OMAP4430_WKUPDEP_MCASP1_DMA_SDMA_SHIFT 7 1849#define OMAP4430_WKUPDEP_MCASP1_DMA_SDMA_SHIFT 7
1744#define OMAP4430_WKUPDEP_MCASP1_DMA_SDMA_MASK BITFIELD(7, 7) 1850#define OMAP4430_WKUPDEP_MCASP1_DMA_SDMA_MASK (1 << 7)
1745 1851
1746/* Used by PM_ABE_MCASP_WKDEP */ 1852/* Used by PM_ABE_MCASP_WKDEP */
1747#define OMAP4430_WKUPDEP_MCASP1_DMA_TESLA_SHIFT 6 1853#define OMAP4430_WKUPDEP_MCASP1_DMA_TESLA_SHIFT 6
1748#define OMAP4430_WKUPDEP_MCASP1_DMA_TESLA_MASK BITFIELD(6, 6) 1854#define OMAP4430_WKUPDEP_MCASP1_DMA_TESLA_MASK (1 << 6)
1749 1855
1750/* Used by PM_ABE_MCASP_WKDEP */ 1856/* Used by PM_ABE_MCASP_WKDEP */
1751#define OMAP4430_WKUPDEP_MCASP1_IRQ_MPU_SHIFT 0 1857#define OMAP4430_WKUPDEP_MCASP1_IRQ_MPU_SHIFT 0
1752#define OMAP4430_WKUPDEP_MCASP1_IRQ_MPU_MASK BITFIELD(0, 0) 1858#define OMAP4430_WKUPDEP_MCASP1_IRQ_MPU_MASK (1 << 0)
1753 1859
1754/* Used by PM_ABE_MCASP_WKDEP */ 1860/* Used by PM_ABE_MCASP_WKDEP */
1755#define OMAP4430_WKUPDEP_MCASP1_IRQ_TESLA_SHIFT 2 1861#define OMAP4430_WKUPDEP_MCASP1_IRQ_TESLA_SHIFT 2
1756#define OMAP4430_WKUPDEP_MCASP1_IRQ_TESLA_MASK BITFIELD(2, 2) 1862#define OMAP4430_WKUPDEP_MCASP1_IRQ_TESLA_MASK (1 << 2)
1757 1863
1758/* Used by PM_L4PER_MCASP2_WKDEP */ 1864/* Used by PM_L4PER_MCASP2_WKDEP */
1759#define OMAP4430_WKUPDEP_MCASP2_DMA_SDMA_SHIFT 7 1865#define OMAP4430_WKUPDEP_MCASP2_DMA_SDMA_SHIFT 7
1760#define OMAP4430_WKUPDEP_MCASP2_DMA_SDMA_MASK BITFIELD(7, 7) 1866#define OMAP4430_WKUPDEP_MCASP2_DMA_SDMA_MASK (1 << 7)
1761 1867
1762/* Used by PM_L4PER_MCASP2_WKDEP */ 1868/* Used by PM_L4PER_MCASP2_WKDEP */
1763#define OMAP4430_WKUPDEP_MCASP2_DMA_TESLA_SHIFT 6 1869#define OMAP4430_WKUPDEP_MCASP2_DMA_TESLA_SHIFT 6
1764#define OMAP4430_WKUPDEP_MCASP2_DMA_TESLA_MASK BITFIELD(6, 6) 1870#define OMAP4430_WKUPDEP_MCASP2_DMA_TESLA_MASK (1 << 6)
1765 1871
1766/* Used by PM_L4PER_MCASP2_WKDEP */ 1872/* Used by PM_L4PER_MCASP2_WKDEP */
1767#define OMAP4430_WKUPDEP_MCASP2_IRQ_MPU_SHIFT 0 1873#define OMAP4430_WKUPDEP_MCASP2_IRQ_MPU_SHIFT 0
1768#define OMAP4430_WKUPDEP_MCASP2_IRQ_MPU_MASK BITFIELD(0, 0) 1874#define OMAP4430_WKUPDEP_MCASP2_IRQ_MPU_MASK (1 << 0)
1769 1875
1770/* Used by PM_L4PER_MCASP2_WKDEP */ 1876/* Used by PM_L4PER_MCASP2_WKDEP */
1771#define OMAP4430_WKUPDEP_MCASP2_IRQ_TESLA_SHIFT 2 1877#define OMAP4430_WKUPDEP_MCASP2_IRQ_TESLA_SHIFT 2
1772#define OMAP4430_WKUPDEP_MCASP2_IRQ_TESLA_MASK BITFIELD(2, 2) 1878#define OMAP4430_WKUPDEP_MCASP2_IRQ_TESLA_MASK (1 << 2)
1773 1879
1774/* Used by PM_L4PER_MCASP3_WKDEP */ 1880/* Used by PM_L4PER_MCASP3_WKDEP */
1775#define OMAP4430_WKUPDEP_MCASP3_DMA_SDMA_SHIFT 7 1881#define OMAP4430_WKUPDEP_MCASP3_DMA_SDMA_SHIFT 7
1776#define OMAP4430_WKUPDEP_MCASP3_DMA_SDMA_MASK BITFIELD(7, 7) 1882#define OMAP4430_WKUPDEP_MCASP3_DMA_SDMA_MASK (1 << 7)
1777 1883
1778/* Used by PM_L4PER_MCASP3_WKDEP */ 1884/* Used by PM_L4PER_MCASP3_WKDEP */
1779#define OMAP4430_WKUPDEP_MCASP3_DMA_TESLA_SHIFT 6 1885#define OMAP4430_WKUPDEP_MCASP3_DMA_TESLA_SHIFT 6
1780#define OMAP4430_WKUPDEP_MCASP3_DMA_TESLA_MASK BITFIELD(6, 6) 1886#define OMAP4430_WKUPDEP_MCASP3_DMA_TESLA_MASK (1 << 6)
1781 1887
1782/* Used by PM_L4PER_MCASP3_WKDEP */ 1888/* Used by PM_L4PER_MCASP3_WKDEP */
1783#define OMAP4430_WKUPDEP_MCASP3_IRQ_MPU_SHIFT 0 1889#define OMAP4430_WKUPDEP_MCASP3_IRQ_MPU_SHIFT 0
1784#define OMAP4430_WKUPDEP_MCASP3_IRQ_MPU_MASK BITFIELD(0, 0) 1890#define OMAP4430_WKUPDEP_MCASP3_IRQ_MPU_MASK (1 << 0)
1785 1891
1786/* Used by PM_L4PER_MCASP3_WKDEP */ 1892/* Used by PM_L4PER_MCASP3_WKDEP */
1787#define OMAP4430_WKUPDEP_MCASP3_IRQ_TESLA_SHIFT 2 1893#define OMAP4430_WKUPDEP_MCASP3_IRQ_TESLA_SHIFT 2
1788#define OMAP4430_WKUPDEP_MCASP3_IRQ_TESLA_MASK BITFIELD(2, 2) 1894#define OMAP4430_WKUPDEP_MCASP3_IRQ_TESLA_MASK (1 << 2)
1789 1895
1790/* Used by PM_ABE_MCBSP1_WKDEP */ 1896/* Used by PM_ABE_MCBSP1_WKDEP */
1791#define OMAP4430_WKUPDEP_MCBSP1_MPU_SHIFT 0 1897#define OMAP4430_WKUPDEP_MCBSP1_MPU_SHIFT 0
1792#define OMAP4430_WKUPDEP_MCBSP1_MPU_MASK BITFIELD(0, 0) 1898#define OMAP4430_WKUPDEP_MCBSP1_MPU_MASK (1 << 0)
1793 1899
1794/* Used by PM_ABE_MCBSP1_WKDEP */ 1900/* Used by PM_ABE_MCBSP1_WKDEP */
1795#define OMAP4430_WKUPDEP_MCBSP1_SDMA_SHIFT 3 1901#define OMAP4430_WKUPDEP_MCBSP1_SDMA_SHIFT 3
1796#define OMAP4430_WKUPDEP_MCBSP1_SDMA_MASK BITFIELD(3, 3) 1902#define OMAP4430_WKUPDEP_MCBSP1_SDMA_MASK (1 << 3)
1797 1903
1798/* Used by PM_ABE_MCBSP1_WKDEP */ 1904/* Used by PM_ABE_MCBSP1_WKDEP */
1799#define OMAP4430_WKUPDEP_MCBSP1_TESLA_SHIFT 2 1905#define OMAP4430_WKUPDEP_MCBSP1_TESLA_SHIFT 2
1800#define OMAP4430_WKUPDEP_MCBSP1_TESLA_MASK BITFIELD(2, 2) 1906#define OMAP4430_WKUPDEP_MCBSP1_TESLA_MASK (1 << 2)
1801 1907
1802/* Used by PM_ABE_MCBSP2_WKDEP */ 1908/* Used by PM_ABE_MCBSP2_WKDEP */
1803#define OMAP4430_WKUPDEP_MCBSP2_MPU_SHIFT 0 1909#define OMAP4430_WKUPDEP_MCBSP2_MPU_SHIFT 0
1804#define OMAP4430_WKUPDEP_MCBSP2_MPU_MASK BITFIELD(0, 0) 1910#define OMAP4430_WKUPDEP_MCBSP2_MPU_MASK (1 << 0)
1805 1911
1806/* Used by PM_ABE_MCBSP2_WKDEP */ 1912/* Used by PM_ABE_MCBSP2_WKDEP */
1807#define OMAP4430_WKUPDEP_MCBSP2_SDMA_SHIFT 3 1913#define OMAP4430_WKUPDEP_MCBSP2_SDMA_SHIFT 3
1808#define OMAP4430_WKUPDEP_MCBSP2_SDMA_MASK BITFIELD(3, 3) 1914#define OMAP4430_WKUPDEP_MCBSP2_SDMA_MASK (1 << 3)
1809 1915
1810/* Used by PM_ABE_MCBSP2_WKDEP */ 1916/* Used by PM_ABE_MCBSP2_WKDEP */
1811#define OMAP4430_WKUPDEP_MCBSP2_TESLA_SHIFT 2 1917#define OMAP4430_WKUPDEP_MCBSP2_TESLA_SHIFT 2
1812#define OMAP4430_WKUPDEP_MCBSP2_TESLA_MASK BITFIELD(2, 2) 1918#define OMAP4430_WKUPDEP_MCBSP2_TESLA_MASK (1 << 2)
1813 1919
1814/* Used by PM_ABE_MCBSP3_WKDEP */ 1920/* Used by PM_ABE_MCBSP3_WKDEP */
1815#define OMAP4430_WKUPDEP_MCBSP3_MPU_SHIFT 0 1921#define OMAP4430_WKUPDEP_MCBSP3_MPU_SHIFT 0
1816#define OMAP4430_WKUPDEP_MCBSP3_MPU_MASK BITFIELD(0, 0) 1922#define OMAP4430_WKUPDEP_MCBSP3_MPU_MASK (1 << 0)
1817 1923
1818/* Used by PM_ABE_MCBSP3_WKDEP */ 1924/* Used by PM_ABE_MCBSP3_WKDEP */
1819#define OMAP4430_WKUPDEP_MCBSP3_SDMA_SHIFT 3 1925#define OMAP4430_WKUPDEP_MCBSP3_SDMA_SHIFT 3
1820#define OMAP4430_WKUPDEP_MCBSP3_SDMA_MASK BITFIELD(3, 3) 1926#define OMAP4430_WKUPDEP_MCBSP3_SDMA_MASK (1 << 3)
1821 1927
1822/* Used by PM_ABE_MCBSP3_WKDEP */ 1928/* Used by PM_ABE_MCBSP3_WKDEP */
1823#define OMAP4430_WKUPDEP_MCBSP3_TESLA_SHIFT 2 1929#define OMAP4430_WKUPDEP_MCBSP3_TESLA_SHIFT 2
1824#define OMAP4430_WKUPDEP_MCBSP3_TESLA_MASK BITFIELD(2, 2) 1930#define OMAP4430_WKUPDEP_MCBSP3_TESLA_MASK (1 << 2)
1825 1931
1826/* Used by PM_L4PER_MCBSP4_WKDEP */ 1932/* Used by PM_L4PER_MCBSP4_WKDEP */
1827#define OMAP4430_WKUPDEP_MCBSP4_MPU_SHIFT 0 1933#define OMAP4430_WKUPDEP_MCBSP4_MPU_SHIFT 0
1828#define OMAP4430_WKUPDEP_MCBSP4_MPU_MASK BITFIELD(0, 0) 1934#define OMAP4430_WKUPDEP_MCBSP4_MPU_MASK (1 << 0)
1829 1935
1830/* Used by PM_L4PER_MCBSP4_WKDEP */ 1936/* Used by PM_L4PER_MCBSP4_WKDEP */
1831#define OMAP4430_WKUPDEP_MCBSP4_SDMA_SHIFT 3 1937#define OMAP4430_WKUPDEP_MCBSP4_SDMA_SHIFT 3
1832#define OMAP4430_WKUPDEP_MCBSP4_SDMA_MASK BITFIELD(3, 3) 1938#define OMAP4430_WKUPDEP_MCBSP4_SDMA_MASK (1 << 3)
1833 1939
1834/* Used by PM_L4PER_MCBSP4_WKDEP */ 1940/* Used by PM_L4PER_MCBSP4_WKDEP */
1835#define OMAP4430_WKUPDEP_MCBSP4_TESLA_SHIFT 2 1941#define OMAP4430_WKUPDEP_MCBSP4_TESLA_SHIFT 2
1836#define OMAP4430_WKUPDEP_MCBSP4_TESLA_MASK BITFIELD(2, 2) 1942#define OMAP4430_WKUPDEP_MCBSP4_TESLA_MASK (1 << 2)
1837 1943
1838/* Used by PM_L4PER_MCSPI1_WKDEP */ 1944/* Used by PM_L4PER_MCSPI1_WKDEP */
1839#define OMAP4430_WKUPDEP_MCSPI1_DUCATI_SHIFT 1 1945#define OMAP4430_WKUPDEP_MCSPI1_DUCATI_SHIFT 1
1840#define OMAP4430_WKUPDEP_MCSPI1_DUCATI_MASK BITFIELD(1, 1) 1946#define OMAP4430_WKUPDEP_MCSPI1_DUCATI_MASK (1 << 1)
1841 1947
1842/* Used by PM_L4PER_MCSPI1_WKDEP */ 1948/* Used by PM_L4PER_MCSPI1_WKDEP */
1843#define OMAP4430_WKUPDEP_MCSPI1_MPU_SHIFT 0 1949#define OMAP4430_WKUPDEP_MCSPI1_MPU_SHIFT 0
1844#define OMAP4430_WKUPDEP_MCSPI1_MPU_MASK BITFIELD(0, 0) 1950#define OMAP4430_WKUPDEP_MCSPI1_MPU_MASK (1 << 0)
1845 1951
1846/* Used by PM_L4PER_MCSPI1_WKDEP */ 1952/* Used by PM_L4PER_MCSPI1_WKDEP */
1847#define OMAP4430_WKUPDEP_MCSPI1_SDMA_SHIFT 3 1953#define OMAP4430_WKUPDEP_MCSPI1_SDMA_SHIFT 3
1848#define OMAP4430_WKUPDEP_MCSPI1_SDMA_MASK BITFIELD(3, 3) 1954#define OMAP4430_WKUPDEP_MCSPI1_SDMA_MASK (1 << 3)
1849 1955
1850/* Used by PM_L4PER_MCSPI1_WKDEP */ 1956/* Used by PM_L4PER_MCSPI1_WKDEP */
1851#define OMAP4430_WKUPDEP_MCSPI1_TESLA_SHIFT 2 1957#define OMAP4430_WKUPDEP_MCSPI1_TESLA_SHIFT 2
1852#define OMAP4430_WKUPDEP_MCSPI1_TESLA_MASK BITFIELD(2, 2) 1958#define OMAP4430_WKUPDEP_MCSPI1_TESLA_MASK (1 << 2)
1853 1959
1854/* Used by PM_L4PER_MCSPI2_WKDEP */ 1960/* Used by PM_L4PER_MCSPI2_WKDEP */
1855#define OMAP4430_WKUPDEP_MCSPI2_DUCATI_SHIFT 1 1961#define OMAP4430_WKUPDEP_MCSPI2_DUCATI_SHIFT 1
1856#define OMAP4430_WKUPDEP_MCSPI2_DUCATI_MASK BITFIELD(1, 1) 1962#define OMAP4430_WKUPDEP_MCSPI2_DUCATI_MASK (1 << 1)
1857 1963
1858/* Used by PM_L4PER_MCSPI2_WKDEP */ 1964/* Used by PM_L4PER_MCSPI2_WKDEP */
1859#define OMAP4430_WKUPDEP_MCSPI2_MPU_SHIFT 0 1965#define OMAP4430_WKUPDEP_MCSPI2_MPU_SHIFT 0
1860#define OMAP4430_WKUPDEP_MCSPI2_MPU_MASK BITFIELD(0, 0) 1966#define OMAP4430_WKUPDEP_MCSPI2_MPU_MASK (1 << 0)
1861 1967
1862/* Used by PM_L4PER_MCSPI2_WKDEP */ 1968/* Used by PM_L4PER_MCSPI2_WKDEP */
1863#define OMAP4430_WKUPDEP_MCSPI2_SDMA_SHIFT 3 1969#define OMAP4430_WKUPDEP_MCSPI2_SDMA_SHIFT 3
1864#define OMAP4430_WKUPDEP_MCSPI2_SDMA_MASK BITFIELD(3, 3) 1970#define OMAP4430_WKUPDEP_MCSPI2_SDMA_MASK (1 << 3)
1865 1971
1866/* Used by PM_L4PER_MCSPI3_WKDEP */ 1972/* Used by PM_L4PER_MCSPI3_WKDEP */
1867#define OMAP4430_WKUPDEP_MCSPI3_MPU_SHIFT 0 1973#define OMAP4430_WKUPDEP_MCSPI3_MPU_SHIFT 0
1868#define OMAP4430_WKUPDEP_MCSPI3_MPU_MASK BITFIELD(0, 0) 1974#define OMAP4430_WKUPDEP_MCSPI3_MPU_MASK (1 << 0)
1869 1975
1870/* Used by PM_L4PER_MCSPI3_WKDEP */ 1976/* Used by PM_L4PER_MCSPI3_WKDEP */
1871#define OMAP4430_WKUPDEP_MCSPI3_SDMA_SHIFT 3 1977#define OMAP4430_WKUPDEP_MCSPI3_SDMA_SHIFT 3
1872#define OMAP4430_WKUPDEP_MCSPI3_SDMA_MASK BITFIELD(3, 3) 1978#define OMAP4430_WKUPDEP_MCSPI3_SDMA_MASK (1 << 3)
1873 1979
1874/* Used by PM_L4PER_MCSPI4_WKDEP */ 1980/* Used by PM_L4PER_MCSPI4_WKDEP */
1875#define OMAP4430_WKUPDEP_MCSPI4_MPU_SHIFT 0 1981#define OMAP4430_WKUPDEP_MCSPI4_MPU_SHIFT 0
1876#define OMAP4430_WKUPDEP_MCSPI4_MPU_MASK BITFIELD(0, 0) 1982#define OMAP4430_WKUPDEP_MCSPI4_MPU_MASK (1 << 0)
1877 1983
1878/* Used by PM_L4PER_MCSPI4_WKDEP */ 1984/* Used by PM_L4PER_MCSPI4_WKDEP */
1879#define OMAP4430_WKUPDEP_MCSPI4_SDMA_SHIFT 3 1985#define OMAP4430_WKUPDEP_MCSPI4_SDMA_SHIFT 3
1880#define OMAP4430_WKUPDEP_MCSPI4_SDMA_MASK BITFIELD(3, 3) 1986#define OMAP4430_WKUPDEP_MCSPI4_SDMA_MASK (1 << 3)
1881 1987
1882/* Used by PM_L3INIT_MMC1_WKDEP */ 1988/* Used by PM_L3INIT_MMC1_WKDEP */
1883#define OMAP4430_WKUPDEP_MMC1_DUCATI_SHIFT 1 1989#define OMAP4430_WKUPDEP_MMC1_DUCATI_SHIFT 1
1884#define OMAP4430_WKUPDEP_MMC1_DUCATI_MASK BITFIELD(1, 1) 1990#define OMAP4430_WKUPDEP_MMC1_DUCATI_MASK (1 << 1)
1885 1991
1886/* Used by PM_L3INIT_MMC1_WKDEP */ 1992/* Used by PM_L3INIT_MMC1_WKDEP */
1887#define OMAP4430_WKUPDEP_MMC1_MPU_SHIFT 0 1993#define OMAP4430_WKUPDEP_MMC1_MPU_SHIFT 0
1888#define OMAP4430_WKUPDEP_MMC1_MPU_MASK BITFIELD(0, 0) 1994#define OMAP4430_WKUPDEP_MMC1_MPU_MASK (1 << 0)
1889 1995
1890/* Used by PM_L3INIT_MMC1_WKDEP */ 1996/* Used by PM_L3INIT_MMC1_WKDEP */
1891#define OMAP4430_WKUPDEP_MMC1_SDMA_SHIFT 3 1997#define OMAP4430_WKUPDEP_MMC1_SDMA_SHIFT 3
1892#define OMAP4430_WKUPDEP_MMC1_SDMA_MASK BITFIELD(3, 3) 1998#define OMAP4430_WKUPDEP_MMC1_SDMA_MASK (1 << 3)
1893 1999
1894/* Used by PM_L3INIT_MMC1_WKDEP */ 2000/* Used by PM_L3INIT_MMC1_WKDEP */
1895#define OMAP4430_WKUPDEP_MMC1_TESLA_SHIFT 2 2001#define OMAP4430_WKUPDEP_MMC1_TESLA_SHIFT 2
1896#define OMAP4430_WKUPDEP_MMC1_TESLA_MASK BITFIELD(2, 2) 2002#define OMAP4430_WKUPDEP_MMC1_TESLA_MASK (1 << 2)
1897 2003
1898/* Used by PM_L3INIT_MMC2_WKDEP */ 2004/* Used by PM_L3INIT_MMC2_WKDEP */
1899#define OMAP4430_WKUPDEP_MMC2_DUCATI_SHIFT 1 2005#define OMAP4430_WKUPDEP_MMC2_DUCATI_SHIFT 1
1900#define OMAP4430_WKUPDEP_MMC2_DUCATI_MASK BITFIELD(1, 1) 2006#define OMAP4430_WKUPDEP_MMC2_DUCATI_MASK (1 << 1)
1901 2007
1902/* Used by PM_L3INIT_MMC2_WKDEP */ 2008/* Used by PM_L3INIT_MMC2_WKDEP */
1903#define OMAP4430_WKUPDEP_MMC2_MPU_SHIFT 0 2009#define OMAP4430_WKUPDEP_MMC2_MPU_SHIFT 0
1904#define OMAP4430_WKUPDEP_MMC2_MPU_MASK BITFIELD(0, 0) 2010#define OMAP4430_WKUPDEP_MMC2_MPU_MASK (1 << 0)
1905 2011
1906/* Used by PM_L3INIT_MMC2_WKDEP */ 2012/* Used by PM_L3INIT_MMC2_WKDEP */
1907#define OMAP4430_WKUPDEP_MMC2_SDMA_SHIFT 3 2013#define OMAP4430_WKUPDEP_MMC2_SDMA_SHIFT 3
1908#define OMAP4430_WKUPDEP_MMC2_SDMA_MASK BITFIELD(3, 3) 2014#define OMAP4430_WKUPDEP_MMC2_SDMA_MASK (1 << 3)
1909 2015
1910/* Used by PM_L3INIT_MMC2_WKDEP */ 2016/* Used by PM_L3INIT_MMC2_WKDEP */
1911#define OMAP4430_WKUPDEP_MMC2_TESLA_SHIFT 2 2017#define OMAP4430_WKUPDEP_MMC2_TESLA_SHIFT 2
1912#define OMAP4430_WKUPDEP_MMC2_TESLA_MASK BITFIELD(2, 2) 2018#define OMAP4430_WKUPDEP_MMC2_TESLA_MASK (1 << 2)
1913 2019
1914/* Used by PM_L3INIT_MMC6_WKDEP */ 2020/* Used by PM_L3INIT_MMC6_WKDEP */
1915#define OMAP4430_WKUPDEP_MMC6_DUCATI_SHIFT 1 2021#define OMAP4430_WKUPDEP_MMC6_DUCATI_SHIFT 1
1916#define OMAP4430_WKUPDEP_MMC6_DUCATI_MASK BITFIELD(1, 1) 2022#define OMAP4430_WKUPDEP_MMC6_DUCATI_MASK (1 << 1)
1917 2023
1918/* Used by PM_L3INIT_MMC6_WKDEP */ 2024/* Used by PM_L3INIT_MMC6_WKDEP */
1919#define OMAP4430_WKUPDEP_MMC6_MPU_SHIFT 0 2025#define OMAP4430_WKUPDEP_MMC6_MPU_SHIFT 0
1920#define OMAP4430_WKUPDEP_MMC6_MPU_MASK BITFIELD(0, 0) 2026#define OMAP4430_WKUPDEP_MMC6_MPU_MASK (1 << 0)
1921 2027
1922/* Used by PM_L3INIT_MMC6_WKDEP */ 2028/* Used by PM_L3INIT_MMC6_WKDEP */
1923#define OMAP4430_WKUPDEP_MMC6_TESLA_SHIFT 2 2029#define OMAP4430_WKUPDEP_MMC6_TESLA_SHIFT 2
1924#define OMAP4430_WKUPDEP_MMC6_TESLA_MASK BITFIELD(2, 2) 2030#define OMAP4430_WKUPDEP_MMC6_TESLA_MASK (1 << 2)
1925 2031
1926/* Used by PM_L4PER_MMCSD3_WKDEP */ 2032/* Used by PM_L4PER_MMCSD3_WKDEP */
1927#define OMAP4430_WKUPDEP_MMCSD3_DUCATI_SHIFT 1 2033#define OMAP4430_WKUPDEP_MMCSD3_DUCATI_SHIFT 1
1928#define OMAP4430_WKUPDEP_MMCSD3_DUCATI_MASK BITFIELD(1, 1) 2034#define OMAP4430_WKUPDEP_MMCSD3_DUCATI_MASK (1 << 1)
1929 2035
1930/* Used by PM_L4PER_MMCSD3_WKDEP */ 2036/* Used by PM_L4PER_MMCSD3_WKDEP */
1931#define OMAP4430_WKUPDEP_MMCSD3_MPU_SHIFT 0 2037#define OMAP4430_WKUPDEP_MMCSD3_MPU_SHIFT 0
1932#define OMAP4430_WKUPDEP_MMCSD3_MPU_MASK BITFIELD(0, 0) 2038#define OMAP4430_WKUPDEP_MMCSD3_MPU_MASK (1 << 0)
1933 2039
1934/* Used by PM_L4PER_MMCSD3_WKDEP */ 2040/* Used by PM_L4PER_MMCSD3_WKDEP */
1935#define OMAP4430_WKUPDEP_MMCSD3_SDMA_SHIFT 3 2041#define OMAP4430_WKUPDEP_MMCSD3_SDMA_SHIFT 3
1936#define OMAP4430_WKUPDEP_MMCSD3_SDMA_MASK BITFIELD(3, 3) 2042#define OMAP4430_WKUPDEP_MMCSD3_SDMA_MASK (1 << 3)
1937 2043
1938/* Used by PM_L4PER_MMCSD4_WKDEP */ 2044/* Used by PM_L4PER_MMCSD4_WKDEP */
1939#define OMAP4430_WKUPDEP_MMCSD4_DUCATI_SHIFT 1 2045#define OMAP4430_WKUPDEP_MMCSD4_DUCATI_SHIFT 1
1940#define OMAP4430_WKUPDEP_MMCSD4_DUCATI_MASK BITFIELD(1, 1) 2046#define OMAP4430_WKUPDEP_MMCSD4_DUCATI_MASK (1 << 1)
1941 2047
1942/* Used by PM_L4PER_MMCSD4_WKDEP */ 2048/* Used by PM_L4PER_MMCSD4_WKDEP */
1943#define OMAP4430_WKUPDEP_MMCSD4_MPU_SHIFT 0 2049#define OMAP4430_WKUPDEP_MMCSD4_MPU_SHIFT 0
1944#define OMAP4430_WKUPDEP_MMCSD4_MPU_MASK BITFIELD(0, 0) 2050#define OMAP4430_WKUPDEP_MMCSD4_MPU_MASK (1 << 0)
1945 2051
1946/* Used by PM_L4PER_MMCSD4_WKDEP */ 2052/* Used by PM_L4PER_MMCSD4_WKDEP */
1947#define OMAP4430_WKUPDEP_MMCSD4_SDMA_SHIFT 3 2053#define OMAP4430_WKUPDEP_MMCSD4_SDMA_SHIFT 3
1948#define OMAP4430_WKUPDEP_MMCSD4_SDMA_MASK BITFIELD(3, 3) 2054#define OMAP4430_WKUPDEP_MMCSD4_SDMA_MASK (1 << 3)
1949 2055
1950/* Used by PM_L4PER_MMCSD5_WKDEP */ 2056/* Used by PM_L4PER_MMCSD5_WKDEP */
1951#define OMAP4430_WKUPDEP_MMCSD5_DUCATI_SHIFT 1 2057#define OMAP4430_WKUPDEP_MMCSD5_DUCATI_SHIFT 1
1952#define OMAP4430_WKUPDEP_MMCSD5_DUCATI_MASK BITFIELD(1, 1) 2058#define OMAP4430_WKUPDEP_MMCSD5_DUCATI_MASK (1 << 1)
1953 2059
1954/* Used by PM_L4PER_MMCSD5_WKDEP */ 2060/* Used by PM_L4PER_MMCSD5_WKDEP */
1955#define OMAP4430_WKUPDEP_MMCSD5_MPU_SHIFT 0 2061#define OMAP4430_WKUPDEP_MMCSD5_MPU_SHIFT 0
1956#define OMAP4430_WKUPDEP_MMCSD5_MPU_MASK BITFIELD(0, 0) 2062#define OMAP4430_WKUPDEP_MMCSD5_MPU_MASK (1 << 0)
1957 2063
1958/* Used by PM_L4PER_MMCSD5_WKDEP */ 2064/* Used by PM_L4PER_MMCSD5_WKDEP */
1959#define OMAP4430_WKUPDEP_MMCSD5_SDMA_SHIFT 3 2065#define OMAP4430_WKUPDEP_MMCSD5_SDMA_SHIFT 3
1960#define OMAP4430_WKUPDEP_MMCSD5_SDMA_MASK BITFIELD(3, 3) 2066#define OMAP4430_WKUPDEP_MMCSD5_SDMA_MASK (1 << 3)
1961 2067
1962/* Used by PM_L3INIT_PCIESS_WKDEP */ 2068/* Used by PM_L3INIT_PCIESS_WKDEP */
1963#define OMAP4430_WKUPDEP_PCIESS_MPU_SHIFT 0 2069#define OMAP4430_WKUPDEP_PCIESS_MPU_SHIFT 0
1964#define OMAP4430_WKUPDEP_PCIESS_MPU_MASK BITFIELD(0, 0) 2070#define OMAP4430_WKUPDEP_PCIESS_MPU_MASK (1 << 0)
1965 2071
1966/* Used by PM_L3INIT_PCIESS_WKDEP */ 2072/* Used by PM_L3INIT_PCIESS_WKDEP */
1967#define OMAP4430_WKUPDEP_PCIESS_TESLA_SHIFT 2 2073#define OMAP4430_WKUPDEP_PCIESS_TESLA_SHIFT 2
1968#define OMAP4430_WKUPDEP_PCIESS_TESLA_MASK BITFIELD(2, 2) 2074#define OMAP4430_WKUPDEP_PCIESS_TESLA_MASK (1 << 2)
1969 2075
1970/* Used by PM_ABE_PDM_WKDEP */ 2076/* Used by PM_ABE_PDM_WKDEP */
1971#define OMAP4430_WKUPDEP_PDM_DMA_SDMA_SHIFT 7 2077#define OMAP4430_WKUPDEP_PDM_DMA_SDMA_SHIFT 7
1972#define OMAP4430_WKUPDEP_PDM_DMA_SDMA_MASK BITFIELD(7, 7) 2078#define OMAP4430_WKUPDEP_PDM_DMA_SDMA_MASK (1 << 7)
1973 2079
1974/* Used by PM_ABE_PDM_WKDEP */ 2080/* Used by PM_ABE_PDM_WKDEP */
1975#define OMAP4430_WKUPDEP_PDM_DMA_TESLA_SHIFT 6 2081#define OMAP4430_WKUPDEP_PDM_DMA_TESLA_SHIFT 6
1976#define OMAP4430_WKUPDEP_PDM_DMA_TESLA_MASK BITFIELD(6, 6) 2082#define OMAP4430_WKUPDEP_PDM_DMA_TESLA_MASK (1 << 6)
1977 2083
1978/* Used by PM_ABE_PDM_WKDEP */ 2084/* Used by PM_ABE_PDM_WKDEP */
1979#define OMAP4430_WKUPDEP_PDM_IRQ_MPU_SHIFT 0 2085#define OMAP4430_WKUPDEP_PDM_IRQ_MPU_SHIFT 0
1980#define OMAP4430_WKUPDEP_PDM_IRQ_MPU_MASK BITFIELD(0, 0) 2086#define OMAP4430_WKUPDEP_PDM_IRQ_MPU_MASK (1 << 0)
1981 2087
1982/* Used by PM_ABE_PDM_WKDEP */ 2088/* Used by PM_ABE_PDM_WKDEP */
1983#define OMAP4430_WKUPDEP_PDM_IRQ_TESLA_SHIFT 2 2089#define OMAP4430_WKUPDEP_PDM_IRQ_TESLA_SHIFT 2
1984#define OMAP4430_WKUPDEP_PDM_IRQ_TESLA_MASK BITFIELD(2, 2) 2090#define OMAP4430_WKUPDEP_PDM_IRQ_TESLA_MASK (1 << 2)
1985 2091
1986/* Used by PM_WKUP_RTC_WKDEP */ 2092/* Used by PM_WKUP_RTC_WKDEP */
1987#define OMAP4430_WKUPDEP_RTC_MPU_SHIFT 0 2093#define OMAP4430_WKUPDEP_RTC_MPU_SHIFT 0
1988#define OMAP4430_WKUPDEP_RTC_MPU_MASK BITFIELD(0, 0) 2094#define OMAP4430_WKUPDEP_RTC_MPU_MASK (1 << 0)
1989 2095
1990/* Used by PM_L3INIT_SATA_WKDEP */ 2096/* Used by PM_L3INIT_SATA_WKDEP */
1991#define OMAP4430_WKUPDEP_SATA_MPU_SHIFT 0 2097#define OMAP4430_WKUPDEP_SATA_MPU_SHIFT 0
1992#define OMAP4430_WKUPDEP_SATA_MPU_MASK BITFIELD(0, 0) 2098#define OMAP4430_WKUPDEP_SATA_MPU_MASK (1 << 0)
1993 2099
1994/* Used by PM_L3INIT_SATA_WKDEP */ 2100/* Used by PM_L3INIT_SATA_WKDEP */
1995#define OMAP4430_WKUPDEP_SATA_TESLA_SHIFT 2 2101#define OMAP4430_WKUPDEP_SATA_TESLA_SHIFT 2
1996#define OMAP4430_WKUPDEP_SATA_TESLA_MASK BITFIELD(2, 2) 2102#define OMAP4430_WKUPDEP_SATA_TESLA_MASK (1 << 2)
1997 2103
1998/* Used by PM_ABE_SLIMBUS_WKDEP */ 2104/* Used by PM_ABE_SLIMBUS_WKDEP */
1999#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_SDMA_SHIFT 7 2105#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_SDMA_SHIFT 7
2000#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_SDMA_MASK BITFIELD(7, 7) 2106#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_SDMA_MASK (1 << 7)
2001 2107
2002/* Used by PM_ABE_SLIMBUS_WKDEP */ 2108/* Used by PM_ABE_SLIMBUS_WKDEP */
2003#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_TESLA_SHIFT 6 2109#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_TESLA_SHIFT 6
2004#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_TESLA_MASK BITFIELD(6, 6) 2110#define OMAP4430_WKUPDEP_SLIMBUS1_DMA_TESLA_MASK (1 << 6)
2005 2111
2006/* Used by PM_ABE_SLIMBUS_WKDEP */ 2112/* Used by PM_ABE_SLIMBUS_WKDEP */
2007#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_MPU_SHIFT 0 2113#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_MPU_SHIFT 0
2008#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_MPU_MASK BITFIELD(0, 0) 2114#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_MPU_MASK (1 << 0)
2009 2115
2010/* Used by PM_ABE_SLIMBUS_WKDEP */ 2116/* Used by PM_ABE_SLIMBUS_WKDEP */
2011#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_TESLA_SHIFT 2 2117#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_TESLA_SHIFT 2
2012#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_TESLA_MASK BITFIELD(2, 2) 2118#define OMAP4430_WKUPDEP_SLIMBUS1_IRQ_TESLA_MASK (1 << 2)
2013 2119
2014/* Used by PM_L4PER_SLIMBUS2_WKDEP */ 2120/* Used by PM_L4PER_SLIMBUS2_WKDEP */
2015#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_SDMA_SHIFT 7 2121#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_SDMA_SHIFT 7
2016#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_SDMA_MASK BITFIELD(7, 7) 2122#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_SDMA_MASK (1 << 7)
2017 2123
2018/* Used by PM_L4PER_SLIMBUS2_WKDEP */ 2124/* Used by PM_L4PER_SLIMBUS2_WKDEP */
2019#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_TESLA_SHIFT 6 2125#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_TESLA_SHIFT 6
2020#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_TESLA_MASK BITFIELD(6, 6) 2126#define OMAP4430_WKUPDEP_SLIMBUS2_DMA_TESLA_MASK (1 << 6)
2021 2127
2022/* Used by PM_L4PER_SLIMBUS2_WKDEP */ 2128/* Used by PM_L4PER_SLIMBUS2_WKDEP */
2023#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_MPU_SHIFT 0 2129#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_MPU_SHIFT 0
2024#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_MPU_MASK BITFIELD(0, 0) 2130#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_MPU_MASK (1 << 0)
2025 2131
2026/* Used by PM_L4PER_SLIMBUS2_WKDEP */ 2132/* Used by PM_L4PER_SLIMBUS2_WKDEP */
2027#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_TESLA_SHIFT 2 2133#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_TESLA_SHIFT 2
2028#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_TESLA_MASK BITFIELD(2, 2) 2134#define OMAP4430_WKUPDEP_SLIMBUS2_IRQ_TESLA_MASK (1 << 2)
2029 2135
2030/* Used by PM_ALWON_SR_CORE_WKDEP */ 2136/* Used by PM_ALWON_SR_CORE_WKDEP */
2031#define OMAP4430_WKUPDEP_SR_CORE_DUCATI_SHIFT 1 2137#define OMAP4430_WKUPDEP_SR_CORE_DUCATI_SHIFT 1
2032#define OMAP4430_WKUPDEP_SR_CORE_DUCATI_MASK BITFIELD(1, 1) 2138#define OMAP4430_WKUPDEP_SR_CORE_DUCATI_MASK (1 << 1)
2033 2139
2034/* Used by PM_ALWON_SR_CORE_WKDEP */ 2140/* Used by PM_ALWON_SR_CORE_WKDEP */
2035#define OMAP4430_WKUPDEP_SR_CORE_MPU_SHIFT 0 2141#define OMAP4430_WKUPDEP_SR_CORE_MPU_SHIFT 0
2036#define OMAP4430_WKUPDEP_SR_CORE_MPU_MASK BITFIELD(0, 0) 2142#define OMAP4430_WKUPDEP_SR_CORE_MPU_MASK (1 << 0)
2037 2143
2038/* Used by PM_ALWON_SR_IVA_WKDEP */ 2144/* Used by PM_ALWON_SR_IVA_WKDEP */
2039#define OMAP4430_WKUPDEP_SR_IVA_DUCATI_SHIFT 1 2145#define OMAP4430_WKUPDEP_SR_IVA_DUCATI_SHIFT 1
2040#define OMAP4430_WKUPDEP_SR_IVA_DUCATI_MASK BITFIELD(1, 1) 2146#define OMAP4430_WKUPDEP_SR_IVA_DUCATI_MASK (1 << 1)
2041 2147
2042/* Used by PM_ALWON_SR_IVA_WKDEP */ 2148/* Used by PM_ALWON_SR_IVA_WKDEP */
2043#define OMAP4430_WKUPDEP_SR_IVA_MPU_SHIFT 0 2149#define OMAP4430_WKUPDEP_SR_IVA_MPU_SHIFT 0
2044#define OMAP4430_WKUPDEP_SR_IVA_MPU_MASK BITFIELD(0, 0) 2150#define OMAP4430_WKUPDEP_SR_IVA_MPU_MASK (1 << 0)
2045 2151
2046/* Used by PM_ALWON_SR_MPU_WKDEP */ 2152/* Used by PM_ALWON_SR_MPU_WKDEP */
2047#define OMAP4430_WKUPDEP_SR_MPU_MPU_SHIFT 0 2153#define OMAP4430_WKUPDEP_SR_MPU_MPU_SHIFT 0
2048#define OMAP4430_WKUPDEP_SR_MPU_MPU_MASK BITFIELD(0, 0) 2154#define OMAP4430_WKUPDEP_SR_MPU_MPU_MASK (1 << 0)
2049 2155
2050/* Used by PM_WKUP_TIMER12_WKDEP */ 2156/* Used by PM_WKUP_TIMER12_WKDEP */
2051#define OMAP4430_WKUPDEP_TIMER12_MPU_SHIFT 0 2157#define OMAP4430_WKUPDEP_TIMER12_MPU_SHIFT 0
2052#define OMAP4430_WKUPDEP_TIMER12_MPU_MASK BITFIELD(0, 0) 2158#define OMAP4430_WKUPDEP_TIMER12_MPU_MASK (1 << 0)
2053 2159
2054/* Used by PM_WKUP_TIMER1_WKDEP */ 2160/* Used by PM_WKUP_TIMER1_WKDEP */
2055#define OMAP4430_WKUPDEP_TIMER1_MPU_SHIFT 0 2161#define OMAP4430_WKUPDEP_TIMER1_MPU_SHIFT 0
2056#define OMAP4430_WKUPDEP_TIMER1_MPU_MASK BITFIELD(0, 0) 2162#define OMAP4430_WKUPDEP_TIMER1_MPU_MASK (1 << 0)
2057 2163
2058/* Used by PM_ABE_TIMER5_WKDEP */ 2164/* Used by PM_ABE_TIMER5_WKDEP */
2059#define OMAP4430_WKUPDEP_TIMER5_MPU_SHIFT 0 2165#define OMAP4430_WKUPDEP_TIMER5_MPU_SHIFT 0
2060#define OMAP4430_WKUPDEP_TIMER5_MPU_MASK BITFIELD(0, 0) 2166#define OMAP4430_WKUPDEP_TIMER5_MPU_MASK (1 << 0)
2061 2167
2062/* Used by PM_ABE_TIMER5_WKDEP */ 2168/* Used by PM_ABE_TIMER5_WKDEP */
2063#define OMAP4430_WKUPDEP_TIMER5_TESLA_SHIFT 2 2169#define OMAP4430_WKUPDEP_TIMER5_TESLA_SHIFT 2
2064#define OMAP4430_WKUPDEP_TIMER5_TESLA_MASK BITFIELD(2, 2) 2170#define OMAP4430_WKUPDEP_TIMER5_TESLA_MASK (1 << 2)
2065 2171
2066/* Used by PM_ABE_TIMER6_WKDEP */ 2172/* Used by PM_ABE_TIMER6_WKDEP */
2067#define OMAP4430_WKUPDEP_TIMER6_MPU_SHIFT 0 2173#define OMAP4430_WKUPDEP_TIMER6_MPU_SHIFT 0
2068#define OMAP4430_WKUPDEP_TIMER6_MPU_MASK BITFIELD(0, 0) 2174#define OMAP4430_WKUPDEP_TIMER6_MPU_MASK (1 << 0)
2069 2175
2070/* Used by PM_ABE_TIMER6_WKDEP */ 2176/* Used by PM_ABE_TIMER6_WKDEP */
2071#define OMAP4430_WKUPDEP_TIMER6_TESLA_SHIFT 2 2177#define OMAP4430_WKUPDEP_TIMER6_TESLA_SHIFT 2
2072#define OMAP4430_WKUPDEP_TIMER6_TESLA_MASK BITFIELD(2, 2) 2178#define OMAP4430_WKUPDEP_TIMER6_TESLA_MASK (1 << 2)
2073 2179
2074/* Used by PM_ABE_TIMER7_WKDEP */ 2180/* Used by PM_ABE_TIMER7_WKDEP */
2075#define OMAP4430_WKUPDEP_TIMER7_MPU_SHIFT 0 2181#define OMAP4430_WKUPDEP_TIMER7_MPU_SHIFT 0
2076#define OMAP4430_WKUPDEP_TIMER7_MPU_MASK BITFIELD(0, 0) 2182#define OMAP4430_WKUPDEP_TIMER7_MPU_MASK (1 << 0)
2077 2183
2078/* Used by PM_ABE_TIMER7_WKDEP */ 2184/* Used by PM_ABE_TIMER7_WKDEP */
2079#define OMAP4430_WKUPDEP_TIMER7_TESLA_SHIFT 2 2185#define OMAP4430_WKUPDEP_TIMER7_TESLA_SHIFT 2
2080#define OMAP4430_WKUPDEP_TIMER7_TESLA_MASK BITFIELD(2, 2) 2186#define OMAP4430_WKUPDEP_TIMER7_TESLA_MASK (1 << 2)
2081 2187
2082/* Used by PM_ABE_TIMER8_WKDEP */ 2188/* Used by PM_ABE_TIMER8_WKDEP */
2083#define OMAP4430_WKUPDEP_TIMER8_MPU_SHIFT 0 2189#define OMAP4430_WKUPDEP_TIMER8_MPU_SHIFT 0
2084#define OMAP4430_WKUPDEP_TIMER8_MPU_MASK BITFIELD(0, 0) 2190#define OMAP4430_WKUPDEP_TIMER8_MPU_MASK (1 << 0)
2085 2191
2086/* Used by PM_ABE_TIMER8_WKDEP */ 2192/* Used by PM_ABE_TIMER8_WKDEP */
2087#define OMAP4430_WKUPDEP_TIMER8_TESLA_SHIFT 2 2193#define OMAP4430_WKUPDEP_TIMER8_TESLA_SHIFT 2
2088#define OMAP4430_WKUPDEP_TIMER8_TESLA_MASK BITFIELD(2, 2) 2194#define OMAP4430_WKUPDEP_TIMER8_TESLA_MASK (1 << 2)
2089 2195
2090/* Used by PM_L4PER_UART1_WKDEP */ 2196/* Used by PM_L4PER_UART1_WKDEP */
2091#define OMAP4430_WKUPDEP_UART1_MPU_SHIFT 0 2197#define OMAP4430_WKUPDEP_UART1_MPU_SHIFT 0
2092#define OMAP4430_WKUPDEP_UART1_MPU_MASK BITFIELD(0, 0) 2198#define OMAP4430_WKUPDEP_UART1_MPU_MASK (1 << 0)
2093 2199
2094/* Used by PM_L4PER_UART1_WKDEP */ 2200/* Used by PM_L4PER_UART1_WKDEP */
2095#define OMAP4430_WKUPDEP_UART1_SDMA_SHIFT 3 2201#define OMAP4430_WKUPDEP_UART1_SDMA_SHIFT 3
2096#define OMAP4430_WKUPDEP_UART1_SDMA_MASK BITFIELD(3, 3) 2202#define OMAP4430_WKUPDEP_UART1_SDMA_MASK (1 << 3)
2097 2203
2098/* Used by PM_L4PER_UART2_WKDEP */ 2204/* Used by PM_L4PER_UART2_WKDEP */
2099#define OMAP4430_WKUPDEP_UART2_MPU_SHIFT 0 2205#define OMAP4430_WKUPDEP_UART2_MPU_SHIFT 0
2100#define OMAP4430_WKUPDEP_UART2_MPU_MASK BITFIELD(0, 0) 2206#define OMAP4430_WKUPDEP_UART2_MPU_MASK (1 << 0)
2101 2207
2102/* Used by PM_L4PER_UART2_WKDEP */ 2208/* Used by PM_L4PER_UART2_WKDEP */
2103#define OMAP4430_WKUPDEP_UART2_SDMA_SHIFT 3 2209#define OMAP4430_WKUPDEP_UART2_SDMA_SHIFT 3
2104#define OMAP4430_WKUPDEP_UART2_SDMA_MASK BITFIELD(3, 3) 2210#define OMAP4430_WKUPDEP_UART2_SDMA_MASK (1 << 3)
2105 2211
2106/* Used by PM_L4PER_UART3_WKDEP */ 2212/* Used by PM_L4PER_UART3_WKDEP */
2107#define OMAP4430_WKUPDEP_UART3_DUCATI_SHIFT 1 2213#define OMAP4430_WKUPDEP_UART3_DUCATI_SHIFT 1
2108#define OMAP4430_WKUPDEP_UART3_DUCATI_MASK BITFIELD(1, 1) 2214#define OMAP4430_WKUPDEP_UART3_DUCATI_MASK (1 << 1)
2109 2215
2110/* Used by PM_L4PER_UART3_WKDEP */ 2216/* Used by PM_L4PER_UART3_WKDEP */
2111#define OMAP4430_WKUPDEP_UART3_MPU_SHIFT 0 2217#define OMAP4430_WKUPDEP_UART3_MPU_SHIFT 0
2112#define OMAP4430_WKUPDEP_UART3_MPU_MASK BITFIELD(0, 0) 2218#define OMAP4430_WKUPDEP_UART3_MPU_MASK (1 << 0)
2113 2219
2114/* Used by PM_L4PER_UART3_WKDEP */ 2220/* Used by PM_L4PER_UART3_WKDEP */
2115#define OMAP4430_WKUPDEP_UART3_SDMA_SHIFT 3 2221#define OMAP4430_WKUPDEP_UART3_SDMA_SHIFT 3
2116#define OMAP4430_WKUPDEP_UART3_SDMA_MASK BITFIELD(3, 3) 2222#define OMAP4430_WKUPDEP_UART3_SDMA_MASK (1 << 3)
2117 2223
2118/* Used by PM_L4PER_UART3_WKDEP */ 2224/* Used by PM_L4PER_UART3_WKDEP */
2119#define OMAP4430_WKUPDEP_UART3_TESLA_SHIFT 2 2225#define OMAP4430_WKUPDEP_UART3_TESLA_SHIFT 2
2120#define OMAP4430_WKUPDEP_UART3_TESLA_MASK BITFIELD(2, 2) 2226#define OMAP4430_WKUPDEP_UART3_TESLA_MASK (1 << 2)
2121 2227
2122/* Used by PM_L4PER_UART4_WKDEP */ 2228/* Used by PM_L4PER_UART4_WKDEP */
2123#define OMAP4430_WKUPDEP_UART4_MPU_SHIFT 0 2229#define OMAP4430_WKUPDEP_UART4_MPU_SHIFT 0
2124#define OMAP4430_WKUPDEP_UART4_MPU_MASK BITFIELD(0, 0) 2230#define OMAP4430_WKUPDEP_UART4_MPU_MASK (1 << 0)
2125 2231
2126/* Used by PM_L4PER_UART4_WKDEP */ 2232/* Used by PM_L4PER_UART4_WKDEP */
2127#define OMAP4430_WKUPDEP_UART4_SDMA_SHIFT 3 2233#define OMAP4430_WKUPDEP_UART4_SDMA_SHIFT 3
2128#define OMAP4430_WKUPDEP_UART4_SDMA_MASK BITFIELD(3, 3) 2234#define OMAP4430_WKUPDEP_UART4_SDMA_MASK (1 << 3)
2129 2235
2130/* Used by PM_L3INIT_UNIPRO1_WKDEP */ 2236/* Used by PM_L3INIT_UNIPRO1_WKDEP */
2131#define OMAP4430_WKUPDEP_UNIPRO1_DUCATI_SHIFT 1 2237#define OMAP4430_WKUPDEP_UNIPRO1_DUCATI_SHIFT 1
2132#define OMAP4430_WKUPDEP_UNIPRO1_DUCATI_MASK BITFIELD(1, 1) 2238#define OMAP4430_WKUPDEP_UNIPRO1_DUCATI_MASK (1 << 1)
2133 2239
2134/* Used by PM_L3INIT_UNIPRO1_WKDEP */ 2240/* Used by PM_L3INIT_UNIPRO1_WKDEP */
2135#define OMAP4430_WKUPDEP_UNIPRO1_MPU_SHIFT 0 2241#define OMAP4430_WKUPDEP_UNIPRO1_MPU_SHIFT 0
2136#define OMAP4430_WKUPDEP_UNIPRO1_MPU_MASK BITFIELD(0, 0) 2242#define OMAP4430_WKUPDEP_UNIPRO1_MPU_MASK (1 << 0)
2137 2243
2138/* Used by PM_L3INIT_USB_HOST_WKDEP */ 2244/* Used by PM_L3INIT_USB_HOST_WKDEP */
2139#define OMAP4430_WKUPDEP_USB_HOST_DUCATI_SHIFT 1 2245#define OMAP4430_WKUPDEP_USB_HOST_DUCATI_SHIFT 1
2140#define OMAP4430_WKUPDEP_USB_HOST_DUCATI_MASK BITFIELD(1, 1) 2246#define OMAP4430_WKUPDEP_USB_HOST_DUCATI_MASK (1 << 1)
2141 2247
2142/* Used by PM_L3INIT_USB_HOST_FS_WKDEP */ 2248/* Used by PM_L3INIT_USB_HOST_FS_WKDEP */
2143#define OMAP4430_WKUPDEP_USB_HOST_FS_DUCATI_SHIFT 1 2249#define OMAP4430_WKUPDEP_USB_HOST_FS_DUCATI_SHIFT 1
2144#define OMAP4430_WKUPDEP_USB_HOST_FS_DUCATI_MASK BITFIELD(1, 1) 2250#define OMAP4430_WKUPDEP_USB_HOST_FS_DUCATI_MASK (1 << 1)
2145 2251
2146/* Used by PM_L3INIT_USB_HOST_FS_WKDEP */ 2252/* Used by PM_L3INIT_USB_HOST_FS_WKDEP */
2147#define OMAP4430_WKUPDEP_USB_HOST_FS_MPU_SHIFT 0 2253#define OMAP4430_WKUPDEP_USB_HOST_FS_MPU_SHIFT 0
2148#define OMAP4430_WKUPDEP_USB_HOST_FS_MPU_MASK BITFIELD(0, 0) 2254#define OMAP4430_WKUPDEP_USB_HOST_FS_MPU_MASK (1 << 0)
2149 2255
2150/* Used by PM_L3INIT_USB_HOST_WKDEP */ 2256/* Used by PM_L3INIT_USB_HOST_WKDEP */
2151#define OMAP4430_WKUPDEP_USB_HOST_MPU_SHIFT 0 2257#define OMAP4430_WKUPDEP_USB_HOST_MPU_SHIFT 0
2152#define OMAP4430_WKUPDEP_USB_HOST_MPU_MASK BITFIELD(0, 0) 2258#define OMAP4430_WKUPDEP_USB_HOST_MPU_MASK (1 << 0)
2153 2259
2154/* Used by PM_L3INIT_USB_OTG_WKDEP */ 2260/* Used by PM_L3INIT_USB_OTG_WKDEP */
2155#define OMAP4430_WKUPDEP_USB_OTG_DUCATI_SHIFT 1 2261#define OMAP4430_WKUPDEP_USB_OTG_DUCATI_SHIFT 1
2156#define OMAP4430_WKUPDEP_USB_OTG_DUCATI_MASK BITFIELD(1, 1) 2262#define OMAP4430_WKUPDEP_USB_OTG_DUCATI_MASK (1 << 1)
2157 2263
2158/* Used by PM_L3INIT_USB_OTG_WKDEP */ 2264/* Used by PM_L3INIT_USB_OTG_WKDEP */
2159#define OMAP4430_WKUPDEP_USB_OTG_MPU_SHIFT 0 2265#define OMAP4430_WKUPDEP_USB_OTG_MPU_SHIFT 0
2160#define OMAP4430_WKUPDEP_USB_OTG_MPU_MASK BITFIELD(0, 0) 2266#define OMAP4430_WKUPDEP_USB_OTG_MPU_MASK (1 << 0)
2161 2267
2162/* Used by PM_L3INIT_USB_TLL_WKDEP */ 2268/* Used by PM_L3INIT_USB_TLL_WKDEP */
2163#define OMAP4430_WKUPDEP_USB_TLL_DUCATI_SHIFT 1 2269#define OMAP4430_WKUPDEP_USB_TLL_DUCATI_SHIFT 1
2164#define OMAP4430_WKUPDEP_USB_TLL_DUCATI_MASK BITFIELD(1, 1) 2270#define OMAP4430_WKUPDEP_USB_TLL_DUCATI_MASK (1 << 1)
2165 2271
2166/* Used by PM_L3INIT_USB_TLL_WKDEP */ 2272/* Used by PM_L3INIT_USB_TLL_WKDEP */
2167#define OMAP4430_WKUPDEP_USB_TLL_MPU_SHIFT 0 2273#define OMAP4430_WKUPDEP_USB_TLL_MPU_SHIFT 0
2168#define OMAP4430_WKUPDEP_USB_TLL_MPU_MASK BITFIELD(0, 0) 2274#define OMAP4430_WKUPDEP_USB_TLL_MPU_MASK (1 << 0)
2169 2275
2170/* Used by PM_WKUP_USIM_WKDEP */ 2276/* Used by PM_WKUP_USIM_WKDEP */
2171#define OMAP4430_WKUPDEP_USIM_MPU_SHIFT 0 2277#define OMAP4430_WKUPDEP_USIM_MPU_SHIFT 0
2172#define OMAP4430_WKUPDEP_USIM_MPU_MASK BITFIELD(0, 0) 2278#define OMAP4430_WKUPDEP_USIM_MPU_MASK (1 << 0)
2173 2279
2174/* Used by PM_WKUP_USIM_WKDEP */ 2280/* Used by PM_WKUP_USIM_WKDEP */
2175#define OMAP4430_WKUPDEP_USIM_SDMA_SHIFT 3 2281#define OMAP4430_WKUPDEP_USIM_SDMA_SHIFT 3
2176#define OMAP4430_WKUPDEP_USIM_SDMA_MASK BITFIELD(3, 3) 2282#define OMAP4430_WKUPDEP_USIM_SDMA_MASK (1 << 3)
2177 2283
2178/* Used by PM_WKUP_WDT2_WKDEP */ 2284/* Used by PM_WKUP_WDT2_WKDEP */
2179#define OMAP4430_WKUPDEP_WDT2_DUCATI_SHIFT 1 2285#define OMAP4430_WKUPDEP_WDT2_DUCATI_SHIFT 1
2180#define OMAP4430_WKUPDEP_WDT2_DUCATI_MASK BITFIELD(1, 1) 2286#define OMAP4430_WKUPDEP_WDT2_DUCATI_MASK (1 << 1)
2181 2287
2182/* Used by PM_WKUP_WDT2_WKDEP */ 2288/* Used by PM_WKUP_WDT2_WKDEP */
2183#define OMAP4430_WKUPDEP_WDT2_MPU_SHIFT 0 2289#define OMAP4430_WKUPDEP_WDT2_MPU_SHIFT 0
2184#define OMAP4430_WKUPDEP_WDT2_MPU_MASK BITFIELD(0, 0) 2290#define OMAP4430_WKUPDEP_WDT2_MPU_MASK (1 << 0)
2185 2291
2186/* Used by PM_ABE_WDT3_WKDEP */ 2292/* Used by PM_ABE_WDT3_WKDEP */
2187#define OMAP4430_WKUPDEP_WDT3_MPU_SHIFT 0 2293#define OMAP4430_WKUPDEP_WDT3_MPU_SHIFT 0
2188#define OMAP4430_WKUPDEP_WDT3_MPU_MASK BITFIELD(0, 0) 2294#define OMAP4430_WKUPDEP_WDT3_MPU_MASK (1 << 0)
2189 2295
2190/* Used by PM_L3INIT_HSI_WKDEP */ 2296/* Used by PM_L3INIT_HSI_WKDEP */
2191#define OMAP4430_WKUPDEP_WGM_HSI_WAKE_MPU_SHIFT 8 2297#define OMAP4430_WKUPDEP_WGM_HSI_WAKE_MPU_SHIFT 8
2192#define OMAP4430_WKUPDEP_WGM_HSI_WAKE_MPU_MASK BITFIELD(8, 8) 2298#define OMAP4430_WKUPDEP_WGM_HSI_WAKE_MPU_MASK (1 << 8)
2193 2299
2194/* Used by PM_L3INIT_XHPI_WKDEP */ 2300/* Used by PM_L3INIT_XHPI_WKDEP */
2195#define OMAP4430_WKUPDEP_XHPI_DUCATI_SHIFT 1 2301#define OMAP4430_WKUPDEP_XHPI_DUCATI_SHIFT 1
2196#define OMAP4430_WKUPDEP_XHPI_DUCATI_MASK BITFIELD(1, 1) 2302#define OMAP4430_WKUPDEP_XHPI_DUCATI_MASK (1 << 1)
2197 2303
2198/* Used by PRM_IO_PMCTRL */ 2304/* Used by PRM_IO_PMCTRL */
2199#define OMAP4430_WUCLK_CTRL_SHIFT 8 2305#define OMAP4430_WUCLK_CTRL_SHIFT 8
2200#define OMAP4430_WUCLK_CTRL_MASK BITFIELD(8, 8) 2306#define OMAP4430_WUCLK_CTRL_MASK (1 << 8)
2201 2307
2202/* Used by PRM_IO_PMCTRL */ 2308/* Used by PRM_IO_PMCTRL */
2203#define OMAP4430_WUCLK_STATUS_SHIFT 9 2309#define OMAP4430_WUCLK_STATUS_SHIFT 9
2204#define OMAP4430_WUCLK_STATUS_MASK BITFIELD(9, 9) 2310#define OMAP4430_WUCLK_STATUS_MASK (1 << 9)
2311
2312/* Used by REVISION_PRM */
2313#define OMAP4430_X_MAJOR_SHIFT 8
2314#define OMAP4430_X_MAJOR_MASK (0x7 << 8)
2315
2316/* Used by REVISION_PRM */
2317#define OMAP4430_Y_MINOR_SHIFT 0
2318#define OMAP4430_Y_MINOR_MASK (0x3f << 0)
2205#endif 2319#endif
diff --git a/arch/arm/mach-omap2/prm.h b/arch/arm/mach-omap2/prm.h
index 588873b9303a..39d562169d18 100644
--- a/arch/arm/mach-omap2/prm.h
+++ b/arch/arm/mach-omap2/prm.h
@@ -1,312 +1,20 @@
1#ifndef __ARCH_ARM_MACH_OMAP2_PRM_H
2#define __ARCH_ARM_MACH_OMAP2_PRM_H
3
4/* 1/*
5 * OMAP2/3 Power/Reset Management (PRM) register definitions 2 * OMAP2/3/4 Power/Reset Management (PRM) bitfield definitions
6 * 3 *
7 * Copyright (C) 2007-2009 Texas Instruments, Inc. 4 * Copyright (C) 2007-2009 Texas Instruments, Inc.
8 * Copyright (C) 2009 Nokia Corporation 5 * Copyright (C) 2010 Nokia Corporation
9 * 6 *
10 * Written by Paul Walmsley 7 * Paul Walmsley
11 * 8 *
12 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as 10 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation. 11 * published by the Free Software Foundation.
15 */ 12 */
13#ifndef __ARCH_ARM_MACH_OMAP2_PRM_H
14#define __ARCH_ARM_MACH_OMAP2_PRM_H
16 15
17#include "prcm-common.h" 16#include "prcm-common.h"
18 17
19#define OMAP2420_PRM_REGADDR(module, reg) \
20 OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE + (module) + (reg))
21#define OMAP2430_PRM_REGADDR(module, reg) \
22 OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE + (module) + (reg))
23#define OMAP34XX_PRM_REGADDR(module, reg) \
24 OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE + (module) + (reg))
25#define OMAP44XX_PRM_REGADDR(module, reg) \
26 OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE + (module) + (reg))
27#define OMAP44XX_PRCM_MPU_REGADDR(module, reg) \
28 OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE + (module) + (reg))
29
30#include "prm44xx.h"
31
32/*
33 * Architecture-specific global PRM registers
34 * Use __raw_{read,write}l() with these registers.
35 *
36 * With a few exceptions, these are the register names beginning with
37 * PRCM_* on 24xx, and PRM_* on 34xx. (The exceptions are the
38 * IRQSTATUS and IRQENABLE bits.)
39 *
40 */
41
42#define OMAP2_PRCM_REVISION_OFFSET 0x0000
43#define OMAP2420_PRCM_REVISION OMAP2420_PRM_REGADDR(OCP_MOD, 0x0000)
44#define OMAP2_PRCM_SYSCONFIG_OFFSET 0x0010
45#define OMAP2420_PRCM_SYSCONFIG OMAP2420_PRM_REGADDR(OCP_MOD, 0x0010)
46
47#define OMAP2_PRCM_IRQSTATUS_MPU_OFFSET 0x0018
48#define OMAP2420_PRCM_IRQSTATUS_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x0018)
49#define OMAP2_PRCM_IRQENABLE_MPU_OFFSET 0x001c
50#define OMAP2420_PRCM_IRQENABLE_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x001c)
51
52#define OMAP2_PRCM_VOLTCTRL_OFFSET 0x0050
53#define OMAP2420_PRCM_VOLTCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0050)
54#define OMAP2_PRCM_VOLTST_OFFSET 0x0054
55#define OMAP2420_PRCM_VOLTST OMAP2420_PRM_REGADDR(OCP_MOD, 0x0054)
56#define OMAP2_PRCM_CLKSRC_CTRL_OFFSET 0x0060
57#define OMAP2420_PRCM_CLKSRC_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0060)
58#define OMAP2_PRCM_CLKOUT_CTRL_OFFSET 0x0070
59#define OMAP2420_PRCM_CLKOUT_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0070)
60#define OMAP2_PRCM_CLKEMUL_CTRL_OFFSET 0x0078
61#define OMAP2420_PRCM_CLKEMUL_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0078)
62#define OMAP2_PRCM_CLKCFG_CTRL_OFFSET 0x0080
63#define OMAP2420_PRCM_CLKCFG_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0080)
64#define OMAP2_PRCM_CLKCFG_STATUS_OFFSET 0x0084
65#define OMAP2420_PRCM_CLKCFG_STATUS OMAP2420_PRM_REGADDR(OCP_MOD, 0x0084)
66#define OMAP2_PRCM_VOLTSETUP_OFFSET 0x0090
67#define OMAP2420_PRCM_VOLTSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0090)
68#define OMAP2_PRCM_CLKSSETUP_OFFSET 0x0094
69#define OMAP2420_PRCM_CLKSSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0094)
70#define OMAP2_PRCM_POLCTRL_OFFSET 0x0098
71#define OMAP2420_PRCM_POLCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0098)
72
73#define OMAP2430_PRCM_REVISION OMAP2430_PRM_REGADDR(OCP_MOD, 0x0000)
74#define OMAP2430_PRCM_SYSCONFIG OMAP2430_PRM_REGADDR(OCP_MOD, 0x0010)
75
76#define OMAP2430_PRCM_IRQSTATUS_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x0018)
77#define OMAP2430_PRCM_IRQENABLE_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x001c)
78
79#define OMAP2430_PRCM_VOLTCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0050)
80#define OMAP2430_PRCM_VOLTST OMAP2430_PRM_REGADDR(OCP_MOD, 0x0054)
81#define OMAP2430_PRCM_CLKSRC_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0060)
82#define OMAP2430_PRCM_CLKOUT_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0070)
83#define OMAP2430_PRCM_CLKEMUL_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0078)
84#define OMAP2430_PRCM_CLKCFG_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0080)
85#define OMAP2430_PRCM_CLKCFG_STATUS OMAP2430_PRM_REGADDR(OCP_MOD, 0x0084)
86#define OMAP2430_PRCM_VOLTSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0090)
87#define OMAP2430_PRCM_CLKSSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0094)
88#define OMAP2430_PRCM_POLCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0098)
89
90#define OMAP3_PRM_REVISION_OFFSET 0x0004
91#define OMAP3430_PRM_REVISION OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0004)
92#define OMAP3_PRM_SYSCONFIG_OFFSET 0x0014
93#define OMAP3430_PRM_SYSCONFIG OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0014)
94
95#define OMAP3_PRM_IRQSTATUS_MPU_OFFSET 0x0018
96#define OMAP3430_PRM_IRQSTATUS_MPU OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0018)
97#define OMAP3_PRM_IRQENABLE_MPU_OFFSET 0x001c
98#define OMAP3430_PRM_IRQENABLE_MPU OMAP34XX_PRM_REGADDR(OCP_MOD, 0x001c)
99
100
101#define OMAP3_PRM_VC_SMPS_SA_OFFSET 0x0020
102#define OMAP3430_PRM_VC_SMPS_SA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0020)
103#define OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET 0x0024
104#define OMAP3430_PRM_VC_SMPS_VOL_RA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0024)
105#define OMAP3_PRM_VC_SMPS_CMD_RA_OFFSET 0x0028
106#define OMAP3430_PRM_VC_SMPS_CMD_RA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0028)
107#define OMAP3_PRM_VC_CMD_VAL_0_OFFSET 0x002c
108#define OMAP3430_PRM_VC_CMD_VAL_0 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x002c)
109#define OMAP3_PRM_VC_CMD_VAL_1_OFFSET 0x0030
110#define OMAP3430_PRM_VC_CMD_VAL_1 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0030)
111#define OMAP3_PRM_VC_CH_CONF_OFFSET 0x0034
112#define OMAP3430_PRM_VC_CH_CONF OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0034)
113#define OMAP3_PRM_VC_I2C_CFG_OFFSET 0x0038
114#define OMAP3430_PRM_VC_I2C_CFG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0038)
115#define OMAP3_PRM_VC_BYPASS_VAL_OFFSET 0x003c
116#define OMAP3430_PRM_VC_BYPASS_VAL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x003c)
117#define OMAP3_PRM_RSTCTRL_OFFSET 0x0050
118#define OMAP3430_PRM_RSTCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0050)
119#define OMAP3_PRM_RSTTIME_OFFSET 0x0054
120#define OMAP3430_PRM_RSTTIME OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0054)
121#define OMAP3_PRM_RSTST_OFFSET 0x0058
122#define OMAP3430_PRM_RSTST OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0058)
123#define OMAP3_PRM_VOLTCTRL_OFFSET 0x0060
124#define OMAP3430_PRM_VOLTCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0060)
125#define OMAP3_PRM_SRAM_PCHARGE_OFFSET 0x0064
126#define OMAP3430_PRM_SRAM_PCHARGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0064)
127#define OMAP3_PRM_CLKSRC_CTRL_OFFSET 0x0070
128#define OMAP3430_PRM_CLKSRC_CTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0070)
129#define OMAP3_PRM_VOLTSETUP1_OFFSET 0x0090
130#define OMAP3430_PRM_VOLTSETUP1 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0090)
131#define OMAP3_PRM_VOLTOFFSET_OFFSET 0x0094
132#define OMAP3430_PRM_VOLTOFFSET OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0094)
133#define OMAP3_PRM_CLKSETUP_OFFSET 0x0098
134#define OMAP3430_PRM_CLKSETUP OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0098)
135#define OMAP3_PRM_POLCTRL_OFFSET 0x009c
136#define OMAP3430_PRM_POLCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x009c)
137#define OMAP3_PRM_VOLTSETUP2_OFFSET 0x00a0
138#define OMAP3430_PRM_VOLTSETUP2 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00a0)
139#define OMAP3_PRM_VP1_CONFIG_OFFSET 0x00b0
140#define OMAP3430_PRM_VP1_CONFIG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b0)
141#define OMAP3_PRM_VP1_VSTEPMIN_OFFSET 0x00b4
142#define OMAP3430_PRM_VP1_VSTEPMIN OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b4)
143#define OMAP3_PRM_VP1_VSTEPMAX_OFFSET 0x00b8
144#define OMAP3430_PRM_VP1_VSTEPMAX OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b8)
145#define OMAP3_PRM_VP1_VLIMITTO_OFFSET 0x00bc
146#define OMAP3430_PRM_VP1_VLIMITTO OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00bc)
147#define OMAP3_PRM_VP1_VOLTAGE_OFFSET 0x00c0
148#define OMAP3430_PRM_VP1_VOLTAGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00c0)
149#define OMAP3_PRM_VP1_STATUS_OFFSET 0x00c4
150#define OMAP3430_PRM_VP1_STATUS OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00c4)
151#define OMAP3_PRM_VP2_CONFIG_OFFSET 0x00d0
152#define OMAP3430_PRM_VP2_CONFIG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d0)
153#define OMAP3_PRM_VP2_VSTEPMIN_OFFSET 0x00d4
154#define OMAP3430_PRM_VP2_VSTEPMIN OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d4)
155#define OMAP3_PRM_VP2_VSTEPMAX_OFFSET 0x00d8
156#define OMAP3430_PRM_VP2_VSTEPMAX OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d8)
157#define OMAP3_PRM_VP2_VLIMITTO_OFFSET 0x00dc
158#define OMAP3430_PRM_VP2_VLIMITTO OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00dc)
159#define OMAP3_PRM_VP2_VOLTAGE_OFFSET 0x00e0
160#define OMAP3430_PRM_VP2_VOLTAGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00e0)
161#define OMAP3_PRM_VP2_STATUS_OFFSET 0x00e4
162#define OMAP3430_PRM_VP2_STATUS OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00e4)
163
164#define OMAP3_PRM_CLKSEL_OFFSET 0x0040
165#define OMAP3430_PRM_CLKSEL OMAP34XX_PRM_REGADDR(OMAP3430_CCR_MOD, 0x0040)
166#define OMAP3_PRM_CLKOUT_CTRL_OFFSET 0x0070
167#define OMAP3430_PRM_CLKOUT_CTRL OMAP34XX_PRM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
168
169/*
170 * Module specific PRM registers from PRM_BASE + domain offset
171 *
172 * Use prm_{read,write}_mod_reg() with these registers.
173 *
174 * With a few exceptions, these are the register names beginning with
175 * {PM,RM}_* on both architectures. (The exceptions are the IRQSTATUS
176 * and IRQENABLE bits.)
177 *
178 */
179
180/* Registers appearing on both 24xx and 34xx */
181
182#define OMAP2_RM_RSTCTRL 0x0050
183#define OMAP2_RM_RSTTIME 0x0054
184#define OMAP2_RM_RSTST 0x0058
185#define OMAP2_PM_PWSTCTRL 0x00e0
186#define OMAP2_PM_PWSTST 0x00e4
187
188#define PM_WKEN 0x00a0
189#define PM_WKEN1 PM_WKEN
190#define PM_WKST 0x00b0
191#define PM_WKST1 PM_WKST
192#define PM_WKDEP 0x00c8
193#define PM_EVGENCTRL 0x00d4
194#define PM_EVGENONTIM 0x00d8
195#define PM_EVGENOFFTIM 0x00dc
196
197/* Omap2 specific registers */
198#define OMAP24XX_PM_WKEN2 0x00a4
199#define OMAP24XX_PM_WKST2 0x00b4
200
201#define OMAP24XX_PRCM_IRQSTATUS_DSP 0x00f0 /* IVA mod */
202#define OMAP24XX_PRCM_IRQENABLE_DSP 0x00f4 /* IVA mod */
203#define OMAP24XX_PRCM_IRQSTATUS_IVA 0x00f8
204#define OMAP24XX_PRCM_IRQENABLE_IVA 0x00fc
205
206/* Omap3 specific registers */
207#define OMAP3430ES2_PM_WKEN3 0x00f0
208#define OMAP3430ES2_PM_WKST3 0x00b8
209
210#define OMAP3430_PM_MPUGRPSEL 0x00a4
211#define OMAP3430_PM_MPUGRPSEL1 OMAP3430_PM_MPUGRPSEL
212#define OMAP3430ES2_PM_MPUGRPSEL3 0x00f8
213
214#define OMAP3430_PM_IVAGRPSEL 0x00a8
215#define OMAP3430_PM_IVAGRPSEL1 OMAP3430_PM_IVAGRPSEL
216#define OMAP3430ES2_PM_IVAGRPSEL3 0x00f4
217
218#define OMAP3430_PM_PREPWSTST 0x00e8
219
220#define OMAP3430_PRM_IRQSTATUS_IVA2 0x00f8
221#define OMAP3430_PRM_IRQENABLE_IVA2 0x00fc
222
223/* Omap4 specific registers */
224#define OMAP4_RM_RSTCTRL 0x0000
225#define OMAP4_RM_RSTTIME 0x0004
226#define OMAP4_RM_RSTST 0x0008
227#define OMAP4_PM_PWSTCTRL 0x0000
228#define OMAP4_PM_PWSTST 0x0004
229
230
231#ifndef __ASSEMBLER__
232
233/* Power/reset management domain register get/set */
234extern u32 prm_read_mod_reg(s16 module, u16 idx);
235extern void prm_write_mod_reg(u32 val, s16 module, u16 idx);
236extern u32 prm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx);
237
238/* Read-modify-write bits in a PRM register (by domain) */
239static inline u32 prm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
240{
241 return prm_rmw_mod_reg_bits(bits, bits, module, idx);
242}
243
244static inline u32 prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
245{
246 return prm_rmw_mod_reg_bits(bits, 0x0, module, idx);
247}
248
249#endif
250
251/*
252 * Bits common to specific registers
253 *
254 * The 3430 register and bit names are generally used,
255 * since they tend to make more sense
256 */
257
258/* PM_EVGENONTIM_MPU */
259/* Named PM_EVEGENONTIM_MPU on the 24XX */
260#define OMAP_ONTIMEVAL_SHIFT 0
261#define OMAP_ONTIMEVAL_MASK (0xffffffff << 0)
262
263/* PM_EVGENOFFTIM_MPU */
264/* Named PM_EVEGENOFFTIM_MPU on the 24XX */
265#define OMAP_OFFTIMEVAL_SHIFT 0
266#define OMAP_OFFTIMEVAL_MASK (0xffffffff << 0)
267
268/* PRM_CLKSETUP and PRCM_VOLTSETUP */
269/* Named PRCM_CLKSSETUP on the 24XX */
270#define OMAP_SETUP_TIME_SHIFT 0
271#define OMAP_SETUP_TIME_MASK (0xffff << 0)
272
273/* PRM_CLKSRC_CTRL */
274/* Named PRCM_CLKSRC_CTRL on the 24XX */
275#define OMAP_SYSCLKDIV_SHIFT 6
276#define OMAP_SYSCLKDIV_MASK (0x3 << 6)
277#define OMAP_AUTOEXTCLKMODE_SHIFT 3
278#define OMAP_AUTOEXTCLKMODE_MASK (0x3 << 3)
279#define OMAP_SYSCLKSEL_SHIFT 0
280#define OMAP_SYSCLKSEL_MASK (0x3 << 0)
281
282/* PM_EVGENCTRL_MPU */
283#define OMAP_OFFLOADMODE_SHIFT 3
284#define OMAP_OFFLOADMODE_MASK (0x3 << 3)
285#define OMAP_ONLOADMODE_SHIFT 1
286#define OMAP_ONLOADMODE_MASK (0x3 << 1)
287#define OMAP_ENABLE_MASK (1 << 0)
288
289/* PRM_RSTTIME */
290/* Named RM_RSTTIME_WKUP on the 24xx */
291#define OMAP_RSTTIME2_SHIFT 8
292#define OMAP_RSTTIME2_MASK (0x1f << 8)
293#define OMAP_RSTTIME1_SHIFT 0
294#define OMAP_RSTTIME1_MASK (0xff << 0)
295
296/* PRM_RSTCTRL */
297/* Named RM_RSTCTRL_WKUP on the 24xx */
298/* 2420 calls RST_DPLL3 'RST_DPLL' */
299#define OMAP_RST_DPLL3_MASK (1 << 2)
300#define OMAP_RST_GS_MASK (1 << 1)
301
302
303/*
304 * Bits common to module-shared registers
305 *
306 * Not all registers of a particular type support all of these bits -
307 * check TRM if you are unsure
308 */
309
310/* 18/*
311 * 24XX: PM_PWSTST_CORE, PM_PWSTST_GFX, PM_PWSTST_MPU, PM_PWSTST_DSP 19 * 24XX: PM_PWSTST_CORE, PM_PWSTST_GFX, PM_PWSTST_MPU, PM_PWSTST_DSP
312 * 20 *
@@ -332,59 +40,6 @@ static inline u32 prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
332#define OMAP_POWERSTATEST_MASK (0x3 << 0) 40#define OMAP_POWERSTATEST_MASK (0x3 << 0)
333 41
334/* 42/*
335 * 24XX: RM_RSTST_MPU and RM_RSTST_DSP - on 24XX, 'COREDOMAINWKUP_RST' is
336 * called 'COREWKUP_RST'
337 *
338 * 3430: RM_RSTST_IVA2, RM_RSTST_MPU, RM_RSTST_GFX, RM_RSTST_DSS,
339 * RM_RSTST_CAM, RM_RSTST_PER, RM_RSTST_NEON
340 */
341#define OMAP_COREDOMAINWKUP_RST_MASK (1 << 3)
342
343/*
344 * 24XX: RM_RSTST_MPU, RM_RSTST_GFX, RM_RSTST_DSP
345 *
346 * 2430: RM_RSTST_MDM
347 *
348 * 3430: RM_RSTST_CORE, RM_RSTST_EMU
349 */
350#define OMAP_DOMAINWKUP_RST_MASK (1 << 2)
351
352/*
353 * 24XX: RM_RSTST_MPU, RM_RSTST_WKUP, RM_RSTST_DSP
354 * On 24XX, 'GLOBALWARM_RST' is called 'GLOBALWMPU_RST'.
355 *
356 * 2430: RM_RSTST_MDM
357 *
358 * 3430: RM_RSTST_CORE, RM_RSTST_EMU
359 */
360#define OMAP_GLOBALWARM_RST_MASK (1 << 1)
361#define OMAP_GLOBALCOLD_RST_MASK (1 << 0)
362
363/*
364 * 24XX: PM_WKDEP_GFX, PM_WKDEP_MPU, PM_WKDEP_CORE, PM_WKDEP_DSP
365 * 2420 TRM sometimes uses "EN_WAKEUP" instead of "EN_WKUP"
366 *
367 * 2430: PM_WKDEP_MDM
368 *
369 * 3430: PM_WKDEP_IVA2, PM_WKDEP_GFX, PM_WKDEP_DSS, PM_WKDEP_CAM,
370 * PM_WKDEP_PER
371 */
372#define OMAP_EN_WKUP_SHIFT 4
373#define OMAP_EN_WKUP_MASK (1 << 4)
374
375/*
376 * 24XX: PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
377 * PM_PWSTCTRL_DSP
378 *
379 * 2430: PM_PWSTCTRL_MDM
380 *
381 * 3430: PM_PWSTCTRL_IVA2, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
382 * PM_PWSTCTRL_DSS, PM_PWSTCTRL_CAM, PM_PWSTCTRL_PER,
383 * PM_PWSTCTRL_NEON
384 */
385#define OMAP_LOGICRETSTATE_MASK (1 << 2)
386
387/*
388 * 24XX: PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX, 43 * 24XX: PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
389 * PM_PWSTCTRL_DSP, PM_PWSTST_MPU 44 * PM_PWSTCTRL_DSP, PM_PWSTST_MPU
390 * 45 *
diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.c b/arch/arm/mach-omap2/prm2xxx_3xxx.c
new file mode 100644
index 000000000000..051213fbc346
--- /dev/null
+++ b/arch/arm/mach-omap2/prm2xxx_3xxx.c
@@ -0,0 +1,158 @@
1/*
2 * OMAP2/3 PRM module functions
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc.
5 * Copyright (C) 2010 Nokia Corporation
6 * Benoît Cousson
7 * Paul Walmsley
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#include <linux/kernel.h>
15#include <linux/errno.h>
16#include <linux/err.h>
17#include <linux/io.h>
18
19#include <plat/common.h>
20#include <plat/cpu.h>
21#include <plat/prcm.h>
22
23#include "prm2xxx_3xxx.h"
24#include "cm2xxx_3xxx.h"
25#include "prm-regbits-24xx.h"
26#include "prm-regbits-34xx.h"
27
28u32 omap2_prm_read_mod_reg(s16 module, u16 idx)
29{
30 return __raw_readl(prm_base + module + idx);
31}
32
33void omap2_prm_write_mod_reg(u32 val, s16 module, u16 idx)
34{
35 __raw_writel(val, prm_base + module + idx);
36}
37
38/* Read-modify-write a register in a PRM module. Caller must lock */
39u32 omap2_prm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx)
40{
41 u32 v;
42
43 v = omap2_prm_read_mod_reg(module, idx);
44 v &= ~mask;
45 v |= bits;
46 omap2_prm_write_mod_reg(v, module, idx);
47
48 return v;
49}
50
51/* Read a PRM register, AND it, and shift the result down to bit 0 */
52u32 omap2_prm_read_mod_bits_shift(s16 domain, s16 idx, u32 mask)
53{
54 u32 v;
55
56 v = omap2_prm_read_mod_reg(domain, idx);
57 v &= mask;
58 v >>= __ffs(mask);
59
60 return v;
61}
62
63u32 omap2_prm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
64{
65 return omap2_prm_rmw_mod_reg_bits(bits, bits, module, idx);
66}
67
68u32 omap2_prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
69{
70 return omap2_prm_rmw_mod_reg_bits(bits, 0x0, module, idx);
71}
72
73
74/**
75 * omap2_prm_is_hardreset_asserted - read the HW reset line state of
76 * submodules contained in the hwmod module
77 * @prm_mod: PRM submodule base (e.g. CORE_MOD)
78 * @shift: register bit shift corresponding to the reset line to check
79 *
80 * Returns 1 if the (sub)module hardreset line is currently asserted,
81 * 0 if the (sub)module hardreset line is not currently asserted, or
82 * -EINVAL if called while running on a non-OMAP2/3 chip.
83 */
84int omap2_prm_is_hardreset_asserted(s16 prm_mod, u8 shift)
85{
86 if (!(cpu_is_omap24xx() || cpu_is_omap34xx()))
87 return -EINVAL;
88
89 return omap2_prm_read_mod_bits_shift(prm_mod, OMAP2_RM_RSTCTRL,
90 (1 << shift));
91}
92
93/**
94 * omap2_prm_assert_hardreset - assert the HW reset line of a submodule
95 * @prm_mod: PRM submodule base (e.g. CORE_MOD)
96 * @shift: register bit shift corresponding to the reset line to assert
97 *
98 * Some IPs like dsp or iva contain processors that require an HW
99 * reset line to be asserted / deasserted in order to fully enable the
100 * IP. These modules may have multiple hard-reset lines that reset
101 * different 'submodules' inside the IP block. This function will
102 * place the submodule into reset. Returns 0 upon success or -EINVAL
103 * upon an argument error.
104 */
105int omap2_prm_assert_hardreset(s16 prm_mod, u8 shift)
106{
107 u32 mask;
108
109 if (!(cpu_is_omap24xx() || cpu_is_omap34xx()))
110 return -EINVAL;
111
112 mask = 1 << shift;
113 omap2_prm_rmw_mod_reg_bits(mask, mask, prm_mod, OMAP2_RM_RSTCTRL);
114
115 return 0;
116}
117
118/**
119 * omap2_prm_deassert_hardreset - deassert a submodule hardreset line and wait
120 * @prm_mod: PRM submodule base (e.g. CORE_MOD)
121 * @rst_shift: register bit shift corresponding to the reset line to deassert
122 * @st_shift: register bit shift for the status of the deasserted submodule
123 *
124 * Some IPs like dsp or iva contain processors that require an HW
125 * reset line to be asserted / deasserted in order to fully enable the
126 * IP. These modules may have multiple hard-reset lines that reset
127 * different 'submodules' inside the IP block. This function will
128 * take the submodule out of reset and wait until the PRCM indicates
129 * that the reset has completed before returning. Returns 0 upon success or
130 * -EINVAL upon an argument error, -EEXIST if the submodule was already out
131 * of reset, or -EBUSY if the submodule did not exit reset promptly.
132 */
133int omap2_prm_deassert_hardreset(s16 prm_mod, u8 rst_shift, u8 st_shift)
134{
135 u32 rst, st;
136 int c;
137
138 if (!(cpu_is_omap24xx() || cpu_is_omap34xx()))
139 return -EINVAL;
140
141 rst = 1 << rst_shift;
142 st = 1 << st_shift;
143
144 /* Check the current status to avoid de-asserting the line twice */
145 if (omap2_prm_read_mod_bits_shift(prm_mod, OMAP2_RM_RSTCTRL, rst) == 0)
146 return -EEXIST;
147
148 /* Clear the reset status by writing 1 to the status bit */
149 omap2_prm_rmw_mod_reg_bits(0xffffffff, st, prm_mod, OMAP2_RM_RSTST);
150 /* de-assert the reset control line */
151 omap2_prm_rmw_mod_reg_bits(rst, 0, prm_mod, OMAP2_RM_RSTCTRL);
152 /* wait the status to be set */
153 omap_test_timeout(omap2_prm_read_mod_bits_shift(prm_mod, OMAP2_RM_RSTST,
154 st),
155 MAX_MODULE_HARDRESET_WAIT, c);
156
157 return (c == MAX_MODULE_HARDRESET_WAIT) ? -EBUSY : 0;
158}
diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.h b/arch/arm/mach-omap2/prm2xxx_3xxx.h
new file mode 100644
index 000000000000..a1fc62a39dbb
--- /dev/null
+++ b/arch/arm/mach-omap2/prm2xxx_3xxx.h
@@ -0,0 +1,429 @@
1/*
2 * OMAP2/3 Power/Reset Management (PRM) register definitions
3 *
4 * Copyright (C) 2007-2009 Texas Instruments, Inc.
5 * Copyright (C) 2008-2010 Nokia Corporation
6 * Paul Walmsley
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 * The PRM hardware modules on the OMAP2/3 are quite similar to each
13 * other. The PRM on OMAP4 has a new register layout, and is handled
14 * in a separate file.
15 */
16#ifndef __ARCH_ARM_MACH_OMAP2_PRM2XXX_3XXX_H
17#define __ARCH_ARM_MACH_OMAP2_PRM2XXX_3XXX_H
18
19#include "prcm-common.h"
20#include "prm.h"
21
22#define OMAP2420_PRM_REGADDR(module, reg) \
23 OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE + (module) + (reg))
24#define OMAP2430_PRM_REGADDR(module, reg) \
25 OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE + (module) + (reg))
26#define OMAP34XX_PRM_REGADDR(module, reg) \
27 OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE + (module) + (reg))
28
29
30/*
31 * OMAP2-specific global PRM registers
32 * Use __raw_{read,write}l() with these registers.
33 *
34 * With a few exceptions, these are the register names beginning with
35 * PRCM_* on 24xx. (The exceptions are the IRQSTATUS and IRQENABLE
36 * bits.)
37 *
38 */
39
40#define OMAP2_PRCM_REVISION_OFFSET 0x0000
41#define OMAP2420_PRCM_REVISION OMAP2420_PRM_REGADDR(OCP_MOD, 0x0000)
42#define OMAP2_PRCM_SYSCONFIG_OFFSET 0x0010
43#define OMAP2420_PRCM_SYSCONFIG OMAP2420_PRM_REGADDR(OCP_MOD, 0x0010)
44
45#define OMAP2_PRCM_IRQSTATUS_MPU_OFFSET 0x0018
46#define OMAP2420_PRCM_IRQSTATUS_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x0018)
47#define OMAP2_PRCM_IRQENABLE_MPU_OFFSET 0x001c
48#define OMAP2420_PRCM_IRQENABLE_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x001c)
49
50#define OMAP2_PRCM_VOLTCTRL_OFFSET 0x0050
51#define OMAP2420_PRCM_VOLTCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0050)
52#define OMAP2_PRCM_VOLTST_OFFSET 0x0054
53#define OMAP2420_PRCM_VOLTST OMAP2420_PRM_REGADDR(OCP_MOD, 0x0054)
54#define OMAP2_PRCM_CLKSRC_CTRL_OFFSET 0x0060
55#define OMAP2420_PRCM_CLKSRC_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0060)
56#define OMAP2_PRCM_CLKOUT_CTRL_OFFSET 0x0070
57#define OMAP2420_PRCM_CLKOUT_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0070)
58#define OMAP2_PRCM_CLKEMUL_CTRL_OFFSET 0x0078
59#define OMAP2420_PRCM_CLKEMUL_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0078)
60#define OMAP2_PRCM_CLKCFG_CTRL_OFFSET 0x0080
61#define OMAP2420_PRCM_CLKCFG_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0080)
62#define OMAP2_PRCM_CLKCFG_STATUS_OFFSET 0x0084
63#define OMAP2420_PRCM_CLKCFG_STATUS OMAP2420_PRM_REGADDR(OCP_MOD, 0x0084)
64#define OMAP2_PRCM_VOLTSETUP_OFFSET 0x0090
65#define OMAP2420_PRCM_VOLTSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0090)
66#define OMAP2_PRCM_CLKSSETUP_OFFSET 0x0094
67#define OMAP2420_PRCM_CLKSSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0094)
68#define OMAP2_PRCM_POLCTRL_OFFSET 0x0098
69#define OMAP2420_PRCM_POLCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0098)
70
71#define OMAP2430_PRCM_REVISION OMAP2430_PRM_REGADDR(OCP_MOD, 0x0000)
72#define OMAP2430_PRCM_SYSCONFIG OMAP2430_PRM_REGADDR(OCP_MOD, 0x0010)
73
74#define OMAP2430_PRCM_IRQSTATUS_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x0018)
75#define OMAP2430_PRCM_IRQENABLE_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x001c)
76
77#define OMAP2430_PRCM_VOLTCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0050)
78#define OMAP2430_PRCM_VOLTST OMAP2430_PRM_REGADDR(OCP_MOD, 0x0054)
79#define OMAP2430_PRCM_CLKSRC_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0060)
80#define OMAP2430_PRCM_CLKOUT_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0070)
81#define OMAP2430_PRCM_CLKEMUL_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0078)
82#define OMAP2430_PRCM_CLKCFG_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0080)
83#define OMAP2430_PRCM_CLKCFG_STATUS OMAP2430_PRM_REGADDR(OCP_MOD, 0x0084)
84#define OMAP2430_PRCM_VOLTSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0090)
85#define OMAP2430_PRCM_CLKSSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0094)
86#define OMAP2430_PRCM_POLCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0098)
87
88/*
89 * OMAP3-specific global PRM registers
90 * Use __raw_{read,write}l() with these registers.
91 *
92 * With a few exceptions, these are the register names beginning with
93 * PRM_* on 34xx. (The exceptions are the IRQSTATUS and IRQENABLE
94 * bits.)
95 */
96
97#define OMAP3_PRM_REVISION_OFFSET 0x0004
98#define OMAP3430_PRM_REVISION OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0004)
99#define OMAP3_PRM_SYSCONFIG_OFFSET 0x0014
100#define OMAP3430_PRM_SYSCONFIG OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0014)
101
102#define OMAP3_PRM_IRQSTATUS_MPU_OFFSET 0x0018
103#define OMAP3430_PRM_IRQSTATUS_MPU OMAP34XX_PRM_REGADDR(OCP_MOD, 0x0018)
104#define OMAP3_PRM_IRQENABLE_MPU_OFFSET 0x001c
105#define OMAP3430_PRM_IRQENABLE_MPU OMAP34XX_PRM_REGADDR(OCP_MOD, 0x001c)
106
107
108#define OMAP3_PRM_VC_SMPS_SA_OFFSET 0x0020
109#define OMAP3430_PRM_VC_SMPS_SA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0020)
110#define OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET 0x0024
111#define OMAP3430_PRM_VC_SMPS_VOL_RA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0024)
112#define OMAP3_PRM_VC_SMPS_CMD_RA_OFFSET 0x0028
113#define OMAP3430_PRM_VC_SMPS_CMD_RA OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0028)
114#define OMAP3_PRM_VC_CMD_VAL_0_OFFSET 0x002c
115#define OMAP3430_PRM_VC_CMD_VAL_0 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x002c)
116#define OMAP3_PRM_VC_CMD_VAL_1_OFFSET 0x0030
117#define OMAP3430_PRM_VC_CMD_VAL_1 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0030)
118#define OMAP3_PRM_VC_CH_CONF_OFFSET 0x0034
119#define OMAP3430_PRM_VC_CH_CONF OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0034)
120#define OMAP3_PRM_VC_I2C_CFG_OFFSET 0x0038
121#define OMAP3430_PRM_VC_I2C_CFG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0038)
122#define OMAP3_PRM_VC_BYPASS_VAL_OFFSET 0x003c
123#define OMAP3430_PRM_VC_BYPASS_VAL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x003c)
124#define OMAP3_PRM_RSTCTRL_OFFSET 0x0050
125#define OMAP3430_PRM_RSTCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0050)
126#define OMAP3_PRM_RSTTIME_OFFSET 0x0054
127#define OMAP3430_PRM_RSTTIME OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0054)
128#define OMAP3_PRM_RSTST_OFFSET 0x0058
129#define OMAP3430_PRM_RSTST OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0058)
130#define OMAP3_PRM_VOLTCTRL_OFFSET 0x0060
131#define OMAP3430_PRM_VOLTCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0060)
132#define OMAP3_PRM_SRAM_PCHARGE_OFFSET 0x0064
133#define OMAP3430_PRM_SRAM_PCHARGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0064)
134#define OMAP3_PRM_CLKSRC_CTRL_OFFSET 0x0070
135#define OMAP3430_PRM_CLKSRC_CTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0070)
136#define OMAP3_PRM_VOLTSETUP1_OFFSET 0x0090
137#define OMAP3430_PRM_VOLTSETUP1 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0090)
138#define OMAP3_PRM_VOLTOFFSET_OFFSET 0x0094
139#define OMAP3430_PRM_VOLTOFFSET OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0094)
140#define OMAP3_PRM_CLKSETUP_OFFSET 0x0098
141#define OMAP3430_PRM_CLKSETUP OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x0098)
142#define OMAP3_PRM_POLCTRL_OFFSET 0x009c
143#define OMAP3430_PRM_POLCTRL OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x009c)
144#define OMAP3_PRM_VOLTSETUP2_OFFSET 0x00a0
145#define OMAP3430_PRM_VOLTSETUP2 OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00a0)
146#define OMAP3_PRM_VP1_CONFIG_OFFSET 0x00b0
147#define OMAP3430_PRM_VP1_CONFIG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b0)
148#define OMAP3_PRM_VP1_VSTEPMIN_OFFSET 0x00b4
149#define OMAP3430_PRM_VP1_VSTEPMIN OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b4)
150#define OMAP3_PRM_VP1_VSTEPMAX_OFFSET 0x00b8
151#define OMAP3430_PRM_VP1_VSTEPMAX OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00b8)
152#define OMAP3_PRM_VP1_VLIMITTO_OFFSET 0x00bc
153#define OMAP3430_PRM_VP1_VLIMITTO OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00bc)
154#define OMAP3_PRM_VP1_VOLTAGE_OFFSET 0x00c0
155#define OMAP3430_PRM_VP1_VOLTAGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00c0)
156#define OMAP3_PRM_VP1_STATUS_OFFSET 0x00c4
157#define OMAP3430_PRM_VP1_STATUS OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00c4)
158#define OMAP3_PRM_VP2_CONFIG_OFFSET 0x00d0
159#define OMAP3430_PRM_VP2_CONFIG OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d0)
160#define OMAP3_PRM_VP2_VSTEPMIN_OFFSET 0x00d4
161#define OMAP3430_PRM_VP2_VSTEPMIN OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d4)
162#define OMAP3_PRM_VP2_VSTEPMAX_OFFSET 0x00d8
163#define OMAP3430_PRM_VP2_VSTEPMAX OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00d8)
164#define OMAP3_PRM_VP2_VLIMITTO_OFFSET 0x00dc
165#define OMAP3430_PRM_VP2_VLIMITTO OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00dc)
166#define OMAP3_PRM_VP2_VOLTAGE_OFFSET 0x00e0
167#define OMAP3430_PRM_VP2_VOLTAGE OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00e0)
168#define OMAP3_PRM_VP2_STATUS_OFFSET 0x00e4
169#define OMAP3430_PRM_VP2_STATUS OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00e4)
170
171#define OMAP3_PRM_CLKSEL_OFFSET 0x0040
172#define OMAP3430_PRM_CLKSEL OMAP34XX_PRM_REGADDR(OMAP3430_CCR_MOD, 0x0040)
173#define OMAP3_PRM_CLKOUT_CTRL_OFFSET 0x0070
174#define OMAP3430_PRM_CLKOUT_CTRL OMAP34XX_PRM_REGADDR(OMAP3430_CCR_MOD, 0x0070)
175
176/*
177 * Module specific PRM register offsets from PRM_BASE + domain offset
178 *
179 * Use prm_{read,write}_mod_reg() with these registers.
180 *
181 * With a few exceptions, these are the register names beginning with
182 * {PM,RM}_* on both OMAP2/3 SoC families.. (The exceptions are the
183 * IRQSTATUS and IRQENABLE bits.)
184 */
185
186/* Register offsets appearing on both OMAP2 and OMAP3 */
187
188#define OMAP2_RM_RSTCTRL 0x0050
189#define OMAP2_RM_RSTTIME 0x0054
190#define OMAP2_RM_RSTST 0x0058
191#define OMAP2_PM_PWSTCTRL 0x00e0
192#define OMAP2_PM_PWSTST 0x00e4
193
194#define PM_WKEN 0x00a0
195#define PM_WKEN1 PM_WKEN
196#define PM_WKST 0x00b0
197#define PM_WKST1 PM_WKST
198#define PM_WKDEP 0x00c8
199#define PM_EVGENCTRL 0x00d4
200#define PM_EVGENONTIM 0x00d8
201#define PM_EVGENOFFTIM 0x00dc
202
203/* OMAP2xxx specific register offsets */
204#define OMAP24XX_PM_WKEN2 0x00a4
205#define OMAP24XX_PM_WKST2 0x00b4
206
207#define OMAP24XX_PRCM_IRQSTATUS_DSP 0x00f0 /* IVA mod */
208#define OMAP24XX_PRCM_IRQENABLE_DSP 0x00f4 /* IVA mod */
209#define OMAP24XX_PRCM_IRQSTATUS_IVA 0x00f8
210#define OMAP24XX_PRCM_IRQENABLE_IVA 0x00fc
211
212/* OMAP3 specific register offsets */
213#define OMAP3430ES2_PM_WKEN3 0x00f0
214#define OMAP3430ES2_PM_WKST3 0x00b8
215
216#define OMAP3430_PM_MPUGRPSEL 0x00a4
217#define OMAP3430_PM_MPUGRPSEL1 OMAP3430_PM_MPUGRPSEL
218#define OMAP3430ES2_PM_MPUGRPSEL3 0x00f8
219
220#define OMAP3430_PM_IVAGRPSEL 0x00a8
221#define OMAP3430_PM_IVAGRPSEL1 OMAP3430_PM_IVAGRPSEL
222#define OMAP3430ES2_PM_IVAGRPSEL3 0x00f4
223
224#define OMAP3430_PM_PREPWSTST 0x00e8
225
226#define OMAP3430_PRM_IRQSTATUS_IVA2 0x00f8
227#define OMAP3430_PRM_IRQENABLE_IVA2 0x00fc
228
229
230#ifndef __ASSEMBLER__
231/*
232 * Stub omap2xxx/omap3xxx functions so that common files
233 * continue to build when custom builds are used
234 */
235#if defined(CONFIG_ARCH_OMAP4) && !(defined(CONFIG_ARCH_OMAP2) || \
236 defined(CONFIG_ARCH_OMAP3))
237static inline u32 omap2_prm_read_mod_reg(s16 module, u16 idx)
238{
239 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
240 "not suppose to be used on omap4\n");
241 return 0;
242}
243static inline void omap2_prm_write_mod_reg(u32 val, s16 module, u16 idx)
244{
245 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
246 "not suppose to be used on omap4\n");
247}
248static inline u32 omap2_prm_rmw_mod_reg_bits(u32 mask, u32 bits,
249 s16 module, s16 idx)
250{
251 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
252 "not suppose to be used on omap4\n");
253 return 0;
254}
255static inline u32 omap2_prm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
256{
257 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
258 "not suppose to be used on omap4\n");
259 return 0;
260}
261static inline u32 omap2_prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
262{
263 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
264 "not suppose to be used on omap4\n");
265 return 0;
266}
267static inline u32 omap2_prm_read_mod_bits_shift(s16 domain, s16 idx, u32 mask)
268{
269 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
270 "not suppose to be used on omap4\n");
271 return 0;
272}
273static inline int omap2_prm_is_hardreset_asserted(s16 prm_mod, u8 shift)
274{
275 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
276 "not suppose to be used on omap4\n");
277 return 0;
278}
279static inline int omap2_prm_assert_hardreset(s16 prm_mod, u8 shift)
280{
281 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
282 "not suppose to be used on omap4\n");
283 return 0;
284}
285static inline int omap2_prm_deassert_hardreset(s16 prm_mod, u8 rst_shift,
286 u8 st_shift)
287{
288 WARN(1, "prm: omap2xxx/omap3xxx specific function and "
289 "not suppose to be used on omap4\n");
290 return 0;
291}
292#else
293/* Power/reset management domain register get/set */
294extern u32 omap2_prm_read_mod_reg(s16 module, u16 idx);
295extern void omap2_prm_write_mod_reg(u32 val, s16 module, u16 idx);
296extern u32 omap2_prm_rmw_mod_reg_bits(u32 mask, u32 bits, s16 module, s16 idx);
297extern u32 omap2_prm_set_mod_reg_bits(u32 bits, s16 module, s16 idx);
298extern u32 omap2_prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx);
299extern u32 omap2_prm_read_mod_bits_shift(s16 domain, s16 idx, u32 mask);
300
301/* These omap2_ PRM functions apply to both OMAP2 and 3 */
302extern int omap2_prm_is_hardreset_asserted(s16 prm_mod, u8 shift);
303extern int omap2_prm_assert_hardreset(s16 prm_mod, u8 shift);
304extern int omap2_prm_deassert_hardreset(s16 prm_mod, u8 rst_shift, u8 st_shift);
305
306#endif /* CONFIG_ARCH_OMAP4 */
307#endif
308
309/*
310 * Bits common to specific registers
311 *
312 * The 3430 register and bit names are generally used,
313 * since they tend to make more sense
314 */
315
316/* PM_EVGENONTIM_MPU */
317/* Named PM_EVEGENONTIM_MPU on the 24XX */
318#define OMAP_ONTIMEVAL_SHIFT 0
319#define OMAP_ONTIMEVAL_MASK (0xffffffff << 0)
320
321/* PM_EVGENOFFTIM_MPU */
322/* Named PM_EVEGENOFFTIM_MPU on the 24XX */
323#define OMAP_OFFTIMEVAL_SHIFT 0
324#define OMAP_OFFTIMEVAL_MASK (0xffffffff << 0)
325
326/* PRM_CLKSETUP and PRCM_VOLTSETUP */
327/* Named PRCM_CLKSSETUP on the 24XX */
328#define OMAP_SETUP_TIME_SHIFT 0
329#define OMAP_SETUP_TIME_MASK (0xffff << 0)
330
331/* PRM_CLKSRC_CTRL */
332/* Named PRCM_CLKSRC_CTRL on the 24XX */
333#define OMAP_SYSCLKDIV_SHIFT 6
334#define OMAP_SYSCLKDIV_MASK (0x3 << 6)
335#define OMAP_AUTOEXTCLKMODE_SHIFT 3
336#define OMAP_AUTOEXTCLKMODE_MASK (0x3 << 3)
337#define OMAP_SYSCLKSEL_SHIFT 0
338#define OMAP_SYSCLKSEL_MASK (0x3 << 0)
339
340/* PM_EVGENCTRL_MPU */
341#define OMAP_OFFLOADMODE_SHIFT 3
342#define OMAP_OFFLOADMODE_MASK (0x3 << 3)
343#define OMAP_ONLOADMODE_SHIFT 1
344#define OMAP_ONLOADMODE_MASK (0x3 << 1)
345#define OMAP_ENABLE_MASK (1 << 0)
346
347/* PRM_RSTTIME */
348/* Named RM_RSTTIME_WKUP on the 24xx */
349#define OMAP_RSTTIME2_SHIFT 8
350#define OMAP_RSTTIME2_MASK (0x1f << 8)
351#define OMAP_RSTTIME1_SHIFT 0
352#define OMAP_RSTTIME1_MASK (0xff << 0)
353
354/* PRM_RSTCTRL */
355/* Named RM_RSTCTRL_WKUP on the 24xx */
356/* 2420 calls RST_DPLL3 'RST_DPLL' */
357#define OMAP_RST_DPLL3_MASK (1 << 2)
358#define OMAP_RST_GS_MASK (1 << 1)
359
360
361/*
362 * Bits common to module-shared registers
363 *
364 * Not all registers of a particular type support all of these bits -
365 * check TRM if you are unsure
366 */
367
368/*
369 * 24XX: RM_RSTST_MPU and RM_RSTST_DSP - on 24XX, 'COREDOMAINWKUP_RST' is
370 * called 'COREWKUP_RST'
371 *
372 * 3430: RM_RSTST_IVA2, RM_RSTST_MPU, RM_RSTST_GFX, RM_RSTST_DSS,
373 * RM_RSTST_CAM, RM_RSTST_PER, RM_RSTST_NEON
374 */
375#define OMAP_COREDOMAINWKUP_RST_MASK (1 << 3)
376
377/*
378 * 24XX: RM_RSTST_MPU, RM_RSTST_GFX, RM_RSTST_DSP
379 *
380 * 2430: RM_RSTST_MDM
381 *
382 * 3430: RM_RSTST_CORE, RM_RSTST_EMU
383 */
384#define OMAP_DOMAINWKUP_RST_MASK (1 << 2)
385
386/*
387 * 24XX: RM_RSTST_MPU, RM_RSTST_WKUP, RM_RSTST_DSP
388 * On 24XX, 'GLOBALWARM_RST' is called 'GLOBALWMPU_RST'.
389 *
390 * 2430: RM_RSTST_MDM
391 *
392 * 3430: RM_RSTST_CORE, RM_RSTST_EMU
393 */
394#define OMAP_GLOBALWARM_RST_MASK (1 << 1)
395#define OMAP_GLOBALCOLD_RST_MASK (1 << 0)
396
397/*
398 * 24XX: PM_WKDEP_GFX, PM_WKDEP_MPU, PM_WKDEP_CORE, PM_WKDEP_DSP
399 * 2420 TRM sometimes uses "EN_WAKEUP" instead of "EN_WKUP"
400 *
401 * 2430: PM_WKDEP_MDM
402 *
403 * 3430: PM_WKDEP_IVA2, PM_WKDEP_GFX, PM_WKDEP_DSS, PM_WKDEP_CAM,
404 * PM_WKDEP_PER
405 */
406#define OMAP_EN_WKUP_SHIFT 4
407#define OMAP_EN_WKUP_MASK (1 << 4)
408
409/*
410 * 24XX: PM_PWSTCTRL_MPU, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
411 * PM_PWSTCTRL_DSP
412 *
413 * 2430: PM_PWSTCTRL_MDM
414 *
415 * 3430: PM_PWSTCTRL_IVA2, PM_PWSTCTRL_CORE, PM_PWSTCTRL_GFX,
416 * PM_PWSTCTRL_DSS, PM_PWSTCTRL_CAM, PM_PWSTCTRL_PER,
417 * PM_PWSTCTRL_NEON
418 */
419#define OMAP_LOGICRETSTATE_MASK (1 << 2)
420
421
422/*
423 * MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP
424 * submodule to exit hardreset
425 */
426#define MAX_MODULE_HARDRESET_WAIT 10000
427
428
429#endif
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c
new file mode 100644
index 000000000000..a2a04bfa9628
--- /dev/null
+++ b/arch/arm/mach-omap2/prm44xx.c
@@ -0,0 +1,195 @@
1/*
2 * OMAP4 PRM module functions
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc.
5 * Copyright (C) 2010 Nokia Corporation
6 * Benoît Cousson
7 * Paul Walmsley
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#include <linux/kernel.h>
15#include <linux/delay.h>
16#include <linux/errno.h>
17#include <linux/err.h>
18#include <linux/io.h>
19
20#include <plat/common.h>
21#include <plat/cpu.h>
22#include <plat/prcm.h>
23
24#include "prm44xx.h"
25#include "prm-regbits-44xx.h"
26
27/*
28 * Address offset (in bytes) between the reset control and the reset
29 * status registers: 4 bytes on OMAP4
30 */
31#define OMAP4_RST_CTRL_ST_OFFSET 4
32
33/* PRM low-level functions */
34
35/* Read a register in a CM/PRM instance in the PRM module */
36u32 omap4_prm_read_inst_reg(s16 inst, u16 reg)
37{
38 return __raw_readl(OMAP44XX_PRM_REGADDR(inst, reg));
39}
40
41/* Write into a register in a CM/PRM instance in the PRM module */
42void omap4_prm_write_inst_reg(u32 val, s16 inst, u16 reg)
43{
44 __raw_writel(val, OMAP44XX_PRM_REGADDR(inst, reg));
45}
46
47/* Read-modify-write a register in a PRM module. Caller must lock */
48u32 omap4_prm_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 reg)
49{
50 u32 v;
51
52 v = omap4_prm_read_inst_reg(inst, reg);
53 v &= ~mask;
54 v |= bits;
55 omap4_prm_write_inst_reg(v, inst, reg);
56
57 return v;
58}
59
60/* Read a PRM register, AND it, and shift the result down to bit 0 */
61/* XXX deprecated */
62u32 omap4_prm_read_bits_shift(void __iomem *reg, u32 mask)
63{
64 u32 v;
65
66 v = __raw_readl(reg);
67 v &= mask;
68 v >>= __ffs(mask);
69
70 return v;
71}
72
73/* Read-modify-write a register in a PRM module. Caller must lock */
74/* XXX deprecated */
75u32 omap4_prm_rmw_reg_bits(u32 mask, u32 bits, void __iomem *reg)
76{
77 u32 v;
78
79 v = __raw_readl(reg);
80 v &= ~mask;
81 v |= bits;
82 __raw_writel(v, reg);
83
84 return v;
85}
86
87u32 omap4_prm_set_inst_reg_bits(u32 bits, s16 inst, s16 reg)
88{
89 return omap4_prm_rmw_inst_reg_bits(bits, bits, inst, reg);
90}
91
92u32 omap4_prm_clear_inst_reg_bits(u32 bits, s16 inst, s16 reg)
93{
94 return omap4_prm_rmw_inst_reg_bits(bits, 0x0, inst, reg);
95}
96
97/**
98 * omap4_prm_is_hardreset_asserted - read the HW reset line state of
99 * submodules contained in the hwmod module
100 * @rstctrl_reg: RM_RSTCTRL register address for this module
101 * @shift: register bit shift corresponding to the reset line to check
102 *
103 * Returns 1 if the (sub)module hardreset line is currently asserted,
104 * 0 if the (sub)module hardreset line is not currently asserted, or
105 * -EINVAL upon parameter error.
106 */
107int omap4_prm_is_hardreset_asserted(void __iomem *rstctrl_reg, u8 shift)
108{
109 if (!cpu_is_omap44xx() || !rstctrl_reg)
110 return -EINVAL;
111
112 return omap4_prm_read_bits_shift(rstctrl_reg, (1 << shift));
113}
114
115/**
116 * omap4_prm_assert_hardreset - assert the HW reset line of a submodule
117 * @rstctrl_reg: RM_RSTCTRL register address for this module
118 * @shift: register bit shift corresponding to the reset line to assert
119 *
120 * Some IPs like dsp, ipu or iva contain processors that require an HW
121 * reset line to be asserted / deasserted in order to fully enable the
122 * IP. These modules may have multiple hard-reset lines that reset
123 * different 'submodules' inside the IP block. This function will
124 * place the submodule into reset. Returns 0 upon success or -EINVAL
125 * upon an argument error.
126 */
127int omap4_prm_assert_hardreset(void __iomem *rstctrl_reg, u8 shift)
128{
129 u32 mask;
130
131 if (!cpu_is_omap44xx() || !rstctrl_reg)
132 return -EINVAL;
133
134 mask = 1 << shift;
135 omap4_prm_rmw_reg_bits(mask, mask, rstctrl_reg);
136
137 return 0;
138}
139
140/**
141 * omap4_prm_deassert_hardreset - deassert a submodule hardreset line and wait
142 * @rstctrl_reg: RM_RSTCTRL register address for this module
143 * @shift: register bit shift corresponding to the reset line to deassert
144 *
145 * Some IPs like dsp, ipu or iva contain processors that require an HW
146 * reset line to be asserted / deasserted in order to fully enable the
147 * IP. These modules may have multiple hard-reset lines that reset
148 * different 'submodules' inside the IP block. This function will
149 * take the submodule out of reset and wait until the PRCM indicates
150 * that the reset has completed before returning. Returns 0 upon success or
151 * -EINVAL upon an argument error, -EEXIST if the submodule was already out
152 * of reset, or -EBUSY if the submodule did not exit reset promptly.
153 */
154int omap4_prm_deassert_hardreset(void __iomem *rstctrl_reg, u8 shift)
155{
156 u32 mask;
157 void __iomem *rstst_reg;
158 int c;
159
160 if (!cpu_is_omap44xx() || !rstctrl_reg)
161 return -EINVAL;
162
163 rstst_reg = rstctrl_reg + OMAP4_RST_CTRL_ST_OFFSET;
164
165 mask = 1 << shift;
166
167 /* Check the current status to avoid de-asserting the line twice */
168 if (omap4_prm_read_bits_shift(rstctrl_reg, mask) == 0)
169 return -EEXIST;
170
171 /* Clear the reset status by writing 1 to the status bit */
172 omap4_prm_rmw_reg_bits(0xffffffff, mask, rstst_reg);
173 /* de-assert the reset control line */
174 omap4_prm_rmw_reg_bits(mask, 0, rstctrl_reg);
175 /* wait the status to be set */
176 omap_test_timeout(omap4_prm_read_bits_shift(rstst_reg, mask),
177 MAX_MODULE_HARDRESET_WAIT, c);
178
179 return (c == MAX_MODULE_HARDRESET_WAIT) ? -EBUSY : 0;
180}
181
182void omap4_prm_global_warm_sw_reset(void)
183{
184 u32 v;
185
186 v = omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST,
187 OMAP4_RM_RSTCTRL);
188 v |= OMAP4430_RST_GLOBAL_WARM_SW_MASK;
189 omap4_prm_write_inst_reg(v, OMAP4430_PRM_DEVICE_INST,
190 OMAP4_RM_RSTCTRL);
191
192 /* OCP barrier */
193 v = omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST,
194 OMAP4_RM_RSTCTRL);
195}
diff --git a/arch/arm/mach-omap2/prm44xx.h b/arch/arm/mach-omap2/prm44xx.h
index fe8ef26431e5..67a0d3feb3f6 100644
--- a/arch/arm/mach-omap2/prm44xx.h
+++ b/arch/arm/mach-omap2/prm44xx.h
@@ -17,734 +17,762 @@
17 * This program is free software; you can redistribute it and/or modify 17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as 18 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation. 19 * published by the Free Software Foundation.
20 *
21 * XXX This file needs to be updated to align on one of "OMAP4", "OMAP44XX",
22 * or "OMAP4430".
20 */ 23 */
21 24
22#ifndef __ARCH_ARM_MACH_OMAP2_PRM44XX_H 25#ifndef __ARCH_ARM_MACH_OMAP2_PRM44XX_H
23#define __ARCH_ARM_MACH_OMAP2_PRM44XX_H 26#define __ARCH_ARM_MACH_OMAP2_PRM44XX_H
24 27
28#include "prcm-common.h"
29#include "prm.h"
30
31#define OMAP4430_PRM_BASE 0x4a306000
32
33#define OMAP44XX_PRM_REGADDR(inst, reg) \
34 OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE + (inst) + (reg))
35
36
37/* PRM instances */
38#define OMAP4430_PRM_OCP_SOCKET_INST 0x0000
39#define OMAP4430_PRM_CKGEN_INST 0x0100
40#define OMAP4430_PRM_MPU_INST 0x0300
41#define OMAP4430_PRM_TESLA_INST 0x0400
42#define OMAP4430_PRM_ABE_INST 0x0500
43#define OMAP4430_PRM_ALWAYS_ON_INST 0x0600
44#define OMAP4430_PRM_CORE_INST 0x0700
45#define OMAP4430_PRM_IVAHD_INST 0x0f00
46#define OMAP4430_PRM_CAM_INST 0x1000
47#define OMAP4430_PRM_DSS_INST 0x1100
48#define OMAP4430_PRM_GFX_INST 0x1200
49#define OMAP4430_PRM_L3INIT_INST 0x1300
50#define OMAP4430_PRM_L4PER_INST 0x1400
51#define OMAP4430_PRM_CEFUSE_INST 0x1600
52#define OMAP4430_PRM_WKUP_INST 0x1700
53#define OMAP4430_PRM_WKUP_CM_INST 0x1800
54#define OMAP4430_PRM_EMU_INST 0x1900
55#define OMAP4430_PRM_EMU_CM_INST 0x1a00
56#define OMAP4430_PRM_DEVICE_INST 0x1b00
57#define OMAP4430_PRM_INSTR_INST 0x1f00
58
59/* PRM clockdomain register offsets (from instance start) */
60#define OMAP4430_PRM_MPU_MPU_CDOFFS 0x0000
61#define OMAP4430_PRM_TESLA_TESLA_CDOFFS 0x0000
62#define OMAP4430_PRM_ABE_ABE_CDOFFS 0x0000
63#define OMAP4430_PRM_CORE_CORE_CDOFFS 0x0000
64#define OMAP4430_PRM_IVAHD_IVAHD_CDOFFS 0x0000
65#define OMAP4430_PRM_CAM_CAM_CDOFFS 0x0000
66#define OMAP4430_PRM_DSS_DSS_CDOFFS 0x0000
67#define OMAP4430_PRM_GFX_GFX_CDOFFS 0x0000
68#define OMAP4430_PRM_L3INIT_L3INIT_CDOFFS 0x0000
69#define OMAP4430_PRM_L4PER_L4PER_CDOFFS 0x0000
70#define OMAP4430_PRM_CEFUSE_CEFUSE_CDOFFS 0x0000
71#define OMAP4430_PRM_WKUP_CM_WKUP_CDOFFS 0x0000
72#define OMAP4430_PRM_EMU_EMU_CDOFFS 0x0000
73#define OMAP4430_PRM_EMU_CM_EMU_CDOFFS 0x0000
74
75/* OMAP4 specific register offsets */
76#define OMAP4_RM_RSTCTRL 0x0000
77#define OMAP4_RM_RSTTIME 0x0004
78#define OMAP4_RM_RSTST 0x0008
79#define OMAP4_PM_PWSTCTRL 0x0000
80#define OMAP4_PM_PWSTST 0x0004
81
25 82
26/* PRM */ 83/* PRM */
27 84
28/* PRM.OCP_SOCKET_PRM register offsets */ 85/* PRM.OCP_SOCKET_PRM register offsets */
29#define OMAP4_REVISION_PRM_OFFSET 0x0000 86#define OMAP4_REVISION_PRM_OFFSET 0x0000
30#define OMAP4430_REVISION_PRM OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0000) 87#define OMAP4430_REVISION_PRM OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0000)
31#define OMAP4_PRM_IRQSTATUS_MPU_OFFSET 0x0010 88#define OMAP4_PRM_IRQSTATUS_MPU_OFFSET 0x0010
32#define OMAP4430_PRM_IRQSTATUS_MPU OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0010) 89#define OMAP4430_PRM_IRQSTATUS_MPU OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0010)
33#define OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET 0x0014 90#define OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET 0x0014
34#define OMAP4430_PRM_IRQSTATUS_MPU_2 OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0014) 91#define OMAP4430_PRM_IRQSTATUS_MPU_2 OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0014)
35#define OMAP4_PRM_IRQENABLE_MPU_OFFSET 0x0018 92#define OMAP4_PRM_IRQENABLE_MPU_OFFSET 0x0018
36#define OMAP4430_PRM_IRQENABLE_MPU OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0018) 93#define OMAP4430_PRM_IRQENABLE_MPU OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0018)
37#define OMAP4_PRM_IRQENABLE_MPU_2_OFFSET 0x001c 94#define OMAP4_PRM_IRQENABLE_MPU_2_OFFSET 0x001c
38#define OMAP4430_PRM_IRQENABLE_MPU_2 OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x001c) 95#define OMAP4430_PRM_IRQENABLE_MPU_2 OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x001c)
39#define OMAP4_PRM_IRQSTATUS_DUCATI_OFFSET 0x0020 96#define OMAP4_PRM_IRQSTATUS_DUCATI_OFFSET 0x0020
40#define OMAP4430_PRM_IRQSTATUS_DUCATI OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0020) 97#define OMAP4430_PRM_IRQSTATUS_DUCATI OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0020)
41#define OMAP4_PRM_IRQENABLE_DUCATI_OFFSET 0x0028 98#define OMAP4_PRM_IRQENABLE_DUCATI_OFFSET 0x0028
42#define OMAP4430_PRM_IRQENABLE_DUCATI OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0028) 99#define OMAP4430_PRM_IRQENABLE_DUCATI OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0028)
43#define OMAP4_PRM_IRQSTATUS_TESLA_OFFSET 0x0030 100#define OMAP4_PRM_IRQSTATUS_TESLA_OFFSET 0x0030
44#define OMAP4430_PRM_IRQSTATUS_TESLA OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0030) 101#define OMAP4430_PRM_IRQSTATUS_TESLA OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0030)
45#define OMAP4_PRM_IRQENABLE_TESLA_OFFSET 0x0038 102#define OMAP4_PRM_IRQENABLE_TESLA_OFFSET 0x0038
46#define OMAP4430_PRM_IRQENABLE_TESLA OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0038) 103#define OMAP4430_PRM_IRQENABLE_TESLA OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0038)
47#define OMAP4_PRM_PRM_PROFILING_CLKCTRL_OFFSET 0x0040 104#define OMAP4_CM_PRM_PROFILING_CLKCTRL_OFFSET 0x0040
48#define OMAP4430_PRM_PRM_PROFILING_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_MOD, 0x0040) 105#define OMAP4430_CM_PRM_PROFILING_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_OCP_SOCKET_INST, 0x0040)
49 106
50/* PRM.CKGEN_PRM register offsets */ 107/* PRM.CKGEN_PRM register offsets */
51#define OMAP4_CM_ABE_DSS_SYS_CLKSEL_OFFSET 0x0000 108#define OMAP4_CM_ABE_DSS_SYS_CLKSEL_OFFSET 0x0000
52#define OMAP4430_CM_ABE_DSS_SYS_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_MOD, 0x0000) 109#define OMAP4430_CM_ABE_DSS_SYS_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_INST, 0x0000)
53#define OMAP4_CM_DPLL_SYS_REF_CLKSEL_OFFSET 0x0004
54#define OMAP4430_CM_DPLL_SYS_REF_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_MOD, 0x0004)
55#define OMAP4_CM_L4_WKUP_CLKSEL_OFFSET 0x0008 110#define OMAP4_CM_L4_WKUP_CLKSEL_OFFSET 0x0008
56#define OMAP4430_CM_L4_WKUP_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_MOD, 0x0008) 111#define OMAP4430_CM_L4_WKUP_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_INST, 0x0008)
57#define OMAP4_CM_ABE_PLL_REF_CLKSEL_OFFSET 0x000c 112#define OMAP4_CM_ABE_PLL_REF_CLKSEL_OFFSET 0x000c
58#define OMAP4430_CM_ABE_PLL_REF_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_MOD, 0x000c) 113#define OMAP4430_CM_ABE_PLL_REF_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_INST, 0x000c)
59#define OMAP4_CM_SYS_CLKSEL_OFFSET 0x0010 114#define OMAP4_CM_SYS_CLKSEL_OFFSET 0x0010
60#define OMAP4430_CM_SYS_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_MOD, 0x0010) 115#define OMAP4430_CM_SYS_CLKSEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CKGEN_INST, 0x0010)
61 116
62/* PRM.MPU_PRM register offsets */ 117/* PRM.MPU_PRM register offsets */
63#define OMAP4_PM_MPU_PWRSTCTRL_OFFSET 0x0000 118#define OMAP4_PM_MPU_PWRSTCTRL_OFFSET 0x0000
64#define OMAP4430_PM_MPU_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_MOD, 0x0000) 119#define OMAP4430_PM_MPU_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_INST, 0x0000)
65#define OMAP4_PM_MPU_PWRSTST_OFFSET 0x0004 120#define OMAP4_PM_MPU_PWRSTST_OFFSET 0x0004
66#define OMAP4430_PM_MPU_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_MOD, 0x0004) 121#define OMAP4430_PM_MPU_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_INST, 0x0004)
67#define OMAP4_RM_MPU_RSTST_OFFSET 0x0014 122#define OMAP4_RM_MPU_RSTST_OFFSET 0x0014
68#define OMAP4430_RM_MPU_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_MOD, 0x0014) 123#define OMAP4430_RM_MPU_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_INST, 0x0014)
69#define OMAP4_RM_MPU_MPU_CONTEXT_OFFSET 0x0024 124#define OMAP4_RM_MPU_MPU_CONTEXT_OFFSET 0x0024
70#define OMAP4430_RM_MPU_MPU_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_MOD, 0x0024) 125#define OMAP4430_RM_MPU_MPU_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_MPU_INST, 0x0024)
71 126
72/* PRM.TESLA_PRM register offsets */ 127/* PRM.TESLA_PRM register offsets */
73#define OMAP4_PM_TESLA_PWRSTCTRL_OFFSET 0x0000 128#define OMAP4_PM_TESLA_PWRSTCTRL_OFFSET 0x0000
74#define OMAP4430_PM_TESLA_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_MOD, 0x0000) 129#define OMAP4430_PM_TESLA_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_INST, 0x0000)
75#define OMAP4_PM_TESLA_PWRSTST_OFFSET 0x0004 130#define OMAP4_PM_TESLA_PWRSTST_OFFSET 0x0004
76#define OMAP4430_PM_TESLA_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_MOD, 0x0004) 131#define OMAP4430_PM_TESLA_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_INST, 0x0004)
77#define OMAP4_RM_TESLA_RSTCTRL_OFFSET 0x0010 132#define OMAP4_RM_TESLA_RSTCTRL_OFFSET 0x0010
78#define OMAP4430_RM_TESLA_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_MOD, 0x0010) 133#define OMAP4430_RM_TESLA_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_INST, 0x0010)
79#define OMAP4_RM_TESLA_RSTST_OFFSET 0x0014 134#define OMAP4_RM_TESLA_RSTST_OFFSET 0x0014
80#define OMAP4430_RM_TESLA_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_MOD, 0x0014) 135#define OMAP4430_RM_TESLA_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_INST, 0x0014)
81#define OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET 0x0024 136#define OMAP4_RM_TESLA_TESLA_CONTEXT_OFFSET 0x0024
82#define OMAP4430_RM_TESLA_TESLA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_MOD, 0x0024) 137#define OMAP4430_RM_TESLA_TESLA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_TESLA_INST, 0x0024)
83 138
84/* PRM.ABE_PRM register offsets */ 139/* PRM.ABE_PRM register offsets */
85#define OMAP4_PM_ABE_PWRSTCTRL_OFFSET 0x0000 140#define OMAP4_PM_ABE_PWRSTCTRL_OFFSET 0x0000
86#define OMAP4430_PM_ABE_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0000) 141#define OMAP4430_PM_ABE_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0000)
87#define OMAP4_PM_ABE_PWRSTST_OFFSET 0x0004 142#define OMAP4_PM_ABE_PWRSTST_OFFSET 0x0004
88#define OMAP4430_PM_ABE_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0004) 143#define OMAP4430_PM_ABE_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0004)
89#define OMAP4_RM_ABE_AESS_CONTEXT_OFFSET 0x002c 144#define OMAP4_RM_ABE_AESS_CONTEXT_OFFSET 0x002c
90#define OMAP4430_RM_ABE_AESS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x002c) 145#define OMAP4430_RM_ABE_AESS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x002c)
91#define OMAP4_PM_ABE_PDM_WKDEP_OFFSET 0x0030 146#define OMAP4_PM_ABE_PDM_WKDEP_OFFSET 0x0030
92#define OMAP4430_PM_ABE_PDM_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0030) 147#define OMAP4430_PM_ABE_PDM_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0030)
93#define OMAP4_RM_ABE_PDM_CONTEXT_OFFSET 0x0034 148#define OMAP4_RM_ABE_PDM_CONTEXT_OFFSET 0x0034
94#define OMAP4430_RM_ABE_PDM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0034) 149#define OMAP4430_RM_ABE_PDM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0034)
95#define OMAP4_PM_ABE_DMIC_WKDEP_OFFSET 0x0038 150#define OMAP4_PM_ABE_DMIC_WKDEP_OFFSET 0x0038
96#define OMAP4430_PM_ABE_DMIC_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0038) 151#define OMAP4430_PM_ABE_DMIC_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0038)
97#define OMAP4_RM_ABE_DMIC_CONTEXT_OFFSET 0x003c 152#define OMAP4_RM_ABE_DMIC_CONTEXT_OFFSET 0x003c
98#define OMAP4430_RM_ABE_DMIC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x003c) 153#define OMAP4430_RM_ABE_DMIC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x003c)
99#define OMAP4_PM_ABE_MCASP_WKDEP_OFFSET 0x0040 154#define OMAP4_PM_ABE_MCASP_WKDEP_OFFSET 0x0040
100#define OMAP4430_PM_ABE_MCASP_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0040) 155#define OMAP4430_PM_ABE_MCASP_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0040)
101#define OMAP4_RM_ABE_MCASP_CONTEXT_OFFSET 0x0044 156#define OMAP4_RM_ABE_MCASP_CONTEXT_OFFSET 0x0044
102#define OMAP4430_RM_ABE_MCASP_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0044) 157#define OMAP4430_RM_ABE_MCASP_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0044)
103#define OMAP4_PM_ABE_MCBSP1_WKDEP_OFFSET 0x0048 158#define OMAP4_PM_ABE_MCBSP1_WKDEP_OFFSET 0x0048
104#define OMAP4430_PM_ABE_MCBSP1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0048) 159#define OMAP4430_PM_ABE_MCBSP1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0048)
105#define OMAP4_RM_ABE_MCBSP1_CONTEXT_OFFSET 0x004c 160#define OMAP4_RM_ABE_MCBSP1_CONTEXT_OFFSET 0x004c
106#define OMAP4430_RM_ABE_MCBSP1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x004c) 161#define OMAP4430_RM_ABE_MCBSP1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x004c)
107#define OMAP4_PM_ABE_MCBSP2_WKDEP_OFFSET 0x0050 162#define OMAP4_PM_ABE_MCBSP2_WKDEP_OFFSET 0x0050
108#define OMAP4430_PM_ABE_MCBSP2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0050) 163#define OMAP4430_PM_ABE_MCBSP2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0050)
109#define OMAP4_RM_ABE_MCBSP2_CONTEXT_OFFSET 0x0054 164#define OMAP4_RM_ABE_MCBSP2_CONTEXT_OFFSET 0x0054
110#define OMAP4430_RM_ABE_MCBSP2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0054) 165#define OMAP4430_RM_ABE_MCBSP2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0054)
111#define OMAP4_PM_ABE_MCBSP3_WKDEP_OFFSET 0x0058 166#define OMAP4_PM_ABE_MCBSP3_WKDEP_OFFSET 0x0058
112#define OMAP4430_PM_ABE_MCBSP3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0058) 167#define OMAP4430_PM_ABE_MCBSP3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0058)
113#define OMAP4_RM_ABE_MCBSP3_CONTEXT_OFFSET 0x005c 168#define OMAP4_RM_ABE_MCBSP3_CONTEXT_OFFSET 0x005c
114#define OMAP4430_RM_ABE_MCBSP3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x005c) 169#define OMAP4430_RM_ABE_MCBSP3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x005c)
115#define OMAP4_PM_ABE_SLIMBUS_WKDEP_OFFSET 0x0060 170#define OMAP4_PM_ABE_SLIMBUS_WKDEP_OFFSET 0x0060
116#define OMAP4430_PM_ABE_SLIMBUS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0060) 171#define OMAP4430_PM_ABE_SLIMBUS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0060)
117#define OMAP4_RM_ABE_SLIMBUS_CONTEXT_OFFSET 0x0064 172#define OMAP4_RM_ABE_SLIMBUS_CONTEXT_OFFSET 0x0064
118#define OMAP4430_RM_ABE_SLIMBUS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0064) 173#define OMAP4430_RM_ABE_SLIMBUS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0064)
119#define OMAP4_PM_ABE_TIMER5_WKDEP_OFFSET 0x0068 174#define OMAP4_PM_ABE_TIMER5_WKDEP_OFFSET 0x0068
120#define OMAP4430_PM_ABE_TIMER5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0068) 175#define OMAP4430_PM_ABE_TIMER5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0068)
121#define OMAP4_RM_ABE_TIMER5_CONTEXT_OFFSET 0x006c 176#define OMAP4_RM_ABE_TIMER5_CONTEXT_OFFSET 0x006c
122#define OMAP4430_RM_ABE_TIMER5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x006c) 177#define OMAP4430_RM_ABE_TIMER5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x006c)
123#define OMAP4_PM_ABE_TIMER6_WKDEP_OFFSET 0x0070 178#define OMAP4_PM_ABE_TIMER6_WKDEP_OFFSET 0x0070
124#define OMAP4430_PM_ABE_TIMER6_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0070) 179#define OMAP4430_PM_ABE_TIMER6_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0070)
125#define OMAP4_RM_ABE_TIMER6_CONTEXT_OFFSET 0x0074 180#define OMAP4_RM_ABE_TIMER6_CONTEXT_OFFSET 0x0074
126#define OMAP4430_RM_ABE_TIMER6_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0074) 181#define OMAP4430_RM_ABE_TIMER6_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0074)
127#define OMAP4_PM_ABE_TIMER7_WKDEP_OFFSET 0x0078 182#define OMAP4_PM_ABE_TIMER7_WKDEP_OFFSET 0x0078
128#define OMAP4430_PM_ABE_TIMER7_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0078) 183#define OMAP4430_PM_ABE_TIMER7_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0078)
129#define OMAP4_RM_ABE_TIMER7_CONTEXT_OFFSET 0x007c 184#define OMAP4_RM_ABE_TIMER7_CONTEXT_OFFSET 0x007c
130#define OMAP4430_RM_ABE_TIMER7_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x007c) 185#define OMAP4430_RM_ABE_TIMER7_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x007c)
131#define OMAP4_PM_ABE_TIMER8_WKDEP_OFFSET 0x0080 186#define OMAP4_PM_ABE_TIMER8_WKDEP_OFFSET 0x0080
132#define OMAP4430_PM_ABE_TIMER8_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0080) 187#define OMAP4430_PM_ABE_TIMER8_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0080)
133#define OMAP4_RM_ABE_TIMER8_CONTEXT_OFFSET 0x0084 188#define OMAP4_RM_ABE_TIMER8_CONTEXT_OFFSET 0x0084
134#define OMAP4430_RM_ABE_TIMER8_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0084) 189#define OMAP4430_RM_ABE_TIMER8_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0084)
135#define OMAP4_PM_ABE_WDT3_WKDEP_OFFSET 0x0088 190#define OMAP4_PM_ABE_WDT3_WKDEP_OFFSET 0x0088
136#define OMAP4430_PM_ABE_WDT3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x0088) 191#define OMAP4430_PM_ABE_WDT3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x0088)
137#define OMAP4_RM_ABE_WDT3_CONTEXT_OFFSET 0x008c 192#define OMAP4_RM_ABE_WDT3_CONTEXT_OFFSET 0x008c
138#define OMAP4430_RM_ABE_WDT3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_MOD, 0x008c) 193#define OMAP4430_RM_ABE_WDT3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ABE_INST, 0x008c)
139 194
140/* PRM.ALWAYS_ON_PRM register offsets */ 195/* PRM.ALWAYS_ON_PRM register offsets */
141#define OMAP4_RM_ALWON_MDMINTC_CONTEXT_OFFSET 0x0024 196#define OMAP4_RM_ALWON_MDMINTC_CONTEXT_OFFSET 0x0024
142#define OMAP4430_RM_ALWON_MDMINTC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_MOD, 0x0024) 197#define OMAP4430_RM_ALWON_MDMINTC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_INST, 0x0024)
143#define OMAP4_PM_ALWON_SR_MPU_WKDEP_OFFSET 0x0028 198#define OMAP4_PM_ALWON_SR_MPU_WKDEP_OFFSET 0x0028
144#define OMAP4430_PM_ALWON_SR_MPU_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_MOD, 0x0028) 199#define OMAP4430_PM_ALWON_SR_MPU_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_INST, 0x0028)
145#define OMAP4_RM_ALWON_SR_MPU_CONTEXT_OFFSET 0x002c 200#define OMAP4_RM_ALWON_SR_MPU_CONTEXT_OFFSET 0x002c
146#define OMAP4430_RM_ALWON_SR_MPU_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_MOD, 0x002c) 201#define OMAP4430_RM_ALWON_SR_MPU_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_INST, 0x002c)
147#define OMAP4_PM_ALWON_SR_IVA_WKDEP_OFFSET 0x0030 202#define OMAP4_PM_ALWON_SR_IVA_WKDEP_OFFSET 0x0030
148#define OMAP4430_PM_ALWON_SR_IVA_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_MOD, 0x0030) 203#define OMAP4430_PM_ALWON_SR_IVA_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_INST, 0x0030)
149#define OMAP4_RM_ALWON_SR_IVA_CONTEXT_OFFSET 0x0034 204#define OMAP4_RM_ALWON_SR_IVA_CONTEXT_OFFSET 0x0034
150#define OMAP4430_RM_ALWON_SR_IVA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_MOD, 0x0034) 205#define OMAP4430_RM_ALWON_SR_IVA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_INST, 0x0034)
151#define OMAP4_PM_ALWON_SR_CORE_WKDEP_OFFSET 0x0038 206#define OMAP4_PM_ALWON_SR_CORE_WKDEP_OFFSET 0x0038
152#define OMAP4430_PM_ALWON_SR_CORE_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_MOD, 0x0038) 207#define OMAP4430_PM_ALWON_SR_CORE_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_INST, 0x0038)
153#define OMAP4_RM_ALWON_SR_CORE_CONTEXT_OFFSET 0x003c 208#define OMAP4_RM_ALWON_SR_CORE_CONTEXT_OFFSET 0x003c
154#define OMAP4430_RM_ALWON_SR_CORE_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_MOD, 0x003c) 209#define OMAP4430_RM_ALWON_SR_CORE_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_ALWAYS_ON_INST, 0x003c)
155 210
156/* PRM.CORE_PRM register offsets */ 211/* PRM.CORE_PRM register offsets */
157#define OMAP4_PM_CORE_PWRSTCTRL_OFFSET 0x0000 212#define OMAP4_PM_CORE_PWRSTCTRL_OFFSET 0x0000
158#define OMAP4430_PM_CORE_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0000) 213#define OMAP4430_PM_CORE_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0000)
159#define OMAP4_PM_CORE_PWRSTST_OFFSET 0x0004 214#define OMAP4_PM_CORE_PWRSTST_OFFSET 0x0004
160#define OMAP4430_PM_CORE_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0004) 215#define OMAP4430_PM_CORE_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0004)
161#define OMAP4_RM_L3_1_L3_1_CONTEXT_OFFSET 0x0024 216#define OMAP4_RM_L3_1_L3_1_CONTEXT_OFFSET 0x0024
162#define OMAP4430_RM_L3_1_L3_1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0024) 217#define OMAP4430_RM_L3_1_L3_1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0024)
163#define OMAP4_RM_L3_2_L3_2_CONTEXT_OFFSET 0x0124 218#define OMAP4_RM_L3_2_L3_2_CONTEXT_OFFSET 0x0124
164#define OMAP4430_RM_L3_2_L3_2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0124) 219#define OMAP4430_RM_L3_2_L3_2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0124)
165#define OMAP4_RM_L3_2_GPMC_CONTEXT_OFFSET 0x012c 220#define OMAP4_RM_L3_2_GPMC_CONTEXT_OFFSET 0x012c
166#define OMAP4430_RM_L3_2_GPMC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x012c) 221#define OMAP4430_RM_L3_2_GPMC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x012c)
167#define OMAP4_RM_L3_2_OCMC_RAM_CONTEXT_OFFSET 0x0134 222#define OMAP4_RM_L3_2_OCMC_RAM_CONTEXT_OFFSET 0x0134
168#define OMAP4430_RM_L3_2_OCMC_RAM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0134) 223#define OMAP4430_RM_L3_2_OCMC_RAM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0134)
169#define OMAP4_RM_DUCATI_RSTCTRL_OFFSET 0x0210 224#define OMAP4_RM_DUCATI_RSTCTRL_OFFSET 0x0210
170#define OMAP4430_RM_DUCATI_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0210) 225#define OMAP4430_RM_DUCATI_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0210)
171#define OMAP4_RM_DUCATI_RSTST_OFFSET 0x0214 226#define OMAP4_RM_DUCATI_RSTST_OFFSET 0x0214
172#define OMAP4430_RM_DUCATI_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0214) 227#define OMAP4430_RM_DUCATI_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0214)
173#define OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET 0x0224 228#define OMAP4_RM_DUCATI_DUCATI_CONTEXT_OFFSET 0x0224
174#define OMAP4430_RM_DUCATI_DUCATI_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0224) 229#define OMAP4430_RM_DUCATI_DUCATI_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0224)
175#define OMAP4_RM_SDMA_SDMA_CONTEXT_OFFSET 0x0324 230#define OMAP4_RM_SDMA_SDMA_CONTEXT_OFFSET 0x0324
176#define OMAP4430_RM_SDMA_SDMA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0324) 231#define OMAP4430_RM_SDMA_SDMA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0324)
177#define OMAP4_RM_MEMIF_DMM_CONTEXT_OFFSET 0x0424 232#define OMAP4_RM_MEMIF_DMM_CONTEXT_OFFSET 0x0424
178#define OMAP4430_RM_MEMIF_DMM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0424) 233#define OMAP4430_RM_MEMIF_DMM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0424)
179#define OMAP4_RM_MEMIF_EMIF_FW_CONTEXT_OFFSET 0x042c 234#define OMAP4_RM_MEMIF_EMIF_FW_CONTEXT_OFFSET 0x042c
180#define OMAP4430_RM_MEMIF_EMIF_FW_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x042c) 235#define OMAP4430_RM_MEMIF_EMIF_FW_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x042c)
181#define OMAP4_RM_MEMIF_EMIF_1_CONTEXT_OFFSET 0x0434 236#define OMAP4_RM_MEMIF_EMIF_1_CONTEXT_OFFSET 0x0434
182#define OMAP4430_RM_MEMIF_EMIF_1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0434) 237#define OMAP4430_RM_MEMIF_EMIF_1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0434)
183#define OMAP4_RM_MEMIF_EMIF_2_CONTEXT_OFFSET 0x043c 238#define OMAP4_RM_MEMIF_EMIF_2_CONTEXT_OFFSET 0x043c
184#define OMAP4430_RM_MEMIF_EMIF_2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x043c) 239#define OMAP4430_RM_MEMIF_EMIF_2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x043c)
185#define OMAP4_RM_MEMIF_DLL_CONTEXT_OFFSET 0x0444 240#define OMAP4_RM_MEMIF_DLL_CONTEXT_OFFSET 0x0444
186#define OMAP4430_RM_MEMIF_DLL_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0444) 241#define OMAP4430_RM_MEMIF_DLL_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0444)
187#define OMAP4_RM_MEMIF_EMIF_H1_CONTEXT_OFFSET 0x0454 242#define OMAP4_RM_MEMIF_EMIF_H1_CONTEXT_OFFSET 0x0454
188#define OMAP4430_RM_MEMIF_EMIF_H1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0454) 243#define OMAP4430_RM_MEMIF_EMIF_H1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0454)
189#define OMAP4_RM_MEMIF_EMIF_H2_CONTEXT_OFFSET 0x045c 244#define OMAP4_RM_MEMIF_EMIF_H2_CONTEXT_OFFSET 0x045c
190#define OMAP4430_RM_MEMIF_EMIF_H2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x045c) 245#define OMAP4430_RM_MEMIF_EMIF_H2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x045c)
191#define OMAP4_RM_MEMIF_DLL_H_CONTEXT_OFFSET 0x0464 246#define OMAP4_RM_MEMIF_DLL_H_CONTEXT_OFFSET 0x0464
192#define OMAP4430_RM_MEMIF_DLL_H_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0464) 247#define OMAP4430_RM_MEMIF_DLL_H_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0464)
193#define OMAP4_RM_D2D_SAD2D_CONTEXT_OFFSET 0x0524 248#define OMAP4_RM_D2D_SAD2D_CONTEXT_OFFSET 0x0524
194#define OMAP4430_RM_D2D_SAD2D_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0524) 249#define OMAP4430_RM_D2D_SAD2D_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0524)
195#define OMAP4_RM_D2D_MODEM_ICR_CONTEXT_OFFSET 0x052c 250#define OMAP4_RM_D2D_INSTEM_ICR_CONTEXT_OFFSET 0x052c
196#define OMAP4430_RM_D2D_MODEM_ICR_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x052c) 251#define OMAP4430_RM_D2D_INSTEM_ICR_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x052c)
197#define OMAP4_RM_D2D_SAD2D_FW_CONTEXT_OFFSET 0x0534 252#define OMAP4_RM_D2D_SAD2D_FW_CONTEXT_OFFSET 0x0534
198#define OMAP4430_RM_D2D_SAD2D_FW_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0534) 253#define OMAP4430_RM_D2D_SAD2D_FW_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0534)
199#define OMAP4_RM_L4CFG_L4_CFG_CONTEXT_OFFSET 0x0624 254#define OMAP4_RM_L4CFG_L4_CFG_CONTEXT_OFFSET 0x0624
200#define OMAP4430_RM_L4CFG_L4_CFG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0624) 255#define OMAP4430_RM_L4CFG_L4_CFG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0624)
201#define OMAP4_RM_L4CFG_HW_SEM_CONTEXT_OFFSET 0x062c 256#define OMAP4_RM_L4CFG_HW_SEM_CONTEXT_OFFSET 0x062c
202#define OMAP4430_RM_L4CFG_HW_SEM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x062c) 257#define OMAP4430_RM_L4CFG_HW_SEM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x062c)
203#define OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET 0x0634 258#define OMAP4_RM_L4CFG_MAILBOX_CONTEXT_OFFSET 0x0634
204#define OMAP4430_RM_L4CFG_MAILBOX_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0634) 259#define OMAP4430_RM_L4CFG_MAILBOX_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0634)
205#define OMAP4_RM_L4CFG_SAR_ROM_CONTEXT_OFFSET 0x063c 260#define OMAP4_RM_L4CFG_SAR_ROM_CONTEXT_OFFSET 0x063c
206#define OMAP4430_RM_L4CFG_SAR_ROM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x063c) 261#define OMAP4430_RM_L4CFG_SAR_ROM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x063c)
207#define OMAP4_RM_L3INSTR_L3_3_CONTEXT_OFFSET 0x0724 262#define OMAP4_RM_L3INSTR_L3_3_CONTEXT_OFFSET 0x0724
208#define OMAP4430_RM_L3INSTR_L3_3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0724) 263#define OMAP4430_RM_L3INSTR_L3_3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0724)
209#define OMAP4_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET 0x072c 264#define OMAP4_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET 0x072c
210#define OMAP4430_RM_L3INSTR_L3_INSTR_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x072c) 265#define OMAP4430_RM_L3INSTR_L3_INSTR_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x072c)
211#define OMAP4_RM_L3INSTR_OCP_WP1_CONTEXT_OFFSET 0x0744 266#define OMAP4_RM_L3INSTR_OCP_WP1_CONTEXT_OFFSET 0x0744
212#define OMAP4430_RM_L3INSTR_OCP_WP1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_MOD, 0x0744) 267#define OMAP4430_RM_L3INSTR_OCP_WP1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CORE_INST, 0x0744)
213 268
214/* PRM.IVAHD_PRM register offsets */ 269/* PRM.IVAHD_PRM register offsets */
215#define OMAP4_PM_IVAHD_PWRSTCTRL_OFFSET 0x0000 270#define OMAP4_PM_IVAHD_PWRSTCTRL_OFFSET 0x0000
216#define OMAP4430_PM_IVAHD_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_MOD, 0x0000) 271#define OMAP4430_PM_IVAHD_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_INST, 0x0000)
217#define OMAP4_PM_IVAHD_PWRSTST_OFFSET 0x0004 272#define OMAP4_PM_IVAHD_PWRSTST_OFFSET 0x0004
218#define OMAP4430_PM_IVAHD_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_MOD, 0x0004) 273#define OMAP4430_PM_IVAHD_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_INST, 0x0004)
219#define OMAP4_RM_IVAHD_RSTCTRL_OFFSET 0x0010 274#define OMAP4_RM_IVAHD_RSTCTRL_OFFSET 0x0010
220#define OMAP4430_RM_IVAHD_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_MOD, 0x0010) 275#define OMAP4430_RM_IVAHD_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_INST, 0x0010)
221#define OMAP4_RM_IVAHD_RSTST_OFFSET 0x0014 276#define OMAP4_RM_IVAHD_RSTST_OFFSET 0x0014
222#define OMAP4430_RM_IVAHD_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_MOD, 0x0014) 277#define OMAP4430_RM_IVAHD_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_INST, 0x0014)
223#define OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET 0x0024 278#define OMAP4_RM_IVAHD_IVAHD_CONTEXT_OFFSET 0x0024
224#define OMAP4430_RM_IVAHD_IVAHD_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_MOD, 0x0024) 279#define OMAP4430_RM_IVAHD_IVAHD_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_INST, 0x0024)
225#define OMAP4_RM_IVAHD_SL2_CONTEXT_OFFSET 0x002c 280#define OMAP4_RM_IVAHD_SL2_CONTEXT_OFFSET 0x002c
226#define OMAP4430_RM_IVAHD_SL2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_MOD, 0x002c) 281#define OMAP4430_RM_IVAHD_SL2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_IVAHD_INST, 0x002c)
227 282
228/* PRM.CAM_PRM register offsets */ 283/* PRM.CAM_PRM register offsets */
229#define OMAP4_PM_CAM_PWRSTCTRL_OFFSET 0x0000 284#define OMAP4_PM_CAM_PWRSTCTRL_OFFSET 0x0000
230#define OMAP4430_PM_CAM_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_MOD, 0x0000) 285#define OMAP4430_PM_CAM_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_INST, 0x0000)
231#define OMAP4_PM_CAM_PWRSTST_OFFSET 0x0004 286#define OMAP4_PM_CAM_PWRSTST_OFFSET 0x0004
232#define OMAP4430_PM_CAM_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_MOD, 0x0004) 287#define OMAP4430_PM_CAM_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_INST, 0x0004)
233#define OMAP4_RM_CAM_ISS_CONTEXT_OFFSET 0x0024 288#define OMAP4_RM_CAM_ISS_CONTEXT_OFFSET 0x0024
234#define OMAP4430_RM_CAM_ISS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_MOD, 0x0024) 289#define OMAP4430_RM_CAM_ISS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_INST, 0x0024)
235#define OMAP4_RM_CAM_FDIF_CONTEXT_OFFSET 0x002c 290#define OMAP4_RM_CAM_FDIF_CONTEXT_OFFSET 0x002c
236#define OMAP4430_RM_CAM_FDIF_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_MOD, 0x002c) 291#define OMAP4430_RM_CAM_FDIF_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CAM_INST, 0x002c)
237 292
238/* PRM.DSS_PRM register offsets */ 293/* PRM.DSS_PRM register offsets */
239#define OMAP4_PM_DSS_PWRSTCTRL_OFFSET 0x0000 294#define OMAP4_PM_DSS_PWRSTCTRL_OFFSET 0x0000
240#define OMAP4430_PM_DSS_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_MOD, 0x0000) 295#define OMAP4430_PM_DSS_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_INST, 0x0000)
241#define OMAP4_PM_DSS_PWRSTST_OFFSET 0x0004 296#define OMAP4_PM_DSS_PWRSTST_OFFSET 0x0004
242#define OMAP4430_PM_DSS_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_MOD, 0x0004) 297#define OMAP4430_PM_DSS_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_INST, 0x0004)
243#define OMAP4_PM_DSS_DSS_WKDEP_OFFSET 0x0020 298#define OMAP4_PM_DSS_DSS_WKDEP_OFFSET 0x0020
244#define OMAP4430_PM_DSS_DSS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_MOD, 0x0020) 299#define OMAP4430_PM_DSS_DSS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_INST, 0x0020)
245#define OMAP4_RM_DSS_DSS_CONTEXT_OFFSET 0x0024 300#define OMAP4_RM_DSS_DSS_CONTEXT_OFFSET 0x0024
246#define OMAP4430_RM_DSS_DSS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_MOD, 0x0024) 301#define OMAP4430_RM_DSS_DSS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_INST, 0x0024)
247#define OMAP4_RM_DSS_DEISS_CONTEXT_OFFSET 0x002c 302#define OMAP4_RM_DSS_DEISS_CONTEXT_OFFSET 0x002c
248#define OMAP4430_RM_DSS_DEISS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_MOD, 0x002c) 303#define OMAP4430_RM_DSS_DEISS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DSS_INST, 0x002c)
249 304
250/* PRM.GFX_PRM register offsets */ 305/* PRM.GFX_PRM register offsets */
251#define OMAP4_PM_GFX_PWRSTCTRL_OFFSET 0x0000 306#define OMAP4_PM_GFX_PWRSTCTRL_OFFSET 0x0000
252#define OMAP4430_PM_GFX_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_GFX_MOD, 0x0000) 307#define OMAP4430_PM_GFX_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_GFX_INST, 0x0000)
253#define OMAP4_PM_GFX_PWRSTST_OFFSET 0x0004 308#define OMAP4_PM_GFX_PWRSTST_OFFSET 0x0004
254#define OMAP4430_PM_GFX_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_GFX_MOD, 0x0004) 309#define OMAP4430_PM_GFX_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_GFX_INST, 0x0004)
255#define OMAP4_RM_GFX_GFX_CONTEXT_OFFSET 0x0024 310#define OMAP4_RM_GFX_GFX_CONTEXT_OFFSET 0x0024
256#define OMAP4430_RM_GFX_GFX_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_GFX_MOD, 0x0024) 311#define OMAP4430_RM_GFX_GFX_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_GFX_INST, 0x0024)
257 312
258/* PRM.L3INIT_PRM register offsets */ 313/* PRM.L3INIT_PRM register offsets */
259#define OMAP4_PM_L3INIT_PWRSTCTRL_OFFSET 0x0000 314#define OMAP4_PM_L3INIT_PWRSTCTRL_OFFSET 0x0000
260#define OMAP4430_PM_L3INIT_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0000) 315#define OMAP4430_PM_L3INIT_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0000)
261#define OMAP4_PM_L3INIT_PWRSTST_OFFSET 0x0004 316#define OMAP4_PM_L3INIT_PWRSTST_OFFSET 0x0004
262#define OMAP4430_PM_L3INIT_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0004) 317#define OMAP4430_PM_L3INIT_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0004)
263#define OMAP4_PM_L3INIT_MMC1_WKDEP_OFFSET 0x0028 318#define OMAP4_PM_L3INIT_MMC1_WKDEP_OFFSET 0x0028
264#define OMAP4430_PM_L3INIT_MMC1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0028) 319#define OMAP4430_PM_L3INIT_MMC1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0028)
265#define OMAP4_RM_L3INIT_MMC1_CONTEXT_OFFSET 0x002c 320#define OMAP4_RM_L3INIT_MMC1_CONTEXT_OFFSET 0x002c
266#define OMAP4430_RM_L3INIT_MMC1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x002c) 321#define OMAP4430_RM_L3INIT_MMC1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x002c)
267#define OMAP4_PM_L3INIT_MMC2_WKDEP_OFFSET 0x0030 322#define OMAP4_PM_L3INIT_MMC2_WKDEP_OFFSET 0x0030
268#define OMAP4430_PM_L3INIT_MMC2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0030) 323#define OMAP4430_PM_L3INIT_MMC2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0030)
269#define OMAP4_RM_L3INIT_MMC2_CONTEXT_OFFSET 0x0034 324#define OMAP4_RM_L3INIT_MMC2_CONTEXT_OFFSET 0x0034
270#define OMAP4430_RM_L3INIT_MMC2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0034) 325#define OMAP4430_RM_L3INIT_MMC2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0034)
271#define OMAP4_PM_L3INIT_HSI_WKDEP_OFFSET 0x0038 326#define OMAP4_PM_L3INIT_HSI_WKDEP_OFFSET 0x0038
272#define OMAP4430_PM_L3INIT_HSI_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0038) 327#define OMAP4430_PM_L3INIT_HSI_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0038)
273#define OMAP4_RM_L3INIT_HSI_CONTEXT_OFFSET 0x003c 328#define OMAP4_RM_L3INIT_HSI_CONTEXT_OFFSET 0x003c
274#define OMAP4430_RM_L3INIT_HSI_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x003c) 329#define OMAP4430_RM_L3INIT_HSI_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x003c)
275#define OMAP4_PM_L3INIT_UNIPRO1_WKDEP_OFFSET 0x0040 330#define OMAP4_PM_L3INIT_UNIPRO1_WKDEP_OFFSET 0x0040
276#define OMAP4430_PM_L3INIT_UNIPRO1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0040) 331#define OMAP4430_PM_L3INIT_UNIPRO1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0040)
277#define OMAP4_RM_L3INIT_UNIPRO1_CONTEXT_OFFSET 0x0044 332#define OMAP4_RM_L3INIT_UNIPRO1_CONTEXT_OFFSET 0x0044
278#define OMAP4430_RM_L3INIT_UNIPRO1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0044) 333#define OMAP4430_RM_L3INIT_UNIPRO1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0044)
279#define OMAP4_PM_L3INIT_USB_HOST_WKDEP_OFFSET 0x0058 334#define OMAP4_PM_L3INIT_USB_HOST_WKDEP_OFFSET 0x0058
280#define OMAP4430_PM_L3INIT_USB_HOST_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0058) 335#define OMAP4430_PM_L3INIT_USB_HOST_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0058)
281#define OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET 0x005c 336#define OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET 0x005c
282#define OMAP4430_RM_L3INIT_USB_HOST_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x005c) 337#define OMAP4430_RM_L3INIT_USB_HOST_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x005c)
283#define OMAP4_PM_L3INIT_USB_OTG_WKDEP_OFFSET 0x0060 338#define OMAP4_PM_L3INIT_USB_OTG_WKDEP_OFFSET 0x0060
284#define OMAP4430_PM_L3INIT_USB_OTG_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0060) 339#define OMAP4430_PM_L3INIT_USB_OTG_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0060)
285#define OMAP4_RM_L3INIT_USB_OTG_CONTEXT_OFFSET 0x0064 340#define OMAP4_RM_L3INIT_USB_OTG_CONTEXT_OFFSET 0x0064
286#define OMAP4430_RM_L3INIT_USB_OTG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0064) 341#define OMAP4430_RM_L3INIT_USB_OTG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0064)
287#define OMAP4_PM_L3INIT_USB_TLL_WKDEP_OFFSET 0x0068 342#define OMAP4_PM_L3INIT_USB_TLL_WKDEP_OFFSET 0x0068
288#define OMAP4430_PM_L3INIT_USB_TLL_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0068) 343#define OMAP4430_PM_L3INIT_USB_TLL_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0068)
289#define OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET 0x006c 344#define OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET 0x006c
290#define OMAP4430_RM_L3INIT_USB_TLL_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x006c) 345#define OMAP4430_RM_L3INIT_USB_TLL_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x006c)
291#define OMAP4_RM_L3INIT_P1500_CONTEXT_OFFSET 0x007c 346#define OMAP4_RM_L3INIT_P1500_CONTEXT_OFFSET 0x007c
292#define OMAP4430_RM_L3INIT_P1500_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x007c) 347#define OMAP4430_RM_L3INIT_P1500_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x007c)
293#define OMAP4_RM_L3INIT_EMAC_CONTEXT_OFFSET 0x0084 348#define OMAP4_RM_L3INIT_EMAC_CONTEXT_OFFSET 0x0084
294#define OMAP4430_RM_L3INIT_EMAC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0084) 349#define OMAP4430_RM_L3INIT_EMAC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0084)
295#define OMAP4_PM_L3INIT_SATA_WKDEP_OFFSET 0x0088 350#define OMAP4_PM_L3INIT_SATA_WKDEP_OFFSET 0x0088
296#define OMAP4430_PM_L3INIT_SATA_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0088) 351#define OMAP4430_PM_L3INIT_SATA_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0088)
297#define OMAP4_RM_L3INIT_SATA_CONTEXT_OFFSET 0x008c 352#define OMAP4_RM_L3INIT_SATA_CONTEXT_OFFSET 0x008c
298#define OMAP4430_RM_L3INIT_SATA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x008c) 353#define OMAP4430_RM_L3INIT_SATA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x008c)
299#define OMAP4_RM_L3INIT_TPPSS_CONTEXT_OFFSET 0x0094 354#define OMAP4_RM_L3INIT_TPPSS_CONTEXT_OFFSET 0x0094
300#define OMAP4430_RM_L3INIT_TPPSS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0094) 355#define OMAP4430_RM_L3INIT_TPPSS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0094)
301#define OMAP4_PM_L3INIT_PCIESS_WKDEP_OFFSET 0x0098 356#define OMAP4_PM_L3INIT_PCIESS_WKDEP_OFFSET 0x0098
302#define OMAP4430_PM_L3INIT_PCIESS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x0098) 357#define OMAP4430_PM_L3INIT_PCIESS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x0098)
303#define OMAP4_RM_L3INIT_PCIESS_CONTEXT_OFFSET 0x009c 358#define OMAP4_RM_L3INIT_PCIESS_CONTEXT_OFFSET 0x009c
304#define OMAP4430_RM_L3INIT_PCIESS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x009c) 359#define OMAP4430_RM_L3INIT_PCIESS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x009c)
305#define OMAP4_RM_L3INIT_CCPTX_CONTEXT_OFFSET 0x00ac 360#define OMAP4_RM_L3INIT_CCPTX_CONTEXT_OFFSET 0x00ac
306#define OMAP4430_RM_L3INIT_CCPTX_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00ac) 361#define OMAP4430_RM_L3INIT_CCPTX_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00ac)
307#define OMAP4_PM_L3INIT_XHPI_WKDEP_OFFSET 0x00c0 362#define OMAP4_PM_L3INIT_XHPI_WKDEP_OFFSET 0x00c0
308#define OMAP4430_PM_L3INIT_XHPI_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00c0) 363#define OMAP4430_PM_L3INIT_XHPI_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00c0)
309#define OMAP4_RM_L3INIT_XHPI_CONTEXT_OFFSET 0x00c4 364#define OMAP4_RM_L3INIT_XHPI_CONTEXT_OFFSET 0x00c4
310#define OMAP4430_RM_L3INIT_XHPI_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00c4) 365#define OMAP4430_RM_L3INIT_XHPI_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00c4)
311#define OMAP4_PM_L3INIT_MMC6_WKDEP_OFFSET 0x00c8 366#define OMAP4_PM_L3INIT_MMC6_WKDEP_OFFSET 0x00c8
312#define OMAP4430_PM_L3INIT_MMC6_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00c8) 367#define OMAP4430_PM_L3INIT_MMC6_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00c8)
313#define OMAP4_RM_L3INIT_MMC6_CONTEXT_OFFSET 0x00cc 368#define OMAP4_RM_L3INIT_MMC6_CONTEXT_OFFSET 0x00cc
314#define OMAP4430_RM_L3INIT_MMC6_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00cc) 369#define OMAP4430_RM_L3INIT_MMC6_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00cc)
315#define OMAP4_PM_L3INIT_USB_HOST_FS_WKDEP_OFFSET 0x00d0 370#define OMAP4_PM_L3INIT_USB_HOST_FS_WKDEP_OFFSET 0x00d0
316#define OMAP4430_PM_L3INIT_USB_HOST_FS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00d0) 371#define OMAP4430_PM_L3INIT_USB_HOST_FS_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00d0)
317#define OMAP4_RM_L3INIT_USB_HOST_FS_CONTEXT_OFFSET 0x00d4 372#define OMAP4_RM_L3INIT_USB_HOST_FS_CONTEXT_OFFSET 0x00d4
318#define OMAP4430_RM_L3INIT_USB_HOST_FS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00d4) 373#define OMAP4430_RM_L3INIT_USB_HOST_FS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00d4)
319#define OMAP4_RM_L3INIT_USBPHYOCP2SCP_CONTEXT_OFFSET 0x00e4 374#define OMAP4_RM_L3INIT_USBPHYOCP2SCP_CONTEXT_OFFSET 0x00e4
320#define OMAP4430_RM_L3INIT_USBPHYOCP2SCP_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_MOD, 0x00e4) 375#define OMAP4430_RM_L3INIT_USBPHYOCP2SCP_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L3INIT_INST, 0x00e4)
321 376
322/* PRM.L4PER_PRM register offsets */ 377/* PRM.L4PER_PRM register offsets */
323#define OMAP4_PM_L4PER_PWRSTCTRL_OFFSET 0x0000 378#define OMAP4_PM_L4PER_PWRSTCTRL_OFFSET 0x0000
324#define OMAP4430_PM_L4PER_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0000) 379#define OMAP4430_PM_L4PER_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0000)
325#define OMAP4_PM_L4PER_PWRSTST_OFFSET 0x0004 380#define OMAP4_PM_L4PER_PWRSTST_OFFSET 0x0004
326#define OMAP4430_PM_L4PER_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0004) 381#define OMAP4430_PM_L4PER_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0004)
327#define OMAP4_RM_L4PER_ADC_CONTEXT_OFFSET 0x0024 382#define OMAP4_RM_L4PER_ADC_CONTEXT_OFFSET 0x0024
328#define OMAP4430_RM_L4PER_ADC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0024) 383#define OMAP4430_RM_L4PER_ADC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0024)
329#define OMAP4_PM_L4PER_DMTIMER10_WKDEP_OFFSET 0x0028 384#define OMAP4_PM_L4PER_DMTIMER10_WKDEP_OFFSET 0x0028
330#define OMAP4430_PM_L4PER_DMTIMER10_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0028) 385#define OMAP4430_PM_L4PER_DMTIMER10_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0028)
331#define OMAP4_RM_L4PER_DMTIMER10_CONTEXT_OFFSET 0x002c 386#define OMAP4_RM_L4PER_DMTIMER10_CONTEXT_OFFSET 0x002c
332#define OMAP4430_RM_L4PER_DMTIMER10_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x002c) 387#define OMAP4430_RM_L4PER_DMTIMER10_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x002c)
333#define OMAP4_PM_L4PER_DMTIMER11_WKDEP_OFFSET 0x0030 388#define OMAP4_PM_L4PER_DMTIMER11_WKDEP_OFFSET 0x0030
334#define OMAP4430_PM_L4PER_DMTIMER11_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0030) 389#define OMAP4430_PM_L4PER_DMTIMER11_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0030)
335#define OMAP4_RM_L4PER_DMTIMER11_CONTEXT_OFFSET 0x0034 390#define OMAP4_RM_L4PER_DMTIMER11_CONTEXT_OFFSET 0x0034
336#define OMAP4430_RM_L4PER_DMTIMER11_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0034) 391#define OMAP4430_RM_L4PER_DMTIMER11_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0034)
337#define OMAP4_PM_L4PER_DMTIMER2_WKDEP_OFFSET 0x0038 392#define OMAP4_PM_L4PER_DMTIMER2_WKDEP_OFFSET 0x0038
338#define OMAP4430_PM_L4PER_DMTIMER2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0038) 393#define OMAP4430_PM_L4PER_DMTIMER2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0038)
339#define OMAP4_RM_L4PER_DMTIMER2_CONTEXT_OFFSET 0x003c 394#define OMAP4_RM_L4PER_DMTIMER2_CONTEXT_OFFSET 0x003c
340#define OMAP4430_RM_L4PER_DMTIMER2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x003c) 395#define OMAP4430_RM_L4PER_DMTIMER2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x003c)
341#define OMAP4_PM_L4PER_DMTIMER3_WKDEP_OFFSET 0x0040 396#define OMAP4_PM_L4PER_DMTIMER3_WKDEP_OFFSET 0x0040
342#define OMAP4430_PM_L4PER_DMTIMER3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0040) 397#define OMAP4430_PM_L4PER_DMTIMER3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0040)
343#define OMAP4_RM_L4PER_DMTIMER3_CONTEXT_OFFSET 0x0044 398#define OMAP4_RM_L4PER_DMTIMER3_CONTEXT_OFFSET 0x0044
344#define OMAP4430_RM_L4PER_DMTIMER3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0044) 399#define OMAP4430_RM_L4PER_DMTIMER3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0044)
345#define OMAP4_PM_L4PER_DMTIMER4_WKDEP_OFFSET 0x0048 400#define OMAP4_PM_L4PER_DMTIMER4_WKDEP_OFFSET 0x0048
346#define OMAP4430_PM_L4PER_DMTIMER4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0048) 401#define OMAP4430_PM_L4PER_DMTIMER4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0048)
347#define OMAP4_RM_L4PER_DMTIMER4_CONTEXT_OFFSET 0x004c 402#define OMAP4_RM_L4PER_DMTIMER4_CONTEXT_OFFSET 0x004c
348#define OMAP4430_RM_L4PER_DMTIMER4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x004c) 403#define OMAP4430_RM_L4PER_DMTIMER4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x004c)
349#define OMAP4_PM_L4PER_DMTIMER9_WKDEP_OFFSET 0x0050 404#define OMAP4_PM_L4PER_DMTIMER9_WKDEP_OFFSET 0x0050
350#define OMAP4430_PM_L4PER_DMTIMER9_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0050) 405#define OMAP4430_PM_L4PER_DMTIMER9_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0050)
351#define OMAP4_RM_L4PER_DMTIMER9_CONTEXT_OFFSET 0x0054 406#define OMAP4_RM_L4PER_DMTIMER9_CONTEXT_OFFSET 0x0054
352#define OMAP4430_RM_L4PER_DMTIMER9_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0054) 407#define OMAP4430_RM_L4PER_DMTIMER9_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0054)
353#define OMAP4_RM_L4PER_ELM_CONTEXT_OFFSET 0x005c 408#define OMAP4_RM_L4PER_ELM_CONTEXT_OFFSET 0x005c
354#define OMAP4430_RM_L4PER_ELM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x005c) 409#define OMAP4430_RM_L4PER_ELM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x005c)
355#define OMAP4_PM_L4PER_GPIO2_WKDEP_OFFSET 0x0060 410#define OMAP4_PM_L4PER_GPIO2_WKDEP_OFFSET 0x0060
356#define OMAP4430_PM_L4PER_GPIO2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0060) 411#define OMAP4430_PM_L4PER_GPIO2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0060)
357#define OMAP4_RM_L4PER_GPIO2_CONTEXT_OFFSET 0x0064 412#define OMAP4_RM_L4PER_GPIO2_CONTEXT_OFFSET 0x0064
358#define OMAP4430_RM_L4PER_GPIO2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0064) 413#define OMAP4430_RM_L4PER_GPIO2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0064)
359#define OMAP4_PM_L4PER_GPIO3_WKDEP_OFFSET 0x0068 414#define OMAP4_PM_L4PER_GPIO3_WKDEP_OFFSET 0x0068
360#define OMAP4430_PM_L4PER_GPIO3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0068) 415#define OMAP4430_PM_L4PER_GPIO3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0068)
361#define OMAP4_RM_L4PER_GPIO3_CONTEXT_OFFSET 0x006c 416#define OMAP4_RM_L4PER_GPIO3_CONTEXT_OFFSET 0x006c
362#define OMAP4430_RM_L4PER_GPIO3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x006c) 417#define OMAP4430_RM_L4PER_GPIO3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x006c)
363#define OMAP4_PM_L4PER_GPIO4_WKDEP_OFFSET 0x0070 418#define OMAP4_PM_L4PER_GPIO4_WKDEP_OFFSET 0x0070
364#define OMAP4430_PM_L4PER_GPIO4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0070) 419#define OMAP4430_PM_L4PER_GPIO4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0070)
365#define OMAP4_RM_L4PER_GPIO4_CONTEXT_OFFSET 0x0074 420#define OMAP4_RM_L4PER_GPIO4_CONTEXT_OFFSET 0x0074
366#define OMAP4430_RM_L4PER_GPIO4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0074) 421#define OMAP4430_RM_L4PER_GPIO4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0074)
367#define OMAP4_PM_L4PER_GPIO5_WKDEP_OFFSET 0x0078 422#define OMAP4_PM_L4PER_GPIO5_WKDEP_OFFSET 0x0078
368#define OMAP4430_PM_L4PER_GPIO5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0078) 423#define OMAP4430_PM_L4PER_GPIO5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0078)
369#define OMAP4_RM_L4PER_GPIO5_CONTEXT_OFFSET 0x007c 424#define OMAP4_RM_L4PER_GPIO5_CONTEXT_OFFSET 0x007c
370#define OMAP4430_RM_L4PER_GPIO5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x007c) 425#define OMAP4430_RM_L4PER_GPIO5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x007c)
371#define OMAP4_PM_L4PER_GPIO6_WKDEP_OFFSET 0x0080 426#define OMAP4_PM_L4PER_GPIO6_WKDEP_OFFSET 0x0080
372#define OMAP4430_PM_L4PER_GPIO6_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0080) 427#define OMAP4430_PM_L4PER_GPIO6_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0080)
373#define OMAP4_RM_L4PER_GPIO6_CONTEXT_OFFSET 0x0084 428#define OMAP4_RM_L4PER_GPIO6_CONTEXT_OFFSET 0x0084
374#define OMAP4430_RM_L4PER_GPIO6_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0084) 429#define OMAP4430_RM_L4PER_GPIO6_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0084)
375#define OMAP4_RM_L4PER_HDQ1W_CONTEXT_OFFSET 0x008c 430#define OMAP4_RM_L4PER_HDQ1W_CONTEXT_OFFSET 0x008c
376#define OMAP4430_RM_L4PER_HDQ1W_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x008c) 431#define OMAP4430_RM_L4PER_HDQ1W_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x008c)
377#define OMAP4_PM_L4PER_HECC1_WKDEP_OFFSET 0x0090 432#define OMAP4_PM_L4PER_HECC1_WKDEP_OFFSET 0x0090
378#define OMAP4430_PM_L4PER_HECC1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0090) 433#define OMAP4430_PM_L4PER_HECC1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0090)
379#define OMAP4_RM_L4PER_HECC1_CONTEXT_OFFSET 0x0094 434#define OMAP4_RM_L4PER_HECC1_CONTEXT_OFFSET 0x0094
380#define OMAP4430_RM_L4PER_HECC1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0094) 435#define OMAP4430_RM_L4PER_HECC1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0094)
381#define OMAP4_PM_L4PER_HECC2_WKDEP_OFFSET 0x0098 436#define OMAP4_PM_L4PER_HECC2_WKDEP_OFFSET 0x0098
382#define OMAP4430_PM_L4PER_HECC2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0098) 437#define OMAP4430_PM_L4PER_HECC2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0098)
383#define OMAP4_RM_L4PER_HECC2_CONTEXT_OFFSET 0x009c 438#define OMAP4_RM_L4PER_HECC2_CONTEXT_OFFSET 0x009c
384#define OMAP4430_RM_L4PER_HECC2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x009c) 439#define OMAP4430_RM_L4PER_HECC2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x009c)
385#define OMAP4_PM_L4PER_I2C1_WKDEP_OFFSET 0x00a0 440#define OMAP4_PM_L4PER_I2C1_WKDEP_OFFSET 0x00a0
386#define OMAP4430_PM_L4PER_I2C1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00a0) 441#define OMAP4430_PM_L4PER_I2C1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00a0)
387#define OMAP4_RM_L4PER_I2C1_CONTEXT_OFFSET 0x00a4 442#define OMAP4_RM_L4PER_I2C1_CONTEXT_OFFSET 0x00a4
388#define OMAP4430_RM_L4PER_I2C1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00a4) 443#define OMAP4430_RM_L4PER_I2C1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00a4)
389#define OMAP4_PM_L4PER_I2C2_WKDEP_OFFSET 0x00a8 444#define OMAP4_PM_L4PER_I2C2_WKDEP_OFFSET 0x00a8
390#define OMAP4430_PM_L4PER_I2C2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00a8) 445#define OMAP4430_PM_L4PER_I2C2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00a8)
391#define OMAP4_RM_L4PER_I2C2_CONTEXT_OFFSET 0x00ac 446#define OMAP4_RM_L4PER_I2C2_CONTEXT_OFFSET 0x00ac
392#define OMAP4430_RM_L4PER_I2C2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00ac) 447#define OMAP4430_RM_L4PER_I2C2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00ac)
393#define OMAP4_PM_L4PER_I2C3_WKDEP_OFFSET 0x00b0 448#define OMAP4_PM_L4PER_I2C3_WKDEP_OFFSET 0x00b0
394#define OMAP4430_PM_L4PER_I2C3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00b0) 449#define OMAP4430_PM_L4PER_I2C3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00b0)
395#define OMAP4_RM_L4PER_I2C3_CONTEXT_OFFSET 0x00b4 450#define OMAP4_RM_L4PER_I2C3_CONTEXT_OFFSET 0x00b4
396#define OMAP4430_RM_L4PER_I2C3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00b4) 451#define OMAP4430_RM_L4PER_I2C3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00b4)
397#define OMAP4_PM_L4PER_I2C4_WKDEP_OFFSET 0x00b8 452#define OMAP4_PM_L4PER_I2C4_WKDEP_OFFSET 0x00b8
398#define OMAP4430_PM_L4PER_I2C4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00b8) 453#define OMAP4430_PM_L4PER_I2C4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00b8)
399#define OMAP4_RM_L4PER_I2C4_CONTEXT_OFFSET 0x00bc 454#define OMAP4_RM_L4PER_I2C4_CONTEXT_OFFSET 0x00bc
400#define OMAP4430_RM_L4PER_I2C4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00bc) 455#define OMAP4430_RM_L4PER_I2C4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00bc)
401#define OMAP4_RM_L4PER_L4_PER_CONTEXT_OFFSET 0x00c0 456#define OMAP4_RM_L4PER_L4_PER_CONTEXT_OFFSET 0x00c0
402#define OMAP4430_RM_L4PER_L4_PER_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00c0) 457#define OMAP4430_RM_L4PER_L4_PER_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00c0)
403#define OMAP4_PM_L4PER_MCASP2_WKDEP_OFFSET 0x00d0 458#define OMAP4_PM_L4PER_MCASP2_WKDEP_OFFSET 0x00d0
404#define OMAP4430_PM_L4PER_MCASP2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00d0) 459#define OMAP4430_PM_L4PER_MCASP2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00d0)
405#define OMAP4_RM_L4PER_MCASP2_CONTEXT_OFFSET 0x00d4 460#define OMAP4_RM_L4PER_MCASP2_CONTEXT_OFFSET 0x00d4
406#define OMAP4430_RM_L4PER_MCASP2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00d4) 461#define OMAP4430_RM_L4PER_MCASP2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00d4)
407#define OMAP4_PM_L4PER_MCASP3_WKDEP_OFFSET 0x00d8 462#define OMAP4_PM_L4PER_MCASP3_WKDEP_OFFSET 0x00d8
408#define OMAP4430_PM_L4PER_MCASP3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00d8) 463#define OMAP4430_PM_L4PER_MCASP3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00d8)
409#define OMAP4_RM_L4PER_MCASP3_CONTEXT_OFFSET 0x00dc 464#define OMAP4_RM_L4PER_MCASP3_CONTEXT_OFFSET 0x00dc
410#define OMAP4430_RM_L4PER_MCASP3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00dc) 465#define OMAP4430_RM_L4PER_MCASP3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00dc)
411#define OMAP4_PM_L4PER_MCBSP4_WKDEP_OFFSET 0x00e0 466#define OMAP4_PM_L4PER_MCBSP4_WKDEP_OFFSET 0x00e0
412#define OMAP4430_PM_L4PER_MCBSP4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00e0) 467#define OMAP4430_PM_L4PER_MCBSP4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00e0)
413#define OMAP4_RM_L4PER_MCBSP4_CONTEXT_OFFSET 0x00e4 468#define OMAP4_RM_L4PER_MCBSP4_CONTEXT_OFFSET 0x00e4
414#define OMAP4430_RM_L4PER_MCBSP4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00e4) 469#define OMAP4430_RM_L4PER_MCBSP4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00e4)
415#define OMAP4_RM_L4PER_MGATE_CONTEXT_OFFSET 0x00ec 470#define OMAP4_RM_L4PER_MGATE_CONTEXT_OFFSET 0x00ec
416#define OMAP4430_RM_L4PER_MGATE_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00ec) 471#define OMAP4430_RM_L4PER_MGATE_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00ec)
417#define OMAP4_PM_L4PER_MCSPI1_WKDEP_OFFSET 0x00f0 472#define OMAP4_PM_L4PER_MCSPI1_WKDEP_OFFSET 0x00f0
418#define OMAP4430_PM_L4PER_MCSPI1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00f0) 473#define OMAP4430_PM_L4PER_MCSPI1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00f0)
419#define OMAP4_RM_L4PER_MCSPI1_CONTEXT_OFFSET 0x00f4 474#define OMAP4_RM_L4PER_MCSPI1_CONTEXT_OFFSET 0x00f4
420#define OMAP4430_RM_L4PER_MCSPI1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00f4) 475#define OMAP4430_RM_L4PER_MCSPI1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00f4)
421#define OMAP4_PM_L4PER_MCSPI2_WKDEP_OFFSET 0x00f8 476#define OMAP4_PM_L4PER_MCSPI2_WKDEP_OFFSET 0x00f8
422#define OMAP4430_PM_L4PER_MCSPI2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00f8) 477#define OMAP4430_PM_L4PER_MCSPI2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00f8)
423#define OMAP4_RM_L4PER_MCSPI2_CONTEXT_OFFSET 0x00fc 478#define OMAP4_RM_L4PER_MCSPI2_CONTEXT_OFFSET 0x00fc
424#define OMAP4430_RM_L4PER_MCSPI2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x00fc) 479#define OMAP4430_RM_L4PER_MCSPI2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x00fc)
425#define OMAP4_PM_L4PER_MCSPI3_WKDEP_OFFSET 0x0100 480#define OMAP4_PM_L4PER_MCSPI3_WKDEP_OFFSET 0x0100
426#define OMAP4430_PM_L4PER_MCSPI3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0100) 481#define OMAP4430_PM_L4PER_MCSPI3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0100)
427#define OMAP4_RM_L4PER_MCSPI3_CONTEXT_OFFSET 0x0104 482#define OMAP4_RM_L4PER_MCSPI3_CONTEXT_OFFSET 0x0104
428#define OMAP4430_RM_L4PER_MCSPI3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0104) 483#define OMAP4430_RM_L4PER_MCSPI3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0104)
429#define OMAP4_PM_L4PER_MCSPI4_WKDEP_OFFSET 0x0108 484#define OMAP4_PM_L4PER_MCSPI4_WKDEP_OFFSET 0x0108
430#define OMAP4430_PM_L4PER_MCSPI4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0108) 485#define OMAP4430_PM_L4PER_MCSPI4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0108)
431#define OMAP4_RM_L4PER_MCSPI4_CONTEXT_OFFSET 0x010c 486#define OMAP4_RM_L4PER_MCSPI4_CONTEXT_OFFSET 0x010c
432#define OMAP4430_RM_L4PER_MCSPI4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x010c) 487#define OMAP4430_RM_L4PER_MCSPI4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x010c)
433#define OMAP4_PM_L4PER_MMCSD3_WKDEP_OFFSET 0x0120 488#define OMAP4_PM_L4PER_MMCSD3_WKDEP_OFFSET 0x0120
434#define OMAP4430_PM_L4PER_MMCSD3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0120) 489#define OMAP4430_PM_L4PER_MMCSD3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0120)
435#define OMAP4_RM_L4PER_MMCSD3_CONTEXT_OFFSET 0x0124 490#define OMAP4_RM_L4PER_MMCSD3_CONTEXT_OFFSET 0x0124
436#define OMAP4430_RM_L4PER_MMCSD3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0124) 491#define OMAP4430_RM_L4PER_MMCSD3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0124)
437#define OMAP4_PM_L4PER_MMCSD4_WKDEP_OFFSET 0x0128 492#define OMAP4_PM_L4PER_MMCSD4_WKDEP_OFFSET 0x0128
438#define OMAP4430_PM_L4PER_MMCSD4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0128) 493#define OMAP4430_PM_L4PER_MMCSD4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0128)
439#define OMAP4_RM_L4PER_MMCSD4_CONTEXT_OFFSET 0x012c 494#define OMAP4_RM_L4PER_MMCSD4_CONTEXT_OFFSET 0x012c
440#define OMAP4430_RM_L4PER_MMCSD4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x012c) 495#define OMAP4430_RM_L4PER_MMCSD4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x012c)
441#define OMAP4_RM_L4PER_MSPROHG_CONTEXT_OFFSET 0x0134 496#define OMAP4_RM_L4PER_MSPROHG_CONTEXT_OFFSET 0x0134
442#define OMAP4430_RM_L4PER_MSPROHG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0134) 497#define OMAP4430_RM_L4PER_MSPROHG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0134)
443#define OMAP4_PM_L4PER_SLIMBUS2_WKDEP_OFFSET 0x0138 498#define OMAP4_PM_L4PER_SLIMBUS2_WKDEP_OFFSET 0x0138
444#define OMAP4430_PM_L4PER_SLIMBUS2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0138) 499#define OMAP4430_PM_L4PER_SLIMBUS2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0138)
445#define OMAP4_RM_L4PER_SLIMBUS2_CONTEXT_OFFSET 0x013c 500#define OMAP4_RM_L4PER_SLIMBUS2_CONTEXT_OFFSET 0x013c
446#define OMAP4430_RM_L4PER_SLIMBUS2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x013c) 501#define OMAP4430_RM_L4PER_SLIMBUS2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x013c)
447#define OMAP4_PM_L4PER_UART1_WKDEP_OFFSET 0x0140 502#define OMAP4_PM_L4PER_UART1_WKDEP_OFFSET 0x0140
448#define OMAP4430_PM_L4PER_UART1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0140) 503#define OMAP4430_PM_L4PER_UART1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0140)
449#define OMAP4_RM_L4PER_UART1_CONTEXT_OFFSET 0x0144 504#define OMAP4_RM_L4PER_UART1_CONTEXT_OFFSET 0x0144
450#define OMAP4430_RM_L4PER_UART1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0144) 505#define OMAP4430_RM_L4PER_UART1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0144)
451#define OMAP4_PM_L4PER_UART2_WKDEP_OFFSET 0x0148 506#define OMAP4_PM_L4PER_UART2_WKDEP_OFFSET 0x0148
452#define OMAP4430_PM_L4PER_UART2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0148) 507#define OMAP4430_PM_L4PER_UART2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0148)
453#define OMAP4_RM_L4PER_UART2_CONTEXT_OFFSET 0x014c 508#define OMAP4_RM_L4PER_UART2_CONTEXT_OFFSET 0x014c
454#define OMAP4430_RM_L4PER_UART2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x014c) 509#define OMAP4430_RM_L4PER_UART2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x014c)
455#define OMAP4_PM_L4PER_UART3_WKDEP_OFFSET 0x0150 510#define OMAP4_PM_L4PER_UART3_WKDEP_OFFSET 0x0150
456#define OMAP4430_PM_L4PER_UART3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0150) 511#define OMAP4430_PM_L4PER_UART3_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0150)
457#define OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET 0x0154 512#define OMAP4_RM_L4PER_UART3_CONTEXT_OFFSET 0x0154
458#define OMAP4430_RM_L4PER_UART3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0154) 513#define OMAP4430_RM_L4PER_UART3_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0154)
459#define OMAP4_PM_L4PER_UART4_WKDEP_OFFSET 0x0158 514#define OMAP4_PM_L4PER_UART4_WKDEP_OFFSET 0x0158
460#define OMAP4430_PM_L4PER_UART4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0158) 515#define OMAP4430_PM_L4PER_UART4_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0158)
461#define OMAP4_RM_L4PER_UART4_CONTEXT_OFFSET 0x015c 516#define OMAP4_RM_L4PER_UART4_CONTEXT_OFFSET 0x015c
462#define OMAP4430_RM_L4PER_UART4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x015c) 517#define OMAP4430_RM_L4PER_UART4_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x015c)
463#define OMAP4_PM_L4PER_MMCSD5_WKDEP_OFFSET 0x0160 518#define OMAP4_PM_L4PER_MMCSD5_WKDEP_OFFSET 0x0160
464#define OMAP4430_PM_L4PER_MMCSD5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0160) 519#define OMAP4430_PM_L4PER_MMCSD5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0160)
465#define OMAP4_RM_L4PER_MMCSD5_CONTEXT_OFFSET 0x0164 520#define OMAP4_RM_L4PER_MMCSD5_CONTEXT_OFFSET 0x0164
466#define OMAP4430_RM_L4PER_MMCSD5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0164) 521#define OMAP4430_RM_L4PER_MMCSD5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0164)
467#define OMAP4_PM_L4PER_I2C5_WKDEP_OFFSET 0x0168 522#define OMAP4_PM_L4PER_I2C5_WKDEP_OFFSET 0x0168
468#define OMAP4430_PM_L4PER_I2C5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x0168) 523#define OMAP4430_PM_L4PER_I2C5_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x0168)
469#define OMAP4_RM_L4PER_I2C5_CONTEXT_OFFSET 0x016c 524#define OMAP4_RM_L4PER_I2C5_CONTEXT_OFFSET 0x016c
470#define OMAP4430_RM_L4PER_I2C5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x016c) 525#define OMAP4430_RM_L4PER_I2C5_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x016c)
471#define OMAP4_RM_L4SEC_AES1_CONTEXT_OFFSET 0x01a4 526#define OMAP4_RM_L4SEC_AES1_CONTEXT_OFFSET 0x01a4
472#define OMAP4430_RM_L4SEC_AES1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x01a4) 527#define OMAP4430_RM_L4SEC_AES1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x01a4)
473#define OMAP4_RM_L4SEC_AES2_CONTEXT_OFFSET 0x01ac 528#define OMAP4_RM_L4SEC_AES2_CONTEXT_OFFSET 0x01ac
474#define OMAP4430_RM_L4SEC_AES2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x01ac) 529#define OMAP4430_RM_L4SEC_AES2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x01ac)
475#define OMAP4_RM_L4SEC_DES3DES_CONTEXT_OFFSET 0x01b4 530#define OMAP4_RM_L4SEC_DES3DES_CONTEXT_OFFSET 0x01b4
476#define OMAP4430_RM_L4SEC_DES3DES_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x01b4) 531#define OMAP4430_RM_L4SEC_DES3DES_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x01b4)
477#define OMAP4_RM_L4SEC_PKAEIP29_CONTEXT_OFFSET 0x01bc 532#define OMAP4_RM_L4SEC_PKAEIP29_CONTEXT_OFFSET 0x01bc
478#define OMAP4430_RM_L4SEC_PKAEIP29_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x01bc) 533#define OMAP4430_RM_L4SEC_PKAEIP29_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x01bc)
479#define OMAP4_RM_L4SEC_RNG_CONTEXT_OFFSET 0x01c4 534#define OMAP4_RM_L4SEC_RNG_CONTEXT_OFFSET 0x01c4
480#define OMAP4430_RM_L4SEC_RNG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x01c4) 535#define OMAP4430_RM_L4SEC_RNG_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x01c4)
481#define OMAP4_RM_L4SEC_SHA2MD51_CONTEXT_OFFSET 0x01cc 536#define OMAP4_RM_L4SEC_SHA2MD51_CONTEXT_OFFSET 0x01cc
482#define OMAP4430_RM_L4SEC_SHA2MD51_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x01cc) 537#define OMAP4430_RM_L4SEC_SHA2MD51_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x01cc)
483#define OMAP4_RM_L4SEC_CRYPTODMA_CONTEXT_OFFSET 0x01dc 538#define OMAP4_RM_L4SEC_CRYPTODMA_CONTEXT_OFFSET 0x01dc
484#define OMAP4430_RM_L4SEC_CRYPTODMA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_MOD, 0x01dc) 539#define OMAP4430_RM_L4SEC_CRYPTODMA_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_L4PER_INST, 0x01dc)
485 540
486/* PRM.CEFUSE_PRM register offsets */ 541/* PRM.CEFUSE_PRM register offsets */
487#define OMAP4_PM_CEFUSE_PWRSTCTRL_OFFSET 0x0000 542#define OMAP4_PM_CEFUSE_PWRSTCTRL_OFFSET 0x0000
488#define OMAP4430_PM_CEFUSE_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CEFUSE_MOD, 0x0000) 543#define OMAP4430_PM_CEFUSE_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CEFUSE_INST, 0x0000)
489#define OMAP4_PM_CEFUSE_PWRSTST_OFFSET 0x0004 544#define OMAP4_PM_CEFUSE_PWRSTST_OFFSET 0x0004
490#define OMAP4430_PM_CEFUSE_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CEFUSE_MOD, 0x0004) 545#define OMAP4430_PM_CEFUSE_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CEFUSE_INST, 0x0004)
491#define OMAP4_RM_CEFUSE_CEFUSE_CONTEXT_OFFSET 0x0024 546#define OMAP4_RM_CEFUSE_CEFUSE_CONTEXT_OFFSET 0x0024
492#define OMAP4430_RM_CEFUSE_CEFUSE_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CEFUSE_MOD, 0x0024) 547#define OMAP4430_RM_CEFUSE_CEFUSE_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_CEFUSE_INST, 0x0024)
493 548
494/* PRM.WKUP_PRM register offsets */ 549/* PRM.WKUP_PRM register offsets */
495#define OMAP4_RM_WKUP_L4WKUP_CONTEXT_OFFSET 0x0024 550#define OMAP4_RM_WKUP_L4WKUP_CONTEXT_OFFSET 0x0024
496#define OMAP4430_RM_WKUP_L4WKUP_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0024) 551#define OMAP4430_RM_WKUP_L4WKUP_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0024)
497#define OMAP4_RM_WKUP_WDT1_CONTEXT_OFFSET 0x002c 552#define OMAP4_RM_WKUP_WDT1_CONTEXT_OFFSET 0x002c
498#define OMAP4430_RM_WKUP_WDT1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x002c) 553#define OMAP4430_RM_WKUP_WDT1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x002c)
499#define OMAP4_PM_WKUP_WDT2_WKDEP_OFFSET 0x0030 554#define OMAP4_PM_WKUP_WDT2_WKDEP_OFFSET 0x0030
500#define OMAP4430_PM_WKUP_WDT2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0030) 555#define OMAP4430_PM_WKUP_WDT2_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0030)
501#define OMAP4_RM_WKUP_WDT2_CONTEXT_OFFSET 0x0034 556#define OMAP4_RM_WKUP_WDT2_CONTEXT_OFFSET 0x0034
502#define OMAP4430_RM_WKUP_WDT2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0034) 557#define OMAP4430_RM_WKUP_WDT2_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0034)
503#define OMAP4_PM_WKUP_GPIO1_WKDEP_OFFSET 0x0038 558#define OMAP4_PM_WKUP_GPIO1_WKDEP_OFFSET 0x0038
504#define OMAP4430_PM_WKUP_GPIO1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0038) 559#define OMAP4430_PM_WKUP_GPIO1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0038)
505#define OMAP4_RM_WKUP_GPIO1_CONTEXT_OFFSET 0x003c 560#define OMAP4_RM_WKUP_GPIO1_CONTEXT_OFFSET 0x003c
506#define OMAP4430_RM_WKUP_GPIO1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x003c) 561#define OMAP4430_RM_WKUP_GPIO1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x003c)
507#define OMAP4_PM_WKUP_TIMER1_WKDEP_OFFSET 0x0040 562#define OMAP4_PM_WKUP_TIMER1_WKDEP_OFFSET 0x0040
508#define OMAP4430_PM_WKUP_TIMER1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0040) 563#define OMAP4430_PM_WKUP_TIMER1_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0040)
509#define OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET 0x0044 564#define OMAP4_RM_WKUP_TIMER1_CONTEXT_OFFSET 0x0044
510#define OMAP4430_RM_WKUP_TIMER1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0044) 565#define OMAP4430_RM_WKUP_TIMER1_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0044)
511#define OMAP4_PM_WKUP_TIMER12_WKDEP_OFFSET 0x0048 566#define OMAP4_PM_WKUP_TIMER12_WKDEP_OFFSET 0x0048
512#define OMAP4430_PM_WKUP_TIMER12_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0048) 567#define OMAP4430_PM_WKUP_TIMER12_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0048)
513#define OMAP4_RM_WKUP_TIMER12_CONTEXT_OFFSET 0x004c 568#define OMAP4_RM_WKUP_TIMER12_CONTEXT_OFFSET 0x004c
514#define OMAP4430_RM_WKUP_TIMER12_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x004c) 569#define OMAP4430_RM_WKUP_TIMER12_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x004c)
515#define OMAP4_RM_WKUP_SYNCTIMER_CONTEXT_OFFSET 0x0054 570#define OMAP4_RM_WKUP_SYNCTIMER_CONTEXT_OFFSET 0x0054
516#define OMAP4430_RM_WKUP_SYNCTIMER_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0054) 571#define OMAP4430_RM_WKUP_SYNCTIMER_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0054)
517#define OMAP4_PM_WKUP_USIM_WKDEP_OFFSET 0x0058 572#define OMAP4_PM_WKUP_USIM_WKDEP_OFFSET 0x0058
518#define OMAP4430_PM_WKUP_USIM_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0058) 573#define OMAP4430_PM_WKUP_USIM_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0058)
519#define OMAP4_RM_WKUP_USIM_CONTEXT_OFFSET 0x005c 574#define OMAP4_RM_WKUP_USIM_CONTEXT_OFFSET 0x005c
520#define OMAP4430_RM_WKUP_USIM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x005c) 575#define OMAP4430_RM_WKUP_USIM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x005c)
521#define OMAP4_RM_WKUP_SARRAM_CONTEXT_OFFSET 0x0064 576#define OMAP4_RM_WKUP_SARRAM_CONTEXT_OFFSET 0x0064
522#define OMAP4430_RM_WKUP_SARRAM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0064) 577#define OMAP4430_RM_WKUP_SARRAM_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0064)
523#define OMAP4_PM_WKUP_KEYBOARD_WKDEP_OFFSET 0x0078 578#define OMAP4_PM_WKUP_KEYBOARD_WKDEP_OFFSET 0x0078
524#define OMAP4430_PM_WKUP_KEYBOARD_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0078) 579#define OMAP4430_PM_WKUP_KEYBOARD_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0078)
525#define OMAP4_RM_WKUP_KEYBOARD_CONTEXT_OFFSET 0x007c 580#define OMAP4_RM_WKUP_KEYBOARD_CONTEXT_OFFSET 0x007c
526#define OMAP4430_RM_WKUP_KEYBOARD_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x007c) 581#define OMAP4430_RM_WKUP_KEYBOARD_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x007c)
527#define OMAP4_PM_WKUP_RTC_WKDEP_OFFSET 0x0080 582#define OMAP4_PM_WKUP_RTC_WKDEP_OFFSET 0x0080
528#define OMAP4430_PM_WKUP_RTC_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0080) 583#define OMAP4430_PM_WKUP_RTC_WKDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0080)
529#define OMAP4_RM_WKUP_RTC_CONTEXT_OFFSET 0x0084 584#define OMAP4_RM_WKUP_RTC_CONTEXT_OFFSET 0x0084
530#define OMAP4430_RM_WKUP_RTC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_MOD, 0x0084) 585#define OMAP4430_RM_WKUP_RTC_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_INST, 0x0084)
531 586
532/* PRM.WKUP_CM register offsets */ 587/* PRM.WKUP_CM register offsets */
533#define OMAP4_CM_WKUP_CLKSTCTRL_OFFSET 0x0000 588#define OMAP4_CM_WKUP_CLKSTCTRL_OFFSET 0x0000
534#define OMAP4430_CM_WKUP_CLKSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0000) 589#define OMAP4430_CM_WKUP_CLKSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0000)
535#define OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET 0x0020 590#define OMAP4_CM_WKUP_L4WKUP_CLKCTRL_OFFSET 0x0020
536#define OMAP4430_CM_WKUP_L4WKUP_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0020) 591#define OMAP4430_CM_WKUP_L4WKUP_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0020)
537#define OMAP4_CM_WKUP_WDT1_CLKCTRL_OFFSET 0x0028 592#define OMAP4_CM_WKUP_WDT1_CLKCTRL_OFFSET 0x0028
538#define OMAP4430_CM_WKUP_WDT1_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0028) 593#define OMAP4430_CM_WKUP_WDT1_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0028)
539#define OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET 0x0030 594#define OMAP4_CM_WKUP_WDT2_CLKCTRL_OFFSET 0x0030
540#define OMAP4430_CM_WKUP_WDT2_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0030) 595#define OMAP4430_CM_WKUP_WDT2_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0030)
541#define OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET 0x0038 596#define OMAP4_CM_WKUP_GPIO1_CLKCTRL_OFFSET 0x0038
542#define OMAP4430_CM_WKUP_GPIO1_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0038) 597#define OMAP4430_CM_WKUP_GPIO1_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0038)
543#define OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET 0x0040 598#define OMAP4_CM_WKUP_TIMER1_CLKCTRL_OFFSET 0x0040
544#define OMAP4430_CM_WKUP_TIMER1_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0040) 599#define OMAP4430_CM_WKUP_TIMER1_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0040)
545#define OMAP4_CM_WKUP_TIMER12_CLKCTRL_OFFSET 0x0048 600#define OMAP4_CM_WKUP_TIMER12_CLKCTRL_OFFSET 0x0048
546#define OMAP4430_CM_WKUP_TIMER12_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0048) 601#define OMAP4430_CM_WKUP_TIMER12_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0048)
547#define OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET 0x0050 602#define OMAP4_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET 0x0050
548#define OMAP4430_CM_WKUP_SYNCTIMER_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0050) 603#define OMAP4430_CM_WKUP_SYNCTIMER_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0050)
549#define OMAP4_CM_WKUP_USIM_CLKCTRL_OFFSET 0x0058 604#define OMAP4_CM_WKUP_USIM_CLKCTRL_OFFSET 0x0058
550#define OMAP4430_CM_WKUP_USIM_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0058) 605#define OMAP4430_CM_WKUP_USIM_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0058)
551#define OMAP4_CM_WKUP_SARRAM_CLKCTRL_OFFSET 0x0060 606#define OMAP4_CM_WKUP_SARRAM_CLKCTRL_OFFSET 0x0060
552#define OMAP4430_CM_WKUP_SARRAM_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0060) 607#define OMAP4430_CM_WKUP_SARRAM_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0060)
553#define OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET 0x0078 608#define OMAP4_CM_WKUP_KEYBOARD_CLKCTRL_OFFSET 0x0078
554#define OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0078) 609#define OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0078)
555#define OMAP4_CM_WKUP_RTC_CLKCTRL_OFFSET 0x0080 610#define OMAP4_CM_WKUP_RTC_CLKCTRL_OFFSET 0x0080
556#define OMAP4430_CM_WKUP_RTC_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0080) 611#define OMAP4430_CM_WKUP_RTC_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0080)
557#define OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET 0x0088 612#define OMAP4_CM_WKUP_BANDGAP_CLKCTRL_OFFSET 0x0088
558#define OMAP4430_CM_WKUP_BANDGAP_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_MOD, 0x0088) 613#define OMAP4430_CM_WKUP_BANDGAP_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_WKUP_CM_INST, 0x0088)
559 614
560/* PRM.EMU_PRM register offsets */ 615/* PRM.EMU_PRM register offsets */
561#define OMAP4_PM_EMU_PWRSTCTRL_OFFSET 0x0000 616#define OMAP4_PM_EMU_PWRSTCTRL_OFFSET 0x0000
562#define OMAP4430_PM_EMU_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_MOD, 0x0000) 617#define OMAP4430_PM_EMU_PWRSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_INST, 0x0000)
563#define OMAP4_PM_EMU_PWRSTST_OFFSET 0x0004 618#define OMAP4_PM_EMU_PWRSTST_OFFSET 0x0004
564#define OMAP4430_PM_EMU_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_MOD, 0x0004) 619#define OMAP4430_PM_EMU_PWRSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_INST, 0x0004)
565#define OMAP4_RM_EMU_DEBUGSS_CONTEXT_OFFSET 0x0024 620#define OMAP4_RM_EMU_DEBUGSS_CONTEXT_OFFSET 0x0024
566#define OMAP4430_RM_EMU_DEBUGSS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_MOD, 0x0024) 621#define OMAP4430_RM_EMU_DEBUGSS_CONTEXT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_INST, 0x0024)
567 622
568/* PRM.EMU_CM register offsets */ 623/* PRM.EMU_CM register offsets */
569#define OMAP4_CM_EMU_CLKSTCTRL_OFFSET 0x0000 624#define OMAP4_CM_EMU_CLKSTCTRL_OFFSET 0x0000
570#define OMAP4430_CM_EMU_CLKSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_CM_MOD, 0x0000) 625#define OMAP4430_CM_EMU_CLKSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_CM_INST, 0x0000)
571#define OMAP4_CM_EMU_DYNAMICDEP_OFFSET 0x0008 626#define OMAP4_CM_EMU_DYNAMICDEP_OFFSET 0x0008
572#define OMAP4430_CM_EMU_DYNAMICDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_CM_MOD, 0x0008) 627#define OMAP4430_CM_EMU_DYNAMICDEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_CM_INST, 0x0008)
573#define OMAP4_CM_EMU_DEBUGSS_CLKCTRL_OFFSET 0x0020 628#define OMAP4_CM_EMU_DEBUGSS_CLKCTRL_OFFSET 0x0020
574#define OMAP4430_CM_EMU_DEBUGSS_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_CM_MOD, 0x0020) 629#define OMAP4430_CM_EMU_DEBUGSS_CLKCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_EMU_CM_INST, 0x0020)
575 630
576/* PRM.DEVICE_PRM register offsets */ 631/* PRM.DEVICE_PRM register offsets */
577#define OMAP4_PRM_RSTCTRL_OFFSET 0x0000 632#define OMAP4_PRM_RSTCTRL_OFFSET 0x0000
578#define OMAP4430_PRM_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0000) 633#define OMAP4430_PRM_RSTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0000)
579#define OMAP4_PRM_RSTST_OFFSET 0x0004 634#define OMAP4_PRM_RSTST_OFFSET 0x0004
580#define OMAP4430_PRM_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0004) 635#define OMAP4430_PRM_RSTST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0004)
581#define OMAP4_PRM_RSTTIME_OFFSET 0x0008 636#define OMAP4_PRM_RSTTIME_OFFSET 0x0008
582#define OMAP4430_PRM_RSTTIME OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0008) 637#define OMAP4430_PRM_RSTTIME OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0008)
583#define OMAP4_PRM_CLKREQCTRL_OFFSET 0x000c 638#define OMAP4_PRM_CLKREQCTRL_OFFSET 0x000c
584#define OMAP4430_PRM_CLKREQCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x000c) 639#define OMAP4430_PRM_CLKREQCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x000c)
585#define OMAP4_PRM_VOLTCTRL_OFFSET 0x0010 640#define OMAP4_PRM_VOLTCTRL_OFFSET 0x0010
586#define OMAP4430_PRM_VOLTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0010) 641#define OMAP4430_PRM_VOLTCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0010)
587#define OMAP4_PRM_PWRREQCTRL_OFFSET 0x0014 642#define OMAP4_PRM_PWRREQCTRL_OFFSET 0x0014
588#define OMAP4430_PRM_PWRREQCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0014) 643#define OMAP4430_PRM_PWRREQCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0014)
589#define OMAP4_PRM_PSCON_COUNT_OFFSET 0x0018 644#define OMAP4_PRM_PSCON_COUNT_OFFSET 0x0018
590#define OMAP4430_PRM_PSCON_COUNT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0018) 645#define OMAP4430_PRM_PSCON_COUNT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0018)
591#define OMAP4_PRM_IO_COUNT_OFFSET 0x001c 646#define OMAP4_PRM_IO_COUNT_OFFSET 0x001c
592#define OMAP4430_PRM_IO_COUNT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x001c) 647#define OMAP4430_PRM_IO_COUNT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x001c)
593#define OMAP4_PRM_IO_PMCTRL_OFFSET 0x0020 648#define OMAP4_PRM_IO_PMCTRL_OFFSET 0x0020
594#define OMAP4430_PRM_IO_PMCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0020) 649#define OMAP4430_PRM_IO_PMCTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0020)
595#define OMAP4_PRM_VOLTSETUP_WARMRESET_OFFSET 0x0024 650#define OMAP4_PRM_VOLTSETUP_WARMRESET_OFFSET 0x0024
596#define OMAP4430_PRM_VOLTSETUP_WARMRESET OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0024) 651#define OMAP4430_PRM_VOLTSETUP_WARMRESET OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0024)
597#define OMAP4_PRM_VOLTSETUP_CORE_OFF_OFFSET 0x0028 652#define OMAP4_PRM_VOLTSETUP_CORE_OFF_OFFSET 0x0028
598#define OMAP4430_PRM_VOLTSETUP_CORE_OFF OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0028) 653#define OMAP4430_PRM_VOLTSETUP_CORE_OFF OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0028)
599#define OMAP4_PRM_VOLTSETUP_MPU_OFF_OFFSET 0x002c 654#define OMAP4_PRM_VOLTSETUP_MPU_OFF_OFFSET 0x002c
600#define OMAP4430_PRM_VOLTSETUP_MPU_OFF OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x002c) 655#define OMAP4430_PRM_VOLTSETUP_MPU_OFF OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x002c)
601#define OMAP4_PRM_VOLTSETUP_IVA_OFF_OFFSET 0x0030 656#define OMAP4_PRM_VOLTSETUP_IVA_OFF_OFFSET 0x0030
602#define OMAP4430_PRM_VOLTSETUP_IVA_OFF OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0030) 657#define OMAP4430_PRM_VOLTSETUP_IVA_OFF OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0030)
603#define OMAP4_PRM_VOLTSETUP_CORE_RET_SLEEP_OFFSET 0x0034 658#define OMAP4_PRM_VOLTSETUP_CORE_RET_SLEEP_OFFSET 0x0034
604#define OMAP4430_PRM_VOLTSETUP_CORE_RET_SLEEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0034) 659#define OMAP4430_PRM_VOLTSETUP_CORE_RET_SLEEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0034)
605#define OMAP4_PRM_VOLTSETUP_MPU_RET_SLEEP_OFFSET 0x0038 660#define OMAP4_PRM_VOLTSETUP_MPU_RET_SLEEP_OFFSET 0x0038
606#define OMAP4430_PRM_VOLTSETUP_MPU_RET_SLEEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0038) 661#define OMAP4430_PRM_VOLTSETUP_MPU_RET_SLEEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0038)
607#define OMAP4_PRM_VOLTSETUP_IVA_RET_SLEEP_OFFSET 0x003c 662#define OMAP4_PRM_VOLTSETUP_IVA_RET_SLEEP_OFFSET 0x003c
608#define OMAP4430_PRM_VOLTSETUP_IVA_RET_SLEEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x003c) 663#define OMAP4430_PRM_VOLTSETUP_IVA_RET_SLEEP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x003c)
609#define OMAP4_PRM_VP_CORE_CONFIG_OFFSET 0x0040 664#define OMAP4_PRM_VP_CORE_CONFIG_OFFSET 0x0040
610#define OMAP4430_PRM_VP_CORE_CONFIG OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0040) 665#define OMAP4430_PRM_VP_CORE_CONFIG OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0040)
611#define OMAP4_PRM_VP_CORE_STATUS_OFFSET 0x0044 666#define OMAP4_PRM_VP_CORE_STATUS_OFFSET 0x0044
612#define OMAP4430_PRM_VP_CORE_STATUS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0044) 667#define OMAP4430_PRM_VP_CORE_STATUS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0044)
613#define OMAP4_PRM_VP_CORE_VLIMITTO_OFFSET 0x0048 668#define OMAP4_PRM_VP_CORE_VLIMITTO_OFFSET 0x0048
614#define OMAP4430_PRM_VP_CORE_VLIMITTO OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0048) 669#define OMAP4430_PRM_VP_CORE_VLIMITTO OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0048)
615#define OMAP4_PRM_VP_CORE_VOLTAGE_OFFSET 0x004c 670#define OMAP4_PRM_VP_CORE_VOLTAGE_OFFSET 0x004c
616#define OMAP4430_PRM_VP_CORE_VOLTAGE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x004c) 671#define OMAP4430_PRM_VP_CORE_VOLTAGE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x004c)
617#define OMAP4_PRM_VP_CORE_VSTEPMAX_OFFSET 0x0050 672#define OMAP4_PRM_VP_CORE_VSTEPMAX_OFFSET 0x0050
618#define OMAP4430_PRM_VP_CORE_VSTEPMAX OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0050) 673#define OMAP4430_PRM_VP_CORE_VSTEPMAX OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0050)
619#define OMAP4_PRM_VP_CORE_VSTEPMIN_OFFSET 0x0054 674#define OMAP4_PRM_VP_CORE_VSTEPMIN_OFFSET 0x0054
620#define OMAP4430_PRM_VP_CORE_VSTEPMIN OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0054) 675#define OMAP4430_PRM_VP_CORE_VSTEPMIN OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0054)
621#define OMAP4_PRM_VP_MPU_CONFIG_OFFSET 0x0058 676#define OMAP4_PRM_VP_MPU_CONFIG_OFFSET 0x0058
622#define OMAP4430_PRM_VP_MPU_CONFIG OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0058) 677#define OMAP4430_PRM_VP_MPU_CONFIG OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0058)
623#define OMAP4_PRM_VP_MPU_STATUS_OFFSET 0x005c 678#define OMAP4_PRM_VP_MPU_STATUS_OFFSET 0x005c
624#define OMAP4430_PRM_VP_MPU_STATUS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x005c) 679#define OMAP4430_PRM_VP_MPU_STATUS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x005c)
625#define OMAP4_PRM_VP_MPU_VLIMITTO_OFFSET 0x0060 680#define OMAP4_PRM_VP_MPU_VLIMITTO_OFFSET 0x0060
626#define OMAP4430_PRM_VP_MPU_VLIMITTO OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0060) 681#define OMAP4430_PRM_VP_MPU_VLIMITTO OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0060)
627#define OMAP4_PRM_VP_MPU_VOLTAGE_OFFSET 0x0064 682#define OMAP4_PRM_VP_MPU_VOLTAGE_OFFSET 0x0064
628#define OMAP4430_PRM_VP_MPU_VOLTAGE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0064) 683#define OMAP4430_PRM_VP_MPU_VOLTAGE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0064)
629#define OMAP4_PRM_VP_MPU_VSTEPMAX_OFFSET 0x0068 684#define OMAP4_PRM_VP_MPU_VSTEPMAX_OFFSET 0x0068
630#define OMAP4430_PRM_VP_MPU_VSTEPMAX OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0068) 685#define OMAP4430_PRM_VP_MPU_VSTEPMAX OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0068)
631#define OMAP4_PRM_VP_MPU_VSTEPMIN_OFFSET 0x006c 686#define OMAP4_PRM_VP_MPU_VSTEPMIN_OFFSET 0x006c
632#define OMAP4430_PRM_VP_MPU_VSTEPMIN OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x006c) 687#define OMAP4430_PRM_VP_MPU_VSTEPMIN OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x006c)
633#define OMAP4_PRM_VP_IVA_CONFIG_OFFSET 0x0070 688#define OMAP4_PRM_VP_IVA_CONFIG_OFFSET 0x0070
634#define OMAP4430_PRM_VP_IVA_CONFIG OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0070) 689#define OMAP4430_PRM_VP_IVA_CONFIG OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0070)
635#define OMAP4_PRM_VP_IVA_STATUS_OFFSET 0x0074 690#define OMAP4_PRM_VP_IVA_STATUS_OFFSET 0x0074
636#define OMAP4430_PRM_VP_IVA_STATUS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0074) 691#define OMAP4430_PRM_VP_IVA_STATUS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0074)
637#define OMAP4_PRM_VP_IVA_VLIMITTO_OFFSET 0x0078 692#define OMAP4_PRM_VP_IVA_VLIMITTO_OFFSET 0x0078
638#define OMAP4430_PRM_VP_IVA_VLIMITTO OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0078) 693#define OMAP4430_PRM_VP_IVA_VLIMITTO OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0078)
639#define OMAP4_PRM_VP_IVA_VOLTAGE_OFFSET 0x007c 694#define OMAP4_PRM_VP_IVA_VOLTAGE_OFFSET 0x007c
640#define OMAP4430_PRM_VP_IVA_VOLTAGE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x007c) 695#define OMAP4430_PRM_VP_IVA_VOLTAGE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x007c)
641#define OMAP4_PRM_VP_IVA_VSTEPMAX_OFFSET 0x0080 696#define OMAP4_PRM_VP_IVA_VSTEPMAX_OFFSET 0x0080
642#define OMAP4430_PRM_VP_IVA_VSTEPMAX OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0080) 697#define OMAP4430_PRM_VP_IVA_VSTEPMAX OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0080)
643#define OMAP4_PRM_VP_IVA_VSTEPMIN_OFFSET 0x0084 698#define OMAP4_PRM_VP_IVA_VSTEPMIN_OFFSET 0x0084
644#define OMAP4430_PRM_VP_IVA_VSTEPMIN OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0084) 699#define OMAP4430_PRM_VP_IVA_VSTEPMIN OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0084)
645#define OMAP4_PRM_VC_SMPS_SA_OFFSET 0x0088 700#define OMAP4_PRM_VC_SMPS_SA_OFFSET 0x0088
646#define OMAP4430_PRM_VC_SMPS_SA OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0088) 701#define OMAP4430_PRM_VC_SMPS_SA OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0088)
647#define OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET 0x008c 702#define OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET 0x008c
648#define OMAP4430_PRM_VC_VAL_SMPS_RA_VOL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x008c) 703#define OMAP4430_PRM_VC_VAL_SMPS_RA_VOL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x008c)
649#define OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET 0x0090 704#define OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET 0x0090
650#define OMAP4430_PRM_VC_VAL_SMPS_RA_CMD OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0090) 705#define OMAP4430_PRM_VC_VAL_SMPS_RA_CMD OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0090)
651#define OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET 0x0094 706#define OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET 0x0094
652#define OMAP4430_PRM_VC_VAL_CMD_VDD_CORE_L OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0094) 707#define OMAP4430_PRM_VC_VAL_CMD_VDD_CORE_L OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0094)
653#define OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET 0x0098 708#define OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET 0x0098
654#define OMAP4430_PRM_VC_VAL_CMD_VDD_MPU_L OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x0098) 709#define OMAP4430_PRM_VC_VAL_CMD_VDD_MPU_L OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x0098)
655#define OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET 0x009c 710#define OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET 0x009c
656#define OMAP4430_PRM_VC_VAL_CMD_VDD_IVA_L OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x009c) 711#define OMAP4430_PRM_VC_VAL_CMD_VDD_IVA_L OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x009c)
657#define OMAP4_PRM_VC_VAL_BYPASS_OFFSET 0x00a0 712#define OMAP4_PRM_VC_VAL_BYPASS_OFFSET 0x00a0
658#define OMAP4430_PRM_VC_VAL_BYPASS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00a0) 713#define OMAP4430_PRM_VC_VAL_BYPASS OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00a0)
659#define OMAP4_PRM_VC_CFG_CHANNEL_OFFSET 0x00a4 714#define OMAP4_PRM_VC_CFG_CHANNEL_OFFSET 0x00a4
660#define OMAP4430_PRM_VC_CFG_CHANNEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00a4) 715#define OMAP4430_PRM_VC_CFG_CHANNEL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00a4)
661#define OMAP4_PRM_VC_CFG_I2C_MODE_OFFSET 0x00a8 716#define OMAP4_PRM_VC_CFG_I2C_INSTE_OFFSET 0x00a8
662#define OMAP4430_PRM_VC_CFG_I2C_MODE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00a8) 717#define OMAP4430_PRM_VC_CFG_I2C_INSTE OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00a8)
663#define OMAP4_PRM_VC_CFG_I2C_CLK_OFFSET 0x00ac 718#define OMAP4_PRM_VC_CFG_I2C_CLK_OFFSET 0x00ac
664#define OMAP4430_PRM_VC_CFG_I2C_CLK OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00ac) 719#define OMAP4430_PRM_VC_CFG_I2C_CLK OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00ac)
665#define OMAP4_PRM_SRAM_COUNT_OFFSET 0x00b0 720#define OMAP4_PRM_SRAM_COUNT_OFFSET 0x00b0
666#define OMAP4430_PRM_SRAM_COUNT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00b0) 721#define OMAP4430_PRM_SRAM_COUNT OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00b0)
667#define OMAP4_PRM_SRAM_WKUP_SETUP_OFFSET 0x00b4 722#define OMAP4_PRM_SRAM_WKUP_SETUP_OFFSET 0x00b4
668#define OMAP4430_PRM_SRAM_WKUP_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00b4) 723#define OMAP4430_PRM_SRAM_WKUP_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00b4)
669#define OMAP4_PRM_LDO_SRAM_CORE_SETUP_OFFSET 0x00b8 724#define OMAP4_PRM_LDO_SRAM_CORE_SETUP_OFFSET 0x00b8
670#define OMAP4430_PRM_LDO_SRAM_CORE_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00b8) 725#define OMAP4430_PRM_LDO_SRAM_CORE_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00b8)
671#define OMAP4_PRM_LDO_SRAM_CORE_CTRL_OFFSET 0x00bc 726#define OMAP4_PRM_LDO_SRAM_CORE_CTRL_OFFSET 0x00bc
672#define OMAP4430_PRM_LDO_SRAM_CORE_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00bc) 727#define OMAP4430_PRM_LDO_SRAM_CORE_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00bc)
673#define OMAP4_PRM_LDO_SRAM_MPU_SETUP_OFFSET 0x00c0 728#define OMAP4_PRM_LDO_SRAM_MPU_SETUP_OFFSET 0x00c0
674#define OMAP4430_PRM_LDO_SRAM_MPU_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00c0) 729#define OMAP4430_PRM_LDO_SRAM_MPU_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00c0)
675#define OMAP4_PRM_LDO_SRAM_MPU_CTRL_OFFSET 0x00c4 730#define OMAP4_PRM_LDO_SRAM_MPU_CTRL_OFFSET 0x00c4
676#define OMAP4430_PRM_LDO_SRAM_MPU_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00c4) 731#define OMAP4430_PRM_LDO_SRAM_MPU_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00c4)
677#define OMAP4_PRM_LDO_SRAM_IVA_SETUP_OFFSET 0x00c8 732#define OMAP4_PRM_LDO_SRAM_IVA_SETUP_OFFSET 0x00c8
678#define OMAP4430_PRM_LDO_SRAM_IVA_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00c8) 733#define OMAP4430_PRM_LDO_SRAM_IVA_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00c8)
679#define OMAP4_PRM_LDO_SRAM_IVA_CTRL_OFFSET 0x00cc 734#define OMAP4_PRM_LDO_SRAM_IVA_CTRL_OFFSET 0x00cc
680#define OMAP4430_PRM_LDO_SRAM_IVA_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00cc) 735#define OMAP4430_PRM_LDO_SRAM_IVA_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00cc)
681#define OMAP4_PRM_LDO_ABB_MPU_SETUP_OFFSET 0x00d0 736#define OMAP4_PRM_LDO_ABB_MPU_SETUP_OFFSET 0x00d0
682#define OMAP4430_PRM_LDO_ABB_MPU_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00d0) 737#define OMAP4430_PRM_LDO_ABB_MPU_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00d0)
683#define OMAP4_PRM_LDO_ABB_MPU_CTRL_OFFSET 0x00d4 738#define OMAP4_PRM_LDO_ABB_MPU_CTRL_OFFSET 0x00d4
684#define OMAP4430_PRM_LDO_ABB_MPU_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00d4) 739#define OMAP4430_PRM_LDO_ABB_MPU_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00d4)
685#define OMAP4_PRM_LDO_ABB_IVA_SETUP_OFFSET 0x00d8 740#define OMAP4_PRM_LDO_ABB_IVA_SETUP_OFFSET 0x00d8
686#define OMAP4430_PRM_LDO_ABB_IVA_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00d8) 741#define OMAP4430_PRM_LDO_ABB_IVA_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00d8)
687#define OMAP4_PRM_LDO_ABB_IVA_CTRL_OFFSET 0x00dc 742#define OMAP4_PRM_LDO_ABB_IVA_CTRL_OFFSET 0x00dc
688#define OMAP4430_PRM_LDO_ABB_IVA_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00dc) 743#define OMAP4430_PRM_LDO_ABB_IVA_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00dc)
689#define OMAP4_PRM_LDO_BANDGAP_CTRL_OFFSET 0x00e0 744#define OMAP4_PRM_LDO_BANDGAP_SETUP_OFFSET 0x00e0
690#define OMAP4430_PRM_LDO_BANDGAP_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00e0) 745#define OMAP4430_PRM_LDO_BANDGAP_SETUP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00e0)
691#define OMAP4_PRM_DEVICE_OFF_CTRL_OFFSET 0x00e4 746#define OMAP4_PRM_DEVICE_OFF_CTRL_OFFSET 0x00e4
692#define OMAP4430_PRM_DEVICE_OFF_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00e4) 747#define OMAP4430_PRM_DEVICE_OFF_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00e4)
693#define OMAP4_PRM_PHASE1_CNDP_OFFSET 0x00e8 748#define OMAP4_PRM_PHASE1_CNDP_OFFSET 0x00e8
694#define OMAP4430_PRM_PHASE1_CNDP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00e8) 749#define OMAP4430_PRM_PHASE1_CNDP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00e8)
695#define OMAP4_PRM_PHASE2A_CNDP_OFFSET 0x00ec 750#define OMAP4_PRM_PHASE2A_CNDP_OFFSET 0x00ec
696#define OMAP4430_PRM_PHASE2A_CNDP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00ec) 751#define OMAP4430_PRM_PHASE2A_CNDP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00ec)
697#define OMAP4_PRM_PHASE2B_CNDP_OFFSET 0x00f0 752#define OMAP4_PRM_PHASE2B_CNDP_OFFSET 0x00f0
698#define OMAP4430_PRM_PHASE2B_CNDP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00f0) 753#define OMAP4430_PRM_PHASE2B_CNDP OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00f0)
699#define OMAP4_PRM_MODEM_IF_CTRL_OFFSET 0x00f4 754#define OMAP4_PRM_INSTEM_IF_CTRL_OFFSET 0x00f4
700#define OMAP4430_PRM_MODEM_IF_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_MOD, 0x00f4) 755#define OMAP4430_PRM_INSTEM_IF_CTRL OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00f4)
756#define OMAP4_PRM_VC_ERRST_OFFSET 0x00f8
757#define OMAP4430_PRM_VC_ERRST OMAP44XX_PRM_REGADDR(OMAP4430_PRM_DEVICE_INST, 0x00f8)
701 758
702/* 759/* Function prototypes */
703 * PRCM_MPU 760# ifndef __ASSEMBLER__
704 * 761
705 * The PRCM_MPU is a local PRCM inside the MPU subsystem. For the PRCM (global) 762extern u32 omap4_prm_read_inst_reg(s16 inst, u16 idx);
706 * point of view the PRCM_MPU is a single entity. It shares the same 763extern void omap4_prm_write_inst_reg(u32 val, s16 inst, u16 idx);
707 * programming model as the global PRCM and thus can be assimilate as two new 764extern u32 omap4_prm_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 idx);
708 * MOD inside the PRCM 765extern u32 omap4_prm_rmw_reg_bits(u32 mask, u32 bits, void __iomem *reg);
709 */ 766extern u32 omap4_prm_set_inst_reg_bits(u32 bits, s16 inst, s16 idx);
767extern u32 omap4_prm_clear_inst_reg_bits(u32 bits, s16 inst, s16 idx);
768extern u32 omap4_prm_read_bits_shift(void __iomem *reg, u32 mask);
769
770extern int omap4_prm_is_hardreset_asserted(void __iomem *rstctrl_reg, u8 shift);
771extern int omap4_prm_assert_hardreset(void __iomem *rstctrl_reg, u8 shift);
772extern int omap4_prm_deassert_hardreset(void __iomem *rstctrl_reg, u8 shift);
773
774extern void omap4_prm_global_warm_sw_reset(void);
775
776# endif
710 777
711/* PRCM_MPU.OCP_SOCKET_PRCM register offsets */
712#define OMAP4_REVISION_PRCM_OFFSET 0x0000
713#define OMAP4430_REVISION_PRCM OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_OCP_SOCKET_PRCM_MOD, 0x0000)
714
715/* PRCM_MPU.DEVICE_PRM register offsets */
716#define OMAP4_PRCM_MPU_PRM_RSTST_OFFSET 0x0000
717#define OMAP4430_PRCM_MPU_PRM_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_DEVICE_PRM_MOD, 0x0000)
718
719/* PRCM_MPU.CPU0 register offsets */
720#define OMAP4_PM_CPU0_PWRSTCTRL_OFFSET 0x0000
721#define OMAP4430_PM_CPU0_PWRSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_MOD, 0x0000)
722#define OMAP4_PM_CPU0_PWRSTST_OFFSET 0x0004
723#define OMAP4430_PM_CPU0_PWRSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_MOD, 0x0004)
724#define OMAP4_RM_CPU0_CPU0_CONTEXT_OFFSET 0x0008
725#define OMAP4430_RM_CPU0_CPU0_CONTEXT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_MOD, 0x0008)
726#define OMAP4_RM_CPU0_CPU0_RSTCTRL_OFFSET 0x000c
727#define OMAP4430_RM_CPU0_CPU0_RSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_MOD, 0x000c)
728#define OMAP4_RM_CPU0_CPU0_RSTST_OFFSET 0x0010
729#define OMAP4430_RM_CPU0_CPU0_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_MOD, 0x0010)
730#define OMAP4_CM_CPU0_CPU0_CLKCTRL_OFFSET 0x0014
731#define OMAP4430_CM_CPU0_CPU0_CLKCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_MOD, 0x0014)
732#define OMAP4_CM_CPU0_CLKSTCTRL_OFFSET 0x0018
733#define OMAP4430_CM_CPU0_CLKSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU0_MOD, 0x0018)
734
735/* PRCM_MPU.CPU1 register offsets */
736#define OMAP4_PM_CPU1_PWRSTCTRL_OFFSET 0x0000
737#define OMAP4430_PM_CPU1_PWRSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_MOD, 0x0000)
738#define OMAP4_PM_CPU1_PWRSTST_OFFSET 0x0004
739#define OMAP4430_PM_CPU1_PWRSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_MOD, 0x0004)
740#define OMAP4_RM_CPU1_CPU1_CONTEXT_OFFSET 0x0008
741#define OMAP4430_RM_CPU1_CPU1_CONTEXT OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_MOD, 0x0008)
742#define OMAP4_RM_CPU1_CPU1_RSTCTRL_OFFSET 0x000c
743#define OMAP4430_RM_CPU1_CPU1_RSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_MOD, 0x000c)
744#define OMAP4_RM_CPU1_CPU1_RSTST_OFFSET 0x0010
745#define OMAP4430_RM_CPU1_CPU1_RSTST OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_MOD, 0x0010)
746#define OMAP4_CM_CPU1_CPU1_CLKCTRL_OFFSET 0x0014
747#define OMAP4430_CM_CPU1_CPU1_CLKCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_MOD, 0x0014)
748#define OMAP4_CM_CPU1_CLKSTCTRL_OFFSET 0x0018
749#define OMAP4430_CM_CPU1_CLKSTCTRL OMAP44XX_PRCM_MPU_REGADDR(OMAP4430_PRCM_MPU_CPU1_MOD, 0x0018)
750#endif 778#endif
diff --git a/arch/arm/mach-omap2/prminst44xx.c b/arch/arm/mach-omap2/prminst44xx.c
new file mode 100644
index 000000000000..a30324297278
--- /dev/null
+++ b/arch/arm/mach-omap2/prminst44xx.c
@@ -0,0 +1,66 @@
1/*
2 * OMAP4 PRM instance functions
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/types.h>
14#include <linux/errno.h>
15#include <linux/err.h>
16#include <linux/io.h>
17
18#include <plat/common.h>
19
20#include "prm44xx.h"
21#include "prminst44xx.h"
22#include "prm-regbits-44xx.h"
23#include "prcm44xx.h"
24#include "prcm_mpu44xx.h"
25
26static u32 _prm_bases[OMAP4_MAX_PRCM_PARTITIONS] = {
27 [OMAP4430_INVALID_PRCM_PARTITION] = 0,
28 [OMAP4430_PRM_PARTITION] = OMAP4430_PRM_BASE,
29 [OMAP4430_CM1_PARTITION] = 0,
30 [OMAP4430_CM2_PARTITION] = 0,
31 [OMAP4430_SCRM_PARTITION] = 0,
32 [OMAP4430_PRCM_MPU_PARTITION] = OMAP4430_PRCM_MPU_BASE,
33};
34
35/* Read a register in a PRM instance */
36u32 omap4_prminst_read_inst_reg(u8 part, s16 inst, u16 idx)
37{
38 BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
39 part == OMAP4430_INVALID_PRCM_PARTITION ||
40 !_prm_bases[part]);
41 return __raw_readl(OMAP2_L4_IO_ADDRESS(_prm_bases[part] + inst +
42 idx));
43}
44
45/* Write into a register in a PRM instance */
46void omap4_prminst_write_inst_reg(u32 val, u8 part, s16 inst, u16 idx)
47{
48 BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS ||
49 part == OMAP4430_INVALID_PRCM_PARTITION ||
50 !_prm_bases[part]);
51 __raw_writel(val, OMAP2_L4_IO_ADDRESS(_prm_bases[part] + inst + idx));
52}
53
54/* Read-modify-write a register in PRM. Caller must lock */
55u32 omap4_prminst_rmw_inst_reg_bits(u32 mask, u32 bits, u8 part, s16 inst,
56 s16 idx)
57{
58 u32 v;
59
60 v = omap4_prminst_read_inst_reg(part, inst, idx);
61 v &= ~mask;
62 v |= bits;
63 omap4_prminst_write_inst_reg(v, part, inst, idx);
64
65 return v;
66}
diff --git a/arch/arm/mach-omap2/prminst44xx.h b/arch/arm/mach-omap2/prminst44xx.h
new file mode 100644
index 000000000000..02dd66ddda8b
--- /dev/null
+++ b/arch/arm/mach-omap2/prminst44xx.h
@@ -0,0 +1,25 @@
1/*
2 * OMAP4 Power/Reset Management (PRM) function prototypes
3 *
4 * Copyright (C) 2010 Nokia Corporation
5 * Paul Walmsley
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#ifndef __ARCH_ASM_MACH_OMAP2_PRMINST44XX_H
12#define __ARCH_ASM_MACH_OMAP2_PRMINST44XX_H
13
14/*
15 * In an ideal world, we would not export these low-level functions,
16 * but this will probably take some time to fix properly
17 */
18extern u32 omap4_prminst_read_inst_reg(u8 part, s16 inst, u16 idx);
19extern void omap4_prminst_write_inst_reg(u32 val, u8 part, s16 inst, u16 idx);
20extern u32 omap4_prminst_rmw_inst_reg_bits(u32 mask, u32 bits, u8 part,
21 s16 inst, s16 idx);
22
23extern void omap4_prm_global_warm_sw_reset(void);
24
25#endif
diff --git a/arch/arm/mach-omap2/scrm44xx.h b/arch/arm/mach-omap2/scrm44xx.h
new file mode 100644
index 000000000000..701bf2d32949
--- /dev/null
+++ b/arch/arm/mach-omap2/scrm44xx.h
@@ -0,0 +1,175 @@
1/*
2 * OMAP44xx SCRM registers and bitfields
3 *
4 * Copyright (C) 2010 Texas Instruments, Inc.
5 *
6 * Benoit Cousson (b-cousson@ti.com)
7 *
8 * This file is automatically generated from the OMAP hardware databases.
9 * We respectfully ask that any modifications to this file be coordinated
10 * with the public linux-omap@vger.kernel.org mailing list and the
11 * authors above to ensure that the autogeneration scripts are kept
12 * up-to-date with the file contents.
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 */
18
19#ifndef __ARCH_ARM_MACH_OMAP2_SCRM_44XX_H
20#define __ARCH_ARM_MACH_OMAP2_SCRM_44XX_H
21
22#define OMAP4_SCRM_BASE 0x4a30a000
23
24#define OMAP44XX_SCRM_REGADDR(reg) \
25 OMAP2_L4_IO_ADDRESS(OMAP4_SCRM_BASE + (reg))
26
27/* Registers offset */
28#define OMAP4_SCRM_REVISION_SCRM_OFFSET 0x0000
29#define OMAP4_SCRM_REVISION_SCRM OMAP44XX_SCRM_REGADDR(0x0000)
30#define OMAP4_SCRM_CLKSETUPTIME_OFFSET 0x0100
31#define OMAP4_SCRM_CLKSETUPTIME OMAP44XX_SCRM_REGADDR(0x0100)
32#define OMAP4_SCRM_PMICSETUPTIME_OFFSET 0x0104
33#define OMAP4_SCRM_PMICSETUPTIME OMAP44XX_SCRM_REGADDR(0x0104)
34#define OMAP4_SCRM_ALTCLKSRC_OFFSET 0x0110
35#define OMAP4_SCRM_ALTCLKSRC OMAP44XX_SCRM_REGADDR(0x0110)
36#define OMAP4_SCRM_MODEMCLKM_OFFSET 0x0118
37#define OMAP4_SCRM_MODEMCLKM OMAP44XX_SCRM_REGADDR(0x0118)
38#define OMAP4_SCRM_D2DCLKM_OFFSET 0x011c
39#define OMAP4_SCRM_D2DCLKM OMAP44XX_SCRM_REGADDR(0x011c)
40#define OMAP4_SCRM_EXTCLKREQ_OFFSET 0x0200
41#define OMAP4_SCRM_EXTCLKREQ OMAP44XX_SCRM_REGADDR(0x0200)
42#define OMAP4_SCRM_ACCCLKREQ_OFFSET 0x0204
43#define OMAP4_SCRM_ACCCLKREQ OMAP44XX_SCRM_REGADDR(0x0204)
44#define OMAP4_SCRM_PWRREQ_OFFSET 0x0208
45#define OMAP4_SCRM_PWRREQ OMAP44XX_SCRM_REGADDR(0x0208)
46#define OMAP4_SCRM_AUXCLKREQ0_OFFSET 0x0210
47#define OMAP4_SCRM_AUXCLKREQ0 OMAP44XX_SCRM_REGADDR(0x0210)
48#define OMAP4_SCRM_AUXCLKREQ1_OFFSET 0x0214
49#define OMAP4_SCRM_AUXCLKREQ1 OMAP44XX_SCRM_REGADDR(0x0214)
50#define OMAP4_SCRM_AUXCLKREQ2_OFFSET 0x0218
51#define OMAP4_SCRM_AUXCLKREQ2 OMAP44XX_SCRM_REGADDR(0x0218)
52#define OMAP4_SCRM_AUXCLKREQ3_OFFSET 0x021c
53#define OMAP4_SCRM_AUXCLKREQ3 OMAP44XX_SCRM_REGADDR(0x021c)
54#define OMAP4_SCRM_AUXCLKREQ4_OFFSET 0x0220
55#define OMAP4_SCRM_AUXCLKREQ4 OMAP44XX_SCRM_REGADDR(0x0220)
56#define OMAP4_SCRM_AUXCLKREQ5_OFFSET 0x0224
57#define OMAP4_SCRM_AUXCLKREQ5 OMAP44XX_SCRM_REGADDR(0x0224)
58#define OMAP4_SCRM_D2DCLKREQ_OFFSET 0x0234
59#define OMAP4_SCRM_D2DCLKREQ OMAP44XX_SCRM_REGADDR(0x0234)
60#define OMAP4_SCRM_AUXCLK0_OFFSET 0x0310
61#define OMAP4_SCRM_AUXCLK0 OMAP44XX_SCRM_REGADDR(0x0310)
62#define OMAP4_SCRM_AUXCLK1_OFFSET 0x0314
63#define OMAP4_SCRM_AUXCLK1 OMAP44XX_SCRM_REGADDR(0x0314)
64#define OMAP4_SCRM_AUXCLK2_OFFSET 0x0318
65#define OMAP4_SCRM_AUXCLK2 OMAP44XX_SCRM_REGADDR(0x0318)
66#define OMAP4_SCRM_AUXCLK3_OFFSET 0x031c
67#define OMAP4_SCRM_AUXCLK3 OMAP44XX_SCRM_REGADDR(0x031c)
68#define OMAP4_SCRM_AUXCLK4_OFFSET 0x0320
69#define OMAP4_SCRM_AUXCLK4 OMAP44XX_SCRM_REGADDR(0x0320)
70#define OMAP4_SCRM_AUXCLK5_OFFSET 0x0324
71#define OMAP4_SCRM_AUXCLK5 OMAP44XX_SCRM_REGADDR(0x0324)
72#define OMAP4_SCRM_RSTTIME_OFFSET 0x0400
73#define OMAP4_SCRM_RSTTIME OMAP44XX_SCRM_REGADDR(0x0400)
74#define OMAP4_SCRM_MODEMRSTCTRL_OFFSET 0x0418
75#define OMAP4_SCRM_MODEMRSTCTRL OMAP44XX_SCRM_REGADDR(0x0418)
76#define OMAP4_SCRM_D2DRSTCTRL_OFFSET 0x041c
77#define OMAP4_SCRM_D2DRSTCTRL OMAP44XX_SCRM_REGADDR(0x041c)
78#define OMAP4_SCRM_EXTPWRONRSTCTRL_OFFSET 0x0420
79#define OMAP4_SCRM_EXTPWRONRSTCTRL OMAP44XX_SCRM_REGADDR(0x0420)
80#define OMAP4_SCRM_EXTWARMRSTST_OFFSET 0x0510
81#define OMAP4_SCRM_EXTWARMRSTST OMAP44XX_SCRM_REGADDR(0x0510)
82#define OMAP4_SCRM_APEWARMRSTST_OFFSET 0x0514
83#define OMAP4_SCRM_APEWARMRSTST OMAP44XX_SCRM_REGADDR(0x0514)
84#define OMAP4_SCRM_MODEMWARMRSTST_OFFSET 0x0518
85#define OMAP4_SCRM_MODEMWARMRSTST OMAP44XX_SCRM_REGADDR(0x0518)
86#define OMAP4_SCRM_D2DWARMRSTST_OFFSET 0x051c
87#define OMAP4_SCRM_D2DWARMRSTST OMAP44XX_SCRM_REGADDR(0x051c)
88
89/* Registers shifts and masks */
90
91/* REVISION_SCRM */
92#define OMAP4_REV_SHIFT 0
93#define OMAP4_REV_MASK (0xff << 0)
94
95/* CLKSETUPTIME */
96#define OMAP4_DOWNTIME_SHIFT 16
97#define OMAP4_DOWNTIME_MASK (0x3f << 16)
98#define OMAP4_SETUPTIME_SHIFT 0
99#define OMAP4_SETUPTIME_MASK (0xfff << 0)
100
101/* PMICSETUPTIME */
102#define OMAP4_WAKEUPTIME_SHIFT 16
103#define OMAP4_WAKEUPTIME_MASK (0x3f << 16)
104#define OMAP4_SLEEPTIME_SHIFT 0
105#define OMAP4_SLEEPTIME_MASK (0x3f << 0)
106
107/* ALTCLKSRC */
108#define OMAP4_ENABLE_EXT_SHIFT 3
109#define OMAP4_ENABLE_EXT_MASK (1 << 3)
110#define OMAP4_ENABLE_INT_SHIFT 2
111#define OMAP4_ENABLE_INT_MASK (1 << 2)
112#define OMAP4_ALTCLKSRC_MODE_SHIFT 0
113#define OMAP4_ALTCLKSRC_MODE_MASK (0x3 << 0)
114
115/* MODEMCLKM */
116#define OMAP4_CLK_32KHZ_SHIFT 0
117#define OMAP4_CLK_32KHZ_MASK (1 << 0)
118
119/* D2DCLKM */
120#define OMAP4_SYSCLK_SHIFT 1
121#define OMAP4_SYSCLK_MASK (1 << 1)
122
123/* EXTCLKREQ */
124#define OMAP4_POLARITY_SHIFT 0
125#define OMAP4_POLARITY_MASK (1 << 0)
126
127/* AUXCLKREQ0 */
128#define OMAP4_MAPPING_SHIFT 2
129#define OMAP4_MAPPING_MASK (0x7 << 2)
130#define OMAP4_ACCURACY_SHIFT 1
131#define OMAP4_ACCURACY_MASK (1 << 1)
132
133/* AUXCLK0 */
134#define OMAP4_CLKDIV_SHIFT 16
135#define OMAP4_CLKDIV_MASK (0xf << 16)
136#define OMAP4_DISABLECLK_SHIFT 9
137#define OMAP4_DISABLECLK_MASK (1 << 9)
138#define OMAP4_ENABLE_SHIFT 8
139#define OMAP4_ENABLE_MASK (1 << 8)
140#define OMAP4_SRCSELECT_SHIFT 1
141#define OMAP4_SRCSELECT_MASK (0x3 << 1)
142
143/* RSTTIME */
144#define OMAP4_RSTTIME_SHIFT 0
145#define OMAP4_RSTTIME_MASK (0xf << 0)
146
147/* MODEMRSTCTRL */
148#define OMAP4_WARMRST_SHIFT 1
149#define OMAP4_WARMRST_MASK (1 << 1)
150#define OMAP4_COLDRST_SHIFT 0
151#define OMAP4_COLDRST_MASK (1 << 0)
152
153/* EXTPWRONRSTCTRL */
154#define OMAP4_PWRONRST_SHIFT 1
155#define OMAP4_PWRONRST_MASK (1 << 1)
156#define OMAP4_ENABLE_EXTPWRONRSTCTRL_SHIFT 0
157#define OMAP4_ENABLE_EXTPWRONRSTCTRL_MASK (1 << 0)
158
159/* EXTWARMRSTST */
160#define OMAP4_EXTWARMRSTST_SHIFT 0
161#define OMAP4_EXTWARMRSTST_MASK (1 << 0)
162
163/* APEWARMRSTST */
164#define OMAP4_APEWARMRSTST_SHIFT 1
165#define OMAP4_APEWARMRSTST_MASK (1 << 1)
166
167/* MODEMWARMRSTST */
168#define OMAP4_MODEMWARMRSTST_SHIFT 2
169#define OMAP4_MODEMWARMRSTST_MASK (1 << 2)
170
171/* D2DWARMRSTST */
172#define OMAP4_D2DWARMRSTST_SHIFT 3
173#define OMAP4_D2DWARMRSTST_MASK (1 << 3)
174
175#endif
diff --git a/arch/arm/mach-omap2/board-rx51-sdram.c b/arch/arm/mach-omap2/sdram-nokia.c
index f392844195d2..14caa228bc0d 100644
--- a/arch/arm/mach-omap2/board-rx51-sdram.c
+++ b/arch/arm/mach-omap2/sdram-nokia.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * SDRC register values for RX51 2 * SDRC register values for Nokia boards
3 * 3 *
4 * Copyright (C) 2008 Nokia Corporation 4 * Copyright (C) 2008, 2010 Nokia Corporation
5 * 5 *
6 * Lauri Leukkunen <lauri.leukkunen@nokia.com> 6 * Lauri Leukkunen <lauri.leukkunen@nokia.com>
7 * 7 *
@@ -22,6 +22,7 @@
22#include <plat/clock.h> 22#include <plat/clock.h>
23#include <plat/sdrc.h> 23#include <plat/sdrc.h>
24 24
25#include "sdram-nokia.h"
25 26
26/* In picoseconds, except for tREF (ns), tXP, tCKE, tWTR (clks) */ 27/* In picoseconds, except for tREF (ns), tXP, tCKE, tWTR (clks) */
27struct sdram_timings { 28struct sdram_timings {
@@ -43,9 +44,28 @@ struct sdram_timings {
43 u32 tWTR; 44 u32 tWTR;
44}; 45};
45 46
46struct omap_sdrc_params rx51_sdrc_params[4]; 47static const struct sdram_timings nokia_97dot6mhz_timings[] = {
48 {
49 .casl = 3,
50 .tDAL = 30725,
51 .tDPL = 15362,
52 .tRRD = 10241,
53 .tRCD = 20483,
54 .tRP = 15362,
55 .tRAS = 40967,
56 .tRC = 56330,
57 .tRFC = 138266,
58 .tXSR = 204839,
59
60 .tREF = 7798,
61
62 .tXP = 2,
63 .tCKE = 4,
64 .tWTR = 2,
65 },
66};
47 67
48static const struct sdram_timings rx51_timings[] = { 68static const struct sdram_timings nokia_166mhz_timings[] = {
49 { 69 {
50 .casl = 3, 70 .casl = 3,
51 .tDAL = 33000, 71 .tDAL = 33000,
@@ -66,6 +86,38 @@ static const struct sdram_timings rx51_timings[] = {
66 }, 86 },
67}; 87};
68 88
89static const struct sdram_timings nokia_195dot2mhz_timings[] = {
90 {
91 .casl = 3,
92 .tDAL = 30725,
93 .tDPL = 15362,
94 .tRRD = 10241,
95 .tRCD = 20483,
96 .tRP = 15362,
97 .tRAS = 40967,
98 .tRC = 56330,
99 .tRFC = 138266,
100 .tXSR = 204839,
101
102 .tREF = 7752,
103
104 .tXP = 2,
105 .tCKE = 4,
106 .tWTR = 2,
107 },
108};
109
110static const struct {
111 long rate;
112 struct sdram_timings const *data;
113} nokia_timings[] = {
114 { 83000000, nokia_166mhz_timings },
115 { 97600000, nokia_97dot6mhz_timings },
116 { 166000000, nokia_166mhz_timings },
117 { 195200000, nokia_195dot2mhz_timings },
118};
119static struct omap_sdrc_params nokia_sdrc_params[ARRAY_SIZE(nokia_timings) + 1];
120
69static unsigned long sdrc_get_fclk_period(long rate) 121static unsigned long sdrc_get_fclk_period(long rate)
70{ 122{
71 /* In picoseconds */ 123 /* In picoseconds */
@@ -110,12 +162,12 @@ static int set_sdrc_timing_regval(u32 *regval, int st_bit, int end_bit,
110#ifdef DEBUG 162#ifdef DEBUG
111#define SDRC_SET_ONE(reg, st, end, field, rate) \ 163#define SDRC_SET_ONE(reg, st, end, field, rate) \
112 if (set_sdrc_timing_regval((reg), (st), (end), \ 164 if (set_sdrc_timing_regval((reg), (st), (end), \
113 rx51_timings->field, (rate), #field) < 0) \ 165 memory_timings->field, (rate), #field) < 0) \
114 err = -1; 166 err = -1;
115#else 167#else
116#define SDRC_SET_ONE(reg, st, end, field, rate) \ 168#define SDRC_SET_ONE(reg, st, end, field, rate) \
117 if (set_sdrc_timing_regval((reg), (st), (end), \ 169 if (set_sdrc_timing_regval((reg), (st), (end), \
118 rx51_timings->field) < 0) \ 170 memory_timings->field) < 0) \
119 err = -1; 171 err = -1;
120#endif 172#endif
121 173
@@ -148,18 +200,19 @@ static int set_sdrc_timing_regval_ps(u32 *regval, int st_bit, int end_bit,
148#ifdef DEBUG 200#ifdef DEBUG
149#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \ 201#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
150 if (set_sdrc_timing_regval_ps((reg), (st), (end), \ 202 if (set_sdrc_timing_regval_ps((reg), (st), (end), \
151 rx51_timings->field, \ 203 memory_timings->field, \
152 (rate), #field) < 0) \ 204 (rate), #field) < 0) \
153 err = -1; 205 err = -1;
154 206
155#else 207#else
156#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \ 208#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
157 if (set_sdrc_timing_regval_ps((reg), (st), (end), \ 209 if (set_sdrc_timing_regval_ps((reg), (st), (end), \
158 rx51_timings->field, (rate)) < 0) \ 210 memory_timings->field, (rate)) < 0) \
159 err = -1; 211 err = -1;
160#endif 212#endif
161 213
162static int sdrc_timings(int id, long rate) 214static int sdrc_timings(int id, long rate,
215 const struct sdram_timings *memory_timings)
163{ 216{
164 u32 ticks_per_ms; 217 u32 ticks_per_ms;
165 u32 rfr, l; 218 u32 rfr, l;
@@ -184,7 +237,7 @@ static int sdrc_timings(int id, long rate)
184 SDRC_SET_ONE(&actim_ctrlb, 16, 17, tWTR, l3_rate); 237 SDRC_SET_ONE(&actim_ctrlb, 16, 17, tWTR, l3_rate);
185 238
186 ticks_per_ms = l3_rate; 239 ticks_per_ms = l3_rate;
187 rfr = rx51_timings[0].tREF * ticks_per_ms / 1000000; 240 rfr = memory_timings[0].tREF * ticks_per_ms / 1000000;
188 if (rfr > 65535 + 50) 241 if (rfr > 65535 + 50)
189 rfr = 65535; 242 rfr = 65535;
190 else 243 else
@@ -197,25 +250,30 @@ static int sdrc_timings(int id, long rate)
197 l = rfr << 8; 250 l = rfr << 8;
198 rfr_ctrl = l | 0x1; /* autorefresh, reload counter with 1xARCV */ 251 rfr_ctrl = l | 0x1; /* autorefresh, reload counter with 1xARCV */
199 252
200 rx51_sdrc_params[id].rate = rate; 253 nokia_sdrc_params[id].rate = rate;
201 rx51_sdrc_params[id].actim_ctrla = actim_ctrla; 254 nokia_sdrc_params[id].actim_ctrla = actim_ctrla;
202 rx51_sdrc_params[id].actim_ctrlb = actim_ctrlb; 255 nokia_sdrc_params[id].actim_ctrlb = actim_ctrlb;
203 rx51_sdrc_params[id].rfr_ctrl = rfr_ctrl; 256 nokia_sdrc_params[id].rfr_ctrl = rfr_ctrl;
204 rx51_sdrc_params[id].mr = 0x32; 257 nokia_sdrc_params[id].mr = 0x32;
205 258
206 rx51_sdrc_params[id + 1].rate = 0; 259 nokia_sdrc_params[id + 1].rate = 0;
207 260
208 return err; 261 return err;
209} 262}
210 263
211struct omap_sdrc_params *rx51_get_sdram_timings(void) 264struct omap_sdrc_params *nokia_get_sdram_timings(void)
212{ 265{
213 int err; 266 int err = 0;
267 int i;
214 268
215 err = sdrc_timings(0, 41500000); 269 for (i = 0; i < ARRAY_SIZE(nokia_timings); i++) {
216 err |= sdrc_timings(1, 83000000); 270 err |= sdrc_timings(i, nokia_timings[i].rate,
217 err |= sdrc_timings(2, 166000000); 271 nokia_timings[i].data);
272 if (err)
273 pr_err("%s: error with rate %ld: %d\n", __func__,
274 nokia_timings[i].rate, err);
275 }
218 276
219 return &rx51_sdrc_params[0]; 277 return err ? NULL : nokia_sdrc_params;
220} 278}
221 279
diff --git a/arch/arm/mach-omap2/sdram-nokia.h b/arch/arm/mach-omap2/sdram-nokia.h
new file mode 100644
index 000000000000..ee63da5f8df0
--- /dev/null
+++ b/arch/arm/mach-omap2/sdram-nokia.h
@@ -0,0 +1,12 @@
1/*
2 * SDRC register values for Nokia boards
3 *
4 * Copyright (C) 2010 Nokia
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11struct omap_sdrc_params *nokia_get_sdram_timings(void);
12
diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c
index 4c65f5628b39..da6f3a63b5d5 100644
--- a/arch/arm/mach-omap2/sdrc.c
+++ b/arch/arm/mach-omap2/sdrc.c
@@ -27,8 +27,6 @@
27#include <plat/clock.h> 27#include <plat/clock.h>
28#include <plat/sram.h> 28#include <plat/sram.h>
29 29
30#include "prm.h"
31
32#include <plat/sdrc.h> 30#include <plat/sdrc.h>
33#include "sdrc.h" 31#include "sdrc.h"
34 32
diff --git a/arch/arm/mach-omap2/sdrc.h b/arch/arm/mach-omap2/sdrc.h
index 68f57bb67fc5..b3f83799e6cf 100644
--- a/arch/arm/mach-omap2/sdrc.h
+++ b/arch/arm/mach-omap2/sdrc.h
@@ -74,5 +74,4 @@ static inline u32 sms_read_reg(u16 reg)
74 */ 74 */
75#define SDRC_MPURATE_LOOPS 96 75#define SDRC_MPURATE_LOOPS 96
76 76
77
78#endif 77#endif
diff --git a/arch/arm/mach-omap2/sdrc2xxx.c b/arch/arm/mach-omap2/sdrc2xxx.c
index 0f4d27aef44d..ccdb010f169d 100644
--- a/arch/arm/mach-omap2/sdrc2xxx.c
+++ b/arch/arm/mach-omap2/sdrc2xxx.c
@@ -28,7 +28,7 @@
28#include <plat/clock.h> 28#include <plat/clock.h>
29#include <plat/sram.h> 29#include <plat/sram.h>
30 30
31#include "prm.h" 31#include "prm2xxx_3xxx.h"
32#include "clock.h" 32#include "clock.h"
33#include <plat/sdrc.h> 33#include <plat/sdrc.h>
34#include "sdrc.h" 34#include "sdrc.h"
@@ -99,6 +99,10 @@ u32 omap2xxx_sdrc_reprogram(u32 level, u32 force)
99 m_type = omap2xxx_sdrc_get_type(); 99 m_type = omap2xxx_sdrc_get_type();
100 100
101 local_irq_save(flags); 101 local_irq_save(flags);
102 /*
103 * XXX These calls should be abstracted out through a
104 * prm2xxx.c function
105 */
102 if (cpu_is_omap2420()) 106 if (cpu_is_omap2420())
103 __raw_writel(0xffff, OMAP2420_PRCM_VOLTSETUP); 107 __raw_writel(0xffff, OMAP2420_PRCM_VOLTSETUP);
104 else 108 else
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index 566e991ede81..1ac361b7b8cb 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -19,20 +19,33 @@
19 */ 19 */
20#include <linux/kernel.h> 20#include <linux/kernel.h>
21#include <linux/init.h> 21#include <linux/init.h>
22#include <linux/serial_8250.h>
23#include <linux/serial_reg.h> 22#include <linux/serial_reg.h>
24#include <linux/clk.h> 23#include <linux/clk.h>
25#include <linux/io.h> 24#include <linux/io.h>
26#include <linux/delay.h> 25#include <linux/delay.h>
26#include <linux/platform_device.h>
27#include <linux/slab.h>
28#include <linux/serial_8250.h>
29#include <linux/pm_runtime.h>
30#include <linux/console.h>
31
32#ifdef CONFIG_SERIAL_OMAP
33#include <plat/omap-serial.h>
34#endif
27 35
28#include <plat/common.h> 36#include <plat/common.h>
29#include <plat/board.h> 37#include <plat/board.h>
30#include <plat/clock.h> 38#include <plat/clock.h>
31#include <plat/control.h> 39#include <plat/dma.h>
40#include <plat/omap_hwmod.h>
41#include <plat/omap_device.h>
32 42
33#include "prm.h" 43#include "prm2xxx_3xxx.h"
34#include "pm.h" 44#include "pm.h"
45#include "cm2xxx_3xxx.h"
35#include "prm-regbits-34xx.h" 46#include "prm-regbits-34xx.h"
47#include "control.h"
48#include "mux.h"
36 49
37#define UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV 0x52 50#define UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV 0x52
38#define UART_OMAP_WER 0x17 /* Wake-up enable register */ 51#define UART_OMAP_WER 0x17 /* Wake-up enable register */
@@ -48,6 +61,8 @@
48 */ 61 */
49#define DEFAULT_TIMEOUT 0 62#define DEFAULT_TIMEOUT 0
50 63
64#define MAX_UART_HWMOD_NAME_LEN 16
65
51struct omap_uart_state { 66struct omap_uart_state {
52 int num; 67 int num;
53 int can_sleep; 68 int can_sleep;
@@ -58,14 +73,21 @@ struct omap_uart_state {
58 void __iomem *wk_en; 73 void __iomem *wk_en;
59 u32 wk_mask; 74 u32 wk_mask;
60 u32 padconf; 75 u32 padconf;
76 u32 dma_enabled;
61 77
62 struct clk *ick; 78 struct clk *ick;
63 struct clk *fck; 79 struct clk *fck;
64 int clocked; 80 int clocked;
65 81
66 struct plat_serial8250_port *p; 82 int irq;
83 int regshift;
84 int irqflags;
85 void __iomem *membase;
86 resource_size_t mapbase;
87
67 struct list_head node; 88 struct list_head node;
68 struct platform_device pdev; 89 struct omap_hwmod *oh;
90 struct platform_device *pdev;
69 91
70 u32 errata; 92 u32 errata;
71#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) 93#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
@@ -83,75 +105,42 @@ struct omap_uart_state {
83}; 105};
84 106
85static LIST_HEAD(uart_list); 107static LIST_HEAD(uart_list);
108static u8 num_uarts;
86 109
87static struct plat_serial8250_port serial_platform_data0[] = { 110static int uart_idle_hwmod(struct omap_device *od)
88 { 111{
89 .irq = 72, 112 omap_hwmod_idle(od->hwmods[0]);
90 .flags = UPF_BOOT_AUTOCONF,
91 .iotype = UPIO_MEM,
92 .regshift = 2,
93 .uartclk = OMAP24XX_BASE_BAUD * 16,
94 }, {
95 .flags = 0
96 }
97};
98 113
99static struct plat_serial8250_port serial_platform_data1[] = { 114 return 0;
100 { 115}
101 .irq = 73,
102 .flags = UPF_BOOT_AUTOCONF,
103 .iotype = UPIO_MEM,
104 .regshift = 2,
105 .uartclk = OMAP24XX_BASE_BAUD * 16,
106 }, {
107 .flags = 0
108 }
109};
110 116
111static struct plat_serial8250_port serial_platform_data2[] = { 117static int uart_enable_hwmod(struct omap_device *od)
112 { 118{
113 .irq = 74, 119 omap_hwmod_enable(od->hwmods[0]);
114 .flags = UPF_BOOT_AUTOCONF,
115 .iotype = UPIO_MEM,
116 .regshift = 2,
117 .uartclk = OMAP24XX_BASE_BAUD * 16,
118 }, {
119 .flags = 0
120 }
121};
122 120
123static struct plat_serial8250_port serial_platform_data3[] = { 121 return 0;
122}
123
124static struct omap_device_pm_latency omap_uart_latency[] = {
124 { 125 {
125 .irq = 70, 126 .deactivate_func = uart_idle_hwmod,
126 .flags = UPF_BOOT_AUTOCONF, 127 .activate_func = uart_enable_hwmod,
127 .iotype = UPIO_MEM, 128 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
128 .regshift = 2, 129 },
129 .uartclk = OMAP24XX_BASE_BAUD * 16,
130 }, {
131 .flags = 0
132 }
133}; 130};
134 131
135void __init omap2_set_globals_uart(struct omap_globals *omap2_globals)
136{
137 serial_platform_data0[0].mapbase = omap2_globals->uart1_phys;
138 serial_platform_data1[0].mapbase = omap2_globals->uart2_phys;
139 serial_platform_data2[0].mapbase = omap2_globals->uart3_phys;
140 serial_platform_data3[0].mapbase = omap2_globals->uart4_phys;
141}
142
143static inline unsigned int __serial_read_reg(struct uart_port *up, 132static inline unsigned int __serial_read_reg(struct uart_port *up,
144 int offset) 133 int offset)
145{ 134{
146 offset <<= up->regshift; 135 offset <<= up->regshift;
147 return (unsigned int)__raw_readb(up->membase + offset); 136 return (unsigned int)__raw_readb(up->membase + offset);
148} 137}
149 138
150static inline unsigned int serial_read_reg(struct plat_serial8250_port *up, 139static inline unsigned int serial_read_reg(struct omap_uart_state *uart,
151 int offset) 140 int offset)
152{ 141{
153 offset <<= up->regshift; 142 offset <<= uart->regshift;
154 return (unsigned int)__raw_readb(up->membase + offset); 143 return (unsigned int)__raw_readb(uart->membase + offset);
155} 144}
156 145
157static inline void __serial_write_reg(struct uart_port *up, int offset, 146static inline void __serial_write_reg(struct uart_port *up, int offset,
@@ -161,11 +150,11 @@ static inline void __serial_write_reg(struct uart_port *up, int offset,
161 __raw_writeb(value, up->membase + offset); 150 __raw_writeb(value, up->membase + offset);
162} 151}
163 152
164static inline void serial_write_reg(struct plat_serial8250_port *p, int offset, 153static inline void serial_write_reg(struct omap_uart_state *uart, int offset,
165 int value) 154 int value)
166{ 155{
167 offset <<= p->regshift; 156 offset <<= uart->regshift;
168 __raw_writeb(value, p->membase + offset); 157 __raw_writeb(value, uart->membase + offset);
169} 158}
170 159
171/* 160/*
@@ -173,14 +162,12 @@ static inline void serial_write_reg(struct plat_serial8250_port *p, int offset,
173 * properly. Note that the TX watermark initialization may not be needed 162 * properly. Note that the TX watermark initialization may not be needed
174 * once the 8250.c watermark handling code is merged. 163 * once the 8250.c watermark handling code is merged.
175 */ 164 */
165
176static inline void __init omap_uart_reset(struct omap_uart_state *uart) 166static inline void __init omap_uart_reset(struct omap_uart_state *uart)
177{ 167{
178 struct plat_serial8250_port *p = uart->p; 168 serial_write_reg(uart, UART_OMAP_MDR1, UART_OMAP_MDR1_DISABLE);
179 169 serial_write_reg(uart, UART_OMAP_SCR, 0x08);
180 serial_write_reg(p, UART_OMAP_MDR1, 0x07); 170 serial_write_reg(uart, UART_OMAP_MDR1, UART_OMAP_MDR1_16X_MODE);
181 serial_write_reg(p, UART_OMAP_SCR, 0x08);
182 serial_write_reg(p, UART_OMAP_MDR1, 0x00);
183 serial_write_reg(p, UART_OMAP_SYSC, (0x02 << 3) | (1 << 2) | (1 << 0));
184} 171}
185 172
186#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3) 173#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3)
@@ -197,24 +184,23 @@ static inline void __init omap_uart_reset(struct omap_uart_state *uart)
197static void omap_uart_mdr1_errataset(struct omap_uart_state *uart, u8 mdr1_val, 184static void omap_uart_mdr1_errataset(struct omap_uart_state *uart, u8 mdr1_val,
198 u8 fcr_val) 185 u8 fcr_val)
199{ 186{
200 struct plat_serial8250_port *p = uart->p;
201 u8 timeout = 255; 187 u8 timeout = 255;
202 188
203 serial_write_reg(p, UART_OMAP_MDR1, mdr1_val); 189 serial_write_reg(uart, UART_OMAP_MDR1, mdr1_val);
204 udelay(2); 190 udelay(2);
205 serial_write_reg(p, UART_FCR, fcr_val | UART_FCR_CLEAR_XMIT | 191 serial_write_reg(uart, UART_FCR, fcr_val | UART_FCR_CLEAR_XMIT |
206 UART_FCR_CLEAR_RCVR); 192 UART_FCR_CLEAR_RCVR);
207 /* 193 /*
208 * Wait for FIFO to empty: when empty, RX_FIFO_E bit is 0 and 194 * Wait for FIFO to empty: when empty, RX_FIFO_E bit is 0 and
209 * TX_FIFO_E bit is 1. 195 * TX_FIFO_E bit is 1.
210 */ 196 */
211 while (UART_LSR_THRE != (serial_read_reg(p, UART_LSR) & 197 while (UART_LSR_THRE != (serial_read_reg(uart, UART_LSR) &
212 (UART_LSR_THRE | UART_LSR_DR))) { 198 (UART_LSR_THRE | UART_LSR_DR))) {
213 timeout--; 199 timeout--;
214 if (!timeout) { 200 if (!timeout) {
215 /* Should *never* happen. we warn and carry on */ 201 /* Should *never* happen. we warn and carry on */
216 dev_crit(&uart->pdev.dev, "Errata i202: timedout %x\n", 202 dev_crit(&uart->pdev->dev, "Errata i202: timedout %x\n",
217 serial_read_reg(p, UART_LSR)); 203 serial_read_reg(uart, UART_LSR));
218 break; 204 break;
219 } 205 }
220 udelay(1); 206 udelay(1);
@@ -224,23 +210,22 @@ static void omap_uart_mdr1_errataset(struct omap_uart_state *uart, u8 mdr1_val,
224static void omap_uart_save_context(struct omap_uart_state *uart) 210static void omap_uart_save_context(struct omap_uart_state *uart)
225{ 211{
226 u16 lcr = 0; 212 u16 lcr = 0;
227 struct plat_serial8250_port *p = uart->p;
228 213
229 if (!enable_off_mode) 214 if (!enable_off_mode)
230 return; 215 return;
231 216
232 lcr = serial_read_reg(p, UART_LCR); 217 lcr = serial_read_reg(uart, UART_LCR);
233 serial_write_reg(p, UART_LCR, 0xBF); 218 serial_write_reg(uart, UART_LCR, UART_LCR_CONF_MODE_B);
234 uart->dll = serial_read_reg(p, UART_DLL); 219 uart->dll = serial_read_reg(uart, UART_DLL);
235 uart->dlh = serial_read_reg(p, UART_DLM); 220 uart->dlh = serial_read_reg(uart, UART_DLM);
236 serial_write_reg(p, UART_LCR, lcr); 221 serial_write_reg(uart, UART_LCR, lcr);
237 uart->ier = serial_read_reg(p, UART_IER); 222 uart->ier = serial_read_reg(uart, UART_IER);
238 uart->sysc = serial_read_reg(p, UART_OMAP_SYSC); 223 uart->sysc = serial_read_reg(uart, UART_OMAP_SYSC);
239 uart->scr = serial_read_reg(p, UART_OMAP_SCR); 224 uart->scr = serial_read_reg(uart, UART_OMAP_SCR);
240 uart->wer = serial_read_reg(p, UART_OMAP_WER); 225 uart->wer = serial_read_reg(uart, UART_OMAP_WER);
241 serial_write_reg(p, UART_LCR, 0x80); 226 serial_write_reg(uart, UART_LCR, UART_LCR_CONF_MODE_A);
242 uart->mcr = serial_read_reg(p, UART_MCR); 227 uart->mcr = serial_read_reg(uart, UART_MCR);
243 serial_write_reg(p, UART_LCR, lcr); 228 serial_write_reg(uart, UART_LCR, lcr);
244 229
245 uart->context_valid = 1; 230 uart->context_valid = 1;
246} 231}
@@ -248,7 +233,6 @@ static void omap_uart_save_context(struct omap_uart_state *uart)
248static void omap_uart_restore_context(struct omap_uart_state *uart) 233static void omap_uart_restore_context(struct omap_uart_state *uart)
249{ 234{
250 u16 efr = 0; 235 u16 efr = 0;
251 struct plat_serial8250_port *p = uart->p;
252 236
253 if (!enable_off_mode) 237 if (!enable_off_mode)
254 return; 238 return;
@@ -259,31 +243,35 @@ static void omap_uart_restore_context(struct omap_uart_state *uart)
259 uart->context_valid = 0; 243 uart->context_valid = 0;
260 244
261 if (uart->errata & UART_ERRATA_i202_MDR1_ACCESS) 245 if (uart->errata & UART_ERRATA_i202_MDR1_ACCESS)
262 omap_uart_mdr1_errataset(uart, 0x07, 0xA0); 246 omap_uart_mdr1_errataset(uart, UART_OMAP_MDR1_DISABLE, 0xA0);
263 else 247 else
264 serial_write_reg(p, UART_OMAP_MDR1, 0x7); 248 serial_write_reg(uart, UART_OMAP_MDR1, UART_OMAP_MDR1_DISABLE);
265 serial_write_reg(p, UART_LCR, 0xBF); /* Config B mode */ 249
266 efr = serial_read_reg(p, UART_EFR); 250 serial_write_reg(uart, UART_LCR, UART_LCR_CONF_MODE_B);
267 serial_write_reg(p, UART_EFR, UART_EFR_ECB); 251 efr = serial_read_reg(uart, UART_EFR);
268 serial_write_reg(p, UART_LCR, 0x0); /* Operational mode */ 252 serial_write_reg(uart, UART_EFR, UART_EFR_ECB);
269 serial_write_reg(p, UART_IER, 0x0); 253 serial_write_reg(uart, UART_LCR, 0x0); /* Operational mode */
270 serial_write_reg(p, UART_LCR, 0xBF); /* Config B mode */ 254 serial_write_reg(uart, UART_IER, 0x0);
271 serial_write_reg(p, UART_DLL, uart->dll); 255 serial_write_reg(uart, UART_LCR, UART_LCR_CONF_MODE_B);
272 serial_write_reg(p, UART_DLM, uart->dlh); 256 serial_write_reg(uart, UART_DLL, uart->dll);
273 serial_write_reg(p, UART_LCR, 0x0); /* Operational mode */ 257 serial_write_reg(uart, UART_DLM, uart->dlh);
274 serial_write_reg(p, UART_IER, uart->ier); 258 serial_write_reg(uart, UART_LCR, 0x0); /* Operational mode */
275 serial_write_reg(p, UART_LCR, 0x80); 259 serial_write_reg(uart, UART_IER, uart->ier);
276 serial_write_reg(p, UART_MCR, uart->mcr); 260 serial_write_reg(uart, UART_LCR, UART_LCR_CONF_MODE_A);
277 serial_write_reg(p, UART_LCR, 0xBF); /* Config B mode */ 261 serial_write_reg(uart, UART_MCR, uart->mcr);
278 serial_write_reg(p, UART_EFR, efr); 262 serial_write_reg(uart, UART_LCR, UART_LCR_CONF_MODE_B);
279 serial_write_reg(p, UART_LCR, UART_LCR_WLEN8); 263 serial_write_reg(uart, UART_EFR, efr);
280 serial_write_reg(p, UART_OMAP_SCR, uart->scr); 264 serial_write_reg(uart, UART_LCR, UART_LCR_WLEN8);
281 serial_write_reg(p, UART_OMAP_WER, uart->wer); 265 serial_write_reg(uart, UART_OMAP_SCR, uart->scr);
282 serial_write_reg(p, UART_OMAP_SYSC, uart->sysc); 266 serial_write_reg(uart, UART_OMAP_WER, uart->wer);
267 serial_write_reg(uart, UART_OMAP_SYSC, uart->sysc);
268
283 if (uart->errata & UART_ERRATA_i202_MDR1_ACCESS) 269 if (uart->errata & UART_ERRATA_i202_MDR1_ACCESS)
284 omap_uart_mdr1_errataset(uart, 0x00, 0xA1); 270 omap_uart_mdr1_errataset(uart, UART_OMAP_MDR1_16X_MODE, 0xA1);
285 else 271 else
286 serial_write_reg(p, UART_OMAP_MDR1, 0x00); /* UART 16x mode */ 272 /* UART 16x mode */
273 serial_write_reg(uart, UART_OMAP_MDR1,
274 UART_OMAP_MDR1_16X_MODE);
287} 275}
288#else 276#else
289static inline void omap_uart_save_context(struct omap_uart_state *uart) {} 277static inline void omap_uart_save_context(struct omap_uart_state *uart) {}
@@ -295,8 +283,7 @@ static inline void omap_uart_enable_clocks(struct omap_uart_state *uart)
295 if (uart->clocked) 283 if (uart->clocked)
296 return; 284 return;
297 285
298 clk_enable(uart->ick); 286 omap_device_enable(uart->pdev);
299 clk_enable(uart->fck);
300 uart->clocked = 1; 287 uart->clocked = 1;
301 omap_uart_restore_context(uart); 288 omap_uart_restore_context(uart);
302} 289}
@@ -310,8 +297,7 @@ static inline void omap_uart_disable_clocks(struct omap_uart_state *uart)
310 297
311 omap_uart_save_context(uart); 298 omap_uart_save_context(uart);
312 uart->clocked = 0; 299 uart->clocked = 0;
313 clk_disable(uart->ick); 300 omap_device_idle(uart->pdev);
314 clk_disable(uart->fck);
315} 301}
316 302
317static void omap_uart_enable_wakeup(struct omap_uart_state *uart) 303static void omap_uart_enable_wakeup(struct omap_uart_state *uart)
@@ -349,18 +335,24 @@ static void omap_uart_disable_wakeup(struct omap_uart_state *uart)
349} 335}
350 336
351static void omap_uart_smart_idle_enable(struct omap_uart_state *uart, 337static void omap_uart_smart_idle_enable(struct omap_uart_state *uart,
352 int enable) 338 int enable)
353{ 339{
354 struct plat_serial8250_port *p = uart->p; 340 u8 idlemode;
355 u16 sysc;
356 341
357 sysc = serial_read_reg(p, UART_OMAP_SYSC) & 0x7; 342 if (enable) {
358 if (enable) 343 /**
359 sysc |= 0x2 << 3; 344 * Errata 2.15: [UART]:Cannot Acknowledge Idle Requests
360 else 345 * in Smartidle Mode When Configured for DMA Operations.
361 sysc |= 0x1 << 3; 346 */
347 if (uart->dma_enabled)
348 idlemode = HWMOD_IDLEMODE_FORCE;
349 else
350 idlemode = HWMOD_IDLEMODE_SMART;
351 } else {
352 idlemode = HWMOD_IDLEMODE_NO;
353 }
362 354
363 serial_write_reg(p, UART_OMAP_SYSC, sysc); 355 omap_hwmod_set_slave_idlemode(uart->oh, idlemode);
364} 356}
365 357
366static void omap_uart_block_sleep(struct omap_uart_state *uart) 358static void omap_uart_block_sleep(struct omap_uart_state *uart)
@@ -377,7 +369,7 @@ static void omap_uart_block_sleep(struct omap_uart_state *uart)
377 369
378static void omap_uart_allow_sleep(struct omap_uart_state *uart) 370static void omap_uart_allow_sleep(struct omap_uart_state *uart)
379{ 371{
380 if (device_may_wakeup(&uart->pdev.dev)) 372 if (device_may_wakeup(&uart->pdev->dev))
381 omap_uart_enable_wakeup(uart); 373 omap_uart_enable_wakeup(uart);
382 else 374 else
383 omap_uart_disable_wakeup(uart); 375 omap_uart_disable_wakeup(uart);
@@ -414,7 +406,7 @@ void omap_uart_resume_idle(int num)
414 struct omap_uart_state *uart; 406 struct omap_uart_state *uart;
415 407
416 list_for_each_entry(uart, &uart_list, node) { 408 list_for_each_entry(uart, &uart_list, node) {
417 if (num == uart->num) { 409 if (num == uart->num && uart->can_sleep) {
418 omap_uart_enable_clocks(uart); 410 omap_uart_enable_clocks(uart);
419 411
420 /* Check for IO pad wakeup */ 412 /* Check for IO pad wakeup */
@@ -472,6 +464,7 @@ int omap_uart_can_sleep(void)
472 * UART will not idle or sleep for its timeout period. 464 * UART will not idle or sleep for its timeout period.
473 * 465 *
474 **/ 466 **/
467/* static int first_interrupt; */
475static irqreturn_t omap_uart_interrupt(int irq, void *dev_id) 468static irqreturn_t omap_uart_interrupt(int irq, void *dev_id)
476{ 469{
477 struct omap_uart_state *uart = dev_id; 470 struct omap_uart_state *uart = dev_id;
@@ -483,7 +476,6 @@ static irqreturn_t omap_uart_interrupt(int irq, void *dev_id)
483 476
484static void omap_uart_idle_init(struct omap_uart_state *uart) 477static void omap_uart_idle_init(struct omap_uart_state *uart)
485{ 478{
486 struct plat_serial8250_port *p = uart->p;
487 int ret; 479 int ret;
488 480
489 uart->can_sleep = 0; 481 uart->can_sleep = 0;
@@ -494,11 +486,12 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
494 mod_timer(&uart->timer, jiffies + uart->timeout); 486 mod_timer(&uart->timer, jiffies + uart->timeout);
495 omap_uart_smart_idle_enable(uart, 0); 487 omap_uart_smart_idle_enable(uart, 0);
496 488
497 if (cpu_is_omap34xx()) { 489 if (cpu_is_omap34xx() && !cpu_is_ti816x()) {
498 u32 mod = (uart->num == 2) ? OMAP3430_PER_MOD : CORE_MOD; 490 u32 mod = (uart->num > 1) ? OMAP3430_PER_MOD : CORE_MOD;
499 u32 wk_mask = 0; 491 u32 wk_mask = 0;
500 u32 padconf = 0; 492 u32 padconf = 0;
501 493
494 /* XXX These PRM accesses do not belong here */
502 uart->wk_en = OMAP34XX_PRM_REGADDR(mod, PM_WKEN1); 495 uart->wk_en = OMAP34XX_PRM_REGADDR(mod, PM_WKEN1);
503 uart->wk_st = OMAP34XX_PRM_REGADDR(mod, PM_WKST1); 496 uart->wk_st = OMAP34XX_PRM_REGADDR(mod, PM_WKST1);
504 switch (uart->num) { 497 switch (uart->num) {
@@ -514,19 +507,17 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
514 wk_mask = OMAP3430_ST_UART3_MASK; 507 wk_mask = OMAP3430_ST_UART3_MASK;
515 padconf = 0x19e; 508 padconf = 0x19e;
516 break; 509 break;
510 case 3:
511 wk_mask = OMAP3630_ST_UART4_MASK;
512 padconf = 0x0d2;
513 break;
517 } 514 }
518 uart->wk_mask = wk_mask; 515 uart->wk_mask = wk_mask;
519 uart->padconf = padconf; 516 uart->padconf = padconf;
520 } else if (cpu_is_omap24xx()) { 517 } else if (cpu_is_omap24xx()) {
521 u32 wk_mask = 0; 518 u32 wk_mask = 0;
519 u32 wk_en = PM_WKEN1, wk_st = PM_WKST1;
522 520
523 if (cpu_is_omap2430()) {
524 uart->wk_en = OMAP2430_PRM_REGADDR(CORE_MOD, PM_WKEN1);
525 uart->wk_st = OMAP2430_PRM_REGADDR(CORE_MOD, PM_WKST1);
526 } else if (cpu_is_omap2420()) {
527 uart->wk_en = OMAP2420_PRM_REGADDR(CORE_MOD, PM_WKEN1);
528 uart->wk_st = OMAP2420_PRM_REGADDR(CORE_MOD, PM_WKST1);
529 }
530 switch (uart->num) { 521 switch (uart->num) {
531 case 0: 522 case 0:
532 wk_mask = OMAP24XX_ST_UART1_MASK; 523 wk_mask = OMAP24XX_ST_UART1_MASK;
@@ -535,10 +526,19 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
535 wk_mask = OMAP24XX_ST_UART2_MASK; 526 wk_mask = OMAP24XX_ST_UART2_MASK;
536 break; 527 break;
537 case 2: 528 case 2:
529 wk_en = OMAP24XX_PM_WKEN2;
530 wk_st = OMAP24XX_PM_WKST2;
538 wk_mask = OMAP24XX_ST_UART3_MASK; 531 wk_mask = OMAP24XX_ST_UART3_MASK;
539 break; 532 break;
540 } 533 }
541 uart->wk_mask = wk_mask; 534 uart->wk_mask = wk_mask;
535 if (cpu_is_omap2430()) {
536 uart->wk_en = OMAP2430_PRM_REGADDR(CORE_MOD, wk_en);
537 uart->wk_st = OMAP2430_PRM_REGADDR(CORE_MOD, wk_st);
538 } else if (cpu_is_omap2420()) {
539 uart->wk_en = OMAP2420_PRM_REGADDR(CORE_MOD, wk_en);
540 uart->wk_st = OMAP2420_PRM_REGADDR(CORE_MOD, wk_st);
541 }
542 } else { 542 } else {
543 uart->wk_en = NULL; 543 uart->wk_en = NULL;
544 uart->wk_st = NULL; 544 uart->wk_st = NULL;
@@ -546,9 +546,9 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
546 uart->padconf = 0; 546 uart->padconf = 0;
547 } 547 }
548 548
549 p->irqflags |= IRQF_SHARED; 549 uart->irqflags |= IRQF_SHARED;
550 ret = request_irq(p->irq, omap_uart_interrupt, IRQF_SHARED, 550 ret = request_threaded_irq(uart->irq, NULL, omap_uart_interrupt,
551 "serial idle", (void *)uart); 551 IRQF_SHARED, "serial idle", (void *)uart);
552 WARN_ON(ret); 552 WARN_ON(ret);
553} 553}
554 554
@@ -558,11 +558,17 @@ void omap_uart_enable_irqs(int enable)
558 struct omap_uart_state *uart; 558 struct omap_uart_state *uart;
559 559
560 list_for_each_entry(uart, &uart_list, node) { 560 list_for_each_entry(uart, &uart_list, node) {
561 if (enable) 561 if (enable) {
562 ret = request_irq(uart->p->irq, omap_uart_interrupt, 562 pm_runtime_put_sync(&uart->pdev->dev);
563 IRQF_SHARED, "serial idle", (void *)uart); 563 ret = request_threaded_irq(uart->irq, NULL,
564 else 564 omap_uart_interrupt,
565 free_irq(uart->p->irq, (void *)uart); 565 IRQF_SHARED,
566 "serial idle",
567 (void *)uart);
568 } else {
569 pm_runtime_get_noresume(&uart->pdev->dev);
570 free_irq(uart->irq, (void *)uart);
571 }
566 } 572 }
567} 573}
568 574
@@ -570,10 +576,9 @@ static ssize_t sleep_timeout_show(struct device *dev,
570 struct device_attribute *attr, 576 struct device_attribute *attr,
571 char *buf) 577 char *buf)
572{ 578{
573 struct platform_device *pdev = container_of(dev, 579 struct platform_device *pdev = to_platform_device(dev);
574 struct platform_device, dev); 580 struct omap_device *odev = to_omap_device(pdev);
575 struct omap_uart_state *uart = container_of(pdev, 581 struct omap_uart_state *uart = odev->hwmods[0]->dev_attr;
576 struct omap_uart_state, pdev);
577 582
578 return sprintf(buf, "%u\n", uart->timeout / HZ); 583 return sprintf(buf, "%u\n", uart->timeout / HZ);
579} 584}
@@ -582,10 +587,9 @@ static ssize_t sleep_timeout_store(struct device *dev,
582 struct device_attribute *attr, 587 struct device_attribute *attr,
583 const char *buf, size_t n) 588 const char *buf, size_t n)
584{ 589{
585 struct platform_device *pdev = container_of(dev, 590 struct platform_device *pdev = to_platform_device(dev);
586 struct platform_device, dev); 591 struct omap_device *odev = to_omap_device(pdev);
587 struct omap_uart_state *uart = container_of(pdev, 592 struct omap_uart_state *uart = odev->hwmods[0]->dev_attr;
588 struct omap_uart_state, pdev);
589 unsigned int value; 593 unsigned int value;
590 594
591 if (sscanf(buf, "%u", &value) != 1) { 595 if (sscanf(buf, "%u", &value) != 1) {
@@ -608,48 +612,15 @@ static DEVICE_ATTR(sleep_timeout, 0644, sleep_timeout_show,
608#define DEV_CREATE_FILE(dev, attr) WARN_ON(device_create_file(dev, attr)) 612#define DEV_CREATE_FILE(dev, attr) WARN_ON(device_create_file(dev, attr))
609#else 613#else
610static inline void omap_uart_idle_init(struct omap_uart_state *uart) {} 614static inline void omap_uart_idle_init(struct omap_uart_state *uart) {}
615static void omap_uart_block_sleep(struct omap_uart_state *uart)
616{
617 /* Needed to enable UART clocks when built without CONFIG_PM */
618 omap_uart_enable_clocks(uart);
619}
611#define DEV_CREATE_FILE(dev, attr) 620#define DEV_CREATE_FILE(dev, attr)
612#endif /* CONFIG_PM */ 621#endif /* CONFIG_PM */
613 622
614static struct omap_uart_state omap_uart[] = { 623#ifndef CONFIG_SERIAL_OMAP
615 {
616 .pdev = {
617 .name = "serial8250",
618 .id = PLAT8250_DEV_PLATFORM,
619 .dev = {
620 .platform_data = serial_platform_data0,
621 },
622 },
623 }, {
624 .pdev = {
625 .name = "serial8250",
626 .id = PLAT8250_DEV_PLATFORM1,
627 .dev = {
628 .platform_data = serial_platform_data1,
629 },
630 },
631 }, {
632 .pdev = {
633 .name = "serial8250",
634 .id = PLAT8250_DEV_PLATFORM2,
635 .dev = {
636 .platform_data = serial_platform_data2,
637 },
638 },
639 },
640#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
641 {
642 .pdev = {
643 .name = "serial8250",
644 .id = 3,
645 .dev = {
646 .platform_data = serial_platform_data3,
647 },
648 },
649 },
650#endif
651};
652
653/* 624/*
654 * Override the default 8250 read handler: mem_serial_in() 625 * Override the default 8250 read handler: mem_serial_in()
655 * Empty RX fifo read causes an abort on omap3630 and omap4 626 * Empty RX fifo read causes an abort on omap3630 and omap4
@@ -682,143 +653,209 @@ static void serial_out_override(struct uart_port *up, int offset, int value)
682 } 653 }
683 __serial_write_reg(up, offset, value); 654 __serial_write_reg(up, offset, value);
684} 655}
685void __init omap_serial_early_init(void) 656#endif
657
658static int __init omap_serial_early_init(void)
686{ 659{
687 int i, nr_ports; 660 int i = 0;
688 char name[16];
689 661
690 if (!(cpu_is_omap3630() || cpu_is_omap4430())) 662 do {
691 nr_ports = 3; 663 char oh_name[MAX_UART_HWMOD_NAME_LEN];
692 else 664 struct omap_hwmod *oh;
693 nr_ports = ARRAY_SIZE(omap_uart); 665 struct omap_uart_state *uart;
694 666
695 /* 667 snprintf(oh_name, MAX_UART_HWMOD_NAME_LEN,
696 * Make sure the serial ports are muxed on at this point. 668 "uart%d", i + 1);
697 * You have to mux them off in device drivers later on 669 oh = omap_hwmod_lookup(oh_name);
698 * if not needed. 670 if (!oh)
699 */ 671 break;
700 672
701 for (i = 0; i < nr_ports; i++) { 673 uart = kzalloc(sizeof(struct omap_uart_state), GFP_KERNEL);
702 struct omap_uart_state *uart = &omap_uart[i]; 674 if (WARN_ON(!uart))
703 struct platform_device *pdev = &uart->pdev; 675 return -ENODEV;
704 struct device *dev = &pdev->dev; 676
705 struct plat_serial8250_port *p = dev->platform_data; 677 uart->oh = oh;
678 uart->num = i++;
679 list_add_tail(&uart->node, &uart_list);
680 num_uarts++;
706 681
707 /* Don't map zero-based physical address */
708 if (p->mapbase == 0) {
709 dev_warn(dev, "no physical address for uart#%d,"
710 " so skipping early_init...\n", i);
711 continue;
712 }
713 /* 682 /*
714 * Module 4KB + L4 interconnect 4KB 683 * NOTE: omap_hwmod_setup*() has not yet been called,
715 * Static mapping, never released 684 * so no hwmod functions will work yet.
716 */ 685 */
717 p->membase = ioremap(p->mapbase, SZ_8K);
718 if (!p->membase) {
719 dev_err(dev, "ioremap failed for uart%i\n", i + 1);
720 continue;
721 }
722
723 sprintf(name, "uart%d_ick", i + 1);
724 uart->ick = clk_get(NULL, name);
725 if (IS_ERR(uart->ick)) {
726 dev_err(dev, "Could not get uart%d_ick\n", i + 1);
727 uart->ick = NULL;
728 }
729
730 sprintf(name, "uart%d_fck", i+1);
731 uart->fck = clk_get(NULL, name);
732 if (IS_ERR(uart->fck)) {
733 dev_err(dev, "Could not get uart%d_fck\n", i + 1);
734 uart->fck = NULL;
735 }
736
737 /* FIXME: Remove this once the clkdev is ready */
738 if (!cpu_is_omap44xx()) {
739 if (!uart->ick || !uart->fck)
740 continue;
741 }
742 686
743 uart->num = i; 687 /*
744 p->private_data = uart; 688 * During UART early init, device need to be probed
745 uart->p = p; 689 * to determine SoC specific init before omap_device
690 * is ready. Therefore, don't allow idle here
691 */
692 uart->oh->flags |= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET;
693 } while (1);
746 694
747 if (cpu_is_omap44xx()) 695 return 0;
748 p->irq += 32;
749 }
750} 696}
697core_initcall(omap_serial_early_init);
751 698
752/** 699/**
753 * omap_serial_init_port() - initialize single serial port 700 * omap_serial_init_port() - initialize single serial port
754 * @port: serial port number (0-3) 701 * @bdata: port specific board data pointer
755 * 702 *
756 * This function initialies serial driver for given @port only. 703 * This function initialies serial driver for given port only.
757 * Platforms can call this function instead of omap_serial_init() 704 * Platforms can call this function instead of omap_serial_init()
758 * if they don't plan to use all available UARTs as serial ports. 705 * if they don't plan to use all available UARTs as serial ports.
759 * 706 *
760 * Don't mix calls to omap_serial_init_port() and omap_serial_init(), 707 * Don't mix calls to omap_serial_init_port() and omap_serial_init(),
761 * use only one of the two. 708 * use only one of the two.
762 */ 709 */
763void __init omap_serial_init_port(int port) 710void __init omap_serial_init_port(struct omap_board_data *bdata)
764{ 711{
765 struct omap_uart_state *uart; 712 struct omap_uart_state *uart;
766 struct platform_device *pdev; 713 struct omap_hwmod *oh;
767 struct device *dev; 714 struct omap_device *od;
768 715 void *pdata = NULL;
769 BUG_ON(port < 0); 716 u32 pdata_size = 0;
770 BUG_ON(port >= ARRAY_SIZE(omap_uart)); 717 char *name;
771 718#ifndef CONFIG_SERIAL_OMAP
772 uart = &omap_uart[port]; 719 struct plat_serial8250_port ports[2] = {
773 pdev = &uart->pdev; 720 {},
774 dev = &pdev->dev; 721 {.flags = 0},
722 };
723 struct plat_serial8250_port *p = &ports[0];
724#else
725 struct omap_uart_port_info omap_up;
726#endif
775 727
776 /* Don't proceed if there's no clocks available */ 728 if (WARN_ON(!bdata))
777 if (unlikely(!uart->ick || !uart->fck)) { 729 return;
778 WARN(1, "%s: can't init uart%d, no clocks available\n", 730 if (WARN_ON(bdata->id < 0))
779 kobject_name(&dev->kobj), port); 731 return;
732 if (WARN_ON(bdata->id >= num_uarts))
780 return; 733 return;
781 }
782
783 omap_uart_enable_clocks(uart);
784
785 omap_uart_reset(uart);
786 omap_uart_idle_init(uart);
787 734
788 list_add_tail(&uart->node, &uart_list); 735 list_for_each_entry(uart, &uart_list, node)
736 if (bdata->id == uart->num)
737 break;
789 738
790 if (WARN_ON(platform_device_register(pdev))) 739 oh = uart->oh;
791 return; 740 uart->dma_enabled = 0;
741#ifndef CONFIG_SERIAL_OMAP
742 name = "serial8250";
792 743
793 if ((cpu_is_omap34xx() && uart->padconf) || 744 /*
794 (uart->wk_en && uart->wk_mask)) { 745 * !! 8250 driver does not use standard IORESOURCE* It
795 device_init_wakeup(dev, true); 746 * has it's own custom pdata that can be taken from
796 DEV_CREATE_FILE(dev, &dev_attr_sleep_timeout); 747 * the hwmod resource data. But, this needs to be
797 } 748 * done after the build.
749 *
750 * ?? does it have to be done before the register ??
751 * YES, because platform_device_data_add() copies
752 * pdata, it does not use a pointer.
753 */
754 p->flags = UPF_BOOT_AUTOCONF;
755 p->iotype = UPIO_MEM;
756 p->regshift = 2;
757 p->uartclk = OMAP24XX_BASE_BAUD * 16;
758 p->irq = oh->mpu_irqs[0].irq;
759 p->mapbase = oh->slaves[0]->addr->pa_start;
760 p->membase = omap_hwmod_get_mpu_rt_va(oh);
761 p->irqflags = IRQF_SHARED;
762 p->private_data = uart;
798 763
799 /* 764 /*
800 * omap44xx: Never read empty UART fifo 765 * omap44xx, ti816x: Never read empty UART fifo
801 * omap3xxx: Never read empty UART fifo on UARTs 766 * omap3xxx: Never read empty UART fifo on UARTs
802 * with IP rev >=0x52 767 * with IP rev >=0x52
803 */ 768 */
804 if (cpu_is_omap44xx()) 769 uart->regshift = p->regshift;
770 uart->membase = p->membase;
771 if (cpu_is_omap44xx() || cpu_is_ti816x())
805 uart->errata |= UART_ERRATA_FIFO_FULL_ABORT; 772 uart->errata |= UART_ERRATA_FIFO_FULL_ABORT;
806 else if ((serial_read_reg(uart->p, UART_OMAP_MVER) & 0xFF) 773 else if ((serial_read_reg(uart, UART_OMAP_MVER) & 0xFF)
807 >= UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV) 774 >= UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV)
808 uart->errata |= UART_ERRATA_FIFO_FULL_ABORT; 775 uart->errata |= UART_ERRATA_FIFO_FULL_ABORT;
809 776
810 if (uart->errata & UART_ERRATA_FIFO_FULL_ABORT) { 777 if (uart->errata & UART_ERRATA_FIFO_FULL_ABORT) {
811 uart->p->serial_in = serial_in_override; 778 p->serial_in = serial_in_override;
812 uart->p->serial_out = serial_out_override; 779 p->serial_out = serial_out_override;
780 }
781
782 pdata = &ports[0];
783 pdata_size = 2 * sizeof(struct plat_serial8250_port);
784#else
785
786 name = DRIVER_NAME;
787
788 omap_up.dma_enabled = uart->dma_enabled;
789 omap_up.uartclk = OMAP24XX_BASE_BAUD * 16;
790 omap_up.mapbase = oh->slaves[0]->addr->pa_start;
791 omap_up.membase = omap_hwmod_get_mpu_rt_va(oh);
792 omap_up.irqflags = IRQF_SHARED;
793 omap_up.flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
794
795 pdata = &omap_up;
796 pdata_size = sizeof(struct omap_uart_port_info);
797#endif
798
799 if (WARN_ON(!oh))
800 return;
801
802 od = omap_device_build(name, uart->num, oh, pdata, pdata_size,
803 omap_uart_latency,
804 ARRAY_SIZE(omap_uart_latency), false);
805 WARN(IS_ERR(od), "Could not build omap_device for %s: %s.\n",
806 name, oh->name);
807
808 oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
809
810 uart->irq = oh->mpu_irqs[0].irq;
811 uart->regshift = 2;
812 uart->mapbase = oh->slaves[0]->addr->pa_start;
813 uart->membase = omap_hwmod_get_mpu_rt_va(oh);
814 uart->pdev = &od->pdev;
815
816 oh->dev_attr = uart;
817
818 console_lock(); /* in case the earlycon is on the UART */
819
820 /*
821 * Because of early UART probing, UART did not get idled
822 * on init. Now that omap_device is ready, ensure full idle
823 * before doing omap_device_enable().
824 */
825 omap_hwmod_idle(uart->oh);
826
827 omap_device_enable(uart->pdev);
828 omap_uart_idle_init(uart);
829 omap_uart_reset(uart);
830 omap_hwmod_enable_wakeup(uart->oh);
831 omap_device_idle(uart->pdev);
832
833 /*
834 * Need to block sleep long enough for interrupt driven
835 * driver to start. Console driver is in polling mode
836 * so device needs to be kept enabled while polling driver
837 * is in use.
838 */
839 if (uart->timeout)
840 uart->timeout = (30 * HZ);
841 omap_uart_block_sleep(uart);
842 uart->timeout = DEFAULT_TIMEOUT;
843
844 console_unlock();
845
846 if ((cpu_is_omap34xx() && uart->padconf) ||
847 (uart->wk_en && uart->wk_mask)) {
848 device_init_wakeup(&od->pdev.dev, true);
849 DEV_CREATE_FILE(&od->pdev.dev, &dev_attr_sleep_timeout);
813 } 850 }
814 851
815 /* Enable the MDR1 errata for OMAP3 */ 852 /* Enable the MDR1 errata for OMAP3 */
816 if (cpu_is_omap34xx()) 853 if (cpu_is_omap34xx() && !cpu_is_ti816x())
817 uart->errata |= UART_ERRATA_i202_MDR1_ACCESS; 854 uart->errata |= UART_ERRATA_i202_MDR1_ACCESS;
818} 855}
819 856
820/** 857/**
821 * omap_serial_init() - intialize all supported serial ports 858 * omap_serial_init() - initialize all supported serial ports
822 * 859 *
823 * Initializes all available UARTs as serial ports. Platforms 860 * Initializes all available UARTs as serial ports. Platforms
824 * can call this function when they want to have default behaviour 861 * can call this function when they want to have default behaviour
@@ -826,13 +863,15 @@ void __init omap_serial_init_port(int port)
826 */ 863 */
827void __init omap_serial_init(void) 864void __init omap_serial_init(void)
828{ 865{
829 int i, nr_ports; 866 struct omap_uart_state *uart;
867 struct omap_board_data bdata;
830 868
831 if (!(cpu_is_omap3630() || cpu_is_omap4430())) 869 list_for_each_entry(uart, &uart_list, node) {
832 nr_ports = 3; 870 bdata.id = uart->num;
833 else 871 bdata.flags = 0;
834 nr_ports = ARRAY_SIZE(omap_uart); 872 bdata.pads = NULL;
873 bdata.pads_cnt = 0;
874 omap_serial_init_port(&bdata);
835 875
836 for (i = 0; i < nr_ports; i++) 876 }
837 omap_serial_init_port(i);
838} 877}
diff --git a/arch/arm/mach-omap2/sleep24xx.S b/arch/arm/mach-omap2/sleep24xx.S
index c7780cc8d919..b5071a47ec39 100644
--- a/arch/arm/mach-omap2/sleep24xx.S
+++ b/arch/arm/mach-omap2/sleep24xx.S
@@ -47,6 +47,7 @@
47 * Note: This code get's copied to internal SRAM at boot. When the OMAP 47 * Note: This code get's copied to internal SRAM at boot. When the OMAP
48 * wakes up it continues execution at the point it went to sleep. 48 * wakes up it continues execution at the point it went to sleep.
49 */ 49 */
50 .align 3
50ENTRY(omap24xx_idle_loop_suspend) 51ENTRY(omap24xx_idle_loop_suspend)
51 stmfd sp!, {r0, lr} @ save registers on stack 52 stmfd sp!, {r0, lr} @ save registers on stack
52 mov r0, #0 @ clear for mcr setup 53 mov r0, #0 @ clear for mcr setup
@@ -82,6 +83,7 @@ ENTRY(omap24xx_idle_loop_suspend_sz)
82 * The DLL load value is not kept in RETENTION or OFF. It needs to be restored 83 * The DLL load value is not kept in RETENTION or OFF. It needs to be restored
83 * at wake 84 * at wake
84 */ 85 */
86 .align 3
85ENTRY(omap24xx_cpu_suspend) 87ENTRY(omap24xx_cpu_suspend)
86 stmfd sp!, {r0 - r12, lr} @ save registers on stack 88 stmfd sp!, {r0 - r12, lr} @ save registers on stack
87 mov r3, #0x0 @ clear for mcr call 89 mov r3, #0x0 @ clear for mcr call
diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S
index ba53191ae4c5..63f10669571a 100644
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/arm/mach-omap2/sleep.S
3 *
4 * (C) Copyright 2007 2 * (C) Copyright 2007
5 * Texas Instruments 3 * Texas Instruments
6 * Karthik Dasu <karthik-dp@ti.com> 4 * Karthik Dasu <karthik-dp@ti.com>
@@ -26,28 +24,35 @@
26 */ 24 */
27#include <linux/linkage.h> 25#include <linux/linkage.h>
28#include <asm/assembler.h> 26#include <asm/assembler.h>
27#include <plat/sram.h>
29#include <mach/io.h> 28#include <mach/io.h>
30#include <plat/control.h>
31 29
32#include "cm.h" 30#include "cm2xxx_3xxx.h"
33#include "prm.h" 31#include "prm2xxx_3xxx.h"
34#include "sdrc.h" 32#include "sdrc.h"
33#include "control.h"
35 34
36#define SDRC_SCRATCHPAD_SEM_V 0xfa00291c 35/*
37 36 * Registers access definitions
38#define PM_PREPWSTST_CORE_V OMAP34XX_PRM_REGADDR(CORE_MOD, \ 37 */
39 OMAP3430_PM_PREPWSTST) 38#define SDRC_SCRATCHPAD_SEM_OFFS 0xc
40#define PM_PREPWSTST_CORE_P 0x48306AE8 39#define SDRC_SCRATCHPAD_SEM_V OMAP343X_SCRATCHPAD_REGADDR\
41#define PM_PREPWSTST_MPU_V OMAP34XX_PRM_REGADDR(MPU_MOD, \ 40 (SDRC_SCRATCHPAD_SEM_OFFS)
42 OMAP3430_PM_PREPWSTST) 41#define PM_PREPWSTST_CORE_P OMAP3430_PRM_BASE + CORE_MOD +\
42 OMAP3430_PM_PREPWSTST
43#define PM_PWSTCTRL_MPU_P OMAP3430_PRM_BASE + MPU_MOD + OMAP2_PM_PWSTCTRL 43#define PM_PWSTCTRL_MPU_P OMAP3430_PRM_BASE + MPU_MOD + OMAP2_PM_PWSTCTRL
44#define CM_IDLEST1_CORE_V OMAP34XX_CM_REGADDR(CORE_MOD, CM_IDLEST1) 44#define CM_IDLEST1_CORE_V OMAP34XX_CM_REGADDR(CORE_MOD, CM_IDLEST1)
45#define SRAM_BASE_P 0x40200000 45#define CM_IDLEST_CKGEN_V OMAP34XX_CM_REGADDR(PLL_MOD, CM_IDLEST)
46#define CONTROL_STAT 0x480022F0 46#define SRAM_BASE_P OMAP3_SRAM_PA
47#define SCRATCHPAD_MEM_OFFS 0x310 /* Move this as correct place is 47#define CONTROL_STAT OMAP343X_CTRL_BASE + OMAP343X_CONTROL_STATUS
48 * available */ 48#define CONTROL_MEM_RTA_CTRL (OMAP343X_CTRL_BASE +\
49#define SCRATCHPAD_BASE_P (OMAP343X_CTRL_BASE + OMAP343X_CONTROL_MEM_WKUP\ 49 OMAP36XX_CONTROL_MEM_RTA_CTRL)
50 + SCRATCHPAD_MEM_OFFS) 50
51/* Move this as correct place is available */
52#define SCRATCHPAD_MEM_OFFS 0x310
53#define SCRATCHPAD_BASE_P (OMAP343X_CTRL_BASE +\
54 OMAP343X_CONTROL_MEM_WKUP +\
55 SCRATCHPAD_MEM_OFFS)
51#define SDRC_POWER_V OMAP34XX_SDRC_REGADDR(SDRC_POWER) 56#define SDRC_POWER_V OMAP34XX_SDRC_REGADDR(SDRC_POWER)
52#define SDRC_SYSCONFIG_P (OMAP343X_SDRC_BASE + SDRC_SYSCONFIG) 57#define SDRC_SYSCONFIG_P (OMAP343X_SDRC_BASE + SDRC_SYSCONFIG)
53#define SDRC_MR_0_P (OMAP343X_SDRC_BASE + SDRC_MR_0) 58#define SDRC_MR_0_P (OMAP343X_SDRC_BASE + SDRC_MR_0)
@@ -59,103 +64,76 @@
59#define SDRC_DLLA_STATUS_V OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS) 64#define SDRC_DLLA_STATUS_V OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS)
60#define SDRC_DLLA_CTRL_V OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL) 65#define SDRC_DLLA_CTRL_V OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL)
61 66
62 .text 67/*
63/* Function to acquire the semaphore in scratchpad */ 68 * This file needs be built unconditionally as ARM to interoperate correctly
64ENTRY(lock_scratchpad_sem) 69 * with non-Thumb-2-capable firmware.
65 stmfd sp!, {lr} @ save registers on stack 70 */
66wait_sem: 71 .arm
67 mov r0,#1 72
68 ldr r1, sdrc_scratchpad_sem 73/*
69wait_loop: 74 * API functions
70 ldr r2, [r1] @ load the lock value 75 */
71 cmp r2, r0 @ is the lock free ? 76
72 beq wait_loop @ not free... 77/*
73 swp r2, r0, [r1] @ semaphore free so lock it and proceed 78 * The "get_*restore_pointer" functions are used to provide a
74 cmp r2, r0 @ did we succeed ? 79 * physical restore address where the ROM code jumps while waking
75 beq wait_sem @ no - try again 80 * up from MPU OFF/OSWR state.
76 ldmfd sp!, {pc} @ restore regs and return 81 * The restore pointer is stored into the scratchpad.
77sdrc_scratchpad_sem: 82 */
78 .word SDRC_SCRATCHPAD_SEM_V
79ENTRY(lock_scratchpad_sem_sz)
80 .word . - lock_scratchpad_sem
81
82 .text
83/* Function to release the scratchpad semaphore */
84ENTRY(unlock_scratchpad_sem)
85 stmfd sp!, {lr} @ save registers on stack
86 ldr r3, sdrc_scratchpad_sem
87 mov r2,#0
88 str r2,[r3]
89 ldmfd sp!, {pc} @ restore regs and return
90ENTRY(unlock_scratchpad_sem_sz)
91 .word . - unlock_scratchpad_sem
92 83
93 .text 84 .text
94/* Function call to get the restore pointer for resume from OFF */ 85/* Function call to get the restore pointer for resume from OFF */
95ENTRY(get_restore_pointer) 86ENTRY(get_restore_pointer)
96 stmfd sp!, {lr} @ save registers on stack 87 stmfd sp!, {lr} @ save registers on stack
97 adr r0, restore 88 adr r0, restore
98 ldmfd sp!, {pc} @ restore regs and return 89 ldmfd sp!, {pc} @ restore regs and return
90ENDPROC(get_restore_pointer)
91 .align
99ENTRY(get_restore_pointer_sz) 92ENTRY(get_restore_pointer_sz)
100 .word . - get_restore_pointer 93 .word . - get_restore_pointer
94
95 .text
96/* Function call to get the restore pointer for 3630 resume from OFF */
97ENTRY(get_omap3630_restore_pointer)
98 stmfd sp!, {lr} @ save registers on stack
99 adr r0, restore_3630
100 ldmfd sp!, {pc} @ restore regs and return
101ENDPROC(get_omap3630_restore_pointer)
102 .align
103ENTRY(get_omap3630_restore_pointer_sz)
104 .word . - get_omap3630_restore_pointer
101 105
102 .text 106 .text
103/* Function call to get the restore pointer for for ES3 to resume from OFF */ 107/* Function call to get the restore pointer for ES3 to resume from OFF */
104ENTRY(get_es3_restore_pointer) 108ENTRY(get_es3_restore_pointer)
105 stmfd sp!, {lr} @ save registers on stack 109 stmfd sp!, {lr} @ save registers on stack
106 adr r0, restore_es3 110 adr r0, restore_es3
107 ldmfd sp!, {pc} @ restore regs and return 111 ldmfd sp!, {pc} @ restore regs and return
112ENDPROC(get_es3_restore_pointer)
113 .align
108ENTRY(get_es3_restore_pointer_sz) 114ENTRY(get_es3_restore_pointer_sz)
109 .word . - get_es3_restore_pointer 115 .word . - get_es3_restore_pointer
110 116
111ENTRY(es3_sdrc_fix) 117 .text
112 ldr r4, sdrc_syscfg @ get config addr 118/*
113 ldr r5, [r4] @ get value 119 * L2 cache needs to be toggled for stable OFF mode functionality on 3630.
114 tst r5, #0x100 @ is part access blocked 120 * This function sets up a flag that will allow for this toggling to take
115 it eq 121 * place on 3630. Hopefully some version in the future may not need this.
116 biceq r5, r5, #0x100 @ clear bit if set 122 */
117 str r5, [r4] @ write back change 123ENTRY(enable_omap3630_toggle_l2_on_restore)
118 ldr r4, sdrc_mr_0 @ get config addr 124 stmfd sp!, {lr} @ save registers on stack
119 ldr r5, [r4] @ get value 125 /* Setup so that we will disable and enable l2 */
120 str r5, [r4] @ write back change 126 mov r1, #0x1
121 ldr r4, sdrc_emr2_0 @ get config addr 127 adrl r2, l2dis_3630 @ may be too distant for plain adr
122 ldr r5, [r4] @ get value 128 str r1, [r2]
123 str r5, [r4] @ write back change 129 ldmfd sp!, {pc} @ restore regs and return
124 ldr r4, sdrc_manual_0 @ get config addr 130ENDPROC(enable_omap3630_toggle_l2_on_restore)
125 mov r5, #0x2 @ autorefresh command
126 str r5, [r4] @ kick off refreshes
127 ldr r4, sdrc_mr_1 @ get config addr
128 ldr r5, [r4] @ get value
129 str r5, [r4] @ write back change
130 ldr r4, sdrc_emr2_1 @ get config addr
131 ldr r5, [r4] @ get value
132 str r5, [r4] @ write back change
133 ldr r4, sdrc_manual_1 @ get config addr
134 mov r5, #0x2 @ autorefresh command
135 str r5, [r4] @ kick off refreshes
136 bx lr
137sdrc_syscfg:
138 .word SDRC_SYSCONFIG_P
139sdrc_mr_0:
140 .word SDRC_MR_0_P
141sdrc_emr2_0:
142 .word SDRC_EMR2_0_P
143sdrc_manual_0:
144 .word SDRC_MANUAL_0_P
145sdrc_mr_1:
146 .word SDRC_MR_1_P
147sdrc_emr2_1:
148 .word SDRC_EMR2_1_P
149sdrc_manual_1:
150 .word SDRC_MANUAL_1_P
151ENTRY(es3_sdrc_fix_sz)
152 .word . - es3_sdrc_fix
153 131
132 .text
154/* Function to call rom code to save secure ram context */ 133/* Function to call rom code to save secure ram context */
134 .align 3
155ENTRY(save_secure_ram_context) 135ENTRY(save_secure_ram_context)
156 stmfd sp!, {r1-r12, lr} @ save registers on stack 136 stmfd sp!, {r1-r12, lr} @ save registers on stack
157save_secure_ram_debug:
158 /* b save_secure_ram_debug */ @ enable to debug save code
159 adr r3, api_params @ r3 points to parameters 137 adr r3, api_params @ r3 points to parameters
160 str r0, [r3,#0x4] @ r0 has sdram address 138 str r0, [r3,#0x4] @ r0 has sdram address
161 ldr r12, high_mask 139 ldr r12, high_mask
@@ -167,53 +145,167 @@ save_secure_ram_debug:
167 mov r1, #0 @ set task id for ROM code in r1 145 mov r1, #0 @ set task id for ROM code in r1
168 mov r2, #4 @ set some flags in r2, r6 146 mov r2, #4 @ set some flags in r2, r6
169 mov r6, #0xff 147 mov r6, #0xff
170 mcr p15, 0, r0, c7, c10, 4 @ data write barrier 148 dsb @ data write barrier
171 mcr p15, 0, r0, c7, c10, 5 @ data memory barrier 149 dmb @ data memory barrier
172 .word 0xE1600071 @ call SMI monitor (smi #1) 150 smc #1 @ call SMI monitor (smi #1)
173 nop 151 nop
174 nop 152 nop
175 nop 153 nop
176 nop 154 nop
177 ldmfd sp!, {r1-r12, pc} 155 ldmfd sp!, {r1-r12, pc}
156 .align
178sram_phy_addr_mask: 157sram_phy_addr_mask:
179 .word SRAM_BASE_P 158 .word SRAM_BASE_P
180high_mask: 159high_mask:
181 .word 0xffff 160 .word 0xffff
182api_params: 161api_params:
183 .word 0x4, 0x0, 0x0, 0x1, 0x1 162 .word 0x4, 0x0, 0x0, 0x1, 0x1
163ENDPROC(save_secure_ram_context)
184ENTRY(save_secure_ram_context_sz) 164ENTRY(save_secure_ram_context_sz)
185 .word . - save_secure_ram_context 165 .word . - save_secure_ram_context
186 166
187/* 167/*
168 * ======================
169 * == Idle entry point ==
170 * ======================
171 */
172
173/*
188 * Forces OMAP into idle state 174 * Forces OMAP into idle state
189 * 175 *
190 * omap34xx_suspend() - This bit of code just executes the WFI 176 * omap34xx_cpu_suspend() - This bit of code saves the CPU context if needed
191 * for normal idles. 177 * and executes the WFI instruction. Calling WFI effectively changes the
178 * power domains states to the desired target power states.
179 *
192 * 180 *
193 * Note: This code get's copied to internal SRAM at boot. When the OMAP 181 * Notes:
194 * wakes up it continues execution at the point it went to sleep. 182 * - this code gets copied to internal SRAM at boot and after wake-up
183 * from OFF mode. The execution pointer in SRAM is _omap_sram_idle.
184 * - when the OMAP wakes up it continues at different execution points
185 * depending on the low power mode (non-OFF vs OFF modes),
186 * cf. 'Resume path for xxx mode' comments.
195 */ 187 */
188 .align 3
196ENTRY(omap34xx_cpu_suspend) 189ENTRY(omap34xx_cpu_suspend)
197 stmfd sp!, {r0-r12, lr} @ save registers on stack 190 stmfd sp!, {r0-r12, lr} @ save registers on stack
198loop:
199 /*b loop*/ @Enable to debug by stepping through code
200 /* r0 contains restore pointer in sdram */
201 /* r1 contains information about saving context */
202 ldr r4, sdrc_power @ read the SDRC_POWER register
203 ldr r5, [r4] @ read the contents of SDRC_POWER
204 orr r5, r5, #0x40 @ enable self refresh on idle req
205 str r5, [r4] @ write back to SDRC_POWER register
206 191
192 /*
193 * r0 contains CPU context save/restore pointer in sdram
194 * r1 contains information about saving context:
195 * 0 - No context lost
196 * 1 - Only L1 and logic lost
197 * 2 - Only L2 lost (Even L1 is retained we clean it along with L2)
198 * 3 - Both L1 and L2 lost and logic lost
199 */
200
201 /* Directly jump to WFI is the context save is not required */
207 cmp r1, #0x0 202 cmp r1, #0x0
208 /* If context save is required, do that and execute wfi */ 203 beq omap3_do_wfi
209 bne save_context_wfi 204
205 /* Otherwise fall through to the save context code */
206save_context_wfi:
207 mov r8, r0 @ Store SDRAM address in r8
208 mrc p15, 0, r5, c1, c0, 1 @ Read Auxiliary Control Register
209 mov r4, #0x1 @ Number of parameters for restore call
210 stmia r8!, {r4-r5} @ Push parameters for restore call
211 mrc p15, 1, r5, c9, c0, 2 @ Read L2 AUX ctrl register
212 stmia r8!, {r4-r5} @ Push parameters for restore call
213
214 /* Check what that target sleep state is from r1 */
215 cmp r1, #0x2 @ Only L2 lost, no need to save context
216 beq clean_caches
217
218l1_logic_lost:
219 mov r4, sp @ Store sp
220 mrs r5, spsr @ Store spsr
221 mov r6, lr @ Store lr
222 stmia r8!, {r4-r6}
223
224 mrc p15, 0, r4, c1, c0, 2 @ Coprocessor access control register
225 mrc p15, 0, r5, c2, c0, 0 @ TTBR0
226 mrc p15, 0, r6, c2, c0, 1 @ TTBR1
227 mrc p15, 0, r7, c2, c0, 2 @ TTBCR
228 stmia r8!, {r4-r7}
229
230 mrc p15, 0, r4, c3, c0, 0 @ Domain access Control Register
231 mrc p15, 0, r5, c10, c2, 0 @ PRRR
232 mrc p15, 0, r6, c10, c2, 1 @ NMRR
233 stmia r8!,{r4-r6}
234
235 mrc p15, 0, r4, c13, c0, 1 @ Context ID
236 mrc p15, 0, r5, c13, c0, 2 @ User r/w thread and process ID
237 mrc p15, 0, r6, c12, c0, 0 @ Secure or NS vector base address
238 mrs r7, cpsr @ Store current cpsr
239 stmia r8!, {r4-r7}
240
241 mrc p15, 0, r4, c1, c0, 0 @ save control register
242 stmia r8!, {r4}
243
244clean_caches:
245 /*
246 * jump out to kernel flush routine
247 * - reuse that code is better
248 * - it executes in a cached space so is faster than refetch per-block
249 * - should be faster and will change with kernel
250 * - 'might' have to copy address, load and jump to it
251 * Flush all data from the L1 data cache before disabling
252 * SCTLR.C bit.
253 */
254 ldr r1, kernel_flush
255 mov lr, pc
256 bx r1
257
258 /*
259 * Clear the SCTLR.C bit to prevent further data cache
260 * allocation. Clearing SCTLR.C would make all the data accesses
261 * strongly ordered and would not hit the cache.
262 */
263 mrc p15, 0, r0, c1, c0, 0
264 bic r0, r0, #(1 << 2) @ Disable the C bit
265 mcr p15, 0, r0, c1, c0, 0
266 isb
267
268 /*
269 * Invalidate L1 data cache. Even though only invalidate is
270 * necessary exported flush API is used here. Doing clean
271 * on already clean cache would be almost NOP.
272 */
273 ldr r1, kernel_flush
274 blx r1
275 /*
276 * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
277 * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
278 * This sequence switches back to ARM. Note that .align may insert a
279 * nop: bx pc needs to be word-aligned in order to work.
280 */
281 THUMB( .thumb )
282 THUMB( .align )
283 THUMB( bx pc )
284 THUMB( nop )
285 .arm
286
287omap3_do_wfi:
288 ldr r4, sdrc_power @ read the SDRC_POWER register
289 ldr r5, [r4] @ read the contents of SDRC_POWER
290 orr r5, r5, #0x40 @ enable self refresh on idle req
291 str r5, [r4] @ write back to SDRC_POWER register
292
210 /* Data memory barrier and Data sync barrier */ 293 /* Data memory barrier and Data sync barrier */
211 mov r1, #0 294 dsb
212 mcr p15, 0, r1, c7, c10, 4 295 dmb
213 mcr p15, 0, r1, c7, c10, 5
214 296
297/*
298 * ===================================
299 * == WFI instruction => Enter idle ==
300 * ===================================
301 */
215 wfi @ wait for interrupt 302 wfi @ wait for interrupt
216 303
304/*
305 * ===================================
306 * == Resume path for non-OFF modes ==
307 * ===================================
308 */
217 nop 309 nop
218 nop 310 nop
219 nop 311 nop
@@ -226,9 +318,36 @@ loop:
226 nop 318 nop
227 bl wait_sdrc_ok 319 bl wait_sdrc_ok
228 320
229 ldmfd sp!, {r0-r12, pc} @ restore regs and return 321 mrc p15, 0, r0, c1, c0, 0
322 tst r0, #(1 << 2) @ Check C bit enabled?
323 orreq r0, r0, #(1 << 2) @ Enable the C bit if cleared
324 mcreq p15, 0, r0, c1, c0, 0
325 isb
326
327/*
328 * ===================================
329 * == Exit point from non-OFF modes ==
330 * ===================================
331 */
332 ldmfd sp!, {r0-r12, pc} @ restore regs and return
333
334
335/*
336 * ==============================
337 * == Resume path for OFF mode ==
338 * ==============================
339 */
340
341/*
342 * The restore_* functions are called by the ROM code
343 * when back from WFI in OFF mode.
344 * Cf. the get_*restore_pointer functions.
345 *
346 * restore_es3: applies to 34xx >= ES3.0
347 * restore_3630: applies to 36xx
348 * restore: common code for 3xxx
349 */
230restore_es3: 350restore_es3:
231 /*b restore_es3*/ @ Enable to debug restore code
232 ldr r5, pm_prepwstst_core_p 351 ldr r5, pm_prepwstst_core_p
233 ldr r4, [r5] 352 ldr r4, [r5]
234 and r4, r4, #0x3 353 and r4, r4, #0x3
@@ -245,160 +364,158 @@ copy_to_sram:
245 bne copy_to_sram 364 bne copy_to_sram
246 ldr r1, sram_base 365 ldr r1, sram_base
247 blx r1 366 blx r1
367 b restore
368
369restore_3630:
370 ldr r1, pm_prepwstst_core_p
371 ldr r2, [r1]
372 and r2, r2, #0x3
373 cmp r2, #0x0 @ Check if previous power state of CORE is OFF
374 bne restore
375 /* Disable RTA before giving control */
376 ldr r1, control_mem_rta
377 mov r2, #OMAP36XX_RTA_DISABLE
378 str r2, [r1]
379
380 /* Fall through to common code for the remaining logic */
381
248restore: 382restore:
249 /* b restore*/ @ Enable to debug restore code 383 /*
250 /* Check what was the reason for mpu reset and store the reason in r9*/ 384 * Check what was the reason for mpu reset and store the reason in r9:
251 /* 1 - Only L1 and logic lost */ 385 * 0 - No context lost
252 /* 2 - Only L2 lost - In this case, we wont be here */ 386 * 1 - Only L1 and logic lost
253 /* 3 - Both L1 and L2 lost */ 387 * 2 - Only L2 lost - In this case, we wont be here
254 ldr r1, pm_pwstctrl_mpu 388 * 3 - Both L1 and L2 lost
389 */
390 ldr r1, pm_pwstctrl_mpu
255 ldr r2, [r1] 391 ldr r2, [r1]
256 and r2, r2, #0x3 392 and r2, r2, #0x3
257 cmp r2, #0x0 @ Check if target power state was OFF or RET 393 cmp r2, #0x0 @ Check if target power state was OFF or RET
258 moveq r9, #0x3 @ MPU OFF => L1 and L2 lost 394 moveq r9, #0x3 @ MPU OFF => L1 and L2 lost
259 movne r9, #0x1 @ Only L1 and L2 lost => avoid L2 invalidation 395 movne r9, #0x1 @ Only L1 and L2 lost => avoid L2 invalidation
260 bne logic_l1_restore 396 bne logic_l1_restore
397
398 ldr r0, l2dis_3630
399 cmp r0, #0x1 @ should we disable L2 on 3630?
400 bne skipl2dis
401 mrc p15, 0, r0, c1, c0, 1
402 bic r0, r0, #2 @ disable L2 cache
403 mcr p15, 0, r0, c1, c0, 1
404skipl2dis:
261 ldr r0, control_stat 405 ldr r0, control_stat
262 ldr r1, [r0] 406 ldr r1, [r0]
263 and r1, #0x700 407 and r1, #0x700
264 cmp r1, #0x300 408 cmp r1, #0x300
265 beq l2_inv_gp 409 beq l2_inv_gp
266 mov r0, #40 @ set service ID for PPA 410 mov r0, #40 @ set service ID for PPA
267 mov r12, r0 @ copy secure Service ID in r12 411 mov r12, r0 @ copy secure Service ID in r12
268 mov r1, #0 @ set task id for ROM code in r1 412 mov r1, #0 @ set task id for ROM code in r1
269 mov r2, #4 @ set some flags in r2, r6 413 mov r2, #4 @ set some flags in r2, r6
270 mov r6, #0xff 414 mov r6, #0xff
271 adr r3, l2_inv_api_params @ r3 points to dummy parameters 415 adr r3, l2_inv_api_params @ r3 points to dummy parameters
272 mcr p15, 0, r0, c7, c10, 4 @ data write barrier 416 dsb @ data write barrier
273 mcr p15, 0, r0, c7, c10, 5 @ data memory barrier 417 dmb @ data memory barrier
274 .word 0xE1600071 @ call SMI monitor (smi #1) 418 smc #1 @ call SMI monitor (smi #1)
275 /* Write to Aux control register to set some bits */ 419 /* Write to Aux control register to set some bits */
276 mov r0, #42 @ set service ID for PPA 420 mov r0, #42 @ set service ID for PPA
277 mov r12, r0 @ copy secure Service ID in r12 421 mov r12, r0 @ copy secure Service ID in r12
278 mov r1, #0 @ set task id for ROM code in r1 422 mov r1, #0 @ set task id for ROM code in r1
279 mov r2, #4 @ set some flags in r2, r6 423 mov r2, #4 @ set some flags in r2, r6
280 mov r6, #0xff 424 mov r6, #0xff
281 ldr r4, scratchpad_base 425 ldr r4, scratchpad_base
282 ldr r3, [r4, #0xBC] @ r3 points to parameters 426 ldr r3, [r4, #0xBC] @ r3 points to parameters
283 mcr p15, 0, r0, c7, c10, 4 @ data write barrier 427 dsb @ data write barrier
284 mcr p15, 0, r0, c7, c10, 5 @ data memory barrier 428 dmb @ data memory barrier
285 .word 0xE1600071 @ call SMI monitor (smi #1) 429 smc #1 @ call SMI monitor (smi #1)
286 430
287#ifdef CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE 431#ifdef CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE
288 /* Restore L2 aux control register */ 432 /* Restore L2 aux control register */
289 @ set service ID for PPA 433 @ set service ID for PPA
290 mov r0, #CONFIG_OMAP3_L2_AUX_SECURE_SERVICE_SET_ID 434 mov r0, #CONFIG_OMAP3_L2_AUX_SECURE_SERVICE_SET_ID
291 mov r12, r0 @ copy service ID in r12 435 mov r12, r0 @ copy service ID in r12
292 mov r1, #0 @ set task ID for ROM code in r1 436 mov r1, #0 @ set task ID for ROM code in r1
293 mov r2, #4 @ set some flags in r2, r6 437 mov r2, #4 @ set some flags in r2, r6
294 mov r6, #0xff 438 mov r6, #0xff
295 ldr r4, scratchpad_base 439 ldr r4, scratchpad_base
296 ldr r3, [r4, #0xBC] 440 ldr r3, [r4, #0xBC]
297 adds r3, r3, #8 @ r3 points to parameters 441 adds r3, r3, #8 @ r3 points to parameters
298 mcr p15, 0, r0, c7, c10, 4 @ data write barrier 442 dsb @ data write barrier
299 mcr p15, 0, r0, c7, c10, 5 @ data memory barrier 443 dmb @ data memory barrier
300 .word 0xE1600071 @ call SMI monitor (smi #1) 444 smc #1 @ call SMI monitor (smi #1)
301#endif 445#endif
302 b logic_l1_restore 446 b logic_l1_restore
447
448 .align
303l2_inv_api_params: 449l2_inv_api_params:
304 .word 0x1, 0x00 450 .word 0x1, 0x00
305l2_inv_gp: 451l2_inv_gp:
306 /* Execute smi to invalidate L2 cache */ 452 /* Execute smi to invalidate L2 cache */
307 mov r12, #0x1 @ set up to invalide L2 453 mov r12, #0x1 @ set up to invalidate L2
308smi: .word 0xE1600070 @ Call SMI monitor (smieq) 454 smc #0 @ Call SMI monitor (smieq)
309 /* Write to Aux control register to set some bits */ 455 /* Write to Aux control register to set some bits */
310 ldr r4, scratchpad_base 456 ldr r4, scratchpad_base
311 ldr r3, [r4,#0xBC] 457 ldr r3, [r4,#0xBC]
312 ldr r0, [r3,#4] 458 ldr r0, [r3,#4]
313 mov r12, #0x3 459 mov r12, #0x3
314 .word 0xE1600070 @ Call SMI monitor (smieq) 460 smc #0 @ Call SMI monitor (smieq)
315 ldr r4, scratchpad_base 461 ldr r4, scratchpad_base
316 ldr r3, [r4,#0xBC] 462 ldr r3, [r4,#0xBC]
317 ldr r0, [r3,#12] 463 ldr r0, [r3,#12]
318 mov r12, #0x2 464 mov r12, #0x2
319 .word 0xE1600070 @ Call SMI monitor (smieq) 465 smc #0 @ Call SMI monitor (smieq)
320logic_l1_restore: 466logic_l1_restore:
467 ldr r1, l2dis_3630
468 cmp r1, #0x1 @ Test if L2 re-enable needed on 3630
469 bne skipl2reen
470 mrc p15, 0, r1, c1, c0, 1
471 orr r1, r1, #2 @ re-enable L2 cache
472 mcr p15, 0, r1, c1, c0, 1
473skipl2reen:
321 mov r1, #0 474 mov r1, #0
322 /* Invalidate all instruction caches to PoU 475 /*
323 * and flush branch target cache */ 476 * Invalidate all instruction caches to PoU
477 * and flush branch target cache
478 */
324 mcr p15, 0, r1, c7, c5, 0 479 mcr p15, 0, r1, c7, c5, 0
325 480
326 ldr r4, scratchpad_base 481 ldr r4, scratchpad_base
327 ldr r3, [r4,#0xBC] 482 ldr r3, [r4,#0xBC]
328 adds r3, r3, #16 483 adds r3, r3, #16
484
329 ldmia r3!, {r4-r6} 485 ldmia r3!, {r4-r6}
330 mov sp, r4 486 mov sp, r4 @ Restore sp
331 msr spsr_cxsf, r5 487 msr spsr_cxsf, r5 @ Restore spsr
332 mov lr, r6 488 mov lr, r6 @ Restore lr
333 489
334 ldmia r3!, {r4-r9} 490 ldmia r3!, {r4-r7}
335 /* Coprocessor access Control Register */ 491 mcr p15, 0, r4, c1, c0, 2 @ Coprocessor access Control Register
336 mcr p15, 0, r4, c1, c0, 2 492 mcr p15, 0, r5, c2, c0, 0 @ TTBR0
337 493 mcr p15, 0, r6, c2, c0, 1 @ TTBR1
338 /* TTBR0 */ 494 mcr p15, 0, r7, c2, c0, 2 @ TTBCR
339 MCR p15, 0, r5, c2, c0, 0 495
340 /* TTBR1 */ 496 ldmia r3!,{r4-r6}
341 MCR p15, 0, r6, c2, c0, 1 497 mcr p15, 0, r4, c3, c0, 0 @ Domain access Control Register
342 /* Translation table base control register */ 498 mcr p15, 0, r5, c10, c2, 0 @ PRRR
343 MCR p15, 0, r7, c2, c0, 2 499 mcr p15, 0, r6, c10, c2, 1 @ NMRR
344 /*domain access Control Register */ 500
345 MCR p15, 0, r8, c3, c0, 0 501
346 /* data fault status Register */ 502 ldmia r3!,{r4-r7}
347 MCR p15, 0, r9, c5, c0, 0 503 mcr p15, 0, r4, c13, c0, 1 @ Context ID
348 504 mcr p15, 0, r5, c13, c0, 2 @ User r/w thread and process ID
349 ldmia r3!,{r4-r8} 505 mrc p15, 0, r6, c12, c0, 0 @ Secure or NS vector base address
350 /* instruction fault status Register */ 506 msr cpsr, r7 @ store cpsr
351 MCR p15, 0, r4, c5, c0, 1
352 /*Data Auxiliary Fault Status Register */
353 MCR p15, 0, r5, c5, c1, 0
354 /*Instruction Auxiliary Fault Status Register*/
355 MCR p15, 0, r6, c5, c1, 1
356 /*Data Fault Address Register */
357 MCR p15, 0, r7, c6, c0, 0
358 /*Instruction Fault Address Register*/
359 MCR p15, 0, r8, c6, c0, 2
360 ldmia r3!,{r4-r7}
361
362 /* user r/w thread and process ID */
363 MCR p15, 0, r4, c13, c0, 2
364 /* user ro thread and process ID */
365 MCR p15, 0, r5, c13, c0, 3
366 /*Privileged only thread and process ID */
367 MCR p15, 0, r6, c13, c0, 4
368 /* cache size selection */
369 MCR p15, 2, r7, c0, c0, 0
370 ldmia r3!,{r4-r8}
371 /* Data TLB lockdown registers */
372 MCR p15, 0, r4, c10, c0, 0
373 /* Instruction TLB lockdown registers */
374 MCR p15, 0, r5, c10, c0, 1
375 /* Secure or Nonsecure Vector Base Address */
376 MCR p15, 0, r6, c12, c0, 0
377 /* FCSE PID */
378 MCR p15, 0, r7, c13, c0, 0
379 /* Context PID */
380 MCR p15, 0, r8, c13, c0, 1
381
382 ldmia r3!,{r4-r5}
383 /* primary memory remap register */
384 MCR p15, 0, r4, c10, c2, 0
385 /*normal memory remap register */
386 MCR p15, 0, r5, c10, c2, 1
387
388 /* Restore cpsr */
389 ldmia r3!,{r4} /*load CPSR from SDRAM*/
390 msr cpsr, r4 /*store cpsr */
391 507
392 /* Enabling MMU here */ 508 /* Enabling MMU here */
393 mrc p15, 0, r7, c2, c0, 2 /* Read TTBRControl */ 509 mrc p15, 0, r7, c2, c0, 2 @ Read TTBRControl
394 /* Extract N (0:2) bits and decide whether to use TTBR0 or TTBR1*/ 510 /* Extract N (0:2) bits and decide whether to use TTBR0 or TTBR1 */
395 and r7, #0x7 511 and r7, #0x7
396 cmp r7, #0x0 512 cmp r7, #0x0
397 beq usettbr0 513 beq usettbr0
398ttbr_error: 514ttbr_error:
399 /* More work needs to be done to support N[0:2] value other than 0 515 /*
400 * So looping here so that the error can be detected 516 * More work needs to be done to support N[0:2] value other than 0
401 */ 517 * So looping here so that the error can be detected
518 */
402 b ttbr_error 519 b ttbr_error
403usettbr0: 520usettbr0:
404 mrc p15, 0, r2, c2, c0, 0 521 mrc p15, 0, r2, c2, c0, 0
@@ -406,21 +523,25 @@ usettbr0:
406 and r2, r5 523 and r2, r5
407 mov r4, pc 524 mov r4, pc
408 ldr r5, table_index_mask 525 ldr r5, table_index_mask
409 and r4, r5 /* r4 = 31 to 20 bits of pc */ 526 and r4, r5 @ r4 = 31 to 20 bits of pc
410 /* Extract the value to be written to table entry */ 527 /* Extract the value to be written to table entry */
411 ldr r1, table_entry 528 ldr r1, table_entry
412 add r1, r1, r4 /* r1 has value to be written to table entry*/ 529 /* r1 has the value to be written to table entry*/
530 add r1, r1, r4
413 /* Getting the address of table entry to modify */ 531 /* Getting the address of table entry to modify */
414 lsr r4, #18 532 lsr r4, #18
415 add r2, r4 /* r2 has the location which needs to be modified */ 533 /* r2 has the location which needs to be modified */
534 add r2, r4
416 /* Storing previous entry of location being modified */ 535 /* Storing previous entry of location being modified */
417 ldr r5, scratchpad_base 536 ldr r5, scratchpad_base
418 ldr r4, [r2] 537 ldr r4, [r2]
419 str r4, [r5, #0xC0] 538 str r4, [r5, #0xC0]
420 /* Modify the table entry */ 539 /* Modify the table entry */
421 str r1, [r2] 540 str r1, [r2]
422 /* Storing address of entry being modified 541 /*
423 * - will be restored after enabling MMU */ 542 * Storing address of entry being modified
543 * - will be restored after enabling MMU
544 */
424 ldr r5, scratchpad_base 545 ldr r5, scratchpad_base
425 str r2, [r5, #0xC4] 546 str r2, [r5, #0xC4]
426 547
@@ -429,221 +550,172 @@ usettbr0:
429 mcr p15, 0, r0, c7, c5, 6 @ Invalidate branch predictor array 550 mcr p15, 0, r0, c7, c5, 6 @ Invalidate branch predictor array
430 mcr p15, 0, r0, c8, c5, 0 @ Invalidate instruction TLB 551 mcr p15, 0, r0, c8, c5, 0 @ Invalidate instruction TLB
431 mcr p15, 0, r0, c8, c6, 0 @ Invalidate data TLB 552 mcr p15, 0, r0, c8, c6, 0 @ Invalidate data TLB
432 /* Restore control register but dont enable caches here*/ 553 /*
433 /* Caches will be enabled after restoring MMU table entry */ 554 * Restore control register. This enables the MMU.
555 * The caches and prediction are not enabled here, they
556 * will be enabled after restoring the MMU table entry.
557 */
434 ldmia r3!, {r4} 558 ldmia r3!, {r4}
435 /* Store previous value of control register in scratchpad */ 559 /* Store previous value of control register in scratchpad */
436 str r4, [r5, #0xC8] 560 str r4, [r5, #0xC8]
437 ldr r2, cache_pred_disable_mask 561 ldr r2, cache_pred_disable_mask
438 and r4, r2 562 and r4, r2
439 mcr p15, 0, r4, c1, c0, 0 563 mcr p15, 0, r4, c1, c0, 0
564 dsb
565 isb
566 ldr r0, =restoremmu_on
567 bx r0
440 568
441 ldmfd sp!, {r0-r12, pc} @ restore regs and return 569/*
442save_context_wfi: 570 * ==============================
443 /*b save_context_wfi*/ @ enable to debug save code 571 * == Exit point from OFF mode ==
444 mov r8, r0 /* Store SDRAM address in r8 */ 572 * ==============================
445 mrc p15, 0, r5, c1, c0, 1 @ Read Auxiliary Control Register 573 */
446 mov r4, #0x1 @ Number of parameters for restore call 574restoremmu_on:
447 stmia r8!, {r4-r5} @ Push parameters for restore call 575 ldmfd sp!, {r0-r12, pc} @ restore regs and return
448 mrc p15, 1, r5, c9, c0, 2 @ Read L2 AUX ctrl register
449 stmia r8!, {r4-r5} @ Push parameters for restore call
450 /* Check what that target sleep state is:stored in r1*/
451 /* 1 - Only L1 and logic lost */
452 /* 2 - Only L2 lost */
453 /* 3 - Both L1 and L2 lost */
454 cmp r1, #0x2 /* Only L2 lost */
455 beq clean_l2
456 cmp r1, #0x1 /* L2 retained */
457 /* r9 stores whether to clean L2 or not*/
458 moveq r9, #0x0 /* Dont Clean L2 */
459 movne r9, #0x1 /* Clean L2 */
460l1_logic_lost:
461 /* Store sp and spsr to SDRAM */
462 mov r4, sp
463 mrs r5, spsr
464 mov r6, lr
465 stmia r8!, {r4-r6}
466 /* Save all ARM registers */
467 /* Coprocessor access control register */
468 mrc p15, 0, r6, c1, c0, 2
469 stmia r8!, {r6}
470 /* TTBR0, TTBR1 and Translation table base control */
471 mrc p15, 0, r4, c2, c0, 0
472 mrc p15, 0, r5, c2, c0, 1
473 mrc p15, 0, r6, c2, c0, 2
474 stmia r8!, {r4-r6}
475 /* Domain access control register, data fault status register,
476 and instruction fault status register */
477 mrc p15, 0, r4, c3, c0, 0
478 mrc p15, 0, r5, c5, c0, 0
479 mrc p15, 0, r6, c5, c0, 1
480 stmia r8!, {r4-r6}
481 /* Data aux fault status register, instruction aux fault status,
482 datat fault address register and instruction fault address register*/
483 mrc p15, 0, r4, c5, c1, 0
484 mrc p15, 0, r5, c5, c1, 1
485 mrc p15, 0, r6, c6, c0, 0
486 mrc p15, 0, r7, c6, c0, 2
487 stmia r8!, {r4-r7}
488 /* user r/w thread and process ID, user r/o thread and process ID,
489 priv only thread and process ID, cache size selection */
490 mrc p15, 0, r4, c13, c0, 2
491 mrc p15, 0, r5, c13, c0, 3
492 mrc p15, 0, r6, c13, c0, 4
493 mrc p15, 2, r7, c0, c0, 0
494 stmia r8!, {r4-r7}
495 /* Data TLB lockdown, instruction TLB lockdown registers */
496 mrc p15, 0, r5, c10, c0, 0
497 mrc p15, 0, r6, c10, c0, 1
498 stmia r8!, {r5-r6}
499 /* Secure or non secure vector base address, FCSE PID, Context PID*/
500 mrc p15, 0, r4, c12, c0, 0
501 mrc p15, 0, r5, c13, c0, 0
502 mrc p15, 0, r6, c13, c0, 1
503 stmia r8!, {r4-r6}
504 /* Primary remap, normal remap registers */
505 mrc p15, 0, r4, c10, c2, 0
506 mrc p15, 0, r5, c10, c2, 1
507 stmia r8!,{r4-r5}
508 576
509 /* Store current cpsr*/
510 mrs r2, cpsr
511 stmia r8!, {r2}
512 577
513 mrc p15, 0, r4, c1, c0, 0 578/*
514 /* save control register */ 579 * Internal functions
515 stmia r8!, {r4} 580 */
516clean_caches:
517 /* Clean Data or unified cache to POU*/
518 /* How to invalidate only L1 cache???? - #FIX_ME# */
519 /* mcr p15, 0, r11, c7, c11, 1 */
520 cmp r9, #1 /* Check whether L2 inval is required or not*/
521 bne skip_l2_inval
522clean_l2:
523 /* read clidr */
524 mrc p15, 1, r0, c0, c0, 1
525 /* extract loc from clidr */
526 ands r3, r0, #0x7000000
527 /* left align loc bit field */
528 mov r3, r3, lsr #23
529 /* if loc is 0, then no need to clean */
530 beq finished
531 /* start clean at cache level 0 */
532 mov r10, #0
533loop1:
534 /* work out 3x current cache level */
535 add r2, r10, r10, lsr #1
536 /* extract cache type bits from clidr*/
537 mov r1, r0, lsr r2
538 /* mask of the bits for current cache only */
539 and r1, r1, #7
540 /* see what cache we have at this level */
541 cmp r1, #2
542 /* skip if no cache, or just i-cache */
543 blt skip
544 /* select current cache level in cssr */
545 mcr p15, 2, r10, c0, c0, 0
546 /* isb to sych the new cssr&csidr */
547 isb
548 /* read the new csidr */
549 mrc p15, 1, r1, c0, c0, 0
550 /* extract the length of the cache lines */
551 and r2, r1, #7
552 /* add 4 (line length offset) */
553 add r2, r2, #4
554 ldr r4, assoc_mask
555 /* find maximum number on the way size */
556 ands r4, r4, r1, lsr #3
557 /* find bit position of way size increment */
558 clz r5, r4
559 ldr r7, numset_mask
560 /* extract max number of the index size*/
561 ands r7, r7, r1, lsr #13
562loop2:
563 mov r9, r4
564 /* create working copy of max way size*/
565loop3:
566 /* factor way and cache number into r11 */
567 orr r11, r10, r9, lsl r5
568 /* factor index number into r11 */
569 orr r11, r11, r7, lsl r2
570 /*clean & invalidate by set/way */
571 mcr p15, 0, r11, c7, c10, 2
572 /* decrement the way*/
573 subs r9, r9, #1
574 bge loop3
575 /*decrement the index */
576 subs r7, r7, #1
577 bge loop2
578skip:
579 add r10, r10, #2
580 /* increment cache number */
581 cmp r3, r10
582 bgt loop1
583finished:
584 /*swith back to cache level 0 */
585 mov r10, #0
586 /* select current cache level in cssr */
587 mcr p15, 2, r10, c0, c0, 0
588 isb
589skip_l2_inval:
590 /* Data memory barrier and Data sync barrier */
591 mov r1, #0
592 mcr p15, 0, r1, c7, c10, 4
593 mcr p15, 0, r1, c7, c10, 5
594 581
595 wfi @ wait for interrupt 582/* This function implements the erratum ID i443 WA, applies to 34xx >= ES3.0 */
596 nop 583 .text
597 nop 584 .align 3
598 nop 585ENTRY(es3_sdrc_fix)
599 nop 586 ldr r4, sdrc_syscfg @ get config addr
600 nop 587 ldr r5, [r4] @ get value
601 nop 588 tst r5, #0x100 @ is part access blocked
602 nop 589 it eq
603 nop 590 biceq r5, r5, #0x100 @ clear bit if set
604 nop 591 str r5, [r4] @ write back change
605 nop 592 ldr r4, sdrc_mr_0 @ get config addr
606 bl wait_sdrc_ok 593 ldr r5, [r4] @ get value
607 /* restore regs and return */ 594 str r5, [r4] @ write back change
608 ldmfd sp!, {r0-r12, pc} 595 ldr r4, sdrc_emr2_0 @ get config addr
596 ldr r5, [r4] @ get value
597 str r5, [r4] @ write back change
598 ldr r4, sdrc_manual_0 @ get config addr
599 mov r5, #0x2 @ autorefresh command
600 str r5, [r4] @ kick off refreshes
601 ldr r4, sdrc_mr_1 @ get config addr
602 ldr r5, [r4] @ get value
603 str r5, [r4] @ write back change
604 ldr r4, sdrc_emr2_1 @ get config addr
605 ldr r5, [r4] @ get value
606 str r5, [r4] @ write back change
607 ldr r4, sdrc_manual_1 @ get config addr
608 mov r5, #0x2 @ autorefresh command
609 str r5, [r4] @ kick off refreshes
610 bx lr
611
612 .align
613sdrc_syscfg:
614 .word SDRC_SYSCONFIG_P
615sdrc_mr_0:
616 .word SDRC_MR_0_P
617sdrc_emr2_0:
618 .word SDRC_EMR2_0_P
619sdrc_manual_0:
620 .word SDRC_MANUAL_0_P
621sdrc_mr_1:
622 .word SDRC_MR_1_P
623sdrc_emr2_1:
624 .word SDRC_EMR2_1_P
625sdrc_manual_1:
626 .word SDRC_MANUAL_1_P
627ENDPROC(es3_sdrc_fix)
628ENTRY(es3_sdrc_fix_sz)
629 .word . - es3_sdrc_fix
630
631/*
632 * This function implements the erratum ID i581 WA:
633 * SDRC state restore before accessing the SDRAM
634 *
635 * Only used at return from non-OFF mode. For OFF
636 * mode the ROM code configures the SDRC and
637 * the DPLL before calling the restore code directly
638 * from DDR.
639 */
609 640
610/* Make sure SDRC accesses are ok */ 641/* Make sure SDRC accesses are ok */
611wait_sdrc_ok: 642wait_sdrc_ok:
612 ldr r4, cm_idlest1_core 643
613 ldr r5, [r4] 644/* DPLL3 must be locked before accessing the SDRC. Maybe the HW ensures this */
614 and r5, r5, #0x2 645 ldr r4, cm_idlest_ckgen
615 cmp r5, #0 646wait_dpll3_lock:
616 bne wait_sdrc_ok 647 ldr r5, [r4]
617 ldr r4, sdrc_power 648 tst r5, #1
618 ldr r5, [r4] 649 beq wait_dpll3_lock
619 bic r5, r5, #0x40 650
620 str r5, [r4] 651 ldr r4, cm_idlest1_core
652wait_sdrc_ready:
653 ldr r5, [r4]
654 tst r5, #0x2
655 bne wait_sdrc_ready
656 /* allow DLL powerdown upon hw idle req */
657 ldr r4, sdrc_power
658 ldr r5, [r4]
659 bic r5, r5, #0x40
660 str r5, [r4]
661
662/*
663 * PC-relative stores lead to undefined behaviour in Thumb-2: use a r7 as a
664 * base instead.
665 * Be careful not to clobber r7 when maintaing this code.
666 */
667
668is_dll_in_lock_mode:
669 /* Is dll in lock mode? */
670 ldr r4, sdrc_dlla_ctrl
671 ldr r5, [r4]
672 tst r5, #0x4
673 bxne lr @ Return if locked
674 /* wait till dll locks */
675 adr r7, kick_counter
676wait_dll_lock_timed:
677 ldr r4, wait_dll_lock_counter
678 add r4, r4, #1
679 str r4, [r7, #wait_dll_lock_counter - kick_counter]
680 ldr r4, sdrc_dlla_status
681 /* Wait 20uS for lock */
682 mov r6, #8
621wait_dll_lock: 683wait_dll_lock:
622 /* Is dll in lock mode? */ 684 subs r6, r6, #0x1
623 ldr r4, sdrc_dlla_ctrl 685 beq kick_dll
624 ldr r5, [r4] 686 ldr r5, [r4]
625 tst r5, #0x4 687 and r5, r5, #0x4
626 bxne lr 688 cmp r5, #0x4
627 /* wait till dll locks */ 689 bne wait_dll_lock
628 ldr r4, sdrc_dlla_status 690 bx lr @ Return when locked
629 ldr r5, [r4] 691
630 and r5, r5, #0x4 692 /* disable/reenable DLL if not locked */
631 cmp r5, #0x4 693kick_dll:
632 bne wait_dll_lock 694 ldr r4, sdrc_dlla_ctrl
633 bx lr 695 ldr r5, [r4]
696 mov r6, r5
697 bic r6, #(1<<3) @ disable dll
698 str r6, [r4]
699 dsb
700 orr r6, r6, #(1<<3) @ enable dll
701 str r6, [r4]
702 dsb
703 ldr r4, kick_counter
704 add r4, r4, #1
705 str r4, [r7] @ kick_counter
706 b wait_dll_lock_timed
634 707
708 .align
635cm_idlest1_core: 709cm_idlest1_core:
636 .word CM_IDLEST1_CORE_V 710 .word CM_IDLEST1_CORE_V
711cm_idlest_ckgen:
712 .word CM_IDLEST_CKGEN_V
637sdrc_dlla_status: 713sdrc_dlla_status:
638 .word SDRC_DLLA_STATUS_V 714 .word SDRC_DLLA_STATUS_V
639sdrc_dlla_ctrl: 715sdrc_dlla_ctrl:
640 .word SDRC_DLLA_CTRL_V 716 .word SDRC_DLLA_CTRL_V
641pm_prepwstst_core:
642 .word PM_PREPWSTST_CORE_V
643pm_prepwstst_core_p: 717pm_prepwstst_core_p:
644 .word PM_PREPWSTST_CORE_P 718 .word PM_PREPWSTST_CORE_P
645pm_prepwstst_mpu:
646 .word PM_PREPWSTST_MPU_V
647pm_pwstctrl_mpu: 719pm_pwstctrl_mpu:
648 .word PM_PWSTCTRL_MPU_P 720 .word PM_PWSTCTRL_MPU_P
649scratchpad_base: 721scratchpad_base:
@@ -651,13 +723,7 @@ scratchpad_base:
651sram_base: 723sram_base:
652 .word SRAM_BASE_P + 0x8000 724 .word SRAM_BASE_P + 0x8000
653sdrc_power: 725sdrc_power:
654 .word SDRC_POWER_V 726 .word SDRC_POWER_V
655clk_stabilize_delay:
656 .word 0x000001FF
657assoc_mask:
658 .word 0x3ff
659numset_mask:
660 .word 0x7fff
661ttbrbit_mask: 727ttbrbit_mask:
662 .word 0xFFFFC000 728 .word 0xFFFFC000
663table_index_mask: 729table_index_mask:
@@ -668,5 +734,21 @@ cache_pred_disable_mask:
668 .word 0xFFFFE7FB 734 .word 0xFFFFE7FB
669control_stat: 735control_stat:
670 .word CONTROL_STAT 736 .word CONTROL_STAT
737control_mem_rta:
738 .word CONTROL_MEM_RTA_CTRL
739kernel_flush:
740 .word v7_flush_dcache_all
741l2dis_3630:
742 .word 0
743 /*
744 * When exporting to userspace while the counters are in SRAM,
745 * these 2 words need to be at the end to facilitate retrival!
746 */
747kick_counter:
748 .word 0
749wait_dll_lock_counter:
750 .word 0
751ENDPROC(omap34xx_cpu_suspend)
752
671ENTRY(omap34xx_cpu_suspend_sz) 753ENTRY(omap34xx_cpu_suspend_sz)
672 .word . - omap34xx_cpu_suspend 754 .word . - omap34xx_cpu_suspend
diff --git a/arch/arm/mach-omap2/smartreflex-class3.c b/arch/arm/mach-omap2/smartreflex-class3.c
new file mode 100644
index 000000000000..f438cf4d847b
--- /dev/null
+++ b/arch/arm/mach-omap2/smartreflex-class3.c
@@ -0,0 +1,59 @@
1/*
2 * Smart reflex Class 3 specific implementations
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Copyright (C) 2010 Texas Instruments, Inc.
7 * Thara Gopinath <thara@ti.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#include "smartreflex.h"
15
16static int sr_class3_enable(struct voltagedomain *voltdm)
17{
18 unsigned long volt = omap_voltage_get_nom_volt(voltdm);
19
20 if (!volt) {
21 pr_warning("%s: Curr voltage unknown. Cannot enable sr_%s\n",
22 __func__, voltdm->name);
23 return -ENODATA;
24 }
25
26 omap_vp_enable(voltdm);
27 return sr_enable(voltdm, volt);
28}
29
30static int sr_class3_disable(struct voltagedomain *voltdm, int is_volt_reset)
31{
32 omap_vp_disable(voltdm);
33 sr_disable(voltdm);
34 if (is_volt_reset)
35 omap_voltage_reset(voltdm);
36
37 return 0;
38}
39
40static int sr_class3_configure(struct voltagedomain *voltdm)
41{
42 return sr_configure_errgen(voltdm);
43}
44
45/* SR class3 structure */
46static struct omap_sr_class_data class3_data = {
47 .enable = sr_class3_enable,
48 .disable = sr_class3_disable,
49 .configure = sr_class3_configure,
50 .class_type = SR_CLASS3,
51};
52
53/* Smartreflex Class3 init API to be called from board file */
54static int __init sr_class3_init(void)
55{
56 pr_info("SmartReflex Class3 initialized\n");
57 return sr_register_class(&class3_data);
58}
59late_initcall(sr_class3_init);
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c
new file mode 100644
index 000000000000..fb7dc52394a8
--- /dev/null
+++ b/arch/arm/mach-omap2/smartreflex.c
@@ -0,0 +1,1043 @@
1/*
2 * OMAP SmartReflex Voltage Control
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Copyright (C) 2010 Texas Instruments, Inc.
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008 Nokia Corporation
10 * Kalle Jokiniemi
11 *
12 * Copyright (C) 2007 Texas Instruments, Inc.
13 * Lesly A M <x0080970@ti.com>
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20#include <linux/interrupt.h>
21#include <linux/clk.h>
22#include <linux/io.h>
23#include <linux/debugfs.h>
24#include <linux/delay.h>
25#include <linux/slab.h>
26#include <linux/pm_runtime.h>
27
28#include <plat/common.h>
29
30#include "pm.h"
31#include "smartreflex.h"
32
33#define SMARTREFLEX_NAME_LEN 16
34#define NVALUE_NAME_LEN 40
35#define SR_DISABLE_TIMEOUT 200
36
37struct omap_sr {
38 int srid;
39 int ip_type;
40 int nvalue_count;
41 bool autocomp_active;
42 u32 clk_length;
43 u32 err_weight;
44 u32 err_minlimit;
45 u32 err_maxlimit;
46 u32 accum_data;
47 u32 senn_avgweight;
48 u32 senp_avgweight;
49 u32 senp_mod;
50 u32 senn_mod;
51 unsigned int irq;
52 void __iomem *base;
53 struct platform_device *pdev;
54 struct list_head node;
55 struct omap_sr_nvalue_table *nvalue_table;
56 struct voltagedomain *voltdm;
57 struct dentry *dbg_dir;
58};
59
60/* sr_list contains all the instances of smartreflex module */
61static LIST_HEAD(sr_list);
62
63static struct omap_sr_class_data *sr_class;
64static struct omap_sr_pmic_data *sr_pmic_data;
65
66static inline void sr_write_reg(struct omap_sr *sr, unsigned offset, u32 value)
67{
68 __raw_writel(value, (sr->base + offset));
69}
70
71static inline void sr_modify_reg(struct omap_sr *sr, unsigned offset, u32 mask,
72 u32 value)
73{
74 u32 reg_val;
75 u32 errconfig_offs = 0, errconfig_mask = 0;
76
77 reg_val = __raw_readl(sr->base + offset);
78 reg_val &= ~mask;
79
80 /*
81 * Smartreflex error config register is special as it contains
82 * certain status bits which if written a 1 into means a clear
83 * of those bits. So in order to make sure no accidental write of
84 * 1 happens to those status bits, do a clear of them in the read
85 * value. This mean this API doesn't rewrite values in these bits
86 * if they are currently set, but does allow the caller to write
87 * those bits.
88 */
89 if (sr->ip_type == SR_TYPE_V1) {
90 errconfig_offs = ERRCONFIG_V1;
91 errconfig_mask = ERRCONFIG_STATUS_V1_MASK;
92 } else if (sr->ip_type == SR_TYPE_V2) {
93 errconfig_offs = ERRCONFIG_V2;
94 errconfig_mask = ERRCONFIG_VPBOUNDINTST_V2;
95 }
96
97 if (offset == errconfig_offs)
98 reg_val &= ~errconfig_mask;
99
100 reg_val |= value;
101
102 __raw_writel(reg_val, (sr->base + offset));
103}
104
105static inline u32 sr_read_reg(struct omap_sr *sr, unsigned offset)
106{
107 return __raw_readl(sr->base + offset);
108}
109
110static struct omap_sr *_sr_lookup(struct voltagedomain *voltdm)
111{
112 struct omap_sr *sr_info;
113
114 if (!voltdm) {
115 pr_err("%s: Null voltage domain passed!\n", __func__);
116 return ERR_PTR(-EINVAL);
117 }
118
119 list_for_each_entry(sr_info, &sr_list, node) {
120 if (voltdm == sr_info->voltdm)
121 return sr_info;
122 }
123
124 return ERR_PTR(-ENODATA);
125}
126
127static irqreturn_t sr_interrupt(int irq, void *data)
128{
129 struct omap_sr *sr_info = (struct omap_sr *)data;
130 u32 status = 0;
131
132 if (sr_info->ip_type == SR_TYPE_V1) {
133 /* Read the status bits */
134 status = sr_read_reg(sr_info, ERRCONFIG_V1);
135
136 /* Clear them by writing back */
137 sr_write_reg(sr_info, ERRCONFIG_V1, status);
138 } else if (sr_info->ip_type == SR_TYPE_V2) {
139 /* Read the status bits */
140 sr_read_reg(sr_info, IRQSTATUS);
141
142 /* Clear them by writing back */
143 sr_write_reg(sr_info, IRQSTATUS, status);
144 }
145
146 if (sr_class->class_type == SR_CLASS2 && sr_class->notify)
147 sr_class->notify(sr_info->voltdm, status);
148
149 return IRQ_HANDLED;
150}
151
152static void sr_set_clk_length(struct omap_sr *sr)
153{
154 struct clk *sys_ck;
155 u32 sys_clk_speed;
156
157 if (cpu_is_omap34xx())
158 sys_ck = clk_get(NULL, "sys_ck");
159 else
160 sys_ck = clk_get(NULL, "sys_clkin_ck");
161
162 if (IS_ERR(sys_ck)) {
163 dev_err(&sr->pdev->dev, "%s: unable to get sys clk\n",
164 __func__);
165 return;
166 }
167 sys_clk_speed = clk_get_rate(sys_ck);
168 clk_put(sys_ck);
169
170 switch (sys_clk_speed) {
171 case 12000000:
172 sr->clk_length = SRCLKLENGTH_12MHZ_SYSCLK;
173 break;
174 case 13000000:
175 sr->clk_length = SRCLKLENGTH_13MHZ_SYSCLK;
176 break;
177 case 19200000:
178 sr->clk_length = SRCLKLENGTH_19MHZ_SYSCLK;
179 break;
180 case 26000000:
181 sr->clk_length = SRCLKLENGTH_26MHZ_SYSCLK;
182 break;
183 case 38400000:
184 sr->clk_length = SRCLKLENGTH_38MHZ_SYSCLK;
185 break;
186 default:
187 dev_err(&sr->pdev->dev, "%s: Invalid sysclk value: %d\n",
188 __func__, sys_clk_speed);
189 break;
190 }
191}
192
193static void sr_set_regfields(struct omap_sr *sr)
194{
195 /*
196 * For time being these values are defined in smartreflex.h
197 * and populated during init. May be they can be moved to board
198 * file or pmic specific data structure. In that case these structure
199 * fields will have to be populated using the pdata or pmic structure.
200 */
201 if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
202 sr->err_weight = OMAP3430_SR_ERRWEIGHT;
203 sr->err_maxlimit = OMAP3430_SR_ERRMAXLIMIT;
204 sr->accum_data = OMAP3430_SR_ACCUMDATA;
205 if (!(strcmp(sr->voltdm->name, "mpu"))) {
206 sr->senn_avgweight = OMAP3430_SR1_SENNAVGWEIGHT;
207 sr->senp_avgweight = OMAP3430_SR1_SENPAVGWEIGHT;
208 } else {
209 sr->senn_avgweight = OMAP3430_SR2_SENNAVGWEIGHT;
210 sr->senp_avgweight = OMAP3430_SR2_SENPAVGWEIGHT;
211 }
212 }
213}
214
215static void sr_start_vddautocomp(struct omap_sr *sr)
216{
217 if (!sr_class || !(sr_class->enable) || !(sr_class->configure)) {
218 dev_warn(&sr->pdev->dev,
219 "%s: smartreflex class driver not registered\n",
220 __func__);
221 return;
222 }
223
224 if (!sr_class->enable(sr->voltdm))
225 sr->autocomp_active = true;
226}
227
228static void sr_stop_vddautocomp(struct omap_sr *sr)
229{
230 if (!sr_class || !(sr_class->disable)) {
231 dev_warn(&sr->pdev->dev,
232 "%s: smartreflex class driver not registered\n",
233 __func__);
234 return;
235 }
236
237 if (sr->autocomp_active) {
238 sr_class->disable(sr->voltdm, 1);
239 sr->autocomp_active = false;
240 }
241}
242
243/*
244 * This function handles the intializations which have to be done
245 * only when both sr device and class driver regiter has
246 * completed. This will be attempted to be called from both sr class
247 * driver register and sr device intializtion API's. Only one call
248 * will ultimately succeed.
249 *
250 * Currently this function registers interrrupt handler for a particular SR
251 * if smartreflex class driver is already registered and has
252 * requested for interrupts and the SR interrupt line in present.
253 */
254static int sr_late_init(struct omap_sr *sr_info)
255{
256 char *name;
257 struct omap_sr_data *pdata = sr_info->pdev->dev.platform_data;
258 struct resource *mem;
259 int ret = 0;
260
261 if (sr_class->class_type == SR_CLASS2 &&
262 sr_class->notify_flags && sr_info->irq) {
263
264 name = kasprintf(GFP_KERNEL, "sr_%s", sr_info->voltdm->name);
265 if (name == NULL) {
266 ret = -ENOMEM;
267 goto error;
268 }
269 ret = request_irq(sr_info->irq, sr_interrupt,
270 0, name, (void *)sr_info);
271 if (ret)
272 goto error;
273 }
274
275 if (pdata && pdata->enable_on_init)
276 sr_start_vddautocomp(sr_info);
277
278 return ret;
279
280error:
281 iounmap(sr_info->base);
282 mem = platform_get_resource(sr_info->pdev, IORESOURCE_MEM, 0);
283 release_mem_region(mem->start, resource_size(mem));
284 list_del(&sr_info->node);
285 dev_err(&sr_info->pdev->dev, "%s: ERROR in registering"
286 "interrupt handler. Smartreflex will"
287 "not function as desired\n", __func__);
288 kfree(name);
289 kfree(sr_info);
290 return ret;
291}
292
293static void sr_v1_disable(struct omap_sr *sr)
294{
295 int timeout = 0;
296
297 /* Enable MCUDisableAcknowledge interrupt */
298 sr_modify_reg(sr, ERRCONFIG_V1,
299 ERRCONFIG_MCUDISACKINTEN, ERRCONFIG_MCUDISACKINTEN);
300
301 /* SRCONFIG - disable SR */
302 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
303
304 /* Disable all other SR interrupts and clear the status */
305 sr_modify_reg(sr, ERRCONFIG_V1,
306 (ERRCONFIG_MCUACCUMINTEN | ERRCONFIG_MCUVALIDINTEN |
307 ERRCONFIG_MCUBOUNDINTEN | ERRCONFIG_VPBOUNDINTEN_V1),
308 (ERRCONFIG_MCUACCUMINTST | ERRCONFIG_MCUVALIDINTST |
309 ERRCONFIG_MCUBOUNDINTST |
310 ERRCONFIG_VPBOUNDINTST_V1));
311
312 /*
313 * Wait for SR to be disabled.
314 * wait until ERRCONFIG.MCUDISACKINTST = 1. Typical latency is 1us.
315 */
316 omap_test_timeout((sr_read_reg(sr, ERRCONFIG_V1) &
317 ERRCONFIG_MCUDISACKINTST), SR_DISABLE_TIMEOUT,
318 timeout);
319
320 if (timeout >= SR_DISABLE_TIMEOUT)
321 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n",
322 __func__);
323
324 /* Disable MCUDisableAcknowledge interrupt & clear pending interrupt */
325 sr_modify_reg(sr, ERRCONFIG_V1, ERRCONFIG_MCUDISACKINTEN,
326 ERRCONFIG_MCUDISACKINTST);
327}
328
329static void sr_v2_disable(struct omap_sr *sr)
330{
331 int timeout = 0;
332
333 /* Enable MCUDisableAcknowledge interrupt */
334 sr_write_reg(sr, IRQENABLE_SET, IRQENABLE_MCUDISABLEACKINT);
335
336 /* SRCONFIG - disable SR */
337 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
338
339 /* Disable all other SR interrupts and clear the status */
340 sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2,
341 ERRCONFIG_VPBOUNDINTST_V2);
342 sr_write_reg(sr, IRQENABLE_CLR, (IRQENABLE_MCUACCUMINT |
343 IRQENABLE_MCUVALIDINT |
344 IRQENABLE_MCUBOUNDSINT));
345 sr_write_reg(sr, IRQSTATUS, (IRQSTATUS_MCUACCUMINT |
346 IRQSTATUS_MCVALIDINT |
347 IRQSTATUS_MCBOUNDSINT));
348
349 /*
350 * Wait for SR to be disabled.
351 * wait until IRQSTATUS.MCUDISACKINTST = 1. Typical latency is 1us.
352 */
353 omap_test_timeout((sr_read_reg(sr, IRQSTATUS) &
354 IRQSTATUS_MCUDISABLEACKINT), SR_DISABLE_TIMEOUT,
355 timeout);
356
357 if (timeout >= SR_DISABLE_TIMEOUT)
358 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n",
359 __func__);
360
361 /* Disable MCUDisableAcknowledge interrupt & clear pending interrupt */
362 sr_write_reg(sr, IRQENABLE_CLR, IRQENABLE_MCUDISABLEACKINT);
363 sr_write_reg(sr, IRQSTATUS, IRQSTATUS_MCUDISABLEACKINT);
364}
365
366static u32 sr_retrieve_nvalue(struct omap_sr *sr, u32 efuse_offs)
367{
368 int i;
369
370 if (!sr->nvalue_table) {
371 dev_warn(&sr->pdev->dev, "%s: Missing ntarget value table\n",
372 __func__);
373 return 0;
374 }
375
376 for (i = 0; i < sr->nvalue_count; i++) {
377 if (sr->nvalue_table[i].efuse_offs == efuse_offs)
378 return sr->nvalue_table[i].nvalue;
379 }
380
381 return 0;
382}
383
384/* Public Functions */
385
386/**
387 * sr_configure_errgen() - Configures the smrtreflex to perform AVS using the
388 * error generator module.
389 * @voltdm: VDD pointer to which the SR module to be configured belongs to.
390 *
391 * This API is to be called from the smartreflex class driver to
392 * configure the error generator module inside the smartreflex module.
393 * SR settings if using the ERROR module inside Smartreflex.
394 * SR CLASS 3 by default uses only the ERROR module where as
395 * SR CLASS 2 can choose between ERROR module and MINMAXAVG
396 * module. Returns 0 on success and error value in case of failure.
397 */
398int sr_configure_errgen(struct voltagedomain *voltdm)
399{
400 u32 sr_config, sr_errconfig, errconfig_offs, vpboundint_en;
401 u32 vpboundint_st, senp_en = 0, senn_en = 0;
402 u8 senp_shift, senn_shift;
403 struct omap_sr *sr = _sr_lookup(voltdm);
404
405 if (IS_ERR(sr)) {
406 pr_warning("%s: omap_sr struct for sr_%s not found\n",
407 __func__, voltdm->name);
408 return -EINVAL;
409 }
410
411 if (!sr->clk_length)
412 sr_set_clk_length(sr);
413
414 senp_en = sr->senp_mod;
415 senn_en = sr->senn_mod;
416
417 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) |
418 SRCONFIG_SENENABLE | SRCONFIG_ERRGEN_EN;
419
420 if (sr->ip_type == SR_TYPE_V1) {
421 sr_config |= SRCONFIG_DELAYCTRL;
422 senn_shift = SRCONFIG_SENNENABLE_V1_SHIFT;
423 senp_shift = SRCONFIG_SENPENABLE_V1_SHIFT;
424 errconfig_offs = ERRCONFIG_V1;
425 vpboundint_en = ERRCONFIG_VPBOUNDINTEN_V1;
426 vpboundint_st = ERRCONFIG_VPBOUNDINTST_V1;
427 } else if (sr->ip_type == SR_TYPE_V2) {
428 senn_shift = SRCONFIG_SENNENABLE_V2_SHIFT;
429 senp_shift = SRCONFIG_SENPENABLE_V2_SHIFT;
430 errconfig_offs = ERRCONFIG_V2;
431 vpboundint_en = ERRCONFIG_VPBOUNDINTEN_V2;
432 vpboundint_st = ERRCONFIG_VPBOUNDINTST_V2;
433 } else {
434 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex"
435 "module without specifying the ip\n", __func__);
436 return -EINVAL;
437 }
438
439 sr_config |= ((senn_en << senn_shift) | (senp_en << senp_shift));
440 sr_write_reg(sr, SRCONFIG, sr_config);
441 sr_errconfig = (sr->err_weight << ERRCONFIG_ERRWEIGHT_SHIFT) |
442 (sr->err_maxlimit << ERRCONFIG_ERRMAXLIMIT_SHIFT) |
443 (sr->err_minlimit << ERRCONFIG_ERRMINLIMIT_SHIFT);
444 sr_modify_reg(sr, errconfig_offs, (SR_ERRWEIGHT_MASK |
445 SR_ERRMAXLIMIT_MASK | SR_ERRMINLIMIT_MASK),
446 sr_errconfig);
447
448 /* Enabling the interrupts if the ERROR module is used */
449 sr_modify_reg(sr, errconfig_offs,
450 vpboundint_en, (vpboundint_en | vpboundint_st));
451
452 return 0;
453}
454
455/**
456 * sr_configure_minmax() - Configures the smrtreflex to perform AVS using the
457 * minmaxavg module.
458 * @voltdm: VDD pointer to which the SR module to be configured belongs to.
459 *
460 * This API is to be called from the smartreflex class driver to
461 * configure the minmaxavg module inside the smartreflex module.
462 * SR settings if using the ERROR module inside Smartreflex.
463 * SR CLASS 3 by default uses only the ERROR module where as
464 * SR CLASS 2 can choose between ERROR module and MINMAXAVG
465 * module. Returns 0 on success and error value in case of failure.
466 */
467int sr_configure_minmax(struct voltagedomain *voltdm)
468{
469 u32 sr_config, sr_avgwt;
470 u32 senp_en = 0, senn_en = 0;
471 u8 senp_shift, senn_shift;
472 struct omap_sr *sr = _sr_lookup(voltdm);
473
474 if (IS_ERR(sr)) {
475 pr_warning("%s: omap_sr struct for sr_%s not found\n",
476 __func__, voltdm->name);
477 return -EINVAL;
478 }
479
480 if (!sr->clk_length)
481 sr_set_clk_length(sr);
482
483 senp_en = sr->senp_mod;
484 senn_en = sr->senn_mod;
485
486 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) |
487 SRCONFIG_SENENABLE |
488 (sr->accum_data << SRCONFIG_ACCUMDATA_SHIFT);
489
490 if (sr->ip_type == SR_TYPE_V1) {
491 sr_config |= SRCONFIG_DELAYCTRL;
492 senn_shift = SRCONFIG_SENNENABLE_V1_SHIFT;
493 senp_shift = SRCONFIG_SENPENABLE_V1_SHIFT;
494 } else if (sr->ip_type == SR_TYPE_V2) {
495 senn_shift = SRCONFIG_SENNENABLE_V2_SHIFT;
496 senp_shift = SRCONFIG_SENPENABLE_V2_SHIFT;
497 } else {
498 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex"
499 "module without specifying the ip\n", __func__);
500 return -EINVAL;
501 }
502
503 sr_config |= ((senn_en << senn_shift) | (senp_en << senp_shift));
504 sr_write_reg(sr, SRCONFIG, sr_config);
505 sr_avgwt = (sr->senp_avgweight << AVGWEIGHT_SENPAVGWEIGHT_SHIFT) |
506 (sr->senn_avgweight << AVGWEIGHT_SENNAVGWEIGHT_SHIFT);
507 sr_write_reg(sr, AVGWEIGHT, sr_avgwt);
508
509 /*
510 * Enabling the interrupts if MINMAXAVG module is used.
511 * TODO: check if all the interrupts are mandatory
512 */
513 if (sr->ip_type == SR_TYPE_V1) {
514 sr_modify_reg(sr, ERRCONFIG_V1,
515 (ERRCONFIG_MCUACCUMINTEN | ERRCONFIG_MCUVALIDINTEN |
516 ERRCONFIG_MCUBOUNDINTEN),
517 (ERRCONFIG_MCUACCUMINTEN | ERRCONFIG_MCUACCUMINTST |
518 ERRCONFIG_MCUVALIDINTEN | ERRCONFIG_MCUVALIDINTST |
519 ERRCONFIG_MCUBOUNDINTEN | ERRCONFIG_MCUBOUNDINTST));
520 } else if (sr->ip_type == SR_TYPE_V2) {
521 sr_write_reg(sr, IRQSTATUS,
522 IRQSTATUS_MCUACCUMINT | IRQSTATUS_MCVALIDINT |
523 IRQSTATUS_MCBOUNDSINT | IRQSTATUS_MCUDISABLEACKINT);
524 sr_write_reg(sr, IRQENABLE_SET,
525 IRQENABLE_MCUACCUMINT | IRQENABLE_MCUVALIDINT |
526 IRQENABLE_MCUBOUNDSINT | IRQENABLE_MCUDISABLEACKINT);
527 }
528
529 return 0;
530}
531
532/**
533 * sr_enable() - Enables the smartreflex module.
534 * @voltdm: VDD pointer to which the SR module to be configured belongs to.
535 * @volt: The voltage at which the Voltage domain associated with
536 * the smartreflex module is operating at.
537 * This is required only to program the correct Ntarget value.
538 *
539 * This API is to be called from the smartreflex class driver to
540 * enable a smartreflex module. Returns 0 on success. Returns error
541 * value if the voltage passed is wrong or if ntarget value is wrong.
542 */
543int sr_enable(struct voltagedomain *voltdm, unsigned long volt)
544{
545 u32 nvalue_reciprocal;
546 struct omap_volt_data *volt_data;
547 struct omap_sr *sr = _sr_lookup(voltdm);
548 int ret;
549
550 if (IS_ERR(sr)) {
551 pr_warning("%s: omap_sr struct for sr_%s not found\n",
552 __func__, voltdm->name);
553 return -EINVAL;
554 }
555
556 volt_data = omap_voltage_get_voltdata(sr->voltdm, volt);
557
558 if (IS_ERR(volt_data)) {
559 dev_warn(&sr->pdev->dev, "%s: Unable to get voltage table"
560 "for nominal voltage %ld\n", __func__, volt);
561 return -ENODATA;
562 }
563
564 nvalue_reciprocal = sr_retrieve_nvalue(sr, volt_data->sr_efuse_offs);
565
566 if (!nvalue_reciprocal) {
567 dev_warn(&sr->pdev->dev, "%s: NVALUE = 0 at voltage %ld\n",
568 __func__, volt);
569 return -ENODATA;
570 }
571
572 /* errminlimit is opp dependent and hence linked to voltage */
573 sr->err_minlimit = volt_data->sr_errminlimit;
574
575 pm_runtime_get_sync(&sr->pdev->dev);
576
577 /* Check if SR is already enabled. If yes do nothing */
578 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE)
579 return 0;
580
581 /* Configure SR */
582 ret = sr_class->configure(voltdm);
583 if (ret)
584 return ret;
585
586 sr_write_reg(sr, NVALUERECIPROCAL, nvalue_reciprocal);
587
588 /* SRCONFIG - enable SR */
589 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, SRCONFIG_SRENABLE);
590 return 0;
591}
592
593/**
594 * sr_disable() - Disables the smartreflex module.
595 * @voltdm: VDD pointer to which the SR module to be configured belongs to.
596 *
597 * This API is to be called from the smartreflex class driver to
598 * disable a smartreflex module.
599 */
600void sr_disable(struct voltagedomain *voltdm)
601{
602 struct omap_sr *sr = _sr_lookup(voltdm);
603
604 if (IS_ERR(sr)) {
605 pr_warning("%s: omap_sr struct for sr_%s not found\n",
606 __func__, voltdm->name);
607 return;
608 }
609
610 /* Check if SR clocks are already disabled. If yes do nothing */
611 if (pm_runtime_suspended(&sr->pdev->dev))
612 return;
613
614 /*
615 * Disable SR if only it is indeed enabled. Else just
616 * disable the clocks.
617 */
618 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE) {
619 if (sr->ip_type == SR_TYPE_V1)
620 sr_v1_disable(sr);
621 else if (sr->ip_type == SR_TYPE_V2)
622 sr_v2_disable(sr);
623 }
624
625 pm_runtime_put_sync(&sr->pdev->dev);
626}
627
628/**
629 * sr_register_class() - API to register a smartreflex class parameters.
630 * @class_data: The structure containing various sr class specific data.
631 *
632 * This API is to be called by the smartreflex class driver to register itself
633 * with the smartreflex driver during init. Returns 0 on success else the
634 * error value.
635 */
636int sr_register_class(struct omap_sr_class_data *class_data)
637{
638 struct omap_sr *sr_info;
639
640 if (!class_data) {
641 pr_warning("%s:, Smartreflex class data passed is NULL\n",
642 __func__);
643 return -EINVAL;
644 }
645
646 if (sr_class) {
647 pr_warning("%s: Smartreflex class driver already registered\n",
648 __func__);
649 return -EBUSY;
650 }
651
652 sr_class = class_data;
653
654 /*
655 * Call into late init to do intializations that require
656 * both sr driver and sr class driver to be initiallized.
657 */
658 list_for_each_entry(sr_info, &sr_list, node)
659 sr_late_init(sr_info);
660
661 return 0;
662}
663
664/**
665 * omap_sr_enable() - API to enable SR clocks and to call into the
666 * registered smartreflex class enable API.
667 * @voltdm: VDD pointer to which the SR module to be configured belongs to.
668 *
669 * This API is to be called from the kernel in order to enable
670 * a particular smartreflex module. This API will do the initial
671 * configurations to turn on the smartreflex module and in turn call
672 * into the registered smartreflex class enable API.
673 */
674void omap_sr_enable(struct voltagedomain *voltdm)
675{
676 struct omap_sr *sr = _sr_lookup(voltdm);
677
678 if (IS_ERR(sr)) {
679 pr_warning("%s: omap_sr struct for sr_%s not found\n",
680 __func__, voltdm->name);
681 return;
682 }
683
684 if (!sr->autocomp_active)
685 return;
686
687 if (!sr_class || !(sr_class->enable) || !(sr_class->configure)) {
688 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not"
689 "registered\n", __func__);
690 return;
691 }
692
693 sr_class->enable(voltdm);
694}
695
696/**
697 * omap_sr_disable() - API to disable SR without resetting the voltage
698 * processor voltage
699 * @voltdm: VDD pointer to which the SR module to be configured belongs to.
700 *
701 * This API is to be called from the kernel in order to disable
702 * a particular smartreflex module. This API will in turn call
703 * into the registered smartreflex class disable API. This API will tell
704 * the smartreflex class disable not to reset the VP voltage after
705 * disabling smartreflex.
706 */
707void omap_sr_disable(struct voltagedomain *voltdm)
708{
709 struct omap_sr *sr = _sr_lookup(voltdm);
710
711 if (IS_ERR(sr)) {
712 pr_warning("%s: omap_sr struct for sr_%s not found\n",
713 __func__, voltdm->name);
714 return;
715 }
716
717 if (!sr->autocomp_active)
718 return;
719
720 if (!sr_class || !(sr_class->disable)) {
721 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not"
722 "registered\n", __func__);
723 return;
724 }
725
726 sr_class->disable(voltdm, 0);
727}
728
729/**
730 * omap_sr_disable_reset_volt() - API to disable SR and reset the
731 * voltage processor voltage
732 * @voltdm: VDD pointer to which the SR module to be configured belongs to.
733 *
734 * This API is to be called from the kernel in order to disable
735 * a particular smartreflex module. This API will in turn call
736 * into the registered smartreflex class disable API. This API will tell
737 * the smartreflex class disable to reset the VP voltage after
738 * disabling smartreflex.
739 */
740void omap_sr_disable_reset_volt(struct voltagedomain *voltdm)
741{
742 struct omap_sr *sr = _sr_lookup(voltdm);
743
744 if (IS_ERR(sr)) {
745 pr_warning("%s: omap_sr struct for sr_%s not found\n",
746 __func__, voltdm->name);
747 return;
748 }
749
750 if (!sr->autocomp_active)
751 return;
752
753 if (!sr_class || !(sr_class->disable)) {
754 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not"
755 "registered\n", __func__);
756 return;
757 }
758
759 sr_class->disable(voltdm, 1);
760}
761
762/**
763 * omap_sr_register_pmic() - API to register pmic specific info.
764 * @pmic_data: The structure containing pmic specific data.
765 *
766 * This API is to be called from the PMIC specific code to register with
767 * smartreflex driver pmic specific info. Currently the only info required
768 * is the smartreflex init on the PMIC side.
769 */
770void omap_sr_register_pmic(struct omap_sr_pmic_data *pmic_data)
771{
772 if (!pmic_data) {
773 pr_warning("%s: Trying to register NULL PMIC data structure"
774 "with smartreflex\n", __func__);
775 return;
776 }
777
778 sr_pmic_data = pmic_data;
779}
780
781/* PM Debug Fs enteries to enable disable smartreflex. */
782static int omap_sr_autocomp_show(void *data, u64 *val)
783{
784 struct omap_sr *sr_info = (struct omap_sr *) data;
785
786 if (!sr_info) {
787 pr_warning("%s: omap_sr struct not found\n", __func__);
788 return -EINVAL;
789 }
790
791 *val = sr_info->autocomp_active;
792
793 return 0;
794}
795
796static int omap_sr_autocomp_store(void *data, u64 val)
797{
798 struct omap_sr *sr_info = (struct omap_sr *) data;
799
800 if (!sr_info) {
801 pr_warning("%s: omap_sr struct not found\n", __func__);
802 return -EINVAL;
803 }
804
805 /* Sanity check */
806 if (val && (val != 1)) {
807 pr_warning("%s: Invalid argument %lld\n", __func__, val);
808 return -EINVAL;
809 }
810
811 if (!val)
812 sr_stop_vddautocomp(sr_info);
813 else
814 sr_start_vddautocomp(sr_info);
815
816 return 0;
817}
818
819DEFINE_SIMPLE_ATTRIBUTE(pm_sr_fops, omap_sr_autocomp_show,
820 omap_sr_autocomp_store, "%llu\n");
821
822static int __init omap_sr_probe(struct platform_device *pdev)
823{
824 struct omap_sr *sr_info = kzalloc(sizeof(struct omap_sr), GFP_KERNEL);
825 struct omap_sr_data *pdata = pdev->dev.platform_data;
826 struct resource *mem, *irq;
827 struct dentry *vdd_dbg_dir, *nvalue_dir;
828 struct omap_volt_data *volt_data;
829 int i, ret = 0;
830
831 if (!sr_info) {
832 dev_err(&pdev->dev, "%s: unable to allocate sr_info\n",
833 __func__);
834 return -ENOMEM;
835 }
836
837 if (!pdata) {
838 dev_err(&pdev->dev, "%s: platform data missing\n", __func__);
839 ret = -EINVAL;
840 goto err_free_devinfo;
841 }
842
843 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
844 if (!mem) {
845 dev_err(&pdev->dev, "%s: no mem resource\n", __func__);
846 ret = -ENODEV;
847 goto err_free_devinfo;
848 }
849
850 mem = request_mem_region(mem->start, resource_size(mem),
851 dev_name(&pdev->dev));
852 if (!mem) {
853 dev_err(&pdev->dev, "%s: no mem region\n", __func__);
854 ret = -EBUSY;
855 goto err_free_devinfo;
856 }
857
858 irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
859
860 pm_runtime_enable(&pdev->dev);
861
862 sr_info->pdev = pdev;
863 sr_info->srid = pdev->id;
864 sr_info->voltdm = pdata->voltdm;
865 sr_info->nvalue_table = pdata->nvalue_table;
866 sr_info->nvalue_count = pdata->nvalue_count;
867 sr_info->senn_mod = pdata->senn_mod;
868 sr_info->senp_mod = pdata->senp_mod;
869 sr_info->autocomp_active = false;
870 sr_info->ip_type = pdata->ip_type;
871 sr_info->base = ioremap(mem->start, resource_size(mem));
872 if (!sr_info->base) {
873 dev_err(&pdev->dev, "%s: ioremap fail\n", __func__);
874 ret = -ENOMEM;
875 goto err_release_region;
876 }
877
878 if (irq)
879 sr_info->irq = irq->start;
880
881 sr_set_clk_length(sr_info);
882 sr_set_regfields(sr_info);
883
884 list_add(&sr_info->node, &sr_list);
885
886 /*
887 * Call into late init to do intializations that require
888 * both sr driver and sr class driver to be initiallized.
889 */
890 if (sr_class) {
891 ret = sr_late_init(sr_info);
892 if (ret) {
893 pr_warning("%s: Error in SR late init\n", __func__);
894 return ret;
895 }
896 }
897
898 dev_info(&pdev->dev, "%s: SmartReflex driver initialized\n", __func__);
899
900 /*
901 * If the voltage domain debugfs directory is not created, do
902 * not try to create rest of the debugfs entries.
903 */
904 vdd_dbg_dir = omap_voltage_get_dbgdir(sr_info->voltdm);
905 if (!vdd_dbg_dir) {
906 ret = -EINVAL;
907 goto err_iounmap;
908 }
909
910 sr_info->dbg_dir = debugfs_create_dir("smartreflex", vdd_dbg_dir);
911 if (IS_ERR(sr_info->dbg_dir)) {
912 dev_err(&pdev->dev, "%s: Unable to create debugfs directory\n",
913 __func__);
914 ret = PTR_ERR(sr_info->dbg_dir);
915 goto err_iounmap;
916 }
917
918 (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR,
919 sr_info->dbg_dir, (void *)sr_info, &pm_sr_fops);
920 (void) debugfs_create_x32("errweight", S_IRUGO, sr_info->dbg_dir,
921 &sr_info->err_weight);
922 (void) debugfs_create_x32("errmaxlimit", S_IRUGO, sr_info->dbg_dir,
923 &sr_info->err_maxlimit);
924 (void) debugfs_create_x32("errminlimit", S_IRUGO, sr_info->dbg_dir,
925 &sr_info->err_minlimit);
926
927 nvalue_dir = debugfs_create_dir("nvalue", sr_info->dbg_dir);
928 if (IS_ERR(nvalue_dir)) {
929 dev_err(&pdev->dev, "%s: Unable to create debugfs directory"
930 "for n-values\n", __func__);
931 ret = PTR_ERR(nvalue_dir);
932 goto err_debugfs;
933 }
934
935 omap_voltage_get_volttable(sr_info->voltdm, &volt_data);
936 if (!volt_data) {
937 dev_warn(&pdev->dev, "%s: No Voltage table for the"
938 " corresponding vdd vdd_%s. Cannot create debugfs"
939 "entries for n-values\n",
940 __func__, sr_info->voltdm->name);
941 ret = -ENODATA;
942 goto err_debugfs;
943 }
944
945 for (i = 0; i < sr_info->nvalue_count; i++) {
946 char name[NVALUE_NAME_LEN + 1];
947
948 snprintf(name, sizeof(name), "volt_%d",
949 volt_data[i].volt_nominal);
950 (void) debugfs_create_x32(name, S_IRUGO | S_IWUSR, nvalue_dir,
951 &(sr_info->nvalue_table[i].nvalue));
952 }
953
954 return ret;
955
956err_debugfs:
957 debugfs_remove_recursive(sr_info->dbg_dir);
958err_iounmap:
959 list_del(&sr_info->node);
960 iounmap(sr_info->base);
961err_release_region:
962 release_mem_region(mem->start, resource_size(mem));
963err_free_devinfo:
964 kfree(sr_info);
965
966 return ret;
967}
968
969static int __devexit omap_sr_remove(struct platform_device *pdev)
970{
971 struct omap_sr_data *pdata = pdev->dev.platform_data;
972 struct omap_sr *sr_info;
973 struct resource *mem;
974
975 if (!pdata) {
976 dev_err(&pdev->dev, "%s: platform data missing\n", __func__);
977 return -EINVAL;
978 }
979
980 sr_info = _sr_lookup(pdata->voltdm);
981 if (IS_ERR(sr_info)) {
982 dev_warn(&pdev->dev, "%s: omap_sr struct not found\n",
983 __func__);
984 return -EINVAL;
985 }
986
987 if (sr_info->autocomp_active)
988 sr_stop_vddautocomp(sr_info);
989 if (sr_info->dbg_dir)
990 debugfs_remove_recursive(sr_info->dbg_dir);
991
992 list_del(&sr_info->node);
993 iounmap(sr_info->base);
994 kfree(sr_info);
995 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
996 release_mem_region(mem->start, resource_size(mem));
997
998 return 0;
999}
1000
1001static struct platform_driver smartreflex_driver = {
1002 .remove = omap_sr_remove,
1003 .driver = {
1004 .name = "smartreflex",
1005 },
1006};
1007
1008static int __init sr_init(void)
1009{
1010 int ret = 0;
1011
1012 /*
1013 * sr_init is a late init. If by then a pmic specific API is not
1014 * registered either there is no need for anything to be done on
1015 * the PMIC side or somebody has forgotten to register a PMIC
1016 * handler. Warn for the second condition.
1017 */
1018 if (sr_pmic_data && sr_pmic_data->sr_pmic_init)
1019 sr_pmic_data->sr_pmic_init();
1020 else
1021 pr_warning("%s: No PMIC hook to init smartreflex\n", __func__);
1022
1023 ret = platform_driver_probe(&smartreflex_driver, omap_sr_probe);
1024 if (ret) {
1025 pr_err("%s: platform driver register failed for SR\n",
1026 __func__);
1027 return ret;
1028 }
1029
1030 return 0;
1031}
1032
1033static void __exit sr_exit(void)
1034{
1035 platform_driver_unregister(&smartreflex_driver);
1036}
1037late_initcall(sr_init);
1038module_exit(sr_exit);
1039
1040MODULE_DESCRIPTION("OMAP Smartreflex Driver");
1041MODULE_LICENSE("GPL");
1042MODULE_ALIAS("platform:" DRIVER_NAME);
1043MODULE_AUTHOR("Texas Instruments Inc");
diff --git a/arch/arm/mach-omap2/smartreflex.h b/arch/arm/mach-omap2/smartreflex.h
new file mode 100644
index 000000000000..5f35b9e25556
--- /dev/null
+++ b/arch/arm/mach-omap2/smartreflex.h
@@ -0,0 +1,246 @@
1/*
2 * OMAP Smartreflex Defines and Routines
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Copyright (C) 2010 Texas Instruments, Inc.
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008 Nokia Corporation
10 * Kalle Jokiniemi
11 *
12 * Copyright (C) 2007 Texas Instruments, Inc.
13 * Lesly A M <x0080970@ti.com>
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20#ifndef __ASM_ARM_OMAP_SMARTREFLEX_H
21#define __ASM_ARM_OMAP_SMARTREFLEX_H
22
23#include <linux/platform_device.h>
24
25#include "voltage.h"
26
27/*
28 * Different Smartreflex IPs version. The v1 is the 65nm version used in
29 * OMAP3430. The v2 is the update for the 45nm version of the IP
30 * used in OMAP3630 and OMAP4430
31 */
32#define SR_TYPE_V1 1
33#define SR_TYPE_V2 2
34
35/* SMART REFLEX REG ADDRESS OFFSET */
36#define SRCONFIG 0x00
37#define SRSTATUS 0x04
38#define SENVAL 0x08
39#define SENMIN 0x0C
40#define SENMAX 0x10
41#define SENAVG 0x14
42#define AVGWEIGHT 0x18
43#define NVALUERECIPROCAL 0x1c
44#define SENERROR_V1 0x20
45#define ERRCONFIG_V1 0x24
46#define IRQ_EOI 0x20
47#define IRQSTATUS_RAW 0x24
48#define IRQSTATUS 0x28
49#define IRQENABLE_SET 0x2C
50#define IRQENABLE_CLR 0x30
51#define SENERROR_V2 0x34
52#define ERRCONFIG_V2 0x38
53
54/* Bit/Shift Positions */
55
56/* SRCONFIG */
57#define SRCONFIG_ACCUMDATA_SHIFT 22
58#define SRCONFIG_SRCLKLENGTH_SHIFT 12
59#define SRCONFIG_SENNENABLE_V1_SHIFT 5
60#define SRCONFIG_SENPENABLE_V1_SHIFT 3
61#define SRCONFIG_SENNENABLE_V2_SHIFT 1
62#define SRCONFIG_SENPENABLE_V2_SHIFT 0
63#define SRCONFIG_CLKCTRL_SHIFT 0
64
65#define SRCONFIG_ACCUMDATA_MASK (0x3ff << 22)
66
67#define SRCONFIG_SRENABLE BIT(11)
68#define SRCONFIG_SENENABLE BIT(10)
69#define SRCONFIG_ERRGEN_EN BIT(9)
70#define SRCONFIG_MINMAXAVG_EN BIT(8)
71#define SRCONFIG_DELAYCTRL BIT(2)
72
73/* AVGWEIGHT */
74#define AVGWEIGHT_SENPAVGWEIGHT_SHIFT 2
75#define AVGWEIGHT_SENNAVGWEIGHT_SHIFT 0
76
77/* NVALUERECIPROCAL */
78#define NVALUERECIPROCAL_SENPGAIN_SHIFT 20
79#define NVALUERECIPROCAL_SENNGAIN_SHIFT 16
80#define NVALUERECIPROCAL_RNSENP_SHIFT 8
81#define NVALUERECIPROCAL_RNSENN_SHIFT 0
82
83/* ERRCONFIG */
84#define ERRCONFIG_ERRWEIGHT_SHIFT 16
85#define ERRCONFIG_ERRMAXLIMIT_SHIFT 8
86#define ERRCONFIG_ERRMINLIMIT_SHIFT 0
87
88#define SR_ERRWEIGHT_MASK (0x07 << 16)
89#define SR_ERRMAXLIMIT_MASK (0xff << 8)
90#define SR_ERRMINLIMIT_MASK (0xff << 0)
91
92#define ERRCONFIG_VPBOUNDINTEN_V1 BIT(31)
93#define ERRCONFIG_VPBOUNDINTST_V1 BIT(30)
94#define ERRCONFIG_MCUACCUMINTEN BIT(29)
95#define ERRCONFIG_MCUACCUMINTST BIT(28)
96#define ERRCONFIG_MCUVALIDINTEN BIT(27)
97#define ERRCONFIG_MCUVALIDINTST BIT(26)
98#define ERRCONFIG_MCUBOUNDINTEN BIT(25)
99#define ERRCONFIG_MCUBOUNDINTST BIT(24)
100#define ERRCONFIG_MCUDISACKINTEN BIT(23)
101#define ERRCONFIG_VPBOUNDINTST_V2 BIT(23)
102#define ERRCONFIG_MCUDISACKINTST BIT(22)
103#define ERRCONFIG_VPBOUNDINTEN_V2 BIT(22)
104
105#define ERRCONFIG_STATUS_V1_MASK (ERRCONFIG_VPBOUNDINTST_V1 | \
106 ERRCONFIG_MCUACCUMINTST | \
107 ERRCONFIG_MCUVALIDINTST | \
108 ERRCONFIG_MCUBOUNDINTST | \
109 ERRCONFIG_MCUDISACKINTST)
110/* IRQSTATUS */
111#define IRQSTATUS_MCUACCUMINT BIT(3)
112#define IRQSTATUS_MCVALIDINT BIT(2)
113#define IRQSTATUS_MCBOUNDSINT BIT(1)
114#define IRQSTATUS_MCUDISABLEACKINT BIT(0)
115
116/* IRQENABLE_SET and IRQENABLE_CLEAR */
117#define IRQENABLE_MCUACCUMINT BIT(3)
118#define IRQENABLE_MCUVALIDINT BIT(2)
119#define IRQENABLE_MCUBOUNDSINT BIT(1)
120#define IRQENABLE_MCUDISABLEACKINT BIT(0)
121
122/* Common Bit values */
123
124#define SRCLKLENGTH_12MHZ_SYSCLK 0x3c
125#define SRCLKLENGTH_13MHZ_SYSCLK 0x41
126#define SRCLKLENGTH_19MHZ_SYSCLK 0x60
127#define SRCLKLENGTH_26MHZ_SYSCLK 0x82
128#define SRCLKLENGTH_38MHZ_SYSCLK 0xC0
129
130/*
131 * 3430 specific values. Maybe these should be passed from board file or
132 * pmic structures.
133 */
134#define OMAP3430_SR_ACCUMDATA 0x1f4
135
136#define OMAP3430_SR1_SENPAVGWEIGHT 0x03
137#define OMAP3430_SR1_SENNAVGWEIGHT 0x03
138
139#define OMAP3430_SR2_SENPAVGWEIGHT 0x01
140#define OMAP3430_SR2_SENNAVGWEIGHT 0x01
141
142#define OMAP3430_SR_ERRWEIGHT 0x04
143#define OMAP3430_SR_ERRMAXLIMIT 0x02
144
145/**
146 * struct omap_sr_pmic_data - Strucutre to be populated by pmic code to pass
147 * pmic specific info to smartreflex driver
148 *
149 * @sr_pmic_init: API to initialize smartreflex on the PMIC side.
150 */
151struct omap_sr_pmic_data {
152 void (*sr_pmic_init) (void);
153};
154
155#ifdef CONFIG_OMAP_SMARTREFLEX
156/*
157 * The smart reflex driver supports CLASS1 CLASS2 and CLASS3 SR.
158 * The smartreflex class driver should pass the class type.
159 * Should be used to populate the class_type field of the
160 * omap_smartreflex_class_data structure.
161 */
162#define SR_CLASS1 0x1
163#define SR_CLASS2 0x2
164#define SR_CLASS3 0x3
165
166/**
167 * struct omap_sr_class_data - Smartreflex class driver info
168 *
169 * @enable: API to enable a particular class smaartreflex.
170 * @disable: API to disable a particular class smartreflex.
171 * @configure: API to configure a particular class smartreflex.
172 * @notify: API to notify the class driver about an event in SR.
173 * Not needed for class3.
174 * @notify_flags: specify the events to be notified to the class driver
175 * @class_type: specify which smartreflex class.
176 * Can be used by the SR driver to take any class
177 * based decisions.
178 */
179struct omap_sr_class_data {
180 int (*enable)(struct voltagedomain *voltdm);
181 int (*disable)(struct voltagedomain *voltdm, int is_volt_reset);
182 int (*configure)(struct voltagedomain *voltdm);
183 int (*notify)(struct voltagedomain *voltdm, u32 status);
184 u8 notify_flags;
185 u8 class_type;
186};
187
188/**
189 * struct omap_sr_nvalue_table - Smartreflex n-target value info
190 *
191 * @efuse_offs: The offset of the efuse where n-target values are stored.
192 * @nvalue: The n-target value.
193 */
194struct omap_sr_nvalue_table {
195 u32 efuse_offs;
196 u32 nvalue;
197};
198
199/**
200 * struct omap_sr_data - Smartreflex platform data.
201 *
202 * @ip_type: Smartreflex IP type.
203 * @senp_mod: SENPENABLE value for the sr
204 * @senn_mod: SENNENABLE value for sr
205 * @nvalue_count: Number of distinct nvalues in the nvalue table
206 * @enable_on_init: whether this sr module needs to enabled at
207 * boot up or not.
208 * @nvalue_table: table containing the efuse offsets and nvalues
209 * corresponding to them.
210 * @voltdm: Pointer to the voltage domain associated with the SR
211 */
212struct omap_sr_data {
213 int ip_type;
214 u32 senp_mod;
215 u32 senn_mod;
216 int nvalue_count;
217 bool enable_on_init;
218 struct omap_sr_nvalue_table *nvalue_table;
219 struct voltagedomain *voltdm;
220};
221
222/* Smartreflex module enable/disable interface */
223void omap_sr_enable(struct voltagedomain *voltdm);
224void omap_sr_disable(struct voltagedomain *voltdm);
225void omap_sr_disable_reset_volt(struct voltagedomain *voltdm);
226
227/* API to register the pmic specific data with the smartreflex driver. */
228void omap_sr_register_pmic(struct omap_sr_pmic_data *pmic_data);
229
230/* Smartreflex driver hooks to be called from Smartreflex class driver */
231int sr_enable(struct voltagedomain *voltdm, unsigned long volt);
232void sr_disable(struct voltagedomain *voltdm);
233int sr_configure_errgen(struct voltagedomain *voltdm);
234int sr_configure_minmax(struct voltagedomain *voltdm);
235
236/* API to register the smartreflex class driver with the smartreflex driver */
237int sr_register_class(struct omap_sr_class_data *class_data);
238#else
239static inline void omap_sr_enable(struct voltagedomain *voltdm) {}
240static inline void omap_sr_disable(struct voltagedomain *voltdm) {}
241static inline void omap_sr_disable_reset_volt(
242 struct voltagedomain *voltdm) {}
243static inline void omap_sr_register_pmic(
244 struct omap_sr_pmic_data *pmic_data) {}
245#endif
246#endif
diff --git a/arch/arm/mach-omap2/sr_device.c b/arch/arm/mach-omap2/sr_device.c
new file mode 100644
index 000000000000..10d3c5ee8018
--- /dev/null
+++ b/arch/arm/mach-omap2/sr_device.c
@@ -0,0 +1,147 @@
1/*
2 * OMAP3/OMAP4 smartreflex device file
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Based originally on code from smartreflex.c
7 * Copyright (C) 2010 Texas Instruments, Inc.
8 * Thara Gopinath <thara@ti.com>
9 *
10 * Copyright (C) 2008 Nokia Corporation
11 * Kalle Jokiniemi
12 *
13 * Copyright (C) 2007 Texas Instruments, Inc.
14 * Lesly A M <x0080970@ti.com>
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20
21#include <linux/err.h>
22#include <linux/slab.h>
23#include <linux/io.h>
24
25#include <plat/omap_device.h>
26
27#include "smartreflex.h"
28#include "voltage.h"
29#include "control.h"
30#include "pm.h"
31
32static bool sr_enable_on_init;
33
34static struct omap_device_pm_latency omap_sr_latency[] = {
35 {
36 .deactivate_func = omap_device_idle_hwmods,
37 .activate_func = omap_device_enable_hwmods,
38 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST
39 },
40};
41
42/* Read EFUSE values from control registers for OMAP3430 */
43static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
44 struct omap_sr_data *sr_data)
45{
46 struct omap_sr_nvalue_table *nvalue_table;
47 int i, count = 0;
48
49 while (volt_data[count].volt_nominal)
50 count++;
51
52 nvalue_table = kzalloc(sizeof(struct omap_sr_nvalue_table)*count,
53 GFP_KERNEL);
54
55 for (i = 0; i < count; i++) {
56 u32 v;
57 /*
58 * In OMAP4 the efuse registers are 24 bit aligned.
59 * A __raw_readl will fail for non-32 bit aligned address
60 * and hence the 8-bit read and shift.
61 */
62 if (cpu_is_omap44xx()) {
63 u16 offset = volt_data[i].sr_efuse_offs;
64
65 v = omap_ctrl_readb(offset) |
66 omap_ctrl_readb(offset + 1) << 8 |
67 omap_ctrl_readb(offset + 2) << 16;
68 } else {
69 v = omap_ctrl_readl(volt_data[i].sr_efuse_offs);
70 }
71
72 nvalue_table[i].efuse_offs = volt_data[i].sr_efuse_offs;
73 nvalue_table[i].nvalue = v;
74 }
75
76 sr_data->nvalue_table = nvalue_table;
77 sr_data->nvalue_count = count;
78}
79
80static int sr_dev_init(struct omap_hwmod *oh, void *user)
81{
82 struct omap_sr_data *sr_data;
83 struct omap_device *od;
84 struct omap_volt_data *volt_data;
85 char *name = "smartreflex";
86 static int i;
87
88 sr_data = kzalloc(sizeof(struct omap_sr_data), GFP_KERNEL);
89 if (!sr_data) {
90 pr_err("%s: Unable to allocate memory for %s sr_data.Error!\n",
91 __func__, oh->name);
92 return -ENOMEM;
93 }
94
95 if (!oh->vdd_name) {
96 pr_err("%s: No voltage domain specified for %s."
97 "Cannot initialize\n", __func__, oh->name);
98 goto exit;
99 }
100
101 sr_data->ip_type = oh->class->rev;
102 sr_data->senn_mod = 0x1;
103 sr_data->senp_mod = 0x1;
104
105 sr_data->voltdm = omap_voltage_domain_lookup(oh->vdd_name);
106 if (IS_ERR(sr_data->voltdm)) {
107 pr_err("%s: Unable to get voltage domain pointer for VDD %s\n",
108 __func__, oh->vdd_name);
109 goto exit;
110 }
111
112 omap_voltage_get_volttable(sr_data->voltdm, &volt_data);
113 if (!volt_data) {
114 pr_warning("%s: No Voltage table registerd fo VDD%d."
115 "Something really wrong\n\n", __func__, i + 1);
116 goto exit;
117 }
118
119 sr_set_nvalues(volt_data, sr_data);
120
121 sr_data->enable_on_init = sr_enable_on_init;
122
123 od = omap_device_build(name, i, oh, sr_data, sizeof(*sr_data),
124 omap_sr_latency,
125 ARRAY_SIZE(omap_sr_latency), 0);
126 if (IS_ERR(od))
127 pr_warning("%s: Could not build omap_device for %s: %s.\n\n",
128 __func__, name, oh->name);
129exit:
130 i++;
131 kfree(sr_data);
132 return 0;
133}
134
135/*
136 * API to be called from board files to enable smartreflex
137 * autocompensation at init.
138 */
139void __init omap_enable_smartreflex_on_init(void)
140{
141 sr_enable_on_init = true;
142}
143
144int __init omap_devinit_smartreflex(void)
145{
146 return omap_hwmod_for_each_by_class("smartreflex", sr_dev_init, NULL);
147}
diff --git a/arch/arm/mach-omap2/sram242x.S b/arch/arm/mach-omap2/sram242x.S
index 92e6e1a12af8..ff9b9dbcb30e 100644
--- a/arch/arm/mach-omap2/sram242x.S
+++ b/arch/arm/mach-omap2/sram242x.S
@@ -21,18 +21,25 @@
21 * along with this program; if not, write to the Free Software 21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23 * MA 02111-1307 USA 23 * MA 02111-1307 USA
24 *
25 * Richard Woodruff notes that any changes to this code must be carefully
26 * audited and tested to ensure that they don't cause a TLB miss while
27 * the SDRAM is inaccessible. Such a situation will crash the system
28 * since it will cause the ARM MMU to attempt to walk the page tables.
29 * These crashes may be intermittent.
24 */ 30 */
25#include <linux/linkage.h> 31#include <linux/linkage.h>
26#include <asm/assembler.h> 32#include <asm/assembler.h>
27#include <mach/io.h> 33#include <mach/io.h>
28#include <mach/hardware.h> 34#include <mach/hardware.h>
29 35
30#include "prm.h" 36#include "prm2xxx_3xxx.h"
31#include "cm.h" 37#include "cm2xxx_3xxx.h"
32#include "sdrc.h" 38#include "sdrc.h"
33 39
34 .text 40 .text
35 41
42 .align 3
36ENTRY(omap242x_sram_ddr_init) 43ENTRY(omap242x_sram_ddr_init)
37 stmfd sp!, {r0 - r12, lr} @ save registers on stack 44 stmfd sp!, {r0 - r12, lr} @ save registers on stack
38 45
@@ -137,6 +144,7 @@ ENTRY(omap242x_sram_ddr_init_sz)
137 * r0 = [PRCM_FULL | PRCM_HALF] r1 = SDRC_DLLA_CTRL value r2 = [DDR | SDR] 144 * r0 = [PRCM_FULL | PRCM_HALF] r1 = SDRC_DLLA_CTRL value r2 = [DDR | SDR]
138 * PRCM_FULL = 2, PRCM_HALF = 1, DDR = 1, SDR = 0 145 * PRCM_FULL = 2, PRCM_HALF = 1, DDR = 1, SDR = 0
139 */ 146 */
147 .align 3
140ENTRY(omap242x_sram_reprogram_sdrc) 148ENTRY(omap242x_sram_reprogram_sdrc)
141 stmfd sp!, {r0 - r10, lr} @ save registers on stack 149 stmfd sp!, {r0 - r10, lr} @ save registers on stack
142 mov r3, #0x0 @ clear for mrc call 150 mov r3, #0x0 @ clear for mrc call
@@ -232,6 +240,7 @@ ENTRY(omap242x_sram_reprogram_sdrc_sz)
232/* 240/*
233 * Set dividers and pll. Also recalculate DLL value for DDR and unlock mode. 241 * Set dividers and pll. Also recalculate DLL value for DDR and unlock mode.
234 */ 242 */
243 .align 3
235ENTRY(omap242x_sram_set_prcm) 244ENTRY(omap242x_sram_set_prcm)
236 stmfd sp!, {r0-r12, lr} @ regs to stack 245 stmfd sp!, {r0-r12, lr} @ regs to stack
237 adr r4, pbegin @ addr of preload start 246 adr r4, pbegin @ addr of preload start
diff --git a/arch/arm/mach-omap2/sram243x.S b/arch/arm/mach-omap2/sram243x.S
index ab4973695c71..76730209fa0e 100644
--- a/arch/arm/mach-omap2/sram243x.S
+++ b/arch/arm/mach-omap2/sram243x.S
@@ -21,18 +21,25 @@
21 * along with this program; if not, write to the Free Software 21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23 * MA 02111-1307 USA 23 * MA 02111-1307 USA
24 *
25 * Richard Woodruff notes that any changes to this code must be carefully
26 * audited and tested to ensure that they don't cause a TLB miss while
27 * the SDRAM is inaccessible. Such a situation will crash the system
28 * since it will cause the ARM MMU to attempt to walk the page tables.
29 * These crashes may be intermittent.
24 */ 30 */
25#include <linux/linkage.h> 31#include <linux/linkage.h>
26#include <asm/assembler.h> 32#include <asm/assembler.h>
27#include <mach/io.h> 33#include <mach/io.h>
28#include <mach/hardware.h> 34#include <mach/hardware.h>
29 35
30#include "prm.h" 36#include "prm2xxx_3xxx.h"
31#include "cm.h" 37#include "cm2xxx_3xxx.h"
32#include "sdrc.h" 38#include "sdrc.h"
33 39
34 .text 40 .text
35 41
42 .align 3
36ENTRY(omap243x_sram_ddr_init) 43ENTRY(omap243x_sram_ddr_init)
37 stmfd sp!, {r0 - r12, lr} @ save registers on stack 44 stmfd sp!, {r0 - r12, lr} @ save registers on stack
38 45
@@ -137,6 +144,7 @@ ENTRY(omap243x_sram_ddr_init_sz)
137 * r0 = [PRCM_FULL | PRCM_HALF] r1 = SDRC_DLLA_CTRL value r2 = [DDR | SDR] 144 * r0 = [PRCM_FULL | PRCM_HALF] r1 = SDRC_DLLA_CTRL value r2 = [DDR | SDR]
138 * PRCM_FULL = 2, PRCM_HALF = 1, DDR = 1, SDR = 0 145 * PRCM_FULL = 2, PRCM_HALF = 1, DDR = 1, SDR = 0
139 */ 146 */
147 .align 3
140ENTRY(omap243x_sram_reprogram_sdrc) 148ENTRY(omap243x_sram_reprogram_sdrc)
141 stmfd sp!, {r0 - r10, lr} @ save registers on stack 149 stmfd sp!, {r0 - r10, lr} @ save registers on stack
142 mov r3, #0x0 @ clear for mrc call 150 mov r3, #0x0 @ clear for mrc call
@@ -232,6 +240,7 @@ ENTRY(omap243x_sram_reprogram_sdrc_sz)
232/* 240/*
233 * Set dividers and pll. Also recalculate DLL value for DDR and unlock mode. 241 * Set dividers and pll. Also recalculate DLL value for DDR and unlock mode.
234 */ 242 */
243 .align 3
235ENTRY(omap243x_sram_set_prcm) 244ENTRY(omap243x_sram_set_prcm)
236 stmfd sp!, {r0-r12, lr} @ regs to stack 245 stmfd sp!, {r0-r12, lr} @ regs to stack
237 adr r4, pbegin @ addr of preload start 246 adr r4, pbegin @ addr of preload start
diff --git a/arch/arm/mach-omap2/sram34xx.S b/arch/arm/mach-omap2/sram34xx.S
index de99ba2a57ab..6f5849aaa7c0 100644
--- a/arch/arm/mach-omap2/sram34xx.S
+++ b/arch/arm/mach-omap2/sram34xx.S
@@ -32,7 +32,13 @@
32#include <mach/io.h> 32#include <mach/io.h>
33 33
34#include "sdrc.h" 34#include "sdrc.h"
35#include "cm.h" 35#include "cm2xxx_3xxx.h"
36
37/*
38 * This file needs be built unconditionally as ARM to interoperate correctly
39 * with non-Thumb-2-capable firmware.
40 */
41 .arm
36 42
37 .text 43 .text
38 44
@@ -104,33 +110,55 @@
104 * touching the SDRAM. Until that time, users who know that their use case 110 * touching the SDRAM. Until that time, users who know that their use case
105 * can satisfy the above requirement can enable the CONFIG_OMAP3_SDRC_AC_TIMING 111 * can satisfy the above requirement can enable the CONFIG_OMAP3_SDRC_AC_TIMING
106 * option. 112 * option.
113 *
114 * Richard Woodruff notes that any changes to this code must be carefully
115 * audited and tested to ensure that they don't cause a TLB miss while
116 * the SDRAM is inaccessible. Such a situation will crash the system
117 * since it will cause the ARM MMU to attempt to walk the page tables.
118 * These crashes may be intermittent.
107 */ 119 */
120 .align 3
108ENTRY(omap3_sram_configure_core_dpll) 121ENTRY(omap3_sram_configure_core_dpll)
109 stmfd sp!, {r1-r12, lr} @ store regs to stack 122 stmfd sp!, {r1-r12, lr} @ store regs to stack
110 123
111 @ pull the extra args off the stack 124 @ pull the extra args off the stack
112 @ and store them in SRAM 125 @ and store them in SRAM
126
127/*
128 * PC-relative stores are deprecated in ARMv7 and lead to undefined behaviour
129 * in Thumb-2: use a r7 as a base instead.
130 * Be careful not to clobber r7 when maintaing this file.
131 */
132 THUMB( adr r7, omap3_sram_configure_core_dpll )
133 .macro strtext Rt:req, label:req
134 ARM( str \Rt, \label )
135 THUMB( str \Rt, [r7, \label - omap3_sram_configure_core_dpll] )
136 .endm
137
113 ldr r4, [sp, #52] 138 ldr r4, [sp, #52]
114 str r4, omap_sdrc_rfr_ctrl_0_val 139 strtext r4, omap_sdrc_rfr_ctrl_0_val
115 ldr r4, [sp, #56] 140 ldr r4, [sp, #56]
116 str r4, omap_sdrc_actim_ctrl_a_0_val 141 strtext r4, omap_sdrc_actim_ctrl_a_0_val
117 ldr r4, [sp, #60] 142 ldr r4, [sp, #60]
118 str r4, omap_sdrc_actim_ctrl_b_0_val 143 strtext r4, omap_sdrc_actim_ctrl_b_0_val
119 ldr r4, [sp, #64] 144 ldr r4, [sp, #64]
120 str r4, omap_sdrc_mr_0_val 145 strtext r4, omap_sdrc_mr_0_val
121 ldr r4, [sp, #68] 146 ldr r4, [sp, #68]
122 str r4, omap_sdrc_rfr_ctrl_1_val 147 strtext r4, omap_sdrc_rfr_ctrl_1_val
123 cmp r4, #0 @ if SDRC_RFR_CTRL_1 is 0, 148 cmp r4, #0 @ if SDRC_RFR_CTRL_1 is 0,
124 beq skip_cs1_params @ do not use cs1 params 149 beq skip_cs1_params @ do not use cs1 params
125 ldr r4, [sp, #72] 150 ldr r4, [sp, #72]
126 str r4, omap_sdrc_actim_ctrl_a_1_val 151 strtext r4, omap_sdrc_actim_ctrl_a_1_val
127 ldr r4, [sp, #76] 152 ldr r4, [sp, #76]
128 str r4, omap_sdrc_actim_ctrl_b_1_val 153 strtext r4, omap_sdrc_actim_ctrl_b_1_val
129 ldr r4, [sp, #80] 154 ldr r4, [sp, #80]
130 str r4, omap_sdrc_mr_1_val 155 strtext r4, omap_sdrc_mr_1_val
131skip_cs1_params: 156skip_cs1_params:
157 mrc p15, 0, r8, c1, c0, 0 @ read ctrl register
158 bic r10, r8, #0x800 @ clear Z-bit, disable branch prediction
159 mcr p15, 0, r10, c1, c0, 0 @ write ctrl register
132 dsb @ flush buffered writes to interconnect 160 dsb @ flush buffered writes to interconnect
133 161 isb @ prevent speculative exec past here
134 cmp r3, #1 @ if increasing SDRC clk rate, 162 cmp r3, #1 @ if increasing SDRC clk rate,
135 bleq configure_sdrc @ program the SDRC regs early (for RFR) 163 bleq configure_sdrc @ program the SDRC regs early (for RFR)
136 cmp r1, #SDRC_UNLOCK_DLL @ set the intended DLL state 164 cmp r1, #SDRC_UNLOCK_DLL @ set the intended DLL state
@@ -148,6 +176,7 @@ skip_cs1_params:
148 beq return_to_sdram @ return to SDRAM code, otherwise, 176 beq return_to_sdram @ return to SDRAM code, otherwise,
149 bl configure_sdrc @ reprogram SDRC regs now 177 bl configure_sdrc @ reprogram SDRC regs now
150return_to_sdram: 178return_to_sdram:
179 mcr p15, 0, r8, c1, c0, 0 @ restore ctrl register
151 isb @ prevent speculative exec past here 180 isb @ prevent speculative exec past here
152 mov r0, #0 @ return value 181 mov r0, #0 @ return value
153 ldmfd sp!, {r1-r12, pc} @ restore regs and return 182 ldmfd sp!, {r1-r12, pc} @ restore regs and return
@@ -261,6 +290,7 @@ skip_cs1_prog:
261 ldr r12, [r11] @ posted-write barrier for SDRC 290 ldr r12, [r11] @ posted-write barrier for SDRC
262 bx lr 291 bx lr
263 292
293 .align
264omap3_sdrc_power: 294omap3_sdrc_power:
265 .word OMAP34XX_SDRC_REGADDR(SDRC_POWER) 295 .word OMAP34XX_SDRC_REGADDR(SDRC_POWER)
266omap3_cm_clksel1_pll: 296omap3_cm_clksel1_pll:
@@ -309,6 +339,7 @@ omap3_sdrc_dlla_ctrl:
309 .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL) 339 .word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL)
310core_m2_mask_val: 340core_m2_mask_val:
311 .word 0x07FFFFFF 341 .word 0x07FFFFFF
342ENDPROC(omap3_sram_configure_core_dpll)
312 343
313ENTRY(omap3_sram_configure_core_dpll_sz) 344ENTRY(omap3_sram_configure_core_dpll_sz)
314 .word . - omap3_sram_configure_core_dpll 345 .word . - omap3_sram_configure_core_dpll
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
index 74fbed8491f2..3b9cf85f4bb9 100644
--- a/arch/arm/mach-omap2/timer-gp.c
+++ b/arch/arm/mach-omap2/timer-gp.c
@@ -39,6 +39,12 @@
39#include <asm/mach/time.h> 39#include <asm/mach/time.h>
40#include <plat/dmtimer.h> 40#include <plat/dmtimer.h>
41#include <asm/localtimer.h> 41#include <asm/localtimer.h>
42#include <asm/sched_clock.h>
43#include <plat/common.h>
44#include <plat/omap_hwmod.h>
45
46#include "timer-gp.h"
47
42 48
43/* MAX_GPTIMER_ID: number of GPTIMERs on the chip */ 49/* MAX_GPTIMER_ID: number of GPTIMERs on the chip */
44#define MAX_GPTIMER_ID 12 50#define MAX_GPTIMER_ID 12
@@ -128,9 +134,13 @@ static void __init omap2_gp_clockevent_init(void)
128{ 134{
129 u32 tick_rate; 135 u32 tick_rate;
130 int src; 136 int src;
137 char clockevent_hwmod_name[8]; /* 8 = sizeof("timerXX0") */
131 138
132 inited = 1; 139 inited = 1;
133 140
141 sprintf(clockevent_hwmod_name, "timer%d", gptimer_id);
142 omap_hwmod_setup_one(clockevent_hwmod_name);
143
134 gptimer = omap_dm_timer_request_specific(gptimer_id); 144 gptimer = omap_dm_timer_request_specific(gptimer_id);
135 BUG_ON(gptimer == NULL); 145 BUG_ON(gptimer == NULL);
136 gptimer_wakeup = gptimer; 146 gptimer_wakeup = gptimer;
@@ -174,14 +184,19 @@ static void __init omap2_gp_clockevent_init(void)
174/* 184/*
175 * When 32k-timer is enabled, don't use GPTimer for clocksource 185 * When 32k-timer is enabled, don't use GPTimer for clocksource
176 * instead, just leave default clocksource which uses the 32k 186 * instead, just leave default clocksource which uses the 32k
177 * sync counter. See clocksource setup in see plat-omap/common.c. 187 * sync counter. See clocksource setup in plat-omap/counter_32k.c
178 */ 188 */
179 189
180static inline void __init omap2_gp_clocksource_init(void) {} 190static void __init omap2_gp_clocksource_init(void)
191{
192 omap_init_clocksource_32k();
193}
194
181#else 195#else
182/* 196/*
183 * clocksource 197 * clocksource
184 */ 198 */
199static DEFINE_CLOCK_DATA(cd);
185static struct omap_dm_timer *gpt_clocksource; 200static struct omap_dm_timer *gpt_clocksource;
186static cycle_t clocksource_read_cycles(struct clocksource *cs) 201static cycle_t clocksource_read_cycles(struct clocksource *cs)
187{ 202{
@@ -193,15 +208,23 @@ static struct clocksource clocksource_gpt = {
193 .rating = 300, 208 .rating = 300,
194 .read = clocksource_read_cycles, 209 .read = clocksource_read_cycles,
195 .mask = CLOCKSOURCE_MASK(32), 210 .mask = CLOCKSOURCE_MASK(32),
196 .shift = 24,
197 .flags = CLOCK_SOURCE_IS_CONTINUOUS, 211 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
198}; 212};
199 213
214static void notrace dmtimer_update_sched_clock(void)
215{
216 u32 cyc;
217
218 cyc = omap_dm_timer_read_counter(gpt_clocksource);
219
220 update_sched_clock(&cd, cyc, (u32)~0);
221}
222
200/* Setup free-running counter for clocksource */ 223/* Setup free-running counter for clocksource */
201static void __init omap2_gp_clocksource_init(void) 224static void __init omap2_gp_clocksource_init(void)
202{ 225{
203 static struct omap_dm_timer *gpt; 226 static struct omap_dm_timer *gpt;
204 u32 tick_rate, tick_period; 227 u32 tick_rate;
205 static char err1[] __initdata = KERN_ERR 228 static char err1[] __initdata = KERN_ERR
206 "%s: failed to request dm-timer\n"; 229 "%s: failed to request dm-timer\n";
207 static char err2[] __initdata = KERN_ERR 230 static char err2[] __initdata = KERN_ERR
@@ -214,13 +237,12 @@ static void __init omap2_gp_clocksource_init(void)
214 237
215 omap_dm_timer_set_source(gpt, OMAP_TIMER_SRC_SYS_CLK); 238 omap_dm_timer_set_source(gpt, OMAP_TIMER_SRC_SYS_CLK);
216 tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gpt)); 239 tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gpt));
217 tick_period = (tick_rate / HZ) - 1;
218 240
219 omap_dm_timer_set_load_start(gpt, 1, 0); 241 omap_dm_timer_set_load_start(gpt, 1, 0);
220 242
221 clocksource_gpt.mult = 243 init_sched_clock(&cd, dmtimer_update_sched_clock, 32, tick_rate);
222 clocksource_khz2mult(tick_rate/1000, clocksource_gpt.shift); 244
223 if (clocksource_register(&clocksource_gpt)) 245 if (clocksource_register_hz(&clocksource_gpt, tick_rate))
224 printk(err2, clocksource_gpt.name); 246 printk(err2, clocksource_gpt.name);
225} 247}
226#endif 248#endif
@@ -228,8 +250,10 @@ static void __init omap2_gp_clocksource_init(void)
228static void __init omap2_gp_timer_init(void) 250static void __init omap2_gp_timer_init(void)
229{ 251{
230#ifdef CONFIG_LOCAL_TIMERS 252#ifdef CONFIG_LOCAL_TIMERS
231 twd_base = ioremap(OMAP44XX_LOCAL_TWD_BASE, SZ_256); 253 if (cpu_is_omap44xx()) {
232 BUG_ON(!twd_base); 254 twd_base = ioremap(OMAP44XX_LOCAL_TWD_BASE, SZ_256);
255 BUG_ON(!twd_base);
256 }
233#endif 257#endif
234 omap_dm_timer_init(); 258 omap_dm_timer_init();
235 259
diff --git a/arch/arm/mach-omap2/timer-gp.h b/arch/arm/mach-omap2/timer-gp.h
new file mode 100644
index 000000000000..5c1072c6783b
--- /dev/null
+++ b/arch/arm/mach-omap2/timer-gp.h
@@ -0,0 +1,16 @@
1/*
2 * OMAP2/3 GPTIMER support.headers
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10
11#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_TIMER_GP_H
12#define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_TIMER_GP_H
13
14extern int __init omap2_gp_clockevent_set_gptimer(u8 id);
15
16#endif
diff --git a/arch/arm/mach-omap2/timer-mpu.c b/arch/arm/mach-omap2/timer-mpu.c
index 954682e64399..31c0ac4cd66a 100644
--- a/arch/arm/mach-omap2/timer-mpu.c
+++ b/arch/arm/mach-omap2/timer-mpu.c
@@ -26,9 +26,14 @@
26/* 26/*
27 * Setup the local clock events for a CPU. 27 * Setup the local clock events for a CPU.
28 */ 28 */
29void __cpuinit local_timer_setup(struct clock_event_device *evt) 29int __cpuinit local_timer_setup(struct clock_event_device *evt)
30{ 30{
31 /* Local timers are not supprted on OMAP4430 ES1.0 */
32 if (omap_rev() == OMAP4430_REV_ES1_0)
33 return -ENXIO;
34
31 evt->irq = OMAP44XX_IRQ_LOCALTIMER; 35 evt->irq = OMAP44XX_IRQ_LOCALTIMER;
32 twd_timer_setup(evt); 36 twd_timer_setup(evt);
37 return 0;
33} 38}
34 39
diff --git a/arch/arm/mach-omap2/usb-ehci.c b/arch/arm/mach-omap2/usb-ehci.c
deleted file mode 100644
index b11bf385d360..000000000000
--- a/arch/arm/mach-omap2/usb-ehci.c
+++ /dev/null
@@ -1,394 +0,0 @@
1/*
2 * linux/arch/arm/mach-omap2/usb-ehci.c
3 *
4 * This file will contain the board specific details for the
5 * Synopsys EHCI host controller on OMAP3430
6 *
7 * Copyright (C) 2007 Texas Instruments
8 * Author: Vikram Pandita <vikram.pandita@ti.com>
9 *
10 * Generalization by:
11 * Felipe Balbi <felipe.balbi@nokia.com>
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17
18#include <linux/types.h>
19#include <linux/errno.h>
20#include <linux/delay.h>
21#include <linux/platform_device.h>
22#include <linux/clk.h>
23#include <linux/dma-mapping.h>
24
25#include <asm/io.h>
26
27#include <mach/hardware.h>
28#include <mach/irqs.h>
29#include <plat/usb.h>
30
31#include "mux.h"
32
33#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
34
35static struct resource ehci_resources[] = {
36 {
37 .start = OMAP34XX_EHCI_BASE,
38 .end = OMAP34XX_EHCI_BASE + SZ_1K - 1,
39 .flags = IORESOURCE_MEM,
40 },
41 {
42 .start = OMAP34XX_UHH_CONFIG_BASE,
43 .end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1,
44 .flags = IORESOURCE_MEM,
45 },
46 {
47 .start = OMAP34XX_USBTLL_BASE,
48 .end = OMAP34XX_USBTLL_BASE + SZ_4K - 1,
49 .flags = IORESOURCE_MEM,
50 },
51 { /* general IRQ */
52 .start = INT_34XX_EHCI_IRQ,
53 .flags = IORESOURCE_IRQ,
54 }
55};
56
57static u64 ehci_dmamask = ~(u32)0;
58static struct platform_device ehci_device = {
59 .name = "ehci-omap",
60 .id = 0,
61 .dev = {
62 .dma_mask = &ehci_dmamask,
63 .coherent_dma_mask = 0xffffffff,
64 .platform_data = NULL,
65 },
66 .num_resources = ARRAY_SIZE(ehci_resources),
67 .resource = ehci_resources,
68};
69
70/* MUX settings for EHCI pins */
71/*
72 * setup_ehci_io_mux - initialize IO pad mux for USBHOST
73 */
74static void setup_ehci_io_mux(const enum ehci_hcd_omap_mode *port_mode)
75{
76 switch (port_mode[0]) {
77 case EHCI_HCD_OMAP_MODE_PHY:
78 omap_mux_init_signal("hsusb1_stp", OMAP_PIN_OUTPUT);
79 omap_mux_init_signal("hsusb1_clk", OMAP_PIN_OUTPUT);
80 omap_mux_init_signal("hsusb1_dir", OMAP_PIN_INPUT_PULLDOWN);
81 omap_mux_init_signal("hsusb1_nxt", OMAP_PIN_INPUT_PULLDOWN);
82 omap_mux_init_signal("hsusb1_data0", OMAP_PIN_INPUT_PULLDOWN);
83 omap_mux_init_signal("hsusb1_data1", OMAP_PIN_INPUT_PULLDOWN);
84 omap_mux_init_signal("hsusb1_data2", OMAP_PIN_INPUT_PULLDOWN);
85 omap_mux_init_signal("hsusb1_data3", OMAP_PIN_INPUT_PULLDOWN);
86 omap_mux_init_signal("hsusb1_data4", OMAP_PIN_INPUT_PULLDOWN);
87 omap_mux_init_signal("hsusb1_data5", OMAP_PIN_INPUT_PULLDOWN);
88 omap_mux_init_signal("hsusb1_data6", OMAP_PIN_INPUT_PULLDOWN);
89 omap_mux_init_signal("hsusb1_data7", OMAP_PIN_INPUT_PULLDOWN);
90 break;
91 case EHCI_HCD_OMAP_MODE_TLL:
92 omap_mux_init_signal("hsusb1_tll_stp",
93 OMAP_PIN_INPUT_PULLUP);
94 omap_mux_init_signal("hsusb1_tll_clk",
95 OMAP_PIN_INPUT_PULLDOWN);
96 omap_mux_init_signal("hsusb1_tll_dir",
97 OMAP_PIN_INPUT_PULLDOWN);
98 omap_mux_init_signal("hsusb1_tll_nxt",
99 OMAP_PIN_INPUT_PULLDOWN);
100 omap_mux_init_signal("hsusb1_tll_data0",
101 OMAP_PIN_INPUT_PULLDOWN);
102 omap_mux_init_signal("hsusb1_tll_data1",
103 OMAP_PIN_INPUT_PULLDOWN);
104 omap_mux_init_signal("hsusb1_tll_data2",
105 OMAP_PIN_INPUT_PULLDOWN);
106 omap_mux_init_signal("hsusb1_tll_data3",
107 OMAP_PIN_INPUT_PULLDOWN);
108 omap_mux_init_signal("hsusb1_tll_data4",
109 OMAP_PIN_INPUT_PULLDOWN);
110 omap_mux_init_signal("hsusb1_tll_data5",
111 OMAP_PIN_INPUT_PULLDOWN);
112 omap_mux_init_signal("hsusb1_tll_data6",
113 OMAP_PIN_INPUT_PULLDOWN);
114 omap_mux_init_signal("hsusb1_tll_data7",
115 OMAP_PIN_INPUT_PULLDOWN);
116 break;
117 case EHCI_HCD_OMAP_MODE_UNKNOWN:
118 /* FALLTHROUGH */
119 default:
120 break;
121 }
122
123 switch (port_mode[1]) {
124 case EHCI_HCD_OMAP_MODE_PHY:
125 omap_mux_init_signal("hsusb2_stp", OMAP_PIN_OUTPUT);
126 omap_mux_init_signal("hsusb2_clk", OMAP_PIN_OUTPUT);
127 omap_mux_init_signal("hsusb2_dir", OMAP_PIN_INPUT_PULLDOWN);
128 omap_mux_init_signal("hsusb2_nxt", OMAP_PIN_INPUT_PULLDOWN);
129 omap_mux_init_signal("hsusb2_data0",
130 OMAP_PIN_INPUT_PULLDOWN);
131 omap_mux_init_signal("hsusb2_data1",
132 OMAP_PIN_INPUT_PULLDOWN);
133 omap_mux_init_signal("hsusb2_data2",
134 OMAP_PIN_INPUT_PULLDOWN);
135 omap_mux_init_signal("hsusb2_data3",
136 OMAP_PIN_INPUT_PULLDOWN);
137 omap_mux_init_signal("hsusb2_data4",
138 OMAP_PIN_INPUT_PULLDOWN);
139 omap_mux_init_signal("hsusb2_data5",
140 OMAP_PIN_INPUT_PULLDOWN);
141 omap_mux_init_signal("hsusb2_data6",
142 OMAP_PIN_INPUT_PULLDOWN);
143 omap_mux_init_signal("hsusb2_data7",
144 OMAP_PIN_INPUT_PULLDOWN);
145 break;
146 case EHCI_HCD_OMAP_MODE_TLL:
147 omap_mux_init_signal("hsusb2_tll_stp",
148 OMAP_PIN_INPUT_PULLUP);
149 omap_mux_init_signal("hsusb2_tll_clk",
150 OMAP_PIN_INPUT_PULLDOWN);
151 omap_mux_init_signal("hsusb2_tll_dir",
152 OMAP_PIN_INPUT_PULLDOWN);
153 omap_mux_init_signal("hsusb2_tll_nxt",
154 OMAP_PIN_INPUT_PULLDOWN);
155 omap_mux_init_signal("hsusb2_tll_data0",
156 OMAP_PIN_INPUT_PULLDOWN);
157 omap_mux_init_signal("hsusb2_tll_data1",
158 OMAP_PIN_INPUT_PULLDOWN);
159 omap_mux_init_signal("hsusb2_tll_data2",
160 OMAP_PIN_INPUT_PULLDOWN);
161 omap_mux_init_signal("hsusb2_tll_data3",
162 OMAP_PIN_INPUT_PULLDOWN);
163 omap_mux_init_signal("hsusb2_tll_data4",
164 OMAP_PIN_INPUT_PULLDOWN);
165 omap_mux_init_signal("hsusb2_tll_data5",
166 OMAP_PIN_INPUT_PULLDOWN);
167 omap_mux_init_signal("hsusb2_tll_data6",
168 OMAP_PIN_INPUT_PULLDOWN);
169 omap_mux_init_signal("hsusb2_tll_data7",
170 OMAP_PIN_INPUT_PULLDOWN);
171 break;
172 case EHCI_HCD_OMAP_MODE_UNKNOWN:
173 /* FALLTHROUGH */
174 default:
175 break;
176 }
177
178 switch (port_mode[2]) {
179 case EHCI_HCD_OMAP_MODE_PHY:
180 printk(KERN_WARNING "Port3 can't be used in PHY mode\n");
181 break;
182 case EHCI_HCD_OMAP_MODE_TLL:
183 omap_mux_init_signal("hsusb3_tll_stp",
184 OMAP_PIN_INPUT_PULLUP);
185 omap_mux_init_signal("hsusb3_tll_clk",
186 OMAP_PIN_INPUT_PULLDOWN);
187 omap_mux_init_signal("hsusb3_tll_dir",
188 OMAP_PIN_INPUT_PULLDOWN);
189 omap_mux_init_signal("hsusb3_tll_nxt",
190 OMAP_PIN_INPUT_PULLDOWN);
191 omap_mux_init_signal("hsusb3_tll_data0",
192 OMAP_PIN_INPUT_PULLDOWN);
193 omap_mux_init_signal("hsusb3_tll_data1",
194 OMAP_PIN_INPUT_PULLDOWN);
195 omap_mux_init_signal("hsusb3_tll_data2",
196 OMAP_PIN_INPUT_PULLDOWN);
197 omap_mux_init_signal("hsusb3_tll_data3",
198 OMAP_PIN_INPUT_PULLDOWN);
199 omap_mux_init_signal("hsusb3_tll_data4",
200 OMAP_PIN_INPUT_PULLDOWN);
201 omap_mux_init_signal("hsusb3_tll_data5",
202 OMAP_PIN_INPUT_PULLDOWN);
203 omap_mux_init_signal("hsusb3_tll_data6",
204 OMAP_PIN_INPUT_PULLDOWN);
205 omap_mux_init_signal("hsusb3_tll_data7",
206 OMAP_PIN_INPUT_PULLDOWN);
207 break;
208 case EHCI_HCD_OMAP_MODE_UNKNOWN:
209 /* FALLTHROUGH */
210 default:
211 break;
212 }
213
214 return;
215}
216
217void __init usb_ehci_init(const struct ehci_hcd_omap_platform_data *pdata)
218{
219 platform_device_add_data(&ehci_device, pdata, sizeof(*pdata));
220
221 /* Setup Pin IO MUX for EHCI */
222 if (cpu_is_omap34xx())
223 setup_ehci_io_mux(pdata->port_mode);
224
225 if (platform_device_register(&ehci_device) < 0) {
226 printk(KERN_ERR "Unable to register HS-USB (EHCI) device\n");
227 return;
228 }
229}
230
231#else
232
233void __init usb_ehci_init(const struct ehci_hcd_omap_platform_data *pdata)
234
235{
236}
237
238#endif /* CONFIG_USB_EHCI_HCD */
239
240#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
241
242static struct resource ohci_resources[] = {
243 {
244 .start = OMAP34XX_OHCI_BASE,
245 .end = OMAP34XX_OHCI_BASE + SZ_1K - 1,
246 .flags = IORESOURCE_MEM,
247 },
248 {
249 .start = OMAP34XX_UHH_CONFIG_BASE,
250 .end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1,
251 .flags = IORESOURCE_MEM,
252 },
253 {
254 .start = OMAP34XX_USBTLL_BASE,
255 .end = OMAP34XX_USBTLL_BASE + SZ_4K - 1,
256 .flags = IORESOURCE_MEM,
257 },
258 { /* general IRQ */
259 .start = INT_34XX_OHCI_IRQ,
260 .flags = IORESOURCE_IRQ,
261 }
262};
263
264static u64 ohci_dmamask = DMA_BIT_MASK(32);
265
266static struct platform_device ohci_device = {
267 .name = "ohci-omap3",
268 .id = 0,
269 .dev = {
270 .dma_mask = &ohci_dmamask,
271 .coherent_dma_mask = 0xffffffff,
272 },
273 .num_resources = ARRAY_SIZE(ohci_resources),
274 .resource = ohci_resources,
275};
276
277static void setup_ohci_io_mux(const enum ohci_omap3_port_mode *port_mode)
278{
279 switch (port_mode[0]) {
280 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
281 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
282 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
283 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
284 omap_mux_init_signal("mm1_rxdp",
285 OMAP_PIN_INPUT_PULLDOWN);
286 omap_mux_init_signal("mm1_rxdm",
287 OMAP_PIN_INPUT_PULLDOWN);
288 /* FALLTHROUGH */
289 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
290 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
291 omap_mux_init_signal("mm1_rxrcv",
292 OMAP_PIN_INPUT_PULLDOWN);
293 /* FALLTHROUGH */
294 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
295 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
296 omap_mux_init_signal("mm1_txen_n", OMAP_PIN_OUTPUT);
297 /* FALLTHROUGH */
298 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
299 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
300 omap_mux_init_signal("mm1_txse0",
301 OMAP_PIN_INPUT_PULLDOWN);
302 omap_mux_init_signal("mm1_txdat",
303 OMAP_PIN_INPUT_PULLDOWN);
304 break;
305 case OMAP_OHCI_PORT_MODE_UNUSED:
306 /* FALLTHROUGH */
307 default:
308 break;
309 }
310 switch (port_mode[1]) {
311 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
312 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
313 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
314 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
315 omap_mux_init_signal("mm2_rxdp",
316 OMAP_PIN_INPUT_PULLDOWN);
317 omap_mux_init_signal("mm2_rxdm",
318 OMAP_PIN_INPUT_PULLDOWN);
319 /* FALLTHROUGH */
320 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
321 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
322 omap_mux_init_signal("mm2_rxrcv",
323 OMAP_PIN_INPUT_PULLDOWN);
324 /* FALLTHROUGH */
325 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
326 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
327 omap_mux_init_signal("mm2_txen_n", OMAP_PIN_OUTPUT);
328 /* FALLTHROUGH */
329 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
330 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
331 omap_mux_init_signal("mm2_txse0",
332 OMAP_PIN_INPUT_PULLDOWN);
333 omap_mux_init_signal("mm2_txdat",
334 OMAP_PIN_INPUT_PULLDOWN);
335 break;
336 case OMAP_OHCI_PORT_MODE_UNUSED:
337 /* FALLTHROUGH */
338 default:
339 break;
340 }
341 switch (port_mode[2]) {
342 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
343 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
344 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
345 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
346 omap_mux_init_signal("mm3_rxdp",
347 OMAP_PIN_INPUT_PULLDOWN);
348 omap_mux_init_signal("mm3_rxdm",
349 OMAP_PIN_INPUT_PULLDOWN);
350 /* FALLTHROUGH */
351 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
352 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
353 omap_mux_init_signal("mm3_rxrcv",
354 OMAP_PIN_INPUT_PULLDOWN);
355 /* FALLTHROUGH */
356 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
357 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
358 omap_mux_init_signal("mm3_txen_n", OMAP_PIN_OUTPUT);
359 /* FALLTHROUGH */
360 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
361 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
362 omap_mux_init_signal("mm3_txse0",
363 OMAP_PIN_INPUT_PULLDOWN);
364 omap_mux_init_signal("mm3_txdat",
365 OMAP_PIN_INPUT_PULLDOWN);
366 break;
367 case OMAP_OHCI_PORT_MODE_UNUSED:
368 /* FALLTHROUGH */
369 default:
370 break;
371 }
372}
373
374void __init usb_ohci_init(const struct ohci_hcd_omap_platform_data *pdata)
375{
376 platform_device_add_data(&ohci_device, pdata, sizeof(*pdata));
377
378 /* Setup Pin IO MUX for OHCI */
379 if (cpu_is_omap34xx())
380 setup_ohci_io_mux(pdata->port_mode);
381
382 if (platform_device_register(&ohci_device) < 0) {
383 pr_err("Unable to register FS-USB (OHCI) device\n");
384 return;
385 }
386}
387
388#else
389
390void __init usb_ohci_init(const struct ohci_hcd_omap_platform_data *pdata)
391{
392}
393
394#endif /* CONFIG_USB_OHCI_HCD */
diff --git a/arch/arm/mach-omap2/usb-fs.c b/arch/arm/mach-omap2/usb-fs.c
index a216d88b04b5..1481078763b8 100644
--- a/arch/arm/mach-omap2/usb-fs.c
+++ b/arch/arm/mach-omap2/usb-fs.c
@@ -29,18 +29,18 @@
29 29
30#include <asm/irq.h> 30#include <asm/irq.h>
31 31
32#include <plat/control.h>
33#include <plat/usb.h> 32#include <plat/usb.h>
34#include <plat/board.h> 33#include <plat/board.h>
35 34
35#include "control.h"
36#include "mux.h"
37
36#define INT_USB_IRQ_GEN INT_24XX_USB_IRQ_GEN 38#define INT_USB_IRQ_GEN INT_24XX_USB_IRQ_GEN
37#define INT_USB_IRQ_NISO INT_24XX_USB_IRQ_NISO 39#define INT_USB_IRQ_NISO INT_24XX_USB_IRQ_NISO
38#define INT_USB_IRQ_ISO INT_24XX_USB_IRQ_ISO 40#define INT_USB_IRQ_ISO INT_24XX_USB_IRQ_ISO
39#define INT_USB_IRQ_HGEN INT_24XX_USB_IRQ_HGEN 41#define INT_USB_IRQ_HGEN INT_24XX_USB_IRQ_HGEN
40#define INT_USB_IRQ_OTG INT_24XX_USB_IRQ_OTG 42#define INT_USB_IRQ_OTG INT_24XX_USB_IRQ_OTG
41 43
42#include "mux.h"
43
44#if defined(CONFIG_ARCH_OMAP2) 44#if defined(CONFIG_ARCH_OMAP2)
45 45
46#ifdef CONFIG_USB_GADGET_OMAP 46#ifdef CONFIG_USB_GADGET_OMAP
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
new file mode 100644
index 000000000000..89ae29847c59
--- /dev/null
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -0,0 +1,574 @@
1/*
2 * usb-host.c - OMAP USB Host
3 *
4 * This file will contain the board specific details for the
5 * Synopsys EHCI/OHCI host controller on OMAP3430 and onwards
6 *
7 * Copyright (C) 2007-2011 Texas Instruments
8 * Author: Vikram Pandita <vikram.pandita@ti.com>
9 * Author: Keshava Munegowda <keshava_mgowda@ti.com>
10 *
11 * Generalization by:
12 * Felipe Balbi <balbi@ti.com>
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 */
18
19#include <linux/types.h>
20#include <linux/errno.h>
21#include <linux/delay.h>
22#include <linux/platform_device.h>
23#include <linux/slab.h>
24#include <linux/dma-mapping.h>
25
26#include <asm/io.h>
27
28#include <mach/hardware.h>
29#include <mach/irqs.h>
30#include <plat/usb.h>
31
32#include "mux.h"
33
34#ifdef CONFIG_MFD_OMAP_USB_HOST
35
36#define OMAP_USBHS_DEVICE "usbhs-omap"
37
38static struct resource usbhs_resources[] = {
39 {
40 .name = "uhh",
41 .flags = IORESOURCE_MEM,
42 },
43 {
44 .name = "tll",
45 .flags = IORESOURCE_MEM,
46 },
47 {
48 .name = "ehci",
49 .flags = IORESOURCE_MEM,
50 },
51 {
52 .name = "ehci-irq",
53 .flags = IORESOURCE_IRQ,
54 },
55 {
56 .name = "ohci",
57 .flags = IORESOURCE_MEM,
58 },
59 {
60 .name = "ohci-irq",
61 .flags = IORESOURCE_IRQ,
62 }
63};
64
65static struct platform_device usbhs_device = {
66 .name = OMAP_USBHS_DEVICE,
67 .id = 0,
68 .num_resources = ARRAY_SIZE(usbhs_resources),
69 .resource = usbhs_resources,
70};
71
72static struct usbhs_omap_platform_data usbhs_data;
73static struct ehci_hcd_omap_platform_data ehci_data;
74static struct ohci_hcd_omap_platform_data ohci_data;
75
76/* MUX settings for EHCI pins */
77/*
78 * setup_ehci_io_mux - initialize IO pad mux for USBHOST
79 */
80static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
81{
82 switch (port_mode[0]) {
83 case OMAP_EHCI_PORT_MODE_PHY:
84 omap_mux_init_signal("hsusb1_stp", OMAP_PIN_OUTPUT);
85 omap_mux_init_signal("hsusb1_clk", OMAP_PIN_OUTPUT);
86 omap_mux_init_signal("hsusb1_dir", OMAP_PIN_INPUT_PULLDOWN);
87 omap_mux_init_signal("hsusb1_nxt", OMAP_PIN_INPUT_PULLDOWN);
88 omap_mux_init_signal("hsusb1_data0", OMAP_PIN_INPUT_PULLDOWN);
89 omap_mux_init_signal("hsusb1_data1", OMAP_PIN_INPUT_PULLDOWN);
90 omap_mux_init_signal("hsusb1_data2", OMAP_PIN_INPUT_PULLDOWN);
91 omap_mux_init_signal("hsusb1_data3", OMAP_PIN_INPUT_PULLDOWN);
92 omap_mux_init_signal("hsusb1_data4", OMAP_PIN_INPUT_PULLDOWN);
93 omap_mux_init_signal("hsusb1_data5", OMAP_PIN_INPUT_PULLDOWN);
94 omap_mux_init_signal("hsusb1_data6", OMAP_PIN_INPUT_PULLDOWN);
95 omap_mux_init_signal("hsusb1_data7", OMAP_PIN_INPUT_PULLDOWN);
96 break;
97 case OMAP_EHCI_PORT_MODE_TLL:
98 omap_mux_init_signal("hsusb1_tll_stp",
99 OMAP_PIN_INPUT_PULLUP);
100 omap_mux_init_signal("hsusb1_tll_clk",
101 OMAP_PIN_INPUT_PULLDOWN);
102 omap_mux_init_signal("hsusb1_tll_dir",
103 OMAP_PIN_INPUT_PULLDOWN);
104 omap_mux_init_signal("hsusb1_tll_nxt",
105 OMAP_PIN_INPUT_PULLDOWN);
106 omap_mux_init_signal("hsusb1_tll_data0",
107 OMAP_PIN_INPUT_PULLDOWN);
108 omap_mux_init_signal("hsusb1_tll_data1",
109 OMAP_PIN_INPUT_PULLDOWN);
110 omap_mux_init_signal("hsusb1_tll_data2",
111 OMAP_PIN_INPUT_PULLDOWN);
112 omap_mux_init_signal("hsusb1_tll_data3",
113 OMAP_PIN_INPUT_PULLDOWN);
114 omap_mux_init_signal("hsusb1_tll_data4",
115 OMAP_PIN_INPUT_PULLDOWN);
116 omap_mux_init_signal("hsusb1_tll_data5",
117 OMAP_PIN_INPUT_PULLDOWN);
118 omap_mux_init_signal("hsusb1_tll_data6",
119 OMAP_PIN_INPUT_PULLDOWN);
120 omap_mux_init_signal("hsusb1_tll_data7",
121 OMAP_PIN_INPUT_PULLDOWN);
122 break;
123 case OMAP_USBHS_PORT_MODE_UNUSED:
124 /* FALLTHROUGH */
125 default:
126 break;
127 }
128
129 switch (port_mode[1]) {
130 case OMAP_EHCI_PORT_MODE_PHY:
131 omap_mux_init_signal("hsusb2_stp", OMAP_PIN_OUTPUT);
132 omap_mux_init_signal("hsusb2_clk", OMAP_PIN_OUTPUT);
133 omap_mux_init_signal("hsusb2_dir", OMAP_PIN_INPUT_PULLDOWN);
134 omap_mux_init_signal("hsusb2_nxt", OMAP_PIN_INPUT_PULLDOWN);
135 omap_mux_init_signal("hsusb2_data0",
136 OMAP_PIN_INPUT_PULLDOWN);
137 omap_mux_init_signal("hsusb2_data1",
138 OMAP_PIN_INPUT_PULLDOWN);
139 omap_mux_init_signal("hsusb2_data2",
140 OMAP_PIN_INPUT_PULLDOWN);
141 omap_mux_init_signal("hsusb2_data3",
142 OMAP_PIN_INPUT_PULLDOWN);
143 omap_mux_init_signal("hsusb2_data4",
144 OMAP_PIN_INPUT_PULLDOWN);
145 omap_mux_init_signal("hsusb2_data5",
146 OMAP_PIN_INPUT_PULLDOWN);
147 omap_mux_init_signal("hsusb2_data6",
148 OMAP_PIN_INPUT_PULLDOWN);
149 omap_mux_init_signal("hsusb2_data7",
150 OMAP_PIN_INPUT_PULLDOWN);
151 break;
152 case OMAP_EHCI_PORT_MODE_TLL:
153 omap_mux_init_signal("hsusb2_tll_stp",
154 OMAP_PIN_INPUT_PULLUP);
155 omap_mux_init_signal("hsusb2_tll_clk",
156 OMAP_PIN_INPUT_PULLDOWN);
157 omap_mux_init_signal("hsusb2_tll_dir",
158 OMAP_PIN_INPUT_PULLDOWN);
159 omap_mux_init_signal("hsusb2_tll_nxt",
160 OMAP_PIN_INPUT_PULLDOWN);
161 omap_mux_init_signal("hsusb2_tll_data0",
162 OMAP_PIN_INPUT_PULLDOWN);
163 omap_mux_init_signal("hsusb2_tll_data1",
164 OMAP_PIN_INPUT_PULLDOWN);
165 omap_mux_init_signal("hsusb2_tll_data2",
166 OMAP_PIN_INPUT_PULLDOWN);
167 omap_mux_init_signal("hsusb2_tll_data3",
168 OMAP_PIN_INPUT_PULLDOWN);
169 omap_mux_init_signal("hsusb2_tll_data4",
170 OMAP_PIN_INPUT_PULLDOWN);
171 omap_mux_init_signal("hsusb2_tll_data5",
172 OMAP_PIN_INPUT_PULLDOWN);
173 omap_mux_init_signal("hsusb2_tll_data6",
174 OMAP_PIN_INPUT_PULLDOWN);
175 omap_mux_init_signal("hsusb2_tll_data7",
176 OMAP_PIN_INPUT_PULLDOWN);
177 break;
178 case OMAP_USBHS_PORT_MODE_UNUSED:
179 /* FALLTHROUGH */
180 default:
181 break;
182 }
183
184 switch (port_mode[2]) {
185 case OMAP_EHCI_PORT_MODE_PHY:
186 printk(KERN_WARNING "Port3 can't be used in PHY mode\n");
187 break;
188 case OMAP_EHCI_PORT_MODE_TLL:
189 omap_mux_init_signal("hsusb3_tll_stp",
190 OMAP_PIN_INPUT_PULLUP);
191 omap_mux_init_signal("hsusb3_tll_clk",
192 OMAP_PIN_INPUT_PULLDOWN);
193 omap_mux_init_signal("hsusb3_tll_dir",
194 OMAP_PIN_INPUT_PULLDOWN);
195 omap_mux_init_signal("hsusb3_tll_nxt",
196 OMAP_PIN_INPUT_PULLDOWN);
197 omap_mux_init_signal("hsusb3_tll_data0",
198 OMAP_PIN_INPUT_PULLDOWN);
199 omap_mux_init_signal("hsusb3_tll_data1",
200 OMAP_PIN_INPUT_PULLDOWN);
201 omap_mux_init_signal("hsusb3_tll_data2",
202 OMAP_PIN_INPUT_PULLDOWN);
203 omap_mux_init_signal("hsusb3_tll_data3",
204 OMAP_PIN_INPUT_PULLDOWN);
205 omap_mux_init_signal("hsusb3_tll_data4",
206 OMAP_PIN_INPUT_PULLDOWN);
207 omap_mux_init_signal("hsusb3_tll_data5",
208 OMAP_PIN_INPUT_PULLDOWN);
209 omap_mux_init_signal("hsusb3_tll_data6",
210 OMAP_PIN_INPUT_PULLDOWN);
211 omap_mux_init_signal("hsusb3_tll_data7",
212 OMAP_PIN_INPUT_PULLDOWN);
213 break;
214 case OMAP_USBHS_PORT_MODE_UNUSED:
215 /* FALLTHROUGH */
216 default:
217 break;
218 }
219
220 return;
221}
222
223static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
224{
225 switch (port_mode[0]) {
226 case OMAP_EHCI_PORT_MODE_PHY:
227 omap_mux_init_signal("usbb1_ulpiphy_stp",
228 OMAP_PIN_OUTPUT);
229 omap_mux_init_signal("usbb1_ulpiphy_clk",
230 OMAP_PIN_INPUT_PULLDOWN);
231 omap_mux_init_signal("usbb1_ulpiphy_dir",
232 OMAP_PIN_INPUT_PULLDOWN);
233 omap_mux_init_signal("usbb1_ulpiphy_nxt",
234 OMAP_PIN_INPUT_PULLDOWN);
235 omap_mux_init_signal("usbb1_ulpiphy_dat0",
236 OMAP_PIN_INPUT_PULLDOWN);
237 omap_mux_init_signal("usbb1_ulpiphy_dat1",
238 OMAP_PIN_INPUT_PULLDOWN);
239 omap_mux_init_signal("usbb1_ulpiphy_dat2",
240 OMAP_PIN_INPUT_PULLDOWN);
241 omap_mux_init_signal("usbb1_ulpiphy_dat3",
242 OMAP_PIN_INPUT_PULLDOWN);
243 omap_mux_init_signal("usbb1_ulpiphy_dat4",
244 OMAP_PIN_INPUT_PULLDOWN);
245 omap_mux_init_signal("usbb1_ulpiphy_dat5",
246 OMAP_PIN_INPUT_PULLDOWN);
247 omap_mux_init_signal("usbb1_ulpiphy_dat6",
248 OMAP_PIN_INPUT_PULLDOWN);
249 omap_mux_init_signal("usbb1_ulpiphy_dat7",
250 OMAP_PIN_INPUT_PULLDOWN);
251 break;
252 case OMAP_EHCI_PORT_MODE_TLL:
253 omap_mux_init_signal("usbb1_ulpitll_stp",
254 OMAP_PIN_INPUT_PULLUP);
255 omap_mux_init_signal("usbb1_ulpitll_clk",
256 OMAP_PIN_INPUT_PULLDOWN);
257 omap_mux_init_signal("usbb1_ulpitll_dir",
258 OMAP_PIN_INPUT_PULLDOWN);
259 omap_mux_init_signal("usbb1_ulpitll_nxt",
260 OMAP_PIN_INPUT_PULLDOWN);
261 omap_mux_init_signal("usbb1_ulpitll_dat0",
262 OMAP_PIN_INPUT_PULLDOWN);
263 omap_mux_init_signal("usbb1_ulpitll_dat1",
264 OMAP_PIN_INPUT_PULLDOWN);
265 omap_mux_init_signal("usbb1_ulpitll_dat2",
266 OMAP_PIN_INPUT_PULLDOWN);
267 omap_mux_init_signal("usbb1_ulpitll_dat3",
268 OMAP_PIN_INPUT_PULLDOWN);
269 omap_mux_init_signal("usbb1_ulpitll_dat4",
270 OMAP_PIN_INPUT_PULLDOWN);
271 omap_mux_init_signal("usbb1_ulpitll_dat5",
272 OMAP_PIN_INPUT_PULLDOWN);
273 omap_mux_init_signal("usbb1_ulpitll_dat6",
274 OMAP_PIN_INPUT_PULLDOWN);
275 omap_mux_init_signal("usbb1_ulpitll_dat7",
276 OMAP_PIN_INPUT_PULLDOWN);
277 break;
278 case OMAP_USBHS_PORT_MODE_UNUSED:
279 default:
280 break;
281 }
282 switch (port_mode[1]) {
283 case OMAP_EHCI_PORT_MODE_PHY:
284 omap_mux_init_signal("usbb2_ulpiphy_stp",
285 OMAP_PIN_OUTPUT);
286 omap_mux_init_signal("usbb2_ulpiphy_clk",
287 OMAP_PIN_INPUT_PULLDOWN);
288 omap_mux_init_signal("usbb2_ulpiphy_dir",
289 OMAP_PIN_INPUT_PULLDOWN);
290 omap_mux_init_signal("usbb2_ulpiphy_nxt",
291 OMAP_PIN_INPUT_PULLDOWN);
292 omap_mux_init_signal("usbb2_ulpiphy_dat0",
293 OMAP_PIN_INPUT_PULLDOWN);
294 omap_mux_init_signal("usbb2_ulpiphy_dat1",
295 OMAP_PIN_INPUT_PULLDOWN);
296 omap_mux_init_signal("usbb2_ulpiphy_dat2",
297 OMAP_PIN_INPUT_PULLDOWN);
298 omap_mux_init_signal("usbb2_ulpiphy_dat3",
299 OMAP_PIN_INPUT_PULLDOWN);
300 omap_mux_init_signal("usbb2_ulpiphy_dat4",
301 OMAP_PIN_INPUT_PULLDOWN);
302 omap_mux_init_signal("usbb2_ulpiphy_dat5",
303 OMAP_PIN_INPUT_PULLDOWN);
304 omap_mux_init_signal("usbb2_ulpiphy_dat6",
305 OMAP_PIN_INPUT_PULLDOWN);
306 omap_mux_init_signal("usbb2_ulpiphy_dat7",
307 OMAP_PIN_INPUT_PULLDOWN);
308 break;
309 case OMAP_EHCI_PORT_MODE_TLL:
310 omap_mux_init_signal("usbb2_ulpitll_stp",
311 OMAP_PIN_INPUT_PULLUP);
312 omap_mux_init_signal("usbb2_ulpitll_clk",
313 OMAP_PIN_INPUT_PULLDOWN);
314 omap_mux_init_signal("usbb2_ulpitll_dir",
315 OMAP_PIN_INPUT_PULLDOWN);
316 omap_mux_init_signal("usbb2_ulpitll_nxt",
317 OMAP_PIN_INPUT_PULLDOWN);
318 omap_mux_init_signal("usbb2_ulpitll_dat0",
319 OMAP_PIN_INPUT_PULLDOWN);
320 omap_mux_init_signal("usbb2_ulpitll_dat1",
321 OMAP_PIN_INPUT_PULLDOWN);
322 omap_mux_init_signal("usbb2_ulpitll_dat2",
323 OMAP_PIN_INPUT_PULLDOWN);
324 omap_mux_init_signal("usbb2_ulpitll_dat3",
325 OMAP_PIN_INPUT_PULLDOWN);
326 omap_mux_init_signal("usbb2_ulpitll_dat4",
327 OMAP_PIN_INPUT_PULLDOWN);
328 omap_mux_init_signal("usbb2_ulpitll_dat5",
329 OMAP_PIN_INPUT_PULLDOWN);
330 omap_mux_init_signal("usbb2_ulpitll_dat6",
331 OMAP_PIN_INPUT_PULLDOWN);
332 omap_mux_init_signal("usbb2_ulpitll_dat7",
333 OMAP_PIN_INPUT_PULLDOWN);
334 break;
335 case OMAP_USBHS_PORT_MODE_UNUSED:
336 default:
337 break;
338 }
339}
340
341static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
342{
343 switch (port_mode[0]) {
344 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
345 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
346 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
347 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
348 omap_mux_init_signal("mm1_rxdp",
349 OMAP_PIN_INPUT_PULLDOWN);
350 omap_mux_init_signal("mm1_rxdm",
351 OMAP_PIN_INPUT_PULLDOWN);
352 /* FALLTHROUGH */
353 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
354 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
355 omap_mux_init_signal("mm1_rxrcv",
356 OMAP_PIN_INPUT_PULLDOWN);
357 /* FALLTHROUGH */
358 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
359 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
360 omap_mux_init_signal("mm1_txen_n", OMAP_PIN_OUTPUT);
361 /* FALLTHROUGH */
362 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
363 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
364 omap_mux_init_signal("mm1_txse0",
365 OMAP_PIN_INPUT_PULLDOWN);
366 omap_mux_init_signal("mm1_txdat",
367 OMAP_PIN_INPUT_PULLDOWN);
368 break;
369 case OMAP_USBHS_PORT_MODE_UNUSED:
370 /* FALLTHROUGH */
371 default:
372 break;
373 }
374 switch (port_mode[1]) {
375 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
376 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
377 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
378 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
379 omap_mux_init_signal("mm2_rxdp",
380 OMAP_PIN_INPUT_PULLDOWN);
381 omap_mux_init_signal("mm2_rxdm",
382 OMAP_PIN_INPUT_PULLDOWN);
383 /* FALLTHROUGH */
384 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
385 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
386 omap_mux_init_signal("mm2_rxrcv",
387 OMAP_PIN_INPUT_PULLDOWN);
388 /* FALLTHROUGH */
389 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
390 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
391 omap_mux_init_signal("mm2_txen_n", OMAP_PIN_OUTPUT);
392 /* FALLTHROUGH */
393 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
394 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
395 omap_mux_init_signal("mm2_txse0",
396 OMAP_PIN_INPUT_PULLDOWN);
397 omap_mux_init_signal("mm2_txdat",
398 OMAP_PIN_INPUT_PULLDOWN);
399 break;
400 case OMAP_USBHS_PORT_MODE_UNUSED:
401 /* FALLTHROUGH */
402 default:
403 break;
404 }
405 switch (port_mode[2]) {
406 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
407 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
408 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
409 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
410 omap_mux_init_signal("mm3_rxdp",
411 OMAP_PIN_INPUT_PULLDOWN);
412 omap_mux_init_signal("mm3_rxdm",
413 OMAP_PIN_INPUT_PULLDOWN);
414 /* FALLTHROUGH */
415 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
416 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
417 omap_mux_init_signal("mm3_rxrcv",
418 OMAP_PIN_INPUT_PULLDOWN);
419 /* FALLTHROUGH */
420 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
421 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
422 omap_mux_init_signal("mm3_txen_n", OMAP_PIN_OUTPUT);
423 /* FALLTHROUGH */
424 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
425 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
426 omap_mux_init_signal("mm3_txse0",
427 OMAP_PIN_INPUT_PULLDOWN);
428 omap_mux_init_signal("mm3_txdat",
429 OMAP_PIN_INPUT_PULLDOWN);
430 break;
431 case OMAP_USBHS_PORT_MODE_UNUSED:
432 /* FALLTHROUGH */
433 default:
434 break;
435 }
436}
437
438static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
439{
440 switch (port_mode[0]) {
441 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
442 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
443 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
444 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
445 omap_mux_init_signal("usbb1_mm_rxdp",
446 OMAP_PIN_INPUT_PULLDOWN);
447 omap_mux_init_signal("usbb1_mm_rxdm",
448 OMAP_PIN_INPUT_PULLDOWN);
449
450 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
451 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
452 omap_mux_init_signal("usbb1_mm_rxrcv",
453 OMAP_PIN_INPUT_PULLDOWN);
454
455 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
456 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
457 omap_mux_init_signal("usbb1_mm_txen",
458 OMAP_PIN_INPUT_PULLDOWN);
459
460
461 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
462 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
463 omap_mux_init_signal("usbb1_mm_txdat",
464 OMAP_PIN_INPUT_PULLDOWN);
465 omap_mux_init_signal("usbb1_mm_txse0",
466 OMAP_PIN_INPUT_PULLDOWN);
467 break;
468
469 case OMAP_USBHS_PORT_MODE_UNUSED:
470 default:
471 break;
472 }
473
474 switch (port_mode[1]) {
475 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
476 case OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM:
477 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0:
478 case OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM:
479 omap_mux_init_signal("usbb2_mm_rxdp",
480 OMAP_PIN_INPUT_PULLDOWN);
481 omap_mux_init_signal("usbb2_mm_rxdm",
482 OMAP_PIN_INPUT_PULLDOWN);
483
484 case OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM:
485 case OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM:
486 omap_mux_init_signal("usbb2_mm_rxrcv",
487 OMAP_PIN_INPUT_PULLDOWN);
488
489 case OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0:
490 case OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0:
491 omap_mux_init_signal("usbb2_mm_txen",
492 OMAP_PIN_INPUT_PULLDOWN);
493
494
495 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0:
496 case OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM:
497 omap_mux_init_signal("usbb2_mm_txdat",
498 OMAP_PIN_INPUT_PULLDOWN);
499 omap_mux_init_signal("usbb2_mm_txse0",
500 OMAP_PIN_INPUT_PULLDOWN);
501 break;
502
503 case OMAP_USBHS_PORT_MODE_UNUSED:
504 default:
505 break;
506 }
507}
508
509void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
510{
511 int i;
512
513 for (i = 0; i < OMAP3_HS_USB_PORTS; i++) {
514 usbhs_data.port_mode[i] = pdata->port_mode[i];
515 ohci_data.port_mode[i] = pdata->port_mode[i];
516 ehci_data.port_mode[i] = pdata->port_mode[i];
517 ehci_data.reset_gpio_port[i] = pdata->reset_gpio_port[i];
518 ehci_data.regulator[i] = pdata->regulator[i];
519 }
520 ehci_data.phy_reset = pdata->phy_reset;
521 ohci_data.es2_compatibility = pdata->es2_compatibility;
522 usbhs_data.ehci_data = &ehci_data;
523 usbhs_data.ohci_data = &ohci_data;
524
525 if (cpu_is_omap34xx()) {
526 usbhs_resources[0].start = OMAP34XX_UHH_CONFIG_BASE;
527 usbhs_resources[0].end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1;
528 usbhs_resources[1].start = OMAP34XX_USBTLL_BASE;
529 usbhs_resources[1].end = OMAP34XX_USBTLL_BASE + SZ_4K - 1;
530 usbhs_resources[2].start = OMAP34XX_EHCI_BASE;
531 usbhs_resources[2].end = OMAP34XX_EHCI_BASE + SZ_1K - 1;
532 usbhs_resources[3].start = INT_34XX_EHCI_IRQ;
533 usbhs_resources[4].start = OMAP34XX_OHCI_BASE;
534 usbhs_resources[4].end = OMAP34XX_OHCI_BASE + SZ_1K - 1;
535 usbhs_resources[5].start = INT_34XX_OHCI_IRQ;
536 setup_ehci_io_mux(pdata->port_mode);
537 setup_ohci_io_mux(pdata->port_mode);
538 } else if (cpu_is_omap44xx()) {
539 usbhs_resources[0].start = OMAP44XX_UHH_CONFIG_BASE;
540 usbhs_resources[0].end = OMAP44XX_UHH_CONFIG_BASE + SZ_1K - 1;
541 usbhs_resources[1].start = OMAP44XX_USBTLL_BASE;
542 usbhs_resources[1].end = OMAP44XX_USBTLL_BASE + SZ_4K - 1;
543 usbhs_resources[2].start = OMAP44XX_HSUSB_EHCI_BASE;
544 usbhs_resources[2].end = OMAP44XX_HSUSB_EHCI_BASE + SZ_1K - 1;
545 usbhs_resources[3].start = OMAP44XX_IRQ_EHCI;
546 usbhs_resources[4].start = OMAP44XX_HSUSB_OHCI_BASE;
547 usbhs_resources[4].end = OMAP44XX_HSUSB_OHCI_BASE + SZ_1K - 1;
548 usbhs_resources[5].start = OMAP44XX_IRQ_OHCI;
549 setup_4430ehci_io_mux(pdata->port_mode);
550 setup_4430ohci_io_mux(pdata->port_mode);
551 }
552
553 if (platform_device_add_data(&usbhs_device,
554 &usbhs_data, sizeof(usbhs_data)) < 0) {
555 printk(KERN_ERR "USBHS platform_device_add_data failed\n");
556 goto init_end;
557 }
558
559 if (platform_device_register(&usbhs_device) < 0)
560 printk(KERN_ERR "USBHS platform_device_register failed\n");
561
562init_end:
563 return;
564}
565
566#else
567
568void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
569{
570}
571
572#endif
573
574
diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c
index 33a5cde1c227..c7ed540d868d 100644
--- a/arch/arm/mach-omap2/usb-musb.c
+++ b/arch/arm/mach-omap2/usb-musb.c
@@ -28,23 +28,12 @@
28 28
29#include <mach/hardware.h> 29#include <mach/hardware.h>
30#include <mach/irqs.h> 30#include <mach/irqs.h>
31#include <mach/am35xx.h>
31#include <plat/usb.h> 32#include <plat/usb.h>
33#include <plat/omap_device.h>
34#include "mux.h"
32 35
33#ifdef CONFIG_USB_MUSB_SOC 36#if defined(CONFIG_USB_MUSB_OMAP2PLUS) || defined (CONFIG_USB_MUSB_AM35X)
34
35static struct resource musb_resources[] = {
36 [0] = { /* start and end set dynamically */
37 .flags = IORESOURCE_MEM,
38 },
39 [1] = { /* general IRQ */
40 .start = INT_243X_HS_USB_MC,
41 .flags = IORESOURCE_IRQ,
42 },
43 [2] = { /* DMA IRQ */
44 .start = INT_243X_HS_USB_DMA,
45 .flags = IORESOURCE_IRQ,
46 },
47};
48 37
49static struct musb_hdrc_config musb_config = { 38static struct musb_hdrc_config musb_config = {
50 .multipoint = 1, 39 .multipoint = 1,
@@ -73,30 +62,72 @@ static struct musb_hdrc_platform_data musb_plat = {
73 62
74static u64 musb_dmamask = DMA_BIT_MASK(32); 63static u64 musb_dmamask = DMA_BIT_MASK(32);
75 64
76static struct platform_device musb_device = { 65static struct omap_device_pm_latency omap_musb_latency[] = {
77 .name = "musb_hdrc", 66 {
78 .id = -1, 67 .deactivate_func = omap_device_idle_hwmods,
79 .dev = { 68 .activate_func = omap_device_enable_hwmods,
80 .dma_mask = &musb_dmamask, 69 .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
81 .coherent_dma_mask = DMA_BIT_MASK(32),
82 .platform_data = &musb_plat,
83 }, 70 },
84 .num_resources = ARRAY_SIZE(musb_resources),
85 .resource = musb_resources,
86}; 71};
87 72
88void __init usb_musb_init(struct omap_musb_board_data *board_data) 73static void usb_musb_mux_init(struct omap_musb_board_data *board_data)
89{ 74{
90 if (cpu_is_omap243x()) { 75 switch (board_data->interface_type) {
91 musb_resources[0].start = OMAP243X_HS_BASE; 76 case MUSB_INTERFACE_UTMI:
92 } else if (cpu_is_omap34xx()) { 77 omap_mux_init_signal("usba0_otg_dp", OMAP_PIN_INPUT);
93 musb_resources[0].start = OMAP34XX_HSUSB_OTG_BASE; 78 omap_mux_init_signal("usba0_otg_dm", OMAP_PIN_INPUT);
94 } else if (cpu_is_omap44xx()) { 79 break;
95 musb_resources[0].start = OMAP44XX_HSUSB_OTG_BASE; 80 case MUSB_INTERFACE_ULPI:
96 musb_resources[1].start = OMAP44XX_IRQ_HS_USB_MC_N; 81 omap_mux_init_signal("usba0_ulpiphy_clk",
97 musb_resources[2].start = OMAP44XX_IRQ_HS_USB_DMA_N; 82 OMAP_PIN_INPUT_PULLDOWN);
83 omap_mux_init_signal("usba0_ulpiphy_stp",
84 OMAP_PIN_INPUT_PULLDOWN);
85 omap_mux_init_signal("usba0_ulpiphy_dir",
86 OMAP_PIN_INPUT_PULLDOWN);
87 omap_mux_init_signal("usba0_ulpiphy_nxt",
88 OMAP_PIN_INPUT_PULLDOWN);
89 omap_mux_init_signal("usba0_ulpiphy_dat0",
90 OMAP_PIN_INPUT_PULLDOWN);
91 omap_mux_init_signal("usba0_ulpiphy_dat1",
92 OMAP_PIN_INPUT_PULLDOWN);
93 omap_mux_init_signal("usba0_ulpiphy_dat2",
94 OMAP_PIN_INPUT_PULLDOWN);
95 omap_mux_init_signal("usba0_ulpiphy_dat3",
96 OMAP_PIN_INPUT_PULLDOWN);
97 omap_mux_init_signal("usba0_ulpiphy_dat4",
98 OMAP_PIN_INPUT_PULLDOWN);
99 omap_mux_init_signal("usba0_ulpiphy_dat5",
100 OMAP_PIN_INPUT_PULLDOWN);
101 omap_mux_init_signal("usba0_ulpiphy_dat6",
102 OMAP_PIN_INPUT_PULLDOWN);
103 omap_mux_init_signal("usba0_ulpiphy_dat7",
104 OMAP_PIN_INPUT_PULLDOWN);
105 break;
106 default:
107 break;
98 } 108 }
99 musb_resources[0].end = musb_resources[0].start + SZ_4K - 1; 109}
110
111static struct omap_musb_board_data musb_default_board_data = {
112 .interface_type = MUSB_INTERFACE_ULPI,
113 .mode = MUSB_OTG,
114 .power = 100,
115};
116
117void __init usb_musb_init(struct omap_musb_board_data *musb_board_data)
118{
119 struct omap_hwmod *oh;
120 struct omap_device *od;
121 struct platform_device *pdev;
122 struct device *dev;
123 int bus_id = -1;
124 const char *oh_name, *name;
125 struct omap_musb_board_data *board_data;
126
127 if (musb_board_data)
128 board_data = musb_board_data;
129 else
130 board_data = &musb_default_board_data;
100 131
101 /* 132 /*
102 * REVISIT: This line can be removed once all the platforms using 133 * REVISIT: This line can be removed once all the platforms using
@@ -108,12 +139,47 @@ void __init usb_musb_init(struct omap_musb_board_data *board_data)
108 musb_plat.mode = board_data->mode; 139 musb_plat.mode = board_data->mode;
109 musb_plat.extvbus = board_data->extvbus; 140 musb_plat.extvbus = board_data->extvbus;
110 141
111 if (platform_device_register(&musb_device) < 0) 142 if (cpu_is_omap44xx())
112 printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n"); 143 omap4430_phy_init(dev);
144
145 if (cpu_is_omap3517() || cpu_is_omap3505()) {
146 oh_name = "am35x_otg_hs";
147 name = "musb-am35x";
148 } else {
149 oh_name = "usb_otg_hs";
150 name = "musb-omap2430";
151 }
152
153 oh = omap_hwmod_lookup(oh_name);
154 if (!oh) {
155 pr_err("Could not look up %s\n", oh_name);
156 return;
157 }
158
159 od = omap_device_build(name, bus_id, oh, &musb_plat,
160 sizeof(musb_plat), omap_musb_latency,
161 ARRAY_SIZE(omap_musb_latency), false);
162 if (IS_ERR(od)) {
163 pr_err("Could not build omap_device for %s %s\n",
164 name, oh_name);
165 return;
166 }
167
168 pdev = &od->pdev;
169 dev = &pdev->dev;
170 get_device(dev);
171 dev->dma_mask = &musb_dmamask;
172 dev->coherent_dma_mask = musb_dmamask;
173 put_device(dev);
174
175 if (cpu_is_omap44xx())
176 omap4430_phy_init(dev);
113} 177}
114 178
115#else 179#else
116void __init usb_musb_init(struct omap_musb_board_data *board_data) 180void __init usb_musb_init(struct omap_musb_board_data *board_data)
117{ 181{
182 if (cpu_is_omap44xx())
183 omap4430_phy_init(NULL);
118} 184}
119#endif /* CONFIG_USB_MUSB_SOC */ 185#endif /* CONFIG_USB_MUSB_SOC */
diff --git a/arch/arm/mach-omap2/usb-tusb6010.c b/arch/arm/mach-omap2/usb-tusb6010.c
index 64a0112b70a5..8dd26b765b7d 100644
--- a/arch/arm/mach-omap2/usb-tusb6010.c
+++ b/arch/arm/mach-omap2/usb-tusb6010.c
@@ -120,8 +120,8 @@ static int tusb_set_sync_mode(unsigned sysclk_ps, unsigned fclk_ps)
120 t.adv_on = next_clk(t.cs_on, t_scsnh_advnh - 7000, fclk_ps); 120 t.adv_on = next_clk(t.cs_on, t_scsnh_advnh - 7000, fclk_ps);
121 121
122 /* GPMC_CLK rate = fclk rate / div */ 122 /* GPMC_CLK rate = fclk rate / div */
123 t.sync_clk = 12 /* 11.1 nsec */; 123 t.sync_clk = 11100 /* 11.1 nsec */;
124 tmp = (t.sync_clk * 1000 + fclk_ps - 1) / fclk_ps; 124 tmp = (t.sync_clk + fclk_ps - 1) / fclk_ps;
125 if (tmp > 4) 125 if (tmp > 4)
126 return -ERANGE; 126 return -ERANGE;
127 if (tmp <= 0) 127 if (tmp <= 0)
@@ -216,6 +216,7 @@ static struct resource tusb_resources[] = {
216 .flags = IORESOURCE_MEM, 216 .flags = IORESOURCE_MEM,
217 }, 217 },
218 { /* IRQ */ 218 { /* IRQ */
219 .name = "mc",
219 .flags = IORESOURCE_IRQ, 220 .flags = IORESOURCE_IRQ,
220 }, 221 },
221}; 222};
@@ -223,7 +224,7 @@ static struct resource tusb_resources[] = {
223static u64 tusb_dmamask = ~(u32)0; 224static u64 tusb_dmamask = ~(u32)0;
224 225
225static struct platform_device tusb_device = { 226static struct platform_device tusb_device = {
226 .name = "musb_hdrc", 227 .name = "musb-tusb",
227 .id = -1, 228 .id = -1,
228 .dev = { 229 .dev = {
229 .dma_mask = &tusb_dmamask, 230 .dma_mask = &tusb_dmamask,
@@ -292,12 +293,11 @@ tusb6010_setup_interface(struct musb_hdrc_platform_data *data,
292 ); 293 );
293 294
294 /* IRQ */ 295 /* IRQ */
295 status = gpio_request(irq, "TUSB6010 irq"); 296 status = gpio_request_one(irq, GPIOF_IN, "TUSB6010 irq");
296 if (status < 0) { 297 if (status < 0) {
297 printk(error, 3, status); 298 printk(error, 3, status);
298 return status; 299 return status;
299 } 300 }
300 gpio_direction_input(irq);
301 tusb_resources[2].start = irq + IH_GPIO_BASE; 301 tusb_resources[2].start = irq + IH_GPIO_BASE;
302 302
303 /* set up memory timings ... can speed them up later */ 303 /* set up memory timings ... can speed them up later */
diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
new file mode 100644
index 000000000000..e7767771de49
--- /dev/null
+++ b/arch/arm/mach-omap2/vc.h
@@ -0,0 +1,83 @@
1/*
2 * OMAP3/4 Voltage Controller (VC) structure and macro definitions
3 *
4 * Copyright (C) 2007, 2010 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 * Lesly A M <x0080970@ti.com>
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008, 2011 Nokia Corporation
10 * Kalle Jokiniemi
11 * Paul Walmsley
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License version
15 * 2 as published by the Free Software Foundation.
16 */
17#ifndef __ARCH_ARM_MACH_OMAP2_VC_H
18#define __ARCH_ARM_MACH_OMAP2_VC_H
19
20#include <linux/kernel.h>
21
22/**
23 * struct omap_vc_common_data - per-VC register/bitfield data
24 * @cmd_on_mask: ON bitmask in PRM_VC_CMD_VAL* register
25 * @valid: VALID bitmask in PRM_VC_BYPASS_VAL register
26 * @smps_sa_reg: Offset of PRM_VC_SMPS_SA reg from PRM start
27 * @smps_volra_reg: Offset of PRM_VC_SMPS_VOL_RA reg from PRM start
28 * @bypass_val_reg: Offset of PRM_VC_BYPASS_VAL reg from PRM start
29 * @data_shift: DATA field shift in PRM_VC_BYPASS_VAL register
30 * @slaveaddr_shift: SLAVEADDR field shift in PRM_VC_BYPASS_VAL register
31 * @regaddr_shift: REGADDR field shift in PRM_VC_BYPASS_VAL register
32 * @cmd_on_shift: ON field shift in PRM_VC_CMD_VAL_* register
33 * @cmd_onlp_shift: ONLP field shift in PRM_VC_CMD_VAL_* register
34 * @cmd_ret_shift: RET field shift in PRM_VC_CMD_VAL_* register
35 * @cmd_off_shift: OFF field shift in PRM_VC_CMD_VAL_* register
36 *
37 * XXX One of cmd_on_mask and cmd_on_shift are not needed
38 * XXX VALID should probably be a shift, not a mask
39 */
40struct omap_vc_common_data {
41 u32 cmd_on_mask;
42 u32 valid;
43 u8 smps_sa_reg;
44 u8 smps_volra_reg;
45 u8 bypass_val_reg;
46 u8 data_shift;
47 u8 slaveaddr_shift;
48 u8 regaddr_shift;
49 u8 cmd_on_shift;
50 u8 cmd_onlp_shift;
51 u8 cmd_ret_shift;
52 u8 cmd_off_shift;
53};
54
55/**
56 * struct omap_vc_instance_data - VC per-instance data
57 * @vc_common: pointer to VC common data for this platform
58 * @smps_sa_mask: SA* bitmask in the PRM_VC_SMPS_SA register
59 * @smps_volra_mask: VOLRA* bitmask in the PRM_VC_VOL_RA register
60 * @smps_sa_shift: SA* field shift in the PRM_VC_SMPS_SA register
61 * @smps_volra_shift: VOLRA* field shift in the PRM_VC_VOL_RA register
62 *
63 * XXX It is not necessary to have both a *_mask and a *_shift -
64 * remove one
65 */
66struct omap_vc_instance_data {
67 const struct omap_vc_common_data *vc_common;
68 u32 smps_sa_mask;
69 u32 smps_volra_mask;
70 u8 cmdval_reg;
71 u8 smps_sa_shift;
72 u8 smps_volra_shift;
73};
74
75extern struct omap_vc_instance_data omap3_vc1_data;
76extern struct omap_vc_instance_data omap3_vc2_data;
77
78extern struct omap_vc_instance_data omap4_vc_mpu_data;
79extern struct omap_vc_instance_data omap4_vc_iva_data;
80extern struct omap_vc_instance_data omap4_vc_core_data;
81
82#endif
83
diff --git a/arch/arm/mach-omap2/vc3xxx_data.c b/arch/arm/mach-omap2/vc3xxx_data.c
new file mode 100644
index 000000000000..f37dc4bc379a
--- /dev/null
+++ b/arch/arm/mach-omap2/vc3xxx_data.c
@@ -0,0 +1,63 @@
1/*
2 * OMAP3 Voltage Controller (VC) data
3 *
4 * Copyright (C) 2007, 2010 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 * Lesly A M <x0080970@ti.com>
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008, 2011 Nokia Corporation
10 * Kalle Jokiniemi
11 * Paul Walmsley
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17#include <linux/io.h>
18#include <linux/err.h>
19#include <linux/init.h>
20
21#include <plat/common.h>
22
23#include "prm-regbits-34xx.h"
24#include "voltage.h"
25
26#include "vc.h"
27
28/*
29 * VC data common to 34xx/36xx chips
30 * XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
31 */
32static struct omap_vc_common_data omap3_vc_common = {
33 .smps_sa_reg = OMAP3_PRM_VC_SMPS_SA_OFFSET,
34 .smps_volra_reg = OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET,
35 .bypass_val_reg = OMAP3_PRM_VC_BYPASS_VAL_OFFSET,
36 .data_shift = OMAP3430_DATA_SHIFT,
37 .slaveaddr_shift = OMAP3430_SLAVEADDR_SHIFT,
38 .regaddr_shift = OMAP3430_REGADDR_SHIFT,
39 .valid = OMAP3430_VALID_MASK,
40 .cmd_on_shift = OMAP3430_VC_CMD_ON_SHIFT,
41 .cmd_on_mask = OMAP3430_VC_CMD_ON_MASK,
42 .cmd_onlp_shift = OMAP3430_VC_CMD_ONLP_SHIFT,
43 .cmd_ret_shift = OMAP3430_VC_CMD_RET_SHIFT,
44 .cmd_off_shift = OMAP3430_VC_CMD_OFF_SHIFT,
45};
46
47struct omap_vc_instance_data omap3_vc1_data = {
48 .vc_common = &omap3_vc_common,
49 .cmdval_reg = OMAP3_PRM_VC_CMD_VAL_0_OFFSET,
50 .smps_sa_shift = OMAP3430_PRM_VC_SMPS_SA_SA0_SHIFT,
51 .smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA0_MASK,
52 .smps_volra_shift = OMAP3430_VOLRA0_SHIFT,
53 .smps_volra_mask = OMAP3430_VOLRA0_MASK,
54};
55
56struct omap_vc_instance_data omap3_vc2_data = {
57 .vc_common = &omap3_vc_common,
58 .cmdval_reg = OMAP3_PRM_VC_CMD_VAL_1_OFFSET,
59 .smps_sa_shift = OMAP3430_PRM_VC_SMPS_SA_SA1_SHIFT,
60 .smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA1_MASK,
61 .smps_volra_shift = OMAP3430_VOLRA1_SHIFT,
62 .smps_volra_mask = OMAP3430_VOLRA1_MASK,
63};
diff --git a/arch/arm/mach-omap2/vc44xx_data.c b/arch/arm/mach-omap2/vc44xx_data.c
new file mode 100644
index 000000000000..a98da8ddec52
--- /dev/null
+++ b/arch/arm/mach-omap2/vc44xx_data.c
@@ -0,0 +1,75 @@
1/*
2 * OMAP4 Voltage Controller (VC) data
3 *
4 * Copyright (C) 2007, 2010 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 * Lesly A M <x0080970@ti.com>
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008, 2011 Nokia Corporation
10 * Kalle Jokiniemi
11 * Paul Walmsley
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17#include <linux/io.h>
18#include <linux/err.h>
19#include <linux/init.h>
20
21#include <plat/common.h>
22
23#include "prm44xx.h"
24#include "prm-regbits-44xx.h"
25#include "voltage.h"
26
27#include "vc.h"
28
29/*
30 * VC data common to 44xx chips
31 * XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
32 */
33static const struct omap_vc_common_data omap4_vc_common = {
34 .smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
35 .smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
36 .bypass_val_reg = OMAP4_PRM_VC_VAL_BYPASS_OFFSET,
37 .data_shift = OMAP4430_DATA_SHIFT,
38 .slaveaddr_shift = OMAP4430_SLAVEADDR_SHIFT,
39 .regaddr_shift = OMAP4430_REGADDR_SHIFT,
40 .valid = OMAP4430_VALID_MASK,
41 .cmd_on_shift = OMAP4430_ON_SHIFT,
42 .cmd_on_mask = OMAP4430_ON_MASK,
43 .cmd_onlp_shift = OMAP4430_ONLP_SHIFT,
44 .cmd_ret_shift = OMAP4430_RET_SHIFT,
45 .cmd_off_shift = OMAP4430_OFF_SHIFT,
46};
47
48/* VC instance data for each controllable voltage line */
49struct omap_vc_instance_data omap4_vc_mpu_data = {
50 .vc_common = &omap4_vc_common,
51 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET,
52 .smps_sa_shift = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_SHIFT,
53 .smps_sa_mask = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK,
54 .smps_volra_shift = OMAP4430_VOLRA_VDD_MPU_L_SHIFT,
55 .smps_volra_mask = OMAP4430_VOLRA_VDD_MPU_L_MASK,
56};
57
58struct omap_vc_instance_data omap4_vc_iva_data = {
59 .vc_common = &omap4_vc_common,
60 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET,
61 .smps_sa_shift = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_SHIFT,
62 .smps_sa_mask = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK,
63 .smps_volra_shift = OMAP4430_VOLRA_VDD_IVA_L_SHIFT,
64 .smps_volra_mask = OMAP4430_VOLRA_VDD_IVA_L_MASK,
65};
66
67struct omap_vc_instance_data omap4_vc_core_data = {
68 .vc_common = &omap4_vc_common,
69 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET,
70 .smps_sa_shift = OMAP4430_SA_VDD_CORE_L_0_6_SHIFT,
71 .smps_sa_mask = OMAP4430_SA_VDD_CORE_L_0_6_MASK,
72 .smps_volra_shift = OMAP4430_VOLRA_VDD_CORE_L_SHIFT,
73 .smps_volra_mask = OMAP4430_VOLRA_VDD_CORE_L_MASK,
74};
75
diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
new file mode 100644
index 000000000000..9ef3789ded4b
--- /dev/null
+++ b/arch/arm/mach-omap2/voltage.c
@@ -0,0 +1,1106 @@
1/*
2 * OMAP3/OMAP4 Voltage Management Routines
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Copyright (C) 2007 Texas Instruments, Inc.
7 * Rajendra Nayak <rnayak@ti.com>
8 * Lesly A M <x0080970@ti.com>
9 *
10 * Copyright (C) 2008, 2011 Nokia Corporation
11 * Kalle Jokiniemi
12 * Paul Walmsley
13 *
14 * Copyright (C) 2010 Texas Instruments, Inc.
15 * Thara Gopinath <thara@ti.com>
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License version 2 as
19 * published by the Free Software Foundation.
20 */
21
22#include <linux/delay.h>
23#include <linux/io.h>
24#include <linux/clk.h>
25#include <linux/err.h>
26#include <linux/debugfs.h>
27#include <linux/slab.h>
28
29#include <plat/common.h>
30
31#include "prm-regbits-34xx.h"
32#include "prm-regbits-44xx.h"
33#include "prm44xx.h"
34#include "prcm44xx.h"
35#include "prminst44xx.h"
36#include "control.h"
37
38#include "voltage.h"
39
40#include "vc.h"
41#include "vp.h"
42
43#define VOLTAGE_DIR_SIZE 16
44
45
46static struct omap_vdd_info **vdd_info;
47
48/*
49 * Number of scalable voltage domains.
50 */
51static int nr_scalable_vdd;
52
53/* XXX document */
54static s16 prm_mod_offs;
55static s16 prm_irqst_ocp_mod_offs;
56
57static struct dentry *voltage_dir;
58
59/* Init function pointers */
60static int vp_forceupdate_scale_voltage(struct omap_vdd_info *vdd,
61 unsigned long target_volt);
62
63static u32 omap3_voltage_read_reg(u16 mod, u8 offset)
64{
65 return omap2_prm_read_mod_reg(mod, offset);
66}
67
68static void omap3_voltage_write_reg(u32 val, u16 mod, u8 offset)
69{
70 omap2_prm_write_mod_reg(val, mod, offset);
71}
72
73static u32 omap4_voltage_read_reg(u16 mod, u8 offset)
74{
75 return omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION,
76 mod, offset);
77}
78
79static void omap4_voltage_write_reg(u32 val, u16 mod, u8 offset)
80{
81 omap4_prminst_write_inst_reg(val, OMAP4430_PRM_PARTITION, mod, offset);
82}
83
84static int __init _config_common_vdd_data(struct omap_vdd_info *vdd)
85{
86 char *sys_ck_name;
87 struct clk *sys_ck;
88 u32 sys_clk_speed, timeout_val, waittime;
89
90 /*
91 * XXX Clockfw should handle this, or this should be in a
92 * struct record
93 */
94 if (cpu_is_omap24xx() || cpu_is_omap34xx())
95 sys_ck_name = "sys_ck";
96 else if (cpu_is_omap44xx())
97 sys_ck_name = "sys_clkin_ck";
98 else
99 return -EINVAL;
100
101 /*
102 * Sys clk rate is require to calculate vp timeout value and
103 * smpswaittimemin and smpswaittimemax.
104 */
105 sys_ck = clk_get(NULL, sys_ck_name);
106 if (IS_ERR(sys_ck)) {
107 pr_warning("%s: Could not get the sys clk to calculate"
108 "various vdd_%s params\n", __func__, vdd->voltdm.name);
109 return -EINVAL;
110 }
111 sys_clk_speed = clk_get_rate(sys_ck);
112 clk_put(sys_ck);
113 /* Divide to avoid overflow */
114 sys_clk_speed /= 1000;
115
116 /* Generic voltage parameters */
117 vdd->volt_scale = vp_forceupdate_scale_voltage;
118 vdd->vp_enabled = false;
119
120 vdd->vp_rt_data.vpconfig_erroroffset =
121 (vdd->pmic_info->vp_erroroffset <<
122 vdd->vp_data->vp_common->vpconfig_erroroffset_shift);
123
124 timeout_val = (sys_clk_speed * vdd->pmic_info->vp_timeout_us) / 1000;
125 vdd->vp_rt_data.vlimitto_timeout = timeout_val;
126 vdd->vp_rt_data.vlimitto_vddmin = vdd->pmic_info->vp_vddmin;
127 vdd->vp_rt_data.vlimitto_vddmax = vdd->pmic_info->vp_vddmax;
128
129 waittime = ((vdd->pmic_info->step_size / vdd->pmic_info->slew_rate) *
130 sys_clk_speed) / 1000;
131 vdd->vp_rt_data.vstepmin_smpswaittimemin = waittime;
132 vdd->vp_rt_data.vstepmax_smpswaittimemax = waittime;
133 vdd->vp_rt_data.vstepmin_stepmin = vdd->pmic_info->vp_vstepmin;
134 vdd->vp_rt_data.vstepmax_stepmax = vdd->pmic_info->vp_vstepmax;
135
136 return 0;
137}
138
139/* Voltage debugfs support */
140static int vp_volt_debug_get(void *data, u64 *val)
141{
142 struct omap_vdd_info *vdd = (struct omap_vdd_info *) data;
143 u8 vsel;
144
145 if (!vdd) {
146 pr_warning("Wrong paramater passed\n");
147 return -EINVAL;
148 }
149
150 vsel = vdd->read_reg(prm_mod_offs, vdd->vp_data->voltage);
151
152 if (!vdd->pmic_info->vsel_to_uv) {
153 pr_warning("PMIC function to convert vsel to voltage"
154 "in uV not registerd\n");
155 return -EINVAL;
156 }
157
158 *val = vdd->pmic_info->vsel_to_uv(vsel);
159 return 0;
160}
161
162static int nom_volt_debug_get(void *data, u64 *val)
163{
164 struct omap_vdd_info *vdd = (struct omap_vdd_info *) data;
165
166 if (!vdd) {
167 pr_warning("Wrong paramater passed\n");
168 return -EINVAL;
169 }
170
171 *val = omap_voltage_get_nom_volt(&vdd->voltdm);
172
173 return 0;
174}
175
176DEFINE_SIMPLE_ATTRIBUTE(vp_volt_debug_fops, vp_volt_debug_get, NULL, "%llu\n");
177DEFINE_SIMPLE_ATTRIBUTE(nom_volt_debug_fops, nom_volt_debug_get, NULL,
178 "%llu\n");
179static void vp_latch_vsel(struct omap_vdd_info *vdd)
180{
181 u32 vpconfig;
182 unsigned long uvdc;
183 char vsel;
184
185 uvdc = omap_voltage_get_nom_volt(&vdd->voltdm);
186 if (!uvdc) {
187 pr_warning("%s: unable to find current voltage for vdd_%s\n",
188 __func__, vdd->voltdm.name);
189 return;
190 }
191
192 if (!vdd->pmic_info || !vdd->pmic_info->uv_to_vsel) {
193 pr_warning("%s: PMIC function to convert voltage in uV to"
194 " vsel not registered\n", __func__);
195 return;
196 }
197
198 vsel = vdd->pmic_info->uv_to_vsel(uvdc);
199
200 vpconfig = vdd->read_reg(prm_mod_offs, vdd->vp_data->vpconfig);
201 vpconfig &= ~(vdd->vp_data->vp_common->vpconfig_initvoltage_mask |
202 vdd->vp_data->vp_common->vpconfig_initvdd);
203 vpconfig |= vsel << vdd->vp_data->vp_common->vpconfig_initvoltage_shift;
204
205 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
206
207 /* Trigger initVDD value copy to voltage processor */
208 vdd->write_reg((vpconfig | vdd->vp_data->vp_common->vpconfig_initvdd),
209 prm_mod_offs, vdd->vp_data->vpconfig);
210
211 /* Clear initVDD copy trigger bit */
212 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
213}
214
215/* Generic voltage init functions */
216static void __init vp_init(struct omap_vdd_info *vdd)
217{
218 u32 vp_val;
219
220 if (!vdd->read_reg || !vdd->write_reg) {
221 pr_err("%s: No read/write API for accessing vdd_%s regs\n",
222 __func__, vdd->voltdm.name);
223 return;
224 }
225
226 vp_val = vdd->vp_rt_data.vpconfig_erroroffset |
227 (vdd->vp_rt_data.vpconfig_errorgain <<
228 vdd->vp_data->vp_common->vpconfig_errorgain_shift) |
229 vdd->vp_data->vp_common->vpconfig_timeouten;
230 vdd->write_reg(vp_val, prm_mod_offs, vdd->vp_data->vpconfig);
231
232 vp_val = ((vdd->vp_rt_data.vstepmin_smpswaittimemin <<
233 vdd->vp_data->vp_common->vstepmin_smpswaittimemin_shift) |
234 (vdd->vp_rt_data.vstepmin_stepmin <<
235 vdd->vp_data->vp_common->vstepmin_stepmin_shift));
236 vdd->write_reg(vp_val, prm_mod_offs, vdd->vp_data->vstepmin);
237
238 vp_val = ((vdd->vp_rt_data.vstepmax_smpswaittimemax <<
239 vdd->vp_data->vp_common->vstepmax_smpswaittimemax_shift) |
240 (vdd->vp_rt_data.vstepmax_stepmax <<
241 vdd->vp_data->vp_common->vstepmax_stepmax_shift));
242 vdd->write_reg(vp_val, prm_mod_offs, vdd->vp_data->vstepmax);
243
244 vp_val = ((vdd->vp_rt_data.vlimitto_vddmax <<
245 vdd->vp_data->vp_common->vlimitto_vddmax_shift) |
246 (vdd->vp_rt_data.vlimitto_vddmin <<
247 vdd->vp_data->vp_common->vlimitto_vddmin_shift) |
248 (vdd->vp_rt_data.vlimitto_timeout <<
249 vdd->vp_data->vp_common->vlimitto_timeout_shift));
250 vdd->write_reg(vp_val, prm_mod_offs, vdd->vp_data->vlimitto);
251}
252
253static void __init vdd_debugfs_init(struct omap_vdd_info *vdd)
254{
255 char *name;
256
257 name = kzalloc(VOLTAGE_DIR_SIZE, GFP_KERNEL);
258 if (!name) {
259 pr_warning("%s: Unable to allocate memory for debugfs"
260 " directory name for vdd_%s",
261 __func__, vdd->voltdm.name);
262 return;
263 }
264 strcpy(name, "vdd_");
265 strcat(name, vdd->voltdm.name);
266
267 vdd->debug_dir = debugfs_create_dir(name, voltage_dir);
268 kfree(name);
269 if (IS_ERR(vdd->debug_dir)) {
270 pr_warning("%s: Unable to create debugfs directory for"
271 " vdd_%s\n", __func__, vdd->voltdm.name);
272 vdd->debug_dir = NULL;
273 return;
274 }
275
276 (void) debugfs_create_x16("vp_errorgain", S_IRUGO, vdd->debug_dir,
277 &(vdd->vp_rt_data.vpconfig_errorgain));
278 (void) debugfs_create_x16("vp_smpswaittimemin", S_IRUGO,
279 vdd->debug_dir,
280 &(vdd->vp_rt_data.vstepmin_smpswaittimemin));
281 (void) debugfs_create_x8("vp_stepmin", S_IRUGO, vdd->debug_dir,
282 &(vdd->vp_rt_data.vstepmin_stepmin));
283 (void) debugfs_create_x16("vp_smpswaittimemax", S_IRUGO,
284 vdd->debug_dir,
285 &(vdd->vp_rt_data.vstepmax_smpswaittimemax));
286 (void) debugfs_create_x8("vp_stepmax", S_IRUGO, vdd->debug_dir,
287 &(vdd->vp_rt_data.vstepmax_stepmax));
288 (void) debugfs_create_x8("vp_vddmax", S_IRUGO, vdd->debug_dir,
289 &(vdd->vp_rt_data.vlimitto_vddmax));
290 (void) debugfs_create_x8("vp_vddmin", S_IRUGO, vdd->debug_dir,
291 &(vdd->vp_rt_data.vlimitto_vddmin));
292 (void) debugfs_create_x16("vp_timeout", S_IRUGO, vdd->debug_dir,
293 &(vdd->vp_rt_data.vlimitto_timeout));
294 (void) debugfs_create_file("curr_vp_volt", S_IRUGO, vdd->debug_dir,
295 (void *) vdd, &vp_volt_debug_fops);
296 (void) debugfs_create_file("curr_nominal_volt", S_IRUGO,
297 vdd->debug_dir, (void *) vdd,
298 &nom_volt_debug_fops);
299}
300
301/* Voltage scale and accessory APIs */
302static int _pre_volt_scale(struct omap_vdd_info *vdd,
303 unsigned long target_volt, u8 *target_vsel, u8 *current_vsel)
304{
305 struct omap_volt_data *volt_data;
306 const struct omap_vc_common_data *vc_common;
307 const struct omap_vp_common_data *vp_common;
308 u32 vc_cmdval, vp_errgain_val;
309
310 vc_common = vdd->vc_data->vc_common;
311 vp_common = vdd->vp_data->vp_common;
312
313 /* Check if suffiecient pmic info is available for this vdd */
314 if (!vdd->pmic_info) {
315 pr_err("%s: Insufficient pmic info to scale the vdd_%s\n",
316 __func__, vdd->voltdm.name);
317 return -EINVAL;
318 }
319
320 if (!vdd->pmic_info->uv_to_vsel) {
321 pr_err("%s: PMIC function to convert voltage in uV to"
322 "vsel not registered. Hence unable to scale voltage"
323 "for vdd_%s\n", __func__, vdd->voltdm.name);
324 return -ENODATA;
325 }
326
327 if (!vdd->read_reg || !vdd->write_reg) {
328 pr_err("%s: No read/write API for accessing vdd_%s regs\n",
329 __func__, vdd->voltdm.name);
330 return -EINVAL;
331 }
332
333 /* Get volt_data corresponding to target_volt */
334 volt_data = omap_voltage_get_voltdata(&vdd->voltdm, target_volt);
335 if (IS_ERR(volt_data))
336 volt_data = NULL;
337
338 *target_vsel = vdd->pmic_info->uv_to_vsel(target_volt);
339 *current_vsel = vdd->read_reg(prm_mod_offs, vdd->vp_data->voltage);
340
341 /* Setting the ON voltage to the new target voltage */
342 vc_cmdval = vdd->read_reg(prm_mod_offs, vdd->vc_data->cmdval_reg);
343 vc_cmdval &= ~vc_common->cmd_on_mask;
344 vc_cmdval |= (*target_vsel << vc_common->cmd_on_shift);
345 vdd->write_reg(vc_cmdval, prm_mod_offs, vdd->vc_data->cmdval_reg);
346
347 /* Setting vp errorgain based on the voltage */
348 if (volt_data) {
349 vp_errgain_val = vdd->read_reg(prm_mod_offs,
350 vdd->vp_data->vpconfig);
351 vdd->vp_rt_data.vpconfig_errorgain = volt_data->vp_errgain;
352 vp_errgain_val &= ~vp_common->vpconfig_errorgain_mask;
353 vp_errgain_val |= vdd->vp_rt_data.vpconfig_errorgain <<
354 vp_common->vpconfig_errorgain_shift;
355 vdd->write_reg(vp_errgain_val, prm_mod_offs,
356 vdd->vp_data->vpconfig);
357 }
358
359 return 0;
360}
361
362static void _post_volt_scale(struct omap_vdd_info *vdd,
363 unsigned long target_volt, u8 target_vsel, u8 current_vsel)
364{
365 u32 smps_steps = 0, smps_delay = 0;
366
367 smps_steps = abs(target_vsel - current_vsel);
368 /* SMPS slew rate / step size. 2us added as buffer. */
369 smps_delay = ((smps_steps * vdd->pmic_info->step_size) /
370 vdd->pmic_info->slew_rate) + 2;
371 udelay(smps_delay);
372
373 vdd->curr_volt = target_volt;
374}
375
376/* vc_bypass_scale_voltage - VC bypass method of voltage scaling */
377static int vc_bypass_scale_voltage(struct omap_vdd_info *vdd,
378 unsigned long target_volt)
379{
380 u32 loop_cnt = 0, retries_cnt = 0;
381 u32 vc_valid, vc_bypass_val_reg, vc_bypass_value;
382 u8 target_vsel, current_vsel;
383 int ret;
384
385 ret = _pre_volt_scale(vdd, target_volt, &target_vsel, &current_vsel);
386 if (ret)
387 return ret;
388
389 vc_valid = vdd->vc_data->vc_common->valid;
390 vc_bypass_val_reg = vdd->vc_data->vc_common->bypass_val_reg;
391 vc_bypass_value = (target_vsel << vdd->vc_data->vc_common->data_shift) |
392 (vdd->pmic_info->pmic_reg <<
393 vdd->vc_data->vc_common->regaddr_shift) |
394 (vdd->pmic_info->i2c_slave_addr <<
395 vdd->vc_data->vc_common->slaveaddr_shift);
396
397 vdd->write_reg(vc_bypass_value, prm_mod_offs, vc_bypass_val_reg);
398 vdd->write_reg(vc_bypass_value | vc_valid, prm_mod_offs,
399 vc_bypass_val_reg);
400
401 vc_bypass_value = vdd->read_reg(prm_mod_offs, vc_bypass_val_reg);
402 /*
403 * Loop till the bypass command is acknowledged from the SMPS.
404 * NOTE: This is legacy code. The loop count and retry count needs
405 * to be revisited.
406 */
407 while (!(vc_bypass_value & vc_valid)) {
408 loop_cnt++;
409
410 if (retries_cnt > 10) {
411 pr_warning("%s: Retry count exceeded\n", __func__);
412 return -ETIMEDOUT;
413 }
414
415 if (loop_cnt > 50) {
416 retries_cnt++;
417 loop_cnt = 0;
418 udelay(10);
419 }
420 vc_bypass_value = vdd->read_reg(prm_mod_offs,
421 vc_bypass_val_reg);
422 }
423
424 _post_volt_scale(vdd, target_volt, target_vsel, current_vsel);
425 return 0;
426}
427
428/* VP force update method of voltage scaling */
429static int vp_forceupdate_scale_voltage(struct omap_vdd_info *vdd,
430 unsigned long target_volt)
431{
432 u32 vpconfig;
433 u8 target_vsel, current_vsel, prm_irqst_reg;
434 int ret, timeout = 0;
435
436 ret = _pre_volt_scale(vdd, target_volt, &target_vsel, &current_vsel);
437 if (ret)
438 return ret;
439
440 prm_irqst_reg = vdd->vp_data->prm_irqst_data->prm_irqst_reg;
441
442 /*
443 * Clear all pending TransactionDone interrupt/status. Typical latency
444 * is <3us
445 */
446 while (timeout++ < VP_TRANXDONE_TIMEOUT) {
447 vdd->write_reg(vdd->vp_data->prm_irqst_data->tranxdone_status,
448 prm_irqst_ocp_mod_offs, prm_irqst_reg);
449 if (!(vdd->read_reg(prm_irqst_ocp_mod_offs, prm_irqst_reg) &
450 vdd->vp_data->prm_irqst_data->tranxdone_status))
451 break;
452 udelay(1);
453 }
454 if (timeout >= VP_TRANXDONE_TIMEOUT) {
455 pr_warning("%s: vdd_%s TRANXDONE timeout exceeded."
456 "Voltage change aborted", __func__, vdd->voltdm.name);
457 return -ETIMEDOUT;
458 }
459
460 /* Configure for VP-Force Update */
461 vpconfig = vdd->read_reg(prm_mod_offs, vdd->vp_data->vpconfig);
462 vpconfig &= ~(vdd->vp_data->vp_common->vpconfig_initvdd |
463 vdd->vp_data->vp_common->vpconfig_forceupdate |
464 vdd->vp_data->vp_common->vpconfig_initvoltage_mask);
465 vpconfig |= ((target_vsel <<
466 vdd->vp_data->vp_common->vpconfig_initvoltage_shift));
467 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
468
469 /* Trigger initVDD value copy to voltage processor */
470 vpconfig |= vdd->vp_data->vp_common->vpconfig_initvdd;
471 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
472
473 /* Force update of voltage */
474 vpconfig |= vdd->vp_data->vp_common->vpconfig_forceupdate;
475 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
476
477 /*
478 * Wait for TransactionDone. Typical latency is <200us.
479 * Depends on SMPSWAITTIMEMIN/MAX and voltage change
480 */
481 timeout = 0;
482 omap_test_timeout((vdd->read_reg(prm_irqst_ocp_mod_offs, prm_irqst_reg) &
483 vdd->vp_data->prm_irqst_data->tranxdone_status),
484 VP_TRANXDONE_TIMEOUT, timeout);
485 if (timeout >= VP_TRANXDONE_TIMEOUT)
486 pr_err("%s: vdd_%s TRANXDONE timeout exceeded."
487 "TRANXDONE never got set after the voltage update\n",
488 __func__, vdd->voltdm.name);
489
490 _post_volt_scale(vdd, target_volt, target_vsel, current_vsel);
491
492 /*
493 * Disable TransactionDone interrupt , clear all status, clear
494 * control registers
495 */
496 timeout = 0;
497 while (timeout++ < VP_TRANXDONE_TIMEOUT) {
498 vdd->write_reg(vdd->vp_data->prm_irqst_data->tranxdone_status,
499 prm_irqst_ocp_mod_offs, prm_irqst_reg);
500 if (!(vdd->read_reg(prm_irqst_ocp_mod_offs, prm_irqst_reg) &
501 vdd->vp_data->prm_irqst_data->tranxdone_status))
502 break;
503 udelay(1);
504 }
505
506 if (timeout >= VP_TRANXDONE_TIMEOUT)
507 pr_warning("%s: vdd_%s TRANXDONE timeout exceeded while trying"
508 "to clear the TRANXDONE status\n",
509 __func__, vdd->voltdm.name);
510
511 vpconfig = vdd->read_reg(prm_mod_offs, vdd->vp_data->vpconfig);
512 /* Clear initVDD copy trigger bit */
513 vpconfig &= ~vdd->vp_data->vp_common->vpconfig_initvdd;
514 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
515 /* Clear force bit */
516 vpconfig &= ~vdd->vp_data->vp_common->vpconfig_forceupdate;
517 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
518
519 return 0;
520}
521
522static void __init omap3_vfsm_init(struct omap_vdd_info *vdd)
523{
524 /*
525 * Voltage Manager FSM parameters init
526 * XXX This data should be passed in from the board file
527 */
528 vdd->write_reg(OMAP3_CLKSETUP, prm_mod_offs, OMAP3_PRM_CLKSETUP_OFFSET);
529 vdd->write_reg(OMAP3_VOLTOFFSET, prm_mod_offs,
530 OMAP3_PRM_VOLTOFFSET_OFFSET);
531 vdd->write_reg(OMAP3_VOLTSETUP2, prm_mod_offs,
532 OMAP3_PRM_VOLTSETUP2_OFFSET);
533}
534
535static void __init omap3_vc_init(struct omap_vdd_info *vdd)
536{
537 static bool is_initialized;
538 u8 on_vsel, onlp_vsel, ret_vsel, off_vsel;
539 u32 vc_val;
540
541 if (is_initialized)
542 return;
543
544 /* Set up the on, inactive, retention and off voltage */
545 on_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->on_volt);
546 onlp_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->onlp_volt);
547 ret_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->ret_volt);
548 off_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->off_volt);
549 vc_val = ((on_vsel << vdd->vc_data->vc_common->cmd_on_shift) |
550 (onlp_vsel << vdd->vc_data->vc_common->cmd_onlp_shift) |
551 (ret_vsel << vdd->vc_data->vc_common->cmd_ret_shift) |
552 (off_vsel << vdd->vc_data->vc_common->cmd_off_shift));
553 vdd->write_reg(vc_val, prm_mod_offs, vdd->vc_data->cmdval_reg);
554
555 /*
556 * Generic VC parameters init
557 * XXX This data should be abstracted out
558 */
559 vdd->write_reg(OMAP3430_CMD1_MASK | OMAP3430_RAV1_MASK, prm_mod_offs,
560 OMAP3_PRM_VC_CH_CONF_OFFSET);
561 vdd->write_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN_MASK, prm_mod_offs,
562 OMAP3_PRM_VC_I2C_CFG_OFFSET);
563
564 omap3_vfsm_init(vdd);
565
566 is_initialized = true;
567}
568
569
570/* OMAP4 specific voltage init functions */
571static void __init omap4_vc_init(struct omap_vdd_info *vdd)
572{
573 static bool is_initialized;
574 u32 vc_val;
575
576 if (is_initialized)
577 return;
578
579 /* TODO: Configure setup times and CMD_VAL values*/
580
581 /*
582 * Generic VC parameters init
583 * XXX This data should be abstracted out
584 */
585 vc_val = (OMAP4430_RAV_VDD_MPU_L_MASK | OMAP4430_CMD_VDD_MPU_L_MASK |
586 OMAP4430_RAV_VDD_IVA_L_MASK | OMAP4430_CMD_VDD_IVA_L_MASK |
587 OMAP4430_RAV_VDD_CORE_L_MASK | OMAP4430_CMD_VDD_CORE_L_MASK);
588 vdd->write_reg(vc_val, prm_mod_offs, OMAP4_PRM_VC_CFG_CHANNEL_OFFSET);
589
590 /* XXX These are magic numbers and do not belong! */
591 vc_val = (0x60 << OMAP4430_SCLL_SHIFT | 0x26 << OMAP4430_SCLH_SHIFT);
592 vdd->write_reg(vc_val, prm_mod_offs, OMAP4_PRM_VC_CFG_I2C_CLK_OFFSET);
593
594 is_initialized = true;
595}
596
597static void __init omap_vc_init(struct omap_vdd_info *vdd)
598{
599 u32 vc_val;
600
601 if (!vdd->pmic_info || !vdd->pmic_info->uv_to_vsel) {
602 pr_err("%s: PMIC info requried to configure vc for"
603 "vdd_%s not populated.Hence cannot initialize vc\n",
604 __func__, vdd->voltdm.name);
605 return;
606 }
607
608 if (!vdd->read_reg || !vdd->write_reg) {
609 pr_err("%s: No read/write API for accessing vdd_%s regs\n",
610 __func__, vdd->voltdm.name);
611 return;
612 }
613
614 /* Set up the SMPS_SA(i2c slave address in VC */
615 vc_val = vdd->read_reg(prm_mod_offs,
616 vdd->vc_data->vc_common->smps_sa_reg);
617 vc_val &= ~vdd->vc_data->smps_sa_mask;
618 vc_val |= vdd->pmic_info->i2c_slave_addr << vdd->vc_data->smps_sa_shift;
619 vdd->write_reg(vc_val, prm_mod_offs,
620 vdd->vc_data->vc_common->smps_sa_reg);
621
622 /* Setup the VOLRA(pmic reg addr) in VC */
623 vc_val = vdd->read_reg(prm_mod_offs,
624 vdd->vc_data->vc_common->smps_volra_reg);
625 vc_val &= ~vdd->vc_data->smps_volra_mask;
626 vc_val |= vdd->pmic_info->pmic_reg << vdd->vc_data->smps_volra_shift;
627 vdd->write_reg(vc_val, prm_mod_offs,
628 vdd->vc_data->vc_common->smps_volra_reg);
629
630 /* Configure the setup times */
631 vc_val = vdd->read_reg(prm_mod_offs, vdd->vfsm->voltsetup_reg);
632 vc_val &= ~vdd->vfsm->voltsetup_mask;
633 vc_val |= vdd->pmic_info->volt_setup_time <<
634 vdd->vfsm->voltsetup_shift;
635 vdd->write_reg(vc_val, prm_mod_offs, vdd->vfsm->voltsetup_reg);
636
637 if (cpu_is_omap34xx())
638 omap3_vc_init(vdd);
639 else if (cpu_is_omap44xx())
640 omap4_vc_init(vdd);
641}
642
643static int __init omap_vdd_data_configure(struct omap_vdd_info *vdd)
644{
645 int ret = -EINVAL;
646
647 if (!vdd->pmic_info) {
648 pr_err("%s: PMIC info requried to configure vdd_%s not"
649 "populated.Hence cannot initialize vdd_%s\n",
650 __func__, vdd->voltdm.name, vdd->voltdm.name);
651 goto ovdc_out;
652 }
653
654 if (IS_ERR_VALUE(_config_common_vdd_data(vdd)))
655 goto ovdc_out;
656
657 if (cpu_is_omap34xx()) {
658 vdd->read_reg = omap3_voltage_read_reg;
659 vdd->write_reg = omap3_voltage_write_reg;
660 ret = 0;
661 } else if (cpu_is_omap44xx()) {
662 vdd->read_reg = omap4_voltage_read_reg;
663 vdd->write_reg = omap4_voltage_write_reg;
664 ret = 0;
665 }
666
667ovdc_out:
668 return ret;
669}
670
671/* Public functions */
672/**
673 * omap_voltage_get_nom_volt() - Gets the current non-auto-compensated voltage
674 * @voltdm: pointer to the VDD for which current voltage info is needed
675 *
676 * API to get the current non-auto-compensated voltage for a VDD.
677 * Returns 0 in case of error else returns the current voltage for the VDD.
678 */
679unsigned long omap_voltage_get_nom_volt(struct voltagedomain *voltdm)
680{
681 struct omap_vdd_info *vdd;
682
683 if (!voltdm || IS_ERR(voltdm)) {
684 pr_warning("%s: VDD specified does not exist!\n", __func__);
685 return 0;
686 }
687
688 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
689
690 return vdd->curr_volt;
691}
692
693/**
694 * omap_vp_get_curr_volt() - API to get the current vp voltage.
695 * @voltdm: pointer to the VDD.
696 *
697 * This API returns the current voltage for the specified voltage processor
698 */
699unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm)
700{
701 struct omap_vdd_info *vdd;
702 u8 curr_vsel;
703
704 if (!voltdm || IS_ERR(voltdm)) {
705 pr_warning("%s: VDD specified does not exist!\n", __func__);
706 return 0;
707 }
708
709 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
710 if (!vdd->read_reg) {
711 pr_err("%s: No read API for reading vdd_%s regs\n",
712 __func__, voltdm->name);
713 return 0;
714 }
715
716 curr_vsel = vdd->read_reg(prm_mod_offs, vdd->vp_data->voltage);
717
718 if (!vdd->pmic_info || !vdd->pmic_info->vsel_to_uv) {
719 pr_warning("%s: PMIC function to convert vsel to voltage"
720 "in uV not registerd\n", __func__);
721 return 0;
722 }
723
724 return vdd->pmic_info->vsel_to_uv(curr_vsel);
725}
726
727/**
728 * omap_vp_enable() - API to enable a particular VP
729 * @voltdm: pointer to the VDD whose VP is to be enabled.
730 *
731 * This API enables a particular voltage processor. Needed by the smartreflex
732 * class drivers.
733 */
734void omap_vp_enable(struct voltagedomain *voltdm)
735{
736 struct omap_vdd_info *vdd;
737 u32 vpconfig;
738
739 if (!voltdm || IS_ERR(voltdm)) {
740 pr_warning("%s: VDD specified does not exist!\n", __func__);
741 return;
742 }
743
744 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
745 if (!vdd->read_reg || !vdd->write_reg) {
746 pr_err("%s: No read/write API for accessing vdd_%s regs\n",
747 __func__, voltdm->name);
748 return;
749 }
750
751 /* If VP is already enabled, do nothing. Return */
752 if (vdd->vp_enabled)
753 return;
754
755 vp_latch_vsel(vdd);
756
757 /* Enable VP */
758 vpconfig = vdd->read_reg(prm_mod_offs, vdd->vp_data->vpconfig);
759 vpconfig |= vdd->vp_data->vp_common->vpconfig_vpenable;
760 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
761 vdd->vp_enabled = true;
762}
763
764/**
765 * omap_vp_disable() - API to disable a particular VP
766 * @voltdm: pointer to the VDD whose VP is to be disabled.
767 *
768 * This API disables a particular voltage processor. Needed by the smartreflex
769 * class drivers.
770 */
771void omap_vp_disable(struct voltagedomain *voltdm)
772{
773 struct omap_vdd_info *vdd;
774 u32 vpconfig;
775 int timeout;
776
777 if (!voltdm || IS_ERR(voltdm)) {
778 pr_warning("%s: VDD specified does not exist!\n", __func__);
779 return;
780 }
781
782 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
783 if (!vdd->read_reg || !vdd->write_reg) {
784 pr_err("%s: No read/write API for accessing vdd_%s regs\n",
785 __func__, voltdm->name);
786 return;
787 }
788
789 /* If VP is already disabled, do nothing. Return */
790 if (!vdd->vp_enabled) {
791 pr_warning("%s: Trying to disable VP for vdd_%s when"
792 "it is already disabled\n", __func__, voltdm->name);
793 return;
794 }
795
796 /* Disable VP */
797 vpconfig = vdd->read_reg(prm_mod_offs, vdd->vp_data->vpconfig);
798 vpconfig &= ~vdd->vp_data->vp_common->vpconfig_vpenable;
799 vdd->write_reg(vpconfig, prm_mod_offs, vdd->vp_data->vpconfig);
800
801 /*
802 * Wait for VP idle Typical latency is <2us. Maximum latency is ~100us
803 */
804 omap_test_timeout((vdd->read_reg(prm_mod_offs, vdd->vp_data->vstatus)),
805 VP_IDLE_TIMEOUT, timeout);
806
807 if (timeout >= VP_IDLE_TIMEOUT)
808 pr_warning("%s: vdd_%s idle timedout\n",
809 __func__, voltdm->name);
810
811 vdd->vp_enabled = false;
812
813 return;
814}
815
816/**
817 * omap_voltage_scale_vdd() - API to scale voltage of a particular
818 * voltage domain.
819 * @voltdm: pointer to the VDD which is to be scaled.
820 * @target_volt: The target voltage of the voltage domain
821 *
822 * This API should be called by the kernel to do the voltage scaling
823 * for a particular voltage domain during dvfs or any other situation.
824 */
825int omap_voltage_scale_vdd(struct voltagedomain *voltdm,
826 unsigned long target_volt)
827{
828 struct omap_vdd_info *vdd;
829
830 if (!voltdm || IS_ERR(voltdm)) {
831 pr_warning("%s: VDD specified does not exist!\n", __func__);
832 return -EINVAL;
833 }
834
835 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
836
837 if (!vdd->volt_scale) {
838 pr_err("%s: No voltage scale API registered for vdd_%s\n",
839 __func__, voltdm->name);
840 return -ENODATA;
841 }
842
843 return vdd->volt_scale(vdd, target_volt);
844}
845
846/**
847 * omap_voltage_reset() - Resets the voltage of a particular voltage domain
848 * to that of the current OPP.
849 * @voltdm: pointer to the VDD whose voltage is to be reset.
850 *
851 * This API finds out the correct voltage the voltage domain is supposed
852 * to be at and resets the voltage to that level. Should be used especially
853 * while disabling any voltage compensation modules.
854 */
855void omap_voltage_reset(struct voltagedomain *voltdm)
856{
857 unsigned long target_uvdc;
858
859 if (!voltdm || IS_ERR(voltdm)) {
860 pr_warning("%s: VDD specified does not exist!\n", __func__);
861 return;
862 }
863
864 target_uvdc = omap_voltage_get_nom_volt(voltdm);
865 if (!target_uvdc) {
866 pr_err("%s: unable to find current voltage for vdd_%s\n",
867 __func__, voltdm->name);
868 return;
869 }
870
871 omap_voltage_scale_vdd(voltdm, target_uvdc);
872}
873
874/**
875 * omap_voltage_get_volttable() - API to get the voltage table associated with a
876 * particular voltage domain.
877 * @voltdm: pointer to the VDD for which the voltage table is required
878 * @volt_data: the voltage table for the particular vdd which is to be
879 * populated by this API
880 *
881 * This API populates the voltage table associated with a VDD into the
882 * passed parameter pointer. Returns the count of distinct voltages
883 * supported by this vdd.
884 *
885 */
886void omap_voltage_get_volttable(struct voltagedomain *voltdm,
887 struct omap_volt_data **volt_data)
888{
889 struct omap_vdd_info *vdd;
890
891 if (!voltdm || IS_ERR(voltdm)) {
892 pr_warning("%s: VDD specified does not exist!\n", __func__);
893 return;
894 }
895
896 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
897
898 *volt_data = vdd->volt_data;
899}
900
901/**
902 * omap_voltage_get_voltdata() - API to get the voltage table entry for a
903 * particular voltage
904 * @voltdm: pointer to the VDD whose voltage table has to be searched
905 * @volt: the voltage to be searched in the voltage table
906 *
907 * This API searches through the voltage table for the required voltage
908 * domain and tries to find a matching entry for the passed voltage volt.
909 * If a matching entry is found volt_data is populated with that entry.
910 * This API searches only through the non-compensated voltages int the
911 * voltage table.
912 * Returns pointer to the voltage table entry corresponding to volt on
913 * success. Returns -ENODATA if no voltage table exisits for the passed voltage
914 * domain or if there is no matching entry.
915 */
916struct omap_volt_data *omap_voltage_get_voltdata(struct voltagedomain *voltdm,
917 unsigned long volt)
918{
919 struct omap_vdd_info *vdd;
920 int i;
921
922 if (!voltdm || IS_ERR(voltdm)) {
923 pr_warning("%s: VDD specified does not exist!\n", __func__);
924 return ERR_PTR(-EINVAL);
925 }
926
927 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
928
929 if (!vdd->volt_data) {
930 pr_warning("%s: voltage table does not exist for vdd_%s\n",
931 __func__, voltdm->name);
932 return ERR_PTR(-ENODATA);
933 }
934
935 for (i = 0; vdd->volt_data[i].volt_nominal != 0; i++) {
936 if (vdd->volt_data[i].volt_nominal == volt)
937 return &vdd->volt_data[i];
938 }
939
940 pr_notice("%s: Unable to match the current voltage with the voltage"
941 "table for vdd_%s\n", __func__, voltdm->name);
942
943 return ERR_PTR(-ENODATA);
944}
945
946/**
947 * omap_voltage_register_pmic() - API to register PMIC specific data
948 * @voltdm: pointer to the VDD for which the PMIC specific data is
949 * to be registered
950 * @pmic_info: the structure containing pmic info
951 *
952 * This API is to be called by the SOC/PMIC file to specify the
953 * pmic specific info as present in omap_volt_pmic_info structure.
954 */
955int omap_voltage_register_pmic(struct voltagedomain *voltdm,
956 struct omap_volt_pmic_info *pmic_info)
957{
958 struct omap_vdd_info *vdd;
959
960 if (!voltdm || IS_ERR(voltdm)) {
961 pr_warning("%s: VDD specified does not exist!\n", __func__);
962 return -EINVAL;
963 }
964
965 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
966
967 vdd->pmic_info = pmic_info;
968
969 return 0;
970}
971
972/**
973 * omap_voltage_get_dbgdir() - API to get pointer to the debugfs directory
974 * corresponding to a voltage domain.
975 *
976 * @voltdm: pointer to the VDD whose debug directory is required.
977 *
978 * This API returns pointer to the debugfs directory corresponding
979 * to the voltage domain. Should be used by drivers requiring to
980 * add any debug entry for a particular voltage domain. Returns NULL
981 * in case of error.
982 */
983struct dentry *omap_voltage_get_dbgdir(struct voltagedomain *voltdm)
984{
985 struct omap_vdd_info *vdd;
986
987 if (!voltdm || IS_ERR(voltdm)) {
988 pr_warning("%s: VDD specified does not exist!\n", __func__);
989 return NULL;
990 }
991
992 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
993
994 return vdd->debug_dir;
995}
996
997/**
998 * omap_change_voltscale_method() - API to change the voltage scaling method.
999 * @voltdm: pointer to the VDD whose voltage scaling method
1000 * has to be changed.
1001 * @voltscale_method: the method to be used for voltage scaling.
1002 *
1003 * This API can be used by the board files to change the method of voltage
1004 * scaling between vpforceupdate and vcbypass. The parameter values are
1005 * defined in voltage.h
1006 */
1007void omap_change_voltscale_method(struct voltagedomain *voltdm,
1008 int voltscale_method)
1009{
1010 struct omap_vdd_info *vdd;
1011
1012 if (!voltdm || IS_ERR(voltdm)) {
1013 pr_warning("%s: VDD specified does not exist!\n", __func__);
1014 return;
1015 }
1016
1017 vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
1018
1019 switch (voltscale_method) {
1020 case VOLTSCALE_VPFORCEUPDATE:
1021 vdd->volt_scale = vp_forceupdate_scale_voltage;
1022 return;
1023 case VOLTSCALE_VCBYPASS:
1024 vdd->volt_scale = vc_bypass_scale_voltage;
1025 return;
1026 default:
1027 pr_warning("%s: Trying to change the method of voltage scaling"
1028 "to an unsupported one!\n", __func__);
1029 }
1030}
1031
1032/**
1033 * omap_voltage_domain_lookup() - API to get the voltage domain pointer
1034 * @name: Name of the voltage domain
1035 *
1036 * This API looks up in the global vdd_info struct for the
1037 * existence of voltage domain <name>. If it exists, the API returns
1038 * a pointer to the voltage domain structure corresponding to the
1039 * VDD<name>. Else retuns error pointer.
1040 */
1041struct voltagedomain *omap_voltage_domain_lookup(char *name)
1042{
1043 int i;
1044
1045 if (!vdd_info) {
1046 pr_err("%s: Voltage driver init not yet happened.Faulting!\n",
1047 __func__);
1048 return ERR_PTR(-EINVAL);
1049 }
1050
1051 if (!name) {
1052 pr_err("%s: No name to get the votage domain!\n", __func__);
1053 return ERR_PTR(-EINVAL);
1054 }
1055
1056 for (i = 0; i < nr_scalable_vdd; i++) {
1057 if (!(strcmp(name, vdd_info[i]->voltdm.name)))
1058 return &vdd_info[i]->voltdm;
1059 }
1060
1061 return ERR_PTR(-EINVAL);
1062}
1063
1064/**
1065 * omap_voltage_late_init() - Init the various voltage parameters
1066 *
1067 * This API is to be called in the later stages of the
1068 * system boot to init the voltage controller and
1069 * voltage processors.
1070 */
1071int __init omap_voltage_late_init(void)
1072{
1073 int i;
1074
1075 if (!vdd_info) {
1076 pr_err("%s: Voltage driver support not added\n",
1077 __func__);
1078 return -EINVAL;
1079 }
1080
1081 voltage_dir = debugfs_create_dir("voltage", NULL);
1082 if (IS_ERR(voltage_dir))
1083 pr_err("%s: Unable to create voltage debugfs main dir\n",
1084 __func__);
1085 for (i = 0; i < nr_scalable_vdd; i++) {
1086 if (omap_vdd_data_configure(vdd_info[i]))
1087 continue;
1088 omap_vc_init(vdd_info[i]);
1089 vp_init(vdd_info[i]);
1090 vdd_debugfs_init(vdd_info[i]);
1091 }
1092
1093 return 0;
1094}
1095
1096/* XXX document */
1097int __init omap_voltage_early_init(s16 prm_mod, s16 prm_irqst_ocp_mod,
1098 struct omap_vdd_info *omap_vdd_array[],
1099 u8 omap_vdd_count)
1100{
1101 prm_mod_offs = prm_mod;
1102 prm_irqst_ocp_mod_offs = prm_irqst_ocp_mod;
1103 vdd_info = omap_vdd_array;
1104 nr_scalable_vdd = omap_vdd_count;
1105 return 0;
1106}
diff --git a/arch/arm/mach-omap2/voltage.h b/arch/arm/mach-omap2/voltage.h
new file mode 100644
index 000000000000..e9f5408244e0
--- /dev/null
+++ b/arch/arm/mach-omap2/voltage.h
@@ -0,0 +1,184 @@
1/*
2 * OMAP Voltage Management Routines
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Copyright (C) 2009 Texas Instruments, Inc.
7 * Thara Gopinath <thara@ti.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#ifndef __ARCH_ARM_MACH_OMAP2_VOLTAGE_H
15#define __ARCH_ARM_MACH_OMAP2_VOLTAGE_H
16
17#include <linux/err.h>
18
19#include "vc.h"
20#include "vp.h"
21
22/* XXX document */
23#define VOLTSCALE_VPFORCEUPDATE 1
24#define VOLTSCALE_VCBYPASS 2
25
26/*
27 * OMAP3 GENERIC setup times. Revisit to see if these needs to be
28 * passed from board or PMIC file
29 */
30#define OMAP3_CLKSETUP 0xff
31#define OMAP3_VOLTOFFSET 0xff
32#define OMAP3_VOLTSETUP2 0xff
33
34/**
35 * struct omap_vfsm_instance_data - per-voltage manager FSM register/bitfield
36 * data
37 * @voltsetup_mask: SETUP_TIME* bitmask in the PRM_VOLTSETUP* register
38 * @voltsetup_reg: register offset of PRM_VOLTSETUP from PRM base
39 * @voltsetup_shift: SETUP_TIME* field shift in the PRM_VOLTSETUP* register
40 *
41 * XXX What about VOLTOFFSET/VOLTCTRL?
42 * XXX It is not necessary to have both a _mask and a _shift for the same
43 * bitfield - remove one!
44 */
45struct omap_vfsm_instance_data {
46 u32 voltsetup_mask;
47 u8 voltsetup_reg;
48 u8 voltsetup_shift;
49};
50
51/**
52 * struct voltagedomain - omap voltage domain global structure.
53 * @name: Name of the voltage domain which can be used as a unique
54 * identifier.
55 */
56struct voltagedomain {
57 char *name;
58};
59
60/**
61 * struct omap_volt_data - Omap voltage specific data.
62 * @voltage_nominal: The possible voltage value in uV
63 * @sr_efuse_offs: The offset of the efuse register(from system
64 * control module base address) from where to read
65 * the n-target value for the smartreflex module.
66 * @sr_errminlimit: Error min limit value for smartreflex. This value
67 * differs at differnet opp and thus is linked
68 * with voltage.
69 * @vp_errorgain: Error gain value for the voltage processor. This
70 * field also differs according to the voltage/opp.
71 */
72struct omap_volt_data {
73 u32 volt_nominal;
74 u32 sr_efuse_offs;
75 u8 sr_errminlimit;
76 u8 vp_errgain;
77};
78
79/**
80 * struct omap_volt_pmic_info - PMIC specific data required by voltage driver.
81 * @slew_rate: PMIC slew rate (in uv/us)
82 * @step_size: PMIC voltage step size (in uv)
83 * @vsel_to_uv: PMIC API to convert vsel value to actual voltage in uV.
84 * @uv_to_vsel: PMIC API to convert voltage in uV to vsel value.
85 */
86struct omap_volt_pmic_info {
87 int slew_rate;
88 int step_size;
89 u32 on_volt;
90 u32 onlp_volt;
91 u32 ret_volt;
92 u32 off_volt;
93 u16 volt_setup_time;
94 u8 vp_erroroffset;
95 u8 vp_vstepmin;
96 u8 vp_vstepmax;
97 u8 vp_vddmin;
98 u8 vp_vddmax;
99 u8 vp_timeout_us;
100 u8 i2c_slave_addr;
101 u8 pmic_reg;
102 unsigned long (*vsel_to_uv) (const u8 vsel);
103 u8 (*uv_to_vsel) (unsigned long uV);
104};
105
106/**
107 * omap_vdd_info - Per Voltage Domain info
108 *
109 * @volt_data : voltage table having the distinct voltages supported
110 * by the domain and other associated per voltage data.
111 * @pmic_info : pmic specific parameters which should be populted by
112 * the pmic drivers.
113 * @vp_data : the register values, shifts, masks for various
114 * vp registers
115 * @vp_rt_data : VP data derived at runtime, not predefined
116 * @vc_data : structure containing various various vc registers,
117 * shifts, masks etc.
118 * @vfsm : voltage manager FSM data
119 * @voltdm : pointer to the voltage domain structure
120 * @debug_dir : debug directory for this voltage domain.
121 * @curr_volt : current voltage for this vdd.
122 * @vp_enabled : flag to keep track of whether vp is enabled or not
123 * @volt_scale : API to scale the voltage of the vdd.
124 */
125struct omap_vdd_info {
126 struct omap_volt_data *volt_data;
127 struct omap_volt_pmic_info *pmic_info;
128 struct omap_vp_instance_data *vp_data;
129 struct omap_vp_runtime_data vp_rt_data;
130 struct omap_vc_instance_data *vc_data;
131 const struct omap_vfsm_instance_data *vfsm;
132 struct voltagedomain voltdm;
133 struct dentry *debug_dir;
134 u32 curr_volt;
135 bool vp_enabled;
136 u32 (*read_reg) (u16 mod, u8 offset);
137 void (*write_reg) (u32 val, u16 mod, u8 offset);
138 int (*volt_scale) (struct omap_vdd_info *vdd,
139 unsigned long target_volt);
140};
141
142unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm);
143void omap_vp_enable(struct voltagedomain *voltdm);
144void omap_vp_disable(struct voltagedomain *voltdm);
145int omap_voltage_scale_vdd(struct voltagedomain *voltdm,
146 unsigned long target_volt);
147void omap_voltage_reset(struct voltagedomain *voltdm);
148void omap_voltage_get_volttable(struct voltagedomain *voltdm,
149 struct omap_volt_data **volt_data);
150struct omap_volt_data *omap_voltage_get_voltdata(struct voltagedomain *voltdm,
151 unsigned long volt);
152unsigned long omap_voltage_get_nom_volt(struct voltagedomain *voltdm);
153struct dentry *omap_voltage_get_dbgdir(struct voltagedomain *voltdm);
154int __init omap_voltage_early_init(s16 prm_mod, s16 prm_irqst_mod,
155 struct omap_vdd_info *omap_vdd_array[],
156 u8 omap_vdd_count);
157#ifdef CONFIG_PM
158int omap_voltage_register_pmic(struct voltagedomain *voltdm,
159 struct omap_volt_pmic_info *pmic_info);
160void omap_change_voltscale_method(struct voltagedomain *voltdm,
161 int voltscale_method);
162/* API to get the voltagedomain pointer */
163struct voltagedomain *omap_voltage_domain_lookup(char *name);
164
165int omap_voltage_late_init(void);
166#else
167static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
168 struct omap_volt_pmic_info *pmic_info)
169{
170 return -EINVAL;
171}
172static inline void omap_change_voltscale_method(struct voltagedomain *voltdm,
173 int voltscale_method) {}
174static inline int omap_voltage_late_init(void)
175{
176 return -EINVAL;
177}
178static inline struct voltagedomain *omap_voltage_domain_lookup(char *name)
179{
180 return ERR_PTR(-EINVAL);
181}
182#endif
183
184#endif
diff --git a/arch/arm/mach-omap2/voltagedomains3xxx_data.c b/arch/arm/mach-omap2/voltagedomains3xxx_data.c
new file mode 100644
index 000000000000..def230fd2fde
--- /dev/null
+++ b/arch/arm/mach-omap2/voltagedomains3xxx_data.c
@@ -0,0 +1,95 @@
1/*
2 * OMAP3 voltage domain data
3 *
4 * Copyright (C) 2007, 2010 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 * Lesly A M <x0080970@ti.com>
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008, 2011 Nokia Corporation
10 * Kalle Jokiniemi
11 * Paul Walmsley
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17#include <linux/kernel.h>
18#include <linux/err.h>
19#include <linux/init.h>
20
21#include <plat/common.h>
22#include <plat/cpu.h>
23
24#include "prm-regbits-34xx.h"
25#include "omap_opp_data.h"
26#include "voltage.h"
27#include "vc.h"
28#include "vp.h"
29
30/*
31 * VDD data
32 */
33
34static const struct omap_vfsm_instance_data omap3_vdd1_vfsm_data = {
35 .voltsetup_reg = OMAP3_PRM_VOLTSETUP1_OFFSET,
36 .voltsetup_shift = OMAP3430_SETUP_TIME1_SHIFT,
37 .voltsetup_mask = OMAP3430_SETUP_TIME1_MASK,
38};
39
40static struct omap_vdd_info omap3_vdd1_info = {
41 .vp_data = &omap3_vp1_data,
42 .vc_data = &omap3_vc1_data,
43 .vfsm = &omap3_vdd1_vfsm_data,
44 .voltdm = {
45 .name = "mpu",
46 },
47};
48
49static const struct omap_vfsm_instance_data omap3_vdd2_vfsm_data = {
50 .voltsetup_reg = OMAP3_PRM_VOLTSETUP1_OFFSET,
51 .voltsetup_shift = OMAP3430_SETUP_TIME2_SHIFT,
52 .voltsetup_mask = OMAP3430_SETUP_TIME2_MASK,
53};
54
55static struct omap_vdd_info omap3_vdd2_info = {
56 .vp_data = &omap3_vp2_data,
57 .vc_data = &omap3_vc2_data,
58 .vfsm = &omap3_vdd2_vfsm_data,
59 .voltdm = {
60 .name = "core",
61 },
62};
63
64/* OMAP3 VDD structures */
65static struct omap_vdd_info *omap3_vdd_info[] = {
66 &omap3_vdd1_info,
67 &omap3_vdd2_info,
68};
69
70/* OMAP3 specific voltage init functions */
71static int __init omap3xxx_voltage_early_init(void)
72{
73 s16 prm_mod = OMAP3430_GR_MOD;
74 s16 prm_irqst_ocp_mod = OCP_MOD;
75
76 if (!cpu_is_omap34xx())
77 return 0;
78
79 /*
80 * XXX Will depend on the process, validation, and binning
81 * for the currently-running IC
82 */
83 if (cpu_is_omap3630()) {
84 omap3_vdd1_info.volt_data = omap36xx_vddmpu_volt_data;
85 omap3_vdd2_info.volt_data = omap36xx_vddcore_volt_data;
86 } else {
87 omap3_vdd1_info.volt_data = omap34xx_vddmpu_volt_data;
88 omap3_vdd2_info.volt_data = omap34xx_vddcore_volt_data;
89 }
90
91 return omap_voltage_early_init(prm_mod, prm_irqst_ocp_mod,
92 omap3_vdd_info,
93 ARRAY_SIZE(omap3_vdd_info));
94};
95core_initcall(omap3xxx_voltage_early_init);
diff --git a/arch/arm/mach-omap2/voltagedomains44xx_data.c b/arch/arm/mach-omap2/voltagedomains44xx_data.c
new file mode 100644
index 000000000000..cb64996de0e1
--- /dev/null
+++ b/arch/arm/mach-omap2/voltagedomains44xx_data.c
@@ -0,0 +1,102 @@
1/*
2 * OMAP3/OMAP4 Voltage Management Routines
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Copyright (C) 2007 Texas Instruments, Inc.
7 * Rajendra Nayak <rnayak@ti.com>
8 * Lesly A M <x0080970@ti.com>
9 *
10 * Copyright (C) 2008 Nokia Corporation
11 * Kalle Jokiniemi
12 *
13 * Copyright (C) 2010 Texas Instruments, Inc.
14 * Thara Gopinath <thara@ti.com>
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
19 */
20#include <linux/kernel.h>
21#include <linux/err.h>
22#include <linux/init.h>
23
24#include <plat/common.h>
25
26#include "prm-regbits-44xx.h"
27#include "prm44xx.h"
28#include "prcm44xx.h"
29#include "prminst44xx.h"
30#include "voltage.h"
31#include "omap_opp_data.h"
32#include "vc.h"
33#include "vp.h"
34
35static const struct omap_vfsm_instance_data omap4_vdd_mpu_vfsm_data = {
36 .voltsetup_reg = OMAP4_PRM_VOLTSETUP_MPU_RET_SLEEP_OFFSET,
37};
38
39static struct omap_vdd_info omap4_vdd_mpu_info = {
40 .vp_data = &omap4_vp_mpu_data,
41 .vc_data = &omap4_vc_mpu_data,
42 .vfsm = &omap4_vdd_mpu_vfsm_data,
43 .voltdm = {
44 .name = "mpu",
45 },
46};
47
48static const struct omap_vfsm_instance_data omap4_vdd_iva_vfsm_data = {
49 .voltsetup_reg = OMAP4_PRM_VOLTSETUP_IVA_RET_SLEEP_OFFSET,
50};
51
52static struct omap_vdd_info omap4_vdd_iva_info = {
53 .vp_data = &omap4_vp_iva_data,
54 .vc_data = &omap4_vc_iva_data,
55 .vfsm = &omap4_vdd_iva_vfsm_data,
56 .voltdm = {
57 .name = "iva",
58 },
59};
60
61static const struct omap_vfsm_instance_data omap4_vdd_core_vfsm_data = {
62 .voltsetup_reg = OMAP4_PRM_VOLTSETUP_CORE_RET_SLEEP_OFFSET,
63};
64
65static struct omap_vdd_info omap4_vdd_core_info = {
66 .vp_data = &omap4_vp_core_data,
67 .vc_data = &omap4_vc_core_data,
68 .vfsm = &omap4_vdd_core_vfsm_data,
69 .voltdm = {
70 .name = "core",
71 },
72};
73
74/* OMAP4 VDD structures */
75static struct omap_vdd_info *omap4_vdd_info[] = {
76 &omap4_vdd_mpu_info,
77 &omap4_vdd_iva_info,
78 &omap4_vdd_core_info,
79};
80
81/* OMAP4 specific voltage init functions */
82static int __init omap44xx_voltage_early_init(void)
83{
84 s16 prm_mod = OMAP4430_PRM_DEVICE_INST;
85 s16 prm_irqst_ocp_mod = OMAP4430_PRM_OCP_SOCKET_INST;
86
87 if (!cpu_is_omap44xx())
88 return 0;
89
90 /*
91 * XXX Will depend on the process, validation, and binning
92 * for the currently-running IC
93 */
94 omap4_vdd_mpu_info.volt_data = omap44xx_vdd_mpu_volt_data;
95 omap4_vdd_iva_info.volt_data = omap44xx_vdd_iva_volt_data;
96 omap4_vdd_core_info.volt_data = omap44xx_vdd_core_volt_data;
97
98 return omap_voltage_early_init(prm_mod, prm_irqst_ocp_mod,
99 omap4_vdd_info,
100 ARRAY_SIZE(omap4_vdd_info));
101};
102core_initcall(omap44xx_voltage_early_init);
diff --git a/arch/arm/mach-omap2/vp.h b/arch/arm/mach-omap2/vp.h
new file mode 100644
index 000000000000..7ce134f7de79
--- /dev/null
+++ b/arch/arm/mach-omap2/vp.h
@@ -0,0 +1,143 @@
1/*
2 * OMAP3/4 Voltage Processor (VP) structure and macro definitions
3 *
4 * Copyright (C) 2007, 2010 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 * Lesly A M <x0080970@ti.com>
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008, 2011 Nokia Corporation
10 * Kalle Jokiniemi
11 * Paul Walmsley
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License version
15 * 2 as published by the Free Software Foundation.
16 */
17#ifndef __ARCH_ARM_MACH_OMAP2_VP_H
18#define __ARCH_ARM_MACH_OMAP2_VP_H
19
20#include <linux/kernel.h>
21
22/* XXX document */
23#define VP_IDLE_TIMEOUT 200
24#define VP_TRANXDONE_TIMEOUT 300
25
26
27/**
28 * struct omap_vp_common_data - register data common to all VDDs
29 * @vpconfig_errorgain_mask: ERRORGAIN bitmask in the PRM_VP*_CONFIG reg
30 * @vpconfig_initvoltage_mask: INITVOLTAGE bitmask in the PRM_VP*_CONFIG reg
31 * @vpconfig_timeouten_mask: TIMEOUT bitmask in the PRM_VP*_CONFIG reg
32 * @vpconfig_initvdd: INITVDD bitmask in the PRM_VP*_CONFIG reg
33 * @vpconfig_forceupdate: FORCEUPDATE bitmask in the PRM_VP*_CONFIG reg
34 * @vpconfig_vpenable: VPENABLE bitmask in the PRM_VP*_CONFIG reg
35 * @vpconfig_erroroffset_shift: ERROROFFSET field shift in PRM_VP*_CONFIG reg
36 * @vpconfig_errorgain_shift: ERRORGAIN field shift in PRM_VP*_CONFIG reg
37 * @vpconfig_initvoltage_shift: INITVOLTAGE field shift in PRM_VP*_CONFIG reg
38 * @vpconfig_stepmin_shift: VSTEPMIN field shift in the PRM_VP*_VSTEPMIN reg
39 * @vpconfig_smpswaittimemin_shift: SMPSWAITTIMEMIN field shift in PRM_VP*_VSTEPMIN reg
40 * @vpconfig_stepmax_shift: VSTEPMAX field shift in the PRM_VP*_VSTEPMAX reg
41 * @vpconfig_smpswaittimemax_shift: SMPSWAITTIMEMAX field shift in PRM_VP*_VSTEPMAX reg
42 * @vpconfig_vlimitto_vddmin_shift: VDDMIN field shift in PRM_VP*_VLIMITTO reg
43 * @vpconfig_vlimitto_vddmax_shift: VDDMAX field shift in PRM_VP*_VLIMITTO reg
44 * @vpconfig_vlimitto_timeout_shift: TIMEOUT field shift in PRM_VP*_VLIMITTO reg
45 *
46 * XXX It it not necessary to have both a mask and a shift for the same
47 * bitfield - remove one
48 * XXX Many of these fields are wrongly named -- e.g., vpconfig_smps* -- fix!
49 */
50struct omap_vp_common_data {
51 u32 vpconfig_errorgain_mask;
52 u32 vpconfig_initvoltage_mask;
53 u32 vpconfig_timeouten;
54 u32 vpconfig_initvdd;
55 u32 vpconfig_forceupdate;
56 u32 vpconfig_vpenable;
57 u8 vpconfig_erroroffset_shift;
58 u8 vpconfig_errorgain_shift;
59 u8 vpconfig_initvoltage_shift;
60 u8 vstepmin_stepmin_shift;
61 u8 vstepmin_smpswaittimemin_shift;
62 u8 vstepmax_stepmax_shift;
63 u8 vstepmax_smpswaittimemax_shift;
64 u8 vlimitto_vddmin_shift;
65 u8 vlimitto_vddmax_shift;
66 u8 vlimitto_timeout_shift;
67};
68
69/**
70 * struct omap_vp_prm_irqst_data - PRM_IRQSTATUS_MPU.VP_TRANXDONE_ST data
71 * @prm_irqst_reg: reg offset for PRM_IRQSTATUS_MPU from top of PRM
72 * @tranxdone_status: VP_TRANXDONE_ST bitmask in PRM_IRQSTATUS_MPU reg
73 *
74 * XXX prm_irqst_reg does not belong here
75 * XXX Note that on OMAP3, VP_TRANXDONE interrupt may not work due to a
76 * hardware bug
77 * XXX This structure is probably not needed
78 */
79struct omap_vp_prm_irqst_data {
80 u8 prm_irqst_reg;
81 u32 tranxdone_status;
82};
83
84/**
85 * struct omap_vp_instance_data - VP register offsets (per-VDD)
86 * @vp_common: pointer to struct omap_vp_common_data * for this SoC
87 * @prm_irqst_data: pointer to struct omap_vp_prm_irqst_data for this VDD
88 * @vpconfig: PRM_VP*_CONFIG reg offset from PRM start
89 * @vstepmin: PRM_VP*_VSTEPMIN reg offset from PRM start
90 * @vlimitto: PRM_VP*_VLIMITTO reg offset from PRM start
91 * @vstatus: PRM_VP*_VSTATUS reg offset from PRM start
92 * @voltage: PRM_VP*_VOLTAGE reg offset from PRM start
93 *
94 * XXX vp_common is probably not needed since it is per-SoC
95 */
96struct omap_vp_instance_data {
97 const struct omap_vp_common_data *vp_common;
98 const struct omap_vp_prm_irqst_data *prm_irqst_data;
99 u8 vpconfig;
100 u8 vstepmin;
101 u8 vstepmax;
102 u8 vlimitto;
103 u8 vstatus;
104 u8 voltage;
105};
106
107/**
108 * struct omap_vp_runtime_data - VP data populated at runtime by code
109 * @vpconfig_erroroffset: value of ERROROFFSET bitfield in PRM_VP*_CONFIG
110 * @vpconfig_errorgain: value of ERRORGAIN bitfield in PRM_VP*_CONFIG
111 * @vstepmin_smpswaittimemin: value of SMPSWAITTIMEMIN bitfield in PRM_VP*_VSTEPMIN
112 * @vstepmax_smpswaittimemax: value of SMPSWAITTIMEMAX bitfield in PRM_VP*_VSTEPMAX
113 * @vlimitto_timeout: value of TIMEOUT bitfield in PRM_VP*_VLIMITTO
114 * @vstepmin_stepmin: value of VSTEPMIN bitfield in PRM_VP*_VSTEPMIN
115 * @vstepmax_stepmax: value of VSTEPMAX bitfield in PRM_VP*_VSTEPMAX
116 * @vlimitto_vddmin: value of VDDMIN bitfield in PRM_VP*_VLIMITTO
117 * @vlimitto_vddmax: value of VDDMAX bitfield in PRM_VP*_VLIMITTO
118 *
119 * XXX Is this structure really needed? Why not just program the
120 * device directly? They are in PRM space, therefore in the WKUP
121 * powerdomain, so register contents should not be lost in off-mode.
122 * XXX Some of these fields are incorrectly named, e.g., vstep*
123 */
124struct omap_vp_runtime_data {
125 u32 vpconfig_erroroffset;
126 u16 vpconfig_errorgain;
127 u16 vstepmin_smpswaittimemin;
128 u16 vstepmax_smpswaittimemax;
129 u16 vlimitto_timeout;
130 u8 vstepmin_stepmin;
131 u8 vstepmax_stepmax;
132 u8 vlimitto_vddmin;
133 u8 vlimitto_vddmax;
134};
135
136extern struct omap_vp_instance_data omap3_vp1_data;
137extern struct omap_vp_instance_data omap3_vp2_data;
138
139extern struct omap_vp_instance_data omap4_vp_mpu_data;
140extern struct omap_vp_instance_data omap4_vp_iva_data;
141extern struct omap_vp_instance_data omap4_vp_core_data;
142
143#endif
diff --git a/arch/arm/mach-omap2/vp3xxx_data.c b/arch/arm/mach-omap2/vp3xxx_data.c
new file mode 100644
index 000000000000..645217094e51
--- /dev/null
+++ b/arch/arm/mach-omap2/vp3xxx_data.c
@@ -0,0 +1,82 @@
1/*
2 * OMAP3 Voltage Processor (VP) data
3 *
4 * Copyright (C) 2007, 2010 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 * Lesly A M <x0080970@ti.com>
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008, 2011 Nokia Corporation
10 * Kalle Jokiniemi
11 * Paul Walmsley
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17
18#include <linux/io.h>
19#include <linux/err.h>
20#include <linux/init.h>
21
22#include <plat/common.h>
23
24#include "prm-regbits-34xx.h"
25#include "voltage.h"
26
27#include "vp.h"
28
29/*
30 * VP data common to 34xx/36xx chips
31 * XXX This stuff presumably belongs in the vp3xxx.c or vp.c file.
32 */
33static const struct omap_vp_common_data omap3_vp_common = {
34 .vpconfig_erroroffset_shift = OMAP3430_ERROROFFSET_SHIFT,
35 .vpconfig_errorgain_mask = OMAP3430_ERRORGAIN_MASK,
36 .vpconfig_errorgain_shift = OMAP3430_ERRORGAIN_SHIFT,
37 .vpconfig_initvoltage_shift = OMAP3430_INITVOLTAGE_SHIFT,
38 .vpconfig_initvoltage_mask = OMAP3430_INITVOLTAGE_MASK,
39 .vpconfig_timeouten = OMAP3430_TIMEOUTEN_MASK,
40 .vpconfig_initvdd = OMAP3430_INITVDD_MASK,
41 .vpconfig_forceupdate = OMAP3430_FORCEUPDATE_MASK,
42 .vpconfig_vpenable = OMAP3430_VPENABLE_MASK,
43 .vstepmin_smpswaittimemin_shift = OMAP3430_SMPSWAITTIMEMIN_SHIFT,
44 .vstepmax_smpswaittimemax_shift = OMAP3430_SMPSWAITTIMEMAX_SHIFT,
45 .vstepmin_stepmin_shift = OMAP3430_VSTEPMIN_SHIFT,
46 .vstepmax_stepmax_shift = OMAP3430_VSTEPMAX_SHIFT,
47 .vlimitto_vddmin_shift = OMAP3430_VDDMIN_SHIFT,
48 .vlimitto_vddmax_shift = OMAP3430_VDDMAX_SHIFT,
49 .vlimitto_timeout_shift = OMAP3430_TIMEOUT_SHIFT,
50};
51
52static const struct omap_vp_prm_irqst_data omap3_vp1_prm_irqst_data = {
53 .prm_irqst_reg = OMAP3_PRM_IRQSTATUS_MPU_OFFSET,
54 .tranxdone_status = OMAP3430_VP1_TRANXDONE_ST_MASK,
55};
56
57struct omap_vp_instance_data omap3_vp1_data = {
58 .vp_common = &omap3_vp_common,
59 .vpconfig = OMAP3_PRM_VP1_CONFIG_OFFSET,
60 .vstepmin = OMAP3_PRM_VP1_VSTEPMIN_OFFSET,
61 .vstepmax = OMAP3_PRM_VP1_VSTEPMAX_OFFSET,
62 .vlimitto = OMAP3_PRM_VP1_VLIMITTO_OFFSET,
63 .vstatus = OMAP3_PRM_VP1_STATUS_OFFSET,
64 .voltage = OMAP3_PRM_VP1_VOLTAGE_OFFSET,
65 .prm_irqst_data = &omap3_vp1_prm_irqst_data,
66};
67
68static const struct omap_vp_prm_irqst_data omap3_vp2_prm_irqst_data = {
69 .prm_irqst_reg = OMAP3_PRM_IRQSTATUS_MPU_OFFSET,
70 .tranxdone_status = OMAP3430_VP2_TRANXDONE_ST_MASK,
71};
72
73struct omap_vp_instance_data omap3_vp2_data = {
74 .vp_common = &omap3_vp_common,
75 .vpconfig = OMAP3_PRM_VP2_CONFIG_OFFSET,
76 .vstepmin = OMAP3_PRM_VP2_VSTEPMIN_OFFSET,
77 .vstepmax = OMAP3_PRM_VP2_VSTEPMAX_OFFSET,
78 .vlimitto = OMAP3_PRM_VP2_VLIMITTO_OFFSET,
79 .vstatus = OMAP3_PRM_VP2_STATUS_OFFSET,
80 .voltage = OMAP3_PRM_VP2_VOLTAGE_OFFSET,
81 .prm_irqst_data = &omap3_vp2_prm_irqst_data,
82};
diff --git a/arch/arm/mach-omap2/vp44xx_data.c b/arch/arm/mach-omap2/vp44xx_data.c
new file mode 100644
index 000000000000..65d1ad63800a
--- /dev/null
+++ b/arch/arm/mach-omap2/vp44xx_data.c
@@ -0,0 +1,100 @@
1/*
2 * OMAP3 Voltage Processor (VP) data
3 *
4 * Copyright (C) 2007, 2010 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 * Lesly A M <x0080970@ti.com>
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008, 2011 Nokia Corporation
10 * Kalle Jokiniemi
11 * Paul Walmsley
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2 as
15 * published by the Free Software Foundation.
16 */
17
18#include <linux/io.h>
19#include <linux/err.h>
20#include <linux/init.h>
21
22#include <plat/common.h>
23
24#include "prm44xx.h"
25#include "prm-regbits-44xx.h"
26#include "voltage.h"
27
28#include "vp.h"
29
30/*
31 * VP data common to 44xx chips
32 * XXX This stuff presumably belongs in the vp44xx.c or vp.c file.
33 */
34static const struct omap_vp_common_data omap4_vp_common = {
35 .vpconfig_erroroffset_shift = OMAP4430_ERROROFFSET_SHIFT,
36 .vpconfig_errorgain_mask = OMAP4430_ERRORGAIN_MASK,
37 .vpconfig_errorgain_shift = OMAP4430_ERRORGAIN_SHIFT,
38 .vpconfig_initvoltage_shift = OMAP4430_INITVOLTAGE_SHIFT,
39 .vpconfig_initvoltage_mask = OMAP4430_INITVOLTAGE_MASK,
40 .vpconfig_timeouten = OMAP4430_TIMEOUTEN_MASK,
41 .vpconfig_initvdd = OMAP4430_INITVDD_MASK,
42 .vpconfig_forceupdate = OMAP4430_FORCEUPDATE_MASK,
43 .vpconfig_vpenable = OMAP4430_VPENABLE_MASK,
44 .vstepmin_smpswaittimemin_shift = OMAP4430_SMPSWAITTIMEMIN_SHIFT,
45 .vstepmax_smpswaittimemax_shift = OMAP4430_SMPSWAITTIMEMAX_SHIFT,
46 .vstepmin_stepmin_shift = OMAP4430_VSTEPMIN_SHIFT,
47 .vstepmax_stepmax_shift = OMAP4430_VSTEPMAX_SHIFT,
48 .vlimitto_vddmin_shift = OMAP4430_VDDMIN_SHIFT,
49 .vlimitto_vddmax_shift = OMAP4430_VDDMAX_SHIFT,
50 .vlimitto_timeout_shift = OMAP4430_TIMEOUT_SHIFT,
51};
52
53static const struct omap_vp_prm_irqst_data omap4_vp_mpu_prm_irqst_data = {
54 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET,
55 .tranxdone_status = OMAP4430_VP_MPU_TRANXDONE_ST_MASK,
56};
57
58struct omap_vp_instance_data omap4_vp_mpu_data = {
59 .vp_common = &omap4_vp_common,
60 .vpconfig = OMAP4_PRM_VP_MPU_CONFIG_OFFSET,
61 .vstepmin = OMAP4_PRM_VP_MPU_VSTEPMIN_OFFSET,
62 .vstepmax = OMAP4_PRM_VP_MPU_VSTEPMAX_OFFSET,
63 .vlimitto = OMAP4_PRM_VP_MPU_VLIMITTO_OFFSET,
64 .vstatus = OMAP4_PRM_VP_MPU_STATUS_OFFSET,
65 .voltage = OMAP4_PRM_VP_MPU_VOLTAGE_OFFSET,
66 .prm_irqst_data = &omap4_vp_mpu_prm_irqst_data,
67};
68
69static const struct omap_vp_prm_irqst_data omap4_vp_iva_prm_irqst_data = {
70 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_OFFSET,
71 .tranxdone_status = OMAP4430_VP_IVA_TRANXDONE_ST_MASK,
72};
73
74struct omap_vp_instance_data omap4_vp_iva_data = {
75 .vp_common = &omap4_vp_common,
76 .vpconfig = OMAP4_PRM_VP_IVA_CONFIG_OFFSET,
77 .vstepmin = OMAP4_PRM_VP_IVA_VSTEPMIN_OFFSET,
78 .vstepmax = OMAP4_PRM_VP_IVA_VSTEPMAX_OFFSET,
79 .vlimitto = OMAP4_PRM_VP_IVA_VLIMITTO_OFFSET,
80 .vstatus = OMAP4_PRM_VP_IVA_STATUS_OFFSET,
81 .voltage = OMAP4_PRM_VP_IVA_VOLTAGE_OFFSET,
82 .prm_irqst_data = &omap4_vp_iva_prm_irqst_data,
83};
84
85static const struct omap_vp_prm_irqst_data omap4_vp_core_prm_irqst_data = {
86 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_OFFSET,
87 .tranxdone_status = OMAP4430_VP_CORE_TRANXDONE_ST_MASK,
88};
89
90struct omap_vp_instance_data omap4_vp_core_data = {
91 .vp_common = &omap4_vp_common,
92 .vpconfig = OMAP4_PRM_VP_CORE_CONFIG_OFFSET,
93 .vstepmin = OMAP4_PRM_VP_CORE_VSTEPMIN_OFFSET,
94 .vstepmax = OMAP4_PRM_VP_CORE_VSTEPMAX_OFFSET,
95 .vlimitto = OMAP4_PRM_VP_CORE_VLIMITTO_OFFSET,
96 .vstatus = OMAP4_PRM_VP_CORE_STATUS_OFFSET,
97 .voltage = OMAP4_PRM_VP_CORE_VOLTAGE_OFFSET,
98 .prm_irqst_data = &omap4_vp_core_prm_irqst_data,
99};
100
diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c
new file mode 100644
index 000000000000..4067669d96c4
--- /dev/null
+++ b/arch/arm/mach-omap2/wd_timer.c
@@ -0,0 +1,56 @@
1/*
2 * OMAP2+ MPU WD_TIMER-specific code
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9
10#include <linux/kernel.h>
11#include <linux/io.h>
12#include <linux/err.h>
13
14#include <plat/omap_hwmod.h>
15
16#include "wd_timer.h"
17
18/*
19 * In order to avoid any assumptions from bootloader regarding WDT
20 * settings, WDT module is reset during init. This enables the watchdog
21 * timer. Hence it is required to disable the watchdog after the WDT reset
22 * during init. Otherwise the system would reboot as per the default
23 * watchdog timer registers settings.
24 */
25#define OMAP_WDT_WPS 0x34
26#define OMAP_WDT_SPR 0x48
27
28
29int omap2_wd_timer_disable(struct omap_hwmod *oh)
30{
31 void __iomem *base;
32
33 if (!oh) {
34 pr_err("%s: Could not look up wdtimer_hwmod\n", __func__);
35 return -EINVAL;
36 }
37
38 base = omap_hwmod_get_mpu_rt_va(oh);
39 if (!base) {
40 pr_err("%s: Could not get the base address for %s\n",
41 oh->name, __func__);
42 return -EINVAL;
43 }
44
45 /* sequence required to disable watchdog */
46 __raw_writel(0xAAAA, base + OMAP_WDT_SPR);
47 while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
48 cpu_relax();
49
50 __raw_writel(0x5555, base + OMAP_WDT_SPR);
51 while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
52 cpu_relax();
53
54 return 0;
55}
56
diff --git a/arch/arm/mach-omap2/wd_timer.h b/arch/arm/mach-omap2/wd_timer.h
new file mode 100644
index 000000000000..e0054a2d5505
--- /dev/null
+++ b/arch/arm/mach-omap2/wd_timer.h
@@ -0,0 +1,17 @@
1/*
2 * OMAP2+ MPU WD_TIMER-specific function prototypes
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9
10#ifndef __ARCH_ARM_MACH_OMAP2_WD_TIMER_H
11#define __ARCH_ARM_MACH_OMAP2_WD_TIMER_H
12
13#include <plat/omap_hwmod.h>
14
15extern int omap2_wd_timer_disable(struct omap_hwmod *oh);
16
17#endif