2019-06-04 10:11:33 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2013-10-12 15:45:54 +05:30
/*
* AM43xx Power domains framework
*
* Copyright ( C ) 2013 Texas Instruments , Inc .
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include "powerdomain.h"
# include "prcm-common.h"
# include "prcm44xx.h"
# include "prcm43xx.h"
static struct powerdomain gfx_43xx_pwrdm = {
. name = " gfx_pwrdm " ,
. voltdm = { . name = " core " } ,
. prcm_offs = AM43XX_PRM_GFX_INST ,
. prcm_partition = AM43XX_PRM_PARTITION ,
. pwrsts = PWRSTS_OFF_ON ,
. banks = 1 ,
. pwrsts_mem_on = {
[ 0 ] = PWRSTS_ON , /* gfx_mem */
} ,
. flags = PWRDM_HAS_LOWPOWERSTATECHANGE ,
} ;
static struct powerdomain mpu_43xx_pwrdm = {
. name = " mpu_pwrdm " ,
. voltdm = { . name = " mpu " } ,
. prcm_offs = AM43XX_PRM_MPU_INST ,
. prcm_partition = AM43XX_PRM_PARTITION ,
. pwrsts = PWRSTS_OFF_RET_ON ,
. pwrsts_logic_ret = PWRSTS_OFF_RET ,
. banks = 3 ,
. pwrsts_mem_ret = {
[ 0 ] = PWRSTS_OFF_RET , /* mpu_l1 */
[ 1 ] = PWRSTS_OFF_RET , /* mpu_l2 */
[ 2 ] = PWRSTS_OFF_RET , /* mpu_ram */
} ,
. pwrsts_mem_on = {
[ 0 ] = PWRSTS_ON , /* mpu_l1 */
[ 1 ] = PWRSTS_ON , /* mpu_l2 */
[ 2 ] = PWRSTS_ON , /* mpu_ram */
} ,
. flags = PWRDM_HAS_LOWPOWERSTATECHANGE ,
} ;
static struct powerdomain rtc_43xx_pwrdm = {
. name = " rtc_pwrdm " ,
. voltdm = { . name = " rtc " } ,
. prcm_offs = AM43XX_PRM_RTC_INST ,
. prcm_partition = AM43XX_PRM_PARTITION ,
. pwrsts = PWRSTS_ON ,
} ;
static struct powerdomain wkup_43xx_pwrdm = {
. name = " wkup_pwrdm " ,
. voltdm = { . name = " core " } ,
. prcm_offs = AM43XX_PRM_WKUP_INST ,
. prcm_partition = AM43XX_PRM_PARTITION ,
. pwrsts = PWRSTS_ON ,
. banks = 1 ,
. pwrsts_mem_on = {
[ 0 ] = PWRSTS_ON , /* debugss_mem */
} ,
} ;
static struct powerdomain tamper_43xx_pwrdm = {
. name = " tamper_pwrdm " ,
. voltdm = { . name = " tamper " } ,
. prcm_offs = AM43XX_PRM_TAMPER_INST ,
. prcm_partition = AM43XX_PRM_PARTITION ,
. pwrsts = PWRSTS_ON ,
} ;
static struct powerdomain cefuse_43xx_pwrdm = {
. name = " cefuse_pwrdm " ,
. voltdm = { . name = " core " } ,
. prcm_offs = AM43XX_PRM_CEFUSE_INST ,
. prcm_partition = AM43XX_PRM_PARTITION ,
. pwrsts = PWRSTS_OFF_ON ,
. flags = PWRDM_HAS_LOWPOWERSTATECHANGE ,
} ;
static struct powerdomain per_43xx_pwrdm = {
. name = " per_pwrdm " ,
. voltdm = { . name = " core " } ,
. prcm_offs = AM43XX_PRM_PER_INST ,
. prcm_partition = AM43XX_PRM_PARTITION ,
. pwrsts = PWRSTS_OFF_RET_ON ,
. pwrsts_logic_ret = PWRSTS_OFF_RET ,
. banks = 4 ,
. pwrsts_mem_ret = {
[ 0 ] = PWRSTS_OFF_RET , /* icss_mem */
[ 1 ] = PWRSTS_OFF_RET , /* per_mem */
[ 2 ] = PWRSTS_OFF_RET , /* ram1_mem */
[ 3 ] = PWRSTS_OFF_RET , /* ram2_mem */
} ,
. pwrsts_mem_on = {
[ 0 ] = PWRSTS_ON , /* icss_mem */
[ 1 ] = PWRSTS_ON , /* per_mem */
[ 2 ] = PWRSTS_ON , /* ram1_mem */
[ 3 ] = PWRSTS_ON , /* ram2_mem */
} ,
. flags = PWRDM_HAS_LOWPOWERSTATECHANGE ,
} ;
static struct powerdomain * powerdomains_am43xx [ ] __initdata = {
& gfx_43xx_pwrdm ,
& mpu_43xx_pwrdm ,
& rtc_43xx_pwrdm ,
& wkup_43xx_pwrdm ,
& tamper_43xx_pwrdm ,
& cefuse_43xx_pwrdm ,
& per_43xx_pwrdm ,
NULL
} ;
static int am43xx_check_vcvp ( void )
{
return 0 ;
}
void __init am43xx_powerdomains_init ( void )
{
omap4_pwrdm_operations . pwrdm_has_voltdm = am43xx_check_vcvp ;
pwrdm_register_platform_funcs ( & omap4_pwrdm_operations ) ;
pwrdm_register_pwrdms ( powerdomains_am43xx ) ;
pwrdm_complete_init ( ) ;
}