summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/pm.h
diff options
context:
space:
mode:
authorAlex Frid <afrid@nvidia.com>2013-08-15 19:03:07 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:41:56 -0700
commit3b6ed5e6779109c1c53cd8c856411d407497ba9e (patch)
tree08f7ab7faca91006c1f930f1319e38698f4a72af /arch/arm/mach-tegra/pm.h
parent7fce58a4fee59eef6837480884602a18e25abae1 (diff)
ARM: tegra: power: Support CPU rail early startup
Added an option for cluster switch procedure to turn CPU rail ON via direct access to PMC registers before disabling interrupts, and then continue scheduler execution while the rail is ramping up. RAM repair is executed in s/w as well after rail ramp is done. Only non-CPU partition is power-gated/un-gated by flow controller in the atomic section. However, rail ramp in this case is serialized with CPU save context. Hence the trade-off: early startup option reduces interrupt disabled time during cluster switch, but increases overall cluster switch time. Bug 1351735 Change-Id: I5ff9afb2aa6b27b9aa4b2318ee2740dee4908e2f Signed-off-by: Alex Frid <afrid@nvidia.com> Reviewed-on: http://git-master/r/262864 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Bo Yan <byan@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/pm.h')
-rw-r--r--arch/arm/mach-tegra/pm.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/pm.h b/arch/arm/mach-tegra/pm.h
index a04be5620f3a..88332a002d96 100644
--- a/arch/arm/mach-tegra/pm.h
+++ b/arch/arm/mach-tegra/pm.h
@@ -86,6 +86,7 @@ struct tegra_suspend_platform_data {
unsigned long min_residency_ncpu_slow;
unsigned long min_residency_ncpu_fast;
unsigned long min_residency_crail;
+ bool crail_up_early;
#endif
unsigned long min_residency_mc_clk;
bool usb_vbus_internal_wake; /* support for internal vbus wake */
@@ -106,7 +107,12 @@ unsigned long tegra_mc_clk_stop_min_residency(void);
unsigned long tegra_min_residency_vmin_fmin(void);
unsigned long tegra_min_residency_ncpu(void);
unsigned long tegra_min_residency_crail(void);
+bool tegra_crail_can_start_early(void);
+#else
+static inline bool tegra_crail_can_start_early(void)
+{ return false; }
#endif
+void tegra_limit_cpu_power_timers(unsigned long us_on, unsigned long us_off);
void tegra_clear_cpu_in_pd(int cpu);
bool tegra_set_cpu_in_pd(int cpu);
@@ -135,6 +141,8 @@ unsigned long tegra_lp1bb_emc_min_rate_get(void);
#define FLOW_CTRL_RAM_REPAIR \
(IO_ADDRESS(TEGRA_FLOW_CTRL_BASE) + 0x40)
#define FLOW_CTRL_RAM_REPAIR_BYPASS_EN (1<<2)
+#define FLOW_CTRL_RAM_REPAIR_STS (1<<1)
+#define FLOW_CTRL_RAM_REPAIR_REQ (1<<0)
#define FUSE_SKU_DIRECT_CONFIG \
(IO_ADDRESS(TEGRA_FUSE_BASE) + 0x1F4)