Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * AM43xx Power domains framework
0004  *
0005  * Copyright (C) 2013 Texas Instruments, Inc.
0006  */
0007 
0008 #include <linux/kernel.h>
0009 #include <linux/init.h>
0010 
0011 #include "powerdomain.h"
0012 
0013 #include "prcm-common.h"
0014 #include "prcm44xx.h"
0015 #include "prcm43xx.h"
0016 
0017 static struct powerdomain gfx_43xx_pwrdm = {
0018     .name         = "gfx_pwrdm",
0019     .voltdm       = { .name = "core" },
0020     .prcm_offs    = AM43XX_PRM_GFX_INST,
0021     .prcm_partition   = AM43XX_PRM_PARTITION,
0022     .pwrsts       = PWRSTS_OFF_ON,
0023     .banks        = 1,
0024     .pwrsts_mem_on  = {
0025         [0] = PWRSTS_ON,    /* gfx_mem */
0026     },
0027     .flags        = PWRDM_HAS_LOWPOWERSTATECHANGE,
0028 };
0029 
0030 static struct powerdomain mpu_43xx_pwrdm = {
0031     .name         = "mpu_pwrdm",
0032     .voltdm       = { .name = "mpu" },
0033     .prcm_offs    = AM43XX_PRM_MPU_INST,
0034     .prcm_partition   = AM43XX_PRM_PARTITION,
0035     .pwrsts       = PWRSTS_OFF_RET_ON,
0036     .pwrsts_logic_ret = PWRSTS_OFF_RET,
0037     .banks        = 3,
0038     .pwrsts_mem_ret = {
0039         [0] = PWRSTS_OFF_RET,   /* mpu_l1 */
0040         [1] = PWRSTS_OFF_RET,   /* mpu_l2 */
0041         [2] = PWRSTS_OFF_RET,   /* mpu_ram */
0042     },
0043     .pwrsts_mem_on  = {
0044         [0] = PWRSTS_ON,    /* mpu_l1 */
0045         [1] = PWRSTS_ON,    /* mpu_l2 */
0046         [2] = PWRSTS_ON,    /* mpu_ram */
0047     },
0048     .flags        = PWRDM_HAS_LOWPOWERSTATECHANGE,
0049 };
0050 
0051 static struct powerdomain rtc_43xx_pwrdm = {
0052     .name         = "rtc_pwrdm",
0053     .voltdm       = { .name = "rtc" },
0054     .prcm_offs    = AM43XX_PRM_RTC_INST,
0055     .prcm_partition   = AM43XX_PRM_PARTITION,
0056     .pwrsts       = PWRSTS_ON,
0057 };
0058 
0059 static struct powerdomain wkup_43xx_pwrdm = {
0060     .name         = "wkup_pwrdm",
0061     .voltdm       = { .name = "core" },
0062     .prcm_offs    = AM43XX_PRM_WKUP_INST,
0063     .prcm_partition   = AM43XX_PRM_PARTITION,
0064     .pwrsts       = PWRSTS_ON,
0065     .banks        = 1,
0066     .pwrsts_mem_on  = {
0067         [0] = PWRSTS_ON,    /* debugss_mem */
0068     },
0069 };
0070 
0071 static struct powerdomain tamper_43xx_pwrdm = {
0072     .name         = "tamper_pwrdm",
0073     .voltdm       = { .name = "tamper" },
0074     .prcm_offs    = AM43XX_PRM_TAMPER_INST,
0075     .prcm_partition   = AM43XX_PRM_PARTITION,
0076     .pwrsts       = PWRSTS_ON,
0077 };
0078 
0079 static struct powerdomain cefuse_43xx_pwrdm = {
0080     .name         = "cefuse_pwrdm",
0081     .voltdm       = { .name = "core" },
0082     .prcm_offs    = AM43XX_PRM_CEFUSE_INST,
0083     .prcm_partition   = AM43XX_PRM_PARTITION,
0084     .pwrsts       = PWRSTS_OFF_ON,
0085     .flags        = PWRDM_HAS_LOWPOWERSTATECHANGE,
0086 };
0087 
0088 static struct powerdomain per_43xx_pwrdm = {
0089     .name         = "per_pwrdm",
0090     .voltdm       = { .name = "core" },
0091     .prcm_offs    = AM43XX_PRM_PER_INST,
0092     .prcm_partition   = AM43XX_PRM_PARTITION,
0093     .pwrsts       = PWRSTS_OFF_RET_ON,
0094     .pwrsts_logic_ret = PWRSTS_OFF_RET,
0095     .banks        = 4,
0096     .pwrsts_mem_ret = {
0097         [0] = PWRSTS_OFF_RET,   /* icss_mem */
0098         [1] = PWRSTS_OFF_RET,   /* per_mem */
0099         [2] = PWRSTS_OFF_RET,   /* ram1_mem */
0100         [3] = PWRSTS_OFF_RET,   /* ram2_mem */
0101     },
0102     .pwrsts_mem_on  = {
0103         [0] = PWRSTS_ON,    /* icss_mem */
0104         [1] = PWRSTS_ON,    /* per_mem */
0105         [2] = PWRSTS_ON,    /* ram1_mem */
0106         [3] = PWRSTS_ON,    /* ram2_mem */
0107     },
0108     .flags        = PWRDM_HAS_LOWPOWERSTATECHANGE,
0109 };
0110 
0111 static struct powerdomain *powerdomains_am43xx[] __initdata = {
0112     &gfx_43xx_pwrdm,
0113     &mpu_43xx_pwrdm,
0114     &rtc_43xx_pwrdm,
0115     &wkup_43xx_pwrdm,
0116     &tamper_43xx_pwrdm,
0117     &cefuse_43xx_pwrdm,
0118     &per_43xx_pwrdm,
0119     NULL
0120 };
0121 
0122 static int am43xx_check_vcvp(void)
0123 {
0124     return 0;
0125 }
0126 
0127 void __init am43xx_powerdomains_init(void)
0128 {
0129     omap4_pwrdm_operations.pwrdm_has_voltdm = am43xx_check_vcvp;
0130     pwrdm_register_platform_funcs(&omap4_pwrdm_operations);
0131     pwrdm_register_pwrdms(powerdomains_am43xx);
0132     pwrdm_complete_init();
0133 }