powerdomains43xx_data.c (3337B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * AM43xx Power domains framework 4 * 5 * Copyright (C) 2013 Texas Instruments, Inc. 6 */ 7 8#include <linux/kernel.h> 9#include <linux/init.h> 10 11#include "powerdomain.h" 12 13#include "prcm-common.h" 14#include "prcm44xx.h" 15#include "prcm43xx.h" 16 17static struct powerdomain gfx_43xx_pwrdm = { 18 .name = "gfx_pwrdm", 19 .voltdm = { .name = "core" }, 20 .prcm_offs = AM43XX_PRM_GFX_INST, 21 .prcm_partition = AM43XX_PRM_PARTITION, 22 .pwrsts = PWRSTS_OFF_ON, 23 .banks = 1, 24 .pwrsts_mem_on = { 25 [0] = PWRSTS_ON, /* gfx_mem */ 26 }, 27 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 28}; 29 30static struct powerdomain mpu_43xx_pwrdm = { 31 .name = "mpu_pwrdm", 32 .voltdm = { .name = "mpu" }, 33 .prcm_offs = AM43XX_PRM_MPU_INST, 34 .prcm_partition = AM43XX_PRM_PARTITION, 35 .pwrsts = PWRSTS_OFF_RET_ON, 36 .pwrsts_logic_ret = PWRSTS_OFF_RET, 37 .banks = 3, 38 .pwrsts_mem_ret = { 39 [0] = PWRSTS_OFF_RET, /* mpu_l1 */ 40 [1] = PWRSTS_OFF_RET, /* mpu_l2 */ 41 [2] = PWRSTS_OFF_RET, /* mpu_ram */ 42 }, 43 .pwrsts_mem_on = { 44 [0] = PWRSTS_ON, /* mpu_l1 */ 45 [1] = PWRSTS_ON, /* mpu_l2 */ 46 [2] = PWRSTS_ON, /* mpu_ram */ 47 }, 48 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 49}; 50 51static struct powerdomain rtc_43xx_pwrdm = { 52 .name = "rtc_pwrdm", 53 .voltdm = { .name = "rtc" }, 54 .prcm_offs = AM43XX_PRM_RTC_INST, 55 .prcm_partition = AM43XX_PRM_PARTITION, 56 .pwrsts = PWRSTS_ON, 57}; 58 59static struct powerdomain wkup_43xx_pwrdm = { 60 .name = "wkup_pwrdm", 61 .voltdm = { .name = "core" }, 62 .prcm_offs = AM43XX_PRM_WKUP_INST, 63 .prcm_partition = AM43XX_PRM_PARTITION, 64 .pwrsts = PWRSTS_ON, 65 .banks = 1, 66 .pwrsts_mem_on = { 67 [0] = PWRSTS_ON, /* debugss_mem */ 68 }, 69}; 70 71static struct powerdomain tamper_43xx_pwrdm = { 72 .name = "tamper_pwrdm", 73 .voltdm = { .name = "tamper" }, 74 .prcm_offs = AM43XX_PRM_TAMPER_INST, 75 .prcm_partition = AM43XX_PRM_PARTITION, 76 .pwrsts = PWRSTS_ON, 77}; 78 79static struct powerdomain cefuse_43xx_pwrdm = { 80 .name = "cefuse_pwrdm", 81 .voltdm = { .name = "core" }, 82 .prcm_offs = AM43XX_PRM_CEFUSE_INST, 83 .prcm_partition = AM43XX_PRM_PARTITION, 84 .pwrsts = PWRSTS_OFF_ON, 85 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 86}; 87 88static struct powerdomain per_43xx_pwrdm = { 89 .name = "per_pwrdm", 90 .voltdm = { .name = "core" }, 91 .prcm_offs = AM43XX_PRM_PER_INST, 92 .prcm_partition = AM43XX_PRM_PARTITION, 93 .pwrsts = PWRSTS_OFF_RET_ON, 94 .pwrsts_logic_ret = PWRSTS_OFF_RET, 95 .banks = 4, 96 .pwrsts_mem_ret = { 97 [0] = PWRSTS_OFF_RET, /* icss_mem */ 98 [1] = PWRSTS_OFF_RET, /* per_mem */ 99 [2] = PWRSTS_OFF_RET, /* ram1_mem */ 100 [3] = PWRSTS_OFF_RET, /* ram2_mem */ 101 }, 102 .pwrsts_mem_on = { 103 [0] = PWRSTS_ON, /* icss_mem */ 104 [1] = PWRSTS_ON, /* per_mem */ 105 [2] = PWRSTS_ON, /* ram1_mem */ 106 [3] = PWRSTS_ON, /* ram2_mem */ 107 }, 108 .flags = PWRDM_HAS_LOWPOWERSTATECHANGE, 109}; 110 111static struct powerdomain *powerdomains_am43xx[] __initdata = { 112 &gfx_43xx_pwrdm, 113 &mpu_43xx_pwrdm, 114 &rtc_43xx_pwrdm, 115 &wkup_43xx_pwrdm, 116 &tamper_43xx_pwrdm, 117 &cefuse_43xx_pwrdm, 118 &per_43xx_pwrdm, 119 NULL 120}; 121 122static int am43xx_check_vcvp(void) 123{ 124 return 0; 125} 126 127void __init am43xx_powerdomains_init(void) 128{ 129 omap4_pwrdm_operations.pwrdm_has_voltdm = am43xx_check_vcvp; 130 pwrdm_register_platform_funcs(&omap4_pwrdm_operations); 131 pwrdm_register_pwrdms(powerdomains_am43xx); 132 pwrdm_complete_init(); 133}