From 30817e1e6da57eb29aa443dded1aafed74719fdc Mon Sep 17 00:00:00 2001 From: Chanwoo Choi Date: Tue, 9 Jan 2018 15:20:32 +0900 Subject: [PATCH] soc: samsung: pmu: Add the PMU data of exynos5433 to support low-power state Add the PMU (Power Management Unit) data of exynos5433 SoC in order to support the various power modes. Each power mode has the different value for reducing the power-consumption. Signed-off-by: Jonghwa Lee Signed-off-by: Chanwoo Choi Change-Id: I60af59997bcc2f8ab994c4d02d52f91fd608c094 --- drivers/soc/samsung/Makefile | 3 +- drivers/soc/samsung/exynos-pmu.c | 1 + drivers/soc/samsung/exynos-pmu.h | 2 + drivers/soc/samsung/exynos5433-pmu.c | 237 ++++++++++++++++++++++++++++ include/linux/soc/samsung/exynos-regs-pmu.h | 147 +++++++++++++++++ 5 files changed, 389 insertions(+), 1 deletion(-) create mode 100644 drivers/soc/samsung/exynos5433-pmu.c diff --git a/drivers/soc/samsung/Makefile b/drivers/soc/samsung/Makefile index b46eaa9..db2754e 100644 --- a/drivers/soc/samsung/Makefile +++ b/drivers/soc/samsung/Makefile @@ -4,5 +4,6 @@ obj-$(CONFIG_EXYNOS_PMU) += exynos-pmu.o obj-$(CONFIG_EXYNOS_ASV) += exynos-asv.o obj-$(CONFIG_EXYNOS_PMU_ARM_DRIVERS) += exynos3250-pmu.o exynos4-pmu.o \ - exynos5250-pmu.o exynos5420-pmu.o + exynos5250-pmu.o exynos5420-pmu.o \ + exynos5433-pmu.o obj-$(CONFIG_EXYNOS_PM_DOMAINS) += pm_domains.o diff --git a/drivers/soc/samsung/exynos-pmu.c b/drivers/soc/samsung/exynos-pmu.c index 938f8cc..2c3e378 100644 --- a/drivers/soc/samsung/exynos-pmu.c +++ b/drivers/soc/samsung/exynos-pmu.c @@ -93,6 +93,7 @@ static const struct of_device_id exynos_pmu_of_device_ids[] = { .data = exynos_pmu_data_arm_ptr(exynos5420_pmu_data), }, { .compatible = "samsung,exynos5433-pmu", + .data = exynos_pmu_data_arm_ptr(exynos5433_pmu_data), }, { /*sentinel*/ }, }; diff --git a/drivers/soc/samsung/exynos-pmu.h b/drivers/soc/samsung/exynos-pmu.h index 86b3f2f..e4855f6 100644 --- a/drivers/soc/samsung/exynos-pmu.h +++ b/drivers/soc/samsung/exynos-pmu.h @@ -30,6 +30,7 @@ struct exynos_pmu_data { }; extern void __iomem *pmu_base_addr; +extern u32 exynos_get_eint_wake_mask(void); #ifdef CONFIG_EXYNOS_PMU_ARM_DRIVERS /* list of all exported SoC specific data */ @@ -38,6 +39,7 @@ extern const struct exynos_pmu_data exynos4210_pmu_data; extern const struct exynos_pmu_data exynos4412_pmu_data; extern const struct exynos_pmu_data exynos5250_pmu_data; extern const struct exynos_pmu_data exynos5420_pmu_data; +extern const struct exynos_pmu_data exynos5433_pmu_data; #endif extern void pmu_raw_writel(u32 val, u32 offset); diff --git a/drivers/soc/samsung/exynos5433-pmu.c b/drivers/soc/samsung/exynos5433-pmu.c new file mode 100644 index 0000000..d653543 --- /dev/null +++ b/drivers/soc/samsung/exynos5433-pmu.c @@ -0,0 +1,237 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// Copyright (c) 2018 Samsung Electronics Co., Ltd. +// Copyright (c) Jonghwa Lee +// Copyright (c) Chanwoo Choi +// +// EXYNOS5433 - CPU PMU (Power Management Unit) support + +#include +#include + +#include "exynos-pmu.h" + +static struct exynos_pmu_conf exynos5433_pmu_config[] = { + /* { .offset = address, .val = { AFTR, LPA, SLEEP } } */ + { EXYNOS5433_ATLAS_CPU0_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_ATLAS_CPU0_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_ATLAS_CPU1_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_ATLAS_CPU1_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_ATLAS_CPU2_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_ATLAS_CPU2_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_ATLAS_CPU3_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_ATLAS_CPU3_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_APOLLO_CPU0_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_APOLLO_CPU0_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_APOLLO_CPU1_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_APOLLO_CPU1_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_APOLLO_CPU2_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_APOLLO_CPU2_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_APOLLO_CPU3_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_DIS_IRQ_APOLLO_CPU3_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_ATLAS_NONCPU_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_APOLLO_NONCPU_SYS_PWR_REG, { 0x0, 0x0, 0x8 } }, + { EXYNOS5433_A5IS_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_DIS_IRQ_A5IS_LOCAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_DIS_IRQ_A5IS_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0 } }, + { EXYNOS5433_ATLAS_L2_SYS_PWR_REG, { 0x0, 0x0, 0x7 } }, + { EXYNOS5433_APOLLO_L2_SYS_PWR_REG, { 0x0, 0x0, 0x7 } }, + { EXYNOS5433_CLKSTOP_CMU_TOP_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_CLKRUN_CMU_TOP_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_RESET_CMU_TOP_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_RESET_CPUCLKSTOP_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_CLKSTOP_CMU_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_CLKRUN_CMU_MIF_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_RESET_CMU_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_DDRPHY_DLLLOCK_SYS_PWR_REG, { 0x1, 0x1, 0x1 } }, + { EXYNOS5433_DISABLE_PLL_CMU_TOP_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_DISABLE_PLL_AUD_PLL_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_DISABLE_PLL_CMU_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_TOP_BUS_SYS_PWR_REG, { 0x7, 0x0, 0x0 } }, + { EXYNOS5433_TOP_RETENTION_SYS_PWR_REG, { 0x1, 0x0, 0x1 } }, + { EXYNOS5433_TOP_PWR_SYS_PWR_REG, { 0x3, 0x0, 0x3 } }, + { EXYNOS5433_TOP_BUS_MIF_SYS_PWR_REG, { 0x7, 0x0, 0x0 } }, + { EXYNOS5433_TOP_RETENTION_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x1 } }, + { EXYNOS5433_TOP_PWR_MIF_SYS_PWR_REG, { 0x3, 0x0, 0x3 } }, + { EXYNOS5433_LOGIC_RESET_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_OSCCLK_GATE_SYS_PWR_REG, { 0x1, 0x0, 0x1 } }, + { EXYNOS5433_SLEEP_RESET_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_LOGIC_RESET_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_OSCCLK_GATE_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x1 } }, + { EXYNOS5433_SLEEP_RESET_MIF_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_MEMORY_TOP_SYS_PWR_REG, { 0x3, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_LPDDR3_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_JTAG_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_TOP_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_UART_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_EBIA_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_EBIB_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_SPI_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_ISOLATION_SYS_PWR_REG, { 0x1, 0x0, 0x1 } }, + { EXYNOS5433_PAD_RETENTION_USBXTI_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_RETENTION_BOOTLDO_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_ISOLATION_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x1 } }, + { EXYNOS5433_PAD_RETENTION_FSYSGENIO_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_PAD_ALV_SEL_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_XXTI_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_XXTI26_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_EXT_REGULATOR_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_GPIO_MODE_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_GPIO_MODE_FSYS0_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_GPIO_MODE_MIF_SYS_PWR_REG, { 0x1, 0x0, 0x0 } }, + { EXYNOS5433_GPIO_MODE_AUD_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_GSCL_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_CAM0_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_MSCL_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_G3D_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_DISP_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_CAM1_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_AUD_SYS_PWR_REG, { 0xF, 0xF, 0x0 } }, + { EXYNOS5433_FSYS_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_BUS2_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_G2D_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_ISP0_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_MFC_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_HEVC_SYS_PWR_REG, { 0xF, 0x0, 0x0 } }, + { EXYNOS5433_RESET_SLEEP_FSYS_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { EXYNOS5433_RESET_SLEEP_BUS2_SYS_PWR_REG, { 0x1, 0x1, 0x0 } }, + { PMU_TABLE_END, }, +}; + +static unsigned int const exynos5433_list_feed[] = { + EXYNOS5433_ATLAS_NONCPU_OPTION, + EXYNOS5433_APOLLO_NONCPU_OPTION, + EXYNOS5433_TOP_PWR_OPTION, + EXYNOS5433_TOP_PWR_MIF_OPTION, + EXYNOS5433_AUD_OPTION, + EXYNOS5433_CAM0_OPTION, + EXYNOS5433_DISP_OPTION, + EXYNOS5433_G2D_OPTION, + EXYNOS5433_G3D_OPTION, + EXYNOS5433_HEVC_OPTION, + EXYNOS5433_MSCL_OPTION, + EXYNOS5433_MFC_OPTION, + EXYNOS5433_GSCL_OPTION, + EXYNOS5433_FSYS_OPTION, + EXYNOS5433_ISP_OPTION, + EXYNOS5433_BUS2_OPTION, +}; + +static void exynos5433_set_wakeupmask(enum sys_powerdown mode) +{ + u32 intmask = 0; + + pmu_raw_writel(exynos_get_eint_wake_mask(), + EXYNOS5433_EINT_WAKEUP_MASK); + + /* Disable WAKEUP event monitor */ + intmask = pmu_raw_readl(EXYNOS5433_WAKEUP_MASK); + intmask &= ~(1 << 31); + pmu_raw_writel(intmask, EXYNOS5433_WAKEUP_MASK); + + pmu_raw_writel(0xFFFF0000, EXYNOS5433_WAKEUP_MASK2); + pmu_raw_writel(0xFFFF0000, EXYNOS5433_WAKEUP_MASK3); +} + +static void exynos5433_pmu_central_seq(bool enable) +{ + unsigned int tmp; + + tmp = pmu_raw_readl(EXYNOS5433_CENTRAL_SEQ_CONFIGURATION); + if (enable) + tmp &= ~EXYNOS5433_CENTRALSEQ_PWR_CFG; + else + tmp |= EXYNOS5433_CENTRALSEQ_PWR_CFG; + pmu_raw_writel(tmp, EXYNOS5433_CENTRAL_SEQ_CONFIGURATION); + + tmp = pmu_raw_readl(EXYNOS5433_CENTRAL_SEQ_MIF_CONFIGURATION); + if (enable) + tmp &= ~EXYNOS5433_CENTRALSEQ_PWR_CFG; + else + tmp |= EXYNOS5433_CENTRALSEQ_PWR_CFG; + pmu_raw_writel(tmp, EXYNOS5433_CENTRAL_SEQ_MIF_CONFIGURATION); +} + +static void exynos5433_pmu_init(void) +{ + unsigned int tmp; + int i, cluster, cpu; + + /* Enable non retention flip-flop reset for wakeup */ + tmp = pmu_raw_readl(EXYNOS5433_PMU_SPARE0); + tmp |= EXYNOS5433_EN_NONRET_RESET; + pmu_raw_writel(tmp, EXYNOS5433_PMU_SPARE0); + + /* Enable only SC_FEEDBACK for the register list */ + for (i = 0 ; i < ARRAY_SIZE(exynos5433_list_feed) ; i++) { + tmp = pmu_raw_readl(exynos5433_list_feed[i]); + tmp &= ~EXYNOS5_USE_SC_COUNTER; + tmp |= EXYNOS5_USE_SC_FEEDBACK; + pmu_raw_writel(tmp, exynos5433_list_feed[i]); + } + + /* + * Disable automatic L2 flush, Disable L2 retention and + * Enable STANDBYWFIL2, ACE/ACP + */ + for (cluster = 0; cluster < 2; cluster++) { + tmp = pmu_raw_readl(EXYNOS5433_ATLAS_L2_OPTION + (cluster * 0x20)); + tmp &= ~(EXYNOS5433_USE_AUTO_L2FLUSHREQ | EXYNOS5433_USE_RETENTION); + + if (cluster == 0) { + tmp |= (EXYNOS5433_USE_STANDBYWFIL2 | + EXYNOS5433_USE_DEACTIVATE_ACE | + EXYNOS5433_USE_DEACTIVATE_ACP); + } + pmu_raw_writel(tmp, EXYNOS5433_ATLAS_L2_OPTION + (cluster * 0x20)); + } + + /* + * Enable both SC_COUNTER and SC_FEEDBACK for the CPUs + * Use STANDBYWFI and SMPEN to indicate that core is ready to enter + * low power mode + */ + for (cpu = 0; cpu < 8; cpu++) { + tmp = pmu_raw_readl(EXYNOS5433_CPU_OPTION(cpu)); + tmp |= (EXYNOS5_USE_SC_FEEDBACK | EXYNOS5_USE_SC_COUNTER); + tmp |= EXYNOS5433_USE_SMPEN; + tmp |= EXYNOS5433_USE_STANDBYWFI; + tmp &= ~EXYNOS5433_USE_STANDBYWFE; + pmu_raw_writel(tmp, EXYNOS5433_CPU_OPTION(cpu)); + + tmp = pmu_raw_readl(EXYNOS5433_CPU_DURATION(cpu)); + tmp |= EXYNOS5433_DUR_WAIT_RESET; + tmp &= ~EXYNOS5433_DUR_SCALL; + tmp |= EXYNOS5433_DUR_SCALL_VALUE; + pmu_raw_writel(tmp, EXYNOS5433_CPU_DURATION(cpu)); + } + + /* Skip atlas block power-off during automatic power down sequence */ + tmp = pmu_raw_readl(EXYNOS5433_ATLAS_CPUSEQUENCER_OPTION); + tmp |= EXYNOS5433_SKIP_BLK_PWR_DOWN; + pmu_raw_writel(tmp, EXYNOS5433_ATLAS_CPUSEQUENCER_OPTION); + + /* Limit in-rush current during local power up of cores */ + tmp = pmu_raw_readl(EXYNOS5433_UP_SCHEDULER); + tmp |= EXYNOS5433_ENABLE_ATLAS_CPU; + pmu_raw_writel(tmp, EXYNOS5433_UP_SCHEDULER); +} + +static void exynos5433_powerdown_conf(enum sys_powerdown mode) +{ + switch (mode) { + case SYS_SLEEP: + exynos5433_set_wakeupmask(mode); + exynos5433_pmu_central_seq(true); // enable system-level low-power mode + break; + default: + break; + }; +} + +const struct exynos_pmu_data exynos5433_pmu_data = { + .pmu_config = exynos5433_pmu_config, + .pmu_init = exynos5433_pmu_init, + .powerdown_conf = exynos5433_powerdown_conf, +}; diff --git a/include/linux/soc/samsung/exynos-regs-pmu.h b/include/linux/soc/samsung/exynos-regs-pmu.h index 434d011..6c7a331 100644 --- a/include/linux/soc/samsung/exynos-regs-pmu.h +++ b/include/linux/soc/samsung/exynos-regs-pmu.h @@ -650,8 +650,110 @@ | EXYNOS5420_KFC_USE_STANDBY_WFI3) /* For EXYNOS5433 */ +#define EXYNOS5433_UP_SCHEDULER (0x0120) +#define EXYNOS5433_CENTRAL_SEQ_CONFIGURATION (0x0200) +#define EXYNOS5433_CENTRAL_SEQ_MIF_CONFIGURATION (0x0240) #define EXYNOS5433_EINT_WAKEUP_MASK (0x060C) +#define EXYNOS5433_WAKEUP_MASK (0x0610) +#define EXYNOS5433_WAKEUP_MASK2 (0x0614) +#define EXYNOS5433_WAKEUP_MASK3 (0x0618) +#define EXYNOS5433_EINT_WAKEUP_MASK1 (0x062C) #define EXYNOS5433_USBHOST30_PHY_CONTROL (0x0728) +#define EXYNOS5433_PMU_SPARE0 (0x0900) +#define EXYNOS5433_ATLAS_CPU0_SYS_PWR_REG (0x1000) +#define EXYNOS5433_DIS_IRQ_ATLAS_CPU0_CENTRAL_SYS_PWR_REG (0x1008) +#define EXYNOS5433_ATLAS_CPU1_SYS_PWR_REG (0x1010) +#define EXYNOS5433_DIS_IRQ_ATLAS_CPU1_CENTRAL_SYS_PWR_REG (0x1018) +#define EXYNOS5433_ATLAS_CPU2_SYS_PWR_REG (0x1020) +#define EXYNOS5433_DIS_IRQ_ATLAS_CPU2_CENTRAL_SYS_PWR_REG (0x1028) +#define EXYNOS5433_ATLAS_CPU3_SYS_PWR_REG (0x1030) +#define EXYNOS5433_DIS_IRQ_ATLAS_CPU3_CENTRAL_SYS_PWR_REG (0x1038) +#define EXYNOS5433_APOLLO_CPU0_SYS_PWR_REG (0x1040) +#define EXYNOS5433_DIS_IRQ_APOLLO_CPU0_CENTRAL_SYS_PWR_REG (0x1048) +#define EXYNOS5433_APOLLO_CPU1_SYS_PWR_REG (0x1050) +#define EXYNOS5433_DIS_IRQ_APOLLO_CPU1_CENTRAL_SYS_PWR_REG (0x1058) +#define EXYNOS5433_APOLLO_CPU2_SYS_PWR_REG (0x1060) +#define EXYNOS5433_DIS_IRQ_APOLLO_CPU2_CENTRAL_SYS_PWR_REG (0x1068) +#define EXYNOS5433_APOLLO_CPU3_SYS_PWR_REG (0x1070) +#define EXYNOS5433_DIS_IRQ_APOLLO_CPU3_CENTRAL_SYS_PWR_REG (0x1078) +#define EXYNOS5433_ATLAS_NONCPU_SYS_PWR_REG (0x1080) +#define EXYNOS5433_ATLAS_L2_SYS_PWR_REG (0x10C0) +#define EXYNOS5433_APOLLO_L2_SYS_PWR_REG (0x10C4) +#define EXYNOS5433_APOLLO_NONCPU_SYS_PWR_REG (0x1084) +#define EXYNOS5433_A5IS_SYS_PWR_REG (0x10B0) +#define EXYNOS5433_DIS_IRQ_A5IS_LOCAL_SYS_PWR_REG (0x10B4) +#define EXYNOS5433_DIS_IRQ_A5IS_CENTRAL_SYS_PWR_REG (0x10B8) +#define EXYNOS5433_CLKSTOP_CMU_TOP_SYS_PWR_REG (0x1100) +#define EXYNOS5433_CLKRUN_CMU_TOP_SYS_PWR_REG (0x1104) +#define EXYNOS5433_RESET_CMU_TOP_SYS_PWR_REG (0x110C) +#define EXYNOS5433_RESET_CPUCLKSTOP_SYS_PWR_REG (0x111C) +#define EXYNOS5433_CLKSTOP_CMU_MIF_SYS_PWR_REG (0x1120) +#define EXYNOS5433_CLKRUN_CMU_MIF_SYS_PWR_REG (0x1124) +#define EXYNOS5433_RESET_CMU_MIF_SYS_PWR_REG (0x112C) +#define EXYNOS5433_DDRPHY_DLLLOCK_SYS_PWR_REG (0x1138) +#define EXYNOS5433_DISABLE_PLL_CMU_TOP_SYS_PWR_REG (0x1140) +#define EXYNOS5433_DISABLE_PLL_AUD_PLL_SYS_PWR_REG (0x1144) +#define EXYNOS5433_DISABLE_PLL_CMU_MIF_SYS_PWR_REG (0x1160) +#define EXYNOS5433_TOP_BUS_SYS_PWR_REG (0x1180) +#define EXYNOS5433_TOP_RETENTION_SYS_PWR_REG (0x1184) +#define EXYNOS5433_TOP_PWR_SYS_PWR_REG (0x1188) +#define EXYNOS5433_TOP_BUS_MIF_SYS_PWR_REG (0x1190) +#define EXYNOS5433_TOP_RETENTION_MIF_SYS_PWR_REG (0x1194) +#define EXYNOS5433_TOP_PWR_MIF_SYS_PWR_REG (0x1198) +#define EXYNOS5433_LOGIC_RESET_SYS_PWR_REG (0x11A0) +#define EXYNOS5433_OSCCLK_GATE_SYS_PWR_REG (0x11A4) +#define EXYNOS5433_SLEEP_RESET_SYS_PWR_REG (0x11A8) +#define EXYNOS5433_LOGIC_RESET_MIF_SYS_PWR_REG (0x11B0) +#define EXYNOS5433_OSCCLK_GATE_MIF_SYS_PWR_REG (0x11B4) +#define EXYNOS5433_SLEEP_RESET_MIF_SYS_PWR_REG (0x11B8) +#define EXYNOS5433_MEMORY_TOP_SYS_PWR_REG (0x11C0) +#define EXYNOS5433_PAD_RETENTION_LPDDR3_SYS_PWR_REG (0x1200) +#define EXYNOS5433_PAD_RETENTION_JTAG_SYS_PWR_REG (0x1208) +#define EXYNOS5433_PAD_RETENTION_TOP_SYS_PWR_REG (0x1220) +#define EXYNOS5433_PAD_RETENTION_UART_SYS_PWR_REG (0x1224) +#define EXYNOS5433_PAD_RETENTION_EBIA_SYS_PWR_REG (0x1230) +#define EXYNOS5433_PAD_RETENTION_EBIB_SYS_PWR_REG (0x1234) +#define EXYNOS5433_PAD_RETENTION_SPI_SYS_PWR_REG (0x1238) +#define EXYNOS5433_PAD_RETENTION_MIF_SYS_PWR_REG (0x123C) +#define EXYNOS5433_PAD_ISOLATION_SYS_PWR_REG (0x1240) +#define EXYNOS5433_PAD_RETENTION_USBXTI_SYS_PWR_REG (0x1244) +#define EXYNOS5433_PAD_RETENTION_BOOTLDO_SYS_PWR_REG (0x1248) +#define EXYNOS5433_PAD_ISOLATION_MIF_SYS_PWR_REG (0x1250) +#define EXYNOS5433_PAD_RETENTION_FSYSGENIO_SYS_PWR_REG (0x1254) +#define EXYNOS5433_PAD_ALV_SEL_SYS_PWR_REG (0x1260) +#define EXYNOS5433_XXTI_SYS_PWR_REG (0x1284) +#define EXYNOS5433_XXTI26_SYS_PWR_REG (0x1288) +#define EXYNOS5433_EXT_REGULATOR_SYS_PWR_REG (0x12C0) +#define EXYNOS5433_GPIO_MODE_SYS_PWR_REG (0x1300) +#define EXYNOS5433_GPIO_MODE_FSYS0_SYS_PWR_REG (0x1304) +#define EXYNOS5433_GPIO_MODE_MIF_SYS_PWR_REG (0x1320) +#define EXYNOS5433_GPIO_MODE_AUD_SYS_PWR_REG (0x1340) +#define EXYNOS5433_GSCL_SYS_PWR_REG (0x1400) +#define EXYNOS5433_CAM0_SYS_PWR_REG (0x1404) +#define EXYNOS5433_MSCL_SYS_PWR_REG (0x1408) +#define EXYNOS5433_G3D_SYS_PWR_REG (0x140C) +#define EXYNOS5433_DISP_SYS_PWR_REG (0x1410) +#define EXYNOS5433_CAM1_SYS_PWR_REG (0x1414) +#define EXYNOS5433_AUD_SYS_PWR_REG (0x1418) +#define EXYNOS5433_FSYS_SYS_PWR_REG (0x141C) +#define EXYNOS5433_BUS2_SYS_PWR_REG (0x1420) +#define EXYNOS5433_G2D_SYS_PWR_REG (0x1424) +#define EXYNOS5433_ISP0_SYS_PWR_REG (0x1428) +#define EXYNOS5433_MFC_SYS_PWR_REG (0x1430) +#define EXYNOS5433_HEVC_SYS_PWR_REG (0x1438) +#define EXYNOS5433_RESET_SLEEP_FSYS_SYS_PWR_REG (0x15DC) +#define EXYNOS5433_RESET_SLEEP_BUS2_SYS_PWR_REG (0x15E0) +#define EXYNOS5433_ATLAS_CPU0_OPTION (0x2008) +#define EXYNOS5433_CPU_OPTION(_nr) (EXYNOS5433_ATLAS_CPU0_OPTION + (_nr) * 0x80) +#define EXYNOS5433_ATLAS_CPU0_DURATION0 (0x2010) +#define EXYNOS5433_CPU_DURATION(_nr) (EXYNOS5433_ATLAS_CPU0_DURATION0 + (_nr) * 0x80) +#define EXYNOS5433_ATLAS_NONCPU_OPTION (0x2408) +#define EXYNOS5433_APOLLO_NONCPU_OPTION (0x2428) +#define EXYNOS5433_ATLAS_CPUSEQUENCER_OPTION (0x2488) +#define EXYNOS5433_ATLAS_L2_OPTION (0x2608) +#define EXYNOS5433_TOP_PWR_MIF_OPTION (0x2CC8) +#define EXYNOS5433_TOP_PWR_OPTION (0x2C48) +#define EXYNOS5433_PAD_RETENTION_LPDDR3_OPTION (0x3008) #define EXYNOS5433_PAD_RETENTION_AUD_OPTION (0x3028) #define EXYNOS5433_PAD_RETENTION_MMC2_OPTION (0x30C8) #define EXYNOS5433_PAD_RETENTION_TOP_OPTION (0x3108) @@ -666,5 +768,50 @@ #define EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION (0x3248) #define EXYNOS5433_PAD_RETENTION_UFS_OPTION (0x3268) #define EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION (0x32A8) +#define EXYNOS5433_PS_HOLD_CONTROL (0x330C) +#define EXYNOS5433_GSCL_OPTION (0x4008) +#define EXYNOS5433_CAM0_OPTION (0x4028) +#define EXYNOS5433_MSCL_OPTION (0x4048) +#define EXYNOS5433_G3D_OPTION (0x4068) +#define EXYNOS5433_DISP_OPTION (0x4088) +#define EXYNOS5433_AUD_OPTION (0x40C8) +#define EXYNOS5433_FSYS_OPTION (0x40E8) +#define EXYNOS5433_BUS2_OPTION (0x4108) +#define EXYNOS5433_G2D_OPTION (0x4128) +#define EXYNOS5433_ISP_OPTION (0x4148) +#define EXYNOS5433_MFC_OPTION (0x4188) +#define EXYNOS5433_HEVC_OPTION (0x41C8) + +/* EXYNOS5433_PMU_SPARE0 */ +#define EXYNOS5433_EN_NONRET_RESET (1 << 0) + +/* EXYNOS5433_CENTRAL_SEQ_CONFIGURATION */ +#define EXYNOS5433_CENTRALSEQ_PWR_CFG (0x1 << 16) + +/* EXYNOS5433_ATLAS_L2_OPTION */ +#define EXYNOS5433_USE_DEACTIVATE_ACE (0x1 << 19) +#define EXYNOS5433_USE_DEACTIVATE_ACP (0x1 << 18) +#define EXYNOS5433_USE_AUTO_L2FLUSHREQ (0x1 << 17) +#define EXYNOS5433_USE_STANDBYWFIL2 (0x1 << 16) +#define EXYNOS5433_USE_RETENTION (0x1 << 4) + +/* EXYNOS5433_CPU_OPTION */ +#define EXYNOS5433_USE_SMPEN (0x1 << 28) +#define EXYNOS5433_USE_STANDBYWFE (0x1 << 24) +#define EXYNOS5433_USE_STANDBYWFI (0x1 << 16) + +/* EXYNOS5433_PAD_RETENTION_*_OPTION */ +#define EXYNOS5433_INITIATE_WAKEUP_FROM_LOWPOWER (0x1 << 28) + +/* EXYNOS5433_CPU_DURATION */ +#define EXYNOS5433_DUR_WAIT_RESET (0xF << 20) +#define EXYNOS5433_DUR_SCALL (0xF << 4) +#define EXYNOS5433_DUR_SCALL_VALUE (0x1 << 4) + +/* EXYNOS5433_ATLAS_CPUSEQUENCER_OPTION */ +#define EXYNOS5433_SKIP_BLK_PWR_DOWN (0x1 << 8) + +/* EXYNOS5433_UP_SCHEDULER */ +#define EXYNOS5433_ENABLE_ATLAS_CPU (0x1 << 0) #endif /* __LINUX_SOC_EXYNOS_REGS_PMU_H */ -- 2.7.4