a5: A5 suspend/resume for new sdk [1/2]
PD#SWPL-77633
Problem:
A5 suspend/resume for new sdk.
Solution:
Modify code.
Verify:
a5_av409
Change-Id: Ib7b2c468626e69424eaee9b03ff3b77dc164d141
Signed-off-by: Jianyi Shi <jianyi.shi@amlogic.com>
diff --git a/a5/clk.c b/a5/clk.c
index d51b116..5b2f978 100644
--- a/a5/clk.c
+++ b/a5/clk.c
@@ -9,6 +9,7 @@
#include "register.h"
#include "uart.h"
#include <task.h>
+#include "soc.h"
#include "timer_source.h"
#include "clk.h"
#include "clk_util.h"
@@ -327,6 +328,7 @@
REG32(CLKCTRL_OSCIN_CTRL) = oscin_ctrl_reg | (1<<31);
udelay(9000);
+ clear_dsp_wakeup_trigger();
/* switching tick timer (using osc_clk) */
alt_timebase(0);
diff --git a/a5/soc.h b/a5/soc.h
index b560e21..7dc0eb2 100644
--- a/a5/soc.h
+++ b/a5/soc.h
@@ -53,5 +53,6 @@
#define SYSCTRL_TIMER SYSCTRL_TIMERJ
#define SYSTICK_TIMER_CTRL SYSCTRL_TIMERJ_CTRL
#define SYSTICK_TIMER_CTRL_PARM (TIMER_MODE_IRQ_PERIO | TIMER_EN | TIMER_CLK_SEL_1US)
-
+#define DSP_FSM_TRIGER_CTRL SYSCTRL_TIMERI_CTRL
+#define DSP_FSM_TRIGER_SRC SYSCTRL_TIMERI
#endif
diff --git a/a5/vad_suspend.h b/a5/vad_suspend.h
index 5f1dfc2..86b573a 100644
--- a/a5/vad_suspend.h
+++ b/a5/vad_suspend.h
@@ -15,13 +15,34 @@
#ifdef __cplusplus
extern "C" {
#endif
-
#define VAD_TASK_PRI 5
#define DSP_VAD_WAKUP_ARM 0x5555AAAA
#define WAIT_SWITCH_TO_24MHZ 0x5A5A5A5A
#define WAIT_SWITCH_TO_RTC_PLL 0xA5A5A5A5
#define WAKEUP_FROM_OTHER_KEY 0xA8A8A8A8
+/*use timerI to wakeup dsp FSM*/
+static inline void wakeup_dsp(void)
+{
+ uint32_t value;
+ //uint32_t time_out = 20;
+
+ /*set alarm timer*/
+ REG32(DSP_FSM_TRIGER_SRC) = 10;/*10us*/
+
+ value = REG32(DSP_FSM_TRIGER_CTRL);
+ value &= ~((1 << 7) | (0x3) | (1 << 6));
+ value |= ((1 << 7) | (0 << 6) | (0x3));
+ REG32(DSP_FSM_TRIGER_CTRL) = value;
+ vTaskDelay(1);
+}
+
+static inline void clear_dsp_wakeup_trigger(void)
+{
+ REG32(DSP_FSM_TRIGER_SRC) = 0;
+ REG32(DSP_FSM_TRIGER_CTRL) = 0;
+}
+
#ifdef __cplusplus
}
#endif