Commit b99d961c authored by Jimmy Huang's avatar Jimmy Huang Committed by Yidi Lin
Browse files

mt8173: support big core PLL control in system suspend flow



This patch adds big core ARMPLL control in system suspend flow.

Change-Id: I27a45dbbb360f17ff0b524a125630358ee2277e2
Signed-off-by: default avatarLouis Yu <louis.yu@mediatek.com>
Signed-off-by: default avatarJimmy Huang <jimmy.huang@mediatek.com>
parent 76d47fea
...@@ -95,8 +95,8 @@ void rtc_bbpu_power_down(void) ...@@ -95,8 +95,8 @@ void rtc_bbpu_power_down(void)
if (Writeif_unlock()) { if (Writeif_unlock()) {
RTC_Write(RTC_BBPU, bbpu); RTC_Write(RTC_BBPU, bbpu);
if (!Write_trigger()) if (!Write_trigger())
assert(1); assert(0);
} else { } else {
assert(1); assert(0);
} }
} }
...@@ -29,6 +29,9 @@ ...@@ -29,6 +29,9 @@
*/ */
#include <bakery_lock.h> #include <bakery_lock.h>
#include <debug.h> #include <debug.h>
#include <delay_timer.h>
#include <mmio.h>
#include <mt8173_def.h>
#include <spm.h> #include <spm.h>
#include <spm_suspend.h> #include <spm_suspend.h>
...@@ -38,8 +41,6 @@ ...@@ -38,8 +41,6 @@
* This driver controls the system power in system suspend flow. * This driver controls the system power in system suspend flow.
*/ */
#define WAIT_UART_ACK_TIMES 80 /* 80 * 10us */
#define WAKE_SRC_FOR_SUSPEND \ #define WAKE_SRC_FOR_SUSPEND \
(WAKE_SRC_KP | WAKE_SRC_EINT | WAKE_SRC_MD32 | \ (WAKE_SRC_KP | WAKE_SRC_EINT | WAKE_SRC_MD32 | \
WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN | WAKE_SRC_THERM | \ WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN | WAKE_SRC_THERM | \
...@@ -50,6 +51,13 @@ ...@@ -50,6 +51,13 @@
#define spm_is_wakesrc_invalid(wakesrc) \ #define spm_is_wakesrc_invalid(wakesrc) \
(!!((unsigned int)(wakesrc) & 0xc0003803)) (!!((unsigned int)(wakesrc) & 0xc0003803))
#define ARMCA15PLL_CON0 (APMIXED_BASE + 0x200)
#define ARMCA15PLL_CON1 (APMIXED_BASE + 0x204)
#define ARMCA15PLL_PWR_CON0 (APMIXED_BASE + 0x20c)
#define ARMCA15PLL_PWR_ON (1U << 0)
#define ARMCA15PLL_ISO_EN (1U << 1)
#define ARMCA15PLL_EN (1U << 0)
const unsigned int spm_flags = const unsigned int spm_flags =
SPM_DUALVCORE_PDN_DIS | SPM_PASR_DIS | SPM_DPD_DIS | SPM_DUALVCORE_PDN_DIS | SPM_PASR_DIS | SPM_DPD_DIS |
SPM_CPU_DVS_DIS | SPM_OPT | SPM_INFRA_PDN_DIS; SPM_CPU_DVS_DIS | SPM_OPT | SPM_INFRA_PDN_DIS;
...@@ -293,8 +301,23 @@ static enum wake_reason_t go_to_sleep_after_wfi(void) ...@@ -293,8 +301,23 @@ static enum wake_reason_t go_to_sleep_after_wfi(void)
return last_wr; return last_wr;
} }
static void bigcore_pll_on(void)
{
mmio_setbits_32(ARMCA15PLL_PWR_CON0, ARMCA15PLL_PWR_ON);
mmio_clrbits_32(ARMCA15PLL_PWR_CON0, ARMCA15PLL_ISO_EN);
mmio_setbits_32(ARMCA15PLL_CON0, ARMCA15PLL_EN);
}
static void bigcore_pll_off(void)
{
mmio_clrbits_32(ARMCA15PLL_CON0, ARMCA15PLL_EN);
mmio_setbits_32(ARMCA15PLL_PWR_CON0, ARMCA15PLL_ISO_EN);
mmio_clrbits_32(ARMCA15PLL_PWR_CON0, ARMCA15PLL_PWR_ON);
}
void spm_system_suspend(void) void spm_system_suspend(void)
{ {
bigcore_pll_off();
spm_lock_get(); spm_lock_get();
go_to_sleep_before_wfi(spm_flags); go_to_sleep_before_wfi(spm_flags);
set_suspend_ready(); set_suspend_ready();
...@@ -308,4 +331,7 @@ void spm_system_suspend_finish(void) ...@@ -308,4 +331,7 @@ void spm_system_suspend_finish(void)
INFO("spm_wake_reason=%d\n", spm_wake_reason); INFO("spm_wake_reason=%d\n", spm_wake_reason);
clear_all_ready(); clear_all_ready();
spm_lock_release(); spm_lock_release();
bigcore_pll_on();
/* Add 20us delay for turning on PLL*/
udelay(20);
} }
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#define RGU_BASE (IO_PHYS + 0x7000) #define RGU_BASE (IO_PHYS + 0x7000)
#define PMIC_WRAP_BASE (IO_PHYS + 0xD000) #define PMIC_WRAP_BASE (IO_PHYS + 0xD000)
#define MCUCFG_BASE (IO_PHYS + 0x200000) #define MCUCFG_BASE (IO_PHYS + 0x200000)
#define APMIXED_BASE (IO_PHYS + 0x209000)
#define TRNG_BASE (IO_PHYS + 0x20F000) #define TRNG_BASE (IO_PHYS + 0x20F000)
#define MT_GIC_BASE (IO_PHYS + 0x220000) #define MT_GIC_BASE (IO_PHYS + 0x220000)
#define PLAT_MT_CCI_BASE (IO_PHYS + 0x390000) #define PLAT_MT_CCI_BASE (IO_PHYS + 0x390000)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment