Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
powerdomains44xx_data.c
Go to the documentation of this file.
1 /*
2  * OMAP4 Power domains framework
3  *
4  * Copyright (C) 2009-2011 Texas Instruments, Inc.
5  * Copyright (C) 2009-2011 Nokia Corporation
6  *
7  * Abhijit Pagare ([email protected])
8  * Benoit Cousson ([email protected])
9  * Paul Walmsley ([email protected])
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 [email protected] 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  .voltdm = { .name = "core" },
37  .prcm_offs = OMAP4430_PRM_CORE_INST,
38  .prcm_partition = OMAP4430_PRM_PARTITION,
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_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_ON, /* core_ocmram */
52  [2] = PWRSTS_ON, /* core_other_bank */
53  [3] = PWRSTS_ON, /* ducati_l2ram */
54  [4] = PWRSTS_ON, /* ducati_unicache */
55  },
57 };
58 
59 /* gfx_44xx_pwrdm: 3D accelerator power domain */
60 static struct powerdomain gfx_44xx_pwrdm = {
61  .name = "gfx_pwrdm",
62  .voltdm = { .name = "core" },
63  .prcm_offs = OMAP4430_PRM_GFX_INST,
64  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
74 };
75 
76 /* abe_44xx_pwrdm: Audio back end power domain */
77 static struct powerdomain abe_44xx_pwrdm = {
78  .name = "abe_pwrdm",
79  .voltdm = { .name = "iva" },
80  .prcm_offs = OMAP4430_PRM_ABE_INST,
81  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
94 };
95 
96 /* dss_44xx_pwrdm: Display subsystem power domain */
97 static struct powerdomain dss_44xx_pwrdm = {
98  .name = "dss_pwrdm",
99  .voltdm = { .name = "core" },
100  .prcm_offs = OMAP4430_PRM_DSS_INST,
101  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
112 };
113 
114 /* tesla_44xx_pwrdm: Tesla processor power domain */
115 static struct powerdomain tesla_44xx_pwrdm = {
116  .name = "tesla_pwrdm",
117  .voltdm = { .name = "iva" },
118  .prcm_offs = OMAP4430_PRM_TESLA_INST,
119  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
134 };
135 
136 /* wkup_44xx_pwrdm: Wake-up power domain */
137 static struct powerdomain wkup_44xx_pwrdm = {
138  .name = "wkup_pwrdm",
139  .voltdm = { .name = "wakeup" },
140  .prcm_offs = OMAP4430_PRM_WKUP_INST,
141  .prcm_partition = OMAP4430_PRM_PARTITION,
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  .voltdm = { .name = "mpu" },
156  .prcm_offs = OMAP4430_PRCM_MPU_CPU0_INST,
157  .prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
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  .voltdm = { .name = "mpu" },
173  .prcm_offs = OMAP4430_PRCM_MPU_CPU1_INST,
174  .prcm_partition = OMAP4430_PRCM_MPU_PARTITION,
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  .voltdm = { .name = "wakeup" },
190  .prcm_offs = OMAP4430_PRM_EMU_INST,
191  .prcm_partition = OMAP4430_PRM_PARTITION,
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  .voltdm = { .name = "mpu" },
206  .prcm_offs = OMAP4430_PRM_MPU_INST,
207  .prcm_partition = OMAP4430_PRM_PARTITION,
208  .pwrsts = PWRSTS_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  .voltdm = { .name = "iva" },
227  .prcm_offs = OMAP4430_PRM_IVAHD_INST,
228  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
245 };
246 
247 /* cam_44xx_pwrdm: Camera subsystem power domain */
248 static struct powerdomain cam_44xx_pwrdm = {
249  .name = "cam_pwrdm",
250  .voltdm = { .name = "core" },
251  .prcm_offs = OMAP4430_PRM_CAM_INST,
252  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
262 };
263 
264 /* l3init_44xx_pwrdm: L3 initators pheripherals power domain */
265 static struct powerdomain l3init_44xx_pwrdm = {
266  .name = "l3init_pwrdm",
267  .voltdm = { .name = "core" },
268  .prcm_offs = OMAP4430_PRM_L3INIT_INST,
269  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
280 };
281 
282 /* l4per_44xx_pwrdm: Target peripherals power domain */
283 static struct powerdomain l4per_44xx_pwrdm = {
284  .name = "l4per_pwrdm",
285  .voltdm = { .name = "core" },
286  .prcm_offs = OMAP4430_PRM_L4PER_INST,
287  .prcm_partition = OMAP4430_PRM_PARTITION,
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  },
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  .voltdm = { .name = "core" },
309  .prcm_offs = OMAP4430_PRM_ALWAYS_ON_INST,
310  .prcm_partition = OMAP4430_PRM_PARTITION,
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  .voltdm = { .name = "core" },
318  .prcm_offs = OMAP4430_PRM_CEFUSE_INST,
319  .prcm_partition = OMAP4430_PRM_PARTITION,
320  .pwrsts = PWRSTS_OFF_ON,
322 };
323 
324 /*
325  * The following power domains are not under SW control
326  *
327  * always_on_iva
328  * always_on_mpu
329  * stdefuse
330  */
331 
332 /* As powerdomains are added or removed above, this list must also be changed */
333 static struct powerdomain *powerdomains_omap44xx[] __initdata = {
334  &core_44xx_pwrdm,
335  &gfx_44xx_pwrdm,
336  &abe_44xx_pwrdm,
337  &dss_44xx_pwrdm,
338  &tesla_44xx_pwrdm,
339  &wkup_44xx_pwrdm,
340  &cpu0_44xx_pwrdm,
341  &cpu1_44xx_pwrdm,
342  &emu_44xx_pwrdm,
343  &mpu_44xx_pwrdm,
344  &ivahd_44xx_pwrdm,
345  &cam_44xx_pwrdm,
346  &l3init_44xx_pwrdm,
347  &l4per_44xx_pwrdm,
348  &always_on_core_44xx_pwrdm,
349  &cefuse_44xx_pwrdm,
350  NULL
351 };
352 
354 {
356  pwrdm_register_pwrdms(powerdomains_omap44xx);
358 }