ARM: tegra: Use CONFIG_TERGA_CLUSTER_CONTROL for cluster control
Scott Williams [Tue, 23 Aug 2011 21:23:18 +0000 (14:23 -0700)]
Change-Id: I07c389092132e52e2bdd3deab22c10f8e1e6035c
Signed-off-by: Scott Williams <scwilliams@nvidia.com>
Reviewed-on: http://git-master/r/48798
Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com>
Reviewed-by: Daniel Willemsen <dwillemsen@nvidia.com>

Rebase-Id: R1e0c9acc87c81f9d0dc394c09d6a7b8b94c48d3f

arch/arm/mach-tegra/Makefile
arch/arm/mach-tegra/platsmp.c
arch/arm/mach-tegra/pm-t3.c
arch/arm/mach-tegra/pm.c
arch/arm/mach-tegra/pm.h

index 355163a..dee3b9d 100644 (file)
@@ -67,7 +67,7 @@ obj-$(CONFIG_ARCH_TEGRA_3x_SOC)         += cpu-tegra3.o
 endif
 obj-$(CONFIG_TEGRA_PCI)                        += pcie.o
 obj-$(CONFIG_DEBUG_ICEDCC)              += sysfs-dcc.o
-obj-$(CONFIG_ARCH_TEGRA_3x_SOC)                += sysfs-cluster.o
+obj-$(CONFIG_TEGRA_CLUSTER_CONTROL)     += sysfs-cluster.o
 obj-$(CONFIG_ARCH_TEGRA_3x_SOC)         += tegra3_tsensor.o
 obj-$(CONFIG_TEGRA_DYNAMIC_PWRDET)      += powerdetect.o
 
index 050a822..190b002 100644 (file)
@@ -73,9 +73,7 @@ static unsigned int available_cpus(void)
 
 static int is_g_cluster_available(unsigned int cpu)
 {
-#ifdef CONFIG_ARCH_TEGRA_2x_SOC
-       return -EPERM;
-#else
+#ifdef CONFIG_TEGRA_CLUSTER_CONTROL
        u32 fuse_sku = readl(FUSE_SKU_DIRECT_CONFIG);
        u32 bond_out = readl(CAR_BOND_OUT_V);
 
@@ -91,6 +89,8 @@ static int is_g_cluster_available(unsigned int cpu)
         *        (e.g., low battery, over temperature, etc.). Add checks for
         *        these conditions. */
        return 0;
+#else
+       return -EPERM;
 #endif
 }
 
index 1156b83..c4f9552 100644 (file)
@@ -41,6 +41,7 @@
 #include "sleep.h"
 #include "tegra3_emc.h"
 
+#ifdef CONFIG_TEGRA_CLUSTER_CONTROL
 #define CAR_CCLK_BURST_POLICY \
        (IO_ADDRESS(TEGRA_CLK_RESET_BASE) + 0x20)
 
@@ -97,7 +98,6 @@
 #define CPU_CLOCK(cpu) (0x1<<(8+cpu))
 #define CPU_RESET(cpu) (0x1111ul<<(cpu))
 
