summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cpu/samsung/exynos5250/power.c5
-rw-r--r--src/cpu/samsung/exynos5250/power.h8
-rw-r--r--src/cpu/samsung/exynos5250/wakeup.c5
-rw-r--r--src/cpu/samsung/exynos5250/wakeup.h1
-rw-r--r--src/cpu/samsung/exynos5420/power.c5
-rw-r--r--src/cpu/samsung/exynos5420/power.h10
-rw-r--r--src/cpu/samsung/exynos5420/wakeup.c5
-rw-r--r--src/cpu/samsung/exynos5420/wakeup.h1
8 files changed, 37 insertions, 3 deletions
diff --git a/src/cpu/samsung/exynos5250/power.c b/src/cpu/samsung/exynos5250/power.c
index e873129f64..c9d620a958 100644
--- a/src/cpu/samsung/exynos5250/power.c
+++ b/src/cpu/samsung/exynos5250/power.c
@@ -83,3 +83,8 @@ void power_enable_xclkout(void)
clrsetbits_le32(&exynos_power->pmu_debug, PMU_DEBUG_CLKOUT_SEL_MASK,
PMU_DEBUG_XXTI);
}
+
+void power_release_uart_retention(void)
+{
+ writel(1 << 28, &exynos_power->padret_uart_opt);
+}
diff --git a/src/cpu/samsung/exynos5250/power.h b/src/cpu/samsung/exynos5250/power.h
index df68b53dbd..5ea73c7ef8 100644
--- a/src/cpu/samsung/exynos5250/power.h
+++ b/src/cpu/samsung/exynos5250/power.h
@@ -59,7 +59,9 @@ struct exynos5_power {
uint32_t inform1; /* 0x0804 */
uint8_t reserved6[0x1f8];
uint32_t pmu_debug; /* 0x0A00*/
- uint8_t reserved7[0x2908];
+ uint8_t reserved7[0x2728];
+ uint32_t padret_uart_opt; /* 0x3128 */
+ uint8_t reserved8[0x1e0];
uint32_t ps_hold_ctrl; /* 0x330c */
} __attribute__ ((__packed__));
@@ -90,4 +92,8 @@ void power_exit_wakeup(void);
/* pmu debug is used for xclkout, enable xclkout with source as XXTI */
void power_enable_xclkout(void);
+/* Release UART retention on resume (only for debugging, may conflict with
+ * kernel). */
+void power_release_uart_retention(void);
+
#endif
diff --git a/src/cpu/samsung/exynos5250/wakeup.c b/src/cpu/samsung/exynos5250/wakeup.c
index 02f2ccd2db..b7161cf935 100644
--- a/src/cpu/samsung/exynos5250/wakeup.c
+++ b/src/cpu/samsung/exynos5250/wakeup.c
@@ -48,3 +48,8 @@ int get_wakeup_state(void)
return IS_NOT_WAKEUP;
}
+
+void wakeup_enable_uart(void)
+{
+ power_release_uart_retention();
+}
diff --git a/src/cpu/samsung/exynos5250/wakeup.h b/src/cpu/samsung/exynos5250/wakeup.h
index d38b52f7ed..690c6a3262 100644
--- a/src/cpu/samsung/exynos5250/wakeup.h
+++ b/src/cpu/samsung/exynos5250/wakeup.h
@@ -38,5 +38,6 @@ enum {
int wakeup_need_reset(void);
int get_wakeup_state(void);
void wakeup(void);
+void wakeup_enable_uart(void);
#endif /* CPU_SAMSUNG_EXYNOS5250_WAKEUP_H */
diff --git a/src/cpu/samsung/exynos5420/power.c b/src/cpu/samsung/exynos5420/power.c
index f649006f95..ecaf208c9c 100644
--- a/src/cpu/samsung/exynos5420/power.c
+++ b/src/cpu/samsung/exynos5420/power.c
@@ -85,3 +85,8 @@ void power_enable_xclkout(void)
clrsetbits_le32(&exynos_power->pmu_debug, PMU_DEBUG_CLKOUT_SEL_MASK,
PMU_DEBUG_XXTI);
}
+
+void power_release_uart_retention(void)
+{
+ writel(1 << 28, &exynos_power->padret_uart_opt);
+}
diff --git a/src/cpu/samsung/exynos5420/power.h b/src/cpu/samsung/exynos5420/power.h
index a89ee9dca8..fd1eac5768 100644
--- a/src/cpu/samsung/exynos5420/power.h
+++ b/src/cpu/samsung/exynos5420/power.h
@@ -70,9 +70,11 @@ struct exynos5_power {
} arm_core[4];
uint8_t reserved9[0xe04];
uint32_t padret_dram_status; /* 0x3004 */
- uint8_t reservedA[0x1e0];
+ uint8_t reservedA[0xe0];
+ uint32_t padret_uart_opt; /* 0x30e8 */
+ uint8_t reservedB[0xfc];
uint32_t padret_dram_cblk_opt; /* 0x31e8 */
- uint8_t reservedB[0x120];
+ uint8_t reservedC[0x120];
uint32_t ps_hold_ctrl; /* 0x330c */
} __attribute__ ((__packed__));
@@ -103,4 +105,8 @@ void power_exit_wakeup(void);
/* pmu debug is used for xclkout, enable xclkout with source as XXTI */
void power_enable_xclkout(void);
+/* Release UART retention on resume (only for debugging, may conflict with
+ * kernel). */
+void power_release_uart_retention(void);
+
#endif
diff --git a/src/cpu/samsung/exynos5420/wakeup.c b/src/cpu/samsung/exynos5420/wakeup.c
index 9d3f065233..753afd9591 100644
--- a/src/cpu/samsung/exynos5420/wakeup.c
+++ b/src/cpu/samsung/exynos5420/wakeup.c
@@ -51,3 +51,8 @@ int get_wakeup_state(void)
return IS_NOT_WAKEUP;
}
+
+void wakeup_enable_uart(void)
+{
+ power_release_uart_retention();
+}
diff --git a/src/cpu/samsung/exynos5420/wakeup.h b/src/cpu/samsung/exynos5420/wakeup.h
index 2658875e1a..27ce8e2f2d 100644
--- a/src/cpu/samsung/exynos5420/wakeup.h
+++ b/src/cpu/samsung/exynos5420/wakeup.h
@@ -38,5 +38,6 @@ enum {
int wakeup_need_reset(void);
int get_wakeup_state(void);
void wakeup(void);
+void wakeup_enable_uart(void);
#endif /* CPU_SAMSUNG_EXYNOS5420_WAKEUP_H */