[PATCH 2/9] PM: Save/Resume Upstream Bridge configurations in Standby

Brad Figg brad.figg at canonical.com
Wed Aug 19 03:44:07 UTC 2009


From: Tawfik Bayouk <tawfik at marvell.com>

Signed-off-by: Tawfik Bayouk <tawfik at marvell.com>
Signed-off-by: Saeed Bishara <saeed at marvell.com>
Signed-off-by: Brad Figg <brad.figg at canonical.com>
---
 arch/arm/mach-dove/common.c                        |   33 +++++++++++++++++++-
 arch/arm/mach-dove/common.h                        |    2 +
 .../dove_family/ctrlEnv/sys/mvCpuIfRegs.h          |    4 ++-
 arch/arm/mach-dove/pm.c                            |    2 +
 4 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c
index 6274858..1d2172d 100755
--- a/arch/arm/mach-dove/common.c
+++ b/arch/arm/mach-dove/common.c
@@ -46,6 +46,7 @@
 #include <plat/time.h>
 #include <plat/mv_xor.h>
 #include <ctrlEnv/mvCtrlEnvRegs.h>
+#include "ctrlEnv/sys/mvCpuIfRegs.h"
 #ifdef CONFIG_MV_ETHERNET
 #include "../plat-orion/mv_hal_drivers/mv_drivers_lsp/mv_network/mv_ethernet/mv_netdev.h"
 #endif
@@ -155,7 +156,7 @@ int mv_usb1_cmdline_config(char *s)
 #include "common.h"
 
 #ifdef CONFIG_PM
-enum orion_cpu_conf_save_state {
+enum orion_dwnstrm_conf_save_state {
 	/* CPU Configuration Registers */
 	DOVE_DWNSTRM_BRDG_CPU_CONFIG = 0,
 	DOVE_DWNSTRM_BRDG_CPU_CONTROL,
@@ -185,6 +186,22 @@ enum orion_cpu_conf_save_state {
 	writel(dove_downstream_regs[DOVE_DWNSTRM_BRDG_##x], x)
 
 static u32 dove_downstream_regs[DOVE_DWNSTRM_BRDG_SIZE];
+
+enum orion_uptrm_conf_save_state {
+	/* Upstream Bridge Configuration Registers */
+	DOVE_UPSTRM_AXI_P_D_CTRL_REG = 0,
+	DOVE_UPSTRM_D2X_ARB_LO_REG,
+	DOVE_UPSTRM_D2X_ARB_HI_REG,
+
+	DOVE_UPSTRM_BRDG_SIZE
+};
+
+#define DOVE_UPSTRM_BRDG_SAVE(x) \
+	dove_upstream_regs[DOVE_##x] = readl(DOVE_SB_REGS_VIRT_BASE | x)
+#define DOVE_UPSTRM_BRDG_RESTORE(x) \
+	writel(dove_upstream_regs[DOVE_##x], (DOVE_SB_REGS_VIRT_BASE | x))
+
+static u32 dove_upstream_regs[DOVE_UPSTRM_BRDG_SIZE];
 #endif
 
 /*****************************************************************************
@@ -1766,6 +1783,20 @@ void dove_restore_cpu_conf_regs(void)
 	DOVE_DWNSTRM_BRDG_RESTORE(POWER_MANAGEMENT);
 }
 
+void dove_save_upstream_regs(void)
+{
+	DOVE_UPSTRM_BRDG_SAVE(UPSTRM_AXI_P_D_CTRL_REG);
+	DOVE_UPSTRM_BRDG_SAVE(UPSTRM_D2X_ARB_LO_REG);
+	DOVE_UPSTRM_BRDG_SAVE(UPSTRM_D2X_ARB_HI_REG);
+}
+
+void dove_restore_upstream_regs(void)
+{
+	DOVE_UPSTRM_BRDG_RESTORE(UPSTRM_AXI_P_D_CTRL_REG);
+	DOVE_UPSTRM_BRDG_RESTORE(UPSTRM_D2X_ARB_LO_REG);
+	DOVE_UPSTRM_BRDG_RESTORE(UPSTRM_D2X_ARB_HI_REG);
+}
+
 void dove_save_timer_regs(void)
 {
 	DOVE_DWNSTRM_BRDG_SAVE(TIMER_CTRL);
diff --git a/arch/arm/mach-dove/common.h b/arch/arm/mach-dove/common.h
index 6af8dee..bc1d161 100755
--- a/arch/arm/mach-dove/common.h
+++ b/arch/arm/mach-dove/common.h
@@ -79,6 +79,8 @@ void dove_restore_timer_regs(void);
 void dove_restore_cpu_conf_regs(void);
 void dove_save_int_regs(void);
 void dove_restore_int_regs(void);
+void dove_save_upstream_regs(void);
+void dove_restore_upstream_regs(void);
 #endif
 
 #endif
diff --git a/arch/arm/mach-dove/mv_hal_support/dove_family/ctrlEnv/sys/mvCpuIfRegs.h b/arch/arm/mach-dove/mv_hal_support/dove_family/ctrlEnv/sys/mvCpuIfRegs.h
index 1ce660a..544cb51 100755
--- a/arch/arm/mach-dove/mv_hal_support/dove_family/ctrlEnv/sys/mvCpuIfRegs.h
+++ b/arch/arm/mach-dove/mv_hal_support/dove_family/ctrlEnv/sys/mvCpuIfRegs.h
@@ -80,7 +80,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define CPU_AHB_MBUS_MASK_INT_REG		(MV_CPUIF_REGS_BASE + 0x114)
 #define CPU_FTDLL_CONFIG_REG			(MV_CPUIF_REGS_BASE + 0x120)
 
-#define AXI_P_D_CTRL_REG			(MV_MISC_REGS_BASE + 0x224)
+#define UPSTRM_AXI_P_D_CTRL_REG			(MV_MISC_REGS_BASE + 0x224)
+#define UPSTRM_D2X_ARB_LO_REG			(MV_MISC_REGS_BASE + 0x2A8)
+#define UPSTRM_D2X_ARB_HI_REG			(MV_MISC_REGS_BASE + 0x2AC)
 #define CPU_CONTROL_REG				(MV_MISC_REGS_BASE + 0x25C)
 #define CPU_CTRL_PMU_CPU_RST_EN_OFFS		1
 #define CPU_CTRL_PMU_CPU_RST_EN_MASK		(0x1 << CPU_CTRL_PMU_CPU_RST_EN_OFFS)
diff --git a/arch/arm/mach-dove/pm.c b/arch/arm/mach-dove/pm.c
index 74ed90e..487e72b 100755
--- a/arch/arm/mach-dove/pm.c
+++ b/arch/arm/mach-dove/pm.c
@@ -664,6 +664,7 @@ void dove_standby(void)
 	/* Save CPU Peripherals state */
 	dove_save_cpu_wins();
 	dove_save_cpu_conf_regs();
+	dove_save_upstream_regs();	
 	dove_save_timer_regs();	
 	dove_save_int_regs();
 
@@ -682,6 +683,7 @@ void dove_standby(void)
 	/* Restore CPU Peripherals state */
 	dove_restore_int_regs();
 	dove_restore_timer_regs();	
+	dove_restore_upstream_regs();	
 	dove_restore_cpu_conf_regs();
 	dove_restore_cpu_wins();
 
-- 
1.6.0.4





More information about the kernel-team mailing list