1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
26e01478aSPaul Walmsley /*
36e01478aSPaul Walmsley  * OMAP2XXX powerdomain definitions
46e01478aSPaul Walmsley  *
58179488aSPaul Walmsley  * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc.
64cb49fecSPaul Walmsley  * Copyright (C) 2007-2011 Nokia Corporation
76e01478aSPaul Walmsley  *
86e01478aSPaul Walmsley  * Paul Walmsley, Jouni Högander
96e01478aSPaul Walmsley  */
106e01478aSPaul Walmsley 
116e01478aSPaul Walmsley #include <linux/kernel.h>
126e01478aSPaul Walmsley #include <linux/init.h>
136e01478aSPaul Walmsley 
14e4c060dbSTony Lindgren #include "soc.h"
1572e06d08SPaul Walmsley #include "powerdomain.h"
166e01478aSPaul Walmsley #include "powerdomains2xxx_3xxx_data.h"
176e01478aSPaul Walmsley 
186e01478aSPaul Walmsley #include "prcm-common.h"
1959fb659bSPaul Walmsley #include "prm2xxx_3xxx.h"
206e01478aSPaul Walmsley #include "prm-regbits-24xx.h"
216e01478aSPaul Walmsley 
226e01478aSPaul Walmsley /* 24XX powerdomains and dependencies */
236e01478aSPaul Walmsley 
246e01478aSPaul Walmsley /* Powerdomains */
256e01478aSPaul Walmsley 
266e01478aSPaul Walmsley static struct powerdomain dsp_pwrdm = {
276e01478aSPaul Walmsley 	.name		  = "dsp_pwrdm",
286e01478aSPaul Walmsley 	.prcm_offs	  = OMAP24XX_DSP_MOD,
296e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
304cb49fecSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_RET,
316e01478aSPaul Walmsley 	.banks		  = 1,
326e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
334cb49fecSPaul Walmsley 		[0] = PWRSTS_RET,
346e01478aSPaul Walmsley 	},
356e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
364cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,
376e01478aSPaul Walmsley 	},
38aae030faSKevin Hilman 	.voltdm		  = { .name = "core" },
396e01478aSPaul Walmsley };
406e01478aSPaul Walmsley 
416e01478aSPaul Walmsley static struct powerdomain mpu_24xx_pwrdm = {
426e01478aSPaul Walmsley 	.name		  = "mpu_pwrdm",
436e01478aSPaul Walmsley 	.prcm_offs	  = MPU_MOD,
446e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
456e01478aSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_OFF_RET,
466e01478aSPaul Walmsley 	.banks		  = 1,
476e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
484cb49fecSPaul Walmsley 		[0] = PWRSTS_RET,
496e01478aSPaul Walmsley 	},
506e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
514cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,
526e01478aSPaul Walmsley 	},
53aae030faSKevin Hilman 	.voltdm		  = { .name = "core" },
546e01478aSPaul Walmsley };
556e01478aSPaul Walmsley 
566e01478aSPaul Walmsley static struct powerdomain core_24xx_pwrdm = {
576e01478aSPaul Walmsley 	.name		  = "core_pwrdm",
586e01478aSPaul Walmsley 	.prcm_offs	  = CORE_MOD,
596e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
608e1ff676SPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_RET,
616e01478aSPaul Walmsley 	.banks		  = 3,
626e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
636e01478aSPaul Walmsley 		[0] = PWRSTS_OFF_RET,	 /* MEM1RETSTATE */
646e01478aSPaul Walmsley 		[1] = PWRSTS_OFF_RET,	 /* MEM2RETSTATE */
656e01478aSPaul Walmsley 		[2] = PWRSTS_OFF_RET,	 /* MEM3RETSTATE */
666e01478aSPaul Walmsley 	},
676e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
686e01478aSPaul Walmsley 		[0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */
696e01478aSPaul Walmsley 		[1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */
706e01478aSPaul Walmsley 		[2] = PWRSTS_OFF_RET_ON, /* MEM3ONSTATE */
716e01478aSPaul Walmsley 	},
72aae030faSKevin Hilman 	.voltdm		  = { .name = "core" },
736e01478aSPaul Walmsley };
746e01478aSPaul Walmsley 
756e01478aSPaul Walmsley 
766e01478aSPaul Walmsley /*
776e01478aSPaul Walmsley  * 2430-specific powerdomains
786e01478aSPaul Walmsley  */
796e01478aSPaul Walmsley 
806e01478aSPaul Walmsley /* XXX 2430 KILLDOMAINWKUP bit?  No current users apparently */
816e01478aSPaul Walmsley 
826e01478aSPaul Walmsley static struct powerdomain mdm_pwrdm = {
836e01478aSPaul Walmsley 	.name		  = "mdm_pwrdm",
846e01478aSPaul Walmsley 	.prcm_offs	  = OMAP2430_MDM_MOD,
856e01478aSPaul Walmsley 	.pwrsts		  = PWRSTS_OFF_RET_ON,
864cb49fecSPaul Walmsley 	.pwrsts_logic_ret = PWRSTS_RET,
876e01478aSPaul Walmsley 	.banks		  = 1,
886e01478aSPaul Walmsley 	.pwrsts_mem_ret	  = {
894cb49fecSPaul Walmsley 		[0] = PWRSTS_RET, /* MEMRETSTATE */
906e01478aSPaul Walmsley 	},
916e01478aSPaul Walmsley 	.pwrsts_mem_on	  = {
924cb49fecSPaul Walmsley 		[0] = PWRSTS_ON,  /* MEMONSTATE */
936e01478aSPaul Walmsley 	},
94aae030faSKevin Hilman 	.voltdm		  = { .name = "core" },
956e01478aSPaul Walmsley };
966e01478aSPaul Walmsley 
978179488aSPaul Walmsley /*
988179488aSPaul Walmsley  *
998179488aSPaul Walmsley  */
1006e01478aSPaul Walmsley 
1018179488aSPaul Walmsley static struct powerdomain *powerdomains_omap24xx[] __initdata = {
1026e01478aSPaul Walmsley 	&wkup_omap2_pwrdm,
1036e01478aSPaul Walmsley 	&gfx_omap2_pwrdm,
1046e01478aSPaul Walmsley 	&dsp_pwrdm,
1056e01478aSPaul Walmsley 	&mpu_24xx_pwrdm,
1066e01478aSPaul Walmsley 	&core_24xx_pwrdm,
1076e01478aSPaul Walmsley 	NULL
1086e01478aSPaul Walmsley };
1096e01478aSPaul Walmsley 
1108179488aSPaul Walmsley static struct powerdomain *powerdomains_omap2430[] __initdata = {
1118179488aSPaul Walmsley 	&mdm_pwrdm,
1128179488aSPaul Walmsley 	NULL
1138179488aSPaul Walmsley };
1148179488aSPaul Walmsley 
omap242x_powerdomains_init(void)1158179488aSPaul Walmsley void __init omap242x_powerdomains_init(void)
1166e01478aSPaul Walmsley {
1178179488aSPaul Walmsley 	if (!cpu_is_omap2420())
1188179488aSPaul Walmsley 		return;
1198179488aSPaul Walmsley 
120129c65eeSPaul Walmsley 	pwrdm_register_platform_funcs(&omap2_pwrdm_operations);
1218179488aSPaul Walmsley 	pwrdm_register_pwrdms(powerdomains_omap24xx);
1228179488aSPaul Walmsley 	pwrdm_complete_init();
1238179488aSPaul Walmsley }
1248179488aSPaul Walmsley 
omap243x_powerdomains_init(void)1258179488aSPaul Walmsley void __init omap243x_powerdomains_init(void)
1268179488aSPaul Walmsley {
1278179488aSPaul Walmsley 	if (!cpu_is_omap2430())
1288179488aSPaul Walmsley 		return;
1298179488aSPaul Walmsley 
1308179488aSPaul Walmsley 	pwrdm_register_platform_funcs(&omap2_pwrdm_operations);
1318179488aSPaul Walmsley 	pwrdm_register_pwrdms(powerdomains_omap24xx);
1328179488aSPaul Walmsley 	pwrdm_register_pwrdms(powerdomains_omap2430);
133129c65eeSPaul Walmsley 	pwrdm_complete_init();
1346e01478aSPaul Walmsley }
135