exynos: Move pmu driver to driver/soc folder and add exynos7 support
v5 cover exynos: Move pmu driver to driver/soc folder and add exynos7 support
This patch series [1 - 6] performs,
1) Moves pmu driver to driver/soc/samsung folder. This is needed as exynos7 is an arm64 based platform and hence PMU driver should be in driver folder. Some discussion happened about this in the v1 version. Finally adding it in driver/soc folder as it too SoC specific and not a general driver. Entire discussion can be found here (A).
2) Add exynos7 PMU support.
3) Enables the driver for 32bit arm exynos platforms.
TODO: There is some suggestion to split the PMU data for 32 bit and 64 bit Exynos SOC. This can be implemented as a separate optimization patches. Submitting this version without much change from previous version as the merge window is near.
Change from V4:
* Added a new configuration structure for u32 values in patch 4.
* Rebased on Kukjin for-next tree.
Changes from V3:
* Fixed Kconfig as per Russell feedback
* Rebased the series against Pankaj SoC restart consolidation patches (D) as per Kukjin request.
* Link to V3 can be found here (C)
Changes from V2:
* Added review comment changes suggested by Pankaj.
* Removed mfd client support in this patch series. This will be added later in the power domain patch series.
* Link to V2 can be found here (B)
Changes from V1:
* Move pmu driver in driver/soc/samsung folder
* Removed the power domain features. They will posted as a separate series.
* Added exynos7 PMU support.
* Link to v1 can be found here (A)
This complete patch series is rebased on Kukjin for-next tree.
(A) - http://www.spinics.net/lists/linux-samsung-soc/msg38442.html
(B) - http://www.spinics.net/lists/arm-kernel/msg375910.html
(C) - http://www.spinics.net/lists/linux-samsung-soc/msg39237.html
(D) - http://www.spinics.net/lists/linux-samsung-soc/msg39095.html
Amit Daniel Kachhap (6):
ARM: EXYNOS: Move pmu specific header files under "linux/soc/samsung"
ARM: EXYNOS: Move pmu specific headers under "linux/soc/samsung"
drivers: soc: Add support for Exynos PMU driver
driver: soc: exynos-pmu: Add an API to be called after wakeup
driver: soc: exynos-pmu: Add a new structure to allow u32 conf data
drivers: soc: exynos-pmu: Add support for Exynos7
arm: exynos: Select SOC_SAMSUNG config option
arch/arm/mach-exynos/Kconfig | 1 +
arch/arm/mach-exynos/Makefile | 2 +-
arch/arm/mach-exynos/exynos.c | 2 +-
arch/arm/mach-exynos/mcpm-exynos.c | 2 +-
arch/arm/mach-exynos/platsmp.c | 2 +-
arch/arm/mach-exynos/pm.c | 4 +-
arch/arm/mach-exynos/suspend.c | 4 +-
drivers/soc/Kconfig | 1 +
drivers/soc/Makefile | 1 +
drivers/soc/samsung/Kconfig | 20 +
drivers/soc/samsung/Makefile | 1 +
.../pmu.c => drivers/soc/samsung/exynos-pmu.c | 451 +++++++++++++++++++-
.../linux/soc/samsung}/exynos-pmu.h | 1 +
.../linux/soc/samsung/exynos-regs-pmu.h | 273 ++++++++++++
14 files changed, 750 insertions(+), 15 deletions(-)
create mode 100644 drivers/soc/samsung/Kconfig
create mode 100644 drivers/soc/samsung/Makefile
rename arch/arm/mach-exynos/pmu.c => drivers/soc/samsung/exynos-pmu.c (68%)
rename {arch/arm/mach-exynos => include/linux/soc/samsung}/exynos-pmu.h (89%)
rename arch/arm/mach-exynos/regs-pmu.h => include/linux/soc/samsung/exynos-regs-pmu.h (68%)Signature · 1 line
1.7.9.5
PATCH v5 1/6 ARM: EXYNOS: Move pmu specific headers under "linux/soc/samsung"
Moving Exynos PMU specific header file into "include/linux/soc/samsung" thus updated affected files under "mach-exynos" to use new location of these header files.
---
arch/arm/mach-exynos/exynos.c | 2 +-
arch/arm/mach-exynos/mcpm-exynos.c | 2 +-
arch/arm/mach-exynos/platsmp.c | 2 +-
arch/arm/mach-exynos/pm.c | 4 ++--
arch/arm/mach-exynos/pmu.c | 6 ++----
arch/arm/mach-exynos/suspend.c | 4 ++--
.../linux/soc/samsung}/exynos-pmu.h | 0
.../linux/soc/samsung/exynos-regs-pmu.h | 0
8 files changed, 9 insertions(+), 11 deletions(-)
rename {arch/arm/mach-exynos => include/linux/soc/samsung}/exynos-pmu.h (100%)
rename arch/arm/mach-exynos/regs-pmu.h => include/linux/soc/samsung/exynos-regs-pmu.h (100%)arch/arm/mach-exynos/exynos.c +1 -1
@@ -20,6 +20,7 @@#include <linux/platform_device.h> #include <linux/pm_domain.h> #include <linux/irqchip.h> +#include <linux/soc/samsung/exynos-regs-pmu.h> #include <asm/cacheflush.h> #include <asm/hardware/cache-l2x0.h>
@@ -29,7 +30,6 @@#include "common.h" #include "mfc.h" -#include "regs-pmu.h" #include "regs-sys.h" void __iomem *pmu_base_addr;
arch/arm/mach-exynos/mcpm-exynos.c +1 -1
@@ -16,12 +16,12 @@#include <linux/io.h> #include <linux/of_address.h> #include <linux/syscore_ops.h> +#include <linux/soc/samsung/exynos-regs-pmu.h> #include <asm/cputype.h> #include <asm/cp15.h> #include <asm/mcpm.h> -#include "regs-pmu.h" #include "common.h" #define EXYNOS5420_CPUS_PER_CLUSTER 4
arch/arm/mach-exynos/platsmp.c +1 -1
@@ -20,6 +20,7 @@#include <linux/smp.h> #include <linux/io.h> #include <linux/of_address.h> +#include <linux/soc/samsung/exynos-regs-pmu.h> #include <asm/cacheflush.h> #include <asm/cp15.h>
@@ -30,7 +31,6 @@#include <mach/map.h> #include "common.h" -#include "regs-pmu.h" extern void exynos4_secondary_startup (void );
arch/arm/mach-exynos/pm.c +2 -2
@@ -18,6 +18,8 @@#include <linux/cpu_pm.h> #include <linux/io.h> #include <linux/err.h> +#include <linux/soc/samsung/exynos-regs-pmu.h> +#include <linux/soc/samsung/exynos-pmu.h> #include <asm/firmware.h> #include <asm/smp_scu.h>
@@ -26,8 +28,6 @@#include <plat/pm-common.h> #include "common.h" -#include "exynos-pmu.h" -#include "regs-pmu.h" #include "regs-sys.h" static inline void __iomem *exynos_boot_vector_addr (void )
arch/arm/mach-exynos/pmu.c +2 -4
@@ -16,10 +16,8 @@#include <linux/delay.h> #include <linux/notifier.h> #include <linux/reboot.h> - - -#include "exynos-pmu.h" -#include "regs-pmu.h" +#include <linux/soc/samsung/exynos-regs-pmu.h> +#include <linux/soc/samsung/exynos-pmu.h> #define PMU_TABLE_END (-1U)
arch/arm/mach-exynos/suspend.c +2 -2
@@ -21,6 +21,8 @@#include <linux/irqchip/arm-gic.h> #include <linux/err.h> #include <linux/regulator/machine.h> +#include <linux/soc/samsung/exynos-pmu.h> +#include <linux/soc/samsung/exynos-regs-pmu.h> #include <asm/cacheflush.h> #include <asm/hardware/cache-l2x0.h>
@@ -33,9 +35,7 @@#include <plat/regs-srom.h> #include "common.h" -#include "regs-pmu.h" #include "regs-sys.h" -#include "exynos-pmu.h" #define S5P_CHECK_SLEEP 0x00000BAD
include/linux/soc/samsung/exynos-pmu.h renamed from arch/arm/mach-exynos/exynos-pmu.h +0 -0
include/linux/soc/samsung/exynos-regs-pmu.h renamed from arch/arm/mach-exynos/regs-pmu.h +0 -0
Signature · 1 line
1.7.9.5
PATCH v5 2/6 drivers: soc: Add support for Exynos PMU driver
In reply to Amit Daniel KachhapThis patch moves Exynos PMU driver implementation from "arm/mach-exynos" to "drivers/soc/samsung". This driver is mainly used for setting misc bits of register from PMU IP of Exynos SoC which will be required to configure before Suspend/Resume. Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but moving ahead for ARM64 based SoC support, there is a need of this PMU driver in driver/* folder.
This driver uses existing DT binding information and there should be no functionality change in the supported platforms.
--- arch/arm/mach-exynos/Makefile | 2 +- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/samsung/Kconfig | 20 ++++++++++++++++++++ drivers/soc/samsung/Makefile | 1 + .../pmu.c => drivers/soc/samsung/exynos-pmu.c | 0 6 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 drivers/soc/samsung/Kconfig create mode 100644 drivers/soc/samsung/Makefile rename arch/arm/mach-exynos/pmu.c => drivers/soc/samsung/exynos-pmu.c (100%)
arch/arm/mach-exynos/Makefile +1 -1
@@ -9,7 +9,7 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) += -I$(srctree)/$(src)/include -I$(srctree) # Core -obj-$(CONFIG_ARCH_EXYNOS) += exynos.o pmu.o exynos-smc.o firmware.o +obj-$(CONFIG_ARCH_EXYNOS) += exynos.o exynos-smc.o firmware.o obj-$(CONFIG_EXYNOS_CPU_SUSPEND) += pm.o sleep.o obj-$(CONFIG_PM_SLEEP) += suspend.o
drivers/soc/Kconfig +1 -0
@@ -3,5 +3,6 @@ menu "SOC (System On Chip) specific Drivers" source "drivers/soc/qcom/Kconfig" source "drivers/soc/ti/Kconfig" source "drivers/soc/versatile/Kconfig" +source "drivers/soc/samsung/Kconfig" endmenu
drivers/soc/Makefile +1 -0
@@ -6,3 +6,4 @@ obj-$(CONFIG_ARCH_QCOM) += qcom/ obj-$(CONFIG_ARCH_TEGRA) += tegra/ obj-$(CONFIG_SOC_TI) += ti/ obj-$(CONFIG_PLAT_VERSATILE) += versatile/ +obj-$(CONFIG_SOC_SAMSUNG) += samsung/
drivers/soc/samsung/Kconfig new file +20 -0
@@ -0,0 +1,20 @@ +# +# SAMSUNG SOC drivers +# +menu "Samsung SOC drivers support" + +config SOC_SAMSUNG + bool + +config EXYNOS_PMU + bool "Support Exynos Power Management Unit" + depends on ARCH_EXYNOS + default y + help + Exynos SoC have Power Management Unit (PMU) which controls power and + operation state of various components in Exynos SoC. This driver + provides implementation of PMU driver and provides various + functionality like initialisation and transition to various low power + states. + +endmenu
drivers/soc/samsung/Makefile new file +1 -0
@@ -0,0 +1 @@ +obj-$(CONFIG_EXYNOS_PMU) += exynos-pmu.o
drivers/soc/samsung/exynos-pmu.c renamed from arch/arm/mach-exynos/pmu.c +0 -0
Signature · 1 line
1.7.9.5
Kukjin Kim
maintainerPATCH v5 2/6 drivers: soc: Add support for Exynos PMU driver
Quoted 43 lines · Amit Daniel Kachhap
This patch moves Exynos PMU driver implementation from "arm/mach-exynos" to "
drivers/soc/samsung". This driver is mainly used for setting misc bits of register from PMU IP of Exynos SoC which will be required to configure before Suspend/Resume. Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but moving ahead for ARM64 based SoC support, there is a need of this PMU driver in driver/* folder.This driver uses existing DT binding information and there should be no functionality change in the supported platforms.
Signed-off-by Pankaj Dubey <[email protected]>Signed-off-by Amit Daniel Kachhap <[email protected]>--- arch/arm/mach-exynos/Makefile | 2 +- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/samsung/Kconfig | 20 ++++++++++++++++++++ drivers/soc/samsung/Makefile | 1 + .../pmu.c => drivers/soc/samsung/exynos-pmu.c | 0 6 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 drivers/soc/samsung/Kconfig create mode 100644 drivers/soc/samsung/Makefile rename arch/arm/mach-exynos/pmu.c => drivers/soc/samsung/exynos-pmu.c (100%)arch/arm/mach-exynos/Makefile +1
-1@@ -9,7 +9,7 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) += -I$(srctree)/$(src)/include -I$(srctree) # Core -obj-$(CONFIG_ARCH_EXYNOS) += exynos.o pmu.o exynos-smc.o firmware.o +obj-$(CONFIG_ARCH_EXYNOS) += exynos.o exynos-smc.o firmware.o obj-$(CONFIG_EXYNOS_CPU_SUSPEND) += pm.o sleep.o obj-$(CONFIG_PM_SLEEP) += suspend.odrivers/soc/Kconfig +0
-0
drivers/soc/Kconfig menu "SOC (System On Chip) specific Drivers" · line 6
Quoted 4 lines
drivers/soc/Kconfig +1
-0@@ -3,5 +3,6 @@ menu "SOC (System On Chip) specific Drivers" source "drivers/soc/qcom/Kconfig" source "drivers/soc/ti/Kconfig" source "drivers/soc/versatile/Kconfig" +source "drivers/soc/samsung/Kconfig"
Alphabetical order?
[...]
- Kukjin
PATCH v5 2/6 drivers: soc: Add support for Exynos PMU driver
Quoted 37 lines · Kukjin Kim
Quoted 36 lines · Amit Daniel Kachhap
This patch moves Exynos PMU driver implementation from "arm/mach-exynos" to "
drivers/soc/samsung". This driver is mainly used for setting misc bits of register from PMU IP of Exynos SoC which will be required to configure before Suspend/Resume. Currently all these settings are done in "arch/arm/mach-exynos/pmu.c" but moving ahead for ARM64 based SoC support, there is a need of this PMU driver in driver/* folder.This driver uses existing DT binding information and there should be no functionality change in the supported platforms.
Signed-off-by Pankaj Dubey <[email protected]>Signed-off-by Amit Daniel Kachhap <[email protected]>--- arch/arm/mach-exynos/Makefile | 2 +- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/samsung/Kconfig | 20 ++++++++++++++++++++ drivers/soc/samsung/Makefile | 1 + .../pmu.c => drivers/soc/samsung/exynos-pmu.c | 0 6 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 drivers/soc/samsung/Kconfig create mode 100644 drivers/soc/samsung/Makefile rename arch/arm/mach-exynos/pmu.c => drivers/soc/samsung/exynos-pmu.c (100%)arch/arm/mach-exynos/Makefile +1
-1@@ -9,7 +9,7 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) += -I$(srctree)/$(src)/include -I$(srctree) # Core -obj-$(CONFIG_ARCH_EXYNOS) += exynos.o pmu.o exynos-smc.o firmware.o +obj-$(CONFIG_ARCH_EXYNOS) += exynos.o exynos-smc.o firmware.o
Quoted 13 lines
drivers/soc/Kconfig menu "SOC (System On Chip) specific Drivers" · line 6
Quoted 11 lines
arch/arm/mach-exynos/Makefile +0
-0obj-$(CONFIG_EXYNOS_CPU_SUSPEND) += pm.o sleep.o obj-$(CONFIG_PM_SLEEP) += suspend.odrivers/soc/Kconfig +1
-0@@ -3,5 +3,6 @@ menu "SOC (System On Chip) specific Drivers" source "drivers/soc/qcom/Kconfig" source "drivers/soc/ti/Kconfig" source "drivers/soc/versatile/Kconfig" +source "drivers/soc/samsung/Kconfig"Alphabetical order?
Ok, will add in the next version.
Quoted 9 lines
[...]
- Kukjin
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v5 3/6 driver: soc: exynos-pmu: Add an API to be called after wakeup
In reply to Amit Daniel KachhapThis patch adds an API exynos_sys_powerup_conf to be called after system sleep wakeup. This will useful for exynos7 SoC to perform resume related initialisations. This is similar to currently existing API exynos_sys_powerdown_conf.
--- drivers/soc/samsung/exynos-pmu.c | 9 +++++++++ include/linux/soc/samsung/exynos-pmu.h | 1 + 2 files changed, 10 insertions(+)
drivers/soc/samsung/exynos-pmu.c +9 -0
@@ -33,6 +33,7 @@ struct exynos_pmu_data {void (*pmu_init)(void );void (*powerdown_conf)(enum sys_powerdown );void (*powerdown_conf_extra)(enum sys_powerdown ); +void (*powerup_conf)(enum sys_powerdown ); };struct exynos_pmu_context {
@@ -768,6 +769,14 @@ void exynos_sys_powerdown_conf(enum sys_powerdown mode) } } +void exynos_sys_powerup_conf (enum sys_powerdown mode) +{ +const struct exynos_pmu_data *pmu_data = pmu_context->pmu_data; + +if (pmu_data->powerup_conf) + pmu_data->powerup_conf (mode); +} +static void exynos3250_pmu_init (void ) {unsigned int value;
include/linux/soc/samsung/exynos-pmu.h +1 -0
@@ -20,5 +20,6 @@ enum sys_powerdown { };extern void exynos_sys_powerdown_conf (enum sys_powerdown mode); +extern void exynos_sys_powerup_conf (enum sys_powerdown mode);#endif /* __EXYNOS_PMU_H */
Signature · 1 line
1.7.9.5
Kukjin Kim
maintainerPATCH v5 3/6 driver: soc: exynos-pmu: Add an API to be called after wakeup
Quoted 8 lines · Amit Daniel Kachhap
This patch adds an API
exynos_sys_powerup_confto be called after system sleep wakeup. This will useful for exynos7 SoC to perform resume related initialisations. This is similar to currently existing APIexynos_sys_powerdown_conf.Reviewed-by Pankaj Dubey <[email protected]>Signed-off-by Amit Daniel Kachhap <[email protected]>
In subject,
"driver: soc..." -> "drivers: soc..." ?
- Kukjin
Quoted 45 lines
--- drivers/soc/samsung/exynos-pmu.c | 9 +++++++++ include/linux/soc/samsung/exynos-pmu.h | 1 + 2 files changed, 10 insertions(+)drivers/soc/samsung/exynos-pmu.c +9
-0@@ -33,6 +33,7 @@ struct exynos_pmu_data {void (*pmu_init)(void );void (*powerdown_conf)(enum sys_powerdown );void (*powerdown_conf_extra)(enum sys_powerdown ); +void (*powerup_conf)(enum sys_powerdown ); };struct exynos_pmu_context {@@ -768,6 +769,14 @@ void exynos_sys_powerdown_conf(enum sys_powerdown mode) } } +void exynos_sys_powerup_conf (enum sys_powerdown mode) +{ +const struct exynos_pmu_data *pmu_data = pmu_context->pmu_data; + +if (pmu_data->powerup_conf) + pmu_data->powerup_conf (mode); +} +static void exynos3250_pmu_init (void ) {unsigned int value;include/linux/soc/samsung/exynos-pmu.h +1
-1@@ -20,5 +20,6 @@ enum sys_powerdown { };extern void exynos_sys_powerdown_conf (enum sys_powerdown mode); +extern void exynos_sys_powerup_conf (enum sys_powerdown mode);#endif /* __EXYNOS_PMU_H */ --1.7.9.5
PATCH v5 3/6 driver: soc: exynos-pmu: Add an API to be called after wakeup
Quoted 7 lines · Kukjin Kim
Quoted 6 lines · Amit Daniel Kachhap
This patch adds an API
exynos_sys_powerup_confto be called after system sleep wakeup. This will useful for exynos7 SoC to perform resume related initialisations. This is similar to currently existing APIexynos_sys_powerdown_conf.
Quoted 6 lines
Quoted 2 lines
Reviewed-by Pankaj Dubey <[email protected]>Signed-off-by Amit Daniel Kachhap <[email protected]>In subject,
"driver: soc..." -> "drivers: soc..." ?
Ok will change.
Quoted 53 lines
- Kukjin
Quoted 44 lines
--- drivers/soc/samsung/exynos-pmu.c | 9 +++++++++ include/linux/soc/samsung/exynos-pmu.h | 1 + 2 files changed, 10 insertions(+)drivers/soc/samsung/exynos-pmu.c +9
-0@@ -33,6 +33,7 @@ struct exynos_pmu_data {void (*pmu_init)(void );void (*powerdown_conf)(enum sys_powerdown );void (*powerdown_conf_extra)(enum sys_powerdown ); +void (*powerup_conf)(enum sys_powerdown ); };struct exynos_pmu_context {@@ -768,6 +769,14 @@ void exynos_sys_powerdown_conf(enum sys_powerdown mode) } } +void exynos_sys_powerup_conf (enum sys_powerdown mode) +{ +const struct exynos_pmu_data *pmu_data = pmu_context->pmu_data; + +if (pmu_data->powerup_conf) + pmu_data->powerup_conf (mode); +} +static void exynos3250_pmu_init (void ) {unsigned int value;include/linux/soc/samsung/exynos-pmu.h +1
-1@@ -20,5 +20,6 @@ enum sys_powerdown { };extern void exynos_sys_powerdown_conf (enum sys_powerdown mode); +extern void exynos_sys_powerup_conf (enum sys_powerdown mode);#endif /* __EXYNOS_PMU_H */ --Quoted 1 line
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v5 4/6 driver: soc: exynos-pmu: Add a new structure to allow u32 conf data
In reply to Amit Daniel KachhapCommit b04fa9f "ARM: EXYNOS: use u8 for val[] in struct exynos_pmu_conf" modifies the structure to allow only u8 type configuration data. To support SoC's which need u32 type data a new structure is added.
--- drivers/soc/samsung/exynos-pmu.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/soc/samsung/exynos-pmu.c +7 -2
@@ -26,9 +26,14 @@ struct exynos_pmu_conf {u8 val[NUM_SYS_POWERDOWN ]; }; +struct exynos_pmu_conf_extra { +u32 offset; +u32 val[NUM_SYS_POWERDOWN ]; +}; +struct exynos_pmu_data {const struct exynos_pmu_conf *pmu_config; -const struct exynos_pmu_conf *pmu_config_extra; +const struct exynos_pmu_conf_extra *pmu_config_extra;void (*pmu_init)(void );void (*powerdown_conf)(enum sys_powerdown );
@@ -324,7 +329,7 @@ static const struct exynos_pmu_conf exynos4x12_pmu_config[] = { { PMU_TABLE_END,}, }; -static const struct exynos_pmu_conf exynos4412_pmu_config[] = { +static const struct exynos_pmu_conf_extra exynos4412_pmu_config[] = { {S5P_ARM_CORE2_LOWPWR , {0x0 ,0x0 ,0x2 } }, {S5P_DIS_IRQ_CORE2 , {0x0 ,0x0 ,0x0 } }, {S5P_DIS_IRQ_CENTRAL2 , {0x0 ,0x0 ,0x0 } },
Signature · 1 line
1.7.9.5
PATCH v5 5/6 drivers: soc: exynos-pmu: Add support for Exynos7
In reply to Amit Daniel KachhapAdd PMU settings for exynos7. This is required for future suspend-to-ram, cpuidle and power domain support.
Note: In this patch some static declarations lines are over 80 characters per line for easy redability.
--- drivers/soc/samsung/exynos-pmu.c | 427 ++++++++++++++++++++++++++- include/linux/soc/samsung/exynos-regs-pmu.h | 273 +++++++++++++++++ 2 files changed, 699 insertions(+), 1 deletion(-)
drivers/soc/samsung/exynos-pmu.c +426 -1
@@ -48,6 +48,7 @@ struct exynos_pmu_context {static void __iomem *pmu_base_addr;static struct exynos_pmu_context *pmu_context; +extern u32 exynos_get_eint_wake_mask (void );static inline void pmu_raw_writel (u32 val,u32 offset) {
@@ -627,6 +628,211 @@ static void exynos3250_powerdown_conf_extra(enum sys_powerdown mode) EXYNOS3_EXT_REGULATOR_COREBLK_DURATION); } +static const struct exynos_pmu_conf exynos7_pmu_config[] = { +/* { .offset = offset, .val = { AFTR, LPA, SLEEP } } */ + {EXYNOS7_ATLAS_CPU0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU0_LOCAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU0_CENTRAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU0_CPUSEQUENCER_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_ATLAS_CPU1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU1_LOCAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU1_CENTRAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU1_CPUSEQUENCER_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_ATLAS_CPU2_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU2_LOCAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU2_CENTRAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU2_CPUSEQUENCER_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_ATLAS_CPU3_SYS_PWR_REG , {0x0 ,0x0 ,0x8 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU3_LOCAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU3_CENTRAL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DIS_IRQ_ATLAS_CPU3_CPUSEQUENCER_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_ATLAS_NONCPU_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_ATLAS_DBG_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_ATLAS_L2_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_TOP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_TOP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_TOP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CPUCLKSTOP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_MIF_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_DDRPHY_DLLLOCK_SYS_PWR_REG , {0x1 ,0x1 ,0x1 } }, + {EXYNOS7_DISABLE_PLL_CMU_TOP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_TOP_BUS_SYS_PWR_REG , {0x7 ,0x0 ,0x0 } }, + {EXYNOS7_TOP_RETENTION_SYS_PWR_REG , {0x1 ,0x0 ,0x1 } }, + {EXYNOS7_TOP_PWR_SYS_PWR_REG , {0x3 ,0x0 ,0x3 } }, + {EXYNOS7_TOP_BUS_MIF_SYS_PWR_REG , {0x7 ,0x0 ,0x0 } }, + {EXYNOS7_TOP_RETENTION_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x1 } }, + {EXYNOS7_TOP_PWR_MIF_SYS_PWR_REG , {0x3 ,0x0 ,0x3 } }, + {EXYNOS7_RET_OSCCLK_GATE_SYS_PWR_REG , {0x1 ,0x0 ,0x1 } }, + {EXYNOS7_LOGIC_RESET_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_OSCCLK_GATE_SYS_PWR_REG , {0x1 ,0x0 ,0x1 } }, + {EXYNOS7_SLEEP_RESET_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_LOGIC_RESET_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_OSCCLK_GATE_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x1 } }, + {EXYNOS7_SLEEP_RESET_MIF_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_RET_OSCCLK_GATE_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x1 } }, + {EXYNOS7_MEMORY_TOP_SYS_PWR_REG , {0x3 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_TOP_ALV_SYS_PWR_REG , {0x3 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_LPDDR4_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_AUD_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_JTAG_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_MMC2_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_TOP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_UART_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_MMC0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_MMC1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_EBIA_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_EBIB_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_SPI_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_ISOLATION_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_LLI_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_UFS_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_ISOLATION_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_RETENTION_FSYSGENIO_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_PAD_ALV_SEL_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_XXTI_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_XXTI26_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_EXT_REGULATOR_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_GPIO_MODE_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_GPIO_MODE_FSYS0_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_GPIO_MODE_FSYS1_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_GPIO_MODE_BUS0_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_GPIO_MODE_MIF_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_GPIO_MODE_AUD_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_ATLAS_SYS_PWR_REG , {0xF ,0xF ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_ATLAS_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_ATLAS_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_ATLAS_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_ATLAS_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_ATLAS_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_ATLAS_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_SLEEP_ATLAS_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_AUD_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_BUS0_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_CAM0_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_CAM1_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_DISP_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_FSYS0_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_FSYS1_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_G2D_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_G3D_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_HEVC_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_ISP0_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_ISP1_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_MFC_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_MSCL_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_VPP_SYS_PWR_REG , {0xF ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_AUD_SYS_PWR_REG , {0x0 ,0x1 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_BUS0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_DISP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_FSYS0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_FSYS1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_G2D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_G3D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_HEVC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_ISP0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_ISP1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_MFC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_MSCL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKRUN_CMU_VPP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_AUD_SYS_PWR_REG , {0x0 ,0x1 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_BUS0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_DISP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_FSYS0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_FSYS1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_G2D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_G3D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_HEVC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_ISP0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_ISP1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_MFC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_MSCL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CLKSTOP_CMU_VPP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_AUD_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_BUS0_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_DISP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_FSYS0_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_FSYS1_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_G2D_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_G3D_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_HEVC_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_ISP0_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_ISP1_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_MFC_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_MSCL_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_DISABLE_PLL_CMU_VPP_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_AUD_SYS_PWR_REG , {0x0 ,0x1 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_BUS0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_DISP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_FSYS0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_FSYS1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_G2D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_G3D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_HEVC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_ISP0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_ISP1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_MFC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_MSCL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_LOGIC_VPP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_AUD_SYS_PWR_REG , {0x0 ,0x3 ,0x0 } }, + {EXYNOS7_MEMORY_DISP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_FSYS0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_FSYS1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_G2D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_G3D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_HEVC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_ISP0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_ISP1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_MFC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_MSCL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_MEMORY_VPP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_AUD_SYS_PWR_REG , {0x0 ,0x1 ,0x0 } }, + {EXYNOS7_RESET_CMU_BUS0_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_DISP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_FSYS0_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_FSYS1_SYS_PWR_REG , {0x1 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_G2D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_G3D_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_HEVC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_ISP0_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_ISP1_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_MFC_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_MSCL_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_CMU_VPP_SYS_PWR_REG , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_RESET_SLEEP_BUS0_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_RESET_SLEEP_FSYS0_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {EXYNOS7_RESET_SLEEP_FSYS1_SYS_PWR_REG , {0x1 ,0x1 ,0x0 } }, + {PMU_TABLE_END , }, +}; + +/* Extra PMU configurations (provided by hardware team) that are not part +* of the UM */ +static const struct exynos_pmu_conf_extra exynos7_pmu_config_extra[] = { +/* { .offset = offset, .val = { AFTR, LPA, SLEEP } } */ + {EXYNOS7_PMU_SYNC_CTRL , {0x0 ,0x0 ,0x0 } }, + {EXYNOS7_CENTRAL_SEQ_MIF_OPTION , {0x1000 ,0x1000 ,0x0 } }, + {EXYNOS7_WAKEUP_MASK_MIF , {0x100013 ,0x100013 ,0x0 } }, + {EXYNOS7_ATLAS_NONCPU_OPTION , {0x11 ,0x11 ,0x11 } }, + {EXYNOS7_MEMORY_TOP_OPTION , {0x11 ,0x11 ,0x1 } }, + {EXYNOS7_MEMORY_TOP_ALV_OPTION , {0x11 ,0x11 ,0x11 } }, + {EXYNOS7_RESET_CMU_TOP_OPTION , {0x0 ,0x80000000 ,0x0 } }, + {EXYNOS7_ATLAS_OPTION , {0x101 ,0x101 ,0x80001101 } }, + {EXYNOS7_BUS0_OPTION , {0x101 ,0x101 ,0x1101 } }, + {EXYNOS7_FSYS0_OPTION , {0x101 ,0x101 ,0x1101 } }, + {EXYNOS7_FSYS1_OPTION , {0x101 ,0x101 ,0x1101 } }, + {EXYNOS7_AUD_OPTION , {0x101 ,0xC0000101 ,0x101 } }, + {EXYNOS7_G3D_OPTION , {0x181 ,0x181 ,0x181 } }, + {EXYNOS7_SLEEP_RESET_OPTION , {0x100000 ,0x100000 ,0x100000 } }, + {EXYNOS7_TOP_PWR_OPTION , {0x1 ,0x80800002 ,0x1 } }, + {EXYNOS7_TOP_PWR_MIF_OPTION , {0x1 ,0x1 ,0x1 } }, + {EXYNOS7_LOGIC_RESET_OPTION , {0x0 ,0x80000000 ,0x0 } }, + {EXYNOS7_TOP_RETENTION_OPTION , {0x0 ,0x80000000 ,0x0 } }, + {PMU_TABLE_END , }, +}; +static unsigned int const exynos5_list_both_cnt_feed[] = {EXYNOS5_ARM_CORE0_OPTION ,EXYNOS5_ARM_CORE1_OPTION ,
@@ -685,6 +891,26 @@ static unsigned int const exynos5420_list_disable_pmu_reg[] = { EXYNOS5420_CMU_RESET_FSYS_SYS_PWR_REG, }; +static unsigned int const exynos7_list_feed[] = { +EXYNOS7_ATLAS_NONCPU_OPTION , +EXYNOS7_TOP_PWR_OPTION , +EXYNOS7_TOP_PWR_MIF_OPTION , +EXYNOS7_AUD_OPTION , +EXYNOS7_CAM0_OPTION , +EXYNOS7_DISP_OPTION , +EXYNOS7_G2D_OPTION , +EXYNOS7_G3D_OPTION , +EXYNOS7_HEVC_OPTION , +EXYNOS7_MSCL_OPTION , +EXYNOS7_MFC_OPTION , +EXYNOS7_BUS0_OPTION , +EXYNOS7_FSYS0_OPTION , +EXYNOS7_FSYS1_OPTION , +EXYNOS7_ISP0_OPTION , +EXYNOS7_ISP1_OPTION , +EXYNOS7_VPP_OPTION , +}; +static void exynos5_power_off (void ) {unsigned int tmp;
@@ -715,7 +941,6 @@ void exynos5420_powerdown_conf(enum sys_powerdown mode)pmu_raw_writel (this_cluster,EXYNOS_IROM_DATA2 ); } -static void exynos5_powerdown_conf (enum sys_powerdown mode) {unsigned int i;
@@ -897,6 +1122,195 @@ static int pmu_restart_notify(struct notifier_block *this,return NOTIFY_DONE ; } +static void exynos7_set_wakeupmask (enum sys_powerdown mode) +{ +u32 intmask =0 ; + +pmu_raw_writel (exynos_get_eint_wake_mask (),EXYNOS7_EINT_WAKEUP_MASK ); + +switch (mode) { +case SYS_SLEEP : +/* BIT(31): deactivate wakeup event monitoring circuit */ + intmask =0x7FFFFFFF ; +break ; +default : +break ; + } +pmu_raw_writel (intmask,EXYNOS7_WAKEUP_MASK ); +pmu_raw_writel (0xFFFF0000 ,EXYNOS7_WAKEUP_MASK2 ); +pmu_raw_writel (0xFFFF0000 ,EXYNOS7_WAKEUP_MASK3 ); +} + +static void exynos7_clear_wakeupmask (void ) +{ +pmu_raw_writel (0 ,EXYNOS7_EINT_WAKEUP_MASK ); +pmu_raw_writel (0 ,EXYNOS7_WAKEUP_MASK ); +pmu_raw_writel (0 ,EXYNOS7_WAKEUP_MASK2 ); +pmu_raw_writel (0 ,EXYNOS7_WAKEUP_MASK3 ); +} + +static void exynos7_pmu_central_seq (bool enable) +{ +unsigned int tmp; + +/* central sequencer */ + tmp =pmu_raw_readl (EXYNOS7_CENTRAL_SEQ_CONFIGURATION ); +if (enable) + tmp &= ~EXYNOS7_CENTRALSEQ_PWR_CFG ; +else + tmp |=EXYNOS7_CENTRALSEQ_PWR_CFG ; +pmu_raw_writel (tmp,EXYNOS7_CENTRAL_SEQ_CONFIGURATION ); + +/* central sequencer MIF */ + tmp =pmu_raw_readl (EXYNOS7_CENTRAL_SEQ_MIF_CONFIGURATION ); +if (enable) + tmp &= ~EXYNOS7_CENTRALSEQ_PWR_CFG ; +else + tmp |=EXYNOS7_CENTRALSEQ_PWR_CFG ; +pmu_raw_writel (tmp,EXYNOS7_CENTRAL_SEQ_MIF_CONFIGURATION ); +} + +static void exynos7_pmu_pad_retention_release (void ) +{ +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_AUD_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_MMC2_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_TOP_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_UART_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_MMC0_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_MMC1_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_EBIA_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_EBIB_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_SPI_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_MIF_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP ,EXYNOS7_PAD_RETENTION_UFS_OPTION ); +pmu_raw_writel (PAD_INITIATE_WAKEUP , +EXYNOS7_PAD_RETENTION_FSYSGENIO_OPTION ); +} + +static void exynos7_powerdown_conf (enum sys_powerdown mode) +{ +exynos7_set_wakeupmask (mode); +exynos7_pmu_central_seq (true); +if (!(pmu_raw_readl (EXYNOS7_PMU_DEBUG ) & +EXYNOS7_CLKOUT_DISABLE )) +pmu_raw_writel (0x1 ,EXYNOS7_XXTI_SYS_PWR_REG ); +} + +static void exynos7_show_wakeup_reason (void ) +{ +unsigned int wakeup_stat; + + wakeup_stat =pmu_raw_readl (EXYNOS7_WAKEUP_STAT ); + +if (wakeup_stat &EXYNOS7_WAKEUP_STAT_RTC_ALARM ) +pr_info ("Resume caused by RTC alarm\n" ); +else +pr_info ("Resume caused by wakeup_stat 0x%08x\n" , + wakeup_stat); +} + +static void exynos7_powerup_conf (enum sys_powerdown mode) +{ +/* Check early wake up*/ +unsigned int wakeup; + + wakeup =pmu_raw_readl (EXYNOS7_CENTRAL_SEQ_CONFIGURATION ); + wakeup &=EXYNOS7_CENTRALSEQ_PWR_CFG ; +if (wakeup) +/* Proper wakeup*/ +exynos7_pmu_pad_retention_release (); +else +/* Early wakeup */ +exynos7_pmu_central_seq (false); + +exynos7_clear_wakeupmask (); +exynos7_show_wakeup_reason (); +} + +static void exynos7_pmu_init (void ) +{ +unsigned int cpu; +unsigned int tmp, i; +struct device_node *node; +static void __iomem *atlas_cmu_base; + +/* Enable only SC_FEEDBACK for the register list */ +for (i =0 ; i <ARRAY_SIZE (exynos7_list_feed) ; i++) { + tmp =pmu_raw_readl (exynos7_list_feed[i]); + tmp &= ~EXYNOS5_USE_SC_COUNTER ; + tmp |=EXYNOS5_USE_SC_FEEDBACK ; +pmu_raw_writel (tmp, exynos7_list_feed[i]); + } + +/* +* Disable automatic L2 flush, Disable L2 retention and +* Enable STANDBYWFIL2, ACE/ACP +*/ + tmp =pmu_raw_readl (EXYNOS7_ATLAS_L2_OPTION ); + tmp &= ~(EXYNOS7_USE_AUTO_L2FLUSHREQ |EXYNOS7_USE_RETENTION ); + tmp |= (EXYNOS7_USE_STANDBYWFIL2 | +EXYNOS7_USE_DEACTIVATE_ACE | +EXYNOS7_USE_DEACTIVATE_ACP ); +pmu_raw_writel (tmp,EXYNOS7_ATLAS_L2_OPTION ); + +/* +* 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 <4 ; cpu++) { + tmp =pmu_raw_readl (EXYNOS7_CPU_OPTION (cpu)); + tmp |= (EXYNOS5_USE_SC_FEEDBACK |EXYNOS5_USE_SC_COUNTER ); + tmp |=EXYNOS7_USE_SMPEN ; + tmp |=EXYNOS7_USE_STANDBYWFI ; + tmp &= ~EXYNOS7_USE_STANDBYWFE ; +pmu_raw_writel (tmp,EXYNOS7_CPU_OPTION (cpu)); + + tmp =pmu_raw_readl (EXYNOS7_CPU_DURATION (cpu)); + tmp |=EXYNOS7_DUR_WAIT_RESET ; + tmp &= ~EXYNOS7_DUR_SCALL ; + tmp |=EXYNOS7_DUR_SCALL_VALUE ; +pmu_raw_writel (tmp,EXYNOS7_CPU_DURATION (cpu)); + } + +/* Skip atlas block power-off during automatic power down sequence */ + tmp =pmu_raw_readl (EXYNOS7_ATLAS_CPUSEQUENCER_OPTION ); + tmp |=EXYNOS7_SKIP_BLK_PWR_DOWN ; +pmu_raw_writel (tmp,EXYNOS7_ATLAS_CPUSEQUENCER_OPTION ); + +/* Limit in-rush current during local power up of cores */ + tmp =pmu_raw_readl (EXYNOS7_UP_SCHEDULER ); + tmp |=EXYNOS7_ENABLE_ATLAS_CPU ; +pmu_raw_writel (tmp,EXYNOS7_UP_SCHEDULER ); + +/* Enable PS hold and hardware tripping */ + tmp =pmu_raw_readl (EXYNOS7_PS_HOLD_CONTROL ); + tmp |=EXYNOS7_PS_HOLD_OUTPUT ; + tmp |=EXYNOS7_ENABLE_HW_TRIP ; +pmu_raw_writel (tmp,EXYNOS7_PS_HOLD_CONTROL ); + +/* Enable debug area of atlas cpu */ + tmp =pmu_raw_readl (EXYNOS7_ATLAS_DBG_CONFIGURATION ); + tmp |=EXYNOS7_DBG_INITIATE_WAKEUP ; +pmu_raw_writel (tmp,EXYNOS7_ATLAS_DBG_CONFIGURATION ); + +/* +* Set clock freeze cycle count to 0 before and after arm clamp or +* reset signal transition +*/ + node =of_find_compatible_node (NULL ,NULL , +"samsung,exynos7-clock-atlas" ); +if (node) { + atlas_cmu_base =of_iomap (node,0 ); +if (!atlas_cmu_base) +return ; + +__raw_writel (0x0 , + atlas_cmu_base +EXYNOS7_CORE_ARMCLK_STOPCTRL ); +iounmap (atlas_cmu_base); + } +} +static const struct exynos_pmu_data exynos3250_pmu_data = { .pmu_config = exynos3250_pmu_config, .pmu_init = exynos3250_pmu_init,
@@ -928,6 +1342,14 @@ static struct exynos_pmu_data exynos5420_pmu_data = { .powerdown_conf = exynos5420_powerdown_conf, }; +static const struct exynos_pmu_data exynos7_pmu_data = { + .pmu_config = exynos7_pmu_config, + .pmu_init = exynos7_pmu_init, + .pmu_config_extra = exynos7_pmu_config_extra, + .powerdown_conf = exynos7_powerdown_conf, + .powerup_conf = exynos7_powerup_conf, +}; +/* * PMU platform driver and devicetree bindings. */
@@ -950,6 +1372,9 @@ static const struct of_device_id exynos_pmu_of_device_ids[] = { }, { .compatible = "samsung,exynos5420-pmu", .data = &exynos5420_pmu_data, + }, { + .compatible = "samsung,exynos7-pmu", + .data = &exynos7_pmu_data, }, { /*sentinel*/ }, };
include/linux/soc/samsung/exynos-regs-pmu.h +273 -0
277 lines not on this page · raw message
Signature · 1 line
1.7.9.5
Kukjin Kim
maintainerPATCH v5 5/6 drivers: soc: exynos-pmu: Add support for Exynos7
Quoted 7 lines · Amit Daniel Kachhap
Add PMU settings for exynos7. This is required for future suspend-to-ram, cpuidle and power domain support.
Note: In this patch some static declarations lines are over 80 characters per line for easy redability.
Quoted 9 lines
Reviewed-by Pankaj Dubey <[email protected]>Signed-off-by Eunseok Choi <[email protected]>Signed-off-by Abhilash Kesavan <[email protected]>Signed-off-by Amit Daniel Kachhap <[email protected]>--- drivers/soc/samsung/exynos-pmu.c | 427 ++++++++++++++++++++++++++- include/linux/soc/samsung/exynos-regs-pmu.h | 273 +++++++++++++++++ 2 files changed, 699 insertions(+), 1 deletion(-)
I'm not sure all of the definitions in exynos-regs-pmu are required?...too many, and I couldn't check the addresses are correct ;)
And how about splitting to each SoC specific file in drivers/soc/samsung/ ? For example, exynos-pmu.c and exynos7-pmu.c like cpufreq...? Just considering.
- Kukjin
PATCH v5 5/6 drivers: soc: exynos-pmu: Add support for Exynos7
Quoted 17 lines · Kukjin Kim
Quoted 7 lines · Amit Daniel Kachhap
Add PMU settings for exynos7. This is required for future suspend-to-ram, cpuidle and power domain support.
Note: In this patch some static declarations lines are over 80 characters per line for easy redability.
Quoted 9 lines
Reviewed-by Pankaj Dubey <[email protected]>Signed-off-by Eunseok Choi <[email protected]>Signed-off-by Abhilash Kesavan <[email protected]>Signed-off-by Amit Daniel Kachhap <[email protected]>--- drivers/soc/samsung/exynos-pmu.c | 427 ++++++++++++++++++++++++++- include/linux/soc/samsung/exynos-regs-pmu.h | 273 +++++++++++++++++ 2 files changed, 699 insertions(+), 1 deletion(-)
Quoted 2 lines
I'm not sure all of the definitions in exynos-regs-pmu are required?...too many, and I couldn't check the addresses are correct ;)
Actually i added the PMU power down for almost all the IP's of Exynos7 as this is full system power down.
I have taken care to add only used macros.
Quoted 3 lines
And how about splitting to each SoC specific file in
drivers/soc/samsung/? For example,exynos-pmu.candexynos7-pmu.clike cpufreq...? Just considering.
Pankaj posted a patch which takes care of this.
Regards,
Amit D.
Quoted 7 lines
- Kukjin
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v5 5/6 drivers: soc: exynos-pmu: Add support for Exynos7
Hi,
Quoted 20 lines · amit daniel kachhap
Quoted 17 lines · Kukjin Kim
Quoted 7 lines · Amit Daniel Kachhap
Add PMU settings for exynos7. This is required for future suspend-to-ram, cpuidle and power domain support.
Note: In this patch some static declarations lines are over 80 characters per line for easy redability.
Quoted 9 lines
Reviewed-by Pankaj Dubey <[email protected]>Signed-off-by Eunseok Choi <[email protected]>Signed-off-by Abhilash Kesavan <[email protected]>Signed-off-by Amit Daniel Kachhap <[email protected]>--- drivers/soc/samsung/exynos-pmu.c | 427 ++++++++++++++++++++++++++- include/linux/soc/samsung/exynos-regs-pmu.h | 273 +++++++++++++++++ 2 files changed, 699 insertions(+), 1 deletion(-)Quoted 2 lines
I'm not sure all of the definitions in exynos-regs-pmu are required?...too many, and I couldn't check the addresses are correct ;)
Quoted 8 lines
Actually i added the PMU power down for almost all the IP's of Exynos7 as this is full system power down.
I have taken care to add only used macros.Quoted 3 lines
And how about splitting to each SoC specific file in
drivers/soc/samsung/? For example,exynos-pmu.candexynos7-pmu.clike cpufreq...? Just considering.Pankaj posted a patch which takes care of this.
It looks like something went wrong, I can't see my post on Samsung and ARM mailing list, but it appeared on LKML. here is link for it..
https://lkml.org/lkml/2014/11/30/175
Thanks,
Pankaj Dubey
Quoted 14 lines
Regards,
Amit D.Quoted 7 lines
- Kukjin
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH v5 6/6 arm: exynos: Select SOC_SAMSUNG config option
In reply to Amit Daniel KachhapThe config option SOC_SAMSUNG is needed to enable all soc samsung drivers inside driver/soc/samsung folder. Currently, this will be useful to enable exynos pmu driver which is moved to that folder.
--- arch/arm/mach-exynos/Kconfig | 1 + 1 file changed, 1 insertion(+)
arch/arm/mach-exynos/Kconfig +1 -0
@@ -25,6 +25,7 @@ menuconfig ARCH_EXYNOS select S5P_DEV_MFC select SRAM select MFD_SYSCON + select SOC_SAMSUNG help Support for SAMSUNG EXYNOS SoCs (EXYNOS4/5)
Signature · 1 line
1.7.9.5
v5 cover exynos: Move pmu driver to driver/soc folder and add exynos7 support
In reply to Amit Daniel KachhapQuoted 10 lines · On Saturday 29 November 2014 19:45:02 Amit Daniel Kachhap wrote:
This patch series [1 - 6] performs,
1) Moves pmu driver to driver/soc/samsung folder. This is needed as exynos7 is an arm64 based platform and hence PMU driver should be in driver folder. Some discussion happened about this in the v1 version. Finally adding it in driver/soc folder as it too SoC specific and not a general driver. Entire discussion can be found here (A).
2) Add exynos7 PMU support.
3) Enables the driver for 32bit arm exynos platforms.
Quoted 4 lines
TODO: There is some suggestion to split the PMU data for 32 bit and 64 bit Exynos SOC. This can be implemented as a separate optimization patches. Submitting this version without much change from previous version as the merge window is near.
I only now saw this series. I think it's a bad idea to have this code shared with arm64 at all, and I want to see a proper driver for the PMU.
Arnd
v5 cover exynos: Move pmu driver to driver/soc folder and add exynos7 support
In reply to Amit Daniel KachhapHi Pankaj,
If you possible, could you add me to mailing list on the next patchset? because I'll support PMU for Exynos5433, too.
Best Regards,
Chanwoo Choi
Quoted 74 lines · Amit Daniel Kachhap
This patch series [1 - 6] performs,
1) Moves pmu driver to driver/soc/samsung folder. This is needed as exynos7 is an arm64 based platform and hence PMU driver should be in driver folder. Some discussion happened about this in the v1 version. Finally adding it in driver/soc folder as it too SoC specific and not a general driver. Entire discussion can be found here (A).
2) Add exynos7 PMU support.
3) Enables the driver for 32bit arm exynos platforms.TODO: There is some suggestion to split the PMU data for 32 bit and 64 bit Exynos SOC. This can be implemented as a separate optimization patches. Submitting this version without much change from previous version as the merge window is near.
Change from V4:
* Added a new configuration structure for u32 values in patch 4.
* Rebased on Kukjin for-next tree.Changes from V3:
* FixedKconfigas per Russell feedback
* Rebased the series against Pankaj SoC restart consolidation patches (D) as per Kukjin request.
* Link to V3 can be found here (C)Changes from V2:
* Added review comment changes suggested by Pankaj.
* Removed mfd client support in this patch series. This will be added later in the power domain patch series.
* Link to V2 can be found here (B)Changes from V1:
* Move pmu driver in driver/soc/samsung folder
* Removed the power domain features. They will posted as a separate series.
* Added exynos7 PMU support.
* Link to v1 can be found here (A)This complete patch series is rebased on Kukjin for-next tree.
(A) - http://www.spinics.net/lists/linux-samsung-soc/msg38442.html
(B) - http://www.spinics.net/lists/arm-kernel/msg375910.html
(C) - http://www.spinics.net/lists/linux-samsung-soc/msg39237.html
(D) - http://www.spinics.net/lists/linux-samsung-soc/msg39095.htmlAmit Daniel Kachhap (6):
ARM: EXYNOS: Move pmu specific header files under "linux/soc/samsung"
ARM: EXYNOS: Move pmu specific headers under "linux/soc/samsung"
drivers: soc: Add support for Exynos PMU driver
driver: soc: exynos-pmu: Add an API to be called after wakeup
driver: soc: exynos-pmu: Add a new structure to allow u32 conf data
drivers: soc: exynos-pmu: Add support for Exynos7
arm: exynos: SelectSOC_SAMSUNGconfig optionarch/arm/mach-exynos/Kconfig | 1 + arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/exynos.c | 2 +- arch/arm/mach-exynos/mcpm-exynos.c | 2 +- arch/arm/mach-exynos/platsmp.c | 2 +- arch/arm/mach-exynos/pm.c | 4 +- arch/arm/mach-exynos/suspend.c | 4 +- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/samsung/Kconfig | 20 + drivers/soc/samsung/Makefile | 1 + .../pmu.c => drivers/soc/samsung/exynos-pmu.c | 451 +++++++++++++++++++- .../linux/soc/samsung}/exynos-pmu.h | 1 + .../linux/soc/samsung/exynos-regs-pmu.h | 273 ++++++++++++ 14 files changed, 750 insertions(+), 15 deletions(-) create mode 100644 drivers/soc/samsung/Kconfig create mode 100644 drivers/soc/samsung/Makefile rename arch/arm/mach-exynos/pmu.c => drivers/soc/samsung/exynos-pmu.c (68%) rename {arch/arm/mach-exynos => include/linux/soc/samsung}/exynos-pmu.h (89%) rename arch/arm/mach-exynos/regs-pmu.h => include/linux/soc/samsung/exynos-regs-pmu.h (68%)
v5 cover exynos: Move pmu driver to driver/soc folder and add exynos7 support
Hi Amit,
I'm so sorry. I used the name of other man on previous mail. If you possbile, I want to include me in the mailing list.
Best Regards,
Chanwoo Choi
Quoted 90 lines · Chanwoo Choi
Hi Pankaj,
If you possible, could you add me to mailing list on the next patchset? because I'll support PMU for Exynos5433, too.
Best Regards,
Chanwoo ChoiQuoted 65 lines · Amit Daniel Kachhap
This patch series [1 - 6] performs,
1) Moves pmu driver to driver/soc/samsung folder. This is needed as exynos7 is an arm64 based platform and hence PMU driver should be in driver folder. Some discussion happened about this in the v1 version. Finally adding it in driver/soc folder as it too SoC specific and not a general driver. Entire discussion can be found here (A).
2) Add exynos7 PMU support.
3) Enables the driver for 32bit arm exynos platforms.TODO: There is some suggestion to split the PMU data for 32 bit and 64 bit Exynos SOC. This can be implemented as a separate optimization patches. Submitting this version without much change from previous version as the merge window is near.
Change from V4:
* Added a new configuration structure for u32 values in patch 4.
* Rebased on Kukjin for-next tree.Changes from V3:
* FixedKconfigas per Russell feedback
* Rebased the series against Pankaj SoC restart consolidation patches (D) as per Kukjin request.
* Link to V3 can be found here (C)Changes from V2:
* Added review comment changes suggested by Pankaj.
* Removed mfd client support in this patch series. This will be added later in the power domain patch series.
* Link to V2 can be found here (B)Changes from V1:
* Move pmu driver in driver/soc/samsung folder
* Removed the power domain features. They will posted as a separate series.
* Added exynos7 PMU support.
* Link to v1 can be found here (A)This complete patch series is rebased on Kukjin for-next tree.
(A) - http://www.spinics.net/lists/linux-samsung-soc/msg38442.html
(B) - http://www.spinics.net/lists/arm-kernel/msg375910.html
(C) - http://www.spinics.net/lists/linux-samsung-soc/msg39237.html
(D) - http://www.spinics.net/lists/linux-samsung-soc/msg39095.htmlAmit Daniel Kachhap (6):
ARM: EXYNOS: Move pmu specific header files under "linux/soc/samsung"
ARM: EXYNOS: Move pmu specific headers under "linux/soc/samsung"
drivers: soc: Add support for Exynos PMU driver
driver: soc: exynos-pmu: Add an API to be called after wakeup
driver: soc: exynos-pmu: Add a new structure to allow u32 conf data
drivers: soc: exynos-pmu: Add support for Exynos7
arm: exynos: SelectSOC_SAMSUNGconfig optionarch/arm/mach-exynos/Kconfig | 1 + arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/exynos.c | 2 +- arch/arm/mach-exynos/mcpm-exynos.c | 2 +- arch/arm/mach-exynos/platsmp.c | 2 +- arch/arm/mach-exynos/pm.c | 4 +- arch/arm/mach-exynos/suspend.c | 4 +- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/samsung/Kconfig | 20 + drivers/soc/samsung/Makefile | 1 + .../pmu.c => drivers/soc/samsung/exynos-pmu.c | 451 +++++++++++++++++++-Quoted 9 lines
.../linux/soc/samsung}/exynos-pmu.h | 1 + .../linux/soc/samsung/exynos-regs-pmu.h | 273 ++++++++++++ 14 files changed, 750 insertions(+), 15 deletions(-) create mode 100644 drivers/soc/samsung/Kconfig create mode 100644 drivers/soc/samsung/Makefile rename arch/arm/mach-exynos/pmu.c => drivers/soc/samsung/exynos-pmu.c (68%) rename {arch/arm/mach-exynos => include/linux/soc/samsung}/exynos-pmu.h (89%) rename arch/arm/mach-exynos/regs-pmu.h => include/linux/soc/samsung/exynos-regs-pmu.h (68%)--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html