Re: [PATCH v8 5/7] powerpc/85xx: add sleep and deep sleep support
From: Zhao Chenhui <hidden>
Date: 2012-08-02 11:11:43
Also in:
lkml
On Tue, Jul 31, 2012 at 09:15:33AM -0500, Kumar Gala wrote:
On Jul 20, 2012, at 7:42 AM, Zhao Chenhui wrote:quoted
In sleep PM mode, the clocks of e500 core and unused IP blocks is turned off. IP blocks which are allowed to wake up the processor are still running. Some Freescale chips like MPC8536 and P1022 has deep sleep PM mode in addtion to the sleep PM mode. While in deep sleep PM mode, additionally, the power supply is removed from e500 core and most IP blocks. Only the blocks needed to wake up the chip out of deep sleep are ON. This patch supports 32-bit and 36-bit address space. The sleep mode is equal to the Standby state in Linux. The deep sleep mode is equal to the Suspend-to-RAM state of Linux Power Management. Command to enter sleep mode. echo standby > /sys/power/state Command to enter deep sleep mode. echo mem > /sys/power/state Signed-off-by: Dave Liu <redacted> Signed-off-by: Li Yang <redacted> Signed-off-by: Jin Qing <redacted> Signed-off-by: Jerry Huang <redacted> Cc: Scott Wood <redacted> Signed-off-by: Zhao Chenhui <redacted> --- arch/powerpc/Kconfig | 2 +- arch/powerpc/include/asm/cacheflush.h | 2 + arch/powerpc/kernel/Makefile | 3 + arch/powerpc/kernel/l2cache_85xx.S | 56 +++ arch/powerpc/platforms/85xx/Makefile | 2 +- arch/powerpc/platforms/85xx/sleep.S | 621 +++++++++++++++++++++++++++++++++ arch/powerpc/sysdev/fsl_pmc.c | 98 +++++- arch/powerpc/sysdev/fsl_soc.h | 5 + 8 files changed, 769 insertions(+), 20 deletions(-) create mode 100644 arch/powerpc/kernel/l2cache_85xx.S create mode 100644 arch/powerpc/platforms/85xx/sleep.Sdiff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index a7c6914..9d6de82 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig@@ -665,7 +665,7 @@ config FSL_PCIconfig FSL_PMC bool default y - depends on SUSPEND && (PPC_85xx || PPC_86xx) + depends on SUSPEND && (PPC_85xx || PPC_86xx) && !PPC_E500MC help Freescale MPC85xx/MPC86xx power management controller support (suspend/resume). For MPC83xx see platforms/83xx/suspend.cdiff --git a/arch/powerpc/include/asm/cacheflush.h b/arch/powerpc/include/asm/cacheflush.h index b843e35..6c5f1c2 100644 --- a/arch/powerpc/include/asm/cacheflush.h +++ b/arch/powerpc/include/asm/cacheflush.h@@ -58,6 +58,8 @@ extern void flush_inval_dcache_range(unsigned long start, unsigned long stop);extern void flush_dcache_phys_range(unsigned long start, unsigned long stop); #endif +extern void flush_dcache_L1(void); + #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ do { \ memcpy(dst, src, len); \diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 83afacd..0ddef24 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile@@ -64,6 +64,9 @@ obj-$(CONFIG_FA_DUMP) += fadump.oifeq ($(CONFIG_PPC32),y) obj-$(CONFIG_E500) += idle_e500.o endif +ifneq ($(CONFIG_PPC_E500MC),y) +obj-$(CONFIG_PPC_85xx) += l2cache_85xx.o +endifwhy do we need this, beyond reduce code size on an e500mc kernel build? If so why isn't 85xx/sleep.S doing the same thing? - k
Yes, it is a little awkward. I have an idea to put e500/e500mc/e5500/e6500 related flush cache routines into this file, and rename it to cache_fsl_booke.S. As for 85xx/sleep.S, it is used by fsl_pmc.c. I will use CONFIG_FSL_PMC to guard it. -Chenhui