armv7: ls102xa: Disable QE before enter deep sleep
authorRan Wang <ran.wang_1@nxp.com>
Wed, 26 Sep 2018 05:46:30 +0000 (13:46 +0800)
committerYork Sun <york.sun@nxp.com>
Thu, 27 Sep 2018 17:01:28 +0000 (10:01 -0700)
Otherwise system will hang after executing wfi.

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>
arch/arm/cpu/armv7/ls102xa/ls102xa_psci.c
arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h

index af413f8..bb169aa 100644 (file)
@@ -73,6 +73,7 @@ static void __secure ls1_deepsleep_irq_cfg(void)
         * read, that is why we don't read it from register ippdexpcr1 itself.
         */
        ippdexpcr1 = in_le32(&scfg->sparecr[7]);
+       out_be32(&rcpm->ippdexpcr1, ippdexpcr1);
 
        if (ippdexpcr0 & RCPM_IPPDEXPCR0_ETSEC)
                pmcintecr |= SCFG_PMCINTECR_ETSECRXG0 |
@@ -192,6 +193,9 @@ static void __secure ls1_deep_sleep(u32 entry_point)
        setbits_be32(&scfg->dpslpcr, SCFG_DPSLPCR_WDRR_EN);
        setbits_be32(&gur->crstsr, DCFG_CRSTSR_WDRFR);
 
+       /* Disable QE */
+       setbits_be32(&gur->devdisr, CCSR_DEVDISR1_QE);
+
        ls1_deepsleep_irq_cfg();
 
        psci_v7_flush_dcache_all();
index d6ba298..137cd61 100644 (file)
@@ -86,6 +86,8 @@ struct sys_info {
        unsigned long freq_localbus;
 };
 
+#define CCSR_DEVDISR1_QE       0x00000001
+
 /* Device Configuration and Pin Control */
 struct ccsr_gur {
        u32     porsr1;         /* POR status 1 */