-#ifdef CONFIG_PM_SLEEP
 static int cluster_switch_prolog_clock(unsigned int flags)
 {
        u32 reg;
@@ -278,7 +278,6 @@ void tegra_cluster_switch_epilog(unsigned int flags)
 
 int tegra_cluster_control(unsigned int us, unsigned int flags)
 {
-#ifdef CONFIG_PM_SLEEP
        static ktime_t last_g2lp;
 
        unsigned int target_cluster = flags & TEGRA_POWER_CLUSTER_MASK;
@@ -346,11 +345,10 @@ int tegra_cluster_control(unsigned int us, unsigned int flags)
        DEBUG_CLUSTER(("%s: %s\r\n", __func__, is_lp_cluster() ? "LP" : "G"));
 
        return 0;
-#else
-       return -ENODEV;
-#endif
 }
+#endif
 
+#ifdef CONFIG_PM_SLEEP
 static u32 mc_reserved_rsv;
 static u32 mc_emem_arb_override;
 
index 87efe6c..0d8dc57 100644 (file)
@@ -173,7 +173,7 @@ static const char *tegra_suspend_name[TEGRA_MAX_SUSPEND_MODE] = {
        [TEGRA_SUSPEND_LP0]     = "lp0",
 };
 
-#if defined(CONFIG_PM_SLEEP) && INSTRUMENT_CLUSTER_SWITCH
+#if defined(CONFIG_TEGRA_CLUSTER_CONTROL) && INSTRUMENT_CLUSTER_SWITCH
 enum tegra_cluster_switch_time_id {
        tegra_cluster_switch_time_id_start = 0,
        tegra_cluster_switch_time_id_prolog,
index cdf8007..0b62dcf 100644 (file)
@@ -89,35 +89,20 @@ extern void (*tegra_deep_sleep)(int);
 unsigned int tegra_idle_lp2_last(unsigned int us, unsigned int flags);
 
 #if defined(CONFIG_PM_SLEEP) && !defined(CONFIG_ARCH_TEGRA_2x_SOC)
-#define INSTRUMENT_CLUSTER_SWITCH 1    /* Should be zero for shipping code */
-#define DEBUG_CLUSTER_SWITCH 0         /* Should be zero for shipping code */
-#define PARAMETERIZE_CLUSTER_SWITCH 1  /* Should be zero for shipping code */
-int tegra_cluster_control(unsigned int us, unsigned int flags);
-void tegra_cluster_switch_prolog(unsigned int flags);
-void tegra_cluster_switch_epilog(unsigned int flags);
 void tegra_lp0_suspend_mc(void);
 void tegra_lp0_resume_mc(void);
 void tegra_lp0_cpu_mode(bool enter);
 #else
-static inline int tegra_cluster_control(unsigned int us, unsigned int flags)
-#define INSTRUMENT_CLUSTER_SWITCH 0    /* Must be zero for ARCH_TEGRA_2x_SOC */
-#define DEBUG_CLUSTER_SWITCH 0         /* Must be zero for ARCH_TEGRA_2x_SOC */
-#define PARAMETERIZE_CLUSTER_SWITCH 0  /* Must be zero for ARCH_TEGRA_2x_SOC */
-{
-       return -EPERM;
-}
-static inline void tegra_cluster_switch_prolog(unsigned int flags) {}
-static inline void tegra_cluster_switch_epilog(unsigned int flags) {}
 static inline void tegra_lp0_suspend_mc(void) {}
 static inline void tegra_lp0_resume_mc(void) {}
 static inline void tegra_lp0_cpu_mode(bool enter) {}
 #endif
 
-#ifdef CONFIG_ARCH_TEGRA_2x_SOC
-static inline bool is_g_cluster_present(void)   { return true; }
-static inline unsigned int is_lp_cluster(void)  { return 0; }
-void tegra2_lp0_suspend_init(void);
-#else
+#ifdef CONFIG_TEGRA_CLUSTER_CONTROL
+#define INSTRUMENT_CLUSTER_SWITCH 1    /* Should be zero for shipping code */
+#define DEBUG_CLUSTER_SWITCH 0         /* Should be zero for shipping code */
+#define PARAMETERIZE_CLUSTER_SWITCH 1  /* Should be zero for shipping code */
+
 static inline bool is_g_cluster_present(void)
 {
        u32 fuse_sku = readl(FUSE_SKU_DIRECT_CONFIG);
@@ -131,16 +116,26 @@ static inline unsigned int is_lp_cluster(void)
        reg = readl(FLOW_CTRL_CLUSTER_CONTROL);
        return (reg & 1); /* 0 == G, 1 == LP*/
 }
-#endif
+int tegra_cluster_control(unsigned int us, unsigned int flags);
+void tegra_cluster_switch_prolog(unsigned int flags);
+void tegra_cluster_switch_epilog(unsigned int flags);
+#else
+#define INSTRUMENT_CLUSTER_SWITCH 0    /* Must be zero for ARCH_TEGRA_2x_SOC */
+#define DEBUG_CLUSTER_SWITCH 0         /* Must be zero for ARCH_TEGRA_2x_SOC */
+#define PARAMETERIZE_CLUSTER_SWITCH 0  /* Must be zero for ARCH_TEGRA_2x_SOC */
 
-static inline void tegra_lp0_suspend_init(void)
+static inline bool is_g_cluster_present(void)   { return true; }
+static inline unsigned int is_lp_cluster(void)  { return 0; }
+static inline int tegra_cluster_control(unsigned int us, unsigned int flags)
 {
-#ifdef CONFIG_ARCH_TEGRA_2x_SOC
-       tegra2_lp0_suspend_init();
-#endif
+       return -EPERM;
 }
+static inline void tegra_cluster_switch_prolog(unsigned int flags) {}
+static inline void tegra_cluster_switch_epilog(unsigned int flags) {}
+#endif
 
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
+void tegra2_lp0_suspend_init(void);
 void tegra2_lp2_set_trigger(unsigned long cycles);
 unsigned long tegra2_lp2_timer_remain(void);
 #endif
@@ -149,6 +144,13 @@ void tegra3_lp2_set_trigger(unsigned long cycles);
 unsigned long tegra3_lp2_timer_remain(void);
 #endif
 
+static inline void tegra_lp0_suspend_init(void)
+{
+#ifdef CONFIG_ARCH_TEGRA_2x_SOC
+       tegra2_lp0_suspend_init();
+#endif
+}
+
 static inline void tegra_lp2_set_trigger(unsigned long cycles)
 {
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC