Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * OMAP54XX Power domains framework
  4 *
  5 * Copyright (C) 2013 Texas Instruments, Inc.
  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
 18#include <linux/kernel.h>
 19#include <linux/init.h>
 20
 21#include "powerdomain.h"
 22
 23#include "prcm-common.h"
 24#include "prcm44xx.h"
 25#include "prm54xx.h"
 26#include "prcm_mpu54xx.h"
 27
 28/* core_54xx_pwrdm: CORE power domain */
 29static struct powerdomain core_54xx_pwrdm = {
 30	.name		  = "core_pwrdm",
 31	.voltdm		  = { .name = "core" },
 32	.prcm_offs	  = OMAP54XX_PRM_CORE_INST,
 33	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
 34	.pwrsts		  = PWRSTS_RET_ON,
 35	.pwrsts_logic_ret = PWRSTS_RET,
 36	.banks		  = 5,
 37	.pwrsts_mem_ret	= {
 38		[0] = PWRSTS_OFF_RET,	/* core_nret_bank */
 39		[1] = PWRSTS_OFF_RET,	/* core_ocmram */
 40		[2] = PWRSTS_OFF_RET,	/* core_other_bank */
 41		[3] = PWRSTS_OFF_RET,	/* ipu_l2ram */
 42		[4] = PWRSTS_OFF_RET,	/* ipu_unicache */
 43	},
 44	.pwrsts_mem_on	= {
 45		[0] = PWRSTS_OFF_RET,	/* core_nret_bank */
 46		[1] = PWRSTS_OFF_RET,	/* core_ocmram */
 47		[2] = PWRSTS_OFF_RET,	/* core_other_bank */
 48		[3] = PWRSTS_OFF_RET,	/* ipu_l2ram */
 49		[4] = PWRSTS_OFF_RET,	/* ipu_unicache */
 50	},
 51	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
 52};
 53
 54/* abe_54xx_pwrdm: Audio back end power domain */
 55static struct powerdomain abe_54xx_pwrdm = {
 56	.name		  = "abe_pwrdm",
 57	.voltdm		  = { .name = "core" },
 58	.prcm_offs	  = OMAP54XX_PRM_ABE_INST,
 59	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
 60	.pwrsts		  = PWRSTS_OFF_RET_ON,
 61	.pwrsts_logic_ret = PWRSTS_OFF,
 62	.banks		  = 2,
 63	.pwrsts_mem_ret	= {
 64		[0] = PWRSTS_OFF_RET,	/* aessmem */
 65		[1] = PWRSTS_OFF_RET,	/* periphmem */
 66	},
 67	.pwrsts_mem_on	= {
 68		[0] = PWRSTS_OFF_RET,	/* aessmem */
 69		[1] = PWRSTS_OFF_RET,	/* periphmem */
 70	},
 71	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
 72};
 73
 74/* coreaon_54xx_pwrdm: Always ON logic that sits in VDD_CORE voltage domain */
 75static struct powerdomain coreaon_54xx_pwrdm = {
 76	.name		  = "coreaon_pwrdm",
 77	.voltdm		  = { .name = "core" },
 78	.prcm_offs	  = OMAP54XX_PRM_COREAON_INST,
 79	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
 80	.pwrsts		  = PWRSTS_ON,
 81};
 82
 83/* dss_54xx_pwrdm: Display subsystem power domain */
 84static struct powerdomain dss_54xx_pwrdm = {
 85	.name		  = "dss_pwrdm",
 86	.voltdm		  = { .name = "core" },
 87	.prcm_offs	  = OMAP54XX_PRM_DSS_INST,
 88	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
 89	.pwrsts		  = PWRSTS_OFF_RET_ON,
 90	.pwrsts_logic_ret = PWRSTS_OFF,
 91	.banks		  = 1,
 92	.pwrsts_mem_ret	= {
 93		[0] = PWRSTS_OFF_RET,	/* dss_mem */
 94	},
 95	.pwrsts_mem_on	= {
 96		[0] = PWRSTS_OFF_RET,	/* dss_mem */
 97	},
 98	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
 99};
