1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * OMAP2XXX powerdomain definitions 4 * 5 * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc. 6 * Copyright (C) 2007-2011 Nokia Corporation 7 * 8 * Paul Walmsley, Jouni Högander 9 */ 10 11 #include <linux/kernel.h> 12 #include <linux/init.h> 13 14 #include "soc.h" 15 #include "powerdomain.h" 16 #include "powerdomains2xxx_3xxx_data.h" 17 18 #include "prcm-common.h" 19 #include "prm2xxx_3xxx.h" 20 #include "prm-regbits-24xx.h" 21 22 /* 24XX powerdomains and dependencies */ 23 24 /* Powerdomains */ 25 26 static struct powerdomain dsp_pwrdm = { 27 .name = "dsp_pwrdm", 28 .prcm_offs = OMAP24XX_DSP_MOD, 29 .pwrsts = PWRSTS_OFF_RET_ON, 30 .pwrsts_logic_ret = PWRSTS_RET, 31 .banks = 1, 32 .pwrsts_mem_ret = { 33 [0] = PWRSTS_RET, 34 }, 35 .pwrsts_mem_on = { 36 [0] = PWRSTS_ON, 37 }, 38 .voltdm = { .name = "core" }, 39 }; 40 41 static struct powerdomain mpu_24xx_pwrdm = { 42 .name = "mpu_pwrdm", 43 .prcm_offs = MPU_MOD, 44 .pwrsts = PWRSTS_OFF_RET_ON, 45 .pwrsts_logic_ret = PWRSTS_OFF_RET, 46 .banks = 1, 47 .pwrsts_mem_ret = { 48 [0] = PWRSTS_RET, 49 }, 50 .pwrsts_mem_on = { 51 [0] = PWRSTS_ON, 52 }, 53 .voltdm = { .name = "core" }, 54 }; 55 56 static struct powerdomain core_24xx_pwrdm = { 57 .name = "core_pwrdm", 58 .prcm_offs = CORE_MOD, 59 .pwrsts = PWRSTS_OFF_RET_ON, 60 .pwrsts_logic_ret = PWRSTS_RET, 61 .banks = 3, 62 .pwrsts_mem_ret = { 63 [0] = PWRSTS_OFF_RET, /* MEM1RETSTATE */ 64 [1] = PWRSTS_OFF_RET, /* MEM2RETSTATE */ 65 [2] = PWRSTS_OFF_RET, /* MEM3RETSTATE */ 66 }, 67 .pwrsts_mem_on = { 68 [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */ 69 [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */ 70 [2] = PWRSTS_OFF_RET_ON, /* MEM3ONSTATE */ 71 }, 72 .voltdm = { .name = "core" }, 73 }; 74 75 76 /* 77 * 2430-specific powerdomains 78 */ 79 80 /* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */ 81 82 static struct powerdomain mdm_pwrdm = { 83 .name = "mdm_pwrdm", 84 .prcm_offs = OMAP2430_MDM_MOD, 85 .pwrsts = PWRSTS_OFF_RET_ON, 86 .pwrsts_logic_ret = PWRSTS_RET, 87 .banks = 1, 88 .pwrsts_mem_ret = { 89 [0] = PWRSTS_RET, /* MEMRETSTATE */ 90 }, 91 .pwrsts_mem_on = { 92 [0] = PWRSTS_ON, /* MEMONSTATE */ 93 }, 94 .voltdm = { .name = "core" }, 95 }; 96 97 /* 98 * 99 */ 100 101 static struct powerdomain *powerdomains_omap24xx[] __initdata = { 102 &wkup_omap2_pwrdm, 103 &gfx_omap2_pwrdm, 104 &dsp_pwrdm, 105 &mpu_24xx_pwrdm, 106 &core_24xx_pwrdm, 107 NULL 108 }; 109 110 static struct powerdomain *powerdomains_omap2430[] __initdata = { 111 &mdm_pwrdm, 112 NULL 113 }; 114 115 void __init omap242x_powerdomains_init(void) 116 { 117 if (!cpu_is_omap2420()) 118 return; 119 120 pwrdm_register_platform_funcs(&omap2_pwrdm_operations); 121 pwrdm_register_pwrdms(powerdomains_omap24xx); 122 pwrdm_complete_init(); 123 } 124 125 void __init omap243x_powerdomains_init(void) 126 { 127 if (!cpu_is_omap2430()) 128 return; 129 130 pwrdm_register_platform_funcs(&omap2_pwrdm_operations); 131 pwrdm_register_pwrdms(powerdomains_omap24xx); 132 pwrdm_register_pwrdms(powerdomains_omap2430); 133 pwrdm_complete_init(); 134 } 135