Merge branch 'viafb-next' of git://github.com/schandinat/linux-2.6
[pandora-kernel.git] / arch / arm / mach-omap2 / powerdomains44xx_data.c
1 /*
2  * OMAP4 Power domains framework
3  *
4  * Copyright (C) 2009-2010 Texas Instruments, Inc.
5  * Copyright (C) 2009-2011 Nokia Corporation
6  *
7  * Abhijit Pagare (abhijitpagare@ti.com)
8  * Benoit Cousson (b-cousson@ti.com)
9  * Paul Walmsley (paul@pwsan.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
22 #include <linux/kernel.h>
23 #include <linux/init.h>
24
25 #include "powerdomain.h"
26
27 #include "prcm-common.h"
28 #include "prcm44xx.h"
29 #include "prm-regbits-44xx.h"
30 #include "prm44xx.h"
31 #include "prcm_mpu44xx.h"
32
33 /* core_44xx_pwrdm: CORE power domain */
34 static struct powerdomain core_44xx_pwrdm = {
35         .name             = "core_pwrdm",
36         .prcm_offs        = OMAP4430_PRM_CORE_INST,
37         .prcm_partition   = OMAP4430_PRM_PARTITION,
38         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
39         .pwrsts           = PWRSTS_RET_ON,
40         .pwrsts_logic_ret = PWRSTS_OFF_RET,
41         .banks            = 5,
42         .pwrsts_mem_ret = {
43                 [0] = PWRSTS_OFF,       /* core_nret_bank */
44                 [1] = PWRSTS_OFF_RET,   /* core_ocmram */
45                 [2] = PWRSTS_RET,       /* core_other_bank */
46                 [3] = PWRSTS_OFF_RET,   /* ducati_l2ram */
47                 [4] = PWRSTS_OFF_RET,   /* ducati_unicache */
48         },
49         .pwrsts_mem_on  = {
50                 [0] = PWRSTS_ON,        /* core_nret_bank */
51                 [1] = PWRSTS_OFF_RET,   /* core_ocmram */
52                 [2] = PWRSTS_ON,        /* core_other_bank */
53                 [3] = PWRSTS_ON,        /* ducati_l2ram */
54                 [4] = PWRSTS_ON,        /* ducati_unicache */
55         },
56         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
57 };
58
59 /* gfx_44xx_pwrdm: 3D accelerator power domain */
60 static struct powerdomain gfx_44xx_pwrdm = {
61         .name             = "gfx_pwrdm",
62         .prcm_offs        = OMAP4430_PRM_GFX_INST,
63         .prcm_partition   = OMAP4430_PRM_PARTITION,
64         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
65         .pwrsts           = PWRSTS_OFF_ON,
66         .banks            = 1,
67         .pwrsts_mem_ret = {
68                 [0] = PWRSTS_OFF,       /* gfx_mem */
69         },
70         .pwrsts_mem_on  = {
71                 [0] = PWRSTS_ON,        /* gfx_mem */
72         },
73         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
74 };
75
76 /* abe_44xx_pwrdm: Audio back end power domain */
77 static struct powerdomain abe_44xx_pwrdm = {
78         .name             = "abe_pwrdm",
79         .prcm_offs        = OMAP4430_PRM_ABE_INST,
80         .prcm_partition   = OMAP4430_PRM_PARTITION,
81         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
82         .pwrsts           = PWRSTS_OFF_RET_ON,
83         .pwrsts_logic_ret = PWRSTS_OFF,
84         .banks            = 2,
85         .pwrsts_mem_ret = {
86                 [0] = PWRSTS_RET,       /* aessmem */
87                 [1] = PWRSTS_OFF,       /* periphmem */
88         },
89         .pwrsts_mem_on  = {
90                 [0] = PWRSTS_ON,        /* aessmem */
91                 [1] = PWRSTS_ON,        /* periphmem */
92         },
93         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
94 };
95
96 /* dss_44xx_pwrdm: Display subsystem power domain */
97 static struct powerdomain dss_44xx_pwrdm = {
98         .name             = "dss_pwrdm",
99         .prcm_offs        = OMAP4430_PRM_DSS_INST,
100         .prcm_partition   = OMAP4430_PRM_PARTITION,
101         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
102         .pwrsts           = PWRSTS_OFF_RET_ON,
103         .pwrsts_logic_ret = PWRSTS_OFF,
104         .banks            = 1,
105         .pwrsts_mem_ret = {
106                 [0] = PWRSTS_OFF,       /* dss_mem */
107         },
108         .pwrsts_mem_on  = {
109                 [0] = PWRSTS_ON,        /* dss_mem */
110         },
111         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
112 };
113
114 /* tesla_44xx_pwrdm: Tesla processor power domain */
115 static struct powerdomain tesla_44xx_pwrdm = {
116         .name             = "tesla_pwrdm",
117         .prcm_offs        = OMAP4430_PRM_TESLA_INST,
118         .prcm_partition   = OMAP4430_PRM_PARTITION,
119         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
120         .pwrsts           = PWRSTS_OFF_RET_ON,
121         .pwrsts_logic_ret = PWRSTS_OFF_RET,
122         .banks            = 3,
123         .pwrsts_mem_ret = {
124                 [0] = PWRSTS_RET,       /* tesla_edma */
125                 [1] = PWRSTS_OFF_RET,   /* tesla_l1 */
126                 [2] = PWRSTS_OFF_RET,   /* tesla_l2 */
127         },
128         .pwrsts_mem_on  = {
129                 [0] = PWRSTS_ON,        /* tesla_edma */
130                 [1] = PWRSTS_ON,        /* tesla_l1 */
131                 [2] = PWRSTS_ON,        /* tesla_l2 */
132         },
133         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
134 };
135
136 /* wkup_44xx_pwrdm: Wake-up power domain */
137 static struct powerdomain wkup_44xx_pwrdm = {
138         .name             = "wkup_pwrdm",
139         .prcm_offs        = OMAP4430_PRM_WKUP_INST,
140         .prcm_partition   = OMAP4430_PRM_PARTITION,
141         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
142         .pwrsts           = PWRSTS_ON,
143         .banks            = 1,
144         .pwrsts_mem_ret = {
145                 [0] = PWRSTS_OFF,       /* wkup_bank */
146         },
147         .pwrsts_mem_on  = {
148                 [0] = PWRSTS_ON,        /* wkup_bank */
149         },
150 };
151
152 /* cpu0_44xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
153 static struct powerdomain cpu0_44xx_pwrdm = {
154         .name             = "cpu0_pwrdm",
155         .prcm_offs        = OMAP4430_PRCM_MPU_CPU0_INST,
156         .prcm_partition   = OMAP4430_PRCM_MPU_PARTITION,
157         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
158         .pwrsts           = PWRSTS_OFF_RET_ON,
159         .pwrsts_logic_ret = PWRSTS_OFF_RET,
160         .banks            = 1,
161         .pwrsts_mem_ret = {
162                 [0] = PWRSTS_OFF_RET,   /* cpu0_l1 */
163         },
164         .pwrsts_mem_on  = {
165                 [0] = PWRSTS_ON,        /* cpu0_l1 */
166         },
167 };
168
169 /* cpu1_44xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
170 static struct powerdomain cpu1_44xx_pwrdm = {
171         .name             = "cpu1_pwrdm",
172         .prcm_offs        = OMAP4430_PRCM_MPU_CPU1_INST,
173         .prcm_partition   = OMAP4430_PRCM_MPU_PARTITION,
174         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
175         .pwrsts           = PWRSTS_OFF_RET_ON,
176         .pwrsts_logic_ret = PWRSTS_OFF_RET,
177         .banks            = 1,
178         .pwrsts_mem_ret = {
179                 [0] = PWRSTS_OFF_RET,   /* cpu1_l1 */
180         },
181         .pwrsts_mem_on  = {
182                 [0] = PWRSTS_ON,        /* cpu1_l1 */
183         },
184 };
185
186 /* emu_44xx_pwrdm: Emulation power domain */
187 static struct powerdomain emu_44xx_pwrdm = {
188         .name             = "emu_pwrdm",
189         .prcm_offs        = OMAP4430_PRM_EMU_INST,
190         .prcm_partition   = OMAP4430_PRM_PARTITION,
191         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
192         .pwrsts           = PWRSTS_OFF_ON,
193         .banks            = 1,
194         .pwrsts_mem_ret = {
195                 [0] = PWRSTS_OFF,       /* emu_bank */
196         },
197         .pwrsts_mem_on  = {
198                 [0] = PWRSTS_ON,        /* emu_bank */
199         },
200 };
201
202 /* mpu_44xx_pwrdm: Modena processor and the Neon coprocessor power domain */
203 static struct powerdomain mpu_44xx_pwrdm = {
204         .name             = "mpu_pwrdm",
205         .prcm_offs        = OMAP4430_PRM_MPU_INST,
206         .prcm_partition   = OMAP4430_PRM_PARTITION,
207         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
208         .pwrsts           = PWRSTS_OFF_RET_ON,
209         .pwrsts_logic_ret = PWRSTS_OFF_RET,
210         .banks            = 3,
211         .pwrsts_mem_ret = {
212                 [0] = PWRSTS_OFF_RET,   /* mpu_l1 */
213                 [1] = PWRSTS_OFF_RET,   /* mpu_l2 */
214                 [2] = PWRSTS_RET,       /* mpu_ram */
215         },
216         .pwrsts_mem_on  = {
217                 [0] = PWRSTS_ON,        /* mpu_l1 */
218                 [1] = PWRSTS_ON,        /* mpu_l2 */
219                 [2] = PWRSTS_ON,        /* mpu_ram */
220         },
221 };
222
223 /* ivahd_44xx_pwrdm: IVA-HD power domain */
224 static struct powerdomain ivahd_44xx_pwrdm = {
225         .name             = "ivahd_pwrdm",
226         .prcm_offs        = OMAP4430_PRM_IVAHD_INST,
227         .prcm_partition   = OMAP4430_PRM_PARTITION,
228         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
229         .pwrsts           = PWRSTS_OFF_RET_ON,
230         .pwrsts_logic_ret = PWRSTS_OFF,
231         .banks            = 4,
232         .pwrsts_mem_ret = {
233                 [0] = PWRSTS_OFF,       /* hwa_mem */
234                 [1] = PWRSTS_OFF_RET,   /* sl2_mem */
235                 [2] = PWRSTS_OFF_RET,   /* tcm1_mem */
236                 [3] = PWRSTS_OFF_RET,   /* tcm2_mem */
237         },
238         .pwrsts_mem_on  = {
239                 [0] = PWRSTS_ON,        /* hwa_mem */
240                 [1] = PWRSTS_ON,        /* sl2_mem */
241                 [2] = PWRSTS_ON,        /* tcm1_mem */
242                 [3] = PWRSTS_ON,        /* tcm2_mem */
243         },
244         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
245 };
246
247 /* cam_44xx_pwrdm: Camera subsystem power domain */
248 static struct powerdomain cam_44xx_pwrdm = {
249         .name             = "cam_pwrdm",
250         .prcm_offs        = OMAP4430_PRM_CAM_INST,
251         .prcm_partition   = OMAP4430_PRM_PARTITION,
252         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
253         .pwrsts           = PWRSTS_OFF_ON,
254         .banks            = 1,
255         .pwrsts_mem_ret = {
256                 [0] = PWRSTS_OFF,       /* cam_mem */
257         },
258         .pwrsts_mem_on  = {
259                 [0] = PWRSTS_ON,        /* cam_mem */
260         },
261         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
262 };
263
264 /* l3init_44xx_pwrdm: L3 initators pheripherals power domain  */
265 static struct powerdomain l3init_44xx_pwrdm = {
266         .name             = "l3init_pwrdm",
267         .prcm_offs        = OMAP4430_PRM_L3INIT_INST,
268         .prcm_partition   = OMAP4430_PRM_PARTITION,
269         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
270         .pwrsts           = PWRSTS_RET_ON,
271         .pwrsts_logic_ret = PWRSTS_OFF_RET,
272         .banks            = 1,
273         .pwrsts_mem_ret = {
274                 [0] = PWRSTS_OFF,       /* l3init_bank1 */
275         },
276         .pwrsts_mem_on  = {
277                 [0] = PWRSTS_ON,        /* l3init_bank1 */
278         },
279         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
280 };
281
282 /* l4per_44xx_pwrdm: Target peripherals power domain */
283 static struct powerdomain l4per_44xx_pwrdm = {
284         .name             = "l4per_pwrdm",
285         .prcm_offs        = OMAP4430_PRM_L4PER_INST,
286         .prcm_partition   = OMAP4430_PRM_PARTITION,
287         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
288         .pwrsts           = PWRSTS_RET_ON,
289         .pwrsts_logic_ret = PWRSTS_OFF_RET,
290         .banks            = 2,
291         .pwrsts_mem_ret = {
292                 [0] = PWRSTS_OFF,       /* nonretained_bank */
293                 [1] = PWRSTS_RET,       /* retained_bank */
294         },
295         .pwrsts_mem_on  = {
296                 [0] = PWRSTS_ON,        /* nonretained_bank */
297                 [1] = PWRSTS_ON,        /* retained_bank */
298         },
299         .flags          = PWRDM_HAS_LOWPOWERSTATECHANGE,
300 };
301
302 /*
303  * always_on_core_44xx_pwrdm: Always ON logic that sits in VDD_CORE voltage
304  * domain
305  */
306 static struct powerdomain always_on_core_44xx_pwrdm = {
307         .name             = "always_on_core_pwrdm",
308         .prcm_offs        = OMAP4430_PRM_ALWAYS_ON_INST,
309         .prcm_partition   = OMAP4430_PRM_PARTITION,
310         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
311         .pwrsts           = PWRSTS_ON,
312 };
313
314 /* cefuse_44xx_pwrdm: Customer efuse controller power domain */
315 static struct powerdomain cefuse_44xx_pwrdm = {
316         .name             = "cefuse_pwrdm",
317         .prcm_offs        = OMAP4430_PRM_CEFUSE_INST,
318         .prcm_partition   = OMAP4430_PRM_PARTITION,
319         .omap_chip        = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
320         .pwrsts           = PWRSTS_OFF_ON,
321 };
322
323 /*
324  * The following power domains are not under SW control
325  *
326  * always_on_iva
327  * always_on_mpu
328  * stdefuse
329  */
330
331 /* As powerdomains are added or removed above, this list must also be changed */
332 static 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 };
351
352 void __init omap44xx_powerdomains_init(void)
353 {
354         pwrdm_init(powerdomains_omap44xx, &omap4_pwrdm_operations);
355 }