100
101/* cpu0_54xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
102static struct powerdomain cpu0_54xx_pwrdm = {
103	.name		  = "cpu0_pwrdm",
104	.voltdm		  = { .name = "mpu" },
105	.prcm_offs	  = OMAP54XX_PRCM_MPU_PRM_C0_INST,
106	.prcm_partition	  = OMAP54XX_PRCM_MPU_PARTITION,
107	.pwrsts		  = PWRSTS_RET_ON,
108	.pwrsts_logic_ret = PWRSTS_RET,
109	.banks		  = 1,
110	.pwrsts_mem_ret	= {
111		[0] = PWRSTS_OFF_RET,	/* cpu0_l1 */
112	},
113	.pwrsts_mem_on	= {
114		[0] = PWRSTS_ON,	/* cpu0_l1 */
115	},
116};
117
118/* cpu1_54xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
119static struct powerdomain cpu1_54xx_pwrdm = {
120	.name		  = "cpu1_pwrdm",
121	.voltdm		  = { .name = "mpu" },
122	.prcm_offs	  = OMAP54XX_PRCM_MPU_PRM_C1_INST,
123	.prcm_partition	  = OMAP54XX_PRCM_MPU_PARTITION,
124	.pwrsts		  = PWRSTS_RET_ON,
125	.pwrsts_logic_ret = PWRSTS_RET,
126	.banks		  = 1,
127	.pwrsts_mem_ret	= {
128		[0] = PWRSTS_OFF_RET,	/* cpu1_l1 */
129	},
130	.pwrsts_mem_on	= {
131		[0] = PWRSTS_ON,	/* cpu1_l1 */
132	},
133};
134
135/* emu_54xx_pwrdm: Emulation power domain */
136static struct powerdomain emu_54xx_pwrdm = {
137	.name		  = "emu_pwrdm",
138	.voltdm		  = { .name = "wkup" },
139	.prcm_offs	  = OMAP54XX_PRM_EMU_INST,
140	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
141	.pwrsts		  = PWRSTS_OFF_ON,
142	.banks		  = 1,
143	.pwrsts_mem_ret	= {
144		[0] = PWRSTS_OFF_RET,	/* emu_bank */
145	},
146	.pwrsts_mem_on	= {
147		[0] = PWRSTS_OFF_RET,	/* emu_bank */
148	},
149};
150
151/* mpu_54xx_pwrdm: Modena processor and the Neon coprocessor power domain */
152static struct powerdomain mpu_54xx_pwrdm = {
153	.name		  = "mpu_pwrdm",
154	.voltdm		  = { .name = "mpu" },
155	.prcm_offs	  = OMAP54XX_PRM_MPU_INST,
156	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
157	.pwrsts		  = PWRSTS_RET_ON,
158	.pwrsts_logic_ret = PWRSTS_RET,
159	.banks		  = 2,
160	.pwrsts_mem_ret	= {
161		[0] = PWRSTS_OFF_RET,	/* mpu_l2 */
162		[1] = PWRSTS_RET,	/* mpu_ram */
163	},
164	.pwrsts_mem_on	= {
165		[0] = PWRSTS_OFF_RET,	/* mpu_l2 */
166		[1] = PWRSTS_OFF_RET,	/* mpu_ram */
167	},
168};
169
170/* custefuse_54xx_pwrdm: Customer efuse controller power domain */
171static struct powerdomain custefuse_54xx_pwrdm = {
172	.name		  = "custefuse_pwrdm",
173	.voltdm		  = { .name = "core" },
174	.prcm_offs	  = OMAP54XX_PRM_CUSTEFUSE_INST,
175	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
176	.pwrsts		  = PWRSTS_OFF_ON,
177	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
178};
179
180/* dsp_54xx_pwrdm: Tesla processor power domain */
181static struct powerdomain dsp_54xx_pwrdm = {
182	.name		  = "dsp_pwrdm",
183	.voltdm		  = { .name = "mm" },
184	.prcm_offs	  = OMAP54XX_PRM_DSP_INST,
185	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
186	.pwrsts		  = PWRSTS_OFF_RET_ON,
187	.pwrsts_logic_ret = PWRSTS_OFF_RET,
188	.banks		  = 3,
189	.pwrsts_mem_ret	= {
190		[0] = PWRSTS_OFF_RET,	/* dsp_edma */
191		[1] = PWRSTS_OFF_RET,	/* dsp_l1 */
192		[2] = PWRSTS_OFF_RET,	/* dsp_l2 */
193	},
194	.pwrsts_mem_on	= {
195		[0] = PWRSTS_OFF_RET,	/* dsp_edma */
196		[1] = PWRSTS_OFF_RET,	/* dsp_l1 */
197		[2] = PWRSTS_OFF_RET,	/* dsp_l2 */
198	},
199	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
200};
201
202/* cam_54xx_pwrdm: Camera subsystem power domain */
203static struct powerdomain cam_54xx_pwrdm = {
204	.name		  = "cam_pwrdm",
205	.voltdm		  = { .name = "core" },
206	.prcm_offs	  = OMAP54XX_PRM_CAM_INST,
207	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
208	.pwrsts		  = PWRSTS_OFF_ON,
209	.banks		  = 1,
210	.pwrsts_mem_ret	= {
211		[0] = PWRSTS_OFF_RET,	/* cam_mem */
212	},
213	.pwrsts_mem_on	= {
214		[0] = PWRSTS_OFF_RET,	/* cam_mem */
215	},
216	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
217};
218
219/* l3init_54xx_pwrdm: L3 initators pheripherals power domain  */
220static struct powerdomain l3init_54xx_pwrdm = {
221	.name		  = "l3init_pwrdm",
222	.voltdm		  = { .name = "core" },
223	.prcm_offs	  = OMAP54XX_PRM_L3INIT_INST,
224	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
225	.pwrsts		  = PWRSTS_RET_ON,
226	.pwrsts_logic_ret = PWRSTS_OFF_RET,
227	.banks		  = 2,
228	.pwrsts_mem_ret	= {
229		[0] = PWRSTS_OFF_RET,	/* l3init_bank1 */
230		[1] = PWRSTS_OFF_RET,	/* l3init_bank2 */
231	},
232	.pwrsts_mem_on	= {
233		[0] = PWRSTS_OFF_RET,	/* l3init_bank1 */
234		[1] = PWRSTS_OFF_RET,	/* l3init_bank2 */
235	},
236	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
237};
238
239/* gpu_54xx_pwrdm: 3D accelerator power domain */
240static struct powerdomain gpu_54xx_pwrdm = {
241	.name		  = "gpu_pwrdm",
242	.voltdm		  = { .name = "mm" },
243	.prcm_offs	  = OMAP54XX_PRM_GPU_INST,
244	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
245	.pwrsts		  = PWRSTS_OFF_ON,
246	.banks		  = 1,
247	.pwrsts_mem_ret	= {
248		[0] = PWRSTS_OFF_RET,	/* gpu_mem */
249	},
250	.pwrsts_mem_on	= {
251		[0] = PWRSTS_OFF_RET,	/* gpu_mem */
252	},
253	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
254};
255
256/* wkupaon_54xx_pwrdm: Wake-up power domain */
257static struct powerdomain wkupaon_54xx_pwrdm = {
258	.name		  = "wkupaon_pwrdm",
259	.voltdm		  = { .name = "wkup" },
260	.prcm_offs	  = OMAP54XX_PRM_WKUPAON_INST,
261	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
262	.pwrsts		  = PWRSTS_ON,
263	.banks		  = 1,
264	.pwrsts_mem_ret	= {
265	},
266	.pwrsts_mem_on	= {
267		[0] = PWRSTS_ON,	/* wkup_bank */
268	},
269};
270
271/* iva_54xx_pwrdm: IVA-HD power domain */
272static struct powerdomain iva_54xx_pwrdm = {
273	.name		  = "iva_pwrdm",
274	.voltdm		  = { .name = "mm" },
275	.prcm_offs	  = OMAP54XX_PRM_IVA_INST,
276	.prcm_partition	  = OMAP54XX_PRM_PARTITION,
277	.pwrsts		  = PWRSTS_OFF_RET_ON,
278	.pwrsts_logic_ret = PWRSTS_OFF,
279	.banks		  = 4,
280	.pwrsts_mem_ret	= {
281		[0] = PWRSTS_OFF_RET,	/* hwa_mem */
282		[1] = PWRSTS_OFF_RET,	/* sl2_mem */
283		[2] = PWRSTS_OFF_RET,	/* tcm1_mem */
284		[3] = PWRSTS_OFF_RET,	/* tcm2_mem */
285	},
286	.pwrsts_mem_on	= {
287		[0] = PWRSTS_OFF_RET,	/* hwa_mem */
288		[1] = PWRSTS_OFF_RET,	/* sl2_mem */
289		[2] = PWRSTS_OFF_RET,	/* tcm1_mem */
290		[3] = PWRSTS_OFF_RET,	/* tcm2_mem */
291	},
292	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
293};
294
295/*
296 * The following power domains are not under SW control
297 *
298 * mpuaon
299 * mmaon
300 */
301
302/* As powerdomains are added or removed above, this list must also be changed */
303static struct powerdomain *powerdomains_omap54xx[] __initdata = {
304	&core_54xx_pwrdm,
305	&abe_54xx_pwrdm,
306	&coreaon_54xx_pwrdm,
307	&dss_54xx_pwrdm,
308	&cpu0_54xx_pwrdm,
309	&cpu1_54xx_pwrdm,
310	&emu_54xx_pwrdm,
311	&mpu_54xx_pwrdm,
312	&custefuse_54xx_pwrdm,
313	&dsp_54xx_pwrdm,
314	&cam_54xx_pwrdm,
315	&l3init_54xx_pwrdm,
316	&gpu_54xx_pwrdm,
317	&wkupaon_54xx_pwrdm,
318	&iva_54xx_pwrdm,
319	NULL
320};
321
322void __init omap54xx_powerdomains_init(void)
323{
324	pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
325	pwrdm_register_pwrdms(powerdomains_omap54xx);
326	pwrdm_complete_init();
327}