16e01478aSPaul Walmsley /*
26e01478aSPaul Walmsley  * OMAP2XXX powerdomain definitions
36e01478aSPaul Walmsley  *
46e01478aSPaul Walmsley  * Copyright (C) 2007-2008 Texas Instruments, Inc.
56e01478aSPaul Walmsley  * Copyright (C) 2007-2010 Nokia Corporation
66e01478aSPaul Walmsley  *
76e01478aSPaul Walmsley  * Paul Walmsley, Jouni Högander
86e01478aSPaul Walmsley  *
96e01478aSPaul Walmsley  * This program is free software; you can redistribute it and/or modify
106e01478aSPaul Walmsley  * it under the terms of the GNU General Public License version 2 as
116e01478aSPaul Walmsley  * published by the Free Software Foundation.
126e01478aSPaul Walmsley  */
136e01478aSPaul Walmsley 
146e01478aSPaul Walmsley #include <linux/kernel.h>
156e01478aSPaul Walmsley #include <linux/init.h>
166e01478aSPaul Walmsley 
176e01478aSPaul Walmsley #include <plat/powerdomain.h>
186e01478aSPaul Walmsley #include "powerdomains2xxx_3xxx_data.h"
196e01478aSPaul Walmsley #include "powerdomains.h"
206e01478aSPaul Walmsley 
216e01478aSPaul Walmsley #include "prcm-common.h"
226e01478aSPaul Walmsley #include "prm.h"
236e01478aSPaul Walmsley #include "prm-regbits-24xx.h"
246e01478aSPaul Walmsley #include "cm.h"
256e01478aSPaul Walmsley #include "cm-regbits-24xx.h"
266e01478aSPaul Walmsley 
276e01478aSPaul Walmsley /* 24XX powerdomains and dependencies */
286e01478aSPaul Walmsley 
296e01478aSPaul Walmsley /* Powerdomains */
306e01478aSPaul Walmsley 
316e01478aSPaul Walmsley static struct powerdomain dsp_pwrdm = {
326e01478aSPaul Walmsley 	.name		  = "dsp_pwrdm",
336e01478aSPaul Walmsley 	.prcm_offs	  = OMAP24XX_DSP_MOD,
346e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
356e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
366e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRDM_POWER_RET,
376e01478aSPaul Walmsley 	.banks		  = 1,
386e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
396e01478aSPaul Walmsley 		[0] = PWRDM_POWER_RET,
406e01478aSPaul Walmsley 	},
416e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
426e01478aSPaul Walmsley 		[0] = PWRDM_POWER_ON,
436e01478aSPaul Walmsley 	},
446e01478aSPaul Walmsley };
456e01478aSPaul Walmsley 
466e01478aSPaul Walmsley static struct powerdomain mpu_24xx_pwrdm = {
476e01478aSPaul Walmsley 	.name		  = "mpu_pwrdm",
486e01478aSPaul Walmsley 	.prcm_offs	  = MPU_MOD,
496e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
506e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
516e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
526e01478aSPaul Walmsley 	.banks		  = 1,
536e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
546e01478aSPaul Walmsley 		[0] = PWRDM_POWER_RET,
556e01478aSPaul Walmsley 	},
566e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
576e01478aSPaul Walmsley 		[0] = PWRDM_POWER_ON,
586e01478aSPaul Walmsley 	},
596e01478aSPaul Walmsley };
606e01478aSPaul Walmsley 
616e01478aSPaul Walmsley static struct powerdomain core_24xx_pwrdm = {
626e01478aSPaul Walmsley 	.name		  = "core_pwrdm",
636e01478aSPaul Walmsley 	.prcm_offs	  = CORE_MOD,
646e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP24XX),
656e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
666e01478aSPaul Walmsley 	.banks		  = 3,
676e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
686e01478aSPaul Walmsley 		[0] = PWRSTS_OFF_RET,	 /* MEM1RETSTATE */
696e01478aSPaul Walmsley 		[1] = PWRSTS_OFF_RET,	 /* MEM2RETSTATE */
706e01478aSPaul Walmsley 		[2] = PWRSTS_OFF_RET,	 /* MEM3RETSTATE */
716e01478aSPaul Walmsley 	},
726e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
736e01478aSPaul Walmsley 		[0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
746e01478aSPaul Walmsley 		[1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
756e01478aSPaul Walmsley 		[2] = PWRSTS_OFF_RET_ON, /* MEM3ONSTATE */
766e01478aSPaul Walmsley 	},
776e01478aSPaul Walmsley };
786e01478aSPaul Walmsley 
796e01478aSPaul Walmsley 
806e01478aSPaul Walmsley /*
816e01478aSPaul Walmsley  * 2430-specific powerdomains
826e01478aSPaul Walmsley  */
836e01478aSPaul Walmsley 
846e01478aSPaul Walmsley #ifdef CONFIG_ARCH_OMAP2430
856e01478aSPaul Walmsley 
866e01478aSPaul Walmsley /* XXX 2430 KILLDOMAINWKUP bit?  No current users apparently */
876e01478aSPaul Walmsley 
886e01478aSPaul Walmsley static struct powerdomain mdm_pwrdm = {
896e01478aSPaul Walmsley 	.name		  = "mdm_pwrdm",
906e01478aSPaul Walmsley 	.prcm_offs	  = OMAP2430_MDM_MOD,
916e01478aSPaul Walmsley 	.omap_chip	  = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
926e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
936e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRDM_POWER_RET,
946e01478aSPaul Walmsley 	.banks		  = 1,
956e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
966e01478aSPaul Walmsley 		[0] = PWRDM_POWER_RET, /* MEMRETSTATE */
976e01478aSPaul Walmsley 	},
986e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
996e01478aSPaul Walmsley 		[0] = PWRDM_POWER_ON,  /* MEMONSTATE */
1006e01478aSPaul Walmsley 	},
1016e01478aSPaul Walmsley };
1026e01478aSPaul Walmsley 
1036e01478aSPaul Walmsley #endif     /* CONFIG_ARCH_OMAP2430 */
1046e01478aSPaul Walmsley 
1056e01478aSPaul Walmsley /* As powerdomains are added or removed above, this list must also be changed */
1066e01478aSPaul Walmsley static struct powerdomain *powerdomains_omap2xxx[] __initdata = {
1076e01478aSPaul Walmsley 
1086e01478aSPaul Walmsley 	&wkup_omap2_pwrdm,
1096e01478aSPaul Walmsley 	&gfx_omap2_pwrdm,
1106e01478aSPaul Walmsley 
1116e01478aSPaul Walmsley #ifdef CONFIG_ARCH_OMAP2
1126e01478aSPaul Walmsley 	&dsp_pwrdm,
1136e01478aSPaul Walmsley 	&mpu_24xx_pwrdm,
1146e01478aSPaul Walmsley 	&core_24xx_pwrdm,
1156e01478aSPaul Walmsley #endif
1166e01478aSPaul Walmsley 
1176e01478aSPaul Walmsley #ifdef CONFIG_ARCH_OMAP2430
1186e01478aSPaul Walmsley 	&mdm_pwrdm,
1196e01478aSPaul Walmsley #endif
1206e01478aSPaul Walmsley 	NULL
1216e01478aSPaul Walmsley };
1226e01478aSPaul Walmsley 
1236e01478aSPaul Walmsley void __init omap2xxx_powerdomains_init(void)
1246e01478aSPaul Walmsley {
1256e01478aSPaul Walmsley 	pwrdm_init(powerdomains_omap2xxx, &omap2_pwrdm_operations);
1266e01478aSPaul Walmsley }
127