static void __gptimer_set_mode(enum clock_event_mode mode, struct clock_event_device *c) { unsigned int saved; switch (mode) { case CLOCK_EVT_MODE_PERIODIC: __gptimer_ctl(EVENT_TIMER, TIMER_DISABLE, PERIOD_MODE); __raw_writel(LATCH, TIMER_LOAD(EVENT_TIMER)); __gptimer_ctl(EVENT_TIMER, TIMER_ENABLE, PERIOD_MODE); __raw_writel(TIMER_INT_EN, TIMER_INT(EVENT_TIMER)); break; case CLOCK_EVT_MODE_ONESHOT: __gptimer_ctl(EVENT_TIMER, TIMER_ENABLE, ONETIME_MODE); __raw_writel(TIMER_INT_EN, TIMER_INT(EVENT_TIMER)); break; case CLOCK_EVT_MODE_SHUTDOWN: case CLOCK_EVT_MODE_UNUSED: saved = __raw_readl(TIMER_CTL(EVENT_TIMER)) & PERIOD_MODE; __gptimer_ctl(EVENT_TIMER, TIMER_DISABLE, saved); break; case CLOCK_EVT_MODE_RESUME: saved = __raw_readl(TIMER_CTL(EVENT_TIMER)) & PERIOD_MODE; __gptimer_ctl(EVENT_TIMER, TIMER_ENABLE, saved); break; } }
void sec_debug_print_gptimer_reg(void) { printk("%s: gptimer-clockevent\n",__func__); printk("load reg: 0x%x\n",__raw_readl(TIMER_LOAD(0,0))); printk("value reg: 0x%x\n",__raw_readl(TIMER_VALUE(0,0))); printk("control reg: 0x%x\n",__raw_readl(TIMER_CTL(0,0))); printk("interrupt reg: 0x%x\n",__raw_readl(TIMER_INT(0,0))); printk("%s: gptimer-clocksource\n",__func__); printk("load reg: 0x%x\n",__raw_readl(TIMER_LOAD(0,2))); printk("value reg: 0x%x\n",__raw_readl(TIMER_VALUE(0,2))); printk("control reg: 0x%x\n",__raw_readl(TIMER_CTL(0,2))); printk("interrupt reg: 0x%x\n",__raw_readl(TIMER_INT(0,2))); }
static void sprd_gptimer_clockevent_init(unsigned int irq, const char *name, unsigned long hz) { struct clock_event_device *evt = &gptimer_event; __raw_writel(TIMER_DISABLE, TIMER_CTL(EVENT_TIMER)); __raw_writel(TIMER_INT_CLR, TIMER_INT(EVENT_TIMER)); evt->name = name; evt->irq = irq; evt->mult = div_sc(hz, NSEC_PER_SEC, evt->shift); evt->max_delta_ns = clockevent_delta2ns(ULONG_MAX, evt); evt->min_delta_ns = clockevent_delta2ns(2, evt); evt->cpumask = cpu_all_mask; setup_irq(irq, &gptimer_irq); clockevents_register_device(evt); }
static inline void __gptimer_ctl(int timer_id, int enable, int mode) { __raw_writel(enable | mode, TIMER_CTL(timer_id)); }