Merge current mainline tree into linux-omap tree
[pandora-kernel.git] / arch / arm / mach-omap2 / powerdomains34xx.h
1 /*
2  * OMAP34XX powerdomain definitions
3  *
4  * Copyright (C) 2007-2008 Texas Instruments, Inc.
5  * Copyright (C) 2007-2008 Nokia Corporation
6  *
7  * Written by Paul Walmsley
8  * Debugging and integration fixes by Jouni Högander
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 #ifndef ARCH_ARM_MACH_OMAP2_POWERDOMAINS34XX
16 #define ARCH_ARM_MACH_OMAP2_POWERDOMAINS34XX
17
18 /*
19  * N.B. If powerdomains are added or removed from this file, update
20  * the array in mach-omap2/powerdomains.h.
21  */
22
23 #include <mach/powerdomain.h>
24
25 #include "prcm-common.h"
26 #include "prm.h"
27 #include "prm-regbits-34xx.h"
28 #include "cm.h"
29 #include "cm-regbits-34xx.h"
30
31 /*
32  * 34XX-specific powerdomains, dependencies
33  */
34
35 #ifdef CONFIG_ARCH_OMAP34XX
36
37 /*
38  * 3430: PM_WKDEP_{PER,USBHOST}: CORE, IVA2, MPU, WKUP
39  * (USBHOST is ES2 only)
40  */
41 static struct pwrdm_dep per_usbhost_wkdeps[] = {
42         {
43                 .pwrdm_name = "core_pwrdm",
44                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
45         },
46         {
47                 .pwrdm_name = "iva2_pwrdm",
48                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
49         },
50         {
51                 .pwrdm_name = "mpu_pwrdm",
52                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
53         },
54         {
55                 .pwrdm_name = "wkup_pwrdm",
56                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
57         },
58         { NULL },
59 };
60
61 /*
62  * 3430 PM_WKDEP_MPU: CORE, IVA2, DSS, PER
63  */
64 static struct pwrdm_dep mpu_34xx_wkdeps[] = {
65         {
66                 .pwrdm_name = "core_pwrdm",
67                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
68         },
69         {
70                 .pwrdm_name = "iva2_pwrdm",
71                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
72         },
73         {
74                 .pwrdm_name = "dss_pwrdm",
75                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
76         },
77         {
78                 .pwrdm_name = "per_pwrdm",
79                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
80         },
81         { NULL },
82 };
83
84 /*
85  * 3430 PM_WKDEP_IVA2: CORE, MPU, WKUP, DSS, PER
86  */
87 static struct pwrdm_dep iva2_wkdeps[] = {
88         {
89                 .pwrdm_name = "core_pwrdm",
90                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
91         },
92         {
93                 .pwrdm_name = "mpu_pwrdm",
94                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
95         },
96         {
97                 .pwrdm_name = "wkup_pwrdm",
98                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
99         },
100         {
101                 .pwrdm_name = "dss_pwrdm",
102                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
103         },
104         {
105                 .pwrdm_name = "per_pwrdm",
106                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
107         },
108         { NULL },
109 };
110
111
112 /* 3430 PM_WKDEP_{CAM,DSS}: IVA2, MPU, WKUP */
113 static struct pwrdm_dep cam_dss_wkdeps[] = {
114         {
115                 .pwrdm_name = "iva2_pwrdm",
116                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
117         },
118         {
119                 .pwrdm_name = "mpu_pwrdm",
120                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
121         },
122         {
123                 .pwrdm_name = "wkup_pwrdm",
124                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
125         },
126         { NULL },
127 };
128
129 /* 3430: PM_WKDEP_NEON: MPU */
130 static struct pwrdm_dep neon_wkdeps[] = {
131         {
132                 .pwrdm_name = "mpu_pwrdm",
133                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
134         },
135         { NULL },
136 };
137
138
139 /* Sleep dependency source arrays for 34xx-specific pwrdms - 34XX only */
140
141 /*
142  * 3430: CM_SLEEPDEP_{DSS,PER}: MPU, IVA
143  * 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA
144  */
145 static struct pwrdm_dep dss_per_usbhost_sleepdeps[] = {
146         {
147                 .pwrdm_name = "mpu_pwrdm",
148                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
149         },
150         {
151                 .pwrdm_name = "iva2_pwrdm",
152                 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
153         },
154         { NULL },
155 };
156
157
158 /*
159  * Powerdomains
160  */
161
162 static struct powerdomain iva2_pwrdm = {
163         .name             = "iva2_pwrdm",
164         .prcm_offs        = OMAP3430_IVA2_MOD,
165         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
166         .dep_bit          = OMAP3430_PM_WKDEP_MPU_EN_IVA2_SHIFT,
167         .wkdep_srcs       = iva2_wkdeps,
168         .pwrsts           = PWRSTS_OFF_RET_ON,
169         .pwrsts_logic_ret = PWRSTS_OFF_RET,
170         .banks            = 4,
171         .pwrsts_mem_ret   = {
172                 [0] = PWRSTS_OFF_RET,
173                 [1] = PWRSTS_OFF_RET,
174                 [2] = PWRSTS_OFF_RET,
175                 [3] = PWRSTS_OFF_RET,
176         },
177         .pwrsts_mem_on    = {
178                 [0] = PWRDM_POWER_ON,
179                 [1] = PWRDM_POWER_ON,
180                 [2] = PWRSTS_OFF_ON,
181                 [3] = PWRDM_POWER_ON,
182         },
183 };
184
185 static struct powerdomain mpu_34xx_pwrdm = {
186         .name             = "mpu_pwrdm",
187         .prcm_offs        = MPU_MOD,
188         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
189         .dep_bit          = OMAP3430_EN_MPU_SHIFT,
190         .wkdep_srcs       = mpu_34xx_wkdeps,
191         .pwrsts           = PWRSTS_OFF_RET_ON,
192         .pwrsts_logic_ret = PWRSTS_OFF_RET,
193         .banks            = 1,
194         .pwrsts_mem_ret   = {
195                 [0] = PWRSTS_OFF_RET,
196         },
197         .pwrsts_mem_on    = {
198                 [0] = PWRSTS_OFF_ON,
199         },
200 };
201
202 /* No wkdeps or sleepdeps for 34xx core apparently */
203 static struct powerdomain core_34xx_es1_pwrdm = {
204         .name             = "core_pwrdm",
205         .prcm_offs        = CORE_MOD,
206         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES1),
207         .pwrsts           = PWRSTS_OFF_RET_ON,
208         .dep_bit          = OMAP3430_EN_CORE_SHIFT,
209         .banks            = 2,
210         .pwrsts_mem_ret   = {
211                 [0] = PWRSTS_OFF_RET,    /* MEM1RETSTATE */
212                 [1] = PWRSTS_OFF_RET,    /* MEM2RETSTATE */
213         },
214         .pwrsts_mem_on    = {
215                 [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
216                 [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
217         },
218 };
219
220 /* No wkdeps or sleepdeps for 34xx core apparently */
221 static struct powerdomain core_34xx_es2_pwrdm = {
222         .name             = "core_pwrdm",
223         .prcm_offs        = CORE_MOD,
224         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
225         .pwrsts           = PWRSTS_OFF_RET_ON,
226         .dep_bit          = OMAP3430_EN_CORE_SHIFT,
227         .flags            = PWRDM_HAS_HDWR_SAR, /* for USBTLL only */
228         .banks            = 2,
229         .pwrsts_mem_ret   = {
230                 [0] = PWRSTS_OFF_RET,    /* MEM1RETSTATE */
231                 [1] = PWRSTS_OFF_RET,    /* MEM2RETSTATE */
232         },
233         .pwrsts_mem_on    = {
234                 [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
235                 [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
236         },
237 };
238
239 /* Another case of bit name collisions between several registers: EN_DSS */
240 static struct powerdomain dss_pwrdm = {
241         .name             = "dss_pwrdm",
242         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
243         .prcm_offs        = OMAP3430_DSS_MOD,
244         .dep_bit          = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT,
245         .wkdep_srcs       = cam_dss_wkdeps,
246         .sleepdep_srcs    = dss_per_usbhost_sleepdeps,
247         .pwrsts           = PWRSTS_OFF_RET_ON,
248         .pwrsts_logic_ret = PWRDM_POWER_RET,
249         .banks            = 1,
250         .pwrsts_mem_ret   = {
251                 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */
252         },
253         .pwrsts_mem_on    = {
254                 [0] = PWRDM_POWER_ON,  /* MEMONSTATE */
255         },
256 };
257
258 static struct powerdomain sgx_pwrdm = {
259         .name             = "sgx_pwrdm",
260         .prcm_offs        = OMAP3430ES2_SGX_MOD,
261         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
262         .wkdep_srcs       = gfx_sgx_wkdeps,
263         .sleepdep_srcs    = cam_gfx_sleepdeps,
264         /* XXX This is accurate for 3430 SGX, but what about GFX? */
265         .pwrsts           = PWRSTS_OFF_RET_ON,
266         .pwrsts_logic_ret = PWRDM_POWER_RET,
267         .banks            = 1,
268         .pwrsts_mem_ret   = {
269                 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */
270         },
271         .pwrsts_mem_on    = {
272                 [0] = PWRDM_POWER_ON,  /* MEMONSTATE */
273         },
274 };
275
276 static struct powerdomain cam_pwrdm = {
277         .name             = "cam_pwrdm",
278         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
279         .prcm_offs        = OMAP3430_CAM_MOD,
280         .wkdep_srcs       = cam_dss_wkdeps,
281         .sleepdep_srcs    = cam_gfx_sleepdeps,
282         .pwrsts           = PWRSTS_OFF_RET_ON,
283         .pwrsts_logic_ret = PWRDM_POWER_RET,
284         .banks            = 1,
285         .pwrsts_mem_ret   = {
286                 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */
287         },
288         .pwrsts_mem_on    = {
289                 [0] = PWRDM_POWER_ON,  /* MEMONSTATE */
290         },
291 };
292
293 static struct powerdomain per_pwrdm = {
294         .name             = "per_pwrdm",
295         .prcm_offs        = OMAP3430_PER_MOD,
296         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
297         .dep_bit          = OMAP3430_EN_PER_SHIFT,
298         .wkdep_srcs       = per_usbhost_wkdeps,
299         .sleepdep_srcs    = dss_per_usbhost_sleepdeps,
300         .pwrsts           = PWRSTS_OFF_RET_ON,
301         .pwrsts_logic_ret = PWRSTS_OFF_RET,
302         .banks            = 1,
303         .pwrsts_mem_ret   = {
304                 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */
305         },
306         .pwrsts_mem_on    = {
307                 [0] = PWRDM_POWER_ON,  /* MEMONSTATE */
308         },
309 };
310
311 static struct powerdomain emu_pwrdm = {
312         .name           = "emu_pwrdm",
313         .prcm_offs      = OMAP3430_EMU_MOD,
314         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
315 };
316
317 static struct powerdomain neon_pwrdm = {
318         .name             = "neon_pwrdm",
319         .prcm_offs        = OMAP3430_NEON_MOD,
320         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
321         .wkdep_srcs       = neon_wkdeps,
322         .pwrsts           = PWRSTS_OFF_RET_ON,
323         .pwrsts_logic_ret = PWRDM_POWER_RET,
324 };
325
326 static struct powerdomain usbhost_pwrdm = {
327         .name             = "usbhost_pwrdm",
328         .prcm_offs        = OMAP3430ES2_USBHOST_MOD,
329         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
330         .wkdep_srcs       = per_usbhost_wkdeps,
331         .sleepdep_srcs    = dss_per_usbhost_sleepdeps,
332         .pwrsts           = PWRSTS_OFF_RET_ON,
333         .pwrsts_logic_ret = PWRDM_POWER_RET,
334         .flags            = PWRDM_HAS_HDWR_SAR, /* for USBHOST ctrlr only */
335         .banks            = 1,
336         .pwrsts_mem_ret   = {
337                 [0] = PWRDM_POWER_RET, /* MEMRETSTATE */
338         },
339         .pwrsts_mem_on    = {
340                 [0] = PWRDM_POWER_ON,  /* MEMONSTATE */
341         },
342 };
343
344 static struct powerdomain dpll1_pwrdm = {
345         .name           = "dpll1_pwrdm",
346         .prcm_offs      = MPU_MOD,
347         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
348 };
349
350 static struct powerdomain dpll2_pwrdm = {
351         .name           = "dpll2_pwrdm",
352         .prcm_offs      = OMAP3430_IVA2_MOD,
353         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
354 };
355
356 static struct powerdomain dpll3_pwrdm = {
357         .name           = "dpll3_pwrdm",
358         .prcm_offs      = PLL_MOD,
359         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
360 };
361
362 static struct powerdomain dpll4_pwrdm = {
363         .name           = "dpll4_pwrdm",
364         .prcm_offs      = PLL_MOD,
365         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
366 };
367
368 static struct powerdomain dpll5_pwrdm = {
369         .name           = "dpll5_pwrdm",
370         .prcm_offs      = PLL_MOD,
371         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2),
372 };
373
374
375 #endif    /* CONFIG_ARCH_OMAP34XX */
376
377
378 #endif