Port 4.4 suspend code into TF-A

- Import register layout, flag definitions, etc. from 4.4
- Import low-power core firmware
- Copy register settings and control flow from 4.4
- Fix a bug on resume where the wrong initialization was called for the
interrupt controller.

Change-Id: Ia32717f7b6715b85370a382fa343a474d5fbb20a
diff --git a/plat/mediatek/mt8516/drivers/spm/spm.c b/plat/mediatek/mt8516/drivers/spm/spm.c
index 5e10629..2a781a4 100644
--- a/plat/mediatek/mt8516/drivers/spm/spm.c
+++ b/plat/mediatek/mt8516/drivers/spm/spm.c
@@ -124,10 +124,9 @@
 {
 	unsigned int con1;
 	int i = 0;
-
 	mmio_write_32(SPM_PCM_CON0, CON0_CFG_KEY | CON0_PCM_SW_RESET);
 	mmio_write_32(SPM_PCM_CON0, CON0_CFG_KEY);
-	while (mmio_read_32(SPM_PCM_FSM_STA) != PCM_FSM_STA_DEF) {
+	while ((mmio_read_32(SPM_PCM_FSM_STA) & 0x3fffff) != PCM_FSM_STA_DEF) {
 		i++;
 		if (i > 1000) {
 			i = 0;
@@ -158,23 +157,19 @@
 
 void spm_set_power_control(const struct pwr_ctrl *pwrctrl)
 {
-	mmio_write_32(SPM_AP_STANBY_CON, (!pwrctrl->md32_req_mask << 21) |
-					 (!pwrctrl->mfg_req_mask << 17) |
-					 (!pwrctrl->disp_req_mask << 16) |
+	mmio_write_32(SPM_AP_STANBY_CON,
+					 (!pwrctrl->srclkenai_mask << 25) |
+					 (!pwrctrl->conn_mask << 23) |
+					 (!pwrctrl->mm_ddr_req_mask << 18) |
+					 (!pwrctrl->vdec_req_mask << 17) |
+					 (!pwrctrl->mfg_req_mask << 16) |
+					 (!pwrctrl->disp1_req_mask << 15) |
+					 (!pwrctrl->disp0_req_mask << 14) |
 					 (!!pwrctrl->mcusys_idle_mask << 7) |
 					 (!!pwrctrl->ca15top_idle_mask << 6) |
 					 (!!pwrctrl->ca7top_idle_mask << 5) |
 					 (!!pwrctrl->wfi_op << 4));
-	mmio_write_32(SPM_PCM_SRC_REQ, (!!pwrctrl->pcm_apsrc_req << 0));
-	mmio_write_32(SPM_PCM_PASR_DPD_2, 0);
-
-	mmio_clrsetbits_32(SPM_CLK_CON, CC_SRCLKENA_MASK_0,
-		(pwrctrl->srclkenai_mask ? CC_SRCLKENA_MASK_0 : 0));
-
-	mmio_write_32(SPM_SLEEP_CA15_WFI0_EN, !!pwrctrl->ca15_wfi0_en);
-	mmio_write_32(SPM_SLEEP_CA15_WFI1_EN, !!pwrctrl->ca15_wfi1_en);
-	mmio_write_32(SPM_SLEEP_CA15_WFI2_EN, !!pwrctrl->ca15_wfi2_en);
-	mmio_write_32(SPM_SLEEP_CA15_WFI3_EN, !!pwrctrl->ca15_wfi3_en);
+	mmio_write_32(SPM_PCM_SRC_REQ, (!!pwrctrl->pcm_f26m_req << 1) | (!!pwrctrl->pcm_apsrc_req << 0));
 	mmio_write_32(SPM_SLEEP_CA7_WFI0_EN, !!pwrctrl->ca7_wfi0_en);
 	mmio_write_32(SPM_SLEEP_CA7_WFI1_EN, !!pwrctrl->ca7_wfi1_en);
 	mmio_write_32(SPM_SLEEP_CA7_WFI2_EN, !!pwrctrl->ca7_wfi2_en);
@@ -191,7 +186,8 @@
 		val = pwrctrl->timer_val_cust;
 
 	mmio_write_32(SPM_PCM_TIMER_VAL, val);
-	mmio_setbits_32(SPM_PCM_CON1, CON1_CFG_KEY);
+	mmio_setbits_32(SPM_PCM_CON1,
+			mmio_read_32(SPM_PCM_CON1) | CON1_CFG_KEY | CON1_PCM_TIMER_EN);
 
 	if (pwrctrl->wake_src_cust == 0)
 		mask = pwrctrl->wake_src;
@@ -202,7 +198,8 @@
 		mask &= ~WAKE_SRC_SYSPWREQ;
 
 	mmio_write_32(SPM_SLEEP_WAKEUP_EVENT_MASK, ~mask);
-	mmio_write_32(SPM_SLEEP_ISR_MASK, 0xfe04);
+	uint32_t isr = mmio_read_32(SPM_SLEEP_ISR_MASK) & ISRM_TWAM;
+	mmio_write_32(SPM_SLEEP_ISR_MASK, isr | ISRM_RET_IRQ_AUX);
 }
 
 void spm_get_wakeup_status(struct wake_status *wakesta)
@@ -253,11 +250,6 @@
 	con0 = mmio_read_32(SPM_PCM_CON0) & ~(CON0_IM_KICK | CON0_PCM_KICK);
 	mmio_write_32(SPM_PCM_CON0, con0 | CON0_CFG_KEY | CON0_IM_KICK);
 	mmio_write_32(SPM_PCM_CON0, con0 | CON0_CFG_KEY);
-
-	/* kick IM to fetch (only toggle PCM_KICK) */
-	con0 = mmio_read_32(SPM_PCM_CON0) & ~(CON0_IM_KICK | CON0_PCM_KICK);
-	mmio_write_32(SPM_PCM_CON0, con0 | CON0_CFG_KEY | CON0_PCM_KICK);
-	mmio_write_32(SPM_PCM_CON0, con0 | CON0_CFG_KEY);
 }
 
 void spm_set_sysclk_settle(void)
@@ -269,34 +261,11 @@
 
 void spm_kick_pcm_to_run(struct pwr_ctrl *pwrctrl)
 {
-	unsigned int con1;
-
-	con1 = mmio_read_32(SPM_PCM_CON1) &
-		~(CON1_PCM_WDT_WAKE_MODE | CON1_PCM_WDT_EN);
-
-	mmio_write_32(SPM_PCM_CON1, CON1_CFG_KEY | con1);
-
-	if (mmio_read_32(SPM_PCM_TIMER_VAL) > PCM_TIMER_MAX)
-		mmio_write_32(SPM_PCM_TIMER_VAL, PCM_TIMER_MAX);
-
-	mmio_write_32(SPM_PCM_WDT_TIMER_VAL,
-		mmio_read_32(SPM_PCM_TIMER_VAL) + PCM_WDT_TIMEOUT);
-
-	mmio_write_32(SPM_PCM_CON1, con1 | CON1_CFG_KEY | CON1_PCM_WDT_EN);
 	mmio_write_32(SPM_PCM_PASR_DPD_0, 0);
-
-	mmio_write_32(SPM_PCM_MAS_PAUSE_MASK, 0xffffffff);
-	mmio_write_32(SPM_PCM_REG_DATA_INI, 0);
-	mmio_clrbits_32(SPM_CLK_CON, CC_DISABLE_DORM_PWR);
-
 	mmio_write_32(SPM_PCM_FLAGS, pwrctrl->pcm_flags);
-
-	mmio_clrsetbits_32(SPM_CLK_CON, CC_LOCK_INFRA_DCM,
+	mmio_write_32(SPM_PCM_RESERVE, pwrctrl->pcm_reserve);
+	mmio_write_32(SPM_CLK_CON, (mmio_read_32(SPM_CLK_CON) & ~CC_LOCK_INFRA_DCM) |
 		(pwrctrl->infra_dcm_lock ? CC_LOCK_INFRA_DCM : 0));
-
-	mmio_write_32(SPM_PCM_PWR_IO_EN,
-		(pwrctrl->r0_ctrl_en ? PCM_PWRIO_EN_R0 : 0) |
-		(pwrctrl->r7_ctrl_en ? PCM_PWRIO_EN_R7 : 0));
 }
 
 void spm_clean_after_wakeup(void)
diff --git a/plat/mediatek/mt8516/drivers/spm/spm.h b/plat/mediatek/mt8516/drivers/spm/spm.h
index 3eabadb..16f586e 100644
--- a/plat/mediatek/mt8516/drivers/spm/spm.h
+++ b/plat/mediatek/mt8516/drivers/spm/spm.h
@@ -171,19 +171,25 @@
 #define	MP0_CPU3_PD_SLPB_CLAMP	(1U << 14)
 
 #define SPM_CPU_PDN_DIS		(1U << 0)
-#define SPM_INFRA_PDN_DIS	(1U << 1)
-#define SPM_DDRPHY_PDN_DIS	(1U << 2)
-#define SPM_DUALVCORE_PDN_DIS	(1U << 3)
-#define SPM_PASR_DIS		(1U << 4)
-#define SPM_DPD_DIS		(1U << 5)
-#define SPM_SODI_DIS		(1U << 6)
-#define SPM_MEMPLL_RESET	(1U << 7)
-#define SPM_MAINPLL_PDN_DIS	(1U << 8)
-#define SPM_CPU_DVS_DIS		(1U << 9)
-#define SPM_CPU_DORMANT		(1U << 10)
-#define SPM_EXT_VSEL_GPIO103	(1U << 11)
-#define SPM_DDR_HIGH_SPEED	(1U << 12)
-#define SPM_OPT			(1U << 13)
+#define SPM_CPUTOP_PDN_DIS	(1U << 1)
+#define SPM_L2_DORMANT_DIS	(1U << 2)
+#define SPM_MCU_PDN_DIS		(1U << 3)
+#define SPM_BUS26M_DIS		(1U << 4)
+#define SPM_MPLLOFF_DIS	        (1U << 5)
+#define SPM_DDRPHY_S1_DIS	(1U << 6)
+#define SPM_DDRPHY_S0_DIS	(1U << 7)
+#define SPM_FHC_SLEEP_DIS	(1U << 8)
+#define SPM_VPROC_LOW_DIS	(1U << 9)
+#define SPM_INFRA_PDN_DIS	(1U << 10)
+#define SPM_26M_DIS		(1U << 11)
+#define SPM_26M_OFF_DIS		(1U << 12)
+#define SPM_XO_OFF_DIS		(1U << 13)
+#define SPM_32K_LESS		(1U << 14)
+#define SPM_PLL_OFF_DIS		(1U << 15)
+#define SPM_NO_PMIC_WRAP        (1U << 16)
+#define SPM_ALL_IN_ONE_DIS	(1U << 17)
+#define SPM_PLLGP_OFF_DIS	(1U << 18)
+#define SPM_SRAMROM_PDN_DIS	(1U << 19)
 
 #define POWER_ON_VAL1_DEF	0x01011820
 #define PCM_FSM_STA_DEF		0x48490
@@ -194,6 +200,9 @@
 #define PCM_WDT_TIMEOUT		(30 * 32768)
 #define PCM_TIMER_MAX		(0xffffffff - PCM_WDT_TIMEOUT)
 
+#define PCM_CMD_MASK                0xffff0000
+#define PCM_CMD_SUSPEND_PCM 0x50d10000
+
 #define CON0_PCM_KICK		(1U << 0)
 #define CON0_IM_KICK		(1U << 1)
 #define CON0_IM_SLEEP_DVS	(1U << 3)
@@ -237,23 +246,53 @@
 #define WAKE_MISC_PCM_TIMER	(1U << 19)
 #define WAKE_MISC_CPU_WAKE	(1U << 20)
 
-/* define WAKE_SRC_XXX */
-#define WAKE_SRC_SPM_MERGE	(1 << 0)
-#define WAKE_SRC_KP		(1 << 2)
-#define WAKE_SRC_WDT		(1 << 3)
-#define WAKE_SRC_GPT		(1 << 4)
-#define WAKE_SRC_EINT		(1 << 6)
-#define WAKE_SRC_LOW_BAT	(1 << 9)
-#define WAKE_SRC_MD32		(1 << 10)
-#define WAKE_SRC_USB_CD		(1 << 14)
-#define WAKE_SRC_USB_PDN	(1 << 15)
-#define WAKE_SRC_AFE		(1 << 20)
-#define WAKE_SRC_THERM		(1 << 21)
-#define WAKE_SRC_CIRQ		(1 << 22)
-#define WAKE_SRC_SYSPWREQ	(1 << 24)
-#define WAKE_SRC_SEJ		(1 << 27)
-#define WAKE_SRC_ALL_MD32	(1 << 28)
-#define WAKE_SRC_CPU_IRQ	(1 << 29)
+#define ISRM_TWAM           (1U << 2)
+#define ISRM_RET_IRQ0		(1U << 8)
+#define ISRM_RET_IRQ1		(1U << 9)
+#define ISRM_RET_IRQ2		(1U << 10)
+#define ISRM_RET_IRQ3		(1U << 11)
+#define ISRM_RET_IRQ4		(1U << 12)
+#define ISRM_RET_IRQ5		(1U << 13)
+#define ISRM_RET_IRQ6		(1U << 14)
+#define ISRM_RET_IRQ7		(1U << 15)
+
+#define ISRM_RET_IRQ_AUX	(ISRM_RET_IRQ7 | ISRM_RET_IRQ6 |	\
+				 ISRM_RET_IRQ5 | ISRM_RET_IRQ4 |	\
+				 ISRM_RET_IRQ3 | ISRM_RET_IRQ2 |	\
+				 ISRM_RET_IRQ1)
+
+enum SPM_WAKE_SRC {
+	WAKE_SRC_SPM_MERGE = (1U << 0),	/* WAKE_ID_SPM_MERGE */
+	WAKE_SRC_AUDIO_REQ = (1U << 1),	/* WAKE_ID_AUDIO_REQ */
+	WAKE_SRC_KP = (1U << 2),	/* WAKE_ID_KP */
+	WAKE_SRC_WDT = (1U << 3),	/* WAKE_ID_WDT */
+	WAKE_SRC_GPT = (1U << 4),	/* WAKE_ID_GPT */
+	WAKE_SRC_EINT = (1U << 5),	/* WAKE_ID_EINT */
+	WAKE_SRC_CONN_WDT = (1U << 6),	/* WAKE_ID_CONN_WDT */
+	WAKE_SRC_GCE = (1U << 7),	/* WAKE_ID_GCE */
+	WAKE_SRC_LOW_BAT = (1U << 9),	/* WAKE_ID_LOW_BAT */
+	WAKE_SRC_CONN2AP = (1U << 10),	/* WAKE_ID_CONN2AP */
+	WAKE_SRC_F26M_WAKE = (1U << 11),	/* WAKE_ID_F26M_WAKE */
+	WAKE_SRC_F26M_SLEE = (1U << 12),	/* WAKE_ID_F26M_SLEEP */
+	WAKE_SRC_PCM_WDT = (1U << 13),	/* WAKE_ID_PCM_WDT */
+	WAKE_SRC_USB_CD = (1U << 14),	/* WAKE_ID_USB_CD */
+	WAKE_SRC_USB_PDN = (1U << 15),	/* WAKE_ID_USB_PDN */
+	WAKE_SRC_ETH = (1U << 16),	/* WAKE_ID_ETH */
+	WAKE_SRC_DBGSYS = (1U << 18),	/* WAKE_ID_DBGSYS */
+	WAKE_SRC_UART0 = (1U << 19),	/* WAKE_ID_UART0 */
+	WAKE_SRC_AFE = (1U << 20),	/* WAKE_ID_AFE */
+	WAKE_SRC_THERM = (1U << 21),	/* WAKE_ID_THERM */
+	WAKE_SRC_CIRQ = (1U << 22),	/* WAKE_ID_CIRQ */
+	WAKE_SRC_SEJ = (1U << 23),	/* WAKE_ID_SEJ */
+	WAKE_SRC_SYSPWREQ = (1U << 24),	/* WAKE_ID_SYSPWREQ */
+	WAKE_SRC_IRRX = (1U << 25),	/* WAKE_ID_IRRX */
+	WAKE_SRC_CPU0_IRQ = (1U << 26),	/* WAKE_ID_CPU0_IRQ */
+	WAKE_SRC_CPU1_IRQ = (1U << 27),	/* WAKE_ID_CPU1_IRQ */
+	WAKE_SRC_CPU2_IRQ = (1U << 28),	/* WAKE_ID_CPU2_IRQ */
+	WAKE_SRC_CPU3_IRQ = (1U << 29),	/* WAKE_ID_CPU3_IRQ */
+	WAKE_SRC_APSRC_WAKE = (1U << 30),	/* WAKE_ID_APSRC_WAKE */
+	WAKE_SRC_APSRC_SLEEP = (1U << 31),	/* WAKE_ID_APSRC_SLEEP */
+};
 
 enum wake_reason_t {
 	WR_NONE = 0,
@@ -273,28 +312,35 @@
 	unsigned int timer_val_cust;
 	unsigned int wake_src;
 	unsigned int wake_src_cust;
-	unsigned int wake_src_md32;
-	unsigned short r0_ctrl_en;
-	unsigned short r7_ctrl_en;
-	unsigned short infra_dcm_lock;
-	unsigned short pcm_apsrc_req;
-	unsigned short mcusys_idle_mask;
-	unsigned short ca15top_idle_mask;
-	unsigned short ca7top_idle_mask;
-	unsigned short wfi_op;
-	unsigned short ca15_wfi0_en;
-	unsigned short ca15_wfi1_en;
-	unsigned short ca15_wfi2_en;
-	unsigned short ca15_wfi3_en;
-	unsigned short ca7_wfi0_en;
-	unsigned short ca7_wfi1_en;
-	unsigned short ca7_wfi2_en;
-	unsigned short ca7_wfi3_en;
-	unsigned short disp_req_mask;
-	unsigned short mfg_req_mask;
-	unsigned short md32_req_mask;
-	unsigned short syspwreq_mask;
-	unsigned short srclkenai_mask;
+	unsigned char r0_ctrl_en;
+	unsigned char r7_ctrl_en;
+	unsigned char infra_dcm_lock;
+	unsigned char pcm_apsrc_req;
+	unsigned char pcm_f26m_req;
+	unsigned char mcusys_idle_mask;
+	unsigned char ca15top_idle_mask;
+	unsigned char ca7top_idle_mask;
+	unsigned char wfi_op;
+	unsigned char ca15_wfi0_en;
+	unsigned char ca15_wfi1_en;
+	unsigned char ca15_wfi2_en;
+	unsigned char ca15_wfi3_en;
+	unsigned char ca7_wfi0_en;
+	unsigned char ca7_wfi1_en;
+	unsigned char ca7_wfi2_en;
+	unsigned char ca7_wfi3_en;
+	unsigned char conn_mask;
+	unsigned char gce_req_mask;
+	unsigned char disp0_req_mask;
+	unsigned char disp1_req_mask;
+	unsigned char mfg_req_mask;
+	unsigned char vdec_req_mask;
+	unsigned char mm_ddr_req_mask;
+	unsigned char syspwreq_mask;
+	unsigned char srclkenai_mask;
+	unsigned int param1;
+	unsigned int param2;
+	unsigned int param3;
 };
 
 struct wake_status {
@@ -335,8 +381,8 @@
 #define EVENT_VEC(event, resume, imme, pc)	\
 	(((pc) << 16) |				\
 	 (!!(imme) << 6) |			\
-	 (!!(resume) << 5) |			\
-	 ((event) & 0x1f))
+	 (!!(resume) << 6) |			\
+	 ((event) & 0x3f))
 
 #define spm_read(addr)		mmio_read_32(addr)
 #define spm_write(addr, val)	mmio_write_32(addr, val)
@@ -348,8 +394,6 @@
 static inline void set_pwrctrl_pcm_flags(struct pwr_ctrl *pwrctrl,
 					 unsigned int flags)
 {
-	flags &= ~SPM_EXT_VSEL_GPIO103;
-
 	if (pwrctrl->pcm_flags_cust == 0)
 		pwrctrl->pcm_flags = flags;
 	else
diff --git a/plat/mediatek/mt8516/drivers/spm/spm_hotplug.c b/plat/mediatek/mt8516/drivers/spm/spm_hotplug.c
index b05b059..f889a24 100644
--- a/plat/mediatek/mt8516/drivers/spm/spm_hotplug.c
+++ b/plat/mediatek/mt8516/drivers/spm/spm_hotplug.c
@@ -185,14 +185,12 @@
 
 static struct pwr_ctrl hotplug_ctrl = {
 	.wake_src = 0,
-	.wake_src_md32 = 0,
 	.wfi_op = WFI_OP_OR,
 	.mcusys_idle_mask = 1,
 	.ca7top_idle_mask = 1,
 	.ca15top_idle_mask = 1,
-	.disp_req_mask = 1,
+	.disp0_req_mask = 1,
 	.mfg_req_mask = 1,
-	.md32_req_mask = 1,
 	.syspwreq_mask = 1,
 	.pcm_flags = 0,
 };
diff --git a/plat/mediatek/mt8516/drivers/spm/spm_mcdi.c b/plat/mediatek/mt8516/drivers/spm/spm_mcdi.c
index 83325ee..2067fc0 100644
--- a/plat/mediatek/mt8516/drivers/spm/spm_mcdi.c
+++ b/plat/mediatek/mt8516/drivers/spm/spm_mcdi.c
@@ -24,9 +24,9 @@
 
 #define WAKE_SRC_FOR_MCDI \
 	(WAKE_SRC_KP | WAKE_SRC_GPT | WAKE_SRC_EINT |		\
-	 WAKE_SRC_MD32 | WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN |	\
+	 WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN |	\
 	 WAKE_SRC_AFE | WAKE_SRC_THERM | WAKE_SRC_CIRQ |	\
-	 WAKE_SRC_SYSPWREQ | WAKE_SRC_CPU_IRQ)
+	 WAKE_SRC_SYSPWREQ)
 #define PCM_MCDI_HANDSHAKE_SYNC	0xbeefbeef
 #define PCM_MCDI_HANDSHAKE_ACK	0xdeaddead
 #define PCM_MCDI_UPDATE_INFORM	0xabcdabcd
@@ -218,14 +218,12 @@
 
 static struct pwr_ctrl mcdi_ctrl = {
 	.wake_src = WAKE_SRC_FOR_MCDI,
-	.wake_src_md32 = 0,
 	.wfi_op = WFI_OP_OR,
 	.mcusys_idle_mask = 1,
 	.ca7top_idle_mask = 1,
 	.ca15top_idle_mask = 1,
-	.disp_req_mask = 1,
+	.disp0_req_mask = 1,
 	.mfg_req_mask = 1,
-	.md32_req_mask = 1,
 };
 
 static const struct spm_lp_scen spm_mcdi = {
diff --git a/plat/mediatek/mt8516/drivers/spm/spm_suspend.c b/plat/mediatek/mt8516/drivers/spm/spm_suspend.c
index 2530dc2..9741667 100644
--- a/plat/mediatek/mt8516/drivers/spm/spm_suspend.c
+++ b/plat/mediatek/mt8516/drivers/spm/spm_suspend.c
@@ -19,19 +19,16 @@
  * This driver controls the system power in system suspend flow.
  */
 
-#define WAKE_SRC_FOR_SUSPEND					\
-	(WAKE_SRC_KP | WAKE_SRC_EINT | WAKE_SRC_MD32 |		\
-	WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN | WAKE_SRC_THERM |	\
-	WAKE_SRC_SYSPWREQ | WAKE_SRC_ALL_MD32)
-
+#define WAKE_SRC_FOR_SUSPEND \
+	(WAKE_SRC_KP | WAKE_SRC_EINT |  WAKE_SRC_CONN_WDT  | WAKE_SRC_CONN2AP | \
+	WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN | WAKE_SRC_ETH | WAKE_SRC_IRRX |\
+	WAKE_SRC_SYSPWREQ)
 #define WAKE_SRC_FOR_MD32  0
 
 #define spm_is_wakesrc_invalid(wakesrc)	\
 	(!!((unsigned int)(wakesrc) & 0xc0003803))
 
-const unsigned int spm_flags =
-	SPM_DUALVCORE_PDN_DIS | SPM_PASR_DIS | SPM_DPD_DIS |
-	SPM_CPU_DVS_DIS | SPM_OPT | SPM_INFRA_PDN_DIS;
+const unsigned int spm_flags = SPM_INFRA_PDN_DIS | SPM_26M_OFF_DIS | SPM_32K_LESS;
 
 enum wake_reason_t spm_wake_reason = WR_NONE;
 
@@ -39,82 +36,107 @@
  * PCM sequence for cpu suspend
  **********************************************************/
 static const unsigned int suspend_binary_ca7[] = {
-	0x81f58407, 0x81f68407, 0x803a0400, 0x803a8400, 0x1b80001f, 0x20000000,
-	0x80300400, 0x80318400, 0x80328400, 0xa1d28407, 0x81f20407, 0x81409801,
-	0xd8000245, 0x17c07c1f, 0x18c0001f, 0x10006234, 0xc0c031a0, 0x1200041f,
-	0x80310400, 0x1b80001f, 0x2000000a, 0xa0110400, 0x18c0001f, 0x100062c8,
-	0xe0e00010, 0xe0e00030, 0xe0e00070, 0xe0e000f0, 0x1b80001f, 0x2000001a,
-	0xe0e00ff0, 0xe8208000, 0x10006354, 0xfffe7fff, 0xe8208000, 0x10006834,
-	0x00000010, 0x81f00407, 0xa1dd0407, 0x81fd0407, 0xc2803780, 0x1290041f,
-	0x8880000c, 0x2f7be75f, 0xd8200642, 0x17c07c1f, 0x1b00001f, 0x7fffe7ff,
-	0xd0000680, 0x17c07c1f, 0x1b00001f, 0x7ffff7ff, 0xf0000000, 0x17c07c1f,
-	0x80880001, 0xd8000762, 0x17c07c1f, 0xd00027a0, 0x1200041f, 0xe8208000,
-	0x10006834, 0x00000000, 0x1b00001f, 0x3fffe7ff, 0x1b80001f, 0x20000004,
-	0xd820092c, 0x17c07c1f, 0xe8208000, 0x10006834, 0x00000010, 0xd00011a0,
-	0x17c07c1f, 0x18c0001f, 0x10006608, 0x1910001f, 0x10006608, 0x813b0404,
-	0xe0c00004, 0x1880001f, 0x10006320, 0xc0c03680, 0xe080000f, 0xd8200b23,
-	0x17c07c1f, 0x1b00001f, 0x7ffff7ff, 0xd00011a0, 0x17c07c1f, 0xe080001f,
-	0xe8208000, 0x10006354, 0xffffffff, 0x18c0001f, 0x100062c8, 0xe0e000f0,
-	0xe0e00030, 0xe0e00000, 0x81409801, 0xd8000fe5, 0x17c07c1f, 0x18c0001f,
-	0x10004094, 0x1910001f, 0x1020e374, 0xe0c00004, 0x18c0001f, 0x10004098,
-	0x1910001f, 0x1020e378, 0xe0c00004, 0x18c0001f, 0x10011094, 0x1910001f,
-	0x10213374, 0xe0c00004, 0x18c0001f, 0x10011098, 0x1910001f, 0x10213378,
-	0xe0c00004, 0x1910001f, 0x10213378, 0x18c0001f, 0x10006234, 0xc0c03360,
-	0x17c07c1f, 0xc2803780, 0x1290841f, 0xa1d20407, 0x81f28407, 0xa1d68407,
-	0xa0128400, 0xa0118400, 0xa0100400, 0xa01a8400, 0xa01a0400, 0x19c0001f,
-	0x001c239f, 0x1b00001f, 0x3fffefff, 0xf0000000, 0x17c07c1f, 0x808d8001,
-	0xd8201422, 0x17c07c1f, 0x803d8400, 0x1b80001f, 0x2000001a, 0x80340400,
-	0x17c07c1f, 0x17c07c1f, 0x80310400, 0x81fa0407, 0x81f18407, 0x81f08407,
-	0xa1dc0407, 0x1b80001f, 0x200000b6, 0xd00020e0, 0x17c07c1f, 0x1880001f,
-	0x20000208, 0x81411801, 0xd8001605, 0x17c07c1f, 0xe8208000, 0x1000f600,
-	0xd2000000, 0x1380081f, 0x18c0001f, 0x10006240, 0xe0e00016, 0xe0e0001e,
-	0xe0e0000e, 0xe0e0000f, 0x80368400, 0x1380081f, 0x80370400, 0x1380081f,
-	0x80360400, 0x803e0400, 0x1380081f, 0x80380400, 0x803b0400, 0xa01d8400,
-	0x1b80001f, 0x20000034, 0x803d8400, 0x1b80001f, 0x20000152, 0x803d0400,
-	0x1380081f, 0x18c0001f, 0x1000f5c8, 0x1910001f, 0x1000f5c8, 0xa1000404,
-	0xe0c00004, 0x18c0001f, 0x100125c8, 0x1910001f, 0x100125c8, 0xa1000404,
-	0xe0c00004, 0x1910001f, 0x100125c8, 0x80340400, 0x17c07c1f, 0x17c07c1f,
-	0x80310400, 0xe8208000, 0x10000044, 0x00000100, 0x1b80001f, 0x20000068,
-	0x1b80001f, 0x2000000a, 0x18c0001f, 0x10006240, 0xe0e0000d, 0xd8001e65,
-	0x17c07c1f, 0x18c0001f, 0x100040f4, 0x1910001f, 0x100040f4, 0xa11c8404,
-	0xe0c00004, 0x1b80001f, 0x2000000a, 0x813c8404, 0xe0c00004, 0x18c0001f,
-	0x100110f4, 0x1910001f, 0x100110f4, 0xa11c8404, 0xe0c00004, 0x1b80001f,
-	0x2000000a, 0x813c8404, 0xe0c00004, 0x1b80001f, 0x20000100, 0x81fa0407,
-	0x81f18407, 0x81f08407, 0xe8208000, 0x10006354, 0xfffe7b47, 0x18c0001f,
-	0x65930003, 0xc0c03080, 0x17c07c1f, 0xa1d80407, 0xa1dc0407, 0x18c0001f,
-	0x10006608, 0x1910001f, 0x10006608, 0xa11b0404, 0xe0c00004, 0xc2803780,
-	0x1291041f, 0x8880000c, 0x2f7be75f, 0xd8202222, 0x17c07c1f, 0x1b00001f,
-	0x3fffe7ff, 0xd0002260, 0x17c07c1f, 0x1b00001f, 0xbfffe7ff, 0xf0000000,
-	0x17c07c1f, 0x1890001f, 0x10006608, 0x808b0801, 0xd8202502, 0x17c07c1f,
-	0x1880001f, 0x10006320, 0xc0c03400, 0xe080000f, 0xd8002663, 0x17c07c1f,
-	0xe080001f, 0xa1da0407, 0x81fc0407, 0xa0110400, 0xa0140400, 0xa01d8400,
-	0xd0002fc0, 0x17c07c1f, 0x1b80001f, 0x20000fdf, 0x1890001f, 0x10006608,
-	0x80c98801, 0x810a8801, 0x10918c1f, 0xa0939002, 0x8080080d, 0xd82027a2,
-	0x12007c1f, 0x1b00001f, 0x3fffe7ff, 0x1b80001f, 0x20000004, 0xd800304c,
-	0x17c07c1f, 0x1b00001f, 0xbfffe7ff, 0xd0003040, 0x17c07c1f, 0x81f80407,
-	0x81fc0407, 0x18c0001f, 0x65930006, 0xc0c03080, 0x17c07c1f, 0x18c0001f,
-	0x65930007, 0xc0c03080, 0x17c07c1f, 0x1880001f, 0x10006320, 0xc0c03400,
-	0xe080000f, 0xd8002663, 0x17c07c1f, 0xe080001f, 0x18c0001f, 0x65930005,
-	0xc0c03080, 0x17c07c1f, 0xa1da0407, 0xe8208000, 0x10000048, 0x00000100,
-	0x1b80001f, 0x20000068, 0xa0110400, 0xa0140400, 0x18c0001f, 0x1000f5c8,
-	0x1910001f, 0x1000f5c8, 0x81200404, 0xe0c00004, 0x18c0001f, 0x100125c8,
-	0x1910001f, 0x100125c8, 0x81200404, 0xe0c00004, 0x1910001f, 0x100125c8,
-	0xa01d0400, 0xa01b0400, 0xa0180400, 0x803d8400, 0xa01e0400, 0xa0160400,
-	0xa0170400, 0xa0168400, 0x1b80001f, 0x20000104, 0x81411801, 0xd8002f85,
-	0x17c07c1f, 0x18c0001f, 0x10006240, 0xc0c03360, 0x17c07c1f, 0xe8208000,
-	0x1000f600, 0xd2000001, 0xd8000768, 0x17c07c1f, 0xc2803780, 0x1291841f,
-	0x1b00001f, 0x7ffff7ff, 0xf0000000, 0x17c07c1f, 0x1900001f, 0x10006830,
-	0xe1000003, 0x18c0001f, 0x10006834, 0xe0e00000, 0xe0e00001, 0xf0000000,
-	0x17c07c1f, 0xe0f07f16, 0x1380201f, 0xe0f07f1e, 0x1380201f, 0xe0f07f0e,
-	0x1b80001f, 0x20000104, 0xe0f07f0c, 0xe0f07f0d, 0xe0f07e0d, 0xe0f07c0d,
-	0xe0f0780d, 0xf0000000, 0xe0f0700d, 0xe0f07f0d, 0xe0f07f0f, 0xe0f07f1e,
-	0xf0000000, 0xe0f07f12, 0x11407c1f, 0x81f08407, 0x81f18407, 0x1b80001f,
-	0x20000001, 0xa1d08407, 0xa1d18407, 0x1392841f, 0x812ab401, 0x80ebb401,
-	0xa0c00c04, 0xd8203603, 0x17c07c1f, 0x80c01403, 0xd8203423, 0x01400405,
-	0x1900001f, 0x10006814, 0xf0000000, 0xe1000003, 0xa1d00407, 0x1b80001f,
-	0x20000208, 0x80ea3401, 0x1a00001f, 0x10006814, 0xf0000000, 0xe2000003,
-	0x18c0001f, 0x10006b6c, 0x1910001f, 0x10006b6c, 0xa1002804, 0xf0000000,
-	0xe0c00004, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x803d0400, 0x803b0400, 0xa1d58407, 0x81f68407, 0x803a0400, 0x1b80001f,
+	0x20000000, 0x80300400, 0x80328400, 0xa1d28407, 0x81f20407, 0x80338400,
+	0x80318400, 0xa15f8405, 0x82851801, 0xd80002ca, 0x17c07c1f, 0x18c0001f,
+	0x10006234, 0xc0c02c20, 0x1200041f, 0xa15e8405, 0x81f00407, 0xc2803a80,
+	0x1290041f, 0x82069801, 0x82471801, 0xa2002408, 0xd8000f88, 0x17c07c1f,
+	0xe8208000, 0x1000009c, 0x04000000, 0xe8208000, 0x100000b0, 0x00010000,
+	0xe8208000, 0x1000007c, 0x00002508, 0x1ad0001f, 0x10006c30, 0x8a80000b,
+	0x00000030, 0x1294281f, 0xa2922c0a, 0xaa80000a, 0x00000004, 0x1a00001f,
+	0x10210008, 0xe8208000, 0x10210004, 0x00001d00, 0xaa40000a, 0x00900000,
+	0xe2000009, 0xe8208000, 0x10210000, 0x00080401, 0x1b80001f, 0x20000032,
+	0xe8208000, 0x10210004, 0x00001d00, 0xe8208000, 0x10210008, 0x00100c00,
+	0xe8208000, 0x10210000, 0x00080401, 0x1b80001f, 0x2000079e, 0xe8208000,
+	0x10210004, 0x00001d00, 0xe8208000, 0x10210008, 0x00100400, 0xe8208000,
+	0x10210000, 0x00080401, 0x1b80001f, 0x20000032, 0xe8208000, 0x10210004,
+	0x00001d00, 0xe8208000, 0x10210008, 0x03400048, 0xe8208000, 0x10210000,
+	0x00080401, 0x1b80001f, 0x20000032, 0xe8208000, 0x10210004, 0x00001d00,
+	0xe8208000, 0x10210008, 0x00400004, 0xe8208000, 0x10210000, 0x00080401,
+	0x1b80001f, 0x20000032, 0xe8208000, 0x10210004, 0x00001d00, 0xe8208000,
+	0x10210008, 0x00702000, 0xe8208000, 0x10210000, 0x00080401, 0x1b80001f,
+	0x20000032, 0xe8208000, 0x1000006c, 0x04000000, 0xe8208000, 0x100000a0,
+	0x00010000, 0xe8208000, 0x1000007c, 0x00002528, 0x1b00001f, 0x7fffd7ff,
+	0xe8208000, 0x10000054, 0x00400000, 0xf0000000, 0x17c07c1f, 0x1b00001f,
+	0x3fffc7ff, 0xd800152c, 0x17c07c1f, 0x82281801, 0xc8c031c8, 0x17c07c1f,
+	0xe8208000, 0x10000084, 0x00400000, 0x82851801, 0xd80012aa, 0x17c07c1f,
+	0x18c0001f, 0x10006234, 0xc0c02da0, 0x17c07c1f, 0xa15e0405, 0xc2803a80,
+	0x1290841f, 0xa0138400, 0x1b00001f, 0x3fffcfff, 0xa0128400, 0xa0118400,
+	0x81f58407, 0xa1d68407, 0x82069801, 0x82471801, 0x82a02401, 0xa15f0405,
+	0xa1d20407, 0x81f28407, 0xa0100400, 0xd8001528, 0xa01a0400, 0xa01d2400,
+	0xa01b2800, 0xf0000000, 0x17c07c1f, 0x82059801, 0xd8001628, 0x17c07c1f,
+	0xa15f8405, 0x80318400, 0x80328400, 0x1b00001f, 0x7fffd7ff, 0xf0000000,
+	0x17c07c1f, 0x82059801, 0xd80017e8, 0x17c07c1f, 0xa15f0405, 0xa0128400,
+	0xa0118400, 0xc2803a80, 0x1290841f, 0xc2803a80, 0x129f041f, 0x1b00001f,
+	0x3fffcfff, 0xf0000000, 0x17c07c1f, 0x81f30407, 0x82831801, 0xd8001f0a,
+	0x17c07c1f, 0x82839801, 0xd8001b4a, 0x17c07c1f, 0x1a00001f, 0x10006240,
+	0xe220001e, 0xe220000c, 0x1b80001f, 0x2000001a, 0xe220000d, 0x1a00001f,
+	0x10006c60, 0x1a50001f, 0x10006c60, 0xa2540409, 0xe2000009, 0x1b80001f,
+	0x20000300, 0xa15d8405, 0xa2548409, 0xe2000009, 0x81fa8407, 0x81f80407,
+	0x1b80001f, 0x20000004, 0x81f88407, 0x1b80001f, 0x20000004, 0x80370400,
+	0x80310400, 0x1b80001f, 0x20000004, 0xe8208000, 0x102111a4, 0x0ffffffc,
+	0xe8208000, 0x102121a4, 0x0ffffffc, 0x1b80001f, 0x2000001a, 0x80368400,
+	0x81fa0407, 0x82aab401, 0xa156a805, 0x81f08407, 0x821a840d, 0xd8001e88,
+	0x17c07c1f, 0xa15c8405, 0xe8208000, 0x10006354, 0xfffff421, 0x82059801,
+	0xd8002028, 0x17c07c1f, 0xe8208000, 0x10006354, 0xfffff423, 0xa1df0407,
+	0xc2803a80, 0x1291041f, 0x1b00001f, 0xbfffc7ff, 0xf0000000, 0x17c07c1f,
+	0x1a40001f, 0x10006c2c, 0x1a10001f, 0x10006c2c, 0x02000408, 0xe2400008,
+	0x1a50001f, 0x10006608, 0x820ba401, 0x8217a00d, 0xd82024a8, 0x17c07c1f,
+	0x81f08407, 0xe8208000, 0x10006354, 0xfffff421, 0xa1df0407, 0x1b00001f,
+	0x3fffc7ff, 0x1b80001f, 0x20000004, 0xd8002bec, 0x17c07c1f, 0x1b00001f,
+	0xbfffc7ff, 0x1b80001f, 0x20000004, 0xd8002bec, 0x17c07c1f, 0x82831801,
+	0xd8002aea, 0x17c07c1f, 0x81ff0407, 0xc0c03060, 0x17c07c1f, 0xd8002283,
+	0x17c07c1f, 0xa1da0407, 0xa0170400, 0xa0168400, 0xe8208000, 0x102111a4,
+	0x0ffffff8, 0xe8208000, 0x102121a4, 0x0ffffff8, 0xa0110400, 0xa1d88407,
+	0xa1d80407, 0xa1da8407, 0x1a00001f, 0x10006c60, 0x1a700008, 0x17c07c1f,
+	0x82748409, 0xe2000009, 0xa15c0405, 0x1ad0001f, 0x10006b00, 0x82d1840b,
+	0xd800282b, 0x17c07c1f, 0x82839801, 0xd8002aea, 0x17c07c1f, 0x1a00001f,
+	0x10006c60, 0x82740409, 0xe2000009, 0x18c0001f, 0x10006240, 0xc0c02fc0,
+	0x17c07c1f, 0xa15d0405, 0x1ad0001f, 0x10006b00, 0x82d2040b, 0xd8002a4b,
+	0x17c07c1f, 0x82041801, 0xd8002b68, 0x17c07c1f, 0xa1d30407, 0xc2803a80,
+	0x1291841f, 0x1b00001f, 0x7fffd7ff, 0xf0000000, 0x17c07c1f, 0xe0f07f16,
+	0x1380201f, 0xe0f07f1e, 0x1380201f, 0xe0f07f0e, 0x1b80001f, 0x20000100,
+	0xe0f07f0c, 0xe0f07f0d, 0xe0f07e0d, 0xf0000000, 0x17c07c1f, 0xe0f07f0d,
+	0xe0f07f0f, 0xe0f07f1e, 0xe0f07f12, 0x1b80001f, 0x2000000a, 0xf0000000,
+	0x17c07c1f, 0xe0e00016, 0x1380201f, 0xe0e0001e, 0x1380201f, 0xe0e0000e,
+	0xe0e0000c, 0xe0e0000d, 0xf0000000, 0x17c07c1f, 0xe0e0000f, 0xe0e0001e,
+	0xe0e00012, 0xf0000000, 0x17c07c1f, 0x1212841f, 0xa1d08407, 0xd8203128,
+	0x80eab401, 0xd80030a3, 0x02200408, 0x1a00001f, 0x10006814, 0xe2000003,
+	0xf0000000, 0x17c07c1f, 0xa1d00407, 0x1211041f, 0x02200408, 0x1b80001f,
+	0x20000104, 0x80ca3401, 0xd8003363, 0x17c07c1f, 0xd8003208, 0x17c07c1f,
+	0x1a00001f, 0x10006814, 0xe2000001, 0xf0000000, 0x17c07c1f, 0xd800346a,
+	0x17c07c1f, 0xe2e00036, 0xe2e0003e, 0x1380201f, 0xe2e0003c, 0xd82035aa,
+	0x17c07c1f, 0x1b80001f, 0x20000018, 0xe2e0007c, 0x1b80001f, 0x20000003,
+	0xe2e0005c, 0xe2e0004c, 0xe2e0004d, 0xf0000000, 0x17c07c1f, 0xa1d40407,
+	0x1391841f, 0xf0000000, 0x17c07c1f, 0xd800370a, 0x17c07c1f, 0xe2e0004f,
+	0xe2e0006f, 0xe2e0002f, 0xd82037aa, 0x17c07c1f, 0xe2e0002e, 0xe2e0003e,
+	0xe2e00032, 0xf0000000, 0x17c07c1f, 0x82481801, 0xd82038c9, 0x17c07c1f,
+	0x1b80001f, 0x20000050, 0xd8003969, 0x17c07c1f, 0x18d0001f, 0x10006604,
+	0x10cf8c1f, 0xd82037e3, 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x1ad0001f,
+	0x10006b00, 0x82c0280b, 0xd80039ab, 0x17c07c1f, 0xf0000000, 0x17c07c1f,
+	0x1a00001f, 0x10006b18, 0x1a50001f, 0x10006b18, 0xa2402809, 0xe2000009,
+	0xf0000000, 0x17c07c1f, 0xe2200000, 0x1a700008, 0x17c07c1f, 0x17c07c1f,
+	0x82482401, 0xd8003ba9, 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0xe2200004,
+	0x1a700008, 0x17c07c1f, 0x17c07c1f, 0x82482401, 0xd8203cc9, 0x17c07c1f,
+	0xf0000000, 0x17c07c1f, 0xe220004f, 0xe220000f, 0xe220002f, 0xe220002e,
+	0xe220003e, 0xe2200032, 0xf0000000, 0x17c07c1f, 0xe2200036, 0x1a50001f,
+	0x1000660c, 0x82400809, 0xd8203ee9, 0x17c07c1f, 0xe220003e, 0x1a50001f,
+	0x10006610, 0x82400809, 0xd8203fa9, 0x17c07c1f, 0xe220007e, 0xe220007c,
+	0xe220005c, 0xe220004c, 0xe220004d, 0xf0000000, 0x17c07c1f, 0xc7c03dc0,
+	0x17c07c1f, 0xe2400001, 0x1259081f, 0x1a10001f, 0x1000660c, 0x82002408,
+	0xd82041a8, 0x17c07c1f, 0x1a10001f, 0x10006c60, 0xa2002808, 0x1a40001f,
+	0x10006c60, 0xe2400008, 0xf0000000, 0x17c07c1f, 0xc7c03dc0, 0x17c07c1f,
+	0xd800450a, 0x1254041f, 0xe8208000, 0x10006248, 0x00000000, 0x1a10001f,
+	0x10006248, 0x82002408, 0xd8004428, 0x17c07c1f, 0xf0000000, 0x17c07c1f,
+	0xe8208000, 0x10006244, 0x00000001, 0x1a10001f, 0x10006244, 0x82002408,
+	0xd8204568, 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x18d0001f, 0x10006c60,
+	0x82800c0a, 0x18c0001f, 0x10006c60, 0xe0c0000a, 0xe240001f, 0x1259081f,
+	0x1a90001f, 0x1000660c, 0x82802809, 0xd800474a, 0x17c07c1f, 0xc7c03ec0,
+	0x17c07c1f, 0xf0000000, 0x17c07c1f, 0xd80049ea, 0x1254041f, 0xe8208000,
+	0x10006248, 0x00000001, 0x1a90001f, 0x10006248, 0x8280240a, 0xd820490a,
+	0x17c07c1f, 0xd0004ae0, 0x17c07c1f, 0xe8208000, 0x10006244, 0x00000000,
+	0x1a90001f, 0x10006244, 0x8280240a, 0xd8004a4a, 0x17c07c1f, 0xc7c03ec0,
+	0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
 	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
 	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
 	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
@@ -124,78 +146,188 @@
 	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
 	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
 	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
-	0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001, 0xa1d48407, 0x1990001f,
-	0x10006b08, 0x1a50001f, 0x10006610, 0x8246a401, 0xe8208000, 0x10006b6c,
-	0x00000000, 0x1b00001f, 0x2f7be75f, 0x81469801, 0xd8004305, 0x17c07c1f,
-	0x1b80001f, 0xd00f0000, 0x8880000c, 0x2f7be75f, 0xd8005da2, 0x17c07c1f,
-	0xd0004340, 0x17c07c1f, 0x1b80001f, 0x500f0000, 0xe8208000, 0x10006354,
-	0xfffe7b47, 0xc0c06940, 0x81401801, 0xd80048e5, 0x17c07c1f, 0x81f60407,
-	0x18c0001f, 0x10006200, 0xc0c05e60, 0x12807c1f, 0xe8208000, 0x1000625c,
-	0x00000001, 0x1b80001f, 0x20000080, 0xc0c05e60, 0x1280041f, 0x18c0001f,
-	0x10006204, 0xc0c06200, 0x1280041f, 0x18c0001f, 0x10006208, 0xc0c05e60,
-	0x12807c1f, 0xe8208000, 0x10006244, 0x00000001, 0x1b80001f, 0x20000080,
-	0xc0c05e60, 0x1280041f, 0x18d0001f, 0x10200200, 0x18c0001f, 0x10006290,
-	0xc0c05e60, 0x1280041f, 0xe8208000, 0x10006404, 0x00003101, 0xc2803780,
-	0x1292041f, 0x81469801, 0xd8204a45, 0x17c07c1f, 0x1b00001f, 0x2f7be75f,
-	0x1b80001f, 0x30000004, 0x8880000c, 0x2f7be75f, 0xd8005802, 0x17c07c1f,
-	0xc0c064c0, 0x17c07c1f, 0x18c0001f, 0x10006294, 0xe0f07fff, 0xe0e00fff,
-	0xe0e000ff, 0x81449801, 0xd8004c85, 0x17c07c1f, 0x1a00001f, 0x10006604,
-	0xe2200003, 0xc0c06580, 0x17c07c1f, 0xe2200005, 0xc0c06580, 0x17c07c1f,
-	0xa1d38407, 0xa1d98407, 0x1800001f, 0x00000012, 0x1800001f, 0x00000e12,
-	0x1800001f, 0x03800e12, 0x1800001f, 0x038e0e12, 0xe8208000, 0x10006310,
-	0x0b1600f8, 0x1b00001f, 0xbfffe7ff, 0x1b80001f, 0x90100000, 0x80c00400,
-	0xd8204fa3, 0xa1d58407, 0xa1dd8407, 0x1b00001f, 0x3fffefff, 0xd0004e60,
-	0x17c07c1f, 0x1890001f, 0x100063e8, 0x88c0000c, 0x2f7be75f, 0xd80051c3,
-	0x17c07c1f, 0x80c40001, 0xd8005143, 0x17c07c1f, 0x1b00001f, 0xbfffe7ff,
-	0xd0005180, 0x17c07c1f, 0x1b00001f, 0x7ffff7ff, 0xd0004e60, 0x17c07c1f,
-	0x80c40001, 0xd82052c3, 0x17c07c1f, 0xa1de0407, 0x1b00001f, 0x7fffe7ff,
-	0xd0004e60, 0x17c07c1f, 0x18c0001f, 0x10006294, 0xe0e001fe, 0xe0e003fc,
-	0xe0e007f8, 0xe0e00ff0, 0x1b80001f, 0x20000020, 0xe0f07ff0, 0xe0f07f00,
-	0x81449801, 0xd80055a5, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200002,
-	0xc0c06580, 0x17c07c1f, 0xe2200004, 0xc0c06580, 0x17c07c1f, 0x1b80001f,
-	0x200016a8, 0x1800001f, 0x03800e12, 0x1b80001f, 0x20000300, 0x1800001f,
-	0x00000e12, 0x1b80001f, 0x20000300, 0x1800001f, 0x00000012, 0x1b80001f,
-	0x20000104, 0x10007c1f, 0x81f38407, 0x81f98407, 0x81f90407, 0x81f40407,
-	0x1b80001f, 0x200016a8, 0x81401801, 0xd8005da5, 0x17c07c1f, 0xe8208000,
-	0x10006404, 0x00002101, 0x18c0001f, 0x10006290, 0x1212841f, 0xc0c05fe0,
-	0x12807c1f, 0xc0c05fe0, 0x1280041f, 0x18c0001f, 0x10006208, 0x1212841f,
-	0xc0c05fe0, 0x12807c1f, 0xe8208000, 0x10006244, 0x00000000, 0x1b80001f,
-	0x20000080, 0xc0c05fe0, 0x1280041f, 0xe8208000, 0x10200268, 0x000ffffe,
-	0x18c0001f, 0x10006204, 0x1212841f, 0xc0c06340, 0x1280041f, 0x18c0001f,
-	0x10006200, 0x1212841f, 0xc0c05fe0, 0x12807c1f, 0xe8208000, 0x1000625c,
-	0x00000000, 0x1b80001f, 0x20000080, 0xc0c05fe0, 0x1280041f, 0x19c0001f,
-	0x01411820, 0x1ac0001f, 0x55aa55aa, 0x10007c1f, 0xf0000000, 0xd8005f0a,
-	0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f, 0xd8205faa, 0x17c07c1f,
-	0xe2e0002e, 0xe2e0003e, 0xe2e00032, 0xf0000000, 0x17c07c1f, 0xd80060aa,
-	0x17c07c1f, 0xe2e00036, 0xe2e0003e, 0x1380201f, 0xe2e0003c, 0xd82061ca,
-	0x17c07c1f, 0x1380201f, 0xe2e0007c, 0x1b80001f, 0x20000003, 0xe2e0005c,
-	0xe2e0004c, 0xe2e0004d, 0xf0000000, 0x17c07c1f, 0xd8206309, 0x17c07c1f,
-	0xe2e0000d, 0xe2e0000c, 0xe2e0001c, 0xe2e0001e, 0xe2e00016, 0xe2e00012,
-	0xf0000000, 0x17c07c1f, 0xd8206489, 0x17c07c1f, 0xe2e00016, 0x1380201f,
-	0xe2e0001e, 0x1380201f, 0xe2e0001c, 0x1380201f, 0xe2e0000c, 0xe2e0000d,
-	0xf0000000, 0x17c07c1f, 0xa1d40407, 0x1391841f, 0xa1d90407, 0x1393041f,
-	0xf0000000, 0x17c07c1f, 0x18d0001f, 0x10006604, 0x10cf8c1f, 0xd8206583,
-	0x17c07c1f, 0xf0000000, 0x17c07c1f, 0xe8208000, 0x11008014, 0x00000002,
-	0xe8208000, 0x11008020, 0x00000101, 0xe8208000, 0x11008004, 0x000000d0,
-	0x1a00001f, 0x11008000, 0xd800684a, 0xe220005d, 0xd820686a, 0xe2200000,
-	0xe2200001, 0xe8208000, 0x11008024, 0x00000001, 0x1b80001f, 0x20000424,
-	0xf0000000, 0x17c07c1f, 0xa1d10407, 0x1b80001f, 0x20000020, 0xf0000000,
-	0x17c07c1f
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
+	0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001,
+	0xe8208000, 0x10006b18, 0x00000000, 0xe8208000, 0x10006c00, 0x00000000,
+	0x11407c1f, 0x1a10001f, 0x1000660c, 0x8166a001, 0x82662001, 0xa150a405,
+	0x8265a001, 0xa1512405, 0x82652001, 0xa151a405, 0x8264a001, 0xa1562405,
+	0x1990001f, 0x10006b08, 0x82089801, 0xd800a6e8, 0x17c07c1f, 0xd000a320,
+	0x17c07c1f, 0x1100241f, 0x1b00001f, 0x3ffec6fd, 0x82461401, 0xd8008d29,
+	0x17c07c1f, 0x1a10001f, 0x10006720, 0x82002001, 0x82201408, 0x82201008,
+	0xd82085a8, 0x17c07c1f, 0x1a00001f, 0x10006c40, 0xc7c03b80, 0x17c07c1f,
+	0xa1400405, 0x1a10001f, 0x10006720, 0x8200a001, 0x82209408, 0x82209008,
+	0xd8208728, 0x17c07c1f, 0x1a00001f, 0x10006c44, 0xc7c03b80, 0x17c07c1f,
+	0xa1508405, 0x1a10001f, 0x10006720, 0x82012001, 0x82211408, 0x82211008,
+	0xd82088a8, 0x17c07c1f, 0x1a00001f, 0x10006c48, 0xc7c03b80, 0x17c07c1f,
+	0xa1510405, 0x1a10001f, 0x10006720, 0x8201a001, 0x82219408, 0x82219008,
+	0xd8208a28, 0x17c07c1f, 0x1a00001f, 0x10006c4c, 0xc7c03b80, 0x17c07c1f,
+	0xa1518405, 0xa260141f, 0x8a400009, 0x0000000f, 0xd8008d29, 0x17c07c1f,
+	0x82661401, 0x82661009, 0xd8208d29, 0x17c07c1f, 0x1a50001f, 0x10006720,
+	0x828c2401, 0xd8208b4a, 0x17c07c1f, 0x1a00001f, 0x10006c50, 0xe8208000,
+	0x10006c54, 0x00000001, 0xc7c03b80, 0x17c07c1f, 0xa1560405, 0x1b80001f,
+	0x90100000, 0x82261401, 0xd8008ee8, 0x17c07c1f, 0x8a000004, 0x0000100f,
+	0xd8008e48, 0x17c07c1f, 0xd8208eec, 0x17c07c1f, 0x1a00001f, 0x10006c50,
+	0xc7c03ca0, 0x17c07c1f, 0x81760405, 0x82461401, 0xd800a269, 0x17c07c1f,
+	0x82001401, 0xd82093c8, 0x17c07c1f, 0x82401001, 0xd8009109, 0x17c07c1f,
+	0x8a40000c, 0x07fde7ff, 0x1a10001f, 0x10006918, 0x822e2001, 0xa2402009,
+	0xd82093c9, 0x17c07c1f, 0x1a40001f, 0x10006c24, 0x1a10001f, 0x10006918,
+	0x8a000008, 0xf0000000, 0xa2003008, 0xe2400008, 0x1a00001f, 0x10006c40,
+	0xc7c03ca0, 0x17c07c1f, 0x81600405, 0xe8208000, 0x10006f00, 0x00000000,
+	0xe8208000, 0x10006b30, 0x00000000, 0xe8208000, 0x100063e0, 0x00000001,
+	0x82009401, 0xd82098a8, 0x17c07c1f, 0x82409001, 0xd80095e9, 0x17c07c1f,
+	0x824db001, 0x1a10001f, 0x10006918, 0x822ea001, 0xa2402009, 0x1a90001f,
+	0x10006b04, 0x82a0a801, 0xb24c312a, 0xd82098a9, 0x17c07c1f, 0x1a40001f,
+	0x10006c28, 0x1a10001f, 0x10006918, 0x8a000008, 0xf0000000, 0xa2003008,
+	0xe2400008, 0x1a00001f, 0x10006c44, 0xc7c03ca0, 0x17c07c1f, 0x81708405,
+	0xe8208000, 0x10006f04, 0x00000000, 0xe8208000, 0x10006b34, 0x00000000,
+	0xe8208000, 0x100063e0, 0x00000002, 0x82011401, 0xd8209d88, 0x17c07c1f,
+	0x82411001, 0xd8009ac9, 0x17c07c1f, 0x824e3001, 0x1a10001f, 0x10006918,
+	0x822f2001, 0xa2402009, 0x1a90001f, 0x10006b04, 0x82a12801, 0xb24c312a,
+	0xd8209d89, 0x17c07c1f, 0x1a40001f, 0x10006c2c, 0x1a10001f, 0x10006918,
+	0x8a000008, 0xf0000000, 0xa2003008, 0xe2400008, 0x1a00001f, 0x10006c48,
+	0xc7c03ca0, 0x17c07c1f, 0x81710405, 0xe8208000, 0x10006f08, 0x00000000,
+	0xe8208000, 0x10006b38, 0x00000000, 0xe8208000, 0x100063e0, 0x00000004,
+	0x82019401, 0xd820a268, 0x17c07c1f, 0x82419001, 0xd8009fa9, 0x17c07c1f,
+	0x824eb001, 0x1a10001f, 0x10006918, 0x822fa001, 0xa2402009, 0x1a90001f,
+	0x10006b04, 0x82a1a801, 0xb24c312a, 0xd820a269, 0x17c07c1f, 0x1a40001f,
+	0x10006c30, 0x1a10001f, 0x10006918, 0x8a000008, 0xf0000000, 0xa2003008,
+	0xe2400008, 0x1a00001f, 0x10006c4c, 0xc7c03ca0, 0x17c07c1f, 0x81718405,
+	0xe8208000, 0x10006f0c, 0x00000000, 0xe8208000, 0x10006b3c, 0x00000000,
+	0xe8208000, 0x100063e0, 0x00000008, 0x8a000004, 0xffff0000, 0x6aa00008,
+	0xabcd0000, 0xd800a62a, 0x17c07c1f, 0x1a50001f, 0x10006b00, 0x8a000009,
+	0xffff0000, 0x6aa00008, 0xbeef0000, 0xd800836a, 0x17c07c1f, 0x6aa00008,
+	0xabcd0000, 0xd800836a, 0x17c07c1f, 0x6aa00008, 0x50d10000, 0xd800a6ea,
+	0x17c07c1f, 0x6aa00008, 0xdcba0000, 0xd800a62a, 0x1100241f, 0x1b80001f,
+	0x20000104, 0xd000a320, 0x17c07c1f, 0x8a000004, 0xffff0000, 0xa9000008,
+	0x0000dead, 0xf0000000, 0x17c07c1f, 0xa1d50407, 0x1b80001f, 0x2000037e,
+	0x81f50407, 0xa1d48407, 0x1990001f, 0x10006b08, 0xe8208000, 0x10006b18,
+	0x00000000, 0x11407c1f, 0x1b00001f, 0x3fffc7ff, 0x1b80001f, 0xd00f0000,
+	0xd800c9ec, 0x17c07c1f, 0xa1578405, 0xe8208000, 0x10006354, 0xfffff423,
+	0x82059801, 0xd820aa48, 0x17c07c1f, 0xe8208000, 0x10006354, 0xfffff421,
+	0x1b80001f, 0x20000020, 0x82801801, 0xd800afca, 0x17c07c1f, 0x81f60407,
+	0x1a00001f, 0x10006c40, 0xc7c03b80, 0x17c07c1f, 0xa1580405, 0xc20039a0,
+	0x1290041f, 0xa1d10407, 0x82809801, 0xd800afca, 0x17c07c1f, 0x1a00001f,
+	0x10006c54, 0x82a11801, 0xe200000a, 0x1a00001f, 0x10006c50, 0xc7c03b80,
+	0x17c07c1f, 0xa1590405, 0xc20039a0, 0x1290841f, 0x82819801, 0xd800afca,
+	0x17c07c1f, 0x1a00001f, 0x10006290, 0xc2003dc0, 0x17c07c1f, 0x1b80001f,
+	0x20000027, 0x82811801, 0xa1d1a807, 0xa15a0405, 0xc20039a0, 0x1291041f,
+	0xc2803a80, 0x1292041f, 0x82499801, 0xd800b149, 0x17c07c1f, 0x1a00001f,
+	0x10006294, 0xe8208000, 0x10006294, 0x0003ffff, 0xe2203fff, 0xe22003ff,
+	0xd000b1a0, 0x17c07c1f, 0xe8208000, 0x10006294, 0x0003fc3f, 0xc20039a0,
+	0x1293041f, 0x82021801, 0xd800b3a8, 0x17c07c1f, 0x1a10001f, 0x10000004,
+	0x1a40001f, 0x10000004, 0x82378408, 0xe2400008, 0x1b80001f, 0x2000000a,
+	0xa1d40407, 0x1b80001f, 0x20000003, 0x82049801, 0xd800b4c8, 0x17c07c1f,
+	0xe8208000, 0x10006604, 0x00000001, 0xc0c037e0, 0x17c07c1f, 0xa15b0405,
+	0x82879801, 0xd800b86a, 0x17c07c1f, 0xa1d38407, 0x82829801, 0xd800b5ca,
+	0x17c07c1f, 0xa1d98407, 0xa0108400, 0xa0148400, 0xa0188400, 0x82829801,
+	0xd800b86a, 0x17c07c1f, 0xa0120400, 0xa0150400, 0xa0158400, 0xa01f0400,
+	0xa0190400, 0xa0198400, 0x82891801, 0xd800b86a, 0x17c07c1f, 0x1a10001f,
+	0x10018000, 0x82398408, 0x1a40001f, 0x10018000, 0xe2400008, 0xe8208000,
+	0x10006310, 0x0b160008, 0xe8208000, 0x10006c00, 0x0000000f, 0x1b00001f,
+	0xbfffc7ff, 0x82861801, 0xb2859941, 0xd820baca, 0x17c07c1f, 0xe8208000,
+	0x10006c00, 0x0000003c, 0x1b80001f, 0x90100000, 0xd000bba0, 0x17c07c1f,
+	0x1b80001f, 0x90100000, 0x82000001, 0xc8c00008, 0x17c07c1f, 0xd000bc00,
+	0x17c07c1f, 0x82028001, 0xc8c01568, 0x17c07c1f, 0x820f1c01, 0xc8e01868,
+	0x17c07c1f, 0x1b00001f, 0x3fffc7ff, 0x82499801, 0xd800be49, 0x17c07c1f,
+	0x1a00001f, 0x10006294, 0xe22007fe, 0xe2200ffc, 0xe2201ff8, 0xe2203ff0,
+	0xe2203fe0, 0xe2203fc0, 0xd000c080, 0x17c07c1f, 0xe8208000, 0x10006294,
+	0x0003fc1f, 0xe8208000, 0x10006294, 0x0003fc0f, 0xe8208000, 0x10006294,
+	0x0003fc0e, 0xe8208000, 0x10006294, 0x0003fc0c, 0xe8208000, 0x10006294,
+	0x0003fc08, 0xe8208000, 0x10006294, 0x0003fc00, 0x1b80001f, 0x20000020,
+	0xe8208000, 0x10006294, 0x0003ffc0, 0xe8208000, 0x10006294, 0x0003fc00,
+	0x82049801, 0xd800c2a8, 0x17c07c1f, 0xe8208000, 0x10006604, 0x00000000,
+	0xc0c037e0, 0x17c07c1f, 0xa15b8405, 0x82891801, 0xd800c40a, 0x17c07c1f,
+	0x1a10001f, 0x10018000, 0xa2198408, 0x1a40001f, 0x10018000, 0xe2400008,
+	0x1b80001f, 0x2000001a, 0x80388400, 0x80390400, 0x80398400, 0x803f0400,
+	0x1b80001f, 0x20000300, 0x80348400, 0x80350400, 0x80358400, 0x1b80001f,
+	0x20000104, 0x10007c1f, 0x81f38407, 0x81f98407, 0x81f40407, 0x82801801,
+	0xd800c9ea, 0x17c07c1f, 0x82809801, 0xd800c88a, 0x17c07c1f, 0x82819801,
+	0xd800c7ea, 0x17c07c1f, 0x82811801, 0x81f1a807, 0x1a00001f, 0x10006290,
+	0xc2003ec0, 0x1097841f, 0xa15a8405, 0x1a00001f, 0x10006c50, 0xc7c03ca0,
+	0x17c07c1f, 0xa1598405, 0x1a00001f, 0x10006c40, 0xc7c03ca0, 0x17c07c1f,
+	0xa1588405, 0x1a10001f, 0x10000004, 0x1a40001f, 0x10000004, 0xa2178408,
+	0xe2400008, 0x82079401, 0xd800cc28, 0x17c07c1f, 0x82001801, 0xd800cc28,
+	0x17c07c1f, 0xa1570405, 0x13007c1f, 0x1b80001f, 0xd00f0000, 0x1a00001f,
+	0x10006c40, 0xc7c03b80, 0x17c07c1f, 0x1a00001f, 0x10006c40, 0xc7c03ca0,
+	0x17c07c1f, 0xa1db0407, 0x81f10407, 0xa1d60407, 0x81f48407, 0xe8208000,
+	0x10006b00, 0x00000000, 0x1ac0001f, 0x55aa55aa, 0x82289801, 0xd800a328,
+	0x17c07c1f, 0xf0000000, 0x17c07c1f
 };
 
 /*
  * PCM binary for suspend scenario
  */
 static const struct pcm_desc suspend_pcm_ca7 = {
-	.version = "pcm_suspend_20150805_V1",
-	.base = suspend_binary_ca7,
-	.size = 847,
-	.sess = 2,
-	.replace = 0,
-	.vec0 = EVENT_VEC(11, 1, 0, 0),
-	.vec1 = EVENT_VEC(12, 1, 0, 54),
-	.vec2 = EVENT_VEC(30, 1, 0, 143),
-	.vec3 = EVENT_VEC(31, 1, 0, 277),
+	.version	= "SPM_FW_v0.1_6SPMC",
+	.base		= suspend_binary_ca7,
+	.size		= 1647,
+	.sess		= 2,
+	.replace	= 0,
+	.vec0		= EVENT_VEC(11, 1, 0, 0),	/* FUNC_26M_WAKEUP */
+	.vec1		= EVENT_VEC(12, 1, 0, 131),	/* FUNC_26M_SLEEP */
+	.vec2		= EVENT_VEC(30, 1, 0, 195),	/* FUNC_APSRC_WAKEUP */
+	.vec3		= EVENT_VEC(31, 1, 0, 264),	/* FUNC_APSRC_SLEEP */
+	.vec4		= EVENT_VEC(11, 1, 0, 171),	/* FUNC_26MIDLE_WAKEUP */
+	.vec5		= EVENT_VEC(12, 1, 0, 181),	/* FUNC_26MIDLE_SLEEP */
 };
 
 /*
@@ -203,27 +335,25 @@
  */
 static struct pwr_ctrl spm_ctrl = {
 	.wake_src = WAKE_SRC_FOR_SUSPEND,
-	.wake_src_md32 = WAKE_SRC_FOR_MD32,
+	.timer_val = 600,
 	.r0_ctrl_en = 1,
 	.r7_ctrl_en = 1,
 	.infra_dcm_lock = 1,
 	.wfi_op = WFI_OP_AND,
-	.pcm_apsrc_req = 0,
 	.ca7top_idle_mask = 0,
-	.ca15top_idle_mask = 0,
+	.ca15top_idle_mask = 1,
 	.mcusys_idle_mask = 0,
-	.disp_req_mask = 0,
+	.disp0_req_mask = 0,
 	.mfg_req_mask = 0,
-	.md32_req_mask = 1,
 	.srclkenai_mask = 1,
 	.ca7_wfi0_en = 1,
 	.ca7_wfi1_en = 1,
 	.ca7_wfi2_en = 1,
 	.ca7_wfi3_en = 1,
-	.ca15_wfi0_en = 1,
-	.ca15_wfi1_en = 1,
-	.ca15_wfi2_en = 1,
-	.ca15_wfi3_en = 1,
+	.ca15_wfi0_en = 0,
+	.ca15_wfi1_en = 0,
+	.ca15_wfi2_en = 0,
+	.ca15_wfi3_en = 0,
 };
 
 /*
@@ -233,6 +363,9 @@
 {
 	struct pwr_ctrl *pwrctrl;
 
+	struct wake_status wakesta;
+	spm_get_wakeup_status(&wakesta);
+	spm_output_wake_reason(&wakesta);
 	pwrctrl = &spm_ctrl;
 
 	set_pwrctrl_pcm_flags(pwrctrl, spm_flags);
@@ -245,12 +378,23 @@
 	     is_infra_pdn(pwrctrl->pcm_flags));
 
 	spm_reset_and_init_pcm();
+	spm_kick_im_to_fetch(&suspend_pcm_ca7);
 	spm_init_pcm_register();
+	spm_init_event_vector(&suspend_pcm_ca7);
+	spm_write(SPM_PCM_MAS_PAUSE_MASK, 0xffffffff);
+	spm_write(SPM_PCM_REG_DATA_INI, 0);
+	spm_write(SPM_PCM_PWR_IO_EN, PCM_PWRIO_EN_R0 | PCM_PWRIO_EN_R7);
+
+	uint32_t con0 = spm_read(SPM_PCM_CON0) & ~(CON0_IM_KICK | CON0_PCM_KICK);
+	spm_write(SPM_PCM_CON0, con0 | CON0_CFG_KEY | CON0_PCM_KICK);
+	spm_write(SPM_PCM_CON0, con0 | CON0_CFG_KEY);
+
 	spm_set_power_control(pwrctrl);
+	pwrctrl->timer_val = pwrctrl->timer_val * 32768;
 	spm_set_wakeup_event(pwrctrl);
 	spm_kick_pcm_to_run(pwrctrl);
-	spm_init_event_vector(&suspend_pcm_ca7);
-	spm_kick_im_to_fetch(&suspend_pcm_ca7);
+
+	spm_write(SPM_PCM_RESERVE, (spm_read(SPM_PCM_RESERVE) & ~PCM_CMD_MASK) | PCM_CMD_SUSPEND_PCM);
 }
 
 /*
diff --git a/plat/mediatek/mt8516/include/plat_private.h b/plat/mediatek/mt8516/include/plat_private.h
index cd92d34..bc63aa0 100644
--- a/plat/mediatek/mt8516/include/plat_private.h
+++ b/plat/mediatek/mt8516/include/plat_private.h
@@ -20,6 +20,7 @@
 void plat_cci_init(void);
 void plat_cci_enable(void);
 void plat_cci_disable(void);
+void plat_mt_gic_init(void);
 
 /* Declarations for plat_topology.c */
 int mt_setup_topology(void);
diff --git a/plat/mediatek/mt8516/plat_pm.c b/plat/mediatek/mt8516/plat_pm.c
index 16a16b5..9809c4c 100644
--- a/plat/mediatek/mt8516/plat_pm.c
+++ b/plat/mediatek/mt8516/plat_pm.c
@@ -412,7 +412,7 @@
 
 	if (MTK_SYSTEM_PWR_STATE(state) == MTK_LOCAL_STATE_OFF) {
 		/* Enable the gic cpu interface */
-		plat_arm_gic_init();
+		plat_mt_gic_init();
 		spm_system_suspend_finish();
 		enable_scu(mpidr);
 	}
@@ -556,7 +556,7 @@
 	/* Assert system power domain is available on the platform */
 	assert(PLAT_MAX_PWR_LVL >= MTK_PWR_LVL2);
 
-	plat_arm_gic_init();
+	plat_mt_gic_init();
 }
 
 static const plat_psci_ops_t plat_plat_pm_ops = {