|
@@ -167,6 +167,35 @@ int exynos_cluster_power_state(int cluster)
|
|
|
S5P_CORE_LOCAL_PWR_EN);
|
|
|
}
|
|
|
|
|
|
+#define EXYNOS_BOOT_VECTOR_ADDR (samsung_rev() == EXYNOS4210_REV_1_1 ? \
|
|
|
+ S5P_INFORM7 : (samsung_rev() == EXYNOS4210_REV_1_0 ? \
|
|
|
+ (S5P_VA_SYSRAM + 0x24) : S5P_INFORM0))
|
|
|
+#define EXYNOS_BOOT_VECTOR_FLAG (samsung_rev() == EXYNOS4210_REV_1_1 ? \
|
|
|
+ S5P_INFORM6 : (samsung_rev() == EXYNOS4210_REV_1_0 ? \
|
|
|
+ (S5P_VA_SYSRAM + 0x20) : S5P_INFORM1))
|
|
|
+
|
|
|
+#define S5P_CHECK_AFTR 0xFCBA0D10
|
|
|
+
|
|
|
+/* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */
|
|
|
+static void exynos_set_wakeupmask(long mask)
|
|
|
+{
|
|
|
+ __raw_writel(mask, S5P_WAKEUP_MASK);
|
|
|
+}
|
|
|
+
|
|
|
+static void exynos_cpu_set_boot_vector(long flags)
|
|
|
+{
|
|
|
+ __raw_writel(virt_to_phys(exynos_cpu_resume), EXYNOS_BOOT_VECTOR_ADDR);
|
|
|
+ __raw_writel(flags, EXYNOS_BOOT_VECTOR_FLAG);
|
|
|
+}
|
|
|
+
|
|
|
+void exynos_enter_aftr(void)
|
|
|
+{
|
|
|
+ exynos_set_wakeupmask(0x0000ff3e);
|
|
|
+ exynos_cpu_set_boot_vector(S5P_CHECK_AFTR);
|
|
|
+ /* Set value of power down register for aftr mode */
|
|
|
+ exynos_sys_powerdown_conf(SYS_AFTR);
|
|
|
+}
|
|
|
+
|
|
|
/* For Cortex-A9 Diagnostic and Power control register */
|
|
|
static unsigned int save_arm_register[2];
|
|
|
|