summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com>2019-07-02 21:18:37 +0800
committerCommit Bot <commit-bot@chromium.org>2019-07-26 10:18:54 +0000
commit95ff1a1b6af7183160b8de1f480d32430afc1b97 (patch)
tree33636970ed01bf8bc1ec8956d42cbbdf3b4a7c99
parentddefefa0e49462514d3b804e19622ef97d1266a5 (diff)
downloadchrome-ec-95ff1a1b6af7183160b8de1f480d32430afc1b97.tar.gz
chip/mt_scp/clock.c: enable pwrap_scp clock
During suspend, pmic wrap will be waken up by scp which is due to hw design. However, the clock of pmic wrap is 26mhz which would be turned off in the suspend mode, so we needs to change the clock of pmic wrap from 26mhz to ULPOSC. BRANCH=none BUG=b:135985700 TEST=make BOARD=kukui_scp -j && \ bash board/kukui_scp/update_scp $IP alias rtcalm='echo "+15" > \ /sys/class/rtc/rtc0/wakealarm' rtcalm cat /proc/driver/rtc powerd_dbus_suspend TEST=Can resume in suspend. Change-Id: I07b9d76f574fe1007e20f185bb278e0884397176 Signed-off-by: Hsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1686990 Reviewed-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-by: Yilun Lin <yllin@chromium.org> Commit-Queue: Nicolas Boichat <drinkcat@chromium.org>
-rw-r--r--chip/mt_scp/clock.c8
-rw-r--r--chip/mt_scp/registers.h16
2 files changed, 20 insertions, 4 deletions
diff --git a/chip/mt_scp/clock.c b/chip/mt_scp/clock.c
index edc50d5939..e28106bcc3 100644
--- a/chip/mt_scp/clock.c
+++ b/chip/mt_scp/clock.c
@@ -314,7 +314,13 @@ void scp_enable_clock(void)
/* Enable default clock gate */
SCP_CLK_GATE |= CG_DMA_CH3 | CG_DMA_CH2 | CG_DMA_CH1 | CG_DMA_CH0 |
- CG_I2C_M | CG_MAD_M;
+ CG_I2C_M | CG_MAD_M | CG_AP2P_M;
+
+ /* Select pwrap_ulposc */
+ AP_CLK_CFG_5 = (AP_CLK_CFG_5 & ~PWRAP_ULPOSC_MASK) | OSC_D16;
+
+ /* Enable pwrap_ulposc clock gate */
+ AP_CLK_CFG_5_CLR = PWRAP_ULPOSC_CG;
}
void clock_control_irq(void)
diff --git a/chip/mt_scp/registers.h b/chip/mt_scp/registers.h
index 248a63e1ee..1e6b9f90a9 100644
--- a/chip/mt_scp/registers.h
+++ b/chip/mt_scp/registers.h
@@ -400,9 +400,9 @@
#define SCP_EINT_DBNC_CLR REG32_ADDR(SCP_EINT_BASE + 0x700)
#define SCP_PMICWP2P_BASE (SCP_CFG_BASE + 0xB000)
-#define PMICW_WACS_CMD REG32(SCP_PMICWP2P + 0x200)
-#define PMICW_WACS_RDATA REG32(SCP_PMICWP2P + 0x204)
-#define PMICW_WACS_VLDCLR REG32(SCP_PMICWP2P + 0x208)
+#define PMICW_WACS_CMD REG32(SCP_PMICWP2P_BASE + 0x200)
+#define PMICW_WACS_RDATA REG32(SCP_PMICWP2P_BASE + 0x204)
+#define PMICW_WACS_VLDCLR REG32(SCP_PMICWP2P_BASE + 0x208)
#define SCP_SPMP2P_BASE (SCP_CFG_BASE + 0xC000)
#define SCP_DMA_BASE (SCP_CFG_BASE + 0xD000)
#define DMA_ACKINT_CHX REG32(SCP_DMA_BASE + 0x20)
@@ -471,6 +471,16 @@
#define TOPCK_BASE AP_BASE /* Top clock */
#define SCP_UART2_BASE (AP_BASE + 0x01002000) /* AP UART0 */
+/* CLK_CFG_5 regs */
+#define AP_CLK_CFG_5 REG32(TOPCK_BASE + 0x0090)
+#define PWRAP_ULPOSC_MASK (0x3000000)
+#define CLK26M (0 << 24)
+#define OSC_D16 (1 << 24)
+#define OSC_D4 (2 << 24)
+#define OSC_D8 (3 << 24)
+#define AP_CLK_CFG_5_CLR REG32(TOPCK_BASE + 0x0098)
+#define PWRAP_ULPOSC_CG BIT(31)
+
/* OSC meter */
#define AP_CLK_MISC_CFG_0 REG32(TOPCK_BASE + 0x0104)
#define MISC_METER_DIVISOR_MASK 0xff000000