16e01478aSPaul Walmsley /* 26e01478aSPaul Walmsley * OMAP2XXX powerdomain definitions 36e01478aSPaul Walmsley * 48179488aSPaul Walmsley * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc. 54cb49fecSPaul Walmsley * Copyright (C) 2007-2011 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 1772e06d08SPaul Walmsley #include "powerdomain.h" 186e01478aSPaul Walmsley #include "powerdomains2xxx_3xxx_data.h" 196e01478aSPaul Walmsley 206e01478aSPaul Walmsley #include "prcm-common.h" 2159fb659bSPaul Walmsley #include "prm2xxx_3xxx.h" 226e01478aSPaul Walmsley #include "prm-regbits-24xx.h" 236e01478aSPaul Walmsley 246e01478aSPaul Walmsley /* 24XX powerdomains and dependencies */ 256e01478aSPaul Walmsley 266e01478aSPaul Walmsley /* Powerdomains */ 276e01478aSPaul Walmsley 286e01478aSPaul Walmsley static struct powerdomain dsp_pwrdm = { 296e01478aSPaul Walmsley .name = "dsp_pwrdm", 306e01478aSPaul Walmsley .prcm_offs = OMAP24XX_DSP_MOD, 316e01478aSPaul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 324cb49fecSPaul Walmsley .pwrsts_logic_ret = PWRSTS_RET, 336e01478aSPaul Walmsley .banks = 1, 346e01478aSPaul Walmsley .pwrsts_mem_ret = { 354cb49fecSPaul Walmsley [0] = PWRSTS_RET, 366e01478aSPaul Walmsley }, 376e01478aSPaul Walmsley .pwrsts_mem_on = { 384cb49fecSPaul Walmsley [0] = PWRSTS_ON, 396e01478aSPaul Walmsley }, 406e01478aSPaul Walmsley }; 416e01478aSPaul Walmsley 426e01478aSPaul Walmsley static struct powerdomain mpu_24xx_pwrdm = { 436e01478aSPaul Walmsley .name = "mpu_pwrdm", 446e01478aSPaul Walmsley .prcm_offs = MPU_MOD, 456e01478aSPaul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 466e01478aSPaul Walmsley .pwrsts_logic_ret = PWRSTS_OFF_RET, 476e01478aSPaul Walmsley .banks = 1, 486e01478aSPaul Walmsley .pwrsts_mem_ret = { 494cb49fecSPaul Walmsley [0] = PWRSTS_RET, 506e01478aSPaul Walmsley }, 516e01478aSPaul Walmsley .pwrsts_mem_on = { 524cb49fecSPaul Walmsley [0] = PWRSTS_ON, 536e01478aSPaul Walmsley }, 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, 606e01478aSPaul Walmsley .banks = 3, 616e01478aSPaul Walmsley .pwrsts_mem_ret = { 626e01478aSPaul Walmsley [0] = PWRSTS_OFF_RET, /* MEM1RETSTATE */ 636e01478aSPaul Walmsley [1] = PWRSTS_OFF_RET, /* MEM2RETSTATE */ 646e01478aSPaul Walmsley [2] = PWRSTS_OFF_RET, /* MEM3RETSTATE */ 656e01478aSPaul Walmsley }, 666e01478aSPaul Walmsley .pwrsts_mem_on = { 676e01478aSPaul Walmsley [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */ 686e01478aSPaul Walmsley [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */ 696e01478aSPaul Walmsley [2] = PWRSTS_OFF_RET_ON, /* MEM3ONSTATE */ 706e01478aSPaul Walmsley }, 716e01478aSPaul Walmsley }; 726e01478aSPaul Walmsley 736e01478aSPaul Walmsley 746e01478aSPaul Walmsley /* 756e01478aSPaul Walmsley * 2430-specific powerdomains 766e01478aSPaul Walmsley */ 776e01478aSPaul Walmsley 786e01478aSPaul Walmsley /* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */ 796e01478aSPaul Walmsley 806e01478aSPaul Walmsley static struct powerdomain mdm_pwrdm = { 816e01478aSPaul Walmsley .name = "mdm_pwrdm", 826e01478aSPaul Walmsley .prcm_offs = OMAP2430_MDM_MOD, 836e01478aSPaul Walmsley .pwrsts = PWRSTS_OFF_RET_ON, 844cb49fecSPaul Walmsley .pwrsts_logic_ret = PWRSTS_RET, 856e01478aSPaul Walmsley .banks = 1, 866e01478aSPaul Walmsley .pwrsts_mem_ret = { 874cb49fecSPaul Walmsley [0] = PWRSTS_RET, /* MEMRETSTATE */ 886e01478aSPaul Walmsley }, 896e01478aSPaul Walmsley .pwrsts_mem_on = { 904cb49fecSPaul Walmsley [0] = PWRSTS_ON, /* MEMONSTATE */ 916e01478aSPaul Walmsley }, 926e01478aSPaul Walmsley }; 936e01478aSPaul Walmsley 948179488aSPaul Walmsley /* 958179488aSPaul Walmsley * 968179488aSPaul Walmsley */ 976e01478aSPaul Walmsley 988179488aSPaul Walmsley static struct powerdomain *powerdomains_omap24xx[] __initdata = { 996e01478aSPaul Walmsley &wkup_omap2_pwrdm, 1006e01478aSPaul Walmsley &gfx_omap2_pwrdm, 1016e01478aSPaul Walmsley &dsp_pwrdm, 1026e01478aSPaul Walmsley &mpu_24xx_pwrdm, 1036e01478aSPaul Walmsley &core_24xx_pwrdm, 1046e01478aSPaul Walmsley NULL 1056e01478aSPaul Walmsley }; 1066e01478aSPaul Walmsley 1078179488aSPaul Walmsley static struct powerdomain *powerdomains_omap2430[] __initdata = { 1088179488aSPaul Walmsley &mdm_pwrdm, 1098179488aSPaul Walmsley NULL 1108179488aSPaul Walmsley }; 1118179488aSPaul Walmsley 1128179488aSPaul Walmsley void __init omap242x_powerdomains_init(void) 1136e01478aSPaul Walmsley { 1148179488aSPaul Walmsley if (!cpu_is_omap2420()) 1158179488aSPaul Walmsley return; 1168179488aSPaul Walmsley 117129c65eeSPaul Walmsley pwrdm_register_platform_funcs(&omap2_pwrdm_operations); 1188179488aSPaul Walmsley pwrdm_register_pwrdms(powerdomains_omap24xx); 1198179488aSPaul Walmsley pwrdm_complete_init(); 1208179488aSPaul Walmsley } 1218179488aSPaul Walmsley 1228179488aSPaul Walmsley void __init omap243x_powerdomains_init(void) 1238179488aSPaul Walmsley { 1248179488aSPaul Walmsley if (!cpu_is_omap2430()) 1258179488aSPaul Walmsley return; 1268179488aSPaul Walmsley 1278179488aSPaul Walmsley pwrdm_register_platform_funcs(&omap2_pwrdm_operations); 1288179488aSPaul Walmsley pwrdm_register_pwrdms(powerdomains_omap24xx); 1298179488aSPaul Walmsley pwrdm_register_pwrdms(powerdomains_omap2430); 130129c65eeSPaul Walmsley pwrdm_complete_init(); 1316e01478aSPaul Walmsley } 132