ARCH: Migrate clockevent drivers to 'set-state' interface
Subsystems (16)
cover ARCH: Migrate clockevent drivers to 'set-state' interface
Hi Guys,
This series migrates Miscellaneous architecture clockevent drivers to the new set-state interface. This would enable these drivers to use new states (like: ONESHOT_STOPPED, etc.) of a clockevent device (if required), as the set-mode interface is marked obsolete now and wouldn't be expanded to handle new states.
Rebased over: v4.2-rc2
Target kernel: v4.3
This has been build/boot tested by two bots on various platforms for few days now, not sure if we had a good coverage for these architectures though:
- kernelci, http://kernelci.org/
- 0-DAY kernel test infrastructure, kbuild test robot
Can be applied directly by respective maintainers.
Viresh Kumar (23):
alpha/time: Migrate to new 'set-state' interface ARC/time: Migrate to new 'set-state' interface AVR32/time: Migrate to new 'set-state' interface blackfin/time-ts: Migrate to new 'set-state' interface c6x/timer64: Migrate to new 'set-state' interface cris/time: Migrate to new 'set-state' interface hexagon/time: Migrate to new 'set-state' interface m68k/coldfire/pit: Migrate to new 'set-state' interface microblaze/timer: Migrate to new 'set-state' interface mn10300/cevt-mn10300: Migrate to new 'set-state' interface nios2/time: Migrate to new 'set-state' interface openrisc/time: Migrate to new 'set-state' interface powerpc/time: Migrate to new 'set-state' interface s390/time: Migrate to new 'set-state' interface score/time: Migrate to new 'set-state' interface sh/localtimer: Migrate to new 'set-state' interface sparc/time: Migrate to new 'set-state' interface tile/time: Migrate to new 'set-state' interface um/time: Migrate to new 'set-state' interface unicore/time: Migrate to new 'set-state' interface xtensa/time: Migrate to new 'set-state' interface drivers/hv: Migrate to new 'set-state' interface
kernel: broadcast-hrtimer: Migrate to new 'set-state' interface
arch/alpha/kernel/time.c | 18 ++--- arch/arc/kernel/time.c | 40 ++++------- arch/avr32/kernel/time.c | 65 ++++++++--------- arch/blackfin/kernel/time-ts.c | 136 ++++++++++++++++++----------------- arch/c6x/platforms/timer64.c | 52 +++++++------- arch/cris/arch-v32/kernel/time.c | 8 ++- arch/hexagon/kernel/time.c | 17 +---- arch/m68k/coldfire/pit.c | 66 ++++++++--------- arch/microblaze/kernel/timer.c | 46 +++++------- arch/mn10300/kernel/cevt-mn10300.c | 7 -- arch/nios2/kernel/time.c | 49 +++++++------ arch/openrisc/kernel/time.c | 24 ------- arch/powerpc/kernel/time.c | 24 +++---- arch/s390/kernel/time.c | 6 -- arch/score/kernel/time.c | 31 +++----- arch/sh/kernel/localtimer.c | 6 -- arch/sparc/kernel/sun4m_smp.c | 2 +- arch/sparc/kernel/time_32.c | 57 +++++++-------- arch/sparc/kernel/time_64.c | 33 +++------ arch/tile/kernel/time.c | 8 ++- arch/um/kernel/time.c | 44 ++++++------ arch/unicore32/kernel/time.c | 29 +++----- arch/xtensa/kernel/time.c | 53 +++++++------- drivers/hv/hv.c | 45 +++++------- kernel/time/tick-broadcast-hrtimer.c | 49 ++++++------- 25 files changed, 395 insertions(+), 520 deletions(-)
Signature · 1 line
2.4.0
PATCH 1/23 alpha/time: Migrate to new 'set-state' interface
Migrate alpha driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
rtc clockevent device wasn't doing anything in set-mode and so its set-state callbacks aren't implemented.
--- arch/alpha/kernel/time.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
arch/alpha/kernel/time.c +6 -12
@@ -93,7 +93,7 @@ rtc_timer_interrupt(int irq, void *dev)struct clock_event_device *ce = &per_cpu (cpu_ce, cpu);/* Don't run the hook for UNUSED or SHUTDOWN. */ -if (likely (ce->mode ==CLOCK_EVT_MODE_PERIODIC )) +if (likely (clockevent_state_periodic (ce))) ce->event_handler (ce);if (test_irq_work_pending ()) {
@@ -104,13 +104,6 @@ rtc_timer_interrupt(int irq, void *dev)return IRQ_HANDLED ; } -static void -rtc_ce_set_mode (enum clock_event_mode mode,struct clock_event_device *ce) -{ -/* The mode member of CE is updated in generic code. -Since we only support periodic events, nothing to do. */ -} -static int rtc_ce_set_next_event (unsigned long evt,struct clock_event_device *ce) {
@@ -129,7 +122,6 @@ init_rtc_clockevent(void) .features = CLOCK_EVT_FEAT_PERIODIC, .rating = 100, .cpumask = cpumask_of(cpu), - .set_mode = rtc_ce_set_mode, .set_next_event = rtc_ce_set_next_event, };
@@ -161,12 +153,12 @@ static struct clocksource qemu_cs = {* The QEMU alarm as a clock_event_device primitive. */ -static void -qemu_ce_set_mode (enum clock_event_mode mode,struct clock_event_device *ce) +static int qemu_ce_shutdown (struct clock_event_device *ce) {/* The mode member of CE is updated for us in generic code. Just make sure that the event is disabled. */ qemu_set_alarm_abs (0 ); +return 0 ; } static int
@@ -197,7 +189,9 @@ init_qemu_clockevent(void) .features = CLOCK_EVT_FEAT_ONESHOT, .rating = 400, .cpumask = cpumask_of(cpu), - .set_mode = qemu_ce_set_mode, + .set_state_shutdown = qemu_ce_shutdown, + .set_state_oneshot = qemu_ce_shutdown, + .tick_resume = qemu_ce_shutdown, .set_next_event = qemu_ce_set_next_event, };
Signature · 1 line
2.4.0
PATCH 2/23 ARC/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate arc driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
--- arch/arc/kernel/time.c | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-)
arch/arc/kernel/time.c +15 -25
@@ -203,34 +203,24 @@ static int arc_clkevent_set_next_event(unsigned long delta,return 0 ; } -static void arc_clkevent_set_mode (enum clock_event_mode mode, -struct clock_event_device *dev) +static int arc_clkevent_set_periodic (struct clock_event_device *dev) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : -/* -* At X Hz, 1 sec = 1000ms -> X cycles; -* 10ms -> X / 100 cycles -*/ -arc_timer_event_setup (arc_get_core_freq () /HZ ); -break ; -case CLOCK_EVT_MODE_ONESHOT : -break ; -default : -break ; - } - -return ; +/* +* At X Hz, 1 sec = 1000ms -> X cycles; +* 10ms -> X / 100 cycles +*/ +arc_timer_event_setup (arc_get_core_freq () /HZ ); +return 0 ; } static DEFINE_PER_CPU(struct clock_event_device, arc_clockevent_device) = { - .name ="ARC Timer0" , - .features =CLOCK_EVT_FEAT_ONESHOT |CLOCK_EVT_FEAT_PERIODIC , - .mode =CLOCK_EVT_MODE_UNUSED , - .rating =300 , - .irq =TIMER0_IRQ ,/* hardwired, no need for resources */ - .set_next_event = arc_clkevent_set_next_event, - .set_mode = arc_clkevent_set_mode, + .name ="ARC Timer0" , + .features =CLOCK_EVT_FEAT_ONESHOT | +CLOCK_EVT_FEAT_PERIODIC , + .rating =300 , + .irq =TIMER0_IRQ ,/* hardwired, no need for resources */ + .set_next_event = arc_clkevent_set_next_event, + .set_state_periodic = arc_clkevent_set_periodic, };static irqreturn_t timer_irq_handler (int irq,void *dev_id)
@@ -240,7 +230,7 @@ static irqreturn_t timer_irq_handler(int irq, void *dev_id)* irq_set_chip_and_handler() asked for handle_percpu_devid_irq() */ struct clock_event_device *evt =this_cpu_ptr (&arc_clockevent_device); -int irq_reenable = evt->mode ==CLOCK_EVT_MODE_PERIODIC ; +int irq_reenable =clockevent_state_periodic (evt);/* * Any write to CTRL reg ACks the interrupt, we rewrite the
Signature · 1 line
2.4.0
Re: [PATCH 02/23] ARC/time: Migrate to new 'set-state' interface
On Thursday 16 July 2015 02:27 PM, Viresh Kumar wrote:
Migrate arc driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
Added to ARC for-next.
Thx Viresh,
-Vineet
PATCH 3/23 AVR32/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate avr32 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We want to call cpu_idle_poll_ctrl() in shutdown only if we were in oneshot or resume state earlier. Create another variable to save this information and check that in shutdown callback.
--- arch/avr32/kernel/time.c | 65 ++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 32 deletions(-)
arch/avr32/kernel/time.c +33 -32
@@ -18,6 +18,7 @@#include <mach/pm.h> +static bool disable_cpu_idle_poll;static cycle_t read_cycle_count (struct clocksource *cs) {
@@ -80,45 +81,45 @@ static int comparator_next_event(unsigned long delta,return 0 ; } -static void comparator_mode (enum clock_event_mode mode, -struct clock_event_device *evdev) +static int comparator_shutdown (struct clock_event_device *evdev) { -switch (mode) { -case CLOCK_EVT_MODE_ONESHOT : -pr_debug ("%s: start\n" , evdev->name); -/* FALLTHROUGH */ -case CLOCK_EVT_MODE_RESUME : +pr_debug ("%s: %s\n" , __func__, evdev->name); +sysreg_write (COMPARE ,0 ); + +if (disable_cpu_idle_poll) { + disable_cpu_idle_poll = false;/* -* If we're using the COUNT and COMPARE registers we -* need to force idle poll. +* Only disable idle poll if we have forced that +* in a previous call. */ -cpu_idle_poll_ctrl (true); -break ; -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : -sysreg_write (COMPARE ,0 ); -pr_debug ("%s: stop\n" , evdev->name); -if (evdev->mode ==CLOCK_EVT_MODE_ONESHOT || - evdev->mode ==CLOCK_EVT_MODE_RESUME ) { -/* -* Only disable idle poll if we have forced that -* in a previous call. -*/ -cpu_idle_poll_ctrl (false); - } -break ; -default : -BUG (); +cpu_idle_poll_ctrl (false); } +return 0 ; +} + +static int comparator_set_oneshot (struct clock_event_device *evdev) +{ +pr_debug ("%s: %s\n" , __func__, evdev->name); + + disable_cpu_idle_poll = true; +/* +* If we're using the COUNT and COMPARE registers we +* need to force idle poll. +*/ +cpu_idle_poll_ctrl (true); + +return 0 ; }static struct clock_event_device comparator = { - .name ="avr32_comparator" , - .features =CLOCK_EVT_FEAT_ONESHOT , - .shift =16 , - .rating =50 , - .set_next_event = comparator_next_event, - .set_mode = comparator_mode, + .name ="avr32_comparator" , + .features =CLOCK_EVT_FEAT_ONESHOT , + .shift =16 , + .rating =50 , + .set_next_event = comparator_next_event, + .set_state_shutdown = comparator_shutdown, + .set_state_oneshot = comparator_set_oneshot, + .tick_resume = comparator_set_oneshot, };void read_persistent_clock (struct timespec *ts)
Signature · 1 line
2.4.0
Re: [PATCH 03/23] AVR32/time: Migrate to new 'set-state' interface
Quoted 7 lines · Viresh Kumar
Migrate avr32 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.
Quoted 7 lines
We want to call
cpu_idle_poll_ctrl()in shutdown only if we were in oneshot or resume state earlier. Create another variable to save this information and check that in shutdown callback.Cc Haavard Skinnemoen <[email protected]>Cc Hans-Christian Egtvedt <[email protected]>Signed-off-by Viresh Kumar <[email protected]>
Looks sane.
Quoted 3 lines
--- arch/avr32/kernel/time.c | 65 ++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 32 deletions(-)
<snipp diff>
Signature · 1 line
BR, HcE
PATCH 4/23 blackfin/time-ts: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate blackfin driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in ->set_mode(RESUME) and so tick_resume() isn't implemented.
--- arch/blackfin/kernel/time-ts.c | 136 +++++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 66 deletions(-)
arch/blackfin/kernel/time-ts.c +70 -66
@@ -136,44 +136,44 @@ static int bfin_gptmr0_set_next_event(unsigned long cycles,return 0 ; } -static void bfin_gptmr0_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int bfin_gptmr0_set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : {#ifndef CONFIG_BF60x -set_gptimer_config (TIMER0_id, \ -TIMER_OUT_DIS |TIMER_IRQ_ENA | \ -TIMER_PERIOD_CNT |TIMER_MODE_PWM ); +set_gptimer_config (TIMER0_id, +TIMER_OUT_DIS |TIMER_IRQ_ENA | +TIMER_PERIOD_CNT |TIMER_MODE_PWM );#else -set_gptimer_config (TIMER0_id,TIMER_OUT_DIS - |TIMER_MODE_PWM_CONT |TIMER_PULSE_HI |TIMER_IRQ_PER ); +set_gptimer_config (TIMER0_id, +TIMER_OUT_DIS |TIMER_MODE_PWM_CONT | +TIMER_PULSE_HI |TIMER_IRQ_PER );#endif -set_gptimer_period (TIMER0_id,get_sclk () /HZ ); -set_gptimer_pwidth (TIMER0_id,get_sclk () /HZ -1 ); -enable_gptimers (TIMER0bit); -break ; - } -case CLOCK_EVT_MODE_ONESHOT : -disable_gptimers (TIMER0bit); +set_gptimer_period (TIMER0_id,get_sclk () /HZ ); +set_gptimer_pwidth (TIMER0_id,get_sclk () /HZ -1 ); +enable_gptimers (TIMER0bit); +return 0 ; +} + +static int bfin_gptmr0_set_oneshot (struct clock_event_device *evt) +{ +disable_gptimers (TIMER0bit);#ifndef CONFIG_BF60x -set_gptimer_config (TIMER0_id, \ -TIMER_OUT_DIS |TIMER_IRQ_ENA |TIMER_MODE_PWM ); +set_gptimer_config (TIMER0_id, +TIMER_OUT_DIS |TIMER_IRQ_ENA |TIMER_MODE_PWM );#else -set_gptimer_config (TIMER0_id,TIMER_OUT_DIS |TIMER_MODE_PWM - |TIMER_PULSE_HI |TIMER_IRQ_WID_DLY ); +set_gptimer_config (TIMER0_id, +TIMER_OUT_DIS |TIMER_MODE_PWM |TIMER_PULSE_HI | +TIMER_IRQ_WID_DLY );#endif -set_gptimer_period (TIMER0_id,0 ); -break ; -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : -disable_gptimers (TIMER0bit); -break ; -case CLOCK_EVT_MODE_RESUME : -break ; - } +set_gptimer_period (TIMER0_id,0 ); +return 0 ; +} + +static int bfin_gptmr0_shutdown (struct clock_event_device *evt) +{ +disable_gptimers (TIMER0bit); +return 0 ; }static void bfin_gptmr0_ack (void )
@@ -211,13 +211,16 @@ static struct irqaction gptmr0_irq = { };static struct clock_event_device clockevent_gptmr0 = { - .name ="bfin_gptimer0" , - .rating =300 , - .irq =IRQ_TIMER0 , - .shift =32 , - .features =CLOCK_EVT_FEAT_PERIODIC |CLOCK_EVT_FEAT_ONESHOT , - .set_next_event = bfin_gptmr0_set_next_event, - .set_mode = bfin_gptmr0_set_mode, + .name ="bfin_gptimer0" , + .rating =300 , + .irq =IRQ_TIMER0 , + .shift =32 , + .features =CLOCK_EVT_FEAT_PERIODIC | +CLOCK_EVT_FEAT_ONESHOT , + .set_next_event = bfin_gptmr0_set_next_event, + .set_state_shutdown = bfin_gptmr0_shutdown, + .set_state_periodic = bfin_gptmr0_set_periodic, + .set_state_oneshot = bfin_gptmr0_set_oneshot, };static void __init bfin_gptmr0_clockevent_init (struct clock_event_device *evt)
@@ -250,36 +253,35 @@ static int bfin_coretmr_set_next_event(unsigned long cycles,return 0 ; } -static void bfin_coretmr_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int bfin_coretmr_set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : { -unsigned long tcount = ((get_cclk () / (HZ *TIME_SCALE )) -1 ); -bfin_write_TCNTL (TMPWR ); -CSYNC (); -bfin_write_TSCALE (TIME_SCALE -1 ); -bfin_write_TPERIOD (tcount); -bfin_write_TCOUNT (tcount); -CSYNC (); -bfin_write_TCNTL (TMPWR |TMREN |TAUTORLD ); -break ; - } -case CLOCK_EVT_MODE_ONESHOT : -bfin_write_TCNTL (TMPWR ); -CSYNC (); -bfin_write_TSCALE (TIME_SCALE -1 ); -bfin_write_TPERIOD (0 ); -bfin_write_TCOUNT (0 ); -break ; -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : -bfin_write_TCNTL (0 ); -CSYNC (); -break ; -case CLOCK_EVT_MODE_RESUME : -break ; - } +unsigned long tcount = ((get_cclk () / (HZ *TIME_SCALE )) -1 ); + +bfin_write_TCNTL (TMPWR ); +CSYNC (); +bfin_write_TSCALE (TIME_SCALE -1 ); +bfin_write_TPERIOD (tcount); +bfin_write_TCOUNT (tcount); +CSYNC (); +bfin_write_TCNTL (TMPWR |TMREN |TAUTORLD ); +return 0 ; +} + +static int bfin_coretmr_set_oneshot (struct clock_event_device *evt) +{ +bfin_write_TCNTL (TMPWR ); +CSYNC (); +bfin_write_TSCALE (TIME_SCALE -1 ); +bfin_write_TPERIOD (0 ); +bfin_write_TCOUNT (0 ); +return 0 ; +} + +static int bfin_coretmr_shutdown (struct clock_event_device *evt) +{ +bfin_write_TCNTL (0 ); +CSYNC (); +return 0 ; }void bfin_coretmr_init (void )
@@ -335,7 +337,9 @@ void bfin_coretmr_clockevent_init(void) evt->shift =32 ; evt->features =CLOCK_EVT_FEAT_PERIODIC |CLOCK_EVT_FEAT_ONESHOT ; evt->set_next_event = bfin_coretmr_set_next_event; - evt->set_mode = bfin_coretmr_set_mode; + evt->set_state_shutdown = bfin_coretmr_shutdown; + evt->set_state_periodic = bfin_coretmr_set_periodic; + evt->set_state_oneshot = bfin_coretmr_set_oneshot; clock_tick =get_cclk () /TIME_SCALE ; evt->mult =div_sc (clock_tick,NSEC_PER_SEC , evt->shift);
Signature · 1 line
2.4.0
PATCH 5/23 c6x/timer64: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate c6x driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in ->set_mode(RESUME) and so tick_resume() isn't implemented.
--- arch/c6x/platforms/timer64.c | 52 +++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 25 deletions(-)
arch/c6x/platforms/timer64.c +27 -25
@@ -126,35 +126,37 @@ static int next_event(unsigned long delta,return 0 ; } -static void set_clock_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : -timer64_enable (); - timer64_mode =TIMER64_MODE_PERIODIC ; -timer64_config (TIMER64_RATE /HZ ); -break ; -case CLOCK_EVT_MODE_ONESHOT : -timer64_enable (); - timer64_mode =TIMER64_MODE_ONE_SHOT ; -break ; -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : - timer64_mode =TIMER64_MODE_DISABLED ; -timer64_disable (); -break ; -case CLOCK_EVT_MODE_RESUME : -break ; - } +timer64_enable (); + timer64_mode =TIMER64_MODE_PERIODIC ; +timer64_config (TIMER64_RATE /HZ ); +return 0 ; +} + +static int set_oneshot (struct clock_event_device *evt) +{ +timer64_enable (); + timer64_mode =TIMER64_MODE_ONE_SHOT ; +return 0 ; +} + +static int shutdown (struct clock_event_device *evt) +{ + timer64_mode =TIMER64_MODE_DISABLED ; +timer64_disable (); +return 0 ; }static struct clock_event_device t64_clockevent_device = { - .name ="TIMER64_EVT32_TIMER" , - .features =CLOCK_EVT_FEAT_ONESHOT |CLOCK_EVT_FEAT_PERIODIC , - .rating =200 , - .set_mode = set_clock_mode, - .set_next_event = next_event, + .name ="TIMER64_EVT32_TIMER" , + .features =CLOCK_EVT_FEAT_ONESHOT | +CLOCK_EVT_FEAT_PERIODIC , + .rating =200 , + .set_state_shutdown = shutdown, + .set_state_periodic = set_periodic, + .set_state_oneshot = set_oneshot, + .set_next_event = next_event, };static irqreturn_t timer_interrupt (int irq,void *dev_id)
Signature · 1 line
2.4.0
PATCH 6/23 cris/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate cris driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
--- arch/cris/arch-v32/kernel/time.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
arch/cris/arch-v32/kernel/time.c +5 -3
@@ -172,8 +172,7 @@ void handle_watchdog_bite(struct pt_regs *regs)extern void cris_profile_sample (struct pt_regs *regs);static void __iomem *timer_base; -static void crisv32_clkevt_mode (enum clock_event_mode mode, -struct clock_event_device *dev) +static int crisv32_clkevt_switch_state (struct clock_event_device *dev) {reg_timer_rw_tmr0_ctrl ctrl = { .op = regk_timer_hold,
@@ -181,6 +180,7 @@ static void crisv32_clkevt_mode(enum clock_event_mode mode, };REG_WR (timer, timer_base, rw_tmr0_ctrl, ctrl); +return 0 ; } static int crisv32_clkevt_next_event(unsigned long evt,
@@ -231,7 +231,9 @@ static struct clock_event_device crisv32_clockevent = { .name = "crisv32-timer", .rating = 300, .features = CLOCK_EVT_FEAT_ONESHOT, - .set_mode = crisv32_clkevt_mode, + .set_state_oneshot = crisv32_clkevt_switch_state, + .set_state_shutdown = crisv32_clkevt_switch_state, + .tick_resume = crisv32_clkevt_switch_state, .set_next_event = crisv32_clkevt_next_event, };
Signature · 1 line
2.4.0
Re: [PATCH 06/23] cris/time: Migrate to new 'set-state' interface
Quoted 7 lines · Viresh Kumar
Migrate cris driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.
Quoted 6 lines
Cc Mikael Starvik <[email protected]>Cc Jesper Nilsson <[email protected]>Cc Rabin Vincent <[email protected]>Cc Guenter Roeck <[email protected]>Signed-off-by Viresh Kumar <[email protected]>
PATCH 7/23 hexagon/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate hexagon driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in the ->set_mode() callback. So, this patch doesn't provide any set-state callbacks.
--- arch/hexagon/kernel/time.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-)
arch/hexagon/kernel/time.c +1 -16
@@ -97,20 +97,6 @@ static int set_next_event(unsigned long delta, struct clock_event_device *evt)return 0 ; } -/* -* Sets the mode (periodic, shutdown, oneshot, etc) of a timer. -*/ -static void set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) -{ -switch (mode) { -case CLOCK_EVT_MODE_SHUTDOWN : -/* XXX implement me */ -default : -break ; - } -} -#ifdef CONFIG_SMP /* Broadcast mechanism */ static void broadcast (const struct cpumask *mask)
@@ -119,13 +105,13 @@ static void broadcast(const struct cpumask *mask) }#endif +/* XXX Implement set_state_shutdown() */ static struct clock_event_device hexagon_clockevent_dev = { .name ="clockevent" , .features =CLOCK_EVT_FEAT_ONESHOT , .rating =400 , .irq =RTOS_TIMER_INT , .set_next_event = set_next_event, - .set_mode = set_mode, #ifdef CONFIG_SMP .broadcast = broadcast, #endif
@@ -146,7 +132,6 @@ void setup_percpu_clockdev(void) dummy_clock_dev->features =CLOCK_EVT_FEAT_DUMMY ; dummy_clock_dev->cpumask =cpumask_of (cpu); - dummy_clock_dev->mode =CLOCK_EVT_MODE_UNUSED ;clockevents_register_device (dummy_clock_dev); }
Signature · 1 line
2.4.0
Re: [PATCH 07/23] hexagon/time: Migrate to new 'set-state' interface
Quoted 10 lines · Viresh Kumar
Migrate hexagon driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.We weren't doing anything in the ->set_mode() callback. So, this patch doesn't provide any set-state callbacks.
Quoted 7 lines
Cc Richard Kuo <[email protected]>Signed-off-by Viresh Kumar <[email protected]>--- arch/hexagon/kernel/time.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-)
Hexagon bits look fine to me, thanks!
Signature · 3 lines
Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH 8/23 m68k/coldfire/pit: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate m68k driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in ->set_mode(RESUME) and so tick_resume() isn't implemented.
--- arch/m68k/coldfire/pit.c | 66 ++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 36 deletions(-)
arch/m68k/coldfire/pit.c +30 -36
@@ -42,37 +42,28 @@ static u32 pit_cnt;* This is also called after resume to bring the PIT into operation again. */ -static void init_cf_pit_timer (enum clock_event_mode mode, -struct clock_event_device *evt) +static int cf_pit_set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | \ -MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_SHUTDOWN : -case CLOCK_EVT_MODE_UNUSED : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_ONESHOT : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 , \ -TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_RESUME : -/* Nothing to do here */ -break ; - } +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | +MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_set_oneshot (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_shutdown (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +return 0 ; }/*
@@ -88,12 +79,15 @@ static int cf_pit_next_event(unsigned long delta, }struct clock_event_device cf_pit_clockevent = { - .name ="pit" , - .features =CLOCK_EVT_FEAT_PERIODIC |CLOCK_EVT_FEAT_ONESHOT , - .set_mode = init_cf_pit_timer, - .set_next_event = cf_pit_next_event, - .shift =32 , - .irq =MCF_IRQ_PIT1 , + .name ="pit" , + .features =CLOCK_EVT_FEAT_PERIODIC | +CLOCK_EVT_FEAT_ONESHOT , + .set_state_shutdown = cf_pit_shutdown, + .set_state_periodic = cf_pit_set_periodic, + .set_state_oneshot = cf_pit_set_oneshot, + .set_next_event = cf_pit_next_event, + .shift =32 , + .irq =MCF_IRQ_PIT1 , };
Signature · 1 line
2.4.0
PATCH 8/23 m68k/coldfire/pit: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate m68k driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in ->set_mode(RESUME) and so tick_resume() isn't implemented.
--- arch/m68k/coldfire/pit.c | 66 ++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 36 deletions(-)
arch/m68k/coldfire/pit.c +30 -36
@@ -42,37 +42,28 @@ static u32 pit_cnt;* This is also called after resume to bring the PIT into operation again. */ -static void init_cf_pit_timer (enum clock_event_mode mode, -struct clock_event_device *evt) +static int cf_pit_set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | \ -MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_SHUTDOWN : -case CLOCK_EVT_MODE_UNUSED : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_ONESHOT : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 , \ -TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_RESUME : -/* Nothing to do here */ -break ; - } +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | +MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_set_oneshot (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_shutdown (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +return 0 ; }/*
@@ -88,12 +79,15 @@ static int cf_pit_next_event(unsigned long delta, }struct clock_event_device cf_pit_clockevent = { - .name ="pit" , - .features =CLOCK_EVT_FEAT_PERIODIC |CLOCK_EVT_FEAT_ONESHOT , - .set_mode = init_cf_pit_timer, - .set_next_event = cf_pit_next_event, - .shift =32 , - .irq =MCF_IRQ_PIT1 , + .name ="pit" , + .features =CLOCK_EVT_FEAT_PERIODIC | +CLOCK_EVT_FEAT_ONESHOT , + .set_state_shutdown = cf_pit_shutdown, + .set_state_periodic = cf_pit_set_periodic, + .set_state_oneshot = cf_pit_set_oneshot, + .set_next_event = cf_pit_next_event, + .shift =32 , + .irq =MCF_IRQ_PIT1 , };
Signature · 1 line
2.4.0
Re: [PATCH 08/23] m68k/coldfire/pit: Migrate to new 'set-state' interface
Hi Viresh,
Quoted 11 lines · Viresh Kumar
Migrate m68k driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.We weren't doing anything in ->set_mode(RESUME) and so
tick_resume()isn't implemented.Cc Greg Ungerer <[email protected]>
Applied and tested ok (against 4.2-rc2).
Quoted 92 lines
Cc Geert Uytterhoeven <[email protected]>Signed-off-by Viresh Kumar <[email protected]>--- arch/m68k/coldfire/pit.c | 66 ++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 36 deletions(-)arch/m68k/coldfire/pit.c +30
-36@@ -42,37 +42,28 @@ static u32 pit_cnt;* This is also called after resume to bring the PIT into operation again. */ -static void init_cf_pit_timer (enum clock_event_mode mode, -struct clock_event_device *evt) +static int cf_pit_set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | \ -MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_SHUTDOWN : -case CLOCK_EVT_MODE_UNUSED : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_ONESHOT : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 , \ -TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_RESUME : -/* Nothing to do here */ -break ; - } +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | +MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_set_oneshot (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_shutdown (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +return 0 ; }/* @@ -88,12 +79,15 @@ static int cf_pit_next_event(unsigned long delta, }struct clock_event_device cf_pit_clockevent = { - .name ="pit" , - .features =CLOCK_EVT_FEAT_PERIODIC |CLOCK_EVT_FEAT_ONESHOT , - .set_mode = init_cf_pit_timer, - .set_next_event = cf_pit_next_event, - .shift =32 , - .irq =MCF_IRQ_PIT1 , + .name ="pit" , + .features =CLOCK_EVT_FEAT_PERIODIC | +CLOCK_EVT_FEAT_ONESHOT , + .set_state_shutdown = cf_pit_shutdown, + .set_state_periodic = cf_pit_set_periodic, + .set_state_oneshot = cf_pit_set_oneshot, + .set_next_event = cf_pit_next_event, + .shift =32 , + .irq =MCF_IRQ_PIT1 , };
Re: [PATCH 08/23] m68k/coldfire/pit: Migrate to new 'set-state' interface
In reply to Viresh KumarHi Viresh,
Quoted 11 lines · Viresh Kumar
Migrate m68k driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.We weren't doing anything in ->set_mode(RESUME) and so
tick_resume()isn't implemented.Cc Greg Ungerer <[email protected]>
Applied and tested ok (against 4.2-rc2).
Quoted 92 lines
Cc Geert Uytterhoeven <[email protected]>Signed-off-by Viresh Kumar <[email protected]>--- arch/m68k/coldfire/pit.c | 66 ++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 36 deletions(-)arch/m68k/coldfire/pit.c +30
-36@@ -42,37 +42,28 @@ static u32 pit_cnt;* This is also called after resume to bring the PIT into operation again. */ -static void init_cf_pit_timer (enum clock_event_mode mode, -struct clock_event_device *evt) +static int cf_pit_set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | \ -MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_SHUTDOWN : -case CLOCK_EVT_MODE_UNUSED : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_ONESHOT : - -__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); -__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | \ -MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 , \ -TA (MCFPIT_PCSR )); -break ; - -case CLOCK_EVT_MODE_RESUME : -/* Nothing to do here */ -break ; - } +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (PIT_CYCLES_PER_JIFFY ,TA (MCFPIT_PMR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_RLD | +MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_set_oneshot (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +__raw_writew (MCFPIT_PCSR_EN |MCFPIT_PCSR_PIE | +MCFPIT_PCSR_OVW |MCFPIT_PCSR_CLK64 ,TA (MCFPIT_PCSR )); +return 0 ; +} + +static int cf_pit_shutdown (struct clock_event_device *evt) +{ +__raw_writew (MCFPIT_PCSR_DISABLE ,TA (MCFPIT_PCSR )); +return 0 ; }/* @@ -88,12 +79,15 @@ static int cf_pit_next_event(unsigned long delta, }struct clock_event_device cf_pit_clockevent = { - .name ="pit" , - .features =CLOCK_EVT_FEAT_PERIODIC |CLOCK_EVT_FEAT_ONESHOT , - .set_mode = init_cf_pit_timer, - .set_next_event = cf_pit_next_event, - .shift =32 , - .irq =MCF_IRQ_PIT1 , + .name ="pit" , + .features =CLOCK_EVT_FEAT_PERIODIC | +CLOCK_EVT_FEAT_ONESHOT , + .set_state_shutdown = cf_pit_shutdown, + .set_state_periodic = cf_pit_set_periodic, + .set_state_oneshot = cf_pit_set_oneshot, + .set_next_event = cf_pit_next_event, + .shift =32 , + .irq =MCF_IRQ_PIT1 , };
PATCH 9/23 microblaze/timer: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate microblaze driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in ->set_mode(RESUME or ONESHOT) and so tick_resume() set_state_oneshot() aren't implemented.
--- arch/microblaze/kernel/timer.c | 46 +++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 27 deletions(-)
arch/microblaze/kernel/timer.c +19 -27
@@ -122,37 +122,29 @@ static int xilinx_timer_set_next_event(unsigned long delta,return 0 ; } -static void xilinx_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int xilinx_timer_shutdown (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : -pr_info ("%s: periodic\n" , __func__); -xilinx_timer0_start_periodic (freq_div_hz); -break ; -case CLOCK_EVT_MODE_ONESHOT : -pr_info ("%s: oneshot\n" , __func__); -break ; -case CLOCK_EVT_MODE_UNUSED : -pr_info ("%s: unused\n" , __func__); -break ; -case CLOCK_EVT_MODE_SHUTDOWN : -pr_info ("%s: shutdown\n" , __func__); -xilinx_timer0_stop (); -break ; -case CLOCK_EVT_MODE_RESUME : -pr_info ("%s: resume\n" , __func__); -break ; - } +pr_info ("%s\n" , __func__); +xilinx_timer0_stop (); +return 0 ; +} + +static int xilinx_timer_set_periodic (struct clock_event_device *evt) +{ +pr_info ("%s\n" , __func__); +xilinx_timer0_start_periodic (freq_div_hz); +return 0 ; }static struct clock_event_device clockevent_xilinx_timer = { - .name ="xilinx_clockevent" , - .features =CLOCK_EVT_FEAT_ONESHOT |CLOCK_EVT_FEAT_PERIODIC , - .shift =8 , - .rating =300 , - .set_next_event = xilinx_timer_set_next_event, - .set_mode = xilinx_timer_set_mode, + .name ="xilinx_clockevent" , + .features =CLOCK_EVT_FEAT_ONESHOT | +CLOCK_EVT_FEAT_PERIODIC , + .shift =8 , + .rating =300 , + .set_next_event = xilinx_timer_set_next_event, + .set_state_shutdown = xilinx_timer_shutdown, + .set_state_periodic = xilinx_timer_set_periodic, };static inline void timer_ack (void )
Signature · 1 line
2.4.0
PATCH 10/23 mn10300/cevt-mn10300: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate mn10300 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in the ->set_mode() callback. So, this patch doesn't provide any set-state callbacks.
--- arch/mn10300/kernel/cevt-mn10300.c | 7 ------- 1 file changed, 7 deletions(-)
arch/mn10300/kernel/cevt-mn10300.c +0 -7
@@ -41,12 +41,6 @@ static int next_event(unsigned long delta,return 0 ; } -static void set_clock_mode (enum clock_event_mode mode, -struct clock_event_device *evt) -{ -/* Nothing to do ... */ -} - static DEFINE_PER_CPU(struct clock_event_device, mn10300_clockevent_device); static DEFINE_PER_CPU(struct irqaction, timer_irq);
@@ -108,7 +102,6 @@ int __init init_clockevents(void) cd->rating =200 ; cd->cpumask =cpumask_of (smp_processor_id ()); - cd->set_mode = set_clock_mode; cd->event_handler = event_handler; cd->set_next_event = next_event;
Signature · 1 line
2.4.0
PATCH 11/23 nios2/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate nios2 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
--- arch/nios2/kernel/time.c | 49 ++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-)
arch/nios2/kernel/time.c +29 -20
@@ -130,7 +130,7 @@ static void nios2_timer_stop(struct nios2_timer *timer) }static void nios2_timer_config (struct nios2_timer *timer,unsigned long period, -enum clock_event_mode mode) +bool periodic) {u16 ctrl;
@@ -148,7 +148,7 @@ static void nios2_timer_config(struct nios2_timer *timer, unsigned long period,timer_writew (timer, period >>16 ,ALTERA_TIMER_PERIODH_REG ); ctrl |=ALTERA_TIMER_CONTROL_START_MSK |ALTERA_TIMER_CONTROL_ITO_MSK ; -if (mode ==CLOCK_EVT_MODE_PERIODIC ) +if (periodic) ctrl |=ALTERA_TIMER_CONTROL_CONT_MSK ;else ctrl &= ~ALTERA_TIMER_CONTROL_CONT_MSK ;
@@ -160,32 +160,38 @@ static int nios2_timer_set_next_event(unsigned long delta, {struct nios2_clockevent_dev *nios2_ced =to_nios2_clkevent (evt); -nios2_timer_config (&nios2_ced->timer, delta, evt->mode); +nios2_timer_config (&nios2_ced->timer, delta, false);return 0 ; } -static void nios2_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int nios2_timer_shutdown (struct clock_event_device *evt) +{ +struct nios2_clockevent_dev *nios2_ced =to_nios2_clkevent (evt); +struct nios2_timer *timer = &nios2_ced->timer; + +nios2_timer_stop (timer); +return 0 ; +} + +static int nios2_timer_set_periodic (struct clock_event_device *evt) {unsigned long period;struct nios2_clockevent_dev *nios2_ced =to_nios2_clkevent (evt);struct nios2_timer *timer = &nios2_ced->timer; -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : - period =DIV_ROUND_UP (timer->freq,HZ ); -nios2_timer_config (timer, period,CLOCK_EVT_MODE_PERIODIC ); -break ; -case CLOCK_EVT_MODE_ONESHOT : -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : -nios2_timer_stop (timer); -break ; -case CLOCK_EVT_MODE_RESUME : -nios2_timer_start (timer); -break ; - } + period =DIV_ROUND_UP (timer->freq,HZ ); +nios2_timer_config (timer, period, true); +return 0 ; +} + +static int nios2_timer_resume (struct clock_event_device *evt) +{ +struct nios2_clockevent_dev *nios2_ced =to_nios2_clkevent (evt); +struct nios2_timer *timer = &nios2_ced->timer; + +nios2_timer_start (timer); +return 0 ; }irqreturn_t timer_interrupt (int irq,void *dev_id)
@@ -218,7 +224,10 @@ static struct nios2_clockevent_dev nios2_ce = { .rating = 250, .shift = 32, .set_next_event = nios2_timer_set_next_event, - .set_mode = nios2_timer_set_mode, + .set_state_shutdown = nios2_timer_shutdown, + .set_state_periodic = nios2_timer_set_periodic, + .set_state_oneshot = nios2_timer_shutdown, + .tick_resume = nios2_timer_resume, }, };
Signature · 1 line
2.4.0
Re: [PATCH 11/23] nios2/time: Migrate to new 'set-state' interface
Quoted 7 lines · Viresh Kumar
Migrate nios2 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.
Quoted 6 lines
Cc Ley Foon Tan <[email protected]>Cc Tobias Klauser <[email protected]>Cc Herbert Xu <[email protected]>Cc Dmitry Torokhov <[email protected]>Signed-off-by Viresh Kumar <[email protected]>
Ley Foon Tan
Acked-byRe: [Nios2-dev] [PATCH 11/23] nios2/time: Migrate to new 'set-state' interface
Quoted 8 lines · Tobias Klauser
Quoted 7 lines · Viresh Kumar
Migrate nios2 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.
Quoted 8 lines
Quoted 6 lines
Cc Ley Foon Tan <[email protected]>Cc Tobias Klauser <[email protected]>Cc Herbert Xu <[email protected]>Cc Dmitry Torokhov <[email protected]>Signed-off-by Viresh Kumar <[email protected]>Reviewed-by Tobias Klauser <[email protected]>
PATCH 12/23 openrisc/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate openrisc driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in the ->set_mode() callback. So, this patch doesn't provide any set-state callbacks.
--- arch/openrisc/kernel/time.c | 24 ------------------------ 1 file changed, 24 deletions(-)
arch/openrisc/kernel/time.c +0 -24
@@ -48,29 +48,6 @@ static int openrisc_timer_set_next_event(unsigned long delta,return 0 ; } -static void openrisc_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) -{ -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : -pr_debug (KERN_INFO "%s: periodic\n" , __func__); -BUG (); -break ; -case CLOCK_EVT_MODE_ONESHOT : -pr_debug (KERN_INFO "%s: oneshot\n" , __func__); -break ; -case CLOCK_EVT_MODE_UNUSED : -pr_debug (KERN_INFO "%s: unused\n" , __func__); -break ; -case CLOCK_EVT_MODE_SHUTDOWN : -pr_debug (KERN_INFO "%s: shutdown\n" , __func__); -break ; -case CLOCK_EVT_MODE_RESUME : -pr_debug (KERN_INFO "%s: resume\n" , __func__); -break ; - } -} -/* This is the clock event device based on the OR1K tick timer. * As the timer is being used as a continuous clock-source (required for HR * timers) we cannot enable the PERIODIC feature. The tick timer can run using
@@ -82,7 +59,6 @@ static struct clock_event_device clockevent_openrisc_timer = { .features = CLOCK_EVT_FEAT_ONESHOT, .rating = 300, .set_next_event = openrisc_timer_set_next_event, - .set_mode = openrisc_timer_set_mode, };static inline void timer_ack (void )
Signature · 1 line
2.4.0
Re: [PATCH 12/23] openrisc/time: Migrate to new 'set-state' interface
Quoted 7 lines · Viresh Kumar
Migrate openrisc driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.
Quoted 6 lines
We weren't doing anything in the ->set_mode() callback. So, this patch doesn't provide any set-state callbacks.
/Jonas
PATCH 13/23 powerpc/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate powerpc driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in ->set_mode(ONSHOT) and so set_state_oneshot() isn't implemented.
--- arch/powerpc/kernel/time.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
arch/powerpc/kernel/time.c +12 -12
@@ -99,16 +99,17 @@ static struct clocksource clocksource_timebase = {static int decrementer_set_next_event (unsigned long evt,struct clock_event_device *dev); -static void decrementer_set_mode (enum clock_event_mode mode, -struct clock_event_device *dev); +static int decrementer_shutdown (struct clock_event_device *evt);struct clock_event_device decrementer_clockevent = { - .name ="decrementer" , - .rating =200 , - .irq =0 , - .set_next_event = decrementer_set_next_event, - .set_mode = decrementer_set_mode, - .features =CLOCK_EVT_FEAT_ONESHOT |CLOCK_EVT_FEAT_C3STOP , + .name ="decrementer" , + .rating =200 , + .irq =0 , + .set_next_event = decrementer_set_next_event, + .set_state_shutdown = decrementer_shutdown, + .tick_resume = decrementer_shutdown, + .features =CLOCK_EVT_FEAT_ONESHOT | +CLOCK_EVT_FEAT_C3STOP , };EXPORT_SYMBOL (decrementer_clockevent);
@@ -862,11 +863,10 @@ static int decrementer_set_next_event(unsigned long evt,return 0 ; } -static void decrementer_set_mode (enum clock_event_mode mode, -struct clock_event_device *dev) +static int decrementer_shutdown (struct clock_event_device *dev) { -if (mode !=CLOCK_EVT_MODE_ONESHOT ) -decrementer_set_next_event (DECREMENTER_MAX , dev); +decrementer_set_next_event (DECREMENTER_MAX , dev); +return 0 ; }/* Interrupt handler for the timer broadcast IPI */
Signature · 1 line
2.4.0
PATCH 14/23 s390/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate s390 driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in the ->set_mode() callback. So, this patch doesn't provide any set-state callbacks.
--- arch/s390/kernel/time.c | 6 ------ 1 file changed, 6 deletions(-)
arch/s390/kernel/time.c +0 -6
@@ -117,11 +117,6 @@ static int s390_next_event(unsigned long delta,return 0 ; } -static void s390_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) -{ -} -/* * Set up lowcore and control register of the current cpu to * enable TOD clock and clock comparator interrupts.
@@ -145,7 +140,6 @@ void init_cpu_timer(void) cd->rating =400 ; cd->cpumask =cpumask_of (cpu); cd->set_next_event = s390_next_event; - cd->set_mode = s390_set_mode;clockevents_register_device (cd);
Signature · 1 line
2.4.0
PATCH 15/23 score/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate score driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in ONESHOT/SHUTDOWN/RESUME modes and so callbacks for them aren't implemented.
--- arch/score/kernel/time.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-)
arch/score/kernel/time.c +10 -21
@@ -55,31 +55,20 @@ static int score_timer_set_next_event(unsigned long delta,return 0 ; } -static void score_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evdev) +static int score_timer_set_periodic (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : -outl ((TMR_M_PERIODIC |TMR_IE_ENABLE ),P_TIMER0_CTRL ); -outl (SYSTEM_CLOCK /HZ ,P_TIMER0_PRELOAD ); -outl (inl (P_TIMER0_CTRL ) |TMR_ENABLE ,P_TIMER0_CTRL ); -break ; -case CLOCK_EVT_MODE_ONESHOT : -case CLOCK_EVT_MODE_SHUTDOWN : -case CLOCK_EVT_MODE_RESUME : -case CLOCK_EVT_MODE_UNUSED : -break ; -default : -BUG (); - } +outl ((TMR_M_PERIODIC |TMR_IE_ENABLE ),P_TIMER0_CTRL ); +outl (SYSTEM_CLOCK /HZ ,P_TIMER0_PRELOAD ); +outl (inl (P_TIMER0_CTRL ) |TMR_ENABLE ,P_TIMER0_CTRL ); +return 0 ; }static struct clock_event_device score_clockevent = { - .name ="score_clockevent" , - .features =CLOCK_EVT_FEAT_PERIODIC , - .shift =16 , - .set_next_event = score_timer_set_next_event, - .set_mode = score_timer_set_mode, + .name ="score_clockevent" , + .features =CLOCK_EVT_FEAT_PERIODIC , + .shift =16 , + .set_next_event = score_timer_set_next_event, + .set_state_periodic = score_timer_set_periodic, };void __init time_init (void )
Signature · 1 line
2.4.0
PATCH 16/23 sh/localtimer: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate sh driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything in the ->set_mode() callback. So, this patch doesn't provide any set-state callbacks.
--- arch/sh/kernel/localtimer.c | 6 ------ 1 file changed, 6 deletions(-)
arch/sh/kernel/localtimer.c +0 -6
@@ -39,11 +39,6 @@ void local_timer_interrupt(void)irq_exit (); } -static void dummy_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *clk) -{ -} -void local_timer_setup (unsigned int cpu) {struct clock_event_device *clk = &per_cpu (local_clockevent, cpu);
@@ -54,7 +49,6 @@ void local_timer_setup(unsigned int cpu)CLOCK_EVT_FEAT_DUMMY ; clk->rating =400 ; clk->mult =1 ; - clk->set_mode = dummy_timer_set_mode; clk->broadcast = smp_timer_broadcast; clk->cpumask =cpumask_of (cpu);
Signature · 1 line
2.4.0
PATCH 17/23 sparc/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate sparc drivers to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything which switching to few clockevent modes and so their callbacks aren't implemented.
--- arch/sparc/kernel/sun4m_smp.c | 2 +- arch/sparc/kernel/time_32.c | 57 ++++++++++++++++++++----------------------- arch/sparc/kernel/time_64.c | 33 ++++++++----------------- 3 files changed, 38 insertions(+), 54 deletions(-)
arch/sparc/kernel/sun4m_smp.c +1 -1
@@ -247,7 +247,7 @@ void smp4m_percpu_timer_interrupt(struct pt_regs *regs) ce = &per_cpu (sparc32_clockevent, cpu); -if (ce->mode &CLOCK_EVT_MODE_PERIODIC ) +if (clockevent_state_periodic (ce))sun4m_clear_profile_irq (cpu);else sparc_config.load_profile_irq (cpu,0 );/* Is this needless? */
arch/sparc/kernel/time_32.c +27 -30
86 lines not on this page · raw message
arch/sparc/kernel/time_64.c +10 -23
@@ -674,32 +674,19 @@ static int sparc64_next_event(unsigned long delta,return tick_ops->add_compare (delta) ? -ETIME :0 ; } -static void sparc64_timer_setup (enum clock_event_mode mode, -struct clock_event_device *evt) -{ -switch (mode) { -case CLOCK_EVT_MODE_ONESHOT : -case CLOCK_EVT_MODE_RESUME : -break ; - -case CLOCK_EVT_MODE_SHUTDOWN : - tick_ops->disable_irq (); -break ; - -case CLOCK_EVT_MODE_PERIODIC : -case CLOCK_EVT_MODE_UNUSED : -WARN_ON (1 ); -break ; - } +static int sparc64_timer_shutdown (struct clock_event_device *evt) +{ + tick_ops->disable_irq (); +return 0 ; }static struct clock_event_device sparc64_clockevent = { - .features =CLOCK_EVT_FEAT_ONESHOT , - .set_mode = sparc64_timer_setup, - .set_next_event = sparc64_next_event, - .rating =100 , - .shift =30 , - .irq =-1 , + .features =CLOCK_EVT_FEAT_ONESHOT , + .set_state_shutdown = sparc64_timer_shutdown, + .set_next_event = sparc64_next_event, + .rating =100 , + .shift =30 , + .irq =-1 , }; static DEFINE_PER_CPU(struct clock_event_device, sparc64_events);
Signature · 1 line
2.4.0
Re: [PATCH 17/23] sparc/time: Migrate to new 'set-state' interface
From: Viresh Kumar <[email protected]>
Date: Thu, 16 Jul 2015 16:56:29 +0530
Quoted 7 lines
Migrate sparc drivers to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.
Quoted 6 lines
We weren't doing anything which switching to few clockevent modes and so their callbacks aren't implemented.
Cc "David S. Miller" <[email protected]>Signed-off-by Viresh Kumar <[email protected]>
PATCH 18/23 tile/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate tile driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
--- arch/tile/kernel/time.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
arch/tile/kernel/time.c +5 -3
@@ -140,10 +140,10 @@ static int tile_timer_set_next_event(unsigned long ticks,* Whenever anyone tries to change modes, we just mask interrupts * and wait for the next event to get set. */ -static void tile_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int tile_timer_shutdown (struct clock_event_device *evt) {arch_local_irq_mask_now (INT_TILE_TIMER ); +return 0 ; }/*
@@ -157,7 +157,9 @@ static DEFINE_PER_CPU(struct clock_event_device, tile_timer) = { .rating = 100, .irq = -1, .set_next_event = tile_timer_set_next_event, - .set_mode = tile_timer_set_mode, + .set_state_shutdown = tile_timer_shutdown, + .set_state_oneshot = tile_timer_shutdown, + .tick_resume = tile_timer_shutdown, };void setup_tile_timer (void )
Signature · 1 line
2.4.0
Re: [PATCH 18/23] tile/time: Migrate to new 'set-state' interface
Quoted 4 lines · Viresh Kumar
Migrate tile driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
Quoted 8 lines
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.Cc Chris Metcalf <[email protected]>Signed-off-by Viresh Kumar <[email protected]>--- arch/tile/kernel/time.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
Signature · 2 lines
Chris Metcalf, EZChip Semiconductor http://www.ezchip.com
Re: [PATCH 18/23] tile/time: Migrate to new 'set-state' interface
In reply to Viresh KumarQuoted 4 lines · Viresh Kumar
Migrate tile driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
Quoted 8 lines
This also enables us to implement callbacks for new states of clockevent devices, for example:
ONESHOT_STOPPED.Cc Chris Metcalf<[email protected]>Signed-off-by Viresh Kumar<[email protected]>--- arch/tile/kernel/time.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
Viresh suggested I take this into the tile tree, and I have now done so.
Signature · 2 lines
Chris Metcalf, EZChip Semiconductor http://www.ezchip.com
Re: [PATCH 18/23] tile/time: Migrate to new 'set-state' interface
Quoted 1 line · Chris Metcalf
Viresh suggested I take this into the tile tree, and I have now done so.
Thanks.
Signature · 1 line
viresh
PATCH 19/23 um/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate um driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
--- arch/um/kernel/time.c | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-)
arch/um/kernel/time.c +20 -24
@@ -22,23 +22,16 @@ void timer_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs)local_irq_restore (flags); } -static void itimer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int itimer_shutdown (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : -set_interval (); -break ; - -case CLOCK_EVT_MODE_SHUTDOWN : -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_ONESHOT : -disable_timer (); -break ; - -case CLOCK_EVT_MODE_RESUME : -break ; - } +disable_timer (); +return 0 ; +} + +static int itimer_set_periodic (struct clock_event_device *evt) +{ +set_interval (); +return 0 ; } static int itimer_next_event(unsigned long delta,
@@ -48,14 +41,17 @@ static int itimer_next_event(unsigned long delta, }static struct clock_event_device itimer_clockevent = { - .name ="itimer" , - .rating =250 , - .cpumask = cpu_all_mask, - .features =CLOCK_EVT_FEAT_PERIODIC |CLOCK_EVT_FEAT_ONESHOT , - .set_mode = itimer_set_mode, - .set_next_event = itimer_next_event, - .shift =32 , - .irq =0 , + .name ="itimer" , + .rating =250 , + .cpumask = cpu_all_mask, + .features =CLOCK_EVT_FEAT_PERIODIC | +CLOCK_EVT_FEAT_ONESHOT , + .set_state_shutdown = itimer_shutdown, + .set_state_periodic = itimer_set_periodic, + .set_state_oneshot = itimer_shutdown, + .set_next_event = itimer_next_event, + .shift =32 , + .irq =0 , };static irqreturn_t um_timer (int irq,void *dev)
Signature · 1 line
2.4.0
PATCH 20/23 unicore/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate unicore driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
We weren't doing anything for PERIODIC or RESUME modes and so their callbacks aren't implemented.
--- arch/unicore32/kernel/time.c | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-)
arch/unicore32/kernel/time.c +10 -19
@@ -46,29 +46,20 @@ puv3_osmr0_set_next_event(unsigned long delta, struct clock_event_device *c)return (signed )(next - oscr) <=MIN_OSCR_DELTA ? -ETIME :0 ; } -static void -puv3_osmr0_set_mode (enum clock_event_mode mode,struct clock_event_device *c) +static int puv3_osmr0_shutdown (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_ONESHOT : -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : -writel (readl (OST_OIER ) & ~OST_OIER_E0 ,OST_OIER ); -writel (readl (OST_OSSR ) & ~OST_OSSR_M0 ,OST_OSSR ); -break ; - -case CLOCK_EVT_MODE_RESUME : -case CLOCK_EVT_MODE_PERIODIC : -break ; - } +writel (readl (OST_OIER ) & ~OST_OIER_E0 ,OST_OIER ); +writel (readl (OST_OSSR ) & ~OST_OSSR_M0 ,OST_OSSR ); +return 0 ; }static struct clock_event_device ckevt_puv3_osmr0 = { - .name ="osmr0" , - .features =CLOCK_EVT_FEAT_ONESHOT , - .rating =200 , - .set_next_event = puv3_osmr0_set_next_event, - .set_mode = puv3_osmr0_set_mode, + .name ="osmr0" , + .features =CLOCK_EVT_FEAT_ONESHOT , + .rating =200 , + .set_next_event = puv3_osmr0_set_next_event, + .set_state_shutdown = puv3_osmr0_shutdown, + .set_state_oneshot = puv3_osmr0_shutdown, };static cycle_t puv3_read_oscr (struct clocksource *cs)
Signature · 1 line
2.4.0
PATCH 21/23 xtensa/time: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate xtensa driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
--- arch/xtensa/kernel/time.c | 53 +++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 27 deletions(-)
arch/xtensa/kernel/time.c +26 -27
@@ -52,8 +52,6 @@ static struct clocksource ccount_clocksource = {static int ccount_timer_set_next_event (unsigned long delta,struct clock_event_device *dev); -static void ccount_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt);struct ccount_timer {struct clock_event_device evt;int irq_enabled;
@@ -77,35 +75,34 @@ static int ccount_timer_set_next_event(unsigned long delta,return ret; } -static void ccount_timer_set_mode (enum clock_event_mode mode, -struct clock_event_device *evt) +/* +* There is no way to disable the timer interrupt at the device level, +* only at the intenable register itself. Since enable_irq/disable_irq +* calls are nested, we need to make sure that these calls are +* balanced. +*/ +static int ccount_timer_shutdown (struct clock_event_device *evt) +{ +struct ccount_timer *timer = + container_of(evt, struct ccount_timer, evt); + +if (timer->irq_enabled) { +disable_irq (evt->irq); + timer->irq_enabled =0 ; + } +return 0 ; +} + +static int ccount_timer_set_oneshot (struct clock_event_device *evt) {struct ccount_timer *timer = container_of(evt, struct ccount_timer, evt); -/* -* There is no way to disable the timer interrupt at the device level, -* only at the intenable register itself. Since enable_irq/disable_irq -* calls are nested, we need to make sure that these calls are -* balanced. -*/ -switch (mode) { -case CLOCK_EVT_MODE_SHUTDOWN : -case CLOCK_EVT_MODE_UNUSED : -if (timer->irq_enabled) { -disable_irq (evt->irq); - timer->irq_enabled =0 ; - } -break ; -case CLOCK_EVT_MODE_RESUME : -case CLOCK_EVT_MODE_ONESHOT : -if (!timer->irq_enabled) { -enable_irq (evt->irq); - timer->irq_enabled =1 ; - } -default : -break ; +if (!timer->irq_enabled) { +enable_irq (evt->irq); + timer->irq_enabled =1 ; } +return 0 ; }static irqreturn_t timer_interrupt (int irq,void *dev_id);
@@ -126,7 +123,9 @@ void local_timer_setup(unsigned cpu) clockevent->features =CLOCK_EVT_FEAT_ONESHOT ; clockevent->rating =300 ; clockevent->set_next_event = ccount_timer_set_next_event; - clockevent->set_mode = ccount_timer_set_mode; + clockevent->set_state_shutdown = ccount_timer_shutdown; + clockevent->set_state_oneshot = ccount_timer_set_oneshot; + clockevent->tick_resume = ccount_timer_set_oneshot; clockevent->cpumask =cpumask_of (cpu); clockevent->irq =irq_create_mapping (NULL ,LINUX_TIMER_INT );if (WARN (!clockevent->irq,"error: can't map timer irq" ))
Signature · 1 line
2.4.0
PATCH 22/23 drivers/hv: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate hv driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
This also enables us to implement callbacks for new states of clockevent devices, for example: ONESHOT_STOPPED.
--- drivers/hv/hv.c | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-)
drivers/hv/hv.c +19 -26
@@ -271,7 +271,7 @@ static int hv_ce_set_next_event(unsigned long delta, {cycle_t current_tick; -WARN_ON (evt->mode !=CLOCK_EVT_MODE_ONESHOT ); +WARN_ON (!clockevent_state_oneshot (evt));rdmsrl (HV_X64_MSR_TIME_REF_COUNT , current_tick); current_tick += delta;
@@ -279,31 +279,24 @@ static int hv_ce_set_next_event(unsigned long delta,return 0 ; } -static void hv_ce_setmode (enum clock_event_mode mode, -struct clock_event_device *evt) +static int hv_ce_shutdown (struct clock_event_device *evt) +{ +wrmsrl (HV_X64_MSR_STIMER0_COUNT ,0 ); +wrmsrl (HV_X64_MSR_STIMER0_CONFIG ,0 ); + +return 0 ; +} + +static int hv_ce_set_oneshot (struct clock_event_device *evt) {union hv_timer_config timer_cfg; -switch (mode) { -case CLOCK_EVT_MODE_PERIODIC : -/* unsupported */ -break ; - -case CLOCK_EVT_MODE_ONESHOT : - timer_cfg.enable =1 ; - timer_cfg.auto_enable =1 ; - timer_cfg.sintx =VMBUS_MESSAGE_SINT ; -wrmsrl (HV_X64_MSR_STIMER0_CONFIG , timer_cfg.as_uint64); -break ; - -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : -wrmsrl (HV_X64_MSR_STIMER0_COUNT ,0 ); -wrmsrl (HV_X64_MSR_STIMER0_CONFIG ,0 ); -break ; -case CLOCK_EVT_MODE_RESUME : -break ; - } + timer_cfg.enable =1 ; + timer_cfg.auto_enable =1 ; + timer_cfg.sintx =VMBUS_MESSAGE_SINT ; +wrmsrl (HV_X64_MSR_STIMER0_CONFIG , timer_cfg.as_uint64); + +return 0 ; }static void hv_init_clockevent_device (struct clock_event_device *dev,int cpu)
@@ -318,7 +311,8 @@ static void hv_init_clockevent_device(struct clock_event_device *dev, int cpu)* references to the hv_vmbus module making it impossible to unload. */ - dev->set_mode = hv_ce_setmode; + dev->set_state_shutdown = hv_ce_shutdown; + dev->set_state_oneshot = hv_ce_set_oneshot; dev->set_next_event = hv_ce_set_next_event; }
@@ -503,8 +497,7 @@ void hv_synic_cleanup(void *arg)/* Turn off clockevent device */ if (ms_hyperv.features &HV_X64_MSR_SYNTIMER_AVAILABLE ) -hv_ce_setmode (CLOCK_EVT_MODE_SHUTDOWN , - hv_context.clk_evt[cpu]); +hv_ce_shutdown (hv_context.clk_evt[cpu]);rdmsrl (HV_X64_MSR_SINT0 +VMBUS_MESSAGE_SINT , shared_sint.as_uint64);
Signature · 1 line
2.4.0
PATCH 23/23 kernel: broadcast-hrtimer: Migrate to new 'set-state' interface
In reply to Viresh KumarMigrate broadcast-hrtimer driver to the new 'set-state' interface provided by clockevents core, the earlier 'set-mode' interface is marked obsolete now.
--- kernel/time/tick-broadcast-hrtimer.c | 49 +++++++++++++++--------------------- 1 file changed, 20 insertions(+), 29 deletions(-)
kernel/time/tick-broadcast-hrtimer.c +20 -29
@@ -18,30 +18,23 @@static struct hrtimer bctimer; -static void bc_set_mode (enum clock_event_mode mode, -struct clock_event_device *bc) +static int bc_shutdown (struct clock_event_device *evt) { -switch (mode) { -case CLOCK_EVT_MODE_UNUSED : -case CLOCK_EVT_MODE_SHUTDOWN : -/* -* Note, we cannot cancel the timer here as we might -* run into the following live lock scenario: -* -* cpu 0 cpu1 -* lock(broadcast_lock); -* hrtimer_interrupt() -* bc_handler() -* tick_handle_oneshot_broadcast(); -* lock(broadcast_lock); -* hrtimer_cancel() -* wait_for_callback() -*/ -hrtimer_try_to_cancel (&bctimer); -break ; -default : -break ; - } +/* +* Note, we cannot cancel the timer here as we might +* run into the following live lock scenario: +* +* cpu 0 cpu1 +* lock(broadcast_lock); +* hrtimer_interrupt() +* bc_handler() +* tick_handle_oneshot_broadcast(); +* lock(broadcast_lock); +* hrtimer_cancel() +* wait_for_callback() +*/ +hrtimer_try_to_cancel (&bctimer); +return 0 ; }/*
@@ -82,7 +75,7 @@ static int bc_set_next(ktime_t expires, struct clock_event_device *bc) }static struct clock_event_device ce_broadcast_hrtimer = { - .set_mode = bc_set_mode, + .set_state_shutdown = bc_shutdown, .set_next_ktime = bc_set_next, .features =CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_KTIME |
@@ -102,13 +95,11 @@ static enum hrtimer_restart bc_handler(struct hrtimer *t) { ce_broadcast_hrtimer.event_handler (&ce_broadcast_hrtimer); -switch (ce_broadcast_hrtimer.mode) { -case CLOCK_EVT_MODE_ONESHOT : +if (clockevent_state_oneshot (&ce_broadcast_hrtimer))if (ce_broadcast_hrtimer.next_event.tv64 !=KTIME_MAX )return HRTIMER_RESTART ; -default : -return HRTIMER_NORESTART ; - } + +return HRTIMER_NORESTART ; }void tick_setup_hrtimer_broadcast (void )
Signature · 1 line
2.4.0