Samsung PM consolidation part 2 (multiplatform)
v2 cover Samsung PM consolidation part 2 (multiplatform)
Current Samsung PM code is heavily unprepared for multiplatform systems. The design implies accessing functions and global variables defined in particular mach- subdirectory from common code in plat-, which is not allowed when building ARCH_MULTIPLATFORM. In addition there is a lot of forced code unification, which makes common function handle any possible quirks of all supported SoCs. In the end this design turned out to not work too well, ending with a lot of empty functions exported from mach-, just because code in common pm.c calls them. Moreover, recent trend of moving lower level suspend/resume code to proper drivers, like pinctrl or clk, made a lot of code there redundant, especially on DT-only platforms like Exynos.
This patch series attempts to untie Exynos PM support from the legacy Samsung PM core and make it multiplatform-aware, by isolating truly generic parts of the latter, making them multiplatform-friendly and then reimplementing Exynos PM support in a multiplatform-capable way by using those generic parts. The result is that now PM initialization is started from mach-exynos*-dt, which calls Exynos-specific initialization code that registers platform_suspend_ops, so control flow is basically reversed ending with mach- code calling more generic plat- code if needed.
This is limited to Exynos right now, but remaining SoCs could follow in further series.
Depends on Samsung PM consolidation part 1 (clocks) series:
- http://thread.gmane.org/gmane.linux.kernel.samsung-soc/26816
On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Changes since v1 (RFC):
- fixed l2x0 resume,
- fixed checkpatch complaints (about issues in existing code being moved),
- rebased on top of current linux-next,
- slightly reordered patches to make the order more logical.
Tomasz Figa (12):
ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
ARM: SAMSUNG: Add soc_is_s3c2410() helper
ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
ARM: SAMSUNG: pm: Use debug_ll_addr() to get UART base address
ARM: SAMSUNG: pm: Consolidate PM debug functions
ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
ARM: SAMSUNG: Move common save/restore helpers to separate file
ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes to plat/pm-common.h
ARM: EXYNOS: Kconfig: Fix abuse of CONFIG_PM
ARM: EXYNOS: Remove PM initcalls and useless indirection
ARM: EXYNOS: Stop using legacy Samsung PM code
ARM: exynos: Allow wake-up using GIC interrupts
arch/arm/mach-exynos/Kconfig | 16 +-- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 14 ++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ----------- arch/arm/mach-exynos/pm.c | 172 +++++++++++++++++++------ arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 ++++++++++++ arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/Makefile | 2 + arch/arm/plat-samsung/include/plat/cpu.h | 6 + arch/arm/plat-samsung/include/plat/pm-common.h | 110 ++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 80 +----------- arch/arm/plat-samsung/pm-check.c | 2 +- arch/arm/plat-samsung/pm-common.c | 75 +++++++++++ arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++ arch/arm/plat-samsung/pm.c | 146 --------------------- arch/arm/plat-samsung/s5p-sleep.S | 43 ------- 19 files changed, 531 insertions(+), 400 deletions(-) delete mode 100644 arch/arm/mach-exynos/include/mach/pm-core.h create mode 100644 arch/arm/mach-exynos/sleep.S create mode 100644 arch/arm/plat-samsung/include/plat/pm-common.h create mode 100644 arch/arm/plat-samsung/pm-common.c create mode 100644 arch/arm/plat-samsung/pm-debug.c
Signature · 1 line
1.8.5.2
PATCH v2 1/12 ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
Trying to resume l2x0 if it was not enabled before suspend leads to system crash. This patch prevents this by checking if l2x0_regs_phys is a valid pointer to l2x0 context data saved on initialization.
--- arch/arm/plat-samsung/s5p-sleep.S | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
arch/arm/plat-samsung/s5p-sleep.S +5 -3
@@ -59,13 +59,15 @@ ENTRY(s3c_cpu_resume) and r0, r0, r1 ldr r1, =CPU_CORTEX_A9 cmp r0, r1 - bne resume_l2on + bne skip_l2_resume adr r0, l2x0_regs_phys ldr r0, [r0] + cmp r0, #0 + beq skip_l2_resume ldr r1, [r0, #L2X0_R_PHY_BASE] ldr r2, [r1, #L2X0_CTRL] tst r2, #0x1 - bne resume_l2on + bne skip_l2_resume ldr r2, [r0, #L2X0_R_AUX_CTRL] str r2, [r1, #L2X0_AUX_CTRL] ldr r2, [r0, #L2X0_R_TAG_LATENCY]
@@ -78,7 +80,7 @@ ENTRY(s3c_cpu_resume) str r2, [r1, #L2X0_POWER_CTRL] mov r2, #1 str r2, [r1, #L2X0_CTRL] -resume_l2on: +skip_l2_resume: #endif b cpu_resume ENDPROC(s3c_cpu_resume)
Signature · 1 line
1.8.5.2
PATCH v2 2/12 ARM: SAMSUNG: Add soc_is_s3c2410() helper
In reply to Tomasz FigaDue to the S3C2410 SoC being quite different from other S3C24xx SoCs in some aspects, such as availability of DIVSLOT register in its UART blocks, there is a need sometimes to check whether we are running on this SoC, not just the S3C24xx series. This patch adds soc_is_s3c2410() helper function for this purpose.
--- arch/arm/plat-samsung/include/plat/cpu.h | 6 ++++++ 1 file changed, 6 insertions(+)
arch/arm/plat-samsung/include/plat/cpu.h +6 -0
@@ -20,6 +20,9 @@extern unsigned long samsung_cpu_id; +#define S3C2410_CPU_ID 0x32410000 +#define S3C2410_CPU_MASK 0xFFFFFFFF +#define S3C24XX_CPU_ID 0x32400000#define S3C24XX_CPU_MASK 0xFFF00000
@@ -56,6 +59,7 @@ static inline int is_samsung_##name(void) \return ((samsung_cpu_id & mask) == (id & mask)); \ } +IS_SAMSUNG_CPU(s3c2410, S3C2410_CPU_ID, S3C2410_CPU_MASK) IS_SAMSUNG_CPU(s3c24xx, S3C24XX_CPU_ID, S3C24XX_CPU_MASK) IS_SAMSUNG_CPU(s3c2412, S3C2412_CPU_ID, S3C2412_CPU_MASK)IS_SAMSUNG_CPU (s3c6400,S3C6400_CPU_ID ,S3C64XX_CPU_MASK )
@@ -76,8 +80,10 @@ IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK)defined (CONFIG_CPU_S3C2442 ) ||defined (CONFIG_CPU_S3C244X ) || \ defined(CONFIG_CPU_S3C2443)# define soc_is_s3c24xx () is_samsung_s3c24xx() +# define soc_is_s3c2410 () is_samsung_s3c2410()#else # define soc_is_s3c24xx () 0 +# define soc_is_s3c2410 () 0#endif #if defined(CONFIG_CPU_S3C2412 )
Signature · 1 line
1.8.5.2
PATCH v2 3/12 ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
In reply to Tomasz FigaThe only SoC that does not have DIVSLOT register is S3C2410, so instead of exporting a variable for platforms to set if DIVSLOT register should be preserved, it's enough to simply check whether we are running on a S3C2410 instead.
--- arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/include/plat/pm.h | 2 -- arch/arm/plat-samsung/pm.c | 18 +++++------------- 4 files changed, 5 insertions(+), 17 deletions(-)
arch/arm/mach-s3c64xx/pm.c +0 -1
@@ -332,7 +332,6 @@ static __init int s3c64xx_pm_initcall(void) { pm_cpu_prep = s3c64xx_pm_prepare; pm_cpu_sleep = s3c64xx_cpu_suspend; - pm_uart_udivslot =1 ;#ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK gpio_request (S3C64XX_GPN (12 ),"DEBUG_LED0" );
arch/arm/mach-s5p64x0/pm.c +0 -1
@@ -161,7 +161,6 @@ static int s5p64x0_pm_add(struct device *dev, struct subsys_interface *sif) { pm_cpu_prep = s5p64x0_pm_prepare; pm_cpu_sleep = s5p64x0_cpu_suspend; - pm_uart_udivslot =1 ;return 0 ; }
arch/arm/plat-samsung/include/plat/pm.h +0 -2
@@ -54,8 +54,6 @@ extern int (*pm_cpu_sleep)(unsigned long);extern unsigned long s3c_pm_flags; -extern unsigned char pm_uart_udivslot;/* true to save UART UDIVSLOT */ -/* from sleep.S */ extern int s3c2410_cpu_suspend (unsigned long );
arch/arm/plat-samsung/pm.c +5 -13
@@ -23,6 +23,7 @@#include <asm/cacheflush.h> #include <asm/suspend.h> +#include <plat/cpu.h> #include <plat/regs-serial.h> #ifdef CONFIG_SAMSUNG_ATAGS
@@ -71,17 +72,6 @@ static inline void s3c_pm_debug_init(void)s3c_pm_debug_init_uart (); } -#else -#define s3c_pm_debug_init () do { } while(0) - -#endif /* CONFIG_SAMSUNG_PM_DEBUG */ - -/* Save the UART configurations if we are configured for debug. */ - -unsigned char pm_uart_udivslot; - -#ifdef CONFIG_SAMSUNG_PM_DEBUG -static struct pm_uart_save uart_save;static void s3c_pm_save_uart (unsigned int uart,struct pm_uart_save *save)
@@ -94,7 +84,7 @@ static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save) save->umcon =__raw_readl (regs +S3C2410_UMCON ); save->ubrdiv =__raw_readl (regs +S3C2410_UBRDIV ); -if (pm_uart_udivslot) +if (!soc_is_s3c2410 ()) save->udivslot =__raw_readl (regs +S3C2443_DIVSLOT ); S3C_PMDBG("UART[%d]: ULCON=%04x, UCON=%04x, UFCON=%04x, UBRDIV=%04x\n",
@@ -118,7 +108,7 @@ static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save)__raw_writel (save->umcon, regs +S3C2410_UMCON );__raw_writel (save->ubrdiv, regs +S3C2410_UBRDIV ); -if (pm_uart_udivslot) +if (!soc_is_s3c2410 ())__raw_writel (save->udivslot, regs +S3C2443_DIVSLOT ); }
@@ -127,6 +117,8 @@ static void s3c_pm_restore_uarts(void) s3c_pm_restore_uart(CONFIG_DEBUG_S3C_UART, &uart_save); }#else +#define s3c_pm_debug_init () do { } while (0) +static void s3c_pm_save_uarts (void ) { }static void s3c_pm_restore_uarts (void ) { }#endif
Signature · 1 line
1.8.5.2
PATCH v2 4/12 ARM: SAMSUNG: pm: Use debug_ll_addr() to get UART base address
In reply to Tomasz FigaThis patch modifies Samsung PM debug helpers to use a multiplatform friendly way of getting base address of debug UART port, so instead of using a per-mach static macro, a generic debug_ll_addr() helper is used.
--- arch/arm/plat-samsung/pm.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
arch/arm/plat-samsung/pm.c +13 -2
@@ -21,6 +21,7 @@#include <linux/io.h> #include <asm/cacheflush.h> +#include <asm/mach/map.h> #include <asm/suspend.h> #include <plat/cpu.h>
@@ -74,9 +75,19 @@ static inline void s3c_pm_debug_init(void)static struct pm_uart_save uart_save; +static inline void __iomem *s3c_pm_uart_base (void ) +{ +unsigned long paddr; +unsigned long vaddr; + +debug_ll_addr (&paddr, &vaddr); + +return (void __iomem *)vaddr; +} +static void s3c_pm_save_uart (unsigned int uart,struct pm_uart_save *save) { -void __iomem *regs =S3C_VA_UARTx (uart); +void __iomem *regs =s3c_pm_uart_base (); save->ulcon =__raw_readl (regs +S3C2410_ULCON ); save->ucon =__raw_readl (regs +S3C2410_UCON );
@@ -98,7 +109,7 @@ static void s3c_pm_save_uarts(void)static void s3c_pm_restore_uart (unsigned int uart,struct pm_uart_save *save) { -void __iomem *regs =S3C_VA_UARTx (uart); +void __iomem *regs =s3c_pm_uart_base ();s3c_pm_arch_update_uart (regs, save);
Signature · 1 line
1.8.5.2
PATCH v2 5/12 ARM: SAMSUNG: pm: Consolidate PM debug functions
In reply to Tomasz FigaThis patch removes one-line functions that was used just to pass constant arguments to lower level functions. After previous patches the need for those constants has been eliminated, so the main functions can be called directly.
--- arch/arm/plat-samsung/pm.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-)
arch/arm/plat-samsung/pm.c +6 -14
@@ -85,9 +85,10 @@ static inline void __iomem *s3c_pm_uart_base(void)return (void __iomem *)vaddr; } -static void s3c_pm_save_uart (unsigned int uart,struct pm_uart_save *save) +static void s3c_pm_save_uarts (void ) {void __iomem *regs =s3c_pm_uart_base (); +struct pm_uart_save *save = &uart_save; save->ulcon =__raw_readl (regs +S3C2410_ULCON ); save->ucon =__raw_readl (regs +S3C2410_UCON );
@@ -98,18 +99,14 @@ static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save)if (!soc_is_s3c2410 ()) save->udivslot =__raw_readl (regs +S3C2443_DIVSLOT ); -S3C_PMDBG ("UART[%d]: ULCON=%04x, UCON=%04x, UFCON=%04x, UBRDIV=%04x\n" , - uart, save->ulcon, save->ucon, save->ufcon, save->ubrdiv); -} - -static void s3c_pm_save_uarts (void ) -{ -s3c_pm_save_uart (CONFIG_DEBUG_S3C_UART , &uart_save); +S3C_PMDBG ("UART[%p]: ULCON=%04x, UCON=%04x, UFCON=%04x, UBRDIV=%04x\n" , + regs, save->ulcon, save->ucon, save->ufcon, save->ubrdiv); } -static void s3c_pm_restore_uart (unsigned int uart,struct pm_uart_save *save) +static void s3c_pm_restore_uarts (void ) {void __iomem *regs =s3c_pm_uart_base (); +struct pm_uart_save *save = &uart_save;s3c_pm_arch_update_uart (regs, save);
@@ -122,11 +119,6 @@ static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save)if (!soc_is_s3c2410 ()) __raw_writel(save->udivslot, regs + S3C2443_DIVSLOT); } - -static void s3c_pm_restore_uarts (void ) -{ -s3c_pm_restore_uart (CONFIG_DEBUG_S3C_UART , &uart_save); -}#else #define s3c_pm_debug_init () do { } while (0)
Signature · 1 line
1.8.5.2
PATCH v2 6/12 ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
In reply to Tomasz FigaNot all Samsung SoC platforms are going to use the legacy Samsung PM code enabled by CONFIG_SAMSUNG_PM_DEBUG. To allow using Samsung PM debug helpers on such platforms, related code is moved to separate file and a plat/pm-common.h header is added to separate legacy and generic code.
--- arch/arm/plat-samsung/Makefile | 1 + arch/arm/plat-samsung/include/plat/pm-common.h | 70 ++++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 39 +--------- arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++++++++++++++ arch/arm/plat-samsung/pm.c | 85 ---------------------- 5 files changed, 170 insertions(+), 123 deletions(-) create mode 100644 arch/arm/plat-samsung/include/plat/pm-common.h create mode 100644 arch/arm/plat-samsung/pm-debug.c
arch/arm/plat-samsung/Makefile +1 -0
@@ -50,6 +50,7 @@ obj-$(CONFIG_SAMSUNG_DMADEV) += dma-ops.o obj-$(CONFIG_SAMSUNG_PM) += pm.o obj-$(CONFIG_SAMSUNG_PM_GPIO) += pm-gpio.o obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o +obj-$(CONFIG_SAMSUNG_PM_DEBUG) += pm-debug.o obj-$(CONFIG_SAMSUNG_WAKEMASK) += wakeup-mask.o obj-$(CONFIG_SAMSUNG_WDT_RESET) += watchdog-reset.o
arch/arm/plat-samsung/include/plat/pm-common.h new file +70 -0
70 lines not on this page · raw message
arch/arm/plat-samsung/include/plat/pm.h +1 -38
@@ -16,6 +16,7 @@*/ #include <linux/irq.h> +#include <plat/pm-common.h> struct device ;
@@ -76,26 +77,6 @@ struct sleep_save {#define SAVE_ITEM (x) \ { .reg = (x) } -/** -* struct pm_uart_save - save block for core UART -* @ulcon: Save value for S3C2410_ULCON -* @ucon: Save value for S3C2410_UCON -* @ufcon: Save value for S3C2410_UFCON -* @umcon: Save value for S3C2410_UMCON -* @ubrdiv: Save value for S3C2410_UBRDIV -* -* Save block for UART registers to be held over sleep and restored if they -* are needed (say by debug). -*/ -struct pm_uart_save { -u32 ulcon; -u32 ucon; -u32 ufcon; -u32 umcon; -u32 ubrdiv; -u32 udivslot; -}; -/* helper functions to save/restore lists of registers. */ extern void s3c_pm_do_save (struct sleep_save *ptr,int count);
@@ -112,24 +93,6 @@ extern void s3c_cpu_resume(void);#define s3c_cpu_resume NULL#endif -/* PM debug functions */ - -#ifdef CONFIG_SAMSUNG_PM_DEBUG -/** -* s3c_pm_dbg() - low level debug function for use in suspend/resume. -* @msg: The message to print. -* -* This function is used mainly to debug the resume process before the system -* can rely on printk/console output. It uses the low-level debugging output -* routine printascii() to do its work. -*/ -extern void s3c_pm_dbg (const char *msg, ...); - -#define S3C_PMDBG(fmt...) s3c_pm_dbg(fmt) -#else -#define S3C_PMDBG(fmt...) printk(KERN_DEBUG fmt) -#endif -#ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK /** * s3c_pm_debug_smdkled() - Debug PM suspend/resume via SMDK Board LEDs
arch/arm/plat-samsung/pm-debug.c new file +98 -0
98 lines not on this page · raw message
arch/arm/plat-samsung/pm.c +0 -85
102 lines not on this page · raw message
Signature · 1 line
1.8.5.2
PATCH v2 7/12 ARM: SAMSUNG: Move common save/restore helpers to separate file
In reply to Tomasz FigaTo separate legacy PM code from generic helpers, this patch moves the generic register save/restore helpers to a new file called pm-common.c that is compiled always when CONFIG_PM_SLEEP is enabled, to allow platforms that do not want to use the legacy PM code use the generic helpers.
--- arch/arm/plat-samsung/Makefile | 1 + arch/arm/plat-samsung/include/plat/pm-common.h | 26 +++++++++ arch/arm/plat-samsung/include/plat/pm.h | 25 --------- arch/arm/plat-samsung/pm-common.c | 75 ++++++++++++++++++++++++++ arch/arm/plat-samsung/pm.c | 56 ------------------- 5 files changed, 102 insertions(+), 81 deletions(-) create mode 100644 arch/arm/plat-samsung/pm-common.c
arch/arm/plat-samsung/Makefile +1 -0
@@ -47,6 +47,7 @@ obj-$(CONFIG_SAMSUNG_DMADEV) += dma-ops.o # PM support +obj-$(CONFIG_PM_SLEEP) += pm-common.o obj-$(CONFIG_SAMSUNG_PM) += pm.o obj-$(CONFIG_SAMSUNG_PM_GPIO) += pm-gpio.o obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o
arch/arm/plat-samsung/include/plat/pm-common.h +26 -0
@@ -13,6 +13,32 @@#ifndef __PLAT_SAMSUNG_PM_COMMON_H#define __PLAT_SAMSUNG_PM_COMMON_H __FILE__ +#include <linux/irq.h> + +/* sleep save info */ + +/** +* struct sleep_save - save information for shared peripherals. +* @reg: Pointer to the register to save. +* @val: Holder for the value saved from reg. +* +* This describes a list of registers which is used by the pm core and +* other subsystem to save and restore register values over suspend. +*/ +struct sleep_save { +void __iomem *reg; +unsigned long val; +}; + +#define SAVE_ITEM (x) \ + { .reg = (x) } + +/* helper functions to save/restore lists of registers. */ + +extern void s3c_pm_do_save (struct sleep_save *ptr,int count); +extern void s3c_pm_do_restore (const struct sleep_save *ptr,int count); +extern void s3c_pm_do_restore_core (const struct sleep_save *ptr,int count); +/* PM debug functions */ /**
arch/arm/plat-samsung/include/plat/pm.h +0 -25
@@ -15,7 +15,6 @@* management */ -#include <linux/irq.h> #include <plat/pm-common.h> struct device ;
@@ -59,30 +58,6 @@ extern unsigned long s3c_pm_flags;extern int s3c2410_cpu_suspend (unsigned long ); -/* sleep save info */ - -/** -* struct sleep_save - save information for shared peripherals. -* @reg: Pointer to the register to save. -* @val: Holder for the value saved from reg. -* -* This describes a list of registers which is used by the pm core and -* other subsystem to save and restore register values over suspend. -*/ -struct sleep_save { -void __iomem *reg; -unsigned long val; -}; - -#define SAVE_ITEM (x) \ - { .reg = (x) } - -/* helper functions to save/restore lists of registers. */ - -extern void s3c_pm_do_save (struct sleep_save *ptr,int count); -extern void s3c_pm_do_restore (const struct sleep_save *ptr,int count); -extern void s3c_pm_do_restore_core (const struct sleep_save *ptr,int count); -#ifdef CONFIG_SAMSUNG_PM extern int s3c_irq_wake (struct irq_data *data,unsigned int state);extern int s3c_irqext_wake (struct irq_data *data,unsigned int state);
arch/arm/plat-samsung/pm-common.c new file +75 -0
75 lines not on this page · raw message
arch/arm/plat-samsung/pm.c +0 -56
62 lines not on this page · raw message
Signature · 1 line
1.8.5.2
PATCH v2 8/12 ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes to plat/pm-common.h
In reply to Tomasz FigaTo allow using Samsung PM memory check helpers on platforms that do not use the legacy Samsung PM core, this patch moves prototypes of relevant functions to plat/pm-common.h header.
--- arch/arm/plat-samsung/include/plat/pm-common.h | 14 ++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 14 -------------- arch/arm/plat-samsung/pm-check.c | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-)
arch/arm/plat-samsung/include/plat/pm-common.h +14 -0
@@ -93,4 +93,18 @@ static inline void s3c_pm_save_uarts(void) { }static inline void s3c_pm_restore_uarts (void ) { }#endif +/* suspend memory checking */ + +#ifdef CONFIG_SAMSUNG_PM_CHECK +extern void s3c_pm_check_prepare (void ); +extern void s3c_pm_check_restore (void ); +extern void s3c_pm_check_cleanup (void ); +extern void s3c_pm_check_store (void ); +#else +#define s3c_pm_check_prepare () do { } while (0) +#define s3c_pm_check_restore () do { } while (0) +#define s3c_pm_check_cleanup () do { } while (0) +#define s3c_pm_check_store () do { } while (0) +#endif +#endif
arch/arm/plat-samsung/include/plat/pm.h +0 -14
@@ -80,20 +80,6 @@ extern void s3c_pm_debug_smdkled(u32 set, u32 clear);static inline void s3c_pm_debug_smdkled (u32 set,u32 clear) { }#endif /* CONFIG_S3C_PM_DEBUG_LED_SMDK */ -/* suspend memory checking */ - -#ifdef CONFIG_SAMSUNG_PM_CHECK -extern void s3c_pm_check_prepare (void ); -extern void s3c_pm_check_restore (void ); -extern void s3c_pm_check_cleanup (void ); -extern void s3c_pm_check_store (void ); -#else -#define s3c_pm_check_prepare () do { } while(0) -#define s3c_pm_check_restore () do { } while(0) -#define s3c_pm_check_cleanup () do { } while(0) -#define s3c_pm_check_store () do { } while(0) -#endif -/** * s3c_pm_configure_extint() - ensure pins are correctly set for IRQ *
arch/arm/plat-samsung/pm-check.c +1 -1
@@ -19,7 +19,7 @@#include <linux/ioport.h> #include <linux/slab.h> -#include <plat/pm.h> +#include <plat/pm-common.h> #if CONFIG_SAMSUNG_PM_CHECK_CHUNKSIZE <1 #error CONFIG_SAMSUNG_PM_CHECK_CHUNKSIZE must be a positive non-zero value
Signature · 1 line
1.8.5.2
PATCH v2 9/12 ARM: EXYNOS: Kconfig: Fix abuse of CONFIG_PM
In reply to Tomasz FigaCONFIG_PM means that at least one of CONFIG_PM_SLEEP and CONFIG_PM_RUNTIME is enabled, while multiple entries in mach-exynos/Kconfig abused it to enable sleep- and runtime-specific functionality.
This patch fixes this abuse by replacing dependencies on CONFIG_PM with appropriate dependencies on either CONFIG_PM_SLEEP or CONFIG_PM_RUNTIME, whichever is appropriate.
--- arch/arm/mach-exynos/Kconfig | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
arch/arm/mach-exynos/Kconfig +12 -12
@@ -24,7 +24,7 @@ config ARCH_EXYNOS4 select HAVE_SMP select MIGHT_HAVE_CACHE_L2X0 select PINCTRL - select PM_GENERIC_DOMAINS if PM + select PM_GENERIC_DOMAINS if PM_RUNTIME select S5P_DEV_MFC help Samsung EXYNOS4 SoCs based systems
@@ -47,10 +47,10 @@ config CPU_EXYNOS4210 default y depends on ARCH_EXYNOS4 select ARCH_HAS_BANDGAP - select ARM_CPU_SUSPEND if PM + select ARM_CPU_SUSPEND if PM_SLEEP select PINCTRL_EXYNOS - select S5P_PM if PM - select S5P_SLEEP if PM + select S5P_PM if PM_SLEEP + select S5P_SLEEP if PM_SLEEP select SAMSUNG_DMADEV help Enable EXYNOS4210 CPU support
@@ -61,8 +61,8 @@ config SOC_EXYNOS4212 depends on ARCH_EXYNOS4 select ARCH_HAS_BANDGAP select PINCTRL_EXYNOS - select S5P_PM if PM - select S5P_SLEEP if PM + select S5P_PM if PM_SLEEP + select S5P_SLEEP if PM_SLEEP select SAMSUNG_DMADEV help Enable EXYNOS4212 SoC support
@@ -83,9 +83,9 @@ config SOC_EXYNOS5250 depends on ARCH_EXYNOS5 select ARCH_HAS_BANDGAP select PINCTRL_EXYNOS - select PM_GENERIC_DOMAINS if PM - select S5P_PM if PM - select S5P_SLEEP if PM + select PM_GENERIC_DOMAINS if PM_RUNTIME + select S5P_PM if PM_SLEEP + select S5P_SLEEP if PM_SLEEP select S5P_DEV_MFC select SAMSUNG_DMADEV help
@@ -95,9 +95,9 @@ config SOC_EXYNOS5420 bool "SAMSUNG EXYNOS5420" default y depends on ARCH_EXYNOS5 - select PM_GENERIC_DOMAINS if PM - select S5P_PM if PM - select S5P_SLEEP if PM + select PM_GENERIC_DOMAINS if PM_RUNTIME + select S5P_PM if PM_SLEEP + select S5P_SLEEP if PM_SLEEP help Enable EXYNOS5420 SoC support
Signature · 1 line
1.8.5.2
PATCH v2 10/12 ARM: EXYNOS: Remove PM initcalls and useless indirection
In reply to Tomasz FigaThis patch simplifies Exynos PM initialization and makes it multiplatform friendly by replacing initcalls used originally to invoke all the initialization code with explicit function calls.
In addition, an useless subsys_interface is removed, as all its .add_dev callback did was setting two function pointers.
--- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 6 ++++++ arch/arm/mach-exynos/pm.c | 50 +++++++++++-------------------------------- 3 files changed, 19 insertions(+), 38 deletions(-)
arch/arm/mach-exynos/common.c +1 -0
@@ -315,6 +315,7 @@ void __init exynos_init_late(void)return ;pm_genpd_poweroff_unused (); +exynos_pm_init (); } static int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
arch/arm/mach-exynos/common.h +6 -0
@@ -27,6 +27,12 @@ void exynos_init_late(void);void exynos_firmware_init (void ); +#ifdef CONFIG_PM_SLEEP +extern void __init exynos_pm_init (void ); +#else +static inline void exynos_pm_init (void ) {} +#endif +extern struct smp_operations exynos_smp_ops;extern void exynos_cpu_die (unsigned int cpu);
arch/arm/mach-exynos/pm.c +12 -38
63 lines not on this page · raw message
Signature · 1 line
1.8.5.2
PATCH v2 11/12 ARM: EXYNOS: Stop using legacy Samsung PM code
In reply to Tomasz FigaSince Exynos SoCs does not follow most of the semantics of older SoCs when configuring the system to enter sleep, there is no reason to rely on the legacy Samsung PM core anymore.
This patch adds local Exynos suspend ops and removes all the code left unnecessary. As a side effect, suspend support on Exynos becomes multiplatform-friendly.
--- arch/arm/mach-exynos/Kconfig | 8 --- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.h | 8 +++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ------------------------- arch/arm/mach-exynos/pm.c | 79 ++++++++++++++++++++++++--- arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 +++++++++++++++++++++++++++++ arch/arm/plat-samsung/s5p-sleep.S | 45 --------------- 8 files changed, 167 insertions(+), 137 deletions(-) delete mode 100644 arch/arm/mach-exynos/include/mach/pm-core.h create mode 100644 arch/arm/mach-exynos/sleep.S
arch/arm/mach-exynos/Kconfig +0 -8
@@ -49,8 +49,6 @@ config CPU_EXYNOS4210 select ARCH_HAS_BANDGAP select ARM_CPU_SUSPEND if PM_SLEEP select PINCTRL_EXYNOS - select S5P_PM if PM_SLEEP - select S5P_SLEEP if PM_SLEEP select SAMSUNG_DMADEV help Enable EXYNOS4210 CPU support
@@ -61,8 +59,6 @@ config SOC_EXYNOS4212 depends on ARCH_EXYNOS4 select ARCH_HAS_BANDGAP select PINCTRL_EXYNOS - select S5P_PM if PM_SLEEP - select S5P_SLEEP if PM_SLEEP select SAMSUNG_DMADEV help Enable EXYNOS4212 SoC support
@@ -84,8 +80,6 @@ config SOC_EXYNOS5250 select ARCH_HAS_BANDGAP select PINCTRL_EXYNOS select PM_GENERIC_DOMAINS if PM_RUNTIME - select S5P_PM if PM_SLEEP - select S5P_SLEEP if PM_SLEEP select S5P_DEV_MFC select SAMSUNG_DMADEV help
@@ -96,8 +90,6 @@ config SOC_EXYNOS5420 default y depends on ARCH_EXYNOS5 select PM_GENERIC_DOMAINS if PM_RUNTIME - select S5P_PM if PM_SLEEP - select S5P_SLEEP if PM_SLEEP help Enable EXYNOS5420 SoC support
arch/arm/mach-exynos/Makefile +1 -1
@@ -14,7 +14,7 @@ obj- := obj-$(CONFIG_ARCH_EXYNOS) += common.o -obj-$(CONFIG_S5P_PM) += pm.o +obj-$(CONFIG_PM_SLEEP) += pm.o sleep.o obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o obj-$(CONFIG_CPU_IDLE) += cpuidle.o
arch/arm/mach-exynos/common.h +8 -0
@@ -27,12 +27,20 @@ void exynos_init_late(void);void exynos_firmware_init (void ); +#ifdef CONFIG_PINCTRL_EXYNOS +extern u32 exynos_get_eint_wake_mask (void ); +#else +static inline u32 exynos_get_eint_wake_mask (void ) {return 0xffffffff ; } +#endif +#ifdef CONFIG_PM_SLEEP extern void __init exynos_pm_init (void );#else static inline void exynos_pm_init (void ) {}#endif +extern void exynos_cpu_resume (void ); +extern struct smp_operations exynos_smp_ops;extern void exynos_cpu_die (unsigned int cpu);
arch/arm/mach-exynos/include/mach/pm-core.h deleted +0 -75
75 lines not on this page · raw message
arch/arm/mach-exynos/pm.c +71 -8
122 lines not on this page · raw message
arch/arm/mach-exynos/regs-pmu.h +2 -0
@@ -31,6 +31,8 @@#define EXYNOS5440_SWRESET S5P_PMUREG(0x00C4)#define S5P_WAKEUP_STAT S5P_PMUREG(0x0600) +#define S5P_EINT_WAKEUP_MASK S5P_PMUREG(0x0604) +#define S5P_WAKEUP_MASK S5P_PMUREG(0x0608)#define S5P_INFORM0 S5P_PMUREG(0x0800)#define S5P_INFORM1 S5P_PMUREG(0x0804)
arch/arm/mach-exynos/sleep.S new file +85 -0
85 lines not on this page · raw message
arch/arm/plat-samsung/s5p-sleep.S +0 -45
57 lines not on this page · raw message
Signature · 1 line
1.8.5.2
PATCH v2 12/12 ARM: exynos: Allow wake-up using GIC interrupts
In reply to Tomasz FigaThis patch restores the ability to receive wake-up events from internal GIC interrupts, e.g. RTC tick or alarm interrupts.
--- arch/arm/mach-exynos/pm.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+)
arch/arm/mach-exynos/pm.c +53 -0
@@ -17,6 +17,7 @@#include <linux/suspend.h> #include <linux/syscore_ops.h> #include <linux/io.h> +#include <linux/irqchip/arm-gic.h> #include <linux/err.h> #include <linux/clk.h>
@@ -35,6 +36,16 @@#include "common.h" #include "regs-pmu.h" +/** +* struct exynos_wkup_irq - Exynos GIC to PMU IRQ mapping +* @hwirq: Hardware IRQ signal of the GIC +* @mask: Mask in PMU wake-up mask register +*/ +struct exynos_wkup_irq { +unsigned int hwirq; +u32 mask; +}; +static struct sleep_save exynos5_sys_save[] = {SAVE_ITEM (EXYNOS5_SYS_I2C_CFG ), };
@@ -48,8 +59,47 @@ static struct sleep_save exynos_core_save[] = { SAVE_ITEM(S5P_SROM_BC3), }; +/* +* GIC wake-up support +*/ +static u32 exynos_irqwake_intmask =0xffffffff ; +static const struct exynos_wkup_irq exynos4_wkup_irq[] = { + {76 ,BIT (1 ) },/* RTC alarm */ + {77 ,BIT (2 ) },/* RTC tick */ + {/* sentinel */ }, +}; + +static const struct exynos_wkup_irq exynos5250_wkup_irq[] = { + {75 ,BIT (1 ) },/* RTC alarm */ + {76 ,BIT (2 ) },/* RTC tick */ + {/* sentinel */ }, +}; + +static int exynos_irq_set_wake (struct irq_data *data,unsigned int state) +{ +const struct exynos_wkup_irq *wkup_irq; + +if (soc_is_exynos5250 ()) + wkup_irq = exynos5250_wkup_irq; +else + wkup_irq = exynos4_wkup_irq; + +while (wkup_irq->mask) { +if (wkup_irq->hwirq == data->hwirq) { +if (!state) + exynos_irqwake_intmask |= wkup_irq->mask; +else + exynos_irqwake_intmask &= ~wkup_irq->mask; +return 0 ; + } + ++wkup_irq; + } + +return -ENOENT ; +} +/* For Cortex-A9 Diagnostic and Power control register */ static unsigned int save_arm_register[2 ];
@@ -258,6 +308,9 @@ void __init exynos_pm_init(void) {u32 tmp; +/* Platform-specific GIC callback */ + gic_arch_extn.irq_set_wake = exynos_irq_set_wake; +/* All wakeup disable */ tmp =__raw_readl (S5P_WAKEUP_MASK ); tmp |= ((0xFF <<8 ) | (0x1F <<1 ));
Signature · 1 line
1.8.5.2
v2 cover Samsung PM consolidation part 2 (multiplatform)
In reply to Tomasz FigaQuoted 3 lines · Tomasz Figa
On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Has this been reported, and is it being worked on by anyone?
-Olof
v2 cover Samsung PM consolidation part 2 (multiplatform)
Quoted 7 lines · Olof Johansson
Quoted 3 lines · Tomasz Figa
On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Has this been reported, and is it being worked on by anyone?
Yes, reported quite a long time ago by Vikas Sajjan of Samsung/Linaro, but I'm not sure if anybody is working to fix it.
I've been looking into this for a while, but couldn't really find anything except that it hangs when PMU starts power state transtion after CPU executing WFI instruction.
Best regards,
Tomasz
v2 cover Samsung PM consolidation part 2 (multiplatform)
Tomasz,
Quoted 14 lines · Tomasz Figa
Quoted 9 lines · Olof Johansson
Quoted 3 lines · Tomasz Figa
On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Has this been reported, and is it being worked on by anyone?
Quoted 6 lines
Yes, reported quite a long time ago by Vikas Sajjan of Samsung/Linaro, but I'm not sure if anybody is working to fix it.
I've been looking into this for a while, but couldn't really find anything except that it hangs when PMU starts power state transtion after CPU executing WFI instruction.
It's likely it's something else, but just in case I'll point you to a bug that we fixed that had the same symptom. There's some details (and a lot of noise) in <http://crbug.com/218132>. ...or maybe just look at the root cause at <http://crosreview.com/42067>.
-Doug
v2 cover Samsung PM consolidation part 2 (multiplatform)
Hi Doug,
Quoted 20 lines · Doug Anderson
Tomasz,
Quoted 17 lines · Tomasz Figa
Quoted 9 lines · Olof Johansson
Quoted 3 lines · Tomasz Figa
On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Has this been reported, and is it being worked on by anyone?
Yes, reported quite a long time ago by Vikas Sajjan of Samsung/Linaro, but I'm not sure if anybody is working to fix it.
Quoted 8 lines
Quoted 3 lines
I've been looking into this for a while, but couldn't really find anything except that it hangs when PMU starts power state transtion after CPU executing WFI instruction.
It's likely it's something else, but just in case I'll point you to a bug that we fixed that had the same symptom. There's some details (and a lot of noise) in <http://crbug.com/218132>. ...or maybe just look at the root cause at <http://crosreview.com/42067>.
OK. Thanks for pointing me to this. Will do some more tests back at the office after the weekend.
Best regards,
Tomasz
v2 cover Samsung PM consolidation part 2 (multiplatform)
In reply to Tomasz FigaQuoted 73 lines · Tomasz Figa
Current Samsung PM code is heavily unprepared for multiplatform systems. The design implies accessing functions and global variables defined in particular mach- subdirectory from common code in plat-, which is not allowed when building
ARCH_MULTIPLATFORM. In addition there is a lot of forced code unification, which makes common function handle any possible quirks of all supported SoCs. In the end this design turned out to not work too well, ending with a lot of empty functions exported from mach-, just because code in commonpm.ccalls them. Moreover, recent trend of moving lower level suspend/resume code to proper drivers, like pinctrl or clk, made a lot of code there redundant, especially on DT-only platforms like Exynos.This patch series attempts to untie Exynos PM support from the legacy Samsung PM core and make it multiplatform-aware, by isolating truly generic parts of the latter, making them multiplatform-friendly and then reimplementing Exynos PM support in a multiplatform-capable way by using those generic parts. The result is that now PM initialization is started from mach-exynos*-dt, which calls Exynos-specific initialization code that registers
platform_suspend_ops, so control flow is basically reversed ending with mach- code calling more generic plat- code if needed.This is limited to Exynos right now, but remaining SoCs could follow in further series.
Depends on Samsung PM consolidation part 1 (clocks) series:
- http://thread.gmane.org/gmane.linux.kernel.samsung-soc/26816On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Tested-by Tomasz Figa <[email protected]>Changes since v1 (RFC):
- fixed l2x0 resume,
- fixed checkpatch complaints (about issues in existing code being moved),
- rebased on top of current linux-next,
- slightly reordered patches to make the order more logical.Tomasz Figa (12):
ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
ARM: SAMSUNG: Addsoc_is_s3c2410()helper
ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
ARM: SAMSUNG: pm: Usedebug_ll_addr()to get UART base address
ARM: SAMSUNG: pm: Consolidate PM debug functions
ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
ARM: SAMSUNG: Move common save/restore helpers to separate file
ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes toplat/pm-common.h
ARM: EXYNOS:Kconfig: Fix abuse ofCONFIG_PM
ARM: EXYNOS: Remove PM initcalls and useless indirection
ARM: EXYNOS: Stop using legacy Samsung PM code
ARM: exynos: Allow wake-up using GIC interruptsarch/arm/mach-exynos/Kconfig | 16 +-- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 14 ++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ----------- arch/arm/mach-exynos/pm.c | 172 +++++++++++++++++++------ arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 ++++++++++++ arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/Makefile | 2 + arch/arm/plat-samsung/include/plat/cpu.h | 6 + arch/arm/plat-samsung/include/plat/pm-common.h | 110 ++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 80 +----------- arch/arm/plat-samsung/pm-check.c | 2 +- arch/arm/plat-samsung/pm-common.c | 75 +++++++++++ arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++ arch/arm/plat-samsung/pm.c | 146 --------------------- arch/arm/plat-samsung/s5p-sleep.S | 43 ------- 19 files changed, 531 insertions(+), 400 deletions(-)
Quoted 6 lines
delete mode 100644
arch/arm/mach-exynos/include/mach/pm-core.hcreate mode 100644arch/arm/mach-exynos/sleep.S
create mode 100644arch/arm/plat-samsung/include/plat/pm-common.hcreate mode 100644arch/arm/plat-samsung/pm-common.ccreate mode 100644arch/arm/plat-samsung/pm-debug.c
With patch
[PATCH] ARM: dts: exynos5250-arndale: Keep G3D regulator always on
on Exynos5250-based Arndale board, including suspend to RAM:
Best regards,
Tomasz
v2 cover Samsung PM consolidation part 2 (multiplatform)
In reply to Tomasz FigaHi Kukjin,
Quoted 73 lines · Tomasz Figa
Current Samsung PM code is heavily unprepared for multiplatform systems. The design implies accessing functions and global variables defined in particular mach- subdirectory from common code in plat-, which is not allowed when building
ARCH_MULTIPLATFORM. In addition there is a lot of forced code unification, which makes common function handle any possible quirks of all supported SoCs. In the end this design turned out to not work too well, ending with a lot of empty functions exported from mach-, just because code in commonpm.ccalls them. Moreover, recent trend of moving lower level suspend/resume code to proper drivers, like pinctrl or clk, made a lot of code there redundant, especially on DT-only platforms like Exynos.This patch series attempts to untie Exynos PM support from the legacy Samsung PM core and make it multiplatform-aware, by isolating truly generic parts of the latter, making them multiplatform-friendly and then reimplementing Exynos PM support in a multiplatform-capable way by using those generic parts. The result is that now PM initialization is started from mach-exynos*-dt, which calls Exynos-specific initialization code that registers
platform_suspend_ops, so control flow is basically reversed ending with mach- code calling more generic plat- code if needed.This is limited to Exynos right now, but remaining SoCs could follow in further series.
Depends on Samsung PM consolidation part 1 (clocks) series:
- http://thread.gmane.org/gmane.linux.kernel.samsung-soc/26816On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Tested-by Tomasz Figa <[email protected]>Changes since v1 (RFC):
- fixed l2x0 resume,
- fixed checkpatch complaints (about issues in existing code being moved),
- rebased on top of current linux-next,
- slightly reordered patches to make the order more logical.Tomasz Figa (12):
ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
ARM: SAMSUNG: Addsoc_is_s3c2410()helper
ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
ARM: SAMSUNG: pm: Usedebug_ll_addr()to get UART base address
ARM: SAMSUNG: pm: Consolidate PM debug functions
ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
ARM: SAMSUNG: Move common save/restore helpers to separate file
ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes toplat/pm-common.h
ARM: EXYNOS:Kconfig: Fix abuse ofCONFIG_PM
ARM: EXYNOS: Remove PM initcalls and useless indirection
ARM: EXYNOS: Stop using legacy Samsung PM code
ARM: exynos: Allow wake-up using GIC interruptsarch/arm/mach-exynos/Kconfig | 16 +-- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 14 ++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ----------- arch/arm/mach-exynos/pm.c | 172 +++++++++++++++++++------ arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 ++++++++++++ arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/Makefile | 2 + arch/arm/plat-samsung/include/plat/cpu.h | 6 + arch/arm/plat-samsung/include/plat/pm-common.h | 110 ++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 80 +----------- arch/arm/plat-samsung/pm-check.c | 2 +- arch/arm/plat-samsung/pm-common.c | 75 +++++++++++ arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++ arch/arm/plat-samsung/pm.c | 146 --------------------- arch/arm/plat-samsung/s5p-sleep.S | 43 ------- 19 files changed, 531 insertions(+), 400 deletions(-)
Quoted 6 lines
delete mode 100644
arch/arm/mach-exynos/include/mach/pm-core.hcreate mode 100644arch/arm/mach-exynos/sleep.S
create mode 100644arch/arm/plat-samsung/include/plat/pm-common.hcreate mode 100644arch/arm/plat-samsung/pm-common.ccreate mode 100644arch/arm/plat-samsung/pm-debug.c
What do you think about this series?
Best regards,
Tomasz
v2 cover Samsung PM consolidation part 2 (multiplatform)
Quoted 88 lines · Tomasz Figa
Hi Kukjin,
Quoted 78 lines · Tomasz Figa
Current Samsung PM code is heavily unprepared for multiplatform systems. The design implies accessing functions and global variables defined in particular mach- subdirectory from common code in plat-, which is not allowed when building
ARCH_MULTIPLATFORM. In addition there is a lot of forced code unification, which makes common function handle any possible quirks of all supported SoCs. In the end this design turned out to not work too well, ending with a lot of empty functions exported from mach-, just because code in commonpm.ccalls them. Moreover, recent trend of moving lower level suspend/resume code to proper drivers, like pinctrl or clk, made a lot of code there redundant, especially on DT-only platforms
like Exynos.This patch series attempts to untie Exynos PM support from the legacy Samsung PM core and make it multiplatform-aware, by isolating truly generic parts of the latter, making them multiplatform-friendly and then reimplementing Exynos PM support in a multiplatform-capable way by using those generic parts. The result is that now PM initialization is started from mach-exynos*-dt, which calls Exynos-specific initialization code that
registersplatform_suspend_ops, so control flow is basically reversed ending with mach- code calling more generic plat- code if needed.This is limited to Exynos right now, but remaining SoCs could follow in further series.
Depends on Samsung PM consolidation part 1 (clocks) series:
- http://thread.gmane.org/gmane.linux.kernel.samsung-soc/26816On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Tested-by Tomasz Figa <[email protected]>Changes since v1 (RFC):
- fixed l2x0 resume,
- fixed checkpatch complaints (about issues in existing code being
moved),
- rebased on top of current linux-next,
- slightly reordered patches to make the order more logical.Tomasz Figa (12):
ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
ARM: SAMSUNG: Addsoc_is_s3c2410()helper
ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
ARM: SAMSUNG: pm: Usedebug_ll_addr()to get UART base address
ARM: SAMSUNG: pm: Consolidate PM debug functions
ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
ARM: SAMSUNG: Move common save/restore helpers to separate file
ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes toplat/pm-common.h
ARM: EXYNOS:Kconfig: Fix abuse ofCONFIG_PM
ARM: EXYNOS: Remove PM initcalls and useless indirection
ARM: EXYNOS: Stop using legacy Samsung PM code
ARM: exynos: Allow wake-up using GIC interruptsarch/arm/mach-exynos/Kconfig | 16 +-- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 14 ++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ----------- arch/arm/mach-exynos/pm.c | 172 +++++++++++++++++++------ arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 ++++++++++++ arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/Makefile | 2 + arch/arm/plat-samsung/include/plat/cpu.h | 6 + arch/arm/plat-samsung/include/plat/pm-common.h | 110 ++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 80 +----------- arch/arm/plat-samsung/pm-check.c | 2 +- arch/arm/plat-samsung/pm-common.c | 75 +++++++++++ arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++ arch/arm/plat-samsung/pm.c | 146 --------------------- arch/arm/plat-samsung/s5p-sleep.S | 43 ------- 19 files changed, 531 insertions(+), 400 deletions(-)Quoted 6 lines
delete mode 100644
arch/arm/mach-exynos/include/mach/pm-core.hcreate mode 100644arch/arm/mach-exynos/sleep.S
create mode 100644arch/arm/plat-samsung/include/plat/pm-common.hcreate mode 100644arch/arm/plat-samsung/pm-common.ccreate mode 100644arch/arm/plat-samsung/pm-debug.c
Quoted 1 line
What do you think about this series?
A subtle ping.
Best regards,
Tomasz
v2 cover Samsung PM consolidation part 2 (multiplatform)
Quoted 4 lines · Tomasz Figa
Quoted 2 lines · Tomasz Figa
Hi Kukjin,
Hi Tomasz,
Quoted 2 lines
Quoted 2 lines · Tomasz Figa
Quoted 1 line
Current Samsung PM code is heavily unprepared for multiplatform
systems.
Quoted 7 lines
Quoted 4 lines
Quoted 4 lines
The design implies accessing functions and global variables defined in particular mach- subdirectory from common code in plat-, which is not allowed when building
ARCH_MULTIPLATFORM. In addition there is a lot of forced code unification, which makes common function handle anypossible
Quoted 2 lines
Quoted 2 lines
quirks of all supported SoCs. In the end this design turned out to not work too well, ending with a lot of empty functions exported from
mach-,
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
just because code in common
pm.ccalls them. Moreover, recent trend of moving lower level suspend/resume code to proper drivers, like pinctrl or clk, made a lot of code there redundant, especially on DT-only platforms
like Exynos.
Quoted 77 lines
Quoted 3 lines
Quoted 3 lines
This patch series attempts to untie Exynos PM support from the legacy Samsung PM core and make it multiplatform-aware, by isolating truly generic parts of the latter, making them multiplatform-friendly and
then
Quoted 1 line
Quoted 1 line
reimplementing Exynos PM support in a multiplatform-capable way by
using
Quoted 1 line
Quoted 1 line
those generic parts. The result is that now PM initialization is
started
Quoted 68 lines
Quoted 60 lines
from mach-exynos*-dt, which calls Exynos-specific initialization code that
registersplatform_suspend_ops, so control flow is basically reversed ending with mach- code calling more generic plat- code if needed.This is limited to Exynos right now, but remaining SoCs could follow in further series.
Depends on Samsung PM consolidation part 1 (clocks) series:
- http://thread.gmane.org/gmane.linux.kernel.samsung-soc/26816On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Tested-by Tomasz Figa <[email protected]>Changes since v1 (RFC):
- fixed l2x0 resume,
- fixed checkpatch complaints (about issues in existing code being
moved),
- rebased on top of current linux-next,
- slightly reordered patches to make the order more logical.Tomasz Figa (12):
ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
ARM: SAMSUNG: Addsoc_is_s3c2410()helper
ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
ARM: SAMSUNG: pm: Usedebug_ll_addr()to get UART base address
ARM: SAMSUNG: pm: Consolidate PM debug functions
ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
ARM: SAMSUNG: Move common save/restore helpers to separate file
ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes toplat/pm-common.h
ARM: EXYNOS:Kconfig: Fix abuse ofCONFIG_PM
ARM: EXYNOS: Remove PM initcalls and useless indirection
ARM: EXYNOS: Stop using legacy Samsung PM code
ARM: exynos: Allow wake-up using GIC interruptsarch/arm/mach-exynos/Kconfig | 16 +-- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 14 ++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ----------- arch/arm/mach-exynos/pm.c | 172 +++++++++++++++++++------ arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 ++++++++++++ arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/Makefile | 2 + arch/arm/plat-samsung/include/plat/cpu.h | 6 + arch/arm/plat-samsung/include/plat/pm-common.h | 110 ++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 80 +----------- arch/arm/plat-samsung/pm-check.c | 2 +- arch/arm/plat-samsung/pm-common.c | 75 +++++++++++ arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++ arch/arm/plat-samsung/pm.c | 146 --------------------- arch/arm/plat-samsung/s5p-sleep.S | 43 ------- 19 files changed, 531 insertions(+), 400 deletions(-)Quoted 6 lines
delete mode 100644
arch/arm/mach-exynos/include/mach/pm-core.hcreate mode 100644arch/arm/mach-exynos/sleep.S
create mode 100644arch/arm/plat-samsung/include/plat/pm-common.hcreate mode 100644arch/arm/plat-samsung/pm-common.ccreate mode 100644arch/arm/plat-samsung/pm-debug.cWhat do you think about this series?
I'm fine on this whole series and will apply.
Thanks,
Kukjin
v2 cover Samsung PM consolidation part 2 (multiplatform)
In reply to Tomasz FigaQuoted 6 lines · Tomasz Figa
Quoted 4 lines · Tomasz Figa
Hi Kukjin,
Quoted 1 line · Tomasz Figa
Current Samsung PM code is heavily unprepared for multiplatform
systems.
Quoted 7 lines
Quoted 4 lines
Quoted 4 lines
The design implies accessing functions and global variables defined in particular mach- subdirectory from common code in plat-, which is not allowed when building
ARCH_MULTIPLATFORM. In addition there is a lot of forced code unification, which makes common function handle anypossible
Quoted 2 lines
Quoted 2 lines
quirks of all supported SoCs. In the end this design turned out to not work too well, ending with a lot of empty functions exported from
mach-,
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
just because code in common
pm.ccalls them. Moreover, recent trend of moving lower level suspend/resume code to proper drivers, like pinctrl or clk, made a lot of code there redundant, especially on DT-only platforms
like Exynos.
Quoted 74 lines
Quoted 3 lines
Quoted 3 lines
This patch series attempts to untie Exynos PM support from the legacy Samsung PM core and make it multiplatform-aware, by isolating truly generic parts of the latter, making them multiplatform-friendly and
then
Quoted 1 line
Quoted 1 line
reimplementing Exynos PM support in a multiplatform-capable way by
using
Quoted 1 line
Quoted 1 line
those generic parts. The result is that now PM initialization is
started
Quoted 66 lines
Quoted 66 lines
from mach-exynos*-dt, which calls Exynos-specific initialization code that
registersplatform_suspend_ops, so control flow is basically reversed ending with mach- code calling more generic plat- code if needed.This is limited to Exynos right now, but remaining SoCs could follow in further series.
Depends on Samsung PM consolidation part 1 (clocks) series:
- http://thread.gmane.org/gmane.linux.kernel.samsung-soc/26816On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Tested-by Tomasz Figa <[email protected]>Changes since v1 (RFC):
- fixed l2x0 resume,
- fixed checkpatch complaints (about issues in existing code being
moved),
- rebased on top of current linux-next,
- slightly reordered patches to make the order more logical.Tomasz Figa (12):
ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
ARM: SAMSUNG: Addsoc_is_s3c2410()helper
ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
ARM: SAMSUNG: pm: Usedebug_ll_addr()to get UART base address
ARM: SAMSUNG: pm: Consolidate PM debug functions
ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
ARM: SAMSUNG: Move common save/restore helpers to separate file
ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes toplat/pm-common.h
ARM: EXYNOS:Kconfig: Fix abuse ofCONFIG_PM
ARM: EXYNOS: Remove PM initcalls and useless indirection
ARM: EXYNOS: Stop using legacy Samsung PM code
ARM: exynos: Allow wake-up using GIC interruptsarch/arm/mach-exynos/Kconfig | 16 +-- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 14 ++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ----------- arch/arm/mach-exynos/pm.c | 172 +++++++++++++++++++------ arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 ++++++++++++ arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/Makefile | 2 + arch/arm/plat-samsung/include/plat/cpu.h | 6 + arch/arm/plat-samsung/include/plat/pm-common.h | 110 ++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 80 +----------- arch/arm/plat-samsung/pm-check.c | 2 +- arch/arm/plat-samsung/pm-common.c | 75 +++++++++++ arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++ arch/arm/plat-samsung/pm.c | 146 --------------------- arch/arm/plat-samsung/s5p-sleep.S | 43 ------- 19 files changed, 531 insertions(+), 400 deletions(-)delete mode 100644
arch/arm/mach-exynos/include/mach/pm-core.hcreate mode 100644arch/arm/mach-exynos/sleep.S
create mode 100644arch/arm/plat-samsung/include/plat/pm-common.hcreate mode 100644arch/arm/plat-samsung/pm-common.ccreate mode 100644arch/arm/plat-samsung/pm-debug.c
Hi Tomasz,
Build error happens with s3c6400_defconfig:
In file included from arch/arm/plat-samsung/pm.c:38:0:arch/arm/mach-s3c64xx/include/mach/pm-core.h: In function 's3c_pm_arch_update_uart':arch/arm/mach-s3c64xx/include/mach/pm-core.h:64:32: error: 'S3C2410_UCON' undeclared (first use in this function) arch/arm/mach-s3c64xx/include/mach/pm-core.h:64:32: note: each undeclared identifier is reported only once for each function it appears in arch/arm/mach-s3c64xx/include/mach/pm-core.h:65:24: error:
'S3C6400_UCON_CLKMASK' undeclared (first use in this function) arch/arm/mach-s3c64xx/include/mach/pm-core.h:73:16: error:
'S3C2410_UCON_TXILEVEL' undeclared (first use in this function) arch/arm/mach-s3c64xx/include/mach/pm-core.h:73:40: error:
'S3C2410_UCON_RXILEVEL' undeclared (first use in this function) arch/arm/mach-s3c64xx/include/mach/pm-core.h:87:18: error:
'S3C6400_UCON_UCLK0' undeclared (first use in this function) arch/arm/mach-s3c64xx/include/mach/pm-core.h:89:15: error:
'S3C6400_UCON_PCLK2' undeclared (first use in this function) make[2]: *** [arch/arm/plat-samsung/pm.o] Error 1
make[1]: *** [arch/arm/plat-samsung] Error 2
make[1]: *** Waiting for unfinished jobs....
And with s5p64x0_defconfig:
In file included from arch/arm/plat-samsung/pm.c:38:0:arch/arm/mach-s5p64x0/include/mach/pm-core.h: In function 's3c_pm_arch_update_uart':arch/arm/mach-s5p64x0/include/mach/pm-core.h:57:32: error: 'S3C2410_UCON' undeclared (first use in this function) arch/arm/mach-s5p64x0/include/mach/pm-core.h:57:32: note: each undeclared identifier is reported only once for each function it appears in arch/arm/mach-s5p64x0/include/mach/pm-core.h:58:24: error:
'S3C6400_UCON_CLKMASK' undeclared (first use in this function) arch/arm/mach-s5p64x0/include/mach/pm-core.h:68:16: error:
'S3C2410_UCON_TXILEVEL' undeclared (first use in this function) arch/arm/mach-s5p64x0/include/mach/pm-core.h:68:40: error:
'S3C2410_UCON_RXILEVEL' undeclared (first use in this function) arch/arm/mach-s5p64x0/include/mach/pm-core.h:85:18: error:
'S3C6400_UCON_UCLK0' undeclared (first use in this function) arch/arm/mach-s5p64x0/include/mach/pm-core.h:87:11: error:
'S3C6400_UCON_PCLK2' undeclared (first use in this function) make[2]: *** [arch/arm/plat-samsung/pm.o] Error 1
make[2]: *** Waiting for unfinished jobs....
CC arch/arm/mach-s5p64x0/setup-sdhci-gpio.o
CC fs/char_dev.o
make[1]: *** [arch/arm/plat-samsung] Error 2
make[1]: *** Waiting for unfinished jobs....
Please see the 'v3.15-next/s2r-pm-samsung-2' branch.
- Kukjin
v2 cover Samsung PM consolidation part 2 (multiplatform)
Hi Kukjin,
Quoted 148 lines · Kukjin Kim
Quoted 6 lines · Tomasz Figa
Quoted 4 lines · Tomasz Figa
Hi Kukjin,
Quoted 1 line · Tomasz Figa
Current Samsung PM code is heavily unprepared for multiplatform
systems.
Quoted 7 lines
Quoted 4 lines
Quoted 4 lines
The design implies accessing functions and global variables defined in particular mach- subdirectory from common code in plat-, which is not allowed when building
ARCH_MULTIPLATFORM. In addition there is a lot of forced code unification, which makes common function handle anypossible
Quoted 2 lines
Quoted 2 lines
quirks of all supported SoCs. In the end this design turned out to not work too well, ending with a lot of empty functions exported from
mach-,
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
just because code in common
pm.ccalls them. Moreover, recent trend of moving lower level suspend/resume code to proper drivers, like pinctrl or clk, made a lot of code there redundant, especially on DT-only platforms
like Exynos.Quoted 74 lines
Quoted 3 lines
Quoted 3 lines
This patch series attempts to untie Exynos PM support from the legacy Samsung PM core and make it multiplatform-aware, by isolating truly generic parts of the latter, making them multiplatform-friendly and
then
Quoted 1 line
Quoted 1 line
reimplementing Exynos PM support in a multiplatform-capable way by
using
Quoted 1 line
Quoted 1 line
those generic parts. The result is that now PM initialization is
started
Quoted 66 lines
Quoted 66 lines
from mach-exynos*-dt, which calls Exynos-specific initialization code that
registersplatform_suspend_ops, so control flow is basically reversed ending with mach- code calling more generic plat- code if needed.This is limited to Exynos right now, but remaining SoCs could follow in further series.
Depends on Samsung PM consolidation part 1 (clocks) series:
- http://thread.gmane.org/gmane.linux.kernel.samsung-soc/26816On Exynos4210-based Trats, Exynos4412-based Trats2 and Exynos5250-based Arndale boards (except suspend/resume, which is broken because of unrelated reasons):
Tested-by Tomasz Figa <[email protected]>Changes since v1 (RFC):
- fixed l2x0 resume,
- fixed checkpatch complaints (about issues in existing code being
moved),
- rebased on top of current linux-next,
- slightly reordered patches to make the order more logical.Tomasz Figa (12):
ARM: EXYNOS: Do not resume l2x0 if not enabled before suspend
ARM: SAMSUNG: Addsoc_is_s3c2410()helper
ARM: SAMSUNG: pm: Save UART DIVSLOT register based on SoC type
ARM: SAMSUNG: pm: Usedebug_ll_addr()to get UART base address
ARM: SAMSUNG: pm: Consolidate PM debug functions
ARM: SAMSUNG: pm: Move Samsung PM debug code into separate file
ARM: SAMSUNG: Move common save/restore helpers to separate file
ARM: SAMSUNG: pm: Move s3c_pm_check_* prototypes toplat/pm-common.h
ARM: EXYNOS:Kconfig: Fix abuse ofCONFIG_PM
ARM: EXYNOS: Remove PM initcalls and useless indirection
ARM: EXYNOS: Stop using legacy Samsung PM code
ARM: exynos: Allow wake-up using GIC interruptsarch/arm/mach-exynos/Kconfig | 16 +-- arch/arm/mach-exynos/Makefile | 2 +- arch/arm/mach-exynos/common.c | 1 + arch/arm/mach-exynos/common.h | 14 ++ arch/arm/mach-exynos/include/mach/pm-core.h | 75 ----------- arch/arm/mach-exynos/pm.c | 172 +++++++++++++++++++------ arch/arm/mach-exynos/regs-pmu.h | 2 + arch/arm/mach-exynos/sleep.S | 85 ++++++++++++ arch/arm/mach-s3c64xx/pm.c | 1 - arch/arm/mach-s5p64x0/pm.c | 1 - arch/arm/plat-samsung/Makefile | 2 + arch/arm/plat-samsung/include/plat/cpu.h | 6 + arch/arm/plat-samsung/include/plat/pm-common.h | 110 ++++++++++++++++ arch/arm/plat-samsung/include/plat/pm.h | 80 +----------- arch/arm/plat-samsung/pm-check.c | 2 +- arch/arm/plat-samsung/pm-common.c | 75 +++++++++++ arch/arm/plat-samsung/pm-debug.c | 98 ++++++++++++++ arch/arm/plat-samsung/pm.c | 146 --------------------- arch/arm/plat-samsung/s5p-sleep.S | 43 ------- 19 files changed, 531 insertions(+), 400 deletions(-)delete mode 100644
arch/arm/mach-exynos/include/mach/pm-core.hcreate mode 100644arch/arm/mach-exynos/sleep.S
create mode 100644arch/arm/plat-samsung/include/plat/pm-common.hcreate mode 100644arch/arm/plat-samsung/pm-common.ccreate mode 100644arch/arm/plat-samsung/pm-debug.cHi Tomasz,
Build error happens with
s3c6400_defconfig:In file included from
arch/arm/plat-samsung/pm.c:38:0:arch/arm/mach-s3c64xx/include/mach/pm-core.h: In function 's3c_pm_arch_update_uart':arch/arm/mach-s3c64xx/include/mach/pm-core.h:64:32: error: 'S3C2410_UCON' undeclared (first use in this function)arch/arm/mach-s3c64xx/include/mach/pm-core.h:64:32: note: each undeclared identifier is reported only once for each function it appears inarch/arm/mach-s3c64xx/include/mach/pm-core.h:65:24: error:
'S3C6400_UCON_CLKMASK' undeclared (first use in this function)arch/arm/mach-s3c64xx/include/mach/pm-core.h:73:16: error:
'S3C2410_UCON_TXILEVEL' undeclared (first use in this function)arch/arm/mach-s3c64xx/include/mach/pm-core.h:73:40: error:
'S3C2410_UCON_RXILEVEL' undeclared (first use in this function)arch/arm/mach-s3c64xx/include/mach/pm-core.h:87:18: error:
'S3C6400_UCON_UCLK0' undeclared (first use in this function)arch/arm/mach-s3c64xx/include/mach/pm-core.h:89:15: error:
'S3C6400_UCON_PCLK2' undeclared (first use in this function) make[2]: *** [arch/arm/plat-samsung/pm.o] Error 1
make[1]: *** [arch/arm/plat-samsung] Error 2
make[1]: *** Waiting for unfinished jobs....And with
s5p64x0_defconfig:In file included from
arch/arm/plat-samsung/pm.c:38:0:arch/arm/mach-s5p64x0/include/mach/pm-core.h: In function 's3c_pm_arch_update_uart':arch/arm/mach-s5p64x0/include/mach/pm-core.h:57:32: error: 'S3C2410_UCON' undeclared (first use in this function)arch/arm/mach-s5p64x0/include/mach/pm-core.h:57:32: note: each undeclared identifier is reported only once for each function it appears inarch/arm/mach-s5p64x0/include/mach/pm-core.h:58:24: error:
'S3C6400_UCON_CLKMASK' undeclared (first use in this function)arch/arm/mach-s5p64x0/include/mach/pm-core.h:68:16: error:
'S3C2410_UCON_TXILEVEL' undeclared (first use in this function)arch/arm/mach-s5p64x0/include/mach/pm-core.h:68:40: error:
'S3C2410_UCON_RXILEVEL' undeclared (first use in this function)arch/arm/mach-s5p64x0/include/mach/pm-core.h:85:18: error:
'S3C6400_UCON_UCLK0' undeclared (first use in this function)arch/arm/mach-s5p64x0/include/mach/pm-core.h:87:11: error:
'S3C6400_UCON_PCLK2' undeclared (first use in this function) make[2]: *** [arch/arm/plat-samsung/pm.o] Error 1
make[2]: *** Waiting for unfinished jobs....
CCarch/arm/mach-s5p64x0/setup-sdhci-gpio.o
CCfs/char_dev.o
make[1]: *** [arch/arm/plat-samsung] Error 2
make[1]: *** Waiting for unfinished jobs....
Quoted 1 line
Please see the 'v3.15-next/s2r-pm-samsung-2' branch.
I've sent a series of fixup patches:
http://www.spinics.net/lists/arm-kernel/msg316390.html
Compile tested on s3c24xx, s3c64xx, s5p64x0, s5pv210 and exynos with and without CONFIG_PM_SLEEP.
Best regards,
Tomasz