Merge remote-tracking branch 'tip/timers/core/timers/core' into clockevents/3.16
This commit is contained in:
@@ -66,6 +66,7 @@ static int arch_timer_ppi[MAX_TIMER_PPI];
|
||||
static struct clock_event_device __percpu *arch_timer_evt;
|
||||
|
||||
static bool arch_timer_use_virtual = true;
|
||||
static bool arch_timer_c3stop;
|
||||
static bool arch_timer_mem_use_virtual;
|
||||
|
||||
/*
|
||||
@@ -263,7 +264,8 @@ static void __arch_timer_setup(unsigned type,
|
||||
clk->features = CLOCK_EVT_FEAT_ONESHOT;
|
||||
|
||||
if (type == ARCH_CP15_TIMER) {
|
||||
clk->features |= CLOCK_EVT_FEAT_C3STOP;
|
||||
if (arch_timer_c3stop)
|
||||
clk->features |= CLOCK_EVT_FEAT_C3STOP;
|
||||
clk->name = "arch_sys_timer";
|
||||
clk->rating = 450;
|
||||
clk->cpumask = cpumask_of(smp_processor_id());
|
||||
@@ -665,6 +667,8 @@ static void __init arch_timer_init(struct device_node *np)
|
||||
}
|
||||
}
|
||||
|
||||
arch_timer_c3stop = !of_property_read_bool(np, "always-on");
|
||||
|
||||
arch_timer_register();
|
||||
arch_timer_common_init();
|
||||
}
|
||||
|
@@ -416,8 +416,6 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
|
||||
evt->set_mode = exynos4_tick_set_mode;
|
||||
evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
|
||||
evt->rating = 450;
|
||||
clockevents_config_and_register(evt, clk_rate / (TICK_BASE_CNT + 1),
|
||||
0xf, 0x7fffffff);
|
||||
|
||||
exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
|
||||
|
||||
@@ -430,9 +428,12 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
|
||||
evt->irq);
|
||||
return -EIO;
|
||||
}
|
||||
irq_force_affinity(mct_irqs[MCT_L0_IRQ + cpu], cpumask_of(cpu));
|
||||
} else {
|
||||
enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0);
|
||||
}
|
||||
clockevents_config_and_register(evt, clk_rate / (TICK_BASE_CNT + 1),
|
||||
0xf, 0x7fffffff);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -450,7 +451,6 @@ static int exynos4_mct_cpu_notify(struct notifier_block *self,
|
||||
unsigned long action, void *hcpu)
|
||||
{
|
||||
struct mct_clock_event_device *mevt;
|
||||
unsigned int cpu;
|
||||
|
||||
/*
|
||||
* Grab cpu pointer in each case to avoid spurious
|
||||
@@ -461,12 +461,6 @@ static int exynos4_mct_cpu_notify(struct notifier_block *self,
|
||||
mevt = this_cpu_ptr(&percpu_mct_tick);
|
||||
exynos4_local_timer_setup(&mevt->evt);
|
||||
break;
|
||||
case CPU_ONLINE:
|
||||
cpu = (unsigned long)hcpu;
|
||||
if (mct_int_type == MCT_INT_SPI)
|
||||
irq_set_affinity(mct_irqs[MCT_L0_IRQ + cpu],
|
||||
cpumask_of(cpu));
|
||||
break;
|
||||
case CPU_DYING:
|
||||
mevt = this_cpu_ptr(&percpu_mct_tick);
|
||||
exynos4_local_timer_stop(&mevt->evt);
|
||||
|
@@ -212,4 +212,9 @@ error_free:
|
||||
return ret;
|
||||
}
|
||||
|
||||
CLOCKSOURCE_OF_DECLARE(zevio_timer, "lsi,zevio-timer", zevio_timer_add);
|
||||
static void __init zevio_timer_init(struct device_node *node)
|
||||
{
|
||||
BUG_ON(zevio_timer_add(node));
|
||||
}
|
||||
|
||||
CLOCKSOURCE_OF_DECLARE(zevio_timer, "lsi,zevio-timer", zevio_timer_init);
|
||||
|
Reference in New Issue
Block a user