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