4 * Copyright (C) 2008 Texas Instruments, Inc.
5 * Copyright (C) 2008 Nokia Corporation
7 * Written by Paul Walmsley
10 #ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
11 #define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_H
13 #include <mach/clockdomain.h>
16 * OMAP2/3-common clockdomains
18 * Even though the 2420 has a single PRCM module from the
19 * interconnect's perspective, internally it does appear to have
20 * separate PRM and CM clockdomains. The usual test case is
21 * sys_clkout/sys_clkout2.
24 static struct clockdomain prm_clkdm = {
26 .pwrdm = { .name = "wkup_pwrdm" },
27 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
30 static struct clockdomain cm_clkdm = {
32 .pwrdm = { .name = "core_pwrdm" },
33 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX | CHIP_IS_OMAP3430),
37 * 2420-only clockdomains
40 #if defined(CONFIG_ARCH_OMAP2420)
42 static struct clockdomain mpu_2420_clkdm = {
44 .pwrdm = { .name = "mpu_pwrdm" },
45 .flags = CLKDM_CAN_HWSUP,
46 .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
47 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
50 static struct clockdomain iva1_2420_clkdm = {
52 .pwrdm = { .name = "dsp_pwrdm" },
53 .flags = CLKDM_CAN_HWSUP_SWSUP,
54 .clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,
55 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
58 #endif /* CONFIG_ARCH_OMAP2420 */
62 * 2430-only clockdomains
65 #if defined(CONFIG_ARCH_OMAP2430)
67 static struct clockdomain mpu_2430_clkdm = {
69 .pwrdm = { .name = "mpu_pwrdm" },
70 .flags = CLKDM_CAN_HWSUP_SWSUP,
71 .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
72 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
75 static struct clockdomain mdm_clkdm = {
77 .pwrdm = { .name = "mdm_pwrdm" },
78 .flags = CLKDM_CAN_HWSUP_SWSUP,
79 .clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK,
80 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
83 #endif /* CONFIG_ARCH_OMAP2430 */
87 * 24XX-only clockdomains
90 #if defined(CONFIG_ARCH_OMAP24XX)
92 static struct clockdomain dsp_clkdm = {
94 .pwrdm = { .name = "dsp_pwrdm" },
95 .flags = CLKDM_CAN_HWSUP_SWSUP,
96 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
97 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
100 static struct clockdomain gfx_24xx_clkdm = {
102 .pwrdm = { .name = "gfx_pwrdm" },
103 .flags = CLKDM_CAN_HWSUP_SWSUP,
104 .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
105 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
108 static struct clockdomain core_l3_24xx_clkdm = {
109 .name = "core_l3_clkdm",
110 .pwrdm = { .name = "core_pwrdm" },
111 .flags = CLKDM_CAN_HWSUP,
112 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
113 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
116 static struct clockdomain core_l4_24xx_clkdm = {
117 .name = "core_l4_clkdm",
118 .pwrdm = { .name = "core_pwrdm" },
119 .flags = CLKDM_CAN_HWSUP,
120 .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
121 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
124 static struct clockdomain dss_24xx_clkdm = {
126 .pwrdm = { .name = "core_pwrdm" },
127 .flags = CLKDM_CAN_HWSUP,
128 .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
129 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
132 #endif /* CONFIG_ARCH_OMAP24XX */
139 #if defined(CONFIG_ARCH_OMAP34XX)
141 static struct clockdomain mpu_34xx_clkdm = {
143 .pwrdm = { .name = "mpu_pwrdm" },
144 .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
145 .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
146 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
149 static struct clockdomain neon_clkdm = {
150 .name = "neon_clkdm",
151 .pwrdm = { .name = "neon_pwrdm" },
152 .flags = CLKDM_CAN_HWSUP_SWSUP,
153 .clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
154 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
157 static struct clockdomain iva2_clkdm = {
158 .name = "iva2_clkdm",
159 .pwrdm = { .name = "iva2_pwrdm" },
160 .flags = CLKDM_CAN_HWSUP_SWSUP,
161 .clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
162 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
165 static struct clockdomain gfx_3430es1_clkdm = {
167 .pwrdm = { .name = "gfx_pwrdm" },
168 .flags = CLKDM_CAN_HWSUP_SWSUP,
169 .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
170 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1),
173 static struct clockdomain sgx_clkdm = {
175 .pwrdm = { .name = "sgx_pwrdm" },
176 .flags = CLKDM_CAN_HWSUP_SWSUP,
177 .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
178 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
182 * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but
183 * then that information was removed from the 34xx ES2+ TRM. It is
184 * unclear whether the core is still there, but the clockdomain logic
185 * is there, and must be programmed to an appropriate state if the
186 * CORE clockdomain is to become inactive.
188 static struct clockdomain d2d_clkdm = {
190 .pwrdm = { .name = "core_pwrdm" },
191 .flags = CLKDM_CAN_HWSUP,
192 .clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
193 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
196 static struct clockdomain core_l3_34xx_clkdm = {
197 .name = "core_l3_clkdm",
198 .pwrdm = { .name = "core_pwrdm" },
199 .flags = CLKDM_CAN_HWSUP,
200 .clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK,
201 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
204 static struct clockdomain core_l4_34xx_clkdm = {
205 .name = "core_l4_clkdm",
206 .pwrdm = { .name = "core_pwrdm" },
207 .flags = CLKDM_CAN_HWSUP,
208 .clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK,
209 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
212 static struct clockdomain dss_34xx_clkdm = {
214 .pwrdm = { .name = "dss_pwrdm" },
215 .flags = CLKDM_CAN_HWSUP_SWSUP,
216 .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK,
217 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
220 static struct clockdomain cam_clkdm = {
222 .pwrdm = { .name = "cam_pwrdm" },
223 .flags = CLKDM_CAN_HWSUP_SWSUP,
224 .clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK,
225 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
228 static struct clockdomain usbhost_clkdm = {
229 .name = "usbhost_clkdm",
230 .pwrdm = { .name = "usbhost_pwrdm" },
231 .flags = CLKDM_CAN_HWSUP_SWSUP,
232 .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
233 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
236 static struct clockdomain per_clkdm = {
238 .pwrdm = { .name = "per_pwrdm" },
239 .flags = CLKDM_CAN_HWSUP_SWSUP,
240 .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK,
241 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
244 static struct clockdomain emu_clkdm = {
246 .pwrdm = { .name = "emu_pwrdm" },
247 .flags = CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_SWSUP,
248 .clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
249 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
252 #endif /* CONFIG_ARCH_OMAP34XX */
255 * Clockdomain-powerdomain hwsup dependencies (34XX only)
258 static struct clkdm_pwrdm_autodep clkdm_pwrdm_autodeps[] = {
260 .pwrdm = { .name = "mpu_pwrdm" },
261 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
264 .pwrdm = { .name = "iva2_pwrdm" },
265 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
268 .pwrdm = { .name = NULL },
276 static struct clockdomain *clockdomains_omap[] = {
281 #ifdef CONFIG_ARCH_OMAP2420
286 #ifdef CONFIG_ARCH_OMAP2430
291 #ifdef CONFIG_ARCH_OMAP24XX
299 #ifdef CONFIG_ARCH_OMAP34XX