예제 #1
0
/************************************************************************
 * FUNCTION
 *      start_om_hard_timer
 * DESCRIPTION
 *       start hard timer
 * INPUTS
 *       value -- timer's value.uint is 32K cycle
 * OUTPUTS
 *       NONE
 *************************************************************************/
int start_om_hard_timer(unsigned int value)
{
    volatile unsigned int tmp_val = 0;
    unsigned long timer1_addr = 0;

    if(TIMER_UNINITED == g_om_timer_inited)
    {
        printk("%s: om hardware timer uninitialized\n",__func__);
        return -1;
    }

    timer1_addr = timer1_base;

    /*停止timer*/
    tmp_val = readl(SOC_TIMER_TIMERN_CONTROL_ADDR(timer1_addr, OSA_TIMER_INDEX));
    tmp_val = (tmp_val & TIMER_DEF_TC_ENABLE_BIT_MSK) | TIMER_DEF_TC_DISABLE;
    writel(tmp_val, SOC_TIMER_TIMERN_CONTROL_ADDR(timer1_addr, OSA_TIMER_INDEX));

    /*将超时值配置到timer load寄存器*/
    writel(value, SOC_TIMER_TIMERN_LOAD_ADDR(timer1_addr, OSA_TIMER_INDEX));

    /*启动timer*/
    writel(TIMER_INT_CLEAR, SOC_TIMER_TIMERN_INTCLR_ADDR(timer1_addr, OSA_TIMER_INDEX));/* clear timer int*/
    tmp_val = (tmp_val & TIMER_DEF_TC_ENABLE_BIT_MSK) | TIMER_DEF_TC_ENABLE;
    tmp_val = (tmp_val & TIMER_DEF_TC_INT_BIT_MSK)| TIMER_DEF_TC_INTENABLE;
    writel(tmp_val, SOC_TIMER_TIMERN_CONTROL_ADDR(timer1_addr, OSA_TIMER_INDEX));

    return 0;
}
예제 #2
0
/************************************************************************
 * FUNCTION
 *       stop_om_hard_timer
 * DESCRIPTION
 *       Stop hard timer
 * INPUTS
 *       NONE
 * OUTPUTS
 *       NONE
 *************************************************************************/
int stop_om_hard_timer(void)
{
    volatile unsigned int value = 0;
    unsigned long timer1_addr = 0;

    if(TIMER_UNINITED == g_om_timer_inited)
    {
        printk("%s: om hardware timer uninitialized\n",__func__);
        return -1;
    }

    timer1_addr = timer1_base;

    value = readl(SOC_TIMER_TIMERN_CONTROL_ADDR(timer1_addr, OSA_TIMER_INDEX));
    value = (value & TIMER_DEF_TC_ENABLE_BIT_MSK) | TIMER_DEF_TC_DISABLE;
    value = (value & TIMER_DEF_TC_INT_BIT_MSK) | TIMER_DEF_TC_INTDISABLE;
    writel(value, SOC_TIMER_TIMERN_CONTROL_ADDR(timer1_addr, OSA_TIMER_INDEX));

    return 0;
}
/*****************************************************************************
 函 数 名  : pwrctrl_test_time_set
 功能描述  : 睡眠压力测试函数
 输入参数  : 无
 输出参数  : 无
 返 回 值  : RET_OK
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2012年8月31日
    作    者   : 刘永富 56193
    修改内容   : 新生成函数

*****************************************************************************/
s32_t pwrctrl_test_time_set(u32_t time)
{

#if 0  /*after acpu softtimer ready, should be deleted*/
    /*注册硬件定时器中断*/
    setup_irq ( PWRCTRL_ACPU_TST_TIMER_INT_ID, &pwrctrl_tst_timer_irq);

    /*配置timer参数*/
    pwrctrl_write_reg32(SOC_TIMER_TIMERN_LOAD_ADDR(SOC_Timer4_BASE_ADDR,1),time);
    pwrctrl_write_reg32(SOC_TIMER_TIMERN_CONTROL_ADDR(SOC_Timer4_BASE_ADDR,1),PWCTRL_ACPU_TST_TIMER_CTRL);

#endif

    return RET_OK;

}
예제 #4
0
/*****************************************************************************
 函 数 名  : init_om_hardware_timer
 功能描述  : 初始化OM使用的timer
 输入参数  : 无
 输出参数  : 无
 返 回 值  : int
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2012年9月7日
    作    者   : 王振伟 176398
    修改内容   : 新生成函数

*****************************************************************************/
int __init init_om_hardware_timer(void)
{
    volatile unsigned int tmp_val = 0;
    unsigned long timer1_addr = 0;
    unsigned long sctrl_addr = HISI_VA_ADDRESS(SOC_AO_SCTRL_BASE_ADDR);

    timer1_base = (unsigned long)ioremap(OSA_TIMER_REG_BASE, OSA_TIMER_REG_SIZE);
    if (!timer1_base)
    {
        printk(KERN_ERR "timer1 reg ioremap error.\n");
        return -1;
    }

    timer1_addr = timer1_base;

    /*对系统控制器的操作,使用spin_lock锁住*/
    spin_lock(&g_sysctrl_lock);

    /*选择32K时钟*/
    tmp_val = readl(SOC_AO_SCTRL_SC_TIMER_EN0_ADDR(sctrl_addr));
    tmp_val = (tmp_val & SC_TIMER_EN0_MSK_TIMER1_0_MSK) | (TIMER_32K << SC_TIMER_EN0_MSK_TIMER1_0_START_BIT); /* DTS2013012804205 lkf71598 2013-3-4 */
    tmp_val = (tmp_val & SC_TIMER_EN0_TIMER1_0_MSK) | (TIMER_32K << SC_TIMER_EN0_TIMER1_0_START_BIT);
    writel(tmp_val, SOC_AO_SCTRL_SC_TIMER_EN0_ADDR(sctrl_addr));
    /*释放中断互斥*/
    spin_unlock(&g_sysctrl_lock);

    /*初始化timer*/
    tmp_val = TIMER_DEF_TC_DISABLE | TIMER_DEF_TC_PERIODIC | TIMER_DEF_TC_INTDISABLE |\
            TIMER_DEF_TC_CLK_DIV_1 | TIMER_DEF_TC_32BITS_MODE;
    tmp_val = (tmp_val & TIMER_DEF_TC_ONESHOT_MODE_BIT_MSK) | TIMER_DEF_TC_ONCE_MODE;
    writel(tmp_val, SOC_TIMER_TIMERN_CONTROL_ADDR(timer1_addr, OSA_TIMER_INDEX));

    g_om_timer_inited = TIMER_INITED;

    return 0;
}