BSP_VOID SyncSpinUnlock(spinlock_t *lock, unsigned long flag)
{
    BSP_IPC_SpinUnLock(IPC_SEM_SYNC);
    spin_unlock_irqrestore(lock, flag);

    return;
}
s32_t  pwrctrl_deep_sleep( void_t )
{
    u32_t key = 0;

    /*SOC下电区IP寄存器保存地址*/
    u32_t * pulSocRegBakAddr = (u32_t *)g_aAcpuStoreReg;

    if (RET_OK != pwrctrl_is_func_on(PWC_SWITCH_ASLEEP))
    {
        return RET_ERR;
    }

    BSP_IPC_SpinLock(IPC_SEM_SMP_CPU0);
    g_stAcpuPwcExcLog->core0.SlpCnt ++;
    g_stAcpuPwcExcLog->core0.SlpMgrSTm = pwrctrl_get_slice_time();

    local_irq_save(key);

    /*读中断pending寄存器,有中断就退出睡眠*/
    if (PWRCTRL_TRUE == pwrctrl_check_irq_pending_status())
    {

        pwrctrl_l2c_disable();
#ifdef CHIP_BB_HI6210

#else
        __cpuc_flush_kern_all();
#endif
        /*__cpuc_flush_user_all();*/
        /*__cpuc_flush_icache_all();*/

        pwrctrl_store_ip_reg(pulSocRegBakAddr);

        /*PD ENTRY*/
        pwrctrl_asm_deep_sleep_entry();

        pwrctrl_restore_ip_reg(pulSocRegBakAddr);
        pulSocRegBakAddr = NULL;

        pwrctrl_l2c_enable();

    }
    else
    {
        /*just for pclint*/
    }

    /* unlock  s32_terrupt   */
    local_irq_restore(key);

    g_stAcpuPwcExcLog->core0.WkCnt ++;
    g_stAcpuPwcExcLog->core0.WkMgrSTm = pwrctrl_get_slice_time();
    BSP_IPC_SpinUnLock(IPC_SEM_SMP_CPU0);
    return RET_OK;
}
Beispiel #3
0
/*****************************************************************************
* 函 数 名  : DRV_SPIN_UNLOCK
*
* 功能描述  : 释放信号量
*
* 输入参数  : 无
* 输出参数  : 无
*
* 返 回 值  : 无
*
* 修改记录  : 2011年4月11日 wangjing creat
*****************************************************************************/
BSP_VOID DRV_SPIN_UNLOCK(BSP_U32 u32SignalNum)
{
    BSP_IPC_SpinUnLock(u32SignalNum);
}