1ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley/*
298fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsley * OMAP3 powerdomain definitions
3ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley *
48179488a36985d4929cf89be5d9171145a769511Paul Walmsley * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc.
54cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley * Copyright (C) 2007-2011 Nokia Corporation
6ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley *
76e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley * Paul Walmsley, Jouni Högander
8ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley *
9ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * This program is free software; you can redistribute it and/or modify
10ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * it under the terms of the GNU General Public License version 2 as
11ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * published by the Free Software Foundation.
12ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley */
13ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
146e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley#include <linux/kernel.h>
156e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley#include <linux/init.h>
16d9a5f4dd437ceb007e1f118e90ba5587a5e04d20Tony Lindgren#include <linux/bug.h>
17ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
188179488a36985d4929cf89be5d9171145a769511Paul Walmsley#include <plat/cpu.h>
198179488a36985d4929cf89be5d9171145a769511Paul Walmsley
2072e06d087204f3bc9acf281717b90ebf0b9731f7Paul Walmsley#include "powerdomain.h"
216e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley#include "powerdomains2xxx_3xxx_data.h"
22ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
23ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley#include "prcm-common.h"
2459fb659b065f52fcc2deed293cfbfc58f890376cPaul Walmsley#include "prm2xxx_3xxx.h"
25ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley#include "prm-regbits-34xx.h"
2659fb659b065f52fcc2deed293cfbfc58f890376cPaul Walmsley#include "cm2xxx_3xxx.h"
27ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley#include "cm-regbits-34xx.h"
28ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
29ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley/*
30ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * 34XX-specific powerdomains, dependencies
31ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley */
32ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
33ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley/*
34ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley * Powerdomains
35ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley */
36ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
37ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain iva2_pwrdm = {
38ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "iva2_pwrdm",
39ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = OMAP3430_IVA2_MOD,
40ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
41ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_logic_ret = PWRSTS_OFF_RET,
42ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 4,
43ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
44ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[0] = PWRSTS_OFF_RET,
45ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[1] = PWRSTS_OFF_RET,
46ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[2] = PWRSTS_OFF_RET,
47ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[3] = PWRSTS_OFF_RET,
48ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
49ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
504cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_ON,
514cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[1] = PWRSTS_ON,
52ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[2] = PWRSTS_OFF_ON,
534cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[3] = PWRSTS_ON,
54ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
55da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "mpu_iva" },
56ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
57ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
5898fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsleystatic struct powerdomain mpu_3xxx_pwrdm = {
59ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "mpu_pwrdm",
60ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = MPU_MOD,
61ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
62ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_logic_ret = PWRSTS_OFF_RET,
633863c74b512c1afd3ce6b2f81d8dea9f1d860968Thara Gopinath	.flags		  = PWRDM_HAS_MPU_QUIRK,
64ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 1,
65ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
66ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[0] = PWRSTS_OFF_RET,
67ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
68ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
69ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[0] = PWRSTS_OFF_ON,
70ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
71da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "mpu_iva" },
72ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
73ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
7458dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar/*
7558dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar * The USBTLL Save-and-Restore mechanism is broken on
7625985edcedea6396277003854657b5f3cb31a628Lucas De Marchi * 3430s up to ES3.0 and 3630ES1.0. Hence this feature
7758dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar * needs to be disabled on these chips.
7858dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar * Refer: 3430 errata ID i459 and 3630 errata ID i579
79447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet *
80447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet * Note: setting the SAR flag could help for errata ID i478
81447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet *  which applies to 3430 <= ES3.1, but since the SAR feature
82447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet *  is broken, do not use it.
8358dcfb3a0f5eb0a882f7b696d4d2dc49b709ce5cAnand Gadiyar */
8498fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsleystatic struct powerdomain core_3xxx_pre_es3_1_pwrdm = {
85ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "core_pwrdm",
86ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = CORE_MOD,
877eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
884133a44e28cb65c380903ca69806eec039401f46Thara Gopinath	.pwrsts_logic_ret = PWRSTS_OFF_RET,
897eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	.banks		  = 2,
907eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	.pwrsts_mem_ret	  = {
917eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley		[0] = PWRSTS_OFF_RET,	 /* MEM1RETSTATE */
927eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley		[1] = PWRSTS_OFF_RET,	 /* MEM2RETSTATE */
937eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	},
947eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	.pwrsts_mem_on	  = {
957eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley		[0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
967eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley		[1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
977eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	},
98da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
997eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley};
1007eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley
10198fa3d8aeabf7a039cc920a9c2ffebc6b4648e2bPaul Walmsleystatic struct powerdomain core_3xxx_es3_1_pwrdm = {
1027eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	.name		  = "core_pwrdm",
1037eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	.prcm_offs	  = CORE_MOD,
104ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
1054133a44e28cb65c380903ca69806eec039401f46Thara Gopinath	.pwrsts_logic_ret = PWRSTS_OFF_RET,
106447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet	/*
107447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet	 * Setting the SAR flag for errata ID i478 which applies
108447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet	 *  to 3430 <= ES3.1
109447b8da5d78ac8f2815a7824c0eb4ad66ba3e11eJean Pihet	 */
1107eb1afc9765d07c9036b1ad9e7c03e5bd1a58a2bPaul Walmsley	.flags		  = PWRDM_HAS_HDWR_SAR, /* for USBTLL only */
111ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 2,
112ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
113ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[0] = PWRSTS_OFF_RET,	 /* MEM1RETSTATE */
114ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[1] = PWRSTS_OFF_RET,	 /* MEM2RETSTATE */
115ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
116ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
117ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
118ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley		[1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
119ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
120da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
121ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
122ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
123ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain dss_pwrdm = {
124ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "dss_pwrdm",
125ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = OMAP3430_DSS_MOD,
126ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
1274cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley	.pwrsts_logic_ret = PWRSTS_RET,
128ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 1,
129ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
1304cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_RET, /* MEMRETSTATE */
131ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
132ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
1334cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_ON,  /* MEMONSTATE */
134ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
135da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
136ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
137ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
138be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley/*
139be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley * Although the 34XX TRM Rev K Table 4-371 notes that retention is a
140be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley * possible SGX powerstate, the SGX device itself does not support
141be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley * retention.
142be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley */
143ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain sgx_pwrdm = {
144ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "sgx_pwrdm",
145ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = OMAP3430ES2_SGX_MOD,
146ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	/* XXX This is accurate for 3430 SGX, but what about GFX? */
147be48ea74d49408c5c4f999c730d35eaf0034f273Paul Walmsley	.pwrsts		  = PWRSTS_OFF_ON,
1484cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley	.pwrsts_logic_ret = PWRSTS_RET,
149ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 1,
150ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
1514cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_RET, /* MEMRETSTATE */
152ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
153ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
1544cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_ON,  /* MEMONSTATE */
155ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
156da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
157ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
158ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
159ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain cam_pwrdm = {
160ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "cam_pwrdm",
161ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = OMAP3430_CAM_MOD,
162ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
1634cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley	.pwrsts_logic_ret = PWRSTS_RET,
164ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 1,
165ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
1664cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_RET, /* MEMRETSTATE */
167ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
168ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
1694cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_ON,  /* MEMONSTATE */
170ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
171da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
172ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
173ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
174ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain per_pwrdm = {
175ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "per_pwrdm",
176ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = OMAP3430_PER_MOD,
177ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
178ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_logic_ret = PWRSTS_OFF_RET,
179ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 1,
180ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
1814cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_RET, /* MEMRETSTATE */
182ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
183ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
1844cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_ON,  /* MEMONSTATE */
185ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
186da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
187ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
188ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
189ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain emu_pwrdm = {
190ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		= "emu_pwrdm",
191ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	= OMAP3430_EMU_MOD,
192da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
193ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
194ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
195ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain neon_pwrdm = {
196ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "neon_pwrdm",
197ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = OMAP3430_NEON_MOD,
198ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
1994cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley	.pwrsts_logic_ret = PWRSTS_RET,
200da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "mpu_iva" },
201ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
202ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
203ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsleystatic struct powerdomain usbhost_pwrdm = {
204ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.name		  = "usbhost_pwrdm",
205ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.prcm_offs	  = OMAP3430ES2_USBHOST_MOD,
206ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts		  = PWRSTS_OFF_RET_ON,
2074cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley	.pwrsts_logic_ret = PWRSTS_RET,
208867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi	/*
209867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi	 * REVISIT: Enabling usb host save and restore mechanism seems to
210867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi	 * leave the usb host domain permanently in ACTIVE mode after
211867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi	 * changing the usb host power domain state from OFF to active once.
212867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi	 * Disabling for now.
213867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi	 */
214867d320b6c30d2478358eafeca0e1a6c60cf06c3Kalle Jokiniemi	/*.flags	  = PWRDM_HAS_HDWR_SAR,*/ /* for USBHOST ctrlr only */
215ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.banks		  = 1,
216ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_ret	  = {
2174cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_RET, /* MEMRETSTATE */
218ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
219ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	.pwrsts_mem_on	  = {
2204cb49fec12e219ec174e04157f71c00f63eb4ce4Paul Walmsley		[0] = PWRSTS_ON,  /* MEMONSTATE */
221ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley	},
222da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
223ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley};
224ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
22546e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll1_pwrdm = {
22646e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.name		= "dpll1_pwrdm",
22746e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.prcm_offs	= MPU_MOD,
228da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "mpu_iva" },
22946e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley};
23046e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley
23146e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll2_pwrdm = {
23246e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.name		= "dpll2_pwrdm",
23346e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.prcm_offs	= OMAP3430_IVA2_MOD,
234da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "mpu_iva" },
23546e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley};
23646e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley
23746e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll3_pwrdm = {
23846e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.name		= "dpll3_pwrdm",
23946e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.prcm_offs	= PLL_MOD,
240da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
24146e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley};
24246e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley
24346e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll4_pwrdm = {
24446e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.name		= "dpll4_pwrdm",
24546e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.prcm_offs	= PLL_MOD,
246da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
24746e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley};
24846e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley
24946e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsleystatic struct powerdomain dpll5_pwrdm = {
25046e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.name		= "dpll5_pwrdm",
25146e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley	.prcm_offs	= PLL_MOD,
252da03ce65b5431245b9cd20db3edaaa6b9f5c8dc1Kevin Hilman	.voltdm           = { .name = "core" },
25346e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley};
25446e0ccf8ae32e53dc34a274977e2c6256b2deddcPaul Walmsley
2556e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley/* As powerdomains are added or removed above, this list must also be changed */
2568179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430_common[] __initdata = {
2576e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&wkup_omap2_pwrdm,
2586e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&iva2_pwrdm,
2596e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&mpu_3xxx_pwrdm,
2606e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&neon_pwrdm,
2616e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&cam_pwrdm,
2626e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&dss_pwrdm,
2636e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&per_pwrdm,
2646e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&emu_pwrdm,
2656e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&dpll1_pwrdm,
2666e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&dpll2_pwrdm,
2676e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&dpll3_pwrdm,
2686e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&dpll4_pwrdm,
2698179488a36985d4929cf89be5d9171145a769511Paul Walmsley	NULL
2708179488a36985d4929cf89be5d9171145a769511Paul Walmsley};
2718179488a36985d4929cf89be5d9171145a769511Paul Walmsley
2728179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430es1[] __initdata = {
2738179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&gfx_omap2_pwrdm,
2748179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&core_3xxx_pre_es3_1_pwrdm,
2758179488a36985d4929cf89be5d9171145a769511Paul Walmsley	NULL
2768179488a36985d4929cf89be5d9171145a769511Paul Walmsley};
2778179488a36985d4929cf89be5d9171145a769511Paul Walmsley
2788179488a36985d4929cf89be5d9171145a769511Paul Walmsley/* also includes 3630ES1.0 */
2798179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430es2_es3_0[] __initdata = {
2808179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&core_3xxx_pre_es3_1_pwrdm,
2818179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&sgx_pwrdm,
2828179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&usbhost_pwrdm,
2836e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	&dpll5_pwrdm,
2846e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley	NULL
2856e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley};
286ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
2878179488a36985d4929cf89be5d9171145a769511Paul Walmsley/* also includes 3630ES1.1+ */
2888179488a36985d4929cf89be5d9171145a769511Paul Walmsleystatic struct powerdomain *powerdomains_omap3430es3_1plus[] __initdata = {
2898179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&core_3xxx_es3_1_pwrdm,
2908179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&sgx_pwrdm,
2918179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&usbhost_pwrdm,
2928179488a36985d4929cf89be5d9171145a769511Paul Walmsley	&dpll5_pwrdm,
2938179488a36985d4929cf89be5d9171145a769511Paul Walmsley	NULL
2948179488a36985d4929cf89be5d9171145a769511Paul Walmsley};
295ecb24aa129c6d4b2152571f856320aa7dea41676Paul Walmsley
2966e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsleyvoid __init omap3xxx_powerdomains_init(void)
2976e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley{
2988179488a36985d4929cf89be5d9171145a769511Paul Walmsley	unsigned int rev;
2998179488a36985d4929cf89be5d9171145a769511Paul Walmsley
3008179488a36985d4929cf89be5d9171145a769511Paul Walmsley	if (!cpu_is_omap34xx())
3018179488a36985d4929cf89be5d9171145a769511Paul Walmsley		return;
3028179488a36985d4929cf89be5d9171145a769511Paul Walmsley
303129c65ee66a97fbf663f2f5fce26aacdc7348736Paul Walmsley	pwrdm_register_platform_funcs(&omap3_pwrdm_operations);
3048179488a36985d4929cf89be5d9171145a769511Paul Walmsley	pwrdm_register_pwrdms(powerdomains_omap3430_common);
3058179488a36985d4929cf89be5d9171145a769511Paul Walmsley
3068179488a36985d4929cf89be5d9171145a769511Paul Walmsley	rev = omap_rev();
3078179488a36985d4929cf89be5d9171145a769511Paul Walmsley
3088179488a36985d4929cf89be5d9171145a769511Paul Walmsley	if (rev == OMAP3430_REV_ES1_0)
3098179488a36985d4929cf89be5d9171145a769511Paul Walmsley		pwrdm_register_pwrdms(powerdomains_omap3430es1);
3108179488a36985d4929cf89be5d9171145a769511Paul Walmsley	else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 ||
3118179488a36985d4929cf89be5d9171145a769511Paul Walmsley		 rev == OMAP3430_REV_ES3_0 || rev == OMAP3630_REV_ES1_0)
3128179488a36985d4929cf89be5d9171145a769511Paul Walmsley		pwrdm_register_pwrdms(powerdomains_omap3430es2_es3_0);
3138179488a36985d4929cf89be5d9171145a769511Paul Walmsley	else if (rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2 ||
3148179488a36985d4929cf89be5d9171145a769511Paul Walmsley		 rev == OMAP3517_REV_ES1_0 || rev == OMAP3517_REV_ES1_1 ||
3158179488a36985d4929cf89be5d9171145a769511Paul Walmsley		 rev == OMAP3630_REV_ES1_1 || rev == OMAP3630_REV_ES1_2)
3168179488a36985d4929cf89be5d9171145a769511Paul Walmsley		pwrdm_register_pwrdms(powerdomains_omap3430es3_1plus);
3178179488a36985d4929cf89be5d9171145a769511Paul Walmsley	else
3188179488a36985d4929cf89be5d9171145a769511Paul Walmsley		WARN(1, "OMAP3 powerdomain init: unknown chip type\n");
3198179488a36985d4929cf89be5d9171145a769511Paul Walmsley
320129c65ee66a97fbf663f2f5fce26aacdc7348736Paul Walmsley	pwrdm_complete_init();
3216e01478ae8a4322c9a2b2d6efed50196265ed5f2Paul Walmsley}
322