16e01478aSPaul Walmsley /*
26e01478aSPaul Walmsley  * OMAP4 Power domains framework
36e01478aSPaul Walmsley  *
49a2a3603SBenoit Cousson  * Copyright (C) 2009-2011 Texas Instruments, Inc.
54cb49fecSPaul Walmsley  * Copyright (C) 2009-2011 Nokia Corporation
66e01478aSPaul Walmsley  *
76e01478aSPaul Walmsley  * Abhijit Pagare (abhijitpagare@ti.com)
86e01478aSPaul Walmsley  * Benoit Cousson (b-cousson@ti.com)
96e01478aSPaul Walmsley  * Paul Walmsley (paul@pwsan.com)
106e01478aSPaul Walmsley  *
116e01478aSPaul Walmsley  * This file is automatically generated from the OMAP hardware databases.
126e01478aSPaul Walmsley  * We respectfully ask that any modifications to this file be coordinated
136e01478aSPaul Walmsley  * with the public linux-omap@vger.kernel.org mailing list and the
146e01478aSPaul Walmsley  * authors above to ensure that the autogeneration scripts are kept
156e01478aSPaul Walmsley  * up-to-date with the file contents.
166e01478aSPaul Walmsley  *
176e01478aSPaul Walmsley  * This program is free software; you can redistribute it and/or modify
186e01478aSPaul Walmsley  * it under the terms of the GNU General Public License version 2 as
196e01478aSPaul Walmsley  * published by the Free Software Foundation.
206e01478aSPaul Walmsley  */
216e01478aSPaul Walmsley 
226e01478aSPaul Walmsley #include <linux/kernel.h>
236e01478aSPaul Walmsley #include <linux/init.h>
246e01478aSPaul Walmsley 
2572e06d08SPaul Walmsley #include "powerdomain.h"
266e01478aSPaul Walmsley 
276e01478aSPaul Walmsley #include "prcm-common.h"
28a64bb9cdSPaul Walmsley #include "prcm44xx.h"
296e01478aSPaul Walmsley #include "prm-regbits-44xx.h"
30d198b514SPaul Walmsley #include "prm44xx.h"
31d198b514SPaul Walmsley #include "prcm_mpu44xx.h"
326e01478aSPaul Walmsley 
336e01478aSPaul Walmsley /* core_44xx_pwrdm: CORE power domain */
346e01478aSPaul Walmsley static struct powerdomain core_44xx_pwrdm = {
356e01478aSPaul Walmsley 	.name		  = "core_pwrdm",
36cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_CORE_INST,
37a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
386e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
396e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_RET_ON,
406e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
416e01478aSPaul Walmsley 	.banks		  = 5,
426e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
434cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* core_nret_bank */
449a2a3603SBenoit Cousson 		[1] = PWRSTS_RET,	/* core_ocmram */
454cb49fecSPaul Walmsley 		[2] = PWRSTS_RET,	/* core_other_bank */
466e01478aSPaul Walmsley 		[3] = PWRSTS_OFF_RET,	/* ducati_l2ram */
476e01478aSPaul Walmsley 		[4] = PWRSTS_OFF_RET,	/* ducati_unicache */
486e01478aSPaul Walmsley 	},
496e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
504cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* core_nret_bank */
519a2a3603SBenoit Cousson 		[1] = PWRSTS_ON,	/* core_ocmram */
524cb49fecSPaul Walmsley 		[2] = PWRSTS_ON,	/* core_other_bank */
534cb49fecSPaul Walmsley 		[3] = PWRSTS_ON,	/* ducati_l2ram */
544cb49fecSPaul Walmsley 		[4] = PWRSTS_ON,	/* ducati_unicache */
556e01478aSPaul Walmsley 	},
566e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
576e01478aSPaul Walmsley };
586e01478aSPaul Walmsley 
596e01478aSPaul Walmsley /* gfx_44xx_pwrdm: 3D accelerator power domain */
606e01478aSPaul Walmsley static struct powerdomain gfx_44xx_pwrdm = {
616e01478aSPaul Walmsley 	.name		  = "gfx_pwrdm",
62cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_GFX_INST,
63a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
646e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
656e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_ON,
666e01478aSPaul Walmsley 	.banks		  = 1,
676e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
684cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* gfx_mem */
696e01478aSPaul Walmsley 	},
706e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
714cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* gfx_mem */
726e01478aSPaul Walmsley 	},
736e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
746e01478aSPaul Walmsley };
756e01478aSPaul Walmsley 
766e01478aSPaul Walmsley /* abe_44xx_pwrdm: Audio back end power domain */
776e01478aSPaul Walmsley static struct powerdomain abe_44xx_pwrdm = {
786e01478aSPaul Walmsley 	.name		  = "abe_pwrdm",
79cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_ABE_INST,
80a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
816e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
826e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
833ed4566eSSantosh Shilimkar 	.pwrsts_logic_ret = PWRSTS_OFF,
846e01478aSPaul Walmsley 	.banks		  = 2,
856e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
864cb49fecSPaul Walmsley 		[0] = PWRSTS_RET,	/* aessmem */
874cb49fecSPaul Walmsley 		[1] = PWRSTS_OFF,	/* periphmem */
886e01478aSPaul Walmsley 	},
896e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
904cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* aessmem */
914cb49fecSPaul Walmsley 		[1] = PWRSTS_ON,	/* periphmem */
926e01478aSPaul Walmsley 	},
936e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
946e01478aSPaul Walmsley };
956e01478aSPaul Walmsley 
966e01478aSPaul Walmsley /* dss_44xx_pwrdm: Display subsystem power domain */
976e01478aSPaul Walmsley static struct powerdomain dss_44xx_pwrdm = {
986e01478aSPaul Walmsley 	.name		  = "dss_pwrdm",
99cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_DSS_INST,
100a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
1016e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1026e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
1036e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF,
1046e01478aSPaul Walmsley 	.banks		  = 1,
1056e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
1064cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* dss_mem */
1076e01478aSPaul Walmsley 	},
1086e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
1094cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* dss_mem */
1106e01478aSPaul Walmsley 	},
1116e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
1126e01478aSPaul Walmsley };
1136e01478aSPaul Walmsley 
1146e01478aSPaul Walmsley /* tesla_44xx_pwrdm: Tesla processor power domain */
1156e01478aSPaul Walmsley static struct powerdomain tesla_44xx_pwrdm = {
1166e01478aSPaul Walmsley 	.name		  = "tesla_pwrdm",
117cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_TESLA_INST,
118a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
1196e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1206e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
1216e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
1226e01478aSPaul Walmsley 	.banks		  = 3,
1236e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
1244cb49fecSPaul Walmsley 		[0] = PWRSTS_RET,	/* tesla_edma */
1256e01478aSPaul Walmsley 		[1] = PWRSTS_OFF_RET,	/* tesla_l1 */
1266e01478aSPaul Walmsley 		[2] = PWRSTS_OFF_RET,	/* tesla_l2 */
1276e01478aSPaul Walmsley 	},
1286e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
1294cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* tesla_edma */
1304cb49fecSPaul Walmsley 		[1] = PWRSTS_ON,	/* tesla_l1 */
1314cb49fecSPaul Walmsley 		[2] = PWRSTS_ON,	/* tesla_l2 */
1326e01478aSPaul Walmsley 	},
1336e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
1346e01478aSPaul Walmsley };
1356e01478aSPaul Walmsley 
1366e01478aSPaul Walmsley /* wkup_44xx_pwrdm: Wake-up power domain */
1376e01478aSPaul Walmsley static struct powerdomain wkup_44xx_pwrdm = {
1386e01478aSPaul Walmsley 	.name		  = "wkup_pwrdm",
139cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_WKUP_INST,
140a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
1416e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1426e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_ON,
1436e01478aSPaul Walmsley 	.banks		  = 1,
1446e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
1454cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* wkup_bank */
1466e01478aSPaul Walmsley 	},
1476e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
1484cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* wkup_bank */
1496e01478aSPaul Walmsley 	},
1506e01478aSPaul Walmsley };
1516e01478aSPaul Walmsley 
1526e01478aSPaul Walmsley /* cpu0_44xx_pwrdm: MPU0 processor and Neon coprocessor power domain */
1536e01478aSPaul Walmsley static struct powerdomain cpu0_44xx_pwrdm = {
1546e01478aSPaul Walmsley 	.name		  = "cpu0_pwrdm",
155cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRCM_MPU_CPU0_INST,
156a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRCM_MPU_PARTITION,
1576e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1586e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
1596e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
1606e01478aSPaul Walmsley 	.banks		  = 1,
1616e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
1626e01478aSPaul Walmsley 		[0] = PWRSTS_OFF_RET,	/* cpu0_l1 */
1636e01478aSPaul Walmsley 	},
1646e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
1654cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* cpu0_l1 */
1666e01478aSPaul Walmsley 	},
1676e01478aSPaul Walmsley };
1686e01478aSPaul Walmsley 
1696e01478aSPaul Walmsley /* cpu1_44xx_pwrdm: MPU1 processor and Neon coprocessor power domain */
1706e01478aSPaul Walmsley static struct powerdomain cpu1_44xx_pwrdm = {
1716e01478aSPaul Walmsley 	.name		  = "cpu1_pwrdm",
172cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRCM_MPU_CPU1_INST,
173a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRCM_MPU_PARTITION,
1746e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1756e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
1766e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
1776e01478aSPaul Walmsley 	.banks		  = 1,
1786e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
1796e01478aSPaul Walmsley 		[0] = PWRSTS_OFF_RET,	/* cpu1_l1 */
1806e01478aSPaul Walmsley 	},
1816e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
1824cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* cpu1_l1 */
1836e01478aSPaul Walmsley 	},
1846e01478aSPaul Walmsley };
1856e01478aSPaul Walmsley 
1866e01478aSPaul Walmsley /* emu_44xx_pwrdm: Emulation power domain */
1876e01478aSPaul Walmsley static struct powerdomain emu_44xx_pwrdm = {
1886e01478aSPaul Walmsley 	.name		  = "emu_pwrdm",
189cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_EMU_INST,
190a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
1916e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
1926e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_ON,
1936e01478aSPaul Walmsley 	.banks		  = 1,
1946e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
1954cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* emu_bank */
1966e01478aSPaul Walmsley 	},
1976e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
1984cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* emu_bank */
1996e01478aSPaul Walmsley 	},
2006e01478aSPaul Walmsley };
2016e01478aSPaul Walmsley 
2026e01478aSPaul Walmsley /* mpu_44xx_pwrdm: Modena processor and the Neon coprocessor power domain */
2036e01478aSPaul Walmsley static struct powerdomain mpu_44xx_pwrdm = {
2046e01478aSPaul Walmsley 	.name		  = "mpu_pwrdm",
205cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_MPU_INST,
206a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
2076e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
208a57341f7SSantosh Shilimkar 	.pwrsts		  = PWRSTS_RET_ON,
2096e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
2106e01478aSPaul Walmsley 	.banks		  = 3,
2116e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
2126e01478aSPaul Walmsley 		[0] = PWRSTS_OFF_RET,	/* mpu_l1 */
2136e01478aSPaul Walmsley 		[1] = PWRSTS_OFF_RET,	/* mpu_l2 */
2144cb49fecSPaul Walmsley 		[2] = PWRSTS_RET,	/* mpu_ram */
2156e01478aSPaul Walmsley 	},
2166e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
2174cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* mpu_l1 */
2184cb49fecSPaul Walmsley 		[1] = PWRSTS_ON,	/* mpu_l2 */
2194cb49fecSPaul Walmsley 		[2] = PWRSTS_ON,	/* mpu_ram */
2206e01478aSPaul Walmsley 	},
2216e01478aSPaul Walmsley };
2226e01478aSPaul Walmsley 
2236e01478aSPaul Walmsley /* ivahd_44xx_pwrdm: IVA-HD power domain */
2246e01478aSPaul Walmsley static struct powerdomain ivahd_44xx_pwrdm = {
2256e01478aSPaul Walmsley 	.name		  = "ivahd_pwrdm",
226cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_IVAHD_INST,
227a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
2286e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2296e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
2303ed4566eSSantosh Shilimkar 	.pwrsts_logic_ret = PWRSTS_OFF,
2316e01478aSPaul Walmsley 	.banks		  = 4,
2326e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
2334cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* hwa_mem */
2346e01478aSPaul Walmsley 		[1] = PWRSTS_OFF_RET,	/* sl2_mem */
2356e01478aSPaul Walmsley 		[2] = PWRSTS_OFF_RET,	/* tcm1_mem */
2366e01478aSPaul Walmsley 		[3] = PWRSTS_OFF_RET,	/* tcm2_mem */
2376e01478aSPaul Walmsley 	},
2386e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
2394cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* hwa_mem */
2404cb49fecSPaul Walmsley 		[1] = PWRSTS_ON,	/* sl2_mem */
2414cb49fecSPaul Walmsley 		[2] = PWRSTS_ON,	/* tcm1_mem */
2424cb49fecSPaul Walmsley 		[3] = PWRSTS_ON,	/* tcm2_mem */
2436e01478aSPaul Walmsley 	},
2446e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
2456e01478aSPaul Walmsley };
2466e01478aSPaul Walmsley 
2476e01478aSPaul Walmsley /* cam_44xx_pwrdm: Camera subsystem power domain */
2486e01478aSPaul Walmsley static struct powerdomain cam_44xx_pwrdm = {
2496e01478aSPaul Walmsley 	.name		  = "cam_pwrdm",
250cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_CAM_INST,
251a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
2526e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
2536e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_ON,
2546e01478aSPaul Walmsley 	.banks		  = 1,
2556e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
2564cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* cam_mem */
2576e01478aSPaul Walmsley 	},
2586e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
2594cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* cam_mem */
2606e01478aSPaul Walmsley 	},
2616e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
2626e01478aSPaul Walmsley };
2636e01478aSPaul Walmsley 
2646e01478aSPaul Walmsley /* l3init_44xx_pwrdm: L3 initators pheripherals power domain  */
2656e01478aSPaul Walmsley static struct powerdomain l3init_44xx_pwrdm = {
2666e01478aSPaul Walmsley 	.name		  = "l3init_pwrdm",
267cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_L3INIT_INST,
268a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
2696e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
27080f09365SSantosh Shilimkar 	.pwrsts		  = PWRSTS_RET_ON,
2716e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
2726e01478aSPaul Walmsley 	.banks		  = 1,
2736e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
2744cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* l3init_bank1 */
2756e01478aSPaul Walmsley 	},
2766e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
2774cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* l3init_bank1 */
2786e01478aSPaul Walmsley 	},
2796e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
2806e01478aSPaul Walmsley };
2816e01478aSPaul Walmsley 
2826e01478aSPaul Walmsley /* l4per_44xx_pwrdm: Target peripherals power domain */
2836e01478aSPaul Walmsley static struct powerdomain l4per_44xx_pwrdm = {
2846e01478aSPaul Walmsley 	.name		  = "l4per_pwrdm",
285cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_L4PER_INST,
286a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
2876e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
288474e7aebSRajendra Nayak 	.pwrsts		  = PWRSTS_RET_ON,
2896e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
2906e01478aSPaul Walmsley 	.banks		  = 2,
2916e01478aSPaul Walmsley 	.pwrsts_mem_ret	= {
2924cb49fecSPaul Walmsley 		[0] = PWRSTS_OFF,	/* nonretained_bank */
2934cb49fecSPaul Walmsley 		[1] = PWRSTS_RET,	/* retained_bank */
2946e01478aSPaul Walmsley 	},
2956e01478aSPaul Walmsley 	.pwrsts_mem_on	= {
2964cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,	/* nonretained_bank */
2974cb49fecSPaul Walmsley 		[1] = PWRSTS_ON,	/* retained_bank */
2986e01478aSPaul Walmsley 	},
2996e01478aSPaul Walmsley 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
3006e01478aSPaul Walmsley };
3016e01478aSPaul Walmsley 
3026e01478aSPaul Walmsley /*
3036e01478aSPaul Walmsley  * always_on_core_44xx_pwrdm: Always ON logic that sits in VDD_CORE voltage
3046e01478aSPaul Walmsley  * domain
3056e01478aSPaul Walmsley  */
3066e01478aSPaul Walmsley static struct powerdomain always_on_core_44xx_pwrdm = {
3076e01478aSPaul Walmsley 	.name		  = "always_on_core_pwrdm",
308cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_ALWAYS_ON_INST,
309a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
3106e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3116e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_ON,
3126e01478aSPaul Walmsley };
3136e01478aSPaul Walmsley 
3146e01478aSPaul Walmsley /* cefuse_44xx_pwrdm: Customer efuse controller power domain */
3156e01478aSPaul Walmsley static struct powerdomain cefuse_44xx_pwrdm = {
3166e01478aSPaul Walmsley 	.name		  = "cefuse_pwrdm",
317cdb54c44SPaul Walmsley 	.prcm_offs	  = OMAP4430_PRM_CEFUSE_INST,
318a64bb9cdSPaul Walmsley 	.prcm_partition	  = OMAP4430_PRM_PARTITION,
3196e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
3206e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_ON,
3219a2a3603SBenoit Cousson 	.flags		  = PWRDM_HAS_LOWPOWERSTATECHANGE,
3226e01478aSPaul Walmsley };
3236e01478aSPaul Walmsley 
3246e01478aSPaul Walmsley /*
3256e01478aSPaul Walmsley  * The following power domains are not under SW control
3266e01478aSPaul Walmsley  *
3276e01478aSPaul Walmsley  * always_on_iva
3286e01478aSPaul Walmsley  * always_on_mpu
3296e01478aSPaul Walmsley  * stdefuse
3306e01478aSPaul Walmsley  */
3316e01478aSPaul Walmsley 
3326e01478aSPaul Walmsley /* As powerdomains are added or removed above, this list must also be changed */
3336e01478aSPaul Walmsley static struct powerdomain *powerdomains_omap44xx[] __initdata = {
3346e01478aSPaul Walmsley 	&core_44xx_pwrdm,
3356e01478aSPaul Walmsley 	&gfx_44xx_pwrdm,
3366e01478aSPaul Walmsley 	&abe_44xx_pwrdm,
3376e01478aSPaul Walmsley 	&dss_44xx_pwrdm,
3386e01478aSPaul Walmsley 	&tesla_44xx_pwrdm,
3396e01478aSPaul Walmsley 	&wkup_44xx_pwrdm,
3406e01478aSPaul Walmsley 	&cpu0_44xx_pwrdm,
3416e01478aSPaul Walmsley 	&cpu1_44xx_pwrdm,
3426e01478aSPaul Walmsley 	&emu_44xx_pwrdm,
3436e01478aSPaul Walmsley 	&mpu_44xx_pwrdm,
3446e01478aSPaul Walmsley 	&ivahd_44xx_pwrdm,
3456e01478aSPaul Walmsley 	&cam_44xx_pwrdm,
3466e01478aSPaul Walmsley 	&l3init_44xx_pwrdm,
3476e01478aSPaul Walmsley 	&l4per_44xx_pwrdm,
3486e01478aSPaul Walmsley 	&always_on_core_44xx_pwrdm,
3496e01478aSPaul Walmsley 	&cefuse_44xx_pwrdm,
3506e01478aSPaul Walmsley 	NULL
3516e01478aSPaul Walmsley };
3526e01478aSPaul Walmsley 
3536e01478aSPaul Walmsley void __init omap44xx_powerdomains_init(void)
3546e01478aSPaul Walmsley {
355129c65eeSPaul Walmsley 	pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
356129c65eeSPaul Walmsley 	pwrdm_register_pwrdms(powerdomains_omap44xx);
357129c65eeSPaul Walmsley 	pwrdm_complete_init();
3586e01478aSPaul Walmsley }
359