[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