linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-30  8:25   ` Daniel Lezcano
  2015-07-08  5:37   ` Vineet Gupta
  2015-06-18 10:54 ` [PATCH 02/41] clocksource: cadence_ttc: " Viresh Kumar
                   ` (39 subsequent siblings)
  40 siblings, 2 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Oleksij Rempel

Migrate asm9260 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.

Cc: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/asm9260_timer.c | 61 ++++++++++++++++++++++---------------
 1 file changed, 36 insertions(+), 25 deletions(-)

diff --git a/drivers/clocksource/asm9260_timer.c b/drivers/clocksource/asm9260_timer.c
index 4c2ba59897e8..67ff6f2abf19 100644
--- a/drivers/clocksource/asm9260_timer.c
+++ b/drivers/clocksource/asm9260_timer.c
@@ -120,38 +120,49 @@ static int asm9260_timer_set_next_event(unsigned long delta,
 	return 0;
 }
 
-static void asm9260_timer_set_mode(enum clock_event_mode mode,
-				    struct clock_event_device *evt)
+static int asm9260_timer_shutdown(struct clock_event_device *evt)
 {
 	/* stop timer0 */
 	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + CLR_REG);
+	return 0;
+}
+
+static int asm9260_timer_set_oneshot(struct clock_event_device *evt)
+{
+	/* stop timer0 */
+	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + CLR_REG);
+
+	/* enable reset and stop on match */
+	writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
+		       priv.base + HW_MCR + SET_REG);
+	return 0;
+}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		/* disable reset and stop on match */
-		writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
-				priv.base + HW_MCR + CLR_REG);
-		/* configure match count for TC0 */
-		writel_relaxed(priv.ticks_per_jiffy, priv.base + HW_MR0);
-		/* enable TC0 */
-		writel_relaxed(BM_C0_EN, priv.base + HW_TCR + SET_REG);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* enable reset and stop on match */
-		writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
-				priv.base + HW_MCR + SET_REG);
-		break;
-	default:
-		break;
-	}
+static int asm9260_timer_set_periodic(struct clock_event_device *evt)
+{
+	/* stop timer0 */
+	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + CLR_REG);
+
+	/* disable reset and stop on match */
+	writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
+		       priv.base + HW_MCR + CLR_REG);
+	/* configure match count for TC0 */
+	writel_relaxed(priv.ticks_per_jiffy, priv.base + HW_MR0);
+	/* enable TC0 */
+	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + SET_REG);
+	return 0;
 }
 
 static struct clock_event_device event_dev = {
-	.name		= DRIVER_NAME,
-	.rating		= 200,
-	.features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_next_event	= asm9260_timer_set_next_event,
-	.set_mode	= asm9260_timer_set_mode,
+	.name			= DRIVER_NAME,
+	.rating			= 200,
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.set_next_event		= asm9260_timer_set_next_event,
+	.set_state_shutdown	= asm9260_timer_shutdown,
+	.set_state_periodic	= asm9260_timer_set_periodic,
+	.set_state_oneshot	= asm9260_timer_set_oneshot,
+	.tick_resume		= asm9260_timer_shutdown,
 };
 
 static irqreturn_t asm9260_timer_interrupt(int irq, void *dev_id)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 02/41] clocksource: cadence_ttc: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
  2015-06-18 10:54 ` [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-25 23:15   ` Sören Brinkmann
  2015-06-30  8:28   ` Daniel Lezcano
  2015-06-18 10:54 ` [PATCH 03/41] clocksource: clps711x: " Viresh Kumar
                   ` (38 subsequent siblings)
  40 siblings, 2 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Michal Simek, Sören Brinkmann

Migrate cadence_ttc 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.

Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Sören Brinkmann <soren.brinkmann@xilinx.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/cadence_ttc_timer.c | 59 ++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 27 deletions(-)

diff --git a/drivers/clocksource/cadence_ttc_timer.c b/drivers/clocksource/cadence_ttc_timer.c
index 510c8a1d37b3..e47e0e0887eb 100644
--- a/drivers/clocksource/cadence_ttc_timer.c
+++ b/drivers/clocksource/cadence_ttc_timer.c
@@ -191,40 +191,42 @@ static int ttc_set_next_event(unsigned long cycles,
 }
 
 /**
- * ttc_set_mode - Sets the mode of timer
+ * ttc_set_{shutdown|oneshot|periodic} - Sets the state of timer
  *
- * @mode:	Mode to be set
  * @evt:	Address of clock event instance
  **/
-static void ttc_set_mode(enum clock_event_mode mode,
-					struct clock_event_device *evt)
+static int ttc_shutdown(struct clock_event_device *evt)
 {
 	struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt);
 	struct ttc_timer *timer = &ttce->ttc;
 	u32 ctrl_reg;
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		ttc_set_interval(timer, DIV_ROUND_CLOSEST(ttce->ttc.freq,
-						PRESCALE * HZ));
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		ctrl_reg = readl_relaxed(timer->base_addr +
-					TTC_CNT_CNTRL_OFFSET);
-		ctrl_reg |= TTC_CNT_CNTRL_DISABLE_MASK;
-		writel_relaxed(ctrl_reg,
-				timer->base_addr + TTC_CNT_CNTRL_OFFSET);
-		break;
-	case CLOCK_EVT_MODE_RESUME:
-		ctrl_reg = readl_relaxed(timer->base_addr +
-					TTC_CNT_CNTRL_OFFSET);
-		ctrl_reg &= ~TTC_CNT_CNTRL_DISABLE_MASK;
-		writel_relaxed(ctrl_reg,
-				timer->base_addr + TTC_CNT_CNTRL_OFFSET);
-		break;
-	}
+	ctrl_reg = readl_relaxed(timer->base_addr + TTC_CNT_CNTRL_OFFSET);
+	ctrl_reg |= TTC_CNT_CNTRL_DISABLE_MASK;
+	writel_relaxed(ctrl_reg, timer->base_addr + TTC_CNT_CNTRL_OFFSET);
+	return 0;
+}
+
+static int ttc_set_periodic(struct clock_event_device *evt)
+{
+	struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt);
+	struct ttc_timer *timer = &ttce->ttc;
+
+	ttc_set_interval(timer,
+			 DIV_ROUND_CLOSEST(ttce->ttc.freq, PRESCALE * HZ));
+	return 0;
+}
+
+static int ttc_resume(struct clock_event_device *evt)
+{
+	struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt);
+	struct ttc_timer *timer = &ttce->ttc;
+	u32 ctrl_reg;
+
+	ctrl_reg = readl_relaxed(timer->base_addr + TTC_CNT_CNTRL_OFFSET);
+	ctrl_reg &= ~TTC_CNT_CNTRL_DISABLE_MASK;
+	writel_relaxed(ctrl_reg, timer->base_addr + TTC_CNT_CNTRL_OFFSET);
+	return 0;
 }
 
 static int ttc_rate_change_clocksource_cb(struct notifier_block *nb,
@@ -430,7 +432,10 @@ static void __init ttc_setup_clockevent(struct clk *clk,
 	ttcce->ce.name = "ttc_clockevent";
 	ttcce->ce.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
 	ttcce->ce.set_next_event = ttc_set_next_event;
-	ttcce->ce.set_mode = ttc_set_mode;
+	ttcce->ce.set_state_shutdown = ttc_shutdown;
+	ttcce->ce.set_state_periodic = ttc_set_periodic;
+	ttcce->ce.set_state_oneshot = ttc_shutdown;
+	ttcce->ce.tick_resume = ttc_resume;
 	ttcce->ce.rating = 200;
 	ttcce->ce.irq = irq;
 	ttcce->ce.cpumask = cpu_possible_mask;
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 03/41] clocksource: clps711x: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
  2015-06-18 10:54 ` [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface Viresh Kumar
  2015-06-18 10:54 ` [PATCH 02/41] clocksource: cadence_ttc: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 04/41] clocksource: dummy_timer: " Viresh Kumar
                   ` (37 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Alexander Shiyan

Migrate clps711x 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.

Cc: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/clps711x-timer.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/drivers/clocksource/clps711x-timer.c b/drivers/clocksource/clps711x-timer.c
index d83ec1f2fddc..cdd86e3525bb 100644
--- a/drivers/clocksource/clps711x-timer.c
+++ b/drivers/clocksource/clps711x-timer.c
@@ -61,11 +61,6 @@ static irqreturn_t clps711x_timer_interrupt(int irq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
-static void clps711x_clockevent_set_mode(enum clock_event_mode mode,
-					 struct clock_event_device *evt)
-{
-}
-
 static int __init _clps711x_clkevt_init(struct clk *clock, void __iomem *base,
 					unsigned int irq)
 {
@@ -91,7 +86,6 @@ static int __init _clps711x_clkevt_init(struct clk *clock, void __iomem *base,
 	clkevt->name = "clps711x-clockevent";
 	clkevt->rating = 300;
 	clkevt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_C3STOP;
-	clkevt->set_mode = clps711x_clockevent_set_mode;
 	clkevt->cpumask = cpumask_of(0);
 	clockevents_config_and_register(clkevt, HZ, 0, 0);
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 04/41] clocksource: dummy_timer: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (2 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 03/41] clocksource: clps711x: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 05/41] clocksource: dw_apb: " Viresh Kumar
                   ` (36 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Mark Rutland

Migrate dummy_timer driver to the new 'set-state' interface provided by
clockevents core, the earlier 'set-mode' interface is marked obsolete
now.

We weren't doing anything in the ->set_mode() callback. So, this patch
doesn't provide any set-state callbacks.

Cc: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Viresh Kumae <viresh.kumar@linaro.org>
---
 drivers/clocksource/dummy_timer.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/clocksource/dummy_timer.c b/drivers/clocksource/dummy_timer.c
index 31990600fcff..776b6c86dcd5 100644
--- a/drivers/clocksource/dummy_timer.c
+++ b/drivers/clocksource/dummy_timer.c
@@ -16,15 +16,6 @@
 
 static DEFINE_PER_CPU(struct clock_event_device, dummy_timer_evt);
 
-static void dummy_timer_set_mode(enum clock_event_mode mode,
-			   struct clock_event_device *evt)
-{
-	/*
-	 * Core clockevents code will call this when exchanging timer devices.
-	 * We don't need to do anything here.
-	 */
-}
-
 static void dummy_timer_setup(void)
 {
 	int cpu = smp_processor_id();
@@ -35,7 +26,6 @@ static void dummy_timer_setup(void)
 			  CLOCK_EVT_FEAT_ONESHOT |
 			  CLOCK_EVT_FEAT_DUMMY;
 	evt->rating	= 100;
-	evt->set_mode	= dummy_timer_set_mode;
 	evt->cpumask	= cpumask_of(cpu);
 
 	clockevents_register_device(evt);
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 05/41] clocksource: dw_apb: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (3 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 04/41] clocksource: dummy_timer: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 06/41] clocksource: exynos_mct: " Viresh Kumar
                   ` (35 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Jacob Pan, Jamie Iles

Migrate dw_apb 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.

Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
Cc: Jamie Iles <jamie@jamieiles.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/dw_apb_timer.c | 143 +++++++++++++++++++++----------------
 1 file changed, 81 insertions(+), 62 deletions(-)

diff --git a/drivers/clocksource/dw_apb_timer.c b/drivers/clocksource/dw_apb_timer.c
index 35a88097af3c..97ba7cbc2cbd 100644
--- a/drivers/clocksource/dw_apb_timer.c
+++ b/drivers/clocksource/dw_apb_timer.c
@@ -110,71 +110,87 @@ static void apbt_enable_int(struct dw_apb_timer *timer)
 	apbt_writel(timer, ctrl, APBTMR_N_CONTROL);
 }
 
-static void apbt_set_mode(enum clock_event_mode mode,
-			  struct clock_event_device *evt)
+static int apbt_shutdown(struct clock_event_device *evt)
 {
+	struct dw_apb_clock_event_device *dw_ced = ced_to_dw_apb_ced(evt);
 	unsigned long ctrl;
-	unsigned long period;
+
+	pr_debug("%s CPU %d state=shutdown\n", __func__,
+		 cpumask_first(evt->cpumask));
+
+	ctrl = apbt_readl(&dw_ced->timer, APBTMR_N_CONTROL);
+	ctrl &= ~APBTMR_CONTROL_ENABLE;
+	apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
+	return 0;
+}
+
+static int apbt_set_oneshot(struct clock_event_device *evt)
+{
 	struct dw_apb_clock_event_device *dw_ced = ced_to_dw_apb_ced(evt);
+	unsigned long ctrl;
 
-	pr_debug("%s CPU %d mode=%d\n", __func__,
-		 cpumask_first(evt->cpumask),
-		 mode);
-
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		period = DIV_ROUND_UP(dw_ced->timer.freq, HZ);
-		ctrl = apbt_readl(&dw_ced->timer, APBTMR_N_CONTROL);
-		ctrl |= APBTMR_CONTROL_MODE_PERIODIC;
-		apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
-		/*
-		 * DW APB p. 46, have to disable timer before load counter,
-		 * may cause sync problem.
-		 */
-		ctrl &= ~APBTMR_CONTROL_ENABLE;
-		apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
-		udelay(1);
-		pr_debug("Setting clock period %lu for HZ %d\n", period, HZ);
-		apbt_writel(&dw_ced->timer, period, APBTMR_N_LOAD_COUNT);
-		ctrl |= APBTMR_CONTROL_ENABLE;
-		apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
-		break;
-
-	case CLOCK_EVT_MODE_ONESHOT:
-		ctrl = apbt_readl(&dw_ced->timer, APBTMR_N_CONTROL);
-		/*
-		 * set free running mode, this mode will let timer reload max
-		 * timeout which will give time (3min on 25MHz clock) to rearm
-		 * the next event, therefore emulate the one-shot mode.
-		 */
-		ctrl &= ~APBTMR_CONTROL_ENABLE;
-		ctrl &= ~APBTMR_CONTROL_MODE_PERIODIC;
-
-		apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
-		/* write again to set free running mode */
-		apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
-
-		/*
-		 * DW APB p. 46, load counter with all 1s before starting free
-		 * running mode.
-		 */
-		apbt_writel(&dw_ced->timer, ~0, APBTMR_N_LOAD_COUNT);
-		ctrl &= ~APBTMR_CONTROL_INT;
-		ctrl |= APBTMR_CONTROL_ENABLE;
-		apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
-		break;
-
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		ctrl = apbt_readl(&dw_ced->timer, APBTMR_N_CONTROL);
-		ctrl &= ~APBTMR_CONTROL_ENABLE;
-		apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
-		break;
-
-	case CLOCK_EVT_MODE_RESUME:
-		apbt_enable_int(&dw_ced->timer);
-		break;
-	}
+	pr_debug("%s CPU %d state=oneshot\n", __func__,
+		 cpumask_first(evt->cpumask));
+
+	ctrl = apbt_readl(&dw_ced->timer, APBTMR_N_CONTROL);
+	/*
+	 * set free running mode, this mode will let timer reload max
+	 * timeout which will give time (3min on 25MHz clock) to rearm
+	 * the next event, therefore emulate the one-shot mode.
+	 */
+	ctrl &= ~APBTMR_CONTROL_ENABLE;
+	ctrl &= ~APBTMR_CONTROL_MODE_PERIODIC;
+
+	apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
+	/* write again to set free running mode */
+	apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
+
+	/*
+	 * DW APB p. 46, load counter with all 1s before starting free
+	 * running mode.
+	 */
+	apbt_writel(&dw_ced->timer, ~0, APBTMR_N_LOAD_COUNT);
+	ctrl &= ~APBTMR_CONTROL_INT;
+	ctrl |= APBTMR_CONTROL_ENABLE;
+	apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
+	return 0;
+}
+
+static int apbt_set_periodic(struct clock_event_device *evt)
+{
+	struct dw_apb_clock_event_device *dw_ced = ced_to_dw_apb_ced(evt);
+	unsigned long period = DIV_ROUND_UP(dw_ced->timer.freq, HZ);
+	unsigned long ctrl;
+
+	pr_debug("%s CPU %d state=periodic\n", __func__,
+		 cpumask_first(evt->cpumask));
+
+	ctrl = apbt_readl(&dw_ced->timer, APBTMR_N_CONTROL);
+	ctrl |= APBTMR_CONTROL_MODE_PERIODIC;
+	apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
+	/*
+	 * DW APB p. 46, have to disable timer before load counter,
+	 * may cause sync problem.
+	 */
+	ctrl &= ~APBTMR_CONTROL_ENABLE;
+	apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
+	udelay(1);
+	pr_debug("Setting clock period %lu for HZ %d\n", period, HZ);
+	apbt_writel(&dw_ced->timer, period, APBTMR_N_LOAD_COUNT);
+	ctrl |= APBTMR_CONTROL_ENABLE;
+	apbt_writel(&dw_ced->timer, ctrl, APBTMR_N_CONTROL);
+	return 0;
+}
+
+static int apbt_resume(struct clock_event_device *evt)
+{
+	struct dw_apb_clock_event_device *dw_ced = ced_to_dw_apb_ced(evt);
+
+	pr_debug("%s CPU %d state=resume\n", __func__,
+		 cpumask_first(evt->cpumask));
+
+	apbt_enable_int(&dw_ced->timer);
+	return 0;
 }
 
 static int apbt_next_event(unsigned long delta,
@@ -233,7 +249,10 @@ dw_apb_clockevent_init(int cpu, const char *name, unsigned rating,
 	dw_ced->ced.min_delta_ns = clockevent_delta2ns(5000, &dw_ced->ced);
 	dw_ced->ced.cpumask = cpumask_of(cpu);
 	dw_ced->ced.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
-	dw_ced->ced.set_mode = apbt_set_mode;
+	dw_ced->ced.set_state_shutdown = apbt_shutdown;
+	dw_ced->ced.set_state_periodic = apbt_set_periodic;
+	dw_ced->ced.set_state_oneshot = apbt_set_oneshot;
+	dw_ced->ced.tick_resume = apbt_resume;
 	dw_ced->ced.set_next_event = apbt_next_event;
 	dw_ced->ced.irq = dw_ced->timer.irq;
 	dw_ced->ced.rating = rating;
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 06/41] clocksource: exynos_mct: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (4 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 05/41] clocksource: dw_apb: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 16:38   ` Alexey Klimov
  2015-06-18 10:54 ` [PATCH 07/41] clocksource: fsl_ftm: " Viresh Kumar
                   ` (34 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, Kukjin Kim

Migrate exynos_mct 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.

Cc: Kukjin Kim <kgene.kim@samsung.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/exynos_mct.c | 85 +++++++++++++++++++---------------------
 1 file changed, 40 insertions(+), 45 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 935b05936dbd..82e060cb7b95 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -257,15 +257,14 @@ static void exynos4_mct_comp0_stop(void)
 	exynos4_mct_write(0, EXYNOS4_MCT_G_INT_ENB);
 }
 
-static void exynos4_mct_comp0_start(enum clock_event_mode mode,
-				    unsigned long cycles)
+static void exynos4_mct_comp0_start(bool periodic, unsigned long cycles)
 {
 	unsigned int tcon;
 	cycle_t comp_cycle;
 
 	tcon = readl_relaxed(reg_base + EXYNOS4_MCT_G_TCON);
 
-	if (mode == CLOCK_EVT_MODE_PERIODIC) {
+	if (periodic) {
 		tcon |= MCT_G_TCON_COMP0_AUTO_INC;
 		exynos4_mct_write(cycles, EXYNOS4_MCT_G_COMP0_ADD_INCR);
 	}
@@ -283,38 +282,38 @@ static void exynos4_mct_comp0_start(enum clock_event_mode mode,
 static int exynos4_comp_set_next_event(unsigned long cycles,
 				       struct clock_event_device *evt)
 {
-	exynos4_mct_comp0_start(evt->mode, cycles);
+	exynos4_mct_comp0_start(false, cycles);
 
 	return 0;
 }
 
-static void exynos4_comp_set_mode(enum clock_event_mode mode,
-				  struct clock_event_device *evt)
+static int mct_set_state_shutdown(struct clock_event_device *evt)
 {
-	unsigned long cycles_per_jiffy;
 	exynos4_mct_comp0_stop();
+	return 0;
+}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		cycles_per_jiffy =
-			(((unsigned long long) NSEC_PER_SEC / HZ * evt->mult) >> evt->shift);
-		exynos4_mct_comp0_start(mode, cycles_per_jiffy);
-		break;
+static int mct_set_state_periodic(struct clock_event_device *evt)
+{
+	unsigned long cycles_per_jiffy;
 
-	case CLOCK_EVT_MODE_ONESHOT:
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+	cycles_per_jiffy = (((unsigned long long)NSEC_PER_SEC / HZ * evt->mult)
+			    >> evt->shift);
+	exynos4_mct_comp0_stop();
+	exynos4_mct_comp0_start(true, cycles_per_jiffy);
+	return 0;
 }
 
 static struct clock_event_device mct_comp_device = {
-	.name		= "mct-comp",
-	.features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.rating		= 250,
-	.set_next_event	= exynos4_comp_set_next_event,
-	.set_mode	= exynos4_comp_set_mode,
+	.name			= "mct-comp",
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.rating			= 250,
+	.set_next_event		= exynos4_comp_set_next_event,
+	.set_state_periodic	= mct_set_state_periodic,
+	.set_state_shutdown	= mct_set_state_shutdown,
+	.set_state_oneshot	= mct_set_state_shutdown,
+	.tick_resume		= mct_set_state_shutdown,
 };
 
 static irqreturn_t exynos4_mct_comp_isr(int irq, void *dev_id)
@@ -390,39 +389,32 @@ static int exynos4_tick_set_next_event(unsigned long cycles,
 	return 0;
 }
 
-static inline void exynos4_tick_set_mode(enum clock_event_mode mode,
-					 struct clock_event_device *evt)
+static int set_state_shutdown(struct clock_event_device *evt)
+{
+	exynos4_mct_tick_stop(this_cpu_ptr(&percpu_mct_tick));
+	return 0;
+}
+
+static int set_state_periodic(struct clock_event_device *evt)
 {
 	struct mct_clock_event_device *mevt = this_cpu_ptr(&percpu_mct_tick);
 	unsigned long cycles_per_jiffy;
 
+	cycles_per_jiffy = (((unsigned long long)NSEC_PER_SEC / HZ * evt->mult)
+			    >> evt->shift);
 	exynos4_mct_tick_stop(mevt);
-
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		cycles_per_jiffy =
-			(((unsigned long long) NSEC_PER_SEC / HZ * evt->mult) >> evt->shift);
-		exynos4_mct_tick_start(cycles_per_jiffy, mevt);
-		break;
-
-	case CLOCK_EVT_MODE_ONESHOT:
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+	exynos4_mct_tick_start(cycles_per_jiffy, mevt);
+	return 0;
 }
 
 static void exynos4_mct_tick_clear(struct mct_clock_event_device *mevt)
 {
-	struct clock_event_device *evt = &mevt->evt;
-
 	/*
 	 * This is for supporting oneshot mode.
 	 * Mct would generate interrupt periodically
 	 * without explicit stopping.
 	 */
-	if (evt->mode != CLOCK_EVT_MODE_PERIODIC)
+	if (!clockevent_state_periodic(&mevt->evt))
 		exynos4_mct_tick_stop(mevt);
 
 	/* Clear the MCT tick interrupt */
@@ -455,7 +447,10 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
 	evt->name = mevt->name;
 	evt->cpumask = cpumask_of(cpu);
 	evt->set_next_event = exynos4_tick_set_next_event;
-	evt->set_mode = exynos4_tick_set_mode;
+	evt->set_state_periodic = set_state_periodic;
+	evt->set_state_shutdown = set_state_shutdown;
+	evt->set_state_oneshot = set_state_shutdown;
+	evt->tick_resume = set_state_shutdown;
 	evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
 	evt->rating = 450;
 
@@ -482,7 +477,7 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
 
 static void exynos4_local_timer_stop(struct clock_event_device *evt)
 {
-	evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
+	evt->set_state_shutdown(evt);
 	if (mct_int_type == MCT_INT_SPI)
 		free_irq(evt->irq, this_cpu_ptr(&percpu_mct_tick));
 	else
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 07/41] clocksource: fsl_ftm: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (5 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 06/41] clocksource: exynos_mct: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 08/41] clocksource: i8253: " Viresh Kumar
                   ` (33 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, Xiubo Li

Migrate fsl_ftm 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.

Cc: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/fsl_ftm_timer.c | 35 +++++++++++++++++------------------
 1 file changed, 17 insertions(+), 18 deletions(-)

diff --git a/drivers/clocksource/fsl_ftm_timer.c b/drivers/clocksource/fsl_ftm_timer.c
index 454227d4f895..ef434699c80a 100644
--- a/drivers/clocksource/fsl_ftm_timer.c
+++ b/drivers/clocksource/fsl_ftm_timer.c
@@ -153,19 +153,16 @@ static int ftm_set_next_event(unsigned long delta,
 	return 0;
 }
 
-static void ftm_set_mode(enum clock_event_mode mode,
-				struct clock_event_device *evt)
+static int ftm_set_oneshot(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		ftm_set_next_event(priv->periodic_cyc, evt);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		ftm_counter_disable(priv->clkevt_base);
-		break;
-	default:
-		return;
-	}
+	ftm_counter_disable(priv->clkevt_base);
+	return 0;
+}
+
+static int ftm_set_periodic(struct clock_event_device *evt)
+{
+	ftm_set_next_event(priv->periodic_cyc, evt);
+	return 0;
 }
 
 static irqreturn_t ftm_evt_interrupt(int irq, void *dev_id)
@@ -174,7 +171,7 @@ static irqreturn_t ftm_evt_interrupt(int irq, void *dev_id)
 
 	ftm_irq_acknowledge(priv->clkevt_base);
 
-	if (likely(evt->mode == CLOCK_EVT_MODE_ONESHOT)) {
+	if (likely(clockevent_state_oneshot(evt))) {
 		ftm_irq_disable(priv->clkevt_base);
 		ftm_counter_disable(priv->clkevt_base);
 	}
@@ -185,11 +182,13 @@ static irqreturn_t ftm_evt_interrupt(int irq, void *dev_id)
 }
 
 static struct clock_event_device ftm_clockevent = {
-	.name		= "Freescale ftm timer",
-	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode	= ftm_set_mode,
-	.set_next_event	= ftm_set_next_event,
-	.rating		= 300,
+	.name			= "Freescale ftm timer",
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.set_state_periodic	= ftm_set_periodic,
+	.set_state_oneshot	= ftm_set_oneshot,
+	.set_next_event		= ftm_set_next_event,
+	.rating			= 300,
 };
 
 static struct irqaction ftm_timer_irq = {
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 08/41] clocksource: i8253: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (6 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 07/41] clocksource: fsl_ftm: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 09/41] clocksource: meson6: " Viresh Kumar
                   ` (32 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Russell King

Migrate i8253 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.

Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 arch/x86/kernel/i8253.c     |  2 +-
 drivers/clocksource/i8253.c | 77 ++++++++++++++++++++++-----------------------
 2 files changed, 39 insertions(+), 40 deletions(-)

diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c
index f2b96de3c7c1..efb82f07b29c 100644
--- a/arch/x86/kernel/i8253.c
+++ b/arch/x86/kernel/i8253.c
@@ -34,7 +34,7 @@ static int __init init_pit_clocksource(void)
 	  * - when local APIC timer is active (PIT is switched off)
 	  */
 	if (num_possible_cpus() > 1 || is_hpet_enabled() ||
-	    i8253_clockevent.mode != CLOCK_EVT_MODE_PERIODIC)
+	    !clockevent_state_periodic(&i8253_clockevent))
 		return 0;
 
 	return clocksource_i8253_init();
diff --git a/drivers/clocksource/i8253.c b/drivers/clocksource/i8253.c
index 14ee3efcc404..0efd36e483ab 100644
--- a/drivers/clocksource/i8253.c
+++ b/drivers/clocksource/i8253.c
@@ -100,44 +100,40 @@ int __init clocksource_i8253_init(void)
 #endif
 
 #ifdef CONFIG_CLKEVT_I8253
-/*
- * Initialize the PIT timer.
- *
- * This is also called after resume to bring the PIT into operation again.
- */
-static void init_pit_timer(enum clock_event_mode mode,
-			   struct clock_event_device *evt)
+static int pit_shutdown(struct clock_event_device *evt)
 {
+	if (!clockevent_state_oneshot(evt) && !clockevent_state_periodic(evt))
+		return 0;
+
 	raw_spin_lock(&i8253_lock);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		/* binary, mode 2, LSB/MSB, ch 0 */
-		outb_p(0x34, PIT_MODE);
-		outb_p(PIT_LATCH & 0xff , PIT_CH0);	/* LSB */
-		outb_p(PIT_LATCH >> 8 , PIT_CH0);		/* MSB */
-		break;
-
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-		if (evt->mode == CLOCK_EVT_MODE_PERIODIC ||
-		    evt->mode == CLOCK_EVT_MODE_ONESHOT) {
-			outb_p(0x30, PIT_MODE);
-			outb_p(0, PIT_CH0);
-			outb_p(0, PIT_CH0);
-		}
-		break;
-
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* One shot setup */
-		outb_p(0x38, PIT_MODE);
-		break;
-
-	case CLOCK_EVT_MODE_RESUME:
-		/* Nothing to do here */
-		break;
-	}
+	outb_p(0x30, PIT_MODE);
+	outb_p(0, PIT_CH0);
+	outb_p(0, PIT_CH0);
+
+	raw_spin_unlock(&i8253_lock);
+	return 0;
+}
+
+static int pit_set_oneshot(struct clock_event_device *evt)
+{
+	raw_spin_lock(&i8253_lock);
+	outb_p(0x38, PIT_MODE);
+	raw_spin_unlock(&i8253_lock);
+	return 0;
+}
+
+static int pit_set_periodic(struct clock_event_device *evt)
+{
+	raw_spin_lock(&i8253_lock);
+
+	/* binary, mode 2, LSB/MSB, ch 0 */
+	outb_p(0x34, PIT_MODE);
+	outb_p(PIT_LATCH & 0xff, PIT_CH0);	/* LSB */
+	outb_p(PIT_LATCH >> 8, PIT_CH0);	/* MSB */
+
 	raw_spin_unlock(&i8253_lock);
+	return 0;
 }
 
 /*
@@ -160,10 +156,11 @@ static int pit_next_event(unsigned long delta, struct clock_event_device *evt)
  * it can be solely used for the global tick.
  */
 struct clock_event_device i8253_clockevent = {
-	.name		= "pit",
-	.features	= CLOCK_EVT_FEAT_PERIODIC,
-	.set_mode	= init_pit_timer,
-	.set_next_event = pit_next_event,
+	.name			= "pit",
+	.features		= CLOCK_EVT_FEAT_PERIODIC,
+	.set_state_shutdown	= pit_shutdown,
+	.set_state_periodic	= pit_set_periodic,
+	.set_next_event		= pit_next_event,
 };
 
 /*
@@ -172,8 +169,10 @@ struct clock_event_device i8253_clockevent = {
  */
 void __init clockevent_i8253_init(bool oneshot)
 {
-	if (oneshot)
+	if (oneshot) {
 		i8253_clockevent.features |= CLOCK_EVT_FEAT_ONESHOT;
+		i8253_clockevent.set_state_oneshot = pit_set_oneshot;
+	}
 	/*
 	 * Start pit with the boot cpu mask. x86 might make it global
 	 * when it is used as broadcast device later.
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 09/41] clocksource: meson6: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (7 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 08/41] clocksource: i8253: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-20  6:53   ` Carlo Caione
  2015-06-18 10:54 ` [PATCH 10/41] clocksource: metag_generic: " Viresh Kumar
                   ` (31 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Carlo Caione

Migrate meson6 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.

Cc: Carlo Caione <carlo@caione.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/meson6_timer.c | 50 ++++++++++++++++++++------------------
 1 file changed, 27 insertions(+), 23 deletions(-)

diff --git a/drivers/clocksource/meson6_timer.c b/drivers/clocksource/meson6_timer.c
index 5c15cba41dca..1fa22c4d2d49 100644
--- a/drivers/clocksource/meson6_timer.c
+++ b/drivers/clocksource/meson6_timer.c
@@ -67,25 +67,25 @@ static void meson6_clkevt_time_start(unsigned char timer, bool periodic)
 	writel(val | TIMER_ENABLE_BIT(timer), timer_base + TIMER_ISA_MUX);
 }
 
-static void meson6_clkevt_mode(enum clock_event_mode mode,
-			       struct clock_event_device *clk)
+static int meson6_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		meson6_clkevt_time_stop(CED_ID);
-		meson6_clkevt_time_setup(CED_ID, USEC_PER_SEC/HZ - 1);
-		meson6_clkevt_time_start(CED_ID, true);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		meson6_clkevt_time_stop(CED_ID);
-		meson6_clkevt_time_start(CED_ID, false);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		meson6_clkevt_time_stop(CED_ID);
-		break;
-	}
+	meson6_clkevt_time_stop(CED_ID);
+	return 0;
+}
+
+static int meson6_set_oneshot(struct clock_event_device *evt)
+{
+	meson6_clkevt_time_stop(CED_ID);
+	meson6_clkevt_time_start(CED_ID, false);
+	return 0;
+}
+
+static int meson6_set_periodic(struct clock_event_device *evt)
+{
+	meson6_clkevt_time_stop(CED_ID);
+	meson6_clkevt_time_setup(CED_ID, USEC_PER_SEC / HZ - 1);
+	meson6_clkevt_time_start(CED_ID, true);
+	return 0;
 }
 
 static int meson6_clkevt_next_event(unsigned long evt,
@@ -99,11 +99,15 @@ static int meson6_clkevt_next_event(unsigned long evt,
 }
 
 static struct clock_event_device meson6_clockevent = {
-	.name		= "meson6_tick",
-	.rating		= 400,
-	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode	= meson6_clkevt_mode,
-	.set_next_event	= meson6_clkevt_next_event,
+	.name			= "meson6_tick",
+	.rating			= 400,
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.set_state_shutdown	= meson6_shutdown,
+	.set_state_periodic	= meson6_set_periodic,
+	.set_state_oneshot	= meson6_set_oneshot,
+	.tick_resume		= meson6_shutdown,
+	.set_next_event		= meson6_clkevt_next_event,
 };
 
 static irqreturn_t meson6_timer_interrupt(int irq, void *dev_id)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 10/41] clocksource: metag_generic: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (8 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 09/41] clocksource: meson6: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 11/41] clocksource: mips-gic: " Viresh Kumar
                   ` (30 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, James Hogan

Migrate metag_generic 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. Even the WARN()
for periodic or unused modes isn't required anymore as the core is
taking care of that now. So, this patch doesn't provide any set-state
callbacks.

Cc: James Hogan <james.hogan@imgtec.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/metag_generic.c | 20 --------------------
 1 file changed, 20 deletions(-)

diff --git a/drivers/clocksource/metag_generic.c b/drivers/clocksource/metag_generic.c
index b7384b853e5a..bcd5c0d602a0 100644
--- a/drivers/clocksource/metag_generic.c
+++ b/drivers/clocksource/metag_generic.c
@@ -56,25 +56,6 @@ static int metag_timer_set_next_event(unsigned long delta,
 	return 0;
 }
 
-static void metag_timer_set_mode(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:
-		/* We should disable the IRQ here */
-		break;
-
-	case CLOCK_EVT_MODE_PERIODIC:
-	case CLOCK_EVT_MODE_UNUSED:
-		WARN_ON(1);
-		break;
-	};
-}
-
 static cycle_t metag_clocksource_read(struct clocksource *cs)
 {
 	return __core_reg_get(TXTIMER);
@@ -129,7 +110,6 @@ static void arch_timer_setup(unsigned int cpu)
 	clk->rating = 200,
 	clk->shift = 12,
 	clk->irq = tbisig_map(TBID_SIGNUM_TRT),
-	clk->set_mode = metag_timer_set_mode,
 	clk->set_next_event = metag_timer_set_next_event,
 
 	clk->mult = div_sc(hwtimer_freq, NSEC_PER_SEC, clk->shift);
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 11/41] clocksource: mips-gic: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (9 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 10/41] clocksource: metag_generic: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 12/41] clocksource: moxart: " Viresh Kumar
                   ` (29 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Andrew Bresticker, Steven J. Hill

Migrate mips-gic 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.

Cc: Andrew Bresticker <abrestic@chromium.org>
Cc: Steven J. Hill <Steven.Hill@imgtec.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/mips-gic-timer.c | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/drivers/clocksource/mips-gic-timer.c b/drivers/clocksource/mips-gic-timer.c
index b81ed1a5342d..c3810b61c815 100644
--- a/drivers/clocksource/mips-gic-timer.c
+++ b/drivers/clocksource/mips-gic-timer.c
@@ -33,12 +33,6 @@ static int gic_next_event(unsigned long delta, struct clock_event_device *evt)
 	return res;
 }
 
-static void gic_set_clock_mode(enum clock_event_mode mode,
-				struct clock_event_device *evt)
-{
-	/* Nothing to do ...  */
-}
-
 static irqreturn_t gic_compare_interrupt(int irq, void *dev_id)
 {
 	struct clock_event_device *cd = dev_id;
@@ -67,7 +61,6 @@ static void gic_clockevent_cpu_init(struct clock_event_device *cd)
 	cd->irq			= gic_timer_irq;
 	cd->cpumask		= cpumask_of(cpu);
 	cd->set_next_event	= gic_next_event;
-	cd->set_mode		= gic_set_clock_mode;
 
 	clockevents_config_and_register(cd, gic_frequency, 0x300, 0x7fffffff);
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 12/41] clocksource: moxart: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (10 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 11/41] clocksource: mips-gic: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 13/41] clocksource: mtk: " Viresh Kumar
                   ` (28 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Jonas Jensen

Migrate moxart 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.

Cc: Jonas Jensen <jonas.jensen@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/moxart_timer.c | 49 ++++++++++++++++++++------------------
 1 file changed, 26 insertions(+), 23 deletions(-)

diff --git a/drivers/clocksource/moxart_timer.c b/drivers/clocksource/moxart_timer.c
index 5eb2c35932b1..19857af651c1 100644
--- a/drivers/clocksource/moxart_timer.c
+++ b/drivers/clocksource/moxart_timer.c
@@ -58,25 +58,24 @@
 static void __iomem *base;
 static unsigned int clock_count_per_tick;
 
-static void moxart_clkevt_mode(enum clock_event_mode mode,
-			       struct clock_event_device *clk)
+static int moxart_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_RESUME:
-	case CLOCK_EVT_MODE_ONESHOT:
-		writel(TIMER1_DISABLE, base + TIMER_CR);
-		writel(~0, base + TIMER1_BASE + REG_LOAD);
-		break;
-	case CLOCK_EVT_MODE_PERIODIC:
-		writel(clock_count_per_tick, base + TIMER1_BASE + REG_LOAD);
-		writel(TIMER1_ENABLE, base + TIMER_CR);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		writel(TIMER1_DISABLE, base + TIMER_CR);
-		break;
-	}
+	writel(TIMER1_DISABLE, base + TIMER_CR);
+	return 0;
+}
+
+static int moxart_set_oneshot(struct clock_event_device *evt)
+{
+	writel(TIMER1_DISABLE, base + TIMER_CR);
+	writel(~0, base + TIMER1_BASE + REG_LOAD);
+	return 0;
+}
+
+static int moxart_set_periodic(struct clock_event_device *evt)
+{
+	writel(clock_count_per_tick, base + TIMER1_BASE + REG_LOAD);
+	writel(TIMER1_ENABLE, base + TIMER_CR);
+	return 0;
 }
 
 static int moxart_clkevt_next_event(unsigned long cycles,
@@ -95,11 +94,15 @@ static int moxart_clkevt_next_event(unsigned long cycles,
 }
 
 static struct clock_event_device moxart_clockevent = {
-	.name		= "moxart_timer",
-	.rating		= 200,
-	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode	= moxart_clkevt_mode,
-	.set_next_event	= moxart_clkevt_next_event,
+	.name			= "moxart_timer",
+	.rating			= 200,
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.set_state_shutdown	= moxart_shutdown,
+	.set_state_periodic	= moxart_set_periodic,
+	.set_state_oneshot	= moxart_set_oneshot,
+	.tick_resume		= moxart_set_oneshot,
+	.set_next_event		= moxart_clkevt_next_event,
 };
 
 static irqreturn_t moxart_timer_interrupt(int irq, void *dev_id)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 13/41] clocksource: mtk: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (11 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 12/41] clocksource: moxart: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 14/41] clocksource: mxs: " Viresh Kumar
                   ` (27 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Matthias Brugger

Migrate mtk 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.

Cc: Matthias Brugger <matthias.bgg@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/mtk_timer.c | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)

diff --git a/drivers/clocksource/mtk_timer.c b/drivers/clocksource/mtk_timer.c
index 68ab42356d0e..50f0641c65b6 100644
--- a/drivers/clocksource/mtk_timer.c
+++ b/drivers/clocksource/mtk_timer.c
@@ -102,27 +102,20 @@ static void mtk_clkevt_time_start(struct mtk_clock_event_device *evt,
 	       evt->gpt_base + TIMER_CTRL_REG(timer));
 }
 
-static void mtk_clkevt_mode(enum clock_event_mode mode,
-				struct clock_event_device *clk)
+static int mtk_clkevt_shutdown(struct clock_event_device *clk)
+{
+	mtk_clkevt_time_stop(to_mtk_clk(clk), GPT_CLK_EVT);
+	return 0;
+}
+
+static int mtk_clkevt_set_periodic(struct clock_event_device *clk)
 {
 	struct mtk_clock_event_device *evt = to_mtk_clk(clk);
 
 	mtk_clkevt_time_stop(evt, GPT_CLK_EVT);
-
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		mtk_clkevt_time_setup(evt, evt->ticks_per_jiffy, GPT_CLK_EVT);
-		mtk_clkevt_time_start(evt, true, GPT_CLK_EVT);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* Timer is enabled in set_next_event */
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		/* No more interrupts will occur as source is disabled */
-		break;
-	}
+	mtk_clkevt_time_setup(evt, evt->ticks_per_jiffy, GPT_CLK_EVT);
+	mtk_clkevt_time_start(evt, true, GPT_CLK_EVT);
+	return 0;
 }
 
 static int mtk_clkevt_next_event(unsigned long event,
@@ -196,7 +189,10 @@ static void __init mtk_timer_init(struct device_node *node)
 	evt->dev.name = "mtk_tick";
 	evt->dev.rating = 300;
 	evt->dev.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
-	evt->dev.set_mode = mtk_clkevt_mode;
+	evt->dev.set_state_shutdown = mtk_clkevt_shutdown;
+	evt->dev.set_state_periodic = mtk_clkevt_set_periodic;
+	evt->dev.set_state_oneshot = mtk_clkevt_shutdown;
+	evt->dev.tick_resume = mtk_clkevt_shutdown;
 	evt->dev.set_next_event = mtk_clkevt_next_event;
 	evt->dev.cpumask = cpu_possible_mask;
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 14/41] clocksource: mxs: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (12 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 13/41] clocksource: mtk: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-17  5:28   ` Stefan Wahren
  2015-06-18 10:54 ` [PATCH 15/41] clocksource: nomadik-mtu: " Viresh Kumar
                   ` (26 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, Shawn Guo

Migrate mxs 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.

Also drop:
- 'mxs_clockevent_mode': as we have helpers available from core for the
  same.
  same state twice and so perhaps the check wasn't required.
- 'clock_event_mode_label': CLOCK_EVT_MODE_* shouldn't be used anymore
  by drivers and it was used just to print old-state:new-state. The
  debug prints are called from mxs_irq_clear() now based on the
  state-name passed to it. The printed name will be same for shutdown
  and resume states as they use the same callback pointer.

Cc: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

---
@Shawn: Please let me know if you want to print "resume" for resume
state, as that will require a separate callback for resume state, just
to print the name correctly. I thought it might not be worth enough :)
---
 drivers/clocksource/mxs_timer.c | 80 +++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 48 deletions(-)

diff --git a/drivers/clocksource/mxs_timer.c b/drivers/clocksource/mxs_timer.c
index 445b68a01dc5..f5ce2961c0d6 100644
--- a/drivers/clocksource/mxs_timer.c
+++ b/drivers/clocksource/mxs_timer.c
@@ -77,7 +77,6 @@
 #define BV_TIMROTv2_TIMCTRLn_SELECT__TICK_ALWAYS	0xf
 
 static struct clock_event_device mxs_clockevent_device;
-static enum clock_event_mode mxs_clockevent_mode = CLOCK_EVT_MODE_UNUSED;
 
 static void __iomem *mxs_timrot_base;
 static u32 timrot_major_version;
@@ -141,64 +140,49 @@ static struct irqaction mxs_timer_irq = {
 	.handler	= mxs_timer_interrupt,
 };
 
-#ifdef DEBUG
-static const char *clock_event_mode_label[] const = {
-	[CLOCK_EVT_MODE_PERIODIC] = "CLOCK_EVT_MODE_PERIODIC",
-	[CLOCK_EVT_MODE_ONESHOT]  = "CLOCK_EVT_MODE_ONESHOT",
-	[CLOCK_EVT_MODE_SHUTDOWN] = "CLOCK_EVT_MODE_SHUTDOWN",
-	[CLOCK_EVT_MODE_UNUSED]   = "CLOCK_EVT_MODE_UNUSED"
-};
-#endif /* DEBUG */
-
-static void mxs_set_mode(enum clock_event_mode mode,
-				struct clock_event_device *evt)
+static void mxs_irq_clear(char *state)
 {
 	/* Disable interrupt in timer module */
 	timrot_irq_disable();
 
-	if (mode != mxs_clockevent_mode) {
-		/* Set event time into the furthest future */
-		if (timrot_is_v1())
-			__raw_writel(0xffff,
-				mxs_timrot_base + HW_TIMROT_TIMCOUNTn(1));
-		else
-			__raw_writel(0xffffffff,
-				mxs_timrot_base + HW_TIMROT_FIXED_COUNTn(1));
-
-		/* Clear pending interrupt */
-		timrot_irq_acknowledge();
-	}
+	/* Set event time into the furthest future */
+	if (timrot_is_v1())
+		__raw_writel(0xffff, mxs_timrot_base + HW_TIMROT_TIMCOUNTn(1));
+	else
+		__raw_writel(0xffffffff,
+			     mxs_timrot_base + HW_TIMROT_FIXED_COUNTn(1));
+
+	/* Clear pending interrupt */
+	timrot_irq_acknowledge();
 
 #ifdef DEBUG
-	pr_info("%s: changing mode from %s to %s\n", __func__,
-		clock_event_mode_label[mxs_clockevent_mode],
-		clock_event_mode_label[mode]);
+	pr_info("%s: changing mode to %s\n", __func__, state)
 #endif /* DEBUG */
+}
 
-	/* Remember timer mode */
-	mxs_clockevent_mode = mode;
-
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		pr_err("%s: Periodic mode is not implemented\n", __func__);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		timrot_irq_enable();
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_RESUME:
-		/* Left event sources disabled, no more interrupts appear */
-		break;
-	}
+static int mxs_shutdown(struct clock_event_device *evt)
+{
+	mxs_irq_clear("shutdown");
+
+	return 0;
+}
+
+static int mxs_set_oneshot(struct clock_event_device *evt)
+{
+	if (clockevent_state_oneshot(evt))
+		mxs_irq_clear("oneshot");
+	timrot_irq_enable();
+	return 0;
 }
 
 static struct clock_event_device mxs_clockevent_device = {
-	.name		= "mxs_timrot",
-	.features	= CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode	= mxs_set_mode,
-	.set_next_event	= timrotv2_set_next_event,
-	.rating		= 200,
+	.name			= "mxs_timrot",
+	.features		= CLOCK_EVT_FEAT_ONESHOT,
+	.set_state_shutdown	= mxs_shutdown,
+	.set_state_oneshot	= mxs_set_oneshot,
+	.tick_resume		= mxs_shutdown,
+	.set_next_event		= timrotv2_set_next_event,
+	.rating			= 200,
 };
 
 static int __init mxs_clockevent_init(struct clk *timer_clk)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 15/41] clocksource: nomadik-mtu: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (13 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 14/41] clocksource: mxs: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-14 11:11   ` Linus Walleij
  2015-06-18 10:54 ` [PATCH 16/41] clocksource: pxa: " Viresh Kumar
                   ` (25 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Linus Walleij

Migrate nomadik-mtu 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.

Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/nomadik-mtu.c | 58 ++++++++++++++++++++-------------------
 1 file changed, 30 insertions(+), 28 deletions(-)

diff --git a/drivers/clocksource/nomadik-mtu.c b/drivers/clocksource/nomadik-mtu.c
index a709cfa49d85..bc8dd443c727 100644
--- a/drivers/clocksource/nomadik-mtu.c
+++ b/drivers/clocksource/nomadik-mtu.c
@@ -119,28 +119,27 @@ static void nmdk_clkevt_reset(void)
 	}
 }
 
-static void nmdk_clkevt_mode(enum clock_event_mode mode,
-			     struct clock_event_device *dev)
+static int nmdk_clkevt_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		clkevt_periodic = true;
-		nmdk_clkevt_reset();
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		clkevt_periodic = false;
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-		writel(0, mtu_base + MTU_IMSC);
-		/* disable timer */
-		writel(0, mtu_base + MTU_CR(1));
-		/* load some high default value */
-		writel(0xffffffff, mtu_base + MTU_LR(1));
-		break;
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+	writel(0, mtu_base + MTU_IMSC);
+	/* disable timer */
+	writel(0, mtu_base + MTU_CR(1));
+	/* load some high default value */
+	writel(0xffffffff, mtu_base + MTU_LR(1));
+	return 0;
+}
+
+static int nmdk_clkevt_set_oneshot(struct clock_event_device *evt)
+{
+	clkevt_periodic = false;
+	return 0;
+}
+
+static int nmdk_clkevt_set_periodic(struct clock_event_device *evt)
+{
+	clkevt_periodic = true;
+	nmdk_clkevt_reset();
+	return 0;
 }
 
 static void nmdk_clksrc_reset(void)
@@ -163,13 +162,16 @@ static void nmdk_clkevt_resume(struct clock_event_device *cedev)
 }
 
 static struct clock_event_device nmdk_clkevt = {
-	.name		= "mtu_1",
-	.features	= CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC |
-	                  CLOCK_EVT_FEAT_DYNIRQ,
-	.rating		= 200,
-	.set_mode	= nmdk_clkevt_mode,
-	.set_next_event	= nmdk_clkevt_next,
-	.resume		= nmdk_clkevt_resume,
+	.name			= "mtu_1",
+	.features		= CLOCK_EVT_FEAT_ONESHOT |
+				  CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_DYNIRQ,
+	.rating			= 200,
+	.set_state_shutdown	= nmdk_clkevt_shutdown,
+	.set_state_periodic	= nmdk_clkevt_set_periodic,
+	.set_state_oneshot	= nmdk_clkevt_set_oneshot,
+	.set_next_event		= nmdk_clkevt_next,
+	.resume			= nmdk_clkevt_resume,
 };
 
 /*
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 16/41] clocksource: pxa: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (14 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 15/41] clocksource: nomadik-mtu: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-04 15:42   ` Robert Jarzmik
  2015-06-18 10:54 ` [PATCH 17/41] clocksource: qcom: " Viresh Kumar
                   ` (24 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Robert Jarzmik, Russell King

Migrate pxa 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.

Both oneshot and shutdown modes had exactly same code and so only a
single callback is sufficient now, which will be called for both the
modes.

Cc: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: Russell King <linux@arm.linux.org.uk>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/pxa_timer.c | 39 +++++++++++++--------------------------
 1 file changed, 13 insertions(+), 26 deletions(-)

diff --git a/drivers/clocksource/pxa_timer.c b/drivers/clocksource/pxa_timer.c
index d9438af2bbd6..45b6a4999713 100644
--- a/drivers/clocksource/pxa_timer.c
+++ b/drivers/clocksource/pxa_timer.c
@@ -88,26 +88,12 @@ pxa_osmr0_set_next_event(unsigned long delta, struct clock_event_device *dev)
 	return (signed)(next - oscr) <= MIN_OSCR_DELTA ? -ETIME : 0;
 }
 
-static void
-pxa_osmr0_set_mode(enum clock_event_mode mode, struct clock_event_device *dev)
+static int pxa_osmr0_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_ONESHOT:
-		timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
-		timer_writel(OSSR_M0, OSSR);
-		break;
-
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		/* initializing, released, or preparing for suspend */
-		timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
-		timer_writel(OSSR_M0, OSSR);
-		break;
-
-	case CLOCK_EVT_MODE_RESUME:
-	case CLOCK_EVT_MODE_PERIODIC:
-		break;
-	}
+	/* initializing, released, or preparing for suspend */
+	timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
+	timer_writel(OSSR_M0, OSSR);
+	return 0;
 }
 
 #ifdef CONFIG_PM
@@ -147,13 +133,14 @@ static void pxa_timer_resume(struct clock_event_device *cedev)
 #endif
 
 static struct clock_event_device ckevt_pxa_osmr0 = {
-	.name		= "osmr0",
-	.features	= CLOCK_EVT_FEAT_ONESHOT,
-	.rating		= 200,
-	.set_next_event	= pxa_osmr0_set_next_event,
-	.set_mode	= pxa_osmr0_set_mode,
-	.suspend	= pxa_timer_suspend,
-	.resume		= pxa_timer_resume,
+	.name			= "osmr0",
+	.features		= CLOCK_EVT_FEAT_ONESHOT,
+	.rating			= 200,
+	.set_next_event		= pxa_osmr0_set_next_event,
+	.set_state_shutdown	= pxa_osmr0_shutdown,
+	.set_state_oneshot	= pxa_osmr0_shutdown,
+	.suspend		= pxa_timer_suspend,
+	.resume			= pxa_timer_resume,
 };
 
 static struct irqaction pxa_ost0_irq = {
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 17/41] clocksource: qcom: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (15 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 16/41] clocksource: pxa: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-19 19:10   ` Stephen Boyd
  2015-06-18 10:54 ` [PATCH 18/41] clocksource: rockchip: " Viresh Kumar
                   ` (23 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Stephen Boyd, Kumar Gala, Andy Gross, David Brown

Migrate qcom 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.

Periodic mode isn't supported by the driver and so the callback isn't
provided anymore.

Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Kumar Gala <galak@codeaurora.org>
Cc: Andy Gross <agross@codeaurora.org>
Cc: David Brown <davidb@codeaurora.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/qcom-timer.c | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/drivers/clocksource/qcom-timer.c b/drivers/clocksource/qcom-timer.c
index cba2d015564c..f8e09f923651 100644
--- a/drivers/clocksource/qcom-timer.c
+++ b/drivers/clocksource/qcom-timer.c
@@ -47,7 +47,7 @@ static irqreturn_t msm_timer_interrupt(int irq, void *dev_id)
 {
 	struct clock_event_device *evt = dev_id;
 	/* Stop the timer tick */
-	if (evt->mode == CLOCK_EVT_MODE_ONESHOT) {
+	if (clockevent_state_oneshot(evt)) {
 		u32 ctrl = readl_relaxed(event_base + TIMER_ENABLE);
 		ctrl &= ~TIMER_ENABLE_EN;
 		writel_relaxed(ctrl, event_base + TIMER_ENABLE);
@@ -75,26 +75,14 @@ static int msm_timer_set_next_event(unsigned long cycles,
 	return 0;
 }
 
-static void msm_timer_set_mode(enum clock_event_mode mode,
-			      struct clock_event_device *evt)
+static int msm_timer_shutdown(struct clock_event_device *evt)
 {
 	u32 ctrl;
 
 	ctrl = readl_relaxed(event_base + TIMER_ENABLE);
 	ctrl &= ~(TIMER_ENABLE_EN | TIMER_ENABLE_CLR_ON_MATCH_EN);
-
-	switch (mode) {
-	case CLOCK_EVT_MODE_RESUME:
-	case CLOCK_EVT_MODE_PERIODIC:
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* Timer is enabled in set_next_event */
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		break;
-	}
 	writel_relaxed(ctrl, event_base + TIMER_ENABLE);
+	return 0;
 }
 
 static struct clock_event_device __percpu *msm_evt;
@@ -126,7 +114,9 @@ static int msm_local_timer_setup(struct clock_event_device *evt)
 	evt->name = "msm_timer";
 	evt->features = CLOCK_EVT_FEAT_ONESHOT;
 	evt->rating = 200;
-	evt->set_mode = msm_timer_set_mode;
+	evt->set_state_shutdown = msm_timer_shutdown;
+	evt->set_state_oneshot = msm_timer_shutdown;
+	evt->tick_resume = msm_timer_shutdown;
 	evt->set_next_event = msm_timer_set_next_event;
 	evt->cpumask = cpumask_of(cpu);
 
@@ -147,7 +137,7 @@ static int msm_local_timer_setup(struct clock_event_device *evt)
 
 static void msm_local_timer_stop(struct clock_event_device *evt)
 {
-	evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
+	evt->set_state_shutdown(evt);
 	disable_percpu_irq(evt->irq);
 }
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 18/41] clocksource: rockchip: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (16 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 17/41] clocksource: qcom: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 19/41] clocksource: samsung_pwm: " Viresh Kumar
                   ` (22 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Heiko Stuebner

Migrate rockchip 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 oneshot or resume modes, and so the
callbacks aren't provided.

Cc: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/rockchip_timer.c | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)

diff --git a/drivers/clocksource/rockchip_timer.c b/drivers/clocksource/rockchip_timer.c
index a35993bafb20..bb2c2b050964 100644
--- a/drivers/clocksource/rockchip_timer.c
+++ b/drivers/clocksource/rockchip_timer.c
@@ -82,23 +82,18 @@ static inline int rk_timer_set_next_event(unsigned long cycles,
 	return 0;
 }
 
-static inline void rk_timer_set_mode(enum clock_event_mode mode,
-				     struct clock_event_device *ce)
+static int rk_timer_shutdown(struct clock_event_device *ce)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		rk_timer_disable(ce);
-		rk_timer_update_counter(rk_timer(ce)->freq / HZ - 1, ce);
-		rk_timer_enable(ce, TIMER_MODE_FREE_RUNNING);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		rk_timer_disable(ce);
-		break;
-	}
+	rk_timer_disable(ce);
+	return 0;
+}
+
+static int rk_timer_set_periodic(struct clock_event_device *ce)
+{
+	rk_timer_disable(ce);
+	rk_timer_update_counter(rk_timer(ce)->freq / HZ - 1, ce);
+	rk_timer_enable(ce, TIMER_MODE_FREE_RUNNING);
+	return 0;
 }
 
 static irqreturn_t rk_timer_interrupt(int irq, void *dev_id)
@@ -107,7 +102,7 @@ static irqreturn_t rk_timer_interrupt(int irq, void *dev_id)
 
 	rk_timer_interrupt_clear(ce);
 
-	if (ce->mode == CLOCK_EVT_MODE_ONESHOT)
+	if (clockevent_state_oneshot(ce))
 		rk_timer_disable(ce);
 
 	ce->event_handler(ce);
@@ -161,7 +156,8 @@ static void __init rk_timer_init(struct device_node *np)
 	ce->name = TIMER_NAME;
 	ce->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
 	ce->set_next_event = rk_timer_set_next_event;
-	ce->set_mode = rk_timer_set_mode;
+	ce->set_state_shutdown = rk_timer_shutdown;
+	ce->set_state_periodic = rk_timer_set_periodic;
 	ce->irq = irq;
 	ce->cpumask = cpumask_of(0);
 	ce->rating = 250;
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 19/41] clocksource: samsung_pwm: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (17 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 18/41] clocksource: rockchip: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 20/41] clocksource: sh_cmt: " Viresh Kumar
                   ` (21 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Tomasz Figa, Kukjin Kim

Migrate samsung_pwm 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.

Cc: Tomasz Figa <tfiga@chromium.org>
Cc: Kukjin Kim <kgene@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/samsung_pwm_timer.c | 41 +++++++++++++++------------------
 1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/drivers/clocksource/samsung_pwm_timer.c b/drivers/clocksource/samsung_pwm_timer.c
index 5645cfc90c41..bc90e13338cc 100644
--- a/drivers/clocksource/samsung_pwm_timer.c
+++ b/drivers/clocksource/samsung_pwm_timer.c
@@ -207,25 +207,18 @@ static int samsung_set_next_event(unsigned long cycles,
 	return 0;
 }
 
-static void samsung_set_mode(enum clock_event_mode mode,
-				struct clock_event_device *evt)
+static int samsung_shutdown(struct clock_event_device *evt)
 {
 	samsung_time_stop(pwm.event_id);
+	return 0;
+}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		samsung_time_setup(pwm.event_id, pwm.clock_count_per_tick - 1);
-		samsung_time_start(pwm.event_id, true);
-		break;
-
-	case CLOCK_EVT_MODE_ONESHOT:
-		break;
-
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+static int samsung_set_periodic(struct clock_event_device *evt)
+{
+	samsung_time_stop(pwm.event_id);
+	samsung_time_setup(pwm.event_id, pwm.clock_count_per_tick - 1);
+	samsung_time_start(pwm.event_id, true);
+	return 0;
 }
 
 static void samsung_clockevent_resume(struct clock_event_device *cev)
@@ -240,12 +233,16 @@ static void samsung_clockevent_resume(struct clock_event_device *cev)
 }
 
 static struct clock_event_device time_event_device = {
-	.name		= "samsung_event_timer",
-	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.rating		= 200,
-	.set_next_event	= samsung_set_next_event,
-	.set_mode	= samsung_set_mode,
-	.resume		= samsung_clockevent_resume,
+	.name			= "samsung_event_timer",
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.rating			= 200,
+	.set_next_event		= samsung_set_next_event,
+	.set_state_shutdown	= samsung_shutdown,
+	.set_state_periodic	= samsung_set_periodic,
+	.set_state_oneshot	= samsung_shutdown,
+	.tick_resume		= samsung_shutdown,
+	.resume			= samsung_clockevent_resume,
 };
 
 static irqreturn_t samsung_clock_event_isr(int irq, void *dev_id)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 20/41] clocksource: sh_cmt: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (18 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 19/41] clocksource: samsung_pwm: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 13:10   ` Laurent Pinchart
  2015-06-18 10:54 ` [PATCH 21/41] clocksource: sh_mtu2: " Viresh Kumar
                   ` (20 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Magnus Damm, Laurent Pinchart, Paul Mundt

Migrate sh_cmt 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.

Cc: Magnus Damm <damm+renesas@opensource.se>
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/sh_cmt.c | 62 ++++++++++++++++++++++----------------------
 1 file changed, 31 insertions(+), 31 deletions(-)

diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c
index b8ff3c64cc45..855f42a2c64b 100644
--- a/drivers/clocksource/sh_cmt.c
+++ b/drivers/clocksource/sh_cmt.c
@@ -538,7 +538,7 @@ static irqreturn_t sh_cmt_interrupt(int irq, void *dev_id)
 
 	if (ch->flags & FLAG_CLOCKEVENT) {
 		if (!(ch->flags & FLAG_SKIPEVENT)) {
-			if (ch->ced.mode == CLOCK_EVT_MODE_ONESHOT) {
+			if (clockevent_state_oneshot(&ch->ced)) {
 				ch->next_match_value = ch->max_match_value;
 				ch->flags |= FLAG_REPROGRAM;
 			}
@@ -554,7 +554,7 @@ static irqreturn_t sh_cmt_interrupt(int irq, void *dev_id)
 		sh_cmt_clock_event_program_verify(ch, 1);
 
 		if (ch->flags & FLAG_CLOCKEVENT)
-			if ((ch->ced.mode == CLOCK_EVT_MODE_SHUTDOWN)
+			if ((clockevent_state_shutdown(&ch->ced))
 			    || (ch->match_value == ch->next_match_value))
 				ch->flags &= ~FLAG_REPROGRAM;
 	}
@@ -720,39 +720,37 @@ static void sh_cmt_clock_event_start(struct sh_cmt_channel *ch, int periodic)
 		sh_cmt_set_next(ch, ch->max_match_value);
 }
 
-static void sh_cmt_clock_event_mode(enum clock_event_mode mode,
-				    struct clock_event_device *ced)
+static int sh_cmt_clock_event_shutdown(struct clock_event_device *ced)
+{
+	struct sh_cmt_channel *ch = ced_to_sh_cmt(ced);
+
+	sh_cmt_stop(ch, FLAG_CLOCKEVENT);
+	return 0;
+}
+
+static int sh_cmt_clock_event_set_state(struct clock_event_device *ced,
+					int periodic)
 {
 	struct sh_cmt_channel *ch = ced_to_sh_cmt(ced);
 
 	/* deal with old setting first */
-	switch (ced->mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-	case CLOCK_EVT_MODE_ONESHOT:
+	if (clockevent_state_oneshot(ced) || clockevent_state_periodic(ced))
 		sh_cmt_stop(ch, FLAG_CLOCKEVENT);
-		break;
-	default:
-		break;
-	}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		dev_info(&ch->cmt->pdev->dev,
-			 "ch%u: used for periodic clock events\n", ch->index);
-		sh_cmt_clock_event_start(ch, 1);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		dev_info(&ch->cmt->pdev->dev,
-			 "ch%u: used for oneshot clock events\n", ch->index);
-		sh_cmt_clock_event_start(ch, 0);
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-		sh_cmt_stop(ch, FLAG_CLOCKEVENT);
-		break;
-	default:
-		break;
-	}
+	dev_info(&ch->cmt->pdev->dev, "ch%u: used for %s clock events\n",
+		 ch->index, periodic ? "periodic" : "oneshot");
+	sh_cmt_clock_event_start(ch, periodic);
+	return 0;
+}
+
+static int sh_cmt_clock_event_set_oneshot(struct clock_event_device *ced)
+{
+	return sh_cmt_clock_event_set_state(ced, 0);
+}
+
+static int sh_cmt_clock_event_set_periodic(struct clock_event_device *ced)
+{
+	return sh_cmt_clock_event_set_state(ced, 1);
 }
 
 static int sh_cmt_clock_event_next(unsigned long delta,
@@ -760,7 +758,7 @@ static int sh_cmt_clock_event_next(unsigned long delta,
 {
 	struct sh_cmt_channel *ch = ced_to_sh_cmt(ced);
 
-	BUG_ON(ced->mode != CLOCK_EVT_MODE_ONESHOT);
+	BUG_ON(!clockevent_state_oneshot(ced));
 	if (likely(ch->flags & FLAG_IRQCONTEXT))
 		ch->next_match_value = delta - 1;
 	else
@@ -814,7 +812,9 @@ static int sh_cmt_register_clockevent(struct sh_cmt_channel *ch,
 	ced->rating = 125;
 	ced->cpumask = cpu_possible_mask;
 	ced->set_next_event = sh_cmt_clock_event_next;
-	ced->set_mode = sh_cmt_clock_event_mode;
+	ced->set_state_shutdown = sh_cmt_clock_event_shutdown;
+	ced->set_state_periodic = sh_cmt_clock_event_set_periodic;
+	ced->set_state_oneshot = sh_cmt_clock_event_set_oneshot;
 	ced->suspend = sh_cmt_clock_event_suspend;
 	ced->resume = sh_cmt_clock_event_resume;
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 21/41] clocksource: sh_mtu2: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (19 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 20/41] clocksource: sh_cmt: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 13:10   ` Laurent Pinchart
  2015-06-18 10:54 ` [PATCH 22/41] clocksource: sh_tmu: " Viresh Kumar
                   ` (19 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Magnus Damm, Laurent Pinchart, Paul Mundt

Migrate sh_mtu2 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.

Cc: Magnus Damm <damm+renesas@opensource.se>
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/sh_mtu2.c | 42 ++++++++++++++++--------------------------
 1 file changed, 16 insertions(+), 26 deletions(-)

diff --git a/drivers/clocksource/sh_mtu2.c b/drivers/clocksource/sh_mtu2.c
index 3d88698cf2b8..f1985da8113f 100644
--- a/drivers/clocksource/sh_mtu2.c
+++ b/drivers/clocksource/sh_mtu2.c
@@ -276,36 +276,25 @@ static struct sh_mtu2_channel *ced_to_sh_mtu2(struct clock_event_device *ced)
 	return container_of(ced, struct sh_mtu2_channel, ced);
 }
 
-static void sh_mtu2_clock_event_mode(enum clock_event_mode mode,
-				    struct clock_event_device *ced)
+static int sh_mtu2_clock_event_shutdown(struct clock_event_device *ced)
 {
 	struct sh_mtu2_channel *ch = ced_to_sh_mtu2(ced);
-	int disabled = 0;
 
-	/* deal with old setting first */
-	switch (ced->mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
+	sh_mtu2_disable(ch);
+	return 0;
+}
+
+static int sh_mtu2_clock_event_set_periodic(struct clock_event_device *ced)
+{
+	struct sh_mtu2_channel *ch = ced_to_sh_mtu2(ced);
+
+	if (clockevent_state_periodic(ced))
 		sh_mtu2_disable(ch);
-		disabled = 1;
-		break;
-	default:
-		break;
-	}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		dev_info(&ch->mtu->pdev->dev,
-			 "ch%u: used for periodic clock events\n", ch->index);
-		sh_mtu2_enable(ch);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-		if (!disabled)
-			sh_mtu2_disable(ch);
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		break;
-	}
+	dev_info(&ch->mtu->pdev->dev, "ch%u: used for periodic clock events\n",
+		 ch->index);
+	sh_mtu2_enable(ch);
+	return 0;
 }
 
 static void sh_mtu2_clock_event_suspend(struct clock_event_device *ced)
@@ -327,7 +316,8 @@ static void sh_mtu2_register_clockevent(struct sh_mtu2_channel *ch,
 	ced->features = CLOCK_EVT_FEAT_PERIODIC;
 	ced->rating = 200;
 	ced->cpumask = cpu_possible_mask;
-	ced->set_mode = sh_mtu2_clock_event_mode;
+	ced->set_state_shutdown = sh_mtu2_clock_event_shutdown;
+	ced->set_state_periodic = sh_mtu2_clock_event_set_periodic;
 	ced->suspend = sh_mtu2_clock_event_suspend;
 	ced->resume = sh_mtu2_clock_event_resume;
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 22/41] clocksource: sh_tmu: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (20 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 21/41] clocksource: sh_mtu2: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 13:10   ` Laurent Pinchart
  2015-06-18 10:54 ` [PATCH 23/41] clocksource: sun4i: " Viresh Kumar
                   ` (18 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Magnus Damm, Laurent Pinchart, Paul Mundt

Migrate sh_tmu 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.

Cc: Magnus Damm <damm+renesas@opensource.se>
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/sh_tmu.c | 63 +++++++++++++++++++++-----------------------
 1 file changed, 30 insertions(+), 33 deletions(-)

diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c
index b6b8fa3cd211..43c98143f79a 100644
--- a/drivers/clocksource/sh_tmu.c
+++ b/drivers/clocksource/sh_tmu.c
@@ -240,7 +240,7 @@ static irqreturn_t sh_tmu_interrupt(int irq, void *dev_id)
 	struct sh_tmu_channel *ch = dev_id;
 
 	/* disable or acknowledge interrupt */
-	if (ch->ced.mode == CLOCK_EVT_MODE_ONESHOT)
+	if (clockevent_state_oneshot(&ch->ced))
 		sh_tmu_write(ch, TCR, TCR_TPSC_CLK4);
 	else
 		sh_tmu_write(ch, TCR, TCR_UNIE | TCR_TPSC_CLK4);
@@ -358,42 +358,37 @@ static void sh_tmu_clock_event_start(struct sh_tmu_channel *ch, int periodic)
 	}
 }
 
-static void sh_tmu_clock_event_mode(enum clock_event_mode mode,
-				    struct clock_event_device *ced)
+static int sh_tmu_clock_event_shutdown(struct clock_event_device *ced)
+{
+	struct sh_tmu_channel *ch = ced_to_sh_tmu(ced);
+
+	sh_tmu_disable(ch);
+	return 0;
+}
+
+static int sh_tmu_clock_event_set_state(struct clock_event_device *ced,
+					int periodic)
 {
 	struct sh_tmu_channel *ch = ced_to_sh_tmu(ced);
-	int disabled = 0;
 
 	/* deal with old setting first */
-	switch (ced->mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-	case CLOCK_EVT_MODE_ONESHOT:
+	if (clockevent_state_oneshot(ced) || clockevent_state_periodic(ced))
 		sh_tmu_disable(ch);
-		disabled = 1;
-		break;
-	default:
-		break;
-	}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		dev_info(&ch->tmu->pdev->dev,
-			 "ch%u: used for periodic clock events\n", ch->index);
-		sh_tmu_clock_event_start(ch, 1);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		dev_info(&ch->tmu->pdev->dev,
-			 "ch%u: used for oneshot clock events\n", ch->index);
-		sh_tmu_clock_event_start(ch, 0);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-		if (!disabled)
-			sh_tmu_disable(ch);
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		break;
-	}
+	dev_info(&ch->tmu->pdev->dev, "ch%u: used for %s clock events\n",
+		 ch->index, periodic ? "periodic" : "oneshot");
+	sh_tmu_clock_event_start(ch, periodic);
+	return 0;
+}
+
+static int sh_tmu_clock_event_set_oneshot(struct clock_event_device *ced)
+{
+	return sh_tmu_clock_event_set_state(ced, 0);
+}
+
+static int sh_tmu_clock_event_set_periodic(struct clock_event_device *ced)
+{
+	return sh_tmu_clock_event_set_state(ced, 1);
 }
 
 static int sh_tmu_clock_event_next(unsigned long delta,
@@ -401,7 +396,7 @@ static int sh_tmu_clock_event_next(unsigned long delta,
 {
 	struct sh_tmu_channel *ch = ced_to_sh_tmu(ced);
 
-	BUG_ON(ced->mode != CLOCK_EVT_MODE_ONESHOT);
+	BUG_ON(!clockevent_state_oneshot(ced));
 
 	/* program new delta value */
 	sh_tmu_set_next(ch, delta, 0);
@@ -430,7 +425,9 @@ static void sh_tmu_register_clockevent(struct sh_tmu_channel *ch,
 	ced->rating = 200;
 	ced->cpumask = cpu_possible_mask;
 	ced->set_next_event = sh_tmu_clock_event_next;
-	ced->set_mode = sh_tmu_clock_event_mode;
+	ced->set_state_shutdown = sh_tmu_clock_event_shutdown;
+	ced->set_state_periodic = sh_tmu_clock_event_set_periodic;
+	ced->set_state_oneshot = sh_tmu_clock_event_set_oneshot;
 	ced->suspend = sh_tmu_clock_event_suspend;
 	ced->resume = sh_tmu_clock_event_resume;
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 23/41] clocksource: sun4i: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (21 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 22/41] clocksource: sh_tmu: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 12:01   ` Maxime Ripard
  2015-06-18 10:54 ` [PATCH 24/41] clocksource: tcb_clksrc: " Viresh Kumar
                   ` (17 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Maxime Ripard

Migrate sun4i 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.

Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/sun4i_timer.c | 41 +++++++++++++++++++++------------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/drivers/clocksource/sun4i_timer.c b/drivers/clocksource/sun4i_timer.c
index 1928a8912584..6f3719d73390 100644
--- a/drivers/clocksource/sun4i_timer.c
+++ b/drivers/clocksource/sun4i_timer.c
@@ -81,25 +81,25 @@ static void sun4i_clkevt_time_start(u8 timer, bool periodic)
 	       timer_base + TIMER_CTL_REG(timer));
 }
 
-static void sun4i_clkevt_mode(enum clock_event_mode mode,
-			      struct clock_event_device *clk)
+static int sun4i_clkevt_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		sun4i_clkevt_time_stop(0);
-		sun4i_clkevt_time_setup(0, ticks_per_jiffy);
-		sun4i_clkevt_time_start(0, true);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		sun4i_clkevt_time_stop(0);
-		sun4i_clkevt_time_start(0, false);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		sun4i_clkevt_time_stop(0);
-		break;
-	}
+	sun4i_clkevt_time_stop(0);
+	return 0;
+}
+
+static int sun4i_clkevt_set_oneshot(struct clock_event_device *evt)
+{
+	sun4i_clkevt_time_stop(0);
+	sun4i_clkevt_time_start(0, false);
+	return 0;
+}
+
+static int sun4i_clkevt_set_periodic(struct clock_event_device *evt)
+{
+	sun4i_clkevt_time_stop(0);
+	sun4i_clkevt_time_setup(0, ticks_per_jiffy);
+	sun4i_clkevt_time_start(0, true);
+	return 0;
 }
 
 static int sun4i_clkevt_next_event(unsigned long evt,
@@ -116,7 +116,10 @@ static struct clock_event_device sun4i_clockevent = {
 	.name = "sun4i_tick",
 	.rating = 350,
 	.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode = sun4i_clkevt_mode,
+	.set_state_shutdown = sun4i_clkevt_shutdown,
+	.set_state_periodic = sun4i_clkevt_set_periodic,
+	.set_state_oneshot = sun4i_clkevt_set_oneshot,
+	.tick_resume = sun4i_clkevt_shutdown,
 	.set_next_event = sun4i_clkevt_next_event,
 };
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 24/41] clocksource: tcb_clksrc: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (22 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 23/41] clocksource: sun4i: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 25/41] clocksource: tegra20: " Viresh Kumar
                   ` (16 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Nicolas Ferre

Migrate tcb_clksrc 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.

Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/tcb_clksrc.c | 93 ++++++++++++++++++++++------------------
 1 file changed, 51 insertions(+), 42 deletions(-)

diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c
index 8bdbc45c6dad..d28d2fe798d5 100644
--- a/drivers/clocksource/tcb_clksrc.c
+++ b/drivers/clocksource/tcb_clksrc.c
@@ -91,55 +91,62 @@ static struct tc_clkevt_device *to_tc_clkevt(struct clock_event_device *clkevt)
  */
 static u32 timer_clock;
 
-static void tc_mode(enum clock_event_mode m, struct clock_event_device *d)
+static int tc_shutdown(struct clock_event_device *d)
 {
 	struct tc_clkevt_device *tcd = to_tc_clkevt(d);
 	void __iomem		*regs = tcd->regs;
 
-	if (tcd->clkevt.mode == CLOCK_EVT_MODE_PERIODIC
-			|| tcd->clkevt.mode == CLOCK_EVT_MODE_ONESHOT) {
-		__raw_writel(0xff, regs + ATMEL_TC_REG(2, IDR));
-		__raw_writel(ATMEL_TC_CLKDIS, regs + ATMEL_TC_REG(2, CCR));
-		clk_disable(tcd->clk);
-	}
+	__raw_writel(0xff, regs + ATMEL_TC_REG(2, IDR));
+	__raw_writel(ATMEL_TC_CLKDIS, regs + ATMEL_TC_REG(2, CCR));
+	clk_disable(tcd->clk);
 
-	switch (m) {
+	return 0;
+}
 
-	/* By not making the gentime core emulate periodic mode on top
-	 * of oneshot, we get lower overhead and improved accuracy.
-	 */
-	case CLOCK_EVT_MODE_PERIODIC:
-		clk_enable(tcd->clk);
+static int tc_set_oneshot(struct clock_event_device *d)
+{
+	struct tc_clkevt_device *tcd = to_tc_clkevt(d);
+	void __iomem		*regs = tcd->regs;
 
-		/* slow clock, count up to RC, then irq and restart */
-		__raw_writel(timer_clock
-				| ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO,
-				regs + ATMEL_TC_REG(2, CMR));
-		__raw_writel((32768 + HZ/2) / HZ, tcaddr + ATMEL_TC_REG(2, RC));
+	if (clockevent_state_oneshot(d) || clockevent_state_periodic(d))
+		tc_shutdown(d);
 
-		/* Enable clock and interrupts on RC compare */
-		__raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
+	clk_enable(tcd->clk);
 
-		/* go go gadget! */
-		__raw_writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG,
-				regs + ATMEL_TC_REG(2, CCR));
-		break;
+	/* slow clock, count up to RC, then irq and stop */
+	__raw_writel(timer_clock | ATMEL_TC_CPCSTOP | ATMEL_TC_WAVE |
+		     ATMEL_TC_WAVESEL_UP_AUTO, regs + ATMEL_TC_REG(2, CMR));
+	__raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
 
-	case CLOCK_EVT_MODE_ONESHOT:
-		clk_enable(tcd->clk);
+	/* set_next_event() configures and starts the timer */
+	return 0;
+}
 
-		/* slow clock, count up to RC, then irq and stop */
-		__raw_writel(timer_clock | ATMEL_TC_CPCSTOP
-				| ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO,
-				regs + ATMEL_TC_REG(2, CMR));
-		__raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
+static int tc_set_periodic(struct clock_event_device *d)
+{
+	struct tc_clkevt_device *tcd = to_tc_clkevt(d);
+	void __iomem		*regs = tcd->regs;
 
-		/* set_next_event() configures and starts the timer */
-		break;
+	if (clockevent_state_oneshot(d) || clockevent_state_periodic(d))
+		tc_shutdown(d);
 
-	default:
-		break;
-	}
+	/* By not making the gentime core emulate periodic mode on top
+	 * of oneshot, we get lower overhead and improved accuracy.
+	 */
+	clk_enable(tcd->clk);
+
+	/* slow clock, count up to RC, then irq and restart */
+	__raw_writel(timer_clock | ATMEL_TC_WAVE | ATMEL_TC_WAVESEL_UP_AUTO,
+		     regs + ATMEL_TC_REG(2, CMR));
+	__raw_writel((32768 + HZ / 2) / HZ, tcaddr + ATMEL_TC_REG(2, RC));
+
+	/* Enable clock and interrupts on RC compare */
+	__raw_writel(ATMEL_TC_CPCS, regs + ATMEL_TC_REG(2, IER));
+
+	/* go go gadget! */
+	__raw_writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG, regs +
+		     ATMEL_TC_REG(2, CCR));
+	return 0;
 }
 
 static int tc_next_event(unsigned long delta, struct clock_event_device *d)
@@ -154,13 +161,15 @@ static int tc_next_event(unsigned long delta, struct clock_event_device *d)
 
 static struct tc_clkevt_device clkevt = {
 	.clkevt	= {
-		.name		= "tc_clkevt",
-		.features	= CLOCK_EVT_FEAT_PERIODIC
-					| CLOCK_EVT_FEAT_ONESHOT,
+		.name			= "tc_clkevt",
+		.features		= CLOCK_EVT_FEAT_PERIODIC |
+					  CLOCK_EVT_FEAT_ONESHOT,
 		/* Should be lower than at91rm9200's system timer */
-		.rating		= 125,
-		.set_next_event	= tc_next_event,
-		.set_mode	= tc_mode,
+		.rating			= 125,
+		.set_next_event		= tc_next_event,
+		.set_state_shutdown	= tc_shutdown,
+		.set_state_periodic	= tc_set_periodic,
+		.set_state_oneshot	= tc_set_oneshot,
 	},
 };
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 25/41] clocksource: tegra20: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (23 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 24/41] clocksource: tcb_clksrc: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-02 19:41   ` Daniel Lezcano
  2015-06-18 10:54 ` [PATCH 26/41] clocksource: time-armada-370-xp: " Viresh Kumar
                   ` (15 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Thierry Reding, Stephen Warren

Migrate tegra20 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.

Cc: Thierry Reding <treding@nvidia.com>
Cc: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/tegra20_timer.c | 40 ++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 21 deletions(-)

diff --git a/drivers/clocksource/tegra20_timer.c b/drivers/clocksource/tegra20_timer.c
index 5a112d72fc2d..e6083d3d762b 100644
--- a/drivers/clocksource/tegra20_timer.c
+++ b/drivers/clocksource/tegra20_timer.c
@@ -72,33 +72,31 @@ static int tegra_timer_set_next_event(unsigned long cycles,
 	return 0;
 }
 
-static void tegra_timer_set_mode(enum clock_event_mode mode,
-				    struct clock_event_device *evt)
+static int tegra_timer_shutdown(struct clock_event_device *evt)
 {
-	u32 reg;
-
 	timer_writel(0, TIMER3_BASE + TIMER_PTV);
+	return 0;
+}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		reg = 0xC0000000 | ((1000000/HZ)-1);
-		timer_writel(reg, TIMER3_BASE + TIMER_PTV);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+static int tegra_timer_set_periodic(struct clock_event_device *evt)
+{
+	u32 reg = 0xC0000000 | ((1000000 / HZ) - 1);
+
+	timer_writel(0, TIMER3_BASE + TIMER_PTV);
+	timer_writel(reg, TIMER3_BASE + TIMER_PTV);
+	return 0;
 }
 
 static struct clock_event_device tegra_clockevent = {
-	.name		= "timer0",
-	.rating		= 300,
-	.features	= CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
-	.set_next_event	= tegra_timer_set_next_event,
-	.set_mode	= tegra_timer_set_mode,
+	.name			= "timer0",
+	.rating			= 300,
+	.features		= CLOCK_EVT_FEAT_ONESHOT |
+				  CLOCK_EVT_FEAT_PERIODIC,
+	.set_next_event		= tegra_timer_set_next_event,
+	.set_state_shutdown	= tegra_timer_shutdown,
+	.set_state_periodic	= tegra_timer_set_periodic,
+	.set_state_oneshot	= tegra_timer_shutdown,
+	.tick_resume		= tegra_timer_shutdown,
 };
 
 static u64 notrace tegra_read_sched_clock(void)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 26/41] clocksource: time-armada-370-xp: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (24 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 25/41] clocksource: tegra20: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 27/41] clocksource: efm32: " Viresh Kumar
                   ` (14 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth

Migrate time-armada-370-xp 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.

Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Gregory Clement <gregory.clement@free-electrons.com>
Cc: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/time-armada-370-xp.c | 53 +++++++++++++++++---------------
 1 file changed, 28 insertions(+), 25 deletions(-)

diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
index 0c8c5e337540..2162796fd504 100644
--- a/drivers/clocksource/time-armada-370-xp.c
+++ b/drivers/clocksource/time-armada-370-xp.c
@@ -121,33 +121,33 @@ armada_370_xp_clkevt_next_event(unsigned long delta,
 	return 0;
 }
 
-static void
-armada_370_xp_clkevt_mode(enum clock_event_mode mode,
-			  struct clock_event_device *dev)
+static int armada_370_xp_clkevt_shutdown(struct clock_event_device *evt)
 {
-	if (mode == CLOCK_EVT_MODE_PERIODIC) {
+	/*
+	 * Disable timer.
+	 */
+	local_timer_ctrl_clrset(TIMER0_EN, 0);
 
-		/*
-		 * Setup timer to fire at 1/HZ intervals.
-		 */
-		writel(ticks_per_jiffy - 1, local_base + TIMER0_RELOAD_OFF);
-		writel(ticks_per_jiffy - 1, local_base + TIMER0_VAL_OFF);
+	/*
+	 * ACK pending timer interrupt.
+	 */
+	writel(TIMER0_CLR_MASK, local_base + LCL_TIMER_EVENTS_STATUS);
+	return 0;
+}
 
-		/*
-		 * Enable timer.
-		 */
-		local_timer_ctrl_clrset(0, TIMER0_RELOAD_EN | enable_mask);
-	} else {
-		/*
-		 * Disable timer.
-		 */
-		local_timer_ctrl_clrset(TIMER0_EN, 0);
+static int armada_370_xp_clkevt_set_periodic(struct clock_event_device *evt)
+{
+	/*
+	 * Setup timer to fire at 1/HZ intervals.
+	 */
+	writel(ticks_per_jiffy - 1, local_base + TIMER0_RELOAD_OFF);
+	writel(ticks_per_jiffy - 1, local_base + TIMER0_VAL_OFF);
 
-		/*
-		 * ACK pending timer interrupt.
-		 */
-		writel(TIMER0_CLR_MASK, local_base + LCL_TIMER_EVENTS_STATUS);
-	}
+	/*
+	 * Enable timer.
+	 */
+	local_timer_ctrl_clrset(0, TIMER0_RELOAD_EN | enable_mask);
+	return 0;
 }
 
 static int armada_370_xp_clkevt_irq;
@@ -185,7 +185,10 @@ static int armada_370_xp_timer_setup(struct clock_event_device *evt)
 	evt->shift		= 32,
 	evt->rating		= 300,
 	evt->set_next_event	= armada_370_xp_clkevt_next_event,
-	evt->set_mode		= armada_370_xp_clkevt_mode,
+	evt->set_state_shutdown	= armada_370_xp_clkevt_shutdown;
+	evt->set_state_periodic	= armada_370_xp_clkevt_set_periodic;
+	evt->set_state_oneshot	= armada_370_xp_clkevt_shutdown;
+	evt->tick_resume	= armada_370_xp_clkevt_shutdown;
 	evt->irq		= armada_370_xp_clkevt_irq;
 	evt->cpumask		= cpumask_of(cpu);
 
@@ -197,7 +200,7 @@ static int armada_370_xp_timer_setup(struct clock_event_device *evt)
 
 static void armada_370_xp_timer_stop(struct clock_event_device *evt)
 {
-	evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
+	evt->set_state_shutdown(evt);
 	disable_percpu_irq(evt->irq);
 }
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 27/41] clocksource: efm32: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (25 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 26/41] clocksource: time-armada-370-xp: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 28/41] clocksource: orion: " Viresh Kumar
                   ` (13 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Uwe Kleine-König

Migrate efm32 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.

There is nothing to be done for resume state and so isn't implemented.

Cc: Uwe Kleine-König <kernel@pengutronix.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/time-efm32.c | 66 +++++++++++++++++++++-------------------
 1 file changed, 35 insertions(+), 31 deletions(-)

diff --git a/drivers/clocksource/time-efm32.c b/drivers/clocksource/time-efm32.c
index 5b6e3d5644c9..b06e4c2be406 100644
--- a/drivers/clocksource/time-efm32.c
+++ b/drivers/clocksource/time-efm32.c
@@ -48,40 +48,42 @@ struct efm32_clock_event_ddata {
 	unsigned periodic_top;
 };
 
-static void efm32_clock_event_set_mode(enum clock_event_mode mode,
-				       struct clock_event_device *evtdev)
+static int efm32_clock_event_shutdown(struct clock_event_device *evtdev)
 {
 	struct efm32_clock_event_ddata *ddata =
 		container_of(evtdev, struct efm32_clock_event_ddata, evtdev);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		writel_relaxed(TIMERn_CMD_STOP, ddata->base + TIMERn_CMD);
-		writel_relaxed(ddata->periodic_top, ddata->base + TIMERn_TOP);
-		writel_relaxed(TIMERn_CTRL_PRESC_1024 |
-			       TIMERn_CTRL_CLKSEL_PRESCHFPERCLK |
-			       TIMERn_CTRL_MODE_DOWN,
-			       ddata->base + TIMERn_CTRL);
-		writel_relaxed(TIMERn_CMD_START, ddata->base + TIMERn_CMD);
-		break;
-
-	case CLOCK_EVT_MODE_ONESHOT:
-		writel_relaxed(TIMERn_CMD_STOP, ddata->base + TIMERn_CMD);
-		writel_relaxed(TIMERn_CTRL_PRESC_1024 |
-			       TIMERn_CTRL_CLKSEL_PRESCHFPERCLK |
-			       TIMERn_CTRL_OSMEN |
-			       TIMERn_CTRL_MODE_DOWN,
-			       ddata->base + TIMERn_CTRL);
-		break;
-
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		writel_relaxed(TIMERn_CMD_STOP, ddata->base + TIMERn_CMD);
-		break;
-
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+	writel_relaxed(TIMERn_CMD_STOP, ddata->base + TIMERn_CMD);
+	return 0;
+}
+
+static int efm32_clock_event_set_oneshot(struct clock_event_device *evtdev)
+{
+	struct efm32_clock_event_ddata *ddata =
+		container_of(evtdev, struct efm32_clock_event_ddata, evtdev);
+
+	writel_relaxed(TIMERn_CMD_STOP, ddata->base + TIMERn_CMD);
+	writel_relaxed(TIMERn_CTRL_PRESC_1024 |
+		       TIMERn_CTRL_CLKSEL_PRESCHFPERCLK |
+		       TIMERn_CTRL_OSMEN |
+		       TIMERn_CTRL_MODE_DOWN,
+		       ddata->base + TIMERn_CTRL);
+	return 0;
+}
+
+static int efm32_clock_event_set_periodic(struct clock_event_device *evtdev)
+{
+	struct efm32_clock_event_ddata *ddata =
+		container_of(evtdev, struct efm32_clock_event_ddata, evtdev);
+
+	writel_relaxed(TIMERn_CMD_STOP, ddata->base + TIMERn_CMD);
+	writel_relaxed(ddata->periodic_top, ddata->base + TIMERn_TOP);
+	writel_relaxed(TIMERn_CTRL_PRESC_1024 |
+		       TIMERn_CTRL_CLKSEL_PRESCHFPERCLK |
+		       TIMERn_CTRL_MODE_DOWN,
+		       ddata->base + TIMERn_CTRL);
+	writel_relaxed(TIMERn_CMD_START, ddata->base + TIMERn_CMD);
+	return 0;
 }
 
 static int efm32_clock_event_set_next_event(unsigned long evt,
@@ -112,7 +114,9 @@ static struct efm32_clock_event_ddata clock_event_ddata = {
 	.evtdev = {
 		.name = "efm32 clockevent",
 		.features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
-		.set_mode = efm32_clock_event_set_mode,
+		.set_state_shutdown = efm32_clock_event_shutdown,
+		.set_state_periodic = efm32_clock_event_set_periodic,
+		.set_state_oneshot = efm32_clock_event_set_oneshot,
 		.set_next_event = efm32_clock_event_set_next_event,
 		.rating = 200,
 	},
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 28/41] clocksource: orion: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (26 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 27/41] clocksource: efm32: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 29/41] clocksource: atlas7: " Viresh Kumar
                   ` (12 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Jason Cooper, Andrew Lunn, Sebastian Hesselbarth,
	Gregory Clement

Migrate orion 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.

Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Cc: Gregory Clement <gregory.clement@free-electrons.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/time-orion.c | 46 +++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 20 deletions(-)

diff --git a/drivers/clocksource/time-orion.c b/drivers/clocksource/time-orion.c
index 0b3ce0399c51..0ece7427b497 100644
--- a/drivers/clocksource/time-orion.c
+++ b/drivers/clocksource/time-orion.c
@@ -60,30 +60,36 @@ static int orion_clkevt_next_event(unsigned long delta,
 	return 0;
 }
 
-static void orion_clkevt_mode(enum clock_event_mode mode,
-			      struct clock_event_device *dev)
+static int orion_clkevt_shutdown(struct clock_event_device *dev)
 {
-	if (mode == CLOCK_EVT_MODE_PERIODIC) {
-		/* setup and enable periodic timer at 1/HZ intervals */
-		writel(ticks_per_jiffy - 1, timer_base + TIMER1_RELOAD);
-		writel(ticks_per_jiffy - 1, timer_base + TIMER1_VAL);
-		atomic_io_modify(timer_base + TIMER_CTRL,
-			TIMER1_RELOAD_EN | TIMER1_EN,
-			TIMER1_RELOAD_EN | TIMER1_EN);
-	} else {
-		/* disable timer */
-		atomic_io_modify(timer_base + TIMER_CTRL,
-			TIMER1_RELOAD_EN | TIMER1_EN, 0);
-	}
+	/* disable timer */
+	atomic_io_modify(timer_base + TIMER_CTRL,
+			 TIMER1_RELOAD_EN | TIMER1_EN, 0);
+	return 0;
+}
+
+static int orion_clkevt_set_periodic(struct clock_event_device *dev)
+{
+	/* setup and enable periodic timer at 1/HZ intervals */
+	writel(ticks_per_jiffy - 1, timer_base + TIMER1_RELOAD);
+	writel(ticks_per_jiffy - 1, timer_base + TIMER1_VAL);
+	atomic_io_modify(timer_base + TIMER_CTRL,
+			 TIMER1_RELOAD_EN | TIMER1_EN,
+			 TIMER1_RELOAD_EN | TIMER1_EN);
+	return 0;
 }
 
 static struct clock_event_device orion_clkevt = {
-	.name		= "orion_event",
-	.features	= CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
-	.shift		= 32,
-	.rating		= 300,
-	.set_next_event	= orion_clkevt_next_event,
-	.set_mode	= orion_clkevt_mode,
+	.name			= "orion_event",
+	.features		= CLOCK_EVT_FEAT_ONESHOT |
+				  CLOCK_EVT_FEAT_PERIODIC,
+	.shift			= 32,
+	.rating			= 300,
+	.set_next_event		= orion_clkevt_next_event,
+	.set_state_shutdown	= orion_clkevt_shutdown,
+	.set_state_periodic	= orion_clkevt_set_periodic,
+	.set_state_oneshot	= orion_clkevt_shutdown,
+	.tick_resume		= orion_clkevt_shutdown,
 };
 
 static irqreturn_t orion_clkevt_irq_handler(int irq, void *dev_id)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 29/41] clocksource: atlas7: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (27 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 28/41] clocksource: orion: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 30/41] clocksource: atmel: " Viresh Kumar
                   ` (11 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, Barry Song

Migrate atlas7 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.

Cc: Barry Song <baohua@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-atlas7.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/drivers/clocksource/timer-atlas7.c b/drivers/clocksource/timer-atlas7.c
index 60f9de3438b0..27fa13680be1 100644
--- a/drivers/clocksource/timer-atlas7.c
+++ b/drivers/clocksource/timer-atlas7.c
@@ -76,7 +76,7 @@ static irqreturn_t sirfsoc_timer_interrupt(int irq, void *dev_id)
 	/* clear timer interrupt */
 	writel_relaxed(BIT(cpu), sirfsoc_timer_base + SIRFSOC_TIMER_INTR_STATUS);
 
-	if (ce->mode == CLOCK_EVT_MODE_ONESHOT)
+	if (clockevent_state_oneshot(ce))
 		sirfsoc_timer_count_disable(cpu);
 
 	ce->event_handler(ce);
@@ -117,18 +117,11 @@ static int sirfsoc_timer_set_next_event(unsigned long delta,
 	return 0;
 }
 
-static void sirfsoc_timer_set_mode(enum clock_event_mode mode,
-	struct clock_event_device *ce)
+/* Oneshot is enabled in set_next_event */
+static int sirfsoc_timer_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* enable in set_next_event */
-		break;
-	default:
-		break;
-	}
-
 	sirfsoc_timer_count_disable(smp_processor_id());
+	return 0;
 }
 
 static void sirfsoc_clocksource_suspend(struct clocksource *cs)
@@ -193,7 +186,9 @@ static int sirfsoc_local_timer_setup(struct clock_event_device *ce)
 	ce->name = "local_timer";
 	ce->features = CLOCK_EVT_FEAT_ONESHOT;
 	ce->rating = 200;
-	ce->set_mode = sirfsoc_timer_set_mode;
+	ce->set_state_shutdown = sirfsoc_timer_shutdown;
+	ce->set_state_oneshot = sirfsoc_timer_shutdown;
+	ce->tick_resume = sirfsoc_timer_shutdown;
 	ce->set_next_event = sirfsoc_timer_set_next_event;
 	clockevents_calc_mult_shift(ce, atlas7_timer_rate, 60);
 	ce->max_delta_ns = clockevent_delta2ns(-2, ce);
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 30/41] clocksource: atmel: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (28 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 29/41] clocksource: atlas7: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 14:28   ` Alexandre Belloni
  2015-06-18 10:54 ` [PATCH 31/41] clocksource: atmel-st: " Viresh Kumar
                   ` (10 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Nicolas Ferre, Alexandre Belloni,
	Jean-Christophe Plagniol-Villard

Migrate atmel 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.

Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-atmel-pit.c | 41 +++++++++++++++--------------------
 1 file changed, 18 insertions(+), 23 deletions(-)

diff --git a/drivers/clocksource/timer-atmel-pit.c b/drivers/clocksource/timer-atmel-pit.c
index c0304ff608b0..58753223585b 100644
--- a/drivers/clocksource/timer-atmel-pit.c
+++ b/drivers/clocksource/timer-atmel-pit.c
@@ -90,33 +90,27 @@ static cycle_t read_pit_clk(struct clocksource *cs)
 	return elapsed;
 }
 
+static int pit_clkevt_shutdown(struct clock_event_device *dev)
+{
+	struct pit_data *data = clkevt_to_pit_data(dev);
+
+	/* disable irq, leaving the clocksource active */
+	pit_write(data->base, AT91_PIT_MR, (data->cycle - 1) | AT91_PIT_PITEN);
+	return 0;
+}
+
 /*
  * Clockevent device:  interrupts every 1/HZ (== pit_cycles * MCK/16)
  */
-static void
-pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
+static int pit_clkevt_set_periodic(struct clock_event_device *dev)
 {
 	struct pit_data *data = clkevt_to_pit_data(dev);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		/* update clocksource counter */
-		data->cnt += data->cycle * PIT_PICNT(pit_read(data->base, AT91_PIT_PIVR));
-		pit_write(data->base, AT91_PIT_MR,
-			  (data->cycle - 1) | AT91_PIT_PITEN | AT91_PIT_PITIEN);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		BUG();
-		/* FALLTHROUGH */
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-		/* disable irq, leaving the clocksource active */
-		pit_write(data->base, AT91_PIT_MR,
-			  (data->cycle - 1) | AT91_PIT_PITEN);
-		break;
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+	/* update clocksource counter */
+	data->cnt += data->cycle * PIT_PICNT(pit_read(data->base, AT91_PIT_PIVR));
+	pit_write(data->base, AT91_PIT_MR,
+		  (data->cycle - 1) | AT91_PIT_PITEN | AT91_PIT_PITIEN);
+	return 0;
 }
 
 static void at91sam926x_pit_suspend(struct clock_event_device *cedev)
@@ -162,7 +156,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id)
 	WARN_ON_ONCE(!irqs_disabled());
 
 	/* The PIT interrupt may be disabled, and is shared */
-	if ((data->clkevt.mode == CLOCK_EVT_MODE_PERIODIC) &&
+	if (clockevent_state_periodic(&data->clkevt) &&
 	    (pit_read(data->base, AT91_PIT_SR) & AT91_PIT_PITS)) {
 		unsigned nr_ticks;
 
@@ -227,7 +221,8 @@ static void __init at91sam926x_pit_common_init(struct pit_data *data)
 	data->clkevt.rating = 100;
 	data->clkevt.cpumask = cpumask_of(0);
 
-	data->clkevt.set_mode = pit_clkevt_mode;
+	data->clkevt.set_state_shutdown = pit_clkevt_shutdown;
+	data->clkevt.set_state_periodic = pit_clkevt_set_periodic;
 	data->clkevt.resume = at91sam926x_pit_resume;
 	data->clkevt.suspend = at91sam926x_pit_suspend;
 	clockevents_register_device(&data->clkevt);
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 31/41] clocksource: atmel-st: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (29 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 30/41] clocksource: atmel: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 14:40   ` Alexandre Belloni
  2015-06-18 10:54 ` [PATCH 32/41] clocksource: digicolor: " Viresh Kumar
                   ` (9 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Nicolas Ferre, Alexandre Belloni,
	Jean-Christophe Plagniol-Villard

Migrate atmel-st 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.

Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-atmel-st.c | 69 ++++++++++++++++++++++--------------
 1 file changed, 42 insertions(+), 27 deletions(-)

diff --git a/drivers/clocksource/timer-atmel-st.c b/drivers/clocksource/timer-atmel-st.c
index 1692e17e096b..41b7b6dc1d0d 100644
--- a/drivers/clocksource/timer-atmel-st.c
+++ b/drivers/clocksource/timer-atmel-st.c
@@ -106,36 +106,47 @@ static struct clocksource clk32k = {
 	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
 };
 
-static void
-clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
+static void clkdev32k_disable_and_flush_irq(void)
 {
 	unsigned int val;
 
 	/* Disable and flush pending timer interrupts */
 	regmap_write(regmap_st, AT91_ST_IDR, AT91_ST_PITS | AT91_ST_ALMS);
 	regmap_read(regmap_st, AT91_ST_SR, &val);
-
 	last_crtr = read_CRTR();
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		/* PIT for periodic irqs; fixed rate of 1/HZ */
-		irqmask = AT91_ST_PITS;
-		regmap_write(regmap_st, AT91_ST_PIMR, RM9200_TIMER_LATCH);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* ALM for oneshot irqs, set by next_event()
-		 * before 32 seconds have passed
-		 */
-		irqmask = AT91_ST_ALMS;
-		regmap_write(regmap_st, AT91_ST_RTAR, last_crtr);
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_RESUME:
-		irqmask = 0;
-		break;
-	}
+}
+
+static int clkevt32k_shutdown(struct clock_event_device *evt)
+{
+	clkdev32k_disable_and_flush_irq();
+	irqmask = 0;
+	regmap_write(regmap_st, AT91_ST_IER, irqmask);
+	return 0;
+}
+
+static int clkevt32k_set_oneshot(struct clock_event_device *dev)
+{
+	clkdev32k_disable_and_flush_irq();
+
+	/*
+	 * ALM for oneshot irqs, set by next_event()
+	 * before 32 seconds have passed.
+	 */
+	irqmask = AT91_ST_ALMS;
+	regmap_write(regmap_st, AT91_ST_RTAR, last_crtr);
 	regmap_write(regmap_st, AT91_ST_IER, irqmask);
+	return 0;
+}
+
+static int clkevt32k_set_periodic(struct clock_event_device *dev)
+{
+	clkdev32k_disable_and_flush_irq();
+
+	/* PIT for periodic irqs; fixed rate of 1/HZ */
+	irqmask = AT91_ST_PITS;
+	regmap_write(regmap_st, AT91_ST_PIMR, RM9200_TIMER_LATCH);
+	regmap_write(regmap_st, AT91_ST_IER, irqmask);
+	return 0;
 }
 
 static int
@@ -170,11 +181,15 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
 }
 
 static struct clock_event_device clkevt = {
-	.name		= "at91_tick",
-	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.rating		= 150,
-	.set_next_event	= clkevt32k_next_event,
-	.set_mode	= clkevt32k_mode,
+	.name			= "at91_tick",
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.rating			= 150,
+	.set_next_event		= clkevt32k_next_event,
+	.set_state_shutdown	= clkevt32k_shutdown,
+	.set_state_periodic	= clkevt32k_set_periodic,
+	.set_state_oneshot	= clkevt32k_set_oneshot,
+	.tick_resume		= clkevt32k_shutdown,
 };
 
 /*
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 32/41] clocksource: digicolor: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (30 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 31/41] clocksource: atmel-st: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-23 10:17   ` Baruch Siach
  2015-06-18 10:54 ` [PATCH 33/41] clocksource: integrator: " Viresh Kumar
                   ` (8 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Baruch Siach

Migrate digicolor 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.

Cc: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-digicolor.c | 41 +++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/drivers/clocksource/timer-digicolor.c b/drivers/clocksource/timer-digicolor.c
index 7f8388cfa810..e73947f0f86d 100644
--- a/drivers/clocksource/timer-digicolor.c
+++ b/drivers/clocksource/timer-digicolor.c
@@ -87,27 +87,27 @@ static inline void dc_timer_set_count(struct clock_event_device *ce,
 	writel(count, dt->base + COUNT(dt->timer_id));
 }
 
-static void digicolor_clkevt_mode(enum clock_event_mode mode,
-				  struct clock_event_device *ce)
+static int digicolor_clkevt_shutdown(struct clock_event_device *ce)
+{
+	dc_timer_disable(ce);
+	return 0;
+}
+
+static int digicolor_clkevt_set_oneshot(struct clock_event_device *ce)
+{
+	dc_timer_disable(ce);
+	dc_timer_enable(ce, CONTROL_MODE_ONESHOT);
+	return 0;
+}
+
+static int digicolor_clkevt_set_periodic(struct clock_event_device *ce)
 {
 	struct digicolor_timer *dt = dc_timer(ce);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		dc_timer_disable(ce);
-		dc_timer_set_count(ce, dt->ticks_per_jiffy);
-		dc_timer_enable(ce, CONTROL_MODE_PERIODIC);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		dc_timer_disable(ce);
-		dc_timer_enable(ce, CONTROL_MODE_ONESHOT);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		dc_timer_disable(ce);
-		break;
-	}
+	dc_timer_disable(ce);
+	dc_timer_set_count(ce, dt->ticks_per_jiffy);
+	dc_timer_enable(ce, CONTROL_MODE_PERIODIC);
+	return 0;
 }
 
 static int digicolor_clkevt_next_event(unsigned long evt,
@@ -125,7 +125,10 @@ static struct digicolor_timer dc_timer_dev = {
 		.name = "digicolor_tick",
 		.rating = 340,
 		.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-		.set_mode = digicolor_clkevt_mode,
+		.set_state_shutdown = digicolor_clkevt_shutdown,
+		.set_state_periodic = digicolor_clkevt_set_periodic,
+		.set_state_oneshot = digicolor_clkevt_set_oneshot,
+		.tick_resume = digicolor_clkevt_shutdown,
 		.set_next_event = digicolor_clkevt_next_event,
 	},
 	.timer_id = TIMER_C,
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 33/41] clocksource: integrator: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (31 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 32/41] clocksource: digicolor: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-14 13:35   ` Linus Walleij
  2015-06-18 10:54 ` [PATCH 34/41] clocksource: keystone: " Viresh Kumar
                   ` (7 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Linus Walleij

Migrate integrator 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.

For oneshot mode the clkevt device was first getting disabled by
clearing TIMER_CTRL_ENABLE bits in TIMER_CTRL register, followed by
clearing TIMER_CTRL_PERIODIC bit. Both these are done with a single
write operation now.

Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-integrator-ap.c | 58 ++++++++++++++++++-------------
 1 file changed, 33 insertions(+), 25 deletions(-)

diff --git a/drivers/clocksource/timer-integrator-ap.c b/drivers/clocksource/timer-integrator-ap.c
index c97d1980c0f8..5b8fb32c1541 100644
--- a/drivers/clocksource/timer-integrator-ap.c
+++ b/drivers/clocksource/timer-integrator-ap.c
@@ -74,33 +74,37 @@ static irqreturn_t integrator_timer_interrupt(int irq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
-static void clkevt_set_mode(enum clock_event_mode mode, struct clock_event_device *evt)
+static int clkevt_shutdown(struct clock_event_device *evt)
 {
 	u32 ctrl = readl(clkevt_base + TIMER_CTRL) & ~TIMER_CTRL_ENABLE;
 
 	/* Disable timer */
 	writel(ctrl, clkevt_base + TIMER_CTRL);
+	return 0;
+}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		/* Enable the timer and start the periodic tick */
-		writel(timer_reload, clkevt_base + TIMER_LOAD);
-		ctrl |= TIMER_CTRL_PERIODIC | TIMER_CTRL_ENABLE;
-		writel(ctrl, clkevt_base + TIMER_CTRL);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* Leave the timer disabled, .set_next_event will enable it */
-		ctrl &= ~TIMER_CTRL_PERIODIC;
-		writel(ctrl, clkevt_base + TIMER_CTRL);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_RESUME:
-	default:
-		/* Just leave in disabled state */
-		break;
-	}
+static int clkevt_set_oneshot(struct clock_event_device *evt)
+{
+	u32 ctrl = readl(clkevt_base + TIMER_CTRL) &
+		   ~(TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC);
+
+	/* Leave the timer disabled, .set_next_event will enable it */
+	writel(ctrl, clkevt_base + TIMER_CTRL);
+	return 0;
+}
 
+static int clkevt_set_periodic(struct clock_event_device *evt)
+{
+	u32 ctrl = readl(clkevt_base + TIMER_CTRL) & ~TIMER_CTRL_ENABLE;
+
+	/* Disable timer */
+	writel(ctrl, clkevt_base + TIMER_CTRL);
+
+	/* Enable the timer and start the periodic tick */
+	writel(timer_reload, clkevt_base + TIMER_LOAD);
+	ctrl |= TIMER_CTRL_PERIODIC | TIMER_CTRL_ENABLE;
+	writel(ctrl, clkevt_base + TIMER_CTRL);
+	return 0;
 }
 
 static int clkevt_set_next_event(unsigned long next, struct clock_event_device *evt)
@@ -115,11 +119,15 @@ static int clkevt_set_next_event(unsigned long next, struct clock_event_device *
 }
 
 static struct clock_event_device integrator_clockevent = {
-	.name		= "timer1",
-	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode	= clkevt_set_mode,
-	.set_next_event	= clkevt_set_next_event,
-	.rating		= 300,
+	.name			= "timer1",
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.set_state_shutdown	= clkevt_shutdown,
+	.set_state_periodic	= clkevt_set_periodic,
+	.set_state_oneshot	= clkevt_set_oneshot,
+	.tick_resume		= clkevt_shutdown,
+	.set_next_event		= clkevt_set_next_event,
+	.rating			= 300,
 };
 
 static struct irqaction integrator_timer_irq = {
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 34/41] clocksource: keystone: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (32 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 33/41] clocksource: integrator: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 35/41] clocksource: prima2: " Viresh Kumar
                   ` (6 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Santosh Shilimkar

Migrate keystone 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.

Also pass the mode-mask to keystone_timer_config() instead of the mode
as mode macro's aren't valid anymore.

Cc: Santosh Shilimkar <ssantosh@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-keystone.c | 44 +++++++++++++-----------------------
 1 file changed, 16 insertions(+), 28 deletions(-)

diff --git a/drivers/clocksource/timer-keystone.c b/drivers/clocksource/timer-keystone.c
index 0250354f7e55..edacf3902e10 100644
--- a/drivers/clocksource/timer-keystone.c
+++ b/drivers/clocksource/timer-keystone.c
@@ -72,10 +72,10 @@ static inline void keystone_timer_barrier(void)
 
 /**
  * keystone_timer_config: configures timer to work in oneshot/periodic modes.
- * @ mode: mode to configure
+ * @ mask: mask of the mode to configure
  * @ period: cycles number to configure for
  */
-static int keystone_timer_config(u64 period, enum clock_event_mode mode)
+static int keystone_timer_config(u64 period, int mask)
 {
 	u32 tcr;
 	u32 off;
@@ -84,16 +84,7 @@ static int keystone_timer_config(u64 period, enum clock_event_mode mode)
 	off = tcr & ~(TCR_ENAMODE_MASK);
 
 	/* set enable mode */
-	switch (mode) {
-	case CLOCK_EVT_MODE_ONESHOT:
-		tcr |= TCR_ENAMODE_ONESHOT_MASK;
-		break;
-	case CLOCK_EVT_MODE_PERIODIC:
-		tcr |= TCR_ENAMODE_PERIODIC_MASK;
-		break;
-	default:
-		return -1;
-	}
+	tcr |= mask;
 
 	/* disable timer */
 	keystone_timer_writel(off, TCR);
@@ -138,24 +129,19 @@ static irqreturn_t keystone_timer_interrupt(int irq, void *dev_id)
 static int keystone_set_next_event(unsigned long cycles,
 				  struct clock_event_device *evt)
 {
-	return keystone_timer_config(cycles, evt->mode);
+	return keystone_timer_config(cycles, TCR_ENAMODE_ONESHOT_MASK);
 }
 
-static void keystone_set_mode(enum clock_event_mode mode,
-			     struct clock_event_device *evt)
+static int keystone_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		keystone_timer_config(timer.hz_period, CLOCK_EVT_MODE_PERIODIC);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_ONESHOT:
-		keystone_timer_disable();
-		break;
-	default:
-		break;
-	}
+	keystone_timer_disable();
+	return 0;
+}
+
+static int keystone_set_periodic(struct clock_event_device *evt)
+{
+	keystone_timer_config(timer.hz_period, TCR_ENAMODE_PERIODIC_MASK);
+	return 0;
 }
 
 static void __init keystone_timer_init(struct device_node *np)
@@ -222,7 +208,9 @@ static void __init keystone_timer_init(struct device_node *np)
 	/* setup clockevent */
 	event_dev->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
 	event_dev->set_next_event = keystone_set_next_event;
-	event_dev->set_mode = keystone_set_mode;
+	event_dev->set_state_shutdown = keystone_shutdown;
+	event_dev->set_state_periodic = keystone_set_periodic;
+	event_dev->set_state_oneshot = keystone_shutdown;
 	event_dev->cpumask = cpu_all_mask;
 	event_dev->owner = THIS_MODULE;
 	event_dev->name = TIMER_NAME;
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 35/41] clocksource: prima2: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (33 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 34/41] clocksource: keystone: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 36/41] clocksource: stm32: " Viresh Kumar
                   ` (5 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, Barry Song

Migrate prima2 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.

Cc: Barry Song <baohua@kernel.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-prima2.c | 34 +++++++++++++++-------------------
 1 file changed, 15 insertions(+), 19 deletions(-)

diff --git a/drivers/clocksource/timer-prima2.c b/drivers/clocksource/timer-prima2.c
index ce18d570e1cd..78de982cc640 100644
--- a/drivers/clocksource/timer-prima2.c
+++ b/drivers/clocksource/timer-prima2.c
@@ -104,26 +104,21 @@ static int sirfsoc_timer_set_next_event(unsigned long delta,
 	return next - now > delta ? -ETIME : 0;
 }
 
-static void sirfsoc_timer_set_mode(enum clock_event_mode mode,
-	struct clock_event_device *ce)
+static int sirfsoc_timer_shutdown(struct clock_event_device *evt)
 {
 	u32 val = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		WARN_ON(1);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		writel_relaxed(val | BIT(0),
-			sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		writel_relaxed(val & ~BIT(0),
-			sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+
+	writel_relaxed(val & ~BIT(0),
+		       sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
+	return 0;
+}
+
+static int sirfsoc_timer_set_oneshot(struct clock_event_device *evt)
+{
+	u32 val = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
+
+	writel_relaxed(val | BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN);
+	return 0;
 }
 
 static void sirfsoc_clocksource_suspend(struct clocksource *cs)
@@ -157,7 +152,8 @@ static struct clock_event_device sirfsoc_clockevent = {
 	.name = "sirfsoc_clockevent",
 	.rating = 200,
 	.features = CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode = sirfsoc_timer_set_mode,
+	.set_state_shutdown = sirfsoc_timer_shutdown,
+	.set_state_oneshot = sirfsoc_timer_set_oneshot,
 	.set_next_event = sirfsoc_timer_set_next_event,
 };
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 36/41] clocksource: stm32: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (34 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 35/41] clocksource: prima2: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 11:09   ` Maxime Coquelin
  2015-06-18 10:54 ` [PATCH 37/41] clocksource: sun5i: " Viresh Kumar
                   ` (4 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Maxime Coquelin

Migrate stm32 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.

Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-stm32.c | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/drivers/clocksource/timer-stm32.c b/drivers/clocksource/timer-stm32.c
index a97e8b50701c..f3dcb76799b4 100644
--- a/drivers/clocksource/timer-stm32.c
+++ b/drivers/clocksource/timer-stm32.c
@@ -40,24 +40,25 @@ struct stm32_clock_event_ddata {
 	void __iomem *base;
 };
 
-static void stm32_clock_event_set_mode(enum clock_event_mode mode,
-				       struct clock_event_device *evtdev)
+static int stm32_clock_event_shutdown(struct clock_event_device *evtdev)
 {
 	struct stm32_clock_event_ddata *data =
 		container_of(evtdev, struct stm32_clock_event_ddata, evtdev);
 	void *base = data->base;
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		writel_relaxed(data->periodic_top, base + TIM_ARR);
-		writel_relaxed(TIM_CR1_ARPE | TIM_CR1_CEN, base + TIM_CR1);
-		break;
+	writel_relaxed(0, base + TIM_CR1);
+	return 0;
+}
 
-	case CLOCK_EVT_MODE_ONESHOT:
-	default:
-		writel_relaxed(0, base + TIM_CR1);
-		break;
-	}
+static int stm32_clock_event_set_periodic(struct clock_event_device *evtdev)
+{
+	struct stm32_clock_event_ddata *data =
+		container_of(evtdev, struct stm32_clock_event_ddata, evtdev);
+	void *base = data->base;
+
+	writel_relaxed(data->periodic_top, base + TIM_ARR);
+	writel_relaxed(TIM_CR1_ARPE | TIM_CR1_CEN, base + TIM_CR1);
+	return 0;
 }
 
 static int stm32_clock_event_set_next_event(unsigned long evt,
@@ -88,7 +89,10 @@ static struct stm32_clock_event_ddata clock_event_ddata = {
 	.evtdev = {
 		.name = "stm32 clockevent",
 		.features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
-		.set_mode = stm32_clock_event_set_mode,
+		.set_state_shutdown = stm32_clock_event_shutdown,
+		.set_state_periodic = stm32_clock_event_set_periodic,
+		.set_state_oneshot = stm32_clock_event_shutdown,
+		.tick_resume = stm32_clock_event_shutdown,
 		.set_next_event = stm32_clock_event_set_next_event,
 		.rating = 200,
 	},
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 37/41] clocksource: sun5i: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (35 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 36/41] clocksource: stm32: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 38/41] clocksource: u300: " Viresh Kumar
                   ` (3 subsequent siblings)
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Maxime Ripard

Migrate sun5i 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.

Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-sun5i.c | 45 ++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 19 deletions(-)

diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c
index 0ffb4ea7c925..bca9573e036a 100644
--- a/drivers/clocksource/timer-sun5i.c
+++ b/drivers/clocksource/timer-sun5i.c
@@ -103,27 +103,31 @@ static void sun5i_clkevt_time_start(struct sun5i_timer_clkevt *ce, u8 timer, boo
 	       ce->timer.base + TIMER_CTL_REG(timer));
 }
 
-static void sun5i_clkevt_mode(enum clock_event_mode mode,
-			      struct clock_event_device *clkevt)
+static int sun5i_clkevt_shutdown(struct clock_event_device *clkevt)
 {
 	struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		sun5i_clkevt_time_stop(ce, 0);
-		sun5i_clkevt_time_setup(ce, 0, ce->timer.ticks_per_jiffy);
-		sun5i_clkevt_time_start(ce, 0, true);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		sun5i_clkevt_time_stop(ce, 0);
-		sun5i_clkevt_time_start(ce, 0, false);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	default:
-		sun5i_clkevt_time_stop(ce, 0);
-		break;
-	}
+	sun5i_clkevt_time_stop(ce, 0);
+	return 0;
+}
+
+static int sun5i_clkevt_set_oneshot(struct clock_event_device *clkevt)
+{
+	struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt);
+
+	sun5i_clkevt_time_stop(ce, 0);
+	sun5i_clkevt_time_start(ce, 0, false);
+	return 0;
+}
+
+static int sun5i_clkevt_set_periodic(struct clock_event_device *clkevt)
+{
+	struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt);
+
+	sun5i_clkevt_time_stop(ce, 0);
+	sun5i_clkevt_time_setup(ce, 0, ce->timer.ticks_per_jiffy);
+	sun5i_clkevt_time_start(ce, 0, true);
+	return 0;
 }
 
 static int sun5i_clkevt_next_event(unsigned long evt,
@@ -286,7 +290,10 @@ static int __init sun5i_setup_clockevent(struct device_node *node, void __iomem
 	ce->clkevt.name = node->name;
 	ce->clkevt.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
 	ce->clkevt.set_next_event = sun5i_clkevt_next_event;
-	ce->clkevt.set_mode = sun5i_clkevt_mode;
+	ce->clkevt.set_state_shutdown = sun5i_clkevt_shutdown;
+	ce->clkevt.set_state_periodic = sun5i_clkevt_set_periodic;
+	ce->clkevt.set_state_oneshot = sun5i_clkevt_set_oneshot;
+	ce->clkevt.tick_resume = sun5i_clkevt_shutdown;
 	ce->clkevt.rating = 340;
 	ce->clkevt.irq = irq;
 	ce->clkevt.cpumask = cpu_possible_mask;
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 38/41] clocksource: u300: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (36 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 37/41] clocksource: sun5i: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-14 13:36   ` Linus Walleij
  2015-06-18 10:54 ` [PATCH 39/41] clocksource: vf_pit: " Viresh Kumar
                   ` (2 subsequent siblings)
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Linus Walleij

Migrate u300 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.

Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/timer-u300.c | 155 +++++++++++++++++++--------------------
 1 file changed, 77 insertions(+), 78 deletions(-)

diff --git a/drivers/clocksource/timer-u300.c b/drivers/clocksource/timer-u300.c
index 5dcf756970e7..1744b243898a 100644
--- a/drivers/clocksource/timer-u300.c
+++ b/drivers/clocksource/timer-u300.c
@@ -187,85 +187,82 @@ struct u300_clockevent_data {
 	unsigned ticks_per_jiffy;
 };
 
+static int u300_shutdown(struct clock_event_device *evt)
+{
+	/* Disable interrupts on GP1 */
+	writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
+	       u300_timer_base + U300_TIMER_APP_GPT1IE);
+	/* Disable GP1 */
+	writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
+	       u300_timer_base + U300_TIMER_APP_DGPT1);
+	return 0;
+}
+
 /*
- * The u300_set_mode() function is always called first, if we
- * have oneshot timer active, the oneshot scheduling function
+ * If we have oneshot timer active, the oneshot scheduling function
  * u300_set_next_event() is called immediately after.
  */
-static void u300_set_mode(enum clock_event_mode mode,
-			  struct clock_event_device *evt)
+static int u300_set_oneshot(struct clock_event_device *evt)
+{
+	/* Just return; here? */
+	/*
+	 * The actual event will be programmed by the next event hook,
+	 * so we just set a dummy value somewhere at the end of the
+	 * universe here.
+	 */
+	/* Disable interrupts on GPT1 */
+	writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
+	       u300_timer_base + U300_TIMER_APP_GPT1IE);
+	/* Disable GP1 while we're reprogramming it. */
+	writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
+	       u300_timer_base + U300_TIMER_APP_DGPT1);
+	/*
+	 * Expire far in the future, u300_set_next_event() will be
+	 * called soon...
+	 */
+	writel(0xFFFFFFFF, u300_timer_base + U300_TIMER_APP_GPT1TC);
+	/* We run one shot per tick here! */
+	writel(U300_TIMER_APP_SGPT1M_MODE_ONE_SHOT,
+	       u300_timer_base + U300_TIMER_APP_SGPT1M);
+	/* Enable interrupts for this timer */
+	writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE,
+	       u300_timer_base + U300_TIMER_APP_GPT1IE);
+	/* Enable timer */
+	writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE,
+	       u300_timer_base + U300_TIMER_APP_EGPT1);
+	return 0;
+}
+
+static int u300_set_periodic(struct clock_event_device *evt)
 {
 	struct u300_clockevent_data *cevdata =
 		container_of(evt, struct u300_clockevent_data, cevd);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		/* Disable interrupts on GPT1 */
-		writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
-		       u300_timer_base + U300_TIMER_APP_GPT1IE);
-		/* Disable GP1 while we're reprogramming it. */
-		writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
-		       u300_timer_base + U300_TIMER_APP_DGPT1);
-		/*
-		 * Set the periodic mode to a certain number of ticks per
-		 * jiffy.
-		 */
-		writel(cevdata->ticks_per_jiffy,
-		       u300_timer_base + U300_TIMER_APP_GPT1TC);
-		/*
-		 * Set continuous mode, so the timer keeps triggering
-		 * interrupts.
-		 */
-		writel(U300_TIMER_APP_SGPT1M_MODE_CONTINUOUS,
-		       u300_timer_base + U300_TIMER_APP_SGPT1M);
-		/* Enable timer interrupts */
-		writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE,
-		       u300_timer_base + U300_TIMER_APP_GPT1IE);
-		/* Then enable the OS timer again */
-		writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE,
-		       u300_timer_base + U300_TIMER_APP_EGPT1);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* Just break; here? */
-		/*
-		 * The actual event will be programmed by the next event hook,
-		 * so we just set a dummy value somewhere at the end of the
-		 * universe here.
-		 */
-		/* Disable interrupts on GPT1 */
-		writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
-		       u300_timer_base + U300_TIMER_APP_GPT1IE);
-		/* Disable GP1 while we're reprogramming it. */
-		writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
-		       u300_timer_base + U300_TIMER_APP_DGPT1);
-		/*
-		 * Expire far in the future, u300_set_next_event() will be
-		 * called soon...
-		 */
-		writel(0xFFFFFFFF, u300_timer_base + U300_TIMER_APP_GPT1TC);
-		/* We run one shot per tick here! */
-		writel(U300_TIMER_APP_SGPT1M_MODE_ONE_SHOT,
-		       u300_timer_base + U300_TIMER_APP_SGPT1M);
-		/* Enable interrupts for this timer */
-		writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE,
-		       u300_timer_base + U300_TIMER_APP_GPT1IE);
-		/* Enable timer */
-		writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE,
-		       u300_timer_base + U300_TIMER_APP_EGPT1);
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		/* Disable interrupts on GP1 */
-		writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
-		       u300_timer_base + U300_TIMER_APP_GPT1IE);
-		/* Disable GP1 */
-		writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
-		       u300_timer_base + U300_TIMER_APP_DGPT1);
-		break;
-	case CLOCK_EVT_MODE_RESUME:
-		/* Ignore this call */
-		break;
-	}
+	/* Disable interrupts on GPT1 */
+	writel(U300_TIMER_APP_GPT1IE_IRQ_DISABLE,
+	       u300_timer_base + U300_TIMER_APP_GPT1IE);
+	/* Disable GP1 while we're reprogramming it. */
+	writel(U300_TIMER_APP_DGPT1_TIMER_DISABLE,
+	       u300_timer_base + U300_TIMER_APP_DGPT1);
+	/*
+	 * Set the periodic mode to a certain number of ticks per
+	 * jiffy.
+	 */
+	writel(cevdata->ticks_per_jiffy,
+	       u300_timer_base + U300_TIMER_APP_GPT1TC);
+	/*
+	 * Set continuous mode, so the timer keeps triggering
+	 * interrupts.
+	 */
+	writel(U300_TIMER_APP_SGPT1M_MODE_CONTINUOUS,
+	       u300_timer_base + U300_TIMER_APP_SGPT1M);
+	/* Enable timer interrupts */
+	writel(U300_TIMER_APP_GPT1IE_IRQ_ENABLE,
+	       u300_timer_base + U300_TIMER_APP_GPT1IE);
+	/* Then enable the OS timer again */
+	writel(U300_TIMER_APP_EGPT1_TIMER_ENABLE,
+	       u300_timer_base + U300_TIMER_APP_EGPT1);
+	return 0;
 }
 
 /*
@@ -309,13 +306,15 @@ static int u300_set_next_event(unsigned long cycles,
 static struct u300_clockevent_data u300_clockevent_data = {
 	/* Use general purpose timer 1 as clock event */
 	.cevd = {
-		.name		= "GPT1",
+		.name			= "GPT1",
 		/* Reasonably fast and accurate clock event */
-		.rating		= 300,
-		.features	= CLOCK_EVT_FEAT_PERIODIC |
-			CLOCK_EVT_FEAT_ONESHOT,
-		.set_next_event	= u300_set_next_event,
-		.set_mode	= u300_set_mode,
+		.rating			= 300,
+		.features		= CLOCK_EVT_FEAT_PERIODIC |
+					  CLOCK_EVT_FEAT_ONESHOT,
+		.set_next_event		= u300_set_next_event,
+		.set_state_shutdown	= u300_shutdown,
+		.set_state_periodic	= u300_set_periodic,
+		.set_state_oneshot	= u300_set_oneshot,
 	},
 };
 
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 39/41] clocksource: vf_pit: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (37 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 38/41] clocksource: u300: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-03  8:10   ` Stefan Agner
  2015-06-18 10:54 ` [PATCH 40/41] clocksource: vt8500: " Viresh Kumar
  2015-06-18 10:54 ` [PATCH 41/41] clocksource: zevio: " Viresh Kumar
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar,
	Jingchang Lu, Stefan Agner, Shawn Guo

Migrate vf_pit 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.

Cc: Jingchang Lu <b35083@freescale.com>
Cc: Stefan Agner <stefan@agner.ch>
Cc: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/vf_pit_timer.c | 27 ++++++++++++---------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/drivers/clocksource/vf_pit_timer.c b/drivers/clocksource/vf_pit_timer.c
index b45ac6229b57..f07ba9932171 100644
--- a/drivers/clocksource/vf_pit_timer.c
+++ b/drivers/clocksource/vf_pit_timer.c
@@ -86,20 +86,16 @@ static int pit_set_next_event(unsigned long delta,
 	return 0;
 }
 
-static void pit_set_mode(enum clock_event_mode mode,
-				struct clock_event_device *evt)
+static int pit_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		pit_set_next_event(cycle_per_jiffy, evt);
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-		pit_timer_disable();
-		break;
-	default:
-		break;
-	}
+	pit_timer_disable();
+	return 0;
+}
+
+static int pit_set_periodic(struct clock_event_device *evt)
+{
+	pit_set_next_event(cycle_per_jiffy, evt);
+	return 0;
 }
 
 static irqreturn_t pit_timer_interrupt(int irq, void *dev_id)
@@ -114,7 +110,7 @@ static irqreturn_t pit_timer_interrupt(int irq, void *dev_id)
 	 * and start the counter again. So software need to disable the timer
 	 * to stop the counter loop in ONESHOT mode.
 	 */
-	if (likely(evt->mode == CLOCK_EVT_MODE_ONESHOT))
+	if (likely(clockevent_state_oneshot(evt)))
 		pit_timer_disable();
 
 	evt->event_handler(evt);
@@ -125,7 +121,8 @@ static irqreturn_t pit_timer_interrupt(int irq, void *dev_id)
 static struct clock_event_device clockevent_pit = {
 	.name		= "VF pit timer",
 	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_mode	= pit_set_mode,
+	.set_state_shutdown = pit_shutdown,
+	.set_state_periodic = pit_set_periodic,
 	.set_next_event	= pit_set_next_event,
 	.rating		= 300,
 };
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 40/41] clocksource: vt8500: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (38 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 39/41] clocksource: vf_pit: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-06-18 10:54 ` [PATCH 41/41] clocksource: zevio: " Viresh Kumar
  40 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, Tony Prisk

Migrate vt8500 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.

Cc: Tony Prisk <linux@prisktech.co.nz>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/vt8500_timer.c | 29 ++++++++++-------------------
 1 file changed, 10 insertions(+), 19 deletions(-)

diff --git a/drivers/clocksource/vt8500_timer.c b/drivers/clocksource/vt8500_timer.c
index 1098ed3b9b89..a92e94b40b5b 100644
--- a/drivers/clocksource/vt8500_timer.c
+++ b/drivers/clocksource/vt8500_timer.c
@@ -88,29 +88,20 @@ static int vt8500_timer_set_next_event(unsigned long cycles,
 	return 0;
 }
 
-static void vt8500_timer_set_mode(enum clock_event_mode mode,
-			      struct clock_event_device *evt)
+static int vt8500_shutdown(struct clock_event_device *evt)
 {
-	switch (mode) {
-	case CLOCK_EVT_MODE_RESUME:
-	case CLOCK_EVT_MODE_PERIODIC:
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-		writel(readl(regbase + TIMER_CTRL_VAL) | 1,
-			regbase + TIMER_CTRL_VAL);
-		writel(0, regbase + TIMER_IER_VAL);
-		break;
-	}
+	writel(readl(regbase + TIMER_CTRL_VAL) | 1, regbase + TIMER_CTRL_VAL);
+	writel(0, regbase + TIMER_IER_VAL);
+	return 0;
 }
 
 static struct clock_event_device clockevent = {
-	.name           = "vt8500_timer",
-	.features       = CLOCK_EVT_FEAT_ONESHOT,
-	.rating         = 200,
-	.set_next_event = vt8500_timer_set_next_event,
-	.set_mode       = vt8500_timer_set_mode,
+	.name			= "vt8500_timer",
+	.features		= CLOCK_EVT_FEAT_ONESHOT,
+	.rating			= 200,
+	.set_next_event		= vt8500_timer_set_next_event,
+	.set_state_shutdown	= vt8500_shutdown,
+	.set_state_oneshot	= vt8500_shutdown,
 };
 
 static irqreturn_t vt8500_timer_interrupt(int irq, void *dev_id)
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* [PATCH 41/41] clocksource: zevio: Migrate to new 'set-state' interface
       [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
                   ` (39 preceding siblings ...)
  2015-06-18 10:54 ` [PATCH 40/41] clocksource: vt8500: " Viresh Kumar
@ 2015-06-18 10:54 ` Viresh Kumar
  2015-07-02 20:11   ` Daniel Lezcano
  40 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 10:54 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Viresh Kumar, Daniel Tang

Migrate zevio 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.

Cc: Daniel Tang <dt.tangr@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/zevio-timer.c | 44 +++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 23 deletions(-)

diff --git a/drivers/clocksource/zevio-timer.c b/drivers/clocksource/zevio-timer.c
index 7ce442148c3f..ceaa6133f9c2 100644
--- a/drivers/clocksource/zevio-timer.c
+++ b/drivers/clocksource/zevio-timer.c
@@ -76,32 +76,28 @@ static int zevio_timer_set_event(unsigned long delta,
 	return 0;
 }
 
-static void zevio_timer_set_mode(enum clock_event_mode mode,
-				 struct clock_event_device *dev)
+static int zevio_timer_shutdown(struct clock_event_device *dev)
 {
 	struct zevio_timer *timer = container_of(dev, struct zevio_timer,
 						 clkevt);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_RESUME:
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* Enable timer interrupts */
-		writel(TIMER_INTR_MSK, timer->interrupt_regs + IO_INTR_MSK);
-		writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
-		break;
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_UNUSED:
-		/* Disable timer interrupts */
-		writel(0, timer->interrupt_regs + IO_INTR_MSK);
-		writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
-		/* Stop timer */
-		writel(CNTL_STOP_TIMER, timer->timer1 + IO_CONTROL);
-		break;
-	case CLOCK_EVT_MODE_PERIODIC:
-	default:
-		/* Unsupported */
-		break;
-	}
+	/* Disable timer interrupts */
+	writel(0, timer->interrupt_regs + IO_INTR_MSK);
+	writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
+	/* Stop timer */
+	writel(CNTL_STOP_TIMER, timer->timer1 + IO_CONTROL);
+	return 0;
+}
+
+static int zevio_timer_set_oneshot(struct clock_event_device *dev)
+{
+	struct zevio_timer *timer = container_of(dev, struct zevio_timer,
+						 clkevt);
+
+	/* Enable timer interrupts */
+	writel(TIMER_INTR_MSK, timer->interrupt_regs + IO_INTR_MSK);
+	writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
+	return 0;
 }
 
 static irqreturn_t zevio_timer_interrupt(int irq, void *dev_id)
@@ -162,7 +158,9 @@ static int __init zevio_timer_add(struct device_node *node)
 	if (timer->interrupt_regs && irqnr) {
 		timer->clkevt.name		= timer->clockevent_name;
 		timer->clkevt.set_next_event	= zevio_timer_set_event;
-		timer->clkevt.set_mode		= zevio_timer_set_mode;
+		timer->clkevt.set_state_shutdown = zevio_timer_shutdown;
+		timer->clkevt.set_state_oneshot = zevio_timer_set_oneshot;
+		timer->clkevt.tick_resume	= zevio_timer_set_oneshot;
 		timer->clkevt.rating		= 200;
 		timer->clkevt.cpumask		= cpu_all_mask;
 		timer->clkevt.features		= CLOCK_EVT_FEAT_ONESHOT;
-- 
2.4.0


^ permalink raw reply related	[flat|nested] 85+ messages in thread

* Re: [PATCH 36/41] clocksource: stm32: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 36/41] clocksource: stm32: " Viresh Kumar
@ 2015-06-18 11:09   ` Maxime Coquelin
  2015-06-18 11:32     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Maxime Coquelin @ 2015-06-18 11:09 UTC (permalink / raw)
  To: Viresh Kumar, Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel

Hi Viresh,

On 06/18/2015 12:54 PM, Viresh Kumar wrote:
> Migrate stm32 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.
>
> Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
>   drivers/clocksource/timer-stm32.c | 30 +++++++++++++++++-------------
>   1 file changed, 17 insertions(+), 13 deletions(-)
>
>

Thanks for having implemented the move to the new interface.
I just tested it, and confirm it works fine on my STM32 board.
You can add:

Tested-by: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Acked-by: Maxime Coquelin <mcoquelin.stm32@gmail.com>

Regards,
Maxime

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 36/41] clocksource: stm32: Migrate to new 'set-state' interface
  2015-06-18 11:09   ` Maxime Coquelin
@ 2015-06-18 11:32     ` Viresh Kumar
  0 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 11:32 UTC (permalink / raw)
  To: Maxime Coquelin
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel

On 18-06-15, 13:09, Maxime Coquelin wrote:
> Thanks for having implemented the move to the new interface.
> I just tested it, and confirm it works fine on my STM32 board.
> You can add:
> 
> Tested-by: Maxime Coquelin <mcoquelin.stm32@gmail.com>
> Acked-by: Maxime Coquelin <mcoquelin.stm32@gmail.com>

Oh, that was so quick. Thanks a lot.

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 23/41] clocksource: sun4i: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 23/41] clocksource: sun4i: " Viresh Kumar
@ 2015-06-18 12:01   ` Maxime Ripard
  2015-06-18 12:23     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Maxime Ripard @ 2015-06-18 12:01 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 2790 bytes --]

On Thu, Jun 18, 2015 at 04:24:37PM +0530, Viresh Kumar wrote:
> Migrate sun4i 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.
> 
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
>  drivers/clocksource/sun4i_timer.c | 41 +++++++++++++++++++++------------------
>  1 file changed, 22 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/clocksource/sun4i_timer.c b/drivers/clocksource/sun4i_timer.c
> index 1928a8912584..6f3719d73390 100644
> --- a/drivers/clocksource/sun4i_timer.c
> +++ b/drivers/clocksource/sun4i_timer.c
> @@ -81,25 +81,25 @@ static void sun4i_clkevt_time_start(u8 timer, bool periodic)
>  	       timer_base + TIMER_CTL_REG(timer));
>  }
>  
> -static void sun4i_clkevt_mode(enum clock_event_mode mode,
> -			      struct clock_event_device *clk)
> +static int sun4i_clkevt_shutdown(struct clock_event_device *evt)
>  {
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		sun4i_clkevt_time_stop(0);
> -		sun4i_clkevt_time_setup(0, ticks_per_jiffy);
> -		sun4i_clkevt_time_start(0, true);
> -		break;
> -	case CLOCK_EVT_MODE_ONESHOT:
> -		sun4i_clkevt_time_stop(0);
> -		sun4i_clkevt_time_start(0, false);
> -		break;
> -	case CLOCK_EVT_MODE_UNUSED:
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	default:
> -		sun4i_clkevt_time_stop(0);
> -		break;
> -	}
> +	sun4i_clkevt_time_stop(0);
> +	return 0;
> +}
> +
> +static int sun4i_clkevt_set_oneshot(struct clock_event_device *evt)
> +{
> +	sun4i_clkevt_time_stop(0);
> +	sun4i_clkevt_time_start(0, false);
> +	return 0;
> +}
> +
> +static int sun4i_clkevt_set_periodic(struct clock_event_device *evt)
> +{
> +	sun4i_clkevt_time_stop(0);
> +	sun4i_clkevt_time_setup(0, ticks_per_jiffy);
> +	sun4i_clkevt_time_start(0, true);
> +	return 0;
>  }
>  
>  static int sun4i_clkevt_next_event(unsigned long evt,
> @@ -116,7 +116,10 @@ static struct clock_event_device sun4i_clockevent = {
>  	.name = "sun4i_tick",
>  	.rating = 350,
>  	.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> -	.set_mode = sun4i_clkevt_mode,
> +	.set_state_shutdown = sun4i_clkevt_shutdown,
> +	.set_state_periodic = sun4i_clkevt_set_periodic,
> +	.set_state_oneshot = sun4i_clkevt_set_oneshot,
> +	.tick_resume = sun4i_clkevt_shutdown,

I'm not exactly sure of the context here, but I wouldn't expect a
callback called tick_resume to stop a timer. Is this expected?

Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 23/41] clocksource: sun4i: Migrate to new 'set-state' interface
  2015-06-18 12:01   ` Maxime Ripard
@ 2015-06-18 12:23     ` Viresh Kumar
  2015-06-19 10:30       ` Maxime Ripard
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-18 12:23 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel

On 18-06-15, 14:01, Maxime Ripard wrote:
> On Thu, Jun 18, 2015 at 04:24:37PM +0530, Viresh Kumar wrote:
> > +static int sun4i_clkevt_shutdown(struct clock_event_device *evt)
> >  {
> > -	switch (mode) {
> > -	case CLOCK_EVT_MODE_PERIODIC:
> > -		sun4i_clkevt_time_stop(0);
> > -		sun4i_clkevt_time_setup(0, ticks_per_jiffy);
> > -		sun4i_clkevt_time_start(0, true);
> > -		break;
> > -	case CLOCK_EVT_MODE_ONESHOT:
> > -		sun4i_clkevt_time_stop(0);
> > -		sun4i_clkevt_time_start(0, false);
> > -		break;
> > -	case CLOCK_EVT_MODE_UNUSED:
> > -	case CLOCK_EVT_MODE_SHUTDOWN:
> > -	default:
> > -		sun4i_clkevt_time_stop(0);
> > -		break;

Because sun4i_clkevt_time_stop() is getting called in default case, it
is getting called for tick-resume mode already with the old set_mode
interface.

> > +	.tick_resume = sun4i_clkevt_shutdown,
> 
> I'm not exactly sure of the context here, but I wouldn't expect a
> callback called tick_resume to stop a timer. Is this expected?

And so this patch carried the same logic here.

At suspend: clockevents core calls ->set_state_shutdown() and at
resume it calls ->tick_resume() followed by setting to the proper
mode, i.e. periodic or oneshot.

Many driver authors didn't knew about these details and so did
shutdown in resume path as well.

For me, you might not even need a tick_resume() at all, as your driver
would have already shutted down on suspend and is just required to be
put to the right mode again.

But, I didn't wanted to change the way things behaved until now. I can
add another patch to get things fixed separately if you want me to.

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 21/41] clocksource: sh_mtu2: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 21/41] clocksource: sh_mtu2: " Viresh Kumar
@ 2015-06-18 13:10   ` Laurent Pinchart
  0 siblings, 0 replies; 85+ messages in thread
From: Laurent Pinchart @ 2015-06-18 13:10 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Magnus Damm, Laurent Pinchart, Paul Mundt

Hi Viresh,

Thank you for the patch.

On Thursday 18 June 2015 16:24:35 Viresh Kumar wrote:
> Migrate sh_mtu2 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.
> 
> Cc: Magnus Damm <damm+renesas@opensource.se>
> Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Cc: Paul Mundt <lethal@linux-sh.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Acked-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

> ---
>  drivers/clocksource/sh_mtu2.c | 42 ++++++++++++++------------------------
>  1 file changed, 16 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/clocksource/sh_mtu2.c b/drivers/clocksource/sh_mtu2.c
> index 3d88698cf2b8..f1985da8113f 100644
> --- a/drivers/clocksource/sh_mtu2.c
> +++ b/drivers/clocksource/sh_mtu2.c
> @@ -276,36 +276,25 @@ static struct sh_mtu2_channel *ced_to_sh_mtu2(struct
> clock_event_device *ced) return container_of(ced, struct sh_mtu2_channel,
> ced);
>  }
> 
> -static void sh_mtu2_clock_event_mode(enum clock_event_mode mode,
> -				    struct clock_event_device *ced)
> +static int sh_mtu2_clock_event_shutdown(struct clock_event_device *ced)
>  {
>  	struct sh_mtu2_channel *ch = ced_to_sh_mtu2(ced);
> -	int disabled = 0;
> 
> -	/* deal with old setting first */
> -	switch (ced->mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> +	sh_mtu2_disable(ch);
> +	return 0;
> +}
> +
> +static int sh_mtu2_clock_event_set_periodic(struct clock_event_device *ced)
> +{
> +	struct sh_mtu2_channel *ch = ced_to_sh_mtu2(ced);
> +
> +	if (clockevent_state_periodic(ced))
>  		sh_mtu2_disable(ch);
> -		disabled = 1;
> -		break;
> -	default:
> -		break;
> -	}
> 
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		dev_info(&ch->mtu->pdev->dev,
> -			 "ch%u: used for periodic clock events\n", ch->index);
> -		sh_mtu2_enable(ch);
> -		break;
> -	case CLOCK_EVT_MODE_UNUSED:
> -		if (!disabled)
> -			sh_mtu2_disable(ch);
> -		break;
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	default:
> -		break;
> -	}
> +	dev_info(&ch->mtu->pdev->dev, "ch%u: used for periodic clock events\n",
> +		 ch->index);
> +	sh_mtu2_enable(ch);
> +	return 0;
>  }
> 
>  static void sh_mtu2_clock_event_suspend(struct clock_event_device *ced)
> @@ -327,7 +316,8 @@ static void sh_mtu2_register_clockevent(struct
> sh_mtu2_channel *ch, ced->features = CLOCK_EVT_FEAT_PERIODIC;
>  	ced->rating = 200;
>  	ced->cpumask = cpu_possible_mask;
> -	ced->set_mode = sh_mtu2_clock_event_mode;
> +	ced->set_state_shutdown = sh_mtu2_clock_event_shutdown;
> +	ced->set_state_periodic = sh_mtu2_clock_event_set_periodic;
>  	ced->suspend = sh_mtu2_clock_event_suspend;
>  	ced->resume = sh_mtu2_clock_event_resume;

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 20/41] clocksource: sh_cmt: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 20/41] clocksource: sh_cmt: " Viresh Kumar
@ 2015-06-18 13:10   ` Laurent Pinchart
  0 siblings, 0 replies; 85+ messages in thread
From: Laurent Pinchart @ 2015-06-18 13:10 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Magnus Damm, Laurent Pinchart, Paul Mundt

Hi Viresh,

Thank you for the patch.

On Thursday 18 June 2015 16:24:34 Viresh Kumar wrote:
> Migrate sh_cmt 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.
> 
> Cc: Magnus Damm <damm+renesas@opensource.se>
> Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Cc: Paul Mundt <lethal@linux-sh.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Acked-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

> ---
>  drivers/clocksource/sh_cmt.c | 62 ++++++++++++++++++++--------------------
>  1 file changed, 31 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c
> index b8ff3c64cc45..855f42a2c64b 100644
> --- a/drivers/clocksource/sh_cmt.c
> +++ b/drivers/clocksource/sh_cmt.c
> @@ -538,7 +538,7 @@ static irqreturn_t sh_cmt_interrupt(int irq, void
> *dev_id)
> 
>  	if (ch->flags & FLAG_CLOCKEVENT) {
>  		if (!(ch->flags & FLAG_SKIPEVENT)) {
> -			if (ch->ced.mode == CLOCK_EVT_MODE_ONESHOT) {
> +			if (clockevent_state_oneshot(&ch->ced)) {
>  				ch->next_match_value = ch->max_match_value;
>  				ch->flags |= FLAG_REPROGRAM;
>  			}
> @@ -554,7 +554,7 @@ static irqreturn_t sh_cmt_interrupt(int irq, void
> *dev_id) sh_cmt_clock_event_program_verify(ch, 1);
> 
>  		if (ch->flags & FLAG_CLOCKEVENT)
> -			if ((ch->ced.mode == CLOCK_EVT_MODE_SHUTDOWN)
> +			if ((clockevent_state_shutdown(&ch->ced))
> 
>  			    || (ch->match_value == ch->next_match_value))
> 
>  				ch->flags &= ~FLAG_REPROGRAM;
>  	}
> @@ -720,39 +720,37 @@ static void sh_cmt_clock_event_start(struct
> sh_cmt_channel *ch, int periodic) sh_cmt_set_next(ch, ch->max_match_value);
>  }
> 
> -static void sh_cmt_clock_event_mode(enum clock_event_mode mode,
> -				    struct clock_event_device *ced)
> +static int sh_cmt_clock_event_shutdown(struct clock_event_device *ced)
> +{
> +	struct sh_cmt_channel *ch = ced_to_sh_cmt(ced);
> +
> +	sh_cmt_stop(ch, FLAG_CLOCKEVENT);
> +	return 0;
> +}
> +
> +static int sh_cmt_clock_event_set_state(struct clock_event_device *ced,
> +					int periodic)
>  {
>  	struct sh_cmt_channel *ch = ced_to_sh_cmt(ced);
> 
>  	/* deal with old setting first */
> -	switch (ced->mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -	case CLOCK_EVT_MODE_ONESHOT:
> +	if (clockevent_state_oneshot(ced) || clockevent_state_periodic(ced))
>  		sh_cmt_stop(ch, FLAG_CLOCKEVENT);
> -		break;
> -	default:
> -		break;
> -	}
> 
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		dev_info(&ch->cmt->pdev->dev,
> -			 "ch%u: used for periodic clock events\n", ch->index);
> -		sh_cmt_clock_event_start(ch, 1);
> -		break;
> -	case CLOCK_EVT_MODE_ONESHOT:
> -		dev_info(&ch->cmt->pdev->dev,
> -			 "ch%u: used for oneshot clock events\n", ch->index);
> -		sh_cmt_clock_event_start(ch, 0);
> -		break;
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	case CLOCK_EVT_MODE_UNUSED:
> -		sh_cmt_stop(ch, FLAG_CLOCKEVENT);
> -		break;
> -	default:
> -		break;
> -	}
> +	dev_info(&ch->cmt->pdev->dev, "ch%u: used for %s clock events\n",
> +		 ch->index, periodic ? "periodic" : "oneshot");
> +	sh_cmt_clock_event_start(ch, periodic);
> +	return 0;
> +}
> +
> +static int sh_cmt_clock_event_set_oneshot(struct clock_event_device *ced)
> +{
> +	return sh_cmt_clock_event_set_state(ced, 0);
> +}
> +
> +static int sh_cmt_clock_event_set_periodic(struct clock_event_device *ced)
> +{
> +	return sh_cmt_clock_event_set_state(ced, 1);
>  }
> 
>  static int sh_cmt_clock_event_next(unsigned long delta,
> @@ -760,7 +758,7 @@ static int sh_cmt_clock_event_next(unsigned long delta,
>  {
>  	struct sh_cmt_channel *ch = ced_to_sh_cmt(ced);
> 
> -	BUG_ON(ced->mode != CLOCK_EVT_MODE_ONESHOT);
> +	BUG_ON(!clockevent_state_oneshot(ced));
>  	if (likely(ch->flags & FLAG_IRQCONTEXT))
>  		ch->next_match_value = delta - 1;
>  	else
> @@ -814,7 +812,9 @@ static int sh_cmt_register_clockevent(struct
> sh_cmt_channel *ch, ced->rating = 125;
>  	ced->cpumask = cpu_possible_mask;
>  	ced->set_next_event = sh_cmt_clock_event_next;
> -	ced->set_mode = sh_cmt_clock_event_mode;
> +	ced->set_state_shutdown = sh_cmt_clock_event_shutdown;
> +	ced->set_state_periodic = sh_cmt_clock_event_set_periodic;
> +	ced->set_state_oneshot = sh_cmt_clock_event_set_oneshot;
>  	ced->suspend = sh_cmt_clock_event_suspend;
>  	ced->resume = sh_cmt_clock_event_resume;

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 22/41] clocksource: sh_tmu: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 22/41] clocksource: sh_tmu: " Viresh Kumar
@ 2015-06-18 13:10   ` Laurent Pinchart
  0 siblings, 0 replies; 85+ messages in thread
From: Laurent Pinchart @ 2015-06-18 13:10 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Magnus Damm, Laurent Pinchart, Paul Mundt

Hi Viresh,

Thank you for the patch.

On Thursday 18 June 2015 16:24:36 Viresh Kumar wrote:
> Migrate sh_tmu 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.
> 
> Cc: Magnus Damm <damm+renesas@opensource.se>
> Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Cc: Paul Mundt <lethal@linux-sh.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Acked-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

> ---
>  drivers/clocksource/sh_tmu.c | 63 +++++++++++++++++++---------------------
>  1 file changed, 30 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c
> index b6b8fa3cd211..43c98143f79a 100644
> --- a/drivers/clocksource/sh_tmu.c
> +++ b/drivers/clocksource/sh_tmu.c
> @@ -240,7 +240,7 @@ static irqreturn_t sh_tmu_interrupt(int irq, void
> *dev_id) struct sh_tmu_channel *ch = dev_id;
> 
>  	/* disable or acknowledge interrupt */
> -	if (ch->ced.mode == CLOCK_EVT_MODE_ONESHOT)
> +	if (clockevent_state_oneshot(&ch->ced))
>  		sh_tmu_write(ch, TCR, TCR_TPSC_CLK4);
>  	else
>  		sh_tmu_write(ch, TCR, TCR_UNIE | TCR_TPSC_CLK4);
> @@ -358,42 +358,37 @@ static void sh_tmu_clock_event_start(struct
> sh_tmu_channel *ch, int periodic) }
>  }
> 
> -static void sh_tmu_clock_event_mode(enum clock_event_mode mode,
> -				    struct clock_event_device *ced)
> +static int sh_tmu_clock_event_shutdown(struct clock_event_device *ced)
> +{
> +	struct sh_tmu_channel *ch = ced_to_sh_tmu(ced);
> +
> +	sh_tmu_disable(ch);
> +	return 0;
> +}
> +
> +static int sh_tmu_clock_event_set_state(struct clock_event_device *ced,
> +					int periodic)
>  {
>  	struct sh_tmu_channel *ch = ced_to_sh_tmu(ced);
> -	int disabled = 0;
> 
>  	/* deal with old setting first */
> -	switch (ced->mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -	case CLOCK_EVT_MODE_ONESHOT:
> +	if (clockevent_state_oneshot(ced) || clockevent_state_periodic(ced))
>  		sh_tmu_disable(ch);
> -		disabled = 1;
> -		break;
> -	default:
> -		break;
> -	}
> 
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		dev_info(&ch->tmu->pdev->dev,
> -			 "ch%u: used for periodic clock events\n", ch->index);
> -		sh_tmu_clock_event_start(ch, 1);
> -		break;
> -	case CLOCK_EVT_MODE_ONESHOT:
> -		dev_info(&ch->tmu->pdev->dev,
> -			 "ch%u: used for oneshot clock events\n", ch->index);
> -		sh_tmu_clock_event_start(ch, 0);
> -		break;
> -	case CLOCK_EVT_MODE_UNUSED:
> -		if (!disabled)
> -			sh_tmu_disable(ch);
> -		break;
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	default:
> -		break;
> -	}
> +	dev_info(&ch->tmu->pdev->dev, "ch%u: used for %s clock events\n",
> +		 ch->index, periodic ? "periodic" : "oneshot");
> +	sh_tmu_clock_event_start(ch, periodic);
> +	return 0;
> +}
> +
> +static int sh_tmu_clock_event_set_oneshot(struct clock_event_device *ced)
> +{
> +	return sh_tmu_clock_event_set_state(ced, 0);
> +}
> +
> +static int sh_tmu_clock_event_set_periodic(struct clock_event_device *ced)
> +{
> +	return sh_tmu_clock_event_set_state(ced, 1);
>  }
> 
>  static int sh_tmu_clock_event_next(unsigned long delta,
> @@ -401,7 +396,7 @@ static int sh_tmu_clock_event_next(unsigned long delta,
>  {
>  	struct sh_tmu_channel *ch = ced_to_sh_tmu(ced);
> 
> -	BUG_ON(ced->mode != CLOCK_EVT_MODE_ONESHOT);
> +	BUG_ON(!clockevent_state_oneshot(ced));
> 
>  	/* program new delta value */
>  	sh_tmu_set_next(ch, delta, 0);
> @@ -430,7 +425,9 @@ static void sh_tmu_register_clockevent(struct
> sh_tmu_channel *ch, ced->rating = 200;
>  	ced->cpumask = cpu_possible_mask;
>  	ced->set_next_event = sh_tmu_clock_event_next;
> -	ced->set_mode = sh_tmu_clock_event_mode;
> +	ced->set_state_shutdown = sh_tmu_clock_event_shutdown;
> +	ced->set_state_periodic = sh_tmu_clock_event_set_periodic;
> +	ced->set_state_oneshot = sh_tmu_clock_event_set_oneshot;
>  	ced->suspend = sh_tmu_clock_event_suspend;
>  	ced->resume = sh_tmu_clock_event_resume;

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 30/41] clocksource: atmel: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 30/41] clocksource: atmel: " Viresh Kumar
@ 2015-06-18 14:28   ` Alexandre Belloni
  0 siblings, 0 replies; 85+ messages in thread
From: Alexandre Belloni @ 2015-06-18 14:28 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Nicolas Ferre,
	Jean-Christophe Plagniol-Villard

On 18/06/2015 at 16:24:44 +0530, Viresh Kumar wrote :
> Migrate atmel 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.
> 
> Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
> Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

> ---
>  drivers/clocksource/timer-atmel-pit.c | 41 +++++++++++++++--------------------
>  1 file changed, 18 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/clocksource/timer-atmel-pit.c b/drivers/clocksource/timer-atmel-pit.c
> index c0304ff608b0..58753223585b 100644
> --- a/drivers/clocksource/timer-atmel-pit.c
> +++ b/drivers/clocksource/timer-atmel-pit.c
> @@ -90,33 +90,27 @@ static cycle_t read_pit_clk(struct clocksource *cs)
>  	return elapsed;
>  }
>  
> +static int pit_clkevt_shutdown(struct clock_event_device *dev)
> +{
> +	struct pit_data *data = clkevt_to_pit_data(dev);
> +
> +	/* disable irq, leaving the clocksource active */
> +	pit_write(data->base, AT91_PIT_MR, (data->cycle - 1) | AT91_PIT_PITEN);
> +	return 0;
> +}
> +
>  /*
>   * Clockevent device:  interrupts every 1/HZ (== pit_cycles * MCK/16)
>   */
> -static void
> -pit_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
> +static int pit_clkevt_set_periodic(struct clock_event_device *dev)
>  {
>  	struct pit_data *data = clkevt_to_pit_data(dev);
>  
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		/* update clocksource counter */
> -		data->cnt += data->cycle * PIT_PICNT(pit_read(data->base, AT91_PIT_PIVR));
> -		pit_write(data->base, AT91_PIT_MR,
> -			  (data->cycle - 1) | AT91_PIT_PITEN | AT91_PIT_PITIEN);
> -		break;
> -	case CLOCK_EVT_MODE_ONESHOT:
> -		BUG();
> -		/* FALLTHROUGH */
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	case CLOCK_EVT_MODE_UNUSED:
> -		/* disable irq, leaving the clocksource active */
> -		pit_write(data->base, AT91_PIT_MR,
> -			  (data->cycle - 1) | AT91_PIT_PITEN);
> -		break;
> -	case CLOCK_EVT_MODE_RESUME:
> -		break;
> -	}
> +	/* update clocksource counter */
> +	data->cnt += data->cycle * PIT_PICNT(pit_read(data->base, AT91_PIT_PIVR));
> +	pit_write(data->base, AT91_PIT_MR,
> +		  (data->cycle - 1) | AT91_PIT_PITEN | AT91_PIT_PITIEN);
> +	return 0;
>  }
>  
>  static void at91sam926x_pit_suspend(struct clock_event_device *cedev)
> @@ -162,7 +156,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id)
>  	WARN_ON_ONCE(!irqs_disabled());
>  
>  	/* The PIT interrupt may be disabled, and is shared */
> -	if ((data->clkevt.mode == CLOCK_EVT_MODE_PERIODIC) &&
> +	if (clockevent_state_periodic(&data->clkevt) &&
>  	    (pit_read(data->base, AT91_PIT_SR) & AT91_PIT_PITS)) {
>  		unsigned nr_ticks;
>  
> @@ -227,7 +221,8 @@ static void __init at91sam926x_pit_common_init(struct pit_data *data)
>  	data->clkevt.rating = 100;
>  	data->clkevt.cpumask = cpumask_of(0);
>  
> -	data->clkevt.set_mode = pit_clkevt_mode;
> +	data->clkevt.set_state_shutdown = pit_clkevt_shutdown;
> +	data->clkevt.set_state_periodic = pit_clkevt_set_periodic;
>  	data->clkevt.resume = at91sam926x_pit_resume;
>  	data->clkevt.suspend = at91sam926x_pit_suspend;
>  	clockevents_register_device(&data->clkevt);
> -- 
> 2.4.0
> 

-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 31/41] clocksource: atmel-st: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 31/41] clocksource: atmel-st: " Viresh Kumar
@ 2015-06-18 14:40   ` Alexandre Belloni
  2015-06-19  1:49     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Alexandre Belloni @ 2015-06-18 14:40 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Nicolas Ferre,
	Jean-Christophe Plagniol-Villard

On 18/06/2015 at 16:24:45 +0530, Viresh Kumar wrote :
> Migrate atmel-st 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.
> 
> Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
> Cc: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

I think that anyway I'm the only one booting a kernel from after 3.0 on
the rm9200. I'll test boot that when 4.3-rc1 is released.

> ---
>  drivers/clocksource/timer-atmel-st.c | 69 ++++++++++++++++++++++--------------
>  1 file changed, 42 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/clocksource/timer-atmel-st.c b/drivers/clocksource/timer-atmel-st.c
> index 1692e17e096b..41b7b6dc1d0d 100644
> --- a/drivers/clocksource/timer-atmel-st.c
> +++ b/drivers/clocksource/timer-atmel-st.c
> @@ -106,36 +106,47 @@ static struct clocksource clk32k = {
>  	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
>  };
>  
> -static void
> -clkevt32k_mode(enum clock_event_mode mode, struct clock_event_device *dev)
> +static void clkdev32k_disable_and_flush_irq(void)
>  {
>  	unsigned int val;
>  
>  	/* Disable and flush pending timer interrupts */
>  	regmap_write(regmap_st, AT91_ST_IDR, AT91_ST_PITS | AT91_ST_ALMS);
>  	regmap_read(regmap_st, AT91_ST_SR, &val);
> -
>  	last_crtr = read_CRTR();
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		/* PIT for periodic irqs; fixed rate of 1/HZ */
> -		irqmask = AT91_ST_PITS;
> -		regmap_write(regmap_st, AT91_ST_PIMR, RM9200_TIMER_LATCH);
> -		break;
> -	case CLOCK_EVT_MODE_ONESHOT:
> -		/* ALM for oneshot irqs, set by next_event()
> -		 * before 32 seconds have passed
> -		 */
> -		irqmask = AT91_ST_ALMS;
> -		regmap_write(regmap_st, AT91_ST_RTAR, last_crtr);
> -		break;
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	case CLOCK_EVT_MODE_UNUSED:
> -	case CLOCK_EVT_MODE_RESUME:
> -		irqmask = 0;
> -		break;
> -	}
> +}
> +
> +static int clkevt32k_shutdown(struct clock_event_device *evt)
> +{
> +	clkdev32k_disable_and_flush_irq();
> +	irqmask = 0;
> +	regmap_write(regmap_st, AT91_ST_IER, irqmask);
> +	return 0;
> +}
> +
> +static int clkevt32k_set_oneshot(struct clock_event_device *dev)
> +{
> +	clkdev32k_disable_and_flush_irq();
> +
> +	/*
> +	 * ALM for oneshot irqs, set by next_event()
> +	 * before 32 seconds have passed.
> +	 */
> +	irqmask = AT91_ST_ALMS;
> +	regmap_write(regmap_st, AT91_ST_RTAR, last_crtr);
>  	regmap_write(regmap_st, AT91_ST_IER, irqmask);
> +	return 0;
> +}
> +
> +static int clkevt32k_set_periodic(struct clock_event_device *dev)
> +{
> +	clkdev32k_disable_and_flush_irq();
> +
> +	/* PIT for periodic irqs; fixed rate of 1/HZ */
> +	irqmask = AT91_ST_PITS;
> +	regmap_write(regmap_st, AT91_ST_PIMR, RM9200_TIMER_LATCH);
> +	regmap_write(regmap_st, AT91_ST_IER, irqmask);
> +	return 0;
>  }
>  
>  static int
> @@ -170,11 +181,15 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
>  }
>  
>  static struct clock_event_device clkevt = {
> -	.name		= "at91_tick",
> -	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> -	.rating		= 150,
> -	.set_next_event	= clkevt32k_next_event,
> -	.set_mode	= clkevt32k_mode,
> +	.name			= "at91_tick",
> +	.features		= CLOCK_EVT_FEAT_PERIODIC |
> +				  CLOCK_EVT_FEAT_ONESHOT,
> +	.rating			= 150,
> +	.set_next_event		= clkevt32k_next_event,
> +	.set_state_shutdown	= clkevt32k_shutdown,
> +	.set_state_periodic	= clkevt32k_set_periodic,
> +	.set_state_oneshot	= clkevt32k_set_oneshot,
> +	.tick_resume		= clkevt32k_shutdown,
>  };
>  
>  /*
> -- 
> 2.4.0
> 

-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 06/41] clocksource: exynos_mct: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 06/41] clocksource: exynos_mct: " Viresh Kumar
@ 2015-06-18 16:38   ` Alexey Klimov
  2015-06-19  2:14     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Alexey Klimov @ 2015-06-18 16:38 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, Kukjin Kim, linaro-kernel,
	Linux Kernel Mailing List, linux-arm-kernel, linux-samsung-soc,
	Krzysztof Kozłowski

Hi Viresh,

(adding samsung list and Krzysztof to c/c)

Please don't forget to send patches to platform list and platform maintainers.

On Thu, Jun 18, 2015 at 1:54 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> Migrate exynos_mct 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.
>
> Cc: Kukjin Kim <kgene.kim@samsung.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
>  drivers/clocksource/exynos_mct.c | 85 +++++++++++++++++++---------------------
>  1 file changed, 40 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index 935b05936dbd..82e060cb7b95 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -257,15 +257,14 @@ static void exynos4_mct_comp0_stop(void)
>         exynos4_mct_write(0, EXYNOS4_MCT_G_INT_ENB);
>  }
>
> -static void exynos4_mct_comp0_start(enum clock_event_mode mode,
> -                                   unsigned long cycles)
> +static void exynos4_mct_comp0_start(bool periodic, unsigned long cycles)
>  {
>         unsigned int tcon;
>         cycle_t comp_cycle;
>
>         tcon = readl_relaxed(reg_base + EXYNOS4_MCT_G_TCON);
>
> -       if (mode == CLOCK_EVT_MODE_PERIODIC) {
> +       if (periodic) {
>                 tcon |= MCT_G_TCON_COMP0_AUTO_INC;
>                 exynos4_mct_write(cycles, EXYNOS4_MCT_G_COMP0_ADD_INCR);
>         }
> @@ -283,38 +282,38 @@ static void exynos4_mct_comp0_start(enum clock_event_mode mode,
>  static int exynos4_comp_set_next_event(unsigned long cycles,
>                                        struct clock_event_device *evt)
>  {
> -       exynos4_mct_comp0_start(evt->mode, cycles);
> +       exynos4_mct_comp0_start(false, cycles);
>
>         return 0;
>  }
>
> -static void exynos4_comp_set_mode(enum clock_event_mode mode,
> -                                 struct clock_event_device *evt)
> +static int mct_set_state_shutdown(struct clock_event_device *evt)
>  {
> -       unsigned long cycles_per_jiffy;
>         exynos4_mct_comp0_stop();
> +       return 0;
> +}
>
> -       switch (mode) {
> -       case CLOCK_EVT_MODE_PERIODIC:
> -               cycles_per_jiffy =
> -                       (((unsigned long long) NSEC_PER_SEC / HZ * evt->mult) >> evt->shift);
> -               exynos4_mct_comp0_start(mode, cycles_per_jiffy);
> -               break;
> +static int mct_set_state_periodic(struct clock_event_device *evt)
> +{
> +       unsigned long cycles_per_jiffy;
>
> -       case CLOCK_EVT_MODE_ONESHOT:
> -       case CLOCK_EVT_MODE_UNUSED:
> -       case CLOCK_EVT_MODE_SHUTDOWN:
> -       case CLOCK_EVT_MODE_RESUME:
> -               break;
> -       }
> +       cycles_per_jiffy = (((unsigned long long)NSEC_PER_SEC / HZ * evt->mult)
> +                           >> evt->shift);
> +       exynos4_mct_comp0_stop();
> +       exynos4_mct_comp0_start(true, cycles_per_jiffy);
> +       return 0;
>  }
>
>  static struct clock_event_device mct_comp_device = {
> -       .name           = "mct-comp",
> -       .features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> -       .rating         = 250,
> -       .set_next_event = exynos4_comp_set_next_event,
> -       .set_mode       = exynos4_comp_set_mode,
> +       .name                   = "mct-comp",
> +       .features               = CLOCK_EVT_FEAT_PERIODIC |
> +                                 CLOCK_EVT_FEAT_ONESHOT,
> +       .rating                 = 250,
> +       .set_next_event         = exynos4_comp_set_next_event,
> +       .set_state_periodic     = mct_set_state_periodic,
> +       .set_state_shutdown     = mct_set_state_shutdown,
> +       .set_state_oneshot      = mct_set_state_shutdown,
> +       .tick_resume            = mct_set_state_shutdown,
>  };
>
>  static irqreturn_t exynos4_mct_comp_isr(int irq, void *dev_id)
> @@ -390,39 +389,32 @@ static int exynos4_tick_set_next_event(unsigned long cycles,
>         return 0;
>  }
>
> -static inline void exynos4_tick_set_mode(enum clock_event_mode mode,
> -                                        struct clock_event_device *evt)
> +static int set_state_shutdown(struct clock_event_device *evt)
> +{
> +       exynos4_mct_tick_stop(this_cpu_ptr(&percpu_mct_tick));

Passed evt pointer isn't used and instead you're going to locate
percpu_mct_tick struct knowing current cpu number offset.
What do you think, since evt is embedded into percpu_mct_tick
structure then maybe it will be cheaper to calculate percpu_mct_tick
using container_of()?

struct mct_clock_event_device *mevt;
mevt = container_of(evt, struct mct_clock_event_device, evt);


> +       return 0;
> +}
> +
> +static int set_state_periodic(struct clock_event_device *evt)
>  {
>         struct mct_clock_event_device *mevt = this_cpu_ptr(&percpu_mct_tick);
>         unsigned long cycles_per_jiffy;
>
> +       cycles_per_jiffy = (((unsigned long long)NSEC_PER_SEC / HZ * evt->mult)
> +                           >> evt->shift);
>         exynos4_mct_tick_stop(mevt);
> -
> -       switch (mode) {
> -       case CLOCK_EVT_MODE_PERIODIC:
> -               cycles_per_jiffy =
> -                       (((unsigned long long) NSEC_PER_SEC / HZ * evt->mult) >> evt->shift);
> -               exynos4_mct_tick_start(cycles_per_jiffy, mevt);
> -               break;
> -
> -       case CLOCK_EVT_MODE_ONESHOT:
> -       case CLOCK_EVT_MODE_UNUSED:
> -       case CLOCK_EVT_MODE_SHUTDOWN:
> -       case CLOCK_EVT_MODE_RESUME:
> -               break;
> -       }
> +       exynos4_mct_tick_start(cycles_per_jiffy, mevt);
> +       return 0;
>  }
>
>  static void exynos4_mct_tick_clear(struct mct_clock_event_device *mevt)
>  {
> -       struct clock_event_device *evt = &mevt->evt;
> -
>         /*
>          * This is for supporting oneshot mode.
>          * Mct would generate interrupt periodically
>          * without explicit stopping.
>          */
> -       if (evt->mode != CLOCK_EVT_MODE_PERIODIC)
> +       if (!clockevent_state_periodic(&mevt->evt))
>                 exynos4_mct_tick_stop(mevt);
>
>         /* Clear the MCT tick interrupt */
> @@ -455,7 +447,10 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
>         evt->name = mevt->name;
>         evt->cpumask = cpumask_of(cpu);
>         evt->set_next_event = exynos4_tick_set_next_event;
> -       evt->set_mode = exynos4_tick_set_mode;
> +       evt->set_state_periodic = set_state_periodic;
> +       evt->set_state_shutdown = set_state_shutdown;
> +       evt->set_state_oneshot = set_state_shutdown;
> +       evt->tick_resume = set_state_shutdown;

Do i correctly understand that during massive hot-plug cpu events (i
guess that will lead to CPU_STARING notification) on power management
this *_timer_setup() function will be called?
And here code performs setting of rather constant values and copying.
You're going to increase number of such strange assignments.

Well, just lazy-thinking. Can we do something like this:

for_each_possible_cpu(cpu) {
          exynos4_local_timer_setup_prepare(&per_cpu(percpu_mct_tick,
cpu).evt, cpu);
}

somewhere in exynos_mct init functions and assign most of these values
for each evt structure?
And make *_timer_setup() function lighter moving some code to
prepare/init functions.
If it makes any sense i can take a look and try to prepare patch.



>         evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
>         evt->rating = 450;
>
> @@ -482,7 +477,7 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
>
>  static void exynos4_local_timer_stop(struct clock_event_device *evt)
>  {
> -       evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
> +       evt->set_state_shutdown(evt);
>         if (mct_int_type == MCT_INT_SPI)
>                 free_irq(evt->irq, this_cpu_ptr(&percpu_mct_tick));
>         else
> --

Do you need testers? I can test it on odroid-xu3.


Can't find in emails similar patch for ARM arch timer. Any plans about
it? Or if it's already converted to 'set-state' then could you please
share a link?

Thanks and best regards,
Alexey Klimov

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 31/41] clocksource: atmel-st: Migrate to new 'set-state' interface
  2015-06-18 14:40   ` Alexandre Belloni
@ 2015-06-19  1:49     ` Viresh Kumar
  2015-06-19 11:48       ` Alexandre Belloni
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-19  1:49 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Nicolas Ferre,
	Jean-Christophe Plagniol-Villard

On 18-06-15, 16:40, Alexandre Belloni wrote:
> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Thanks.

> I think that anyway I'm the only one booting a kernel from after 3.0 on
> the rm9200. I'll test boot that when 4.3-rc1 is released.

What about testing it now on top of clockevents tree which I have
mentioned in the cover letter ?

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 06/41] clocksource: exynos_mct: Migrate to new 'set-state' interface
  2015-06-18 16:38   ` Alexey Klimov
@ 2015-06-19  2:14     ` Viresh Kumar
  0 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-19  2:14 UTC (permalink / raw)
  To: Alexey Klimov
  Cc: Thomas Gleixner, Daniel Lezcano, Kukjin Kim, linaro-kernel,
	Linux Kernel Mailing List, linux-arm-kernel, linux-samsung-soc,
	Krzysztof Kozłowski

Hi Alexey,

On 18-06-15, 19:38, Alexey Klimov wrote:
> (adding samsung list and Krzysztof to c/c)

Thanks.

> Please don't forget to send patches to platform list and platform maintainers.

Hmmm, I cc'd Kukjin on this patch as he was the one Acking most of the
patches on this driver recently (had a look at git log). Also looked
at MAINTAINERS and the driver itself to look for maintainers, and
kukjin was all I can find. Yes, get_maintainers gave the two names you
added, but many a times it generates list longer than required and so
I don't completely depend on that.

Anyway, thanks.

> On Thu, Jun 18, 2015 at 1:54 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> > +static int set_state_shutdown(struct clock_event_device *evt)
> > +{
> > +       exynos4_mct_tick_stop(this_cpu_ptr(&percpu_mct_tick));

Let me clarify the purpose of this patch and the series.

Its only about breaking the older ->set_mode() callback into state
based callbacks and not change the way things were done. And so no
improvements in this patch. If there are improvements possible on the
driver, then they must be done separately.

> Passed evt pointer isn't used

Its a callback from clockevents core, and we can't get rid of the
argument. :)

> and instead you're going to locate
> percpu_mct_tick struct knowing current cpu number offset.

That's the way ->set_mode() was doing it and so I didn't touched it to
keep this patch simple.

> What do you think, since evt is embedded into percpu_mct_tick
> structure then maybe it will be cheaper to calculate percpu_mct_tick
> using container_of()?
> 
> struct mct_clock_event_device *mevt;
> mevt = container_of(evt, struct mct_clock_event_device, evt);

Ofcourse, but that has to be fixed for many routines and should be
done in a separate patch. It doesn't belong to this one.
 
> > @@ -455,7 +447,10 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt)
> >         evt->name = mevt->name;
> >         evt->cpumask = cpumask_of(cpu);
> >         evt->set_next_event = exynos4_tick_set_next_event;
> > -       evt->set_mode = exynos4_tick_set_mode;
> > +       evt->set_state_periodic = set_state_periodic;
> > +       evt->set_state_shutdown = set_state_shutdown;
> > +       evt->set_state_oneshot = set_state_shutdown;
> > +       evt->tick_resume = set_state_shutdown;
> 
> Do i correctly understand that during massive hot-plug cpu events (i
> guess that will lead to CPU_STARING notification) on power management
> this *_timer_setup() function will be called?

I hope so.

> And here code performs setting of rather constant values and copying.
> You're going to increase number of such strange assignments.
> 
> Well, just lazy-thinking. Can we do something like this:
> 
> for_each_possible_cpu(cpu) {
>           exynos4_local_timer_setup_prepare(&per_cpu(percpu_mct_tick,
> cpu).evt, cpu);
> }
> 
> somewhere in exynos_mct init functions and assign most of these values
> for each evt structure?
> And make *_timer_setup() function lighter moving some code to
> prepare/init functions.

I agree.. But again, that has to be done in a separate patch.

> If it makes any sense i can take a look and try to prepare patch.

Sure..

> Do you need testers? I can test it on odroid-xu3.

That will be good.

> Can't find in emails similar patch for ARM arch timer. Any plans about
> it? Or if it's already converted to 'set-state' then could you please
> share a link?

https://git.linaro.org/people/daniel.lezcano/linux.git/shortlog/refs/heads/clockevents/4.3

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 23/41] clocksource: sun4i: Migrate to new 'set-state' interface
  2015-06-18 12:23     ` Viresh Kumar
@ 2015-06-19 10:30       ` Maxime Ripard
  0 siblings, 0 replies; 85+ messages in thread
From: Maxime Ripard @ 2015-06-19 10:30 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 2087 bytes --]

On Thu, Jun 18, 2015 at 05:53:36PM +0530, Viresh Kumar wrote:
> On 18-06-15, 14:01, Maxime Ripard wrote:
> > On Thu, Jun 18, 2015 at 04:24:37PM +0530, Viresh Kumar wrote:
> > > +static int sun4i_clkevt_shutdown(struct clock_event_device *evt)
> > >  {
> > > -	switch (mode) {
> > > -	case CLOCK_EVT_MODE_PERIODIC:
> > > -		sun4i_clkevt_time_stop(0);
> > > -		sun4i_clkevt_time_setup(0, ticks_per_jiffy);
> > > -		sun4i_clkevt_time_start(0, true);
> > > -		break;
> > > -	case CLOCK_EVT_MODE_ONESHOT:
> > > -		sun4i_clkevt_time_stop(0);
> > > -		sun4i_clkevt_time_start(0, false);
> > > -		break;
> > > -	case CLOCK_EVT_MODE_UNUSED:
> > > -	case CLOCK_EVT_MODE_SHUTDOWN:
> > > -	default:
> > > -		sun4i_clkevt_time_stop(0);
> > > -		break;
> 
> Because sun4i_clkevt_time_stop() is getting called in default case, it
> is getting called for tick-resume mode already with the old set_mode
> interface.
> 
> > > +	.tick_resume = sun4i_clkevt_shutdown,
> > 
> > I'm not exactly sure of the context here, but I wouldn't expect a
> > callback called tick_resume to stop a timer. Is this expected?
> 
> And so this patch carried the same logic here.
> 
> At suspend: clockevents core calls ->set_state_shutdown() and at
> resume it calls ->tick_resume() followed by setting to the proper
> mode, i.e. periodic or oneshot.
> 
> Many driver authors didn't knew about these details and so did
> shutdown in resume path as well.
> 
> For me, you might not even need a tick_resume() at all, as your driver
> would have already shutted down on suspend and is just required to be
> put to the right mode again.

Ok, thanks for the explanation.

It looks good for both this patch and the sun5i one. You can add my
Acked-by.

> But, I didn't wanted to change the way things behaved until now. I can
> add another patch to get things fixed separately if you want me to.

If you have some spare time, it would be great :)

Thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 31/41] clocksource: atmel-st: Migrate to new 'set-state' interface
  2015-06-19  1:49     ` Viresh Kumar
@ 2015-06-19 11:48       ` Alexandre Belloni
  2015-06-19 11:52         ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Alexandre Belloni @ 2015-06-19 11:48 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Nicolas Ferre,
	Jean-Christophe Plagniol-Villard

On 19/06/2015 at 07:19:51 +0530, Viresh Kumar wrote :
> On 18-06-15, 16:40, Alexandre Belloni wrote:
> > Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> 
> Thanks.
> 
> > I think that anyway I'm the only one booting a kernel from after 3.0 on
> > the rm9200. I'll test boot that when 4.3-rc1 is released.
> 
> What about testing it now on top of clockevents tree which I have
> mentioned in the cover letter ?
> 

I just did.

I was not being lazy but booting that board is actually time consuming
for multiple reasons and time is a scarce resource ;)



-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 31/41] clocksource: atmel-st: Migrate to new 'set-state' interface
  2015-06-19 11:48       ` Alexandre Belloni
@ 2015-06-19 11:52         ` Viresh Kumar
  2015-06-19 12:06           ` Alexandre Belloni
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-19 11:52 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Nicolas Ferre,
	Jean-Christophe Plagniol-Villard

On 19-06-15, 13:48, Alexandre Belloni wrote:
> I just did.
> 
> I was not being lazy but booting that board is actually time consuming
> for multiple reasons and time is a scarce resource ;)

Want to give your Tested-by as well ?

-- 
viresh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 31/41] clocksource: atmel-st: Migrate to new 'set-state' interface
  2015-06-19 11:52         ` Viresh Kumar
@ 2015-06-19 12:06           ` Alexandre Belloni
  0 siblings, 0 replies; 85+ messages in thread
From: Alexandre Belloni @ 2015-06-19 12:06 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Nicolas Ferre,
	Jean-Christophe Plagniol-Villard

On 19/06/2015 at 17:22:49 +0530, Viresh Kumar wrote :
> On 19-06-15, 13:48, Alexandre Belloni wrote:
> > I just did.
> > 
> > I was not being lazy but booting that board is actually time consuming
> > for multiple reasons and time is a scarce resource ;)
> 
> Want to give your Tested-by as well ?
> 

Sure,

Tested-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>


-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 17/41] clocksource: qcom: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 17/41] clocksource: qcom: " Viresh Kumar
@ 2015-06-19 19:10   ` Stephen Boyd
  0 siblings, 0 replies; 85+ messages in thread
From: Stephen Boyd @ 2015-06-19 19:10 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Kumar Gala, Andy Gross, David Brown

On 06/18, Viresh Kumar wrote:
> Migrate qcom 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.
> 
> Periodic mode isn't supported by the driver and so the callback isn't
> provided anymore.
> 
> Cc: Stephen Boyd <sboyd@codeaurora.org>
> Cc: Kumar Gala <galak@codeaurora.org>
> Cc: Andy Gross <agross@codeaurora.org>
> Cc: David Brown <davidb@codeaurora.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---

Acked-by: Stephen Boyd <sboyd@codeaurora.org>

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 09/41] clocksource: meson6: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 09/41] clocksource: meson6: " Viresh Kumar
@ 2015-06-20  6:53   ` Carlo Caione
  0 siblings, 0 replies; 85+ messages in thread
From: Carlo Caione @ 2015-06-20  6:53 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Carlo Caione

On Thu, Jun 18, 2015 at 12:54 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> Migrate meson6 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.
>
> Cc: Carlo Caione <carlo@caione.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
>  drivers/clocksource/meson6_timer.c | 50 ++++++++++++++++++++------------------
>  1 file changed, 27 insertions(+), 23 deletions(-)

Acked-by: Carlo Caione <carlo@caione.org>

-- 
Carlo Caione
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 32/41] clocksource: digicolor: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 32/41] clocksource: digicolor: " Viresh Kumar
@ 2015-06-23 10:17   ` Baruch Siach
  2015-06-23 10:21     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Baruch Siach @ 2015-06-23 10:17 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel

Hi Viresh,

On Thu, Jun 18, 2015 at 04:24:46PM +0530, Viresh Kumar wrote:
> Migrate digicolor 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.
> 
> Cc: Baruch Siach <baruch@tkos.co.il>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Tested on a Conexant CX92755 Equinox board.

Acked-by: Baruch Siach <baruch@tkos.co.il>
Tested-by: Baruch Siach <baruch@tkos.co.il>

Thanks,
baruch

-- 
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch@tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 32/41] clocksource: digicolor: Migrate to new 'set-state' interface
  2015-06-23 10:17   ` Baruch Siach
@ 2015-06-23 10:21     ` Viresh Kumar
  0 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-06-23 10:21 UTC (permalink / raw)
  To: Baruch Siach
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel

On 23-06-15, 13:17, Baruch Siach wrote:
> Tested on a Conexant CX92755 Equinox board.
> 
> Acked-by: Baruch Siach <baruch@tkos.co.il>
> Tested-by: Baruch Siach <baruch@tkos.co.il>

Thanks a lot.

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 02/41] clocksource: cadence_ttc: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 02/41] clocksource: cadence_ttc: " Viresh Kumar
@ 2015-06-25 23:15   ` Sören Brinkmann
  2015-06-30  8:28   ` Daniel Lezcano
  1 sibling, 0 replies; 85+ messages in thread
From: Sören Brinkmann @ 2015-06-25 23:15 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Michal Simek

On Thu, 2015-06-18 at 04:24PM +0530, Viresh Kumar wrote:
> Migrate cadence_ttc 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.
> 
> Cc: Michal Simek <michal.simek@xilinx.com>
> Cc: Sören Brinkmann <soren.brinkmann@xilinx.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Sören Brinkmann <soren.brinkmann@xilinx.com>

	Sören

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface Viresh Kumar
@ 2015-06-30  8:25   ` Daniel Lezcano
  2015-06-30  9:00     ` Viresh Kumar
  2015-07-08  5:37   ` Vineet Gupta
  1 sibling, 1 reply; 85+ messages in thread
From: Daniel Lezcano @ 2015-06-30  8:25 UTC (permalink / raw)
  To: Viresh Kumar, Thomas Gleixner
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Oleksij Rempel

On 06/18/2015 12:54 PM, Viresh Kumar wrote:
> Migrate asm9260 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.

Could you add in the changelog the subtle change with set_mode(RESUME) 
and this code. As a default the timer was stopped when entering in the 
set_mode function, now with the new API, this is done explicitly.

> Cc: Oleksij Rempel <linux@rempel-privat.de>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---

[ ... ]

> +static int asm9260_timer_shutdown(struct clock_event_device *evt)
>   {
>   	/* stop timer0 */
>   	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + CLR_REG);
> +	return 0;
> +}
> +
> +static int asm9260_timer_set_oneshot(struct clock_event_device *evt)
> +{
> +	/* stop timer0 */
> +	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + CLR_REG);

Can you replace this line with a call to asm9260_timer_shutdown ?

> +	/* enable reset and stop on match */
> +	writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
> +		       priv.base + HW_MCR + SET_REG);
> +	return 0;
> +}

[ ... ]

> +static int asm9260_timer_set_periodic(struct clock_event_device *evt)
> +{
> +	/* stop timer0 */
> +	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + CLR_REG);

idem.

Thanks

   -- Daniel

-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 02/41] clocksource: cadence_ttc: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 02/41] clocksource: cadence_ttc: " Viresh Kumar
  2015-06-25 23:15   ` Sören Brinkmann
@ 2015-06-30  8:28   ` Daniel Lezcano
  1 sibling, 0 replies; 85+ messages in thread
From: Daniel Lezcano @ 2015-06-30  8:28 UTC (permalink / raw)
  To: Viresh Kumar, Thomas Gleixner
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Michal Simek,
	Sören Brinkmann

On 06/18/2015 12:54 PM, Viresh Kumar wrote:
> Migrate cadence_ttc 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.
>
> Cc: Michal Simek <michal.simek@xilinx.com>
> Cc: Sören Brinkmann <soren.brinkmann@xilinx.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---

Sounds good.


-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface
  2015-06-30  8:25   ` Daniel Lezcano
@ 2015-06-30  9:00     ` Viresh Kumar
  2015-06-30  9:20       ` Daniel Lezcano
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-06-30  9:00 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Thomas Gleixner, linaro-kernel, linux-kernel, linux-arm-kernel,
	Oleksij Rempel

On 30-06-15, 10:25, Daniel Lezcano wrote:
> Could you add in the changelog the subtle change with
> set_mode(RESUME) and this code. As a default the timer was stopped
> when entering in the set_mode function, now with the new API, this
> is done explicitly.

> Can you replace this line with a call to asm9260_timer_shutdown ?

How does this look ?

--------------------------8<------------------

Message-Id: <12839571df542ecc8b9304b7de9881216d45aef8.1435654791.git.viresh.kumar@linaro.org>
From: Viresh Kumar <viresh.kumar@linaro.org>
Date: Fri, 27 Feb 2015 13:39:52 +0530
Subject: [PATCH] clocksource: asm9260: Migrate to new 'set-state' interface

Migrate asm9260 driver to the new 'set-state' interface provided by
clockevents core, the earlier 'set-mode' interface is marked obsolete
now.

As a default the timer was stopped when entering in the set_mode(RESUME)
function, now this is done explicitly with the new API.

This also enables us to implement callbacks for new states of clockevent
devices, for example: ONESHOT_STOPPED.

Cc: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/asm9260_timer.c | 64 ++++++++++++++++++++++---------------
 1 file changed, 39 insertions(+), 25 deletions(-)

diff --git a/drivers/clocksource/asm9260_timer.c b/drivers/clocksource/asm9260_timer.c
index 4c2ba59897e8..217438d39eb3 100644
--- a/drivers/clocksource/asm9260_timer.c
+++ b/drivers/clocksource/asm9260_timer.c
@@ -120,38 +120,52 @@ static int asm9260_timer_set_next_event(unsigned long delta,
 	return 0;
 }
 
-static void asm9260_timer_set_mode(enum clock_event_mode mode,
-				    struct clock_event_device *evt)
+static inline void __asm9260_timer_shutdown(struct clock_event_device *evt)
 {
 	/* stop timer0 */
 	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + CLR_REG);
+}
+
+static int asm9260_timer_shutdown(struct clock_event_device *evt)
+{
+	__asm9260_timer_shutdown(evt);
+	return 0;
+}
+
+static int asm9260_timer_set_oneshot(struct clock_event_device *evt)
+{
+	__asm9260_timer_shutdown(evt);
+
+	/* enable reset and stop on match */
+	writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
+		       priv.base + HW_MCR + SET_REG);
+	return 0;
+}
+
+static int asm9260_timer_set_periodic(struct clock_event_device *evt)
+{
+	__asm9260_timer_shutdown(evt);
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		/* disable reset and stop on match */
-		writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
-				priv.base + HW_MCR + CLR_REG);
-		/* configure match count for TC0 */
-		writel_relaxed(priv.ticks_per_jiffy, priv.base + HW_MR0);
-		/* enable TC0 */
-		writel_relaxed(BM_C0_EN, priv.base + HW_TCR + SET_REG);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		/* enable reset and stop on match */
-		writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
-				priv.base + HW_MCR + SET_REG);
-		break;
-	default:
-		break;
-	}
+	/* disable reset and stop on match */
+	writel_relaxed(BM_MCR_RES_EN(0) | BM_MCR_STOP_EN(0),
+		       priv.base + HW_MCR + CLR_REG);
+	/* configure match count for TC0 */
+	writel_relaxed(priv.ticks_per_jiffy, priv.base + HW_MR0);
+	/* enable TC0 */
+	writel_relaxed(BM_C0_EN, priv.base + HW_TCR + SET_REG);
+	return 0;
 }
 
 static struct clock_event_device event_dev = {
-	.name		= DRIVER_NAME,
-	.rating		= 200,
-	.features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
-	.set_next_event	= asm9260_timer_set_next_event,
-	.set_mode	= asm9260_timer_set_mode,
+	.name			= DRIVER_NAME,
+	.rating			= 200,
+	.features		= CLOCK_EVT_FEAT_PERIODIC |
+				  CLOCK_EVT_FEAT_ONESHOT,
+	.set_next_event		= asm9260_timer_set_next_event,
+	.set_state_shutdown	= asm9260_timer_shutdown,
+	.set_state_periodic	= asm9260_timer_set_periodic,
+	.set_state_oneshot	= asm9260_timer_set_oneshot,
+	.tick_resume		= asm9260_timer_shutdown,
 };
 
 static irqreturn_t asm9260_timer_interrupt(int irq, void *dev_id)

^ permalink raw reply related	[flat|nested] 85+ messages in thread

* Re: [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface
  2015-06-30  9:00     ` Viresh Kumar
@ 2015-06-30  9:20       ` Daniel Lezcano
  0 siblings, 0 replies; 85+ messages in thread
From: Daniel Lezcano @ 2015-06-30  9:20 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, linaro-kernel, linux-kernel, linux-arm-kernel,
	Oleksij Rempel

On 06/30/2015 11:00 AM, Viresh Kumar wrote:
> On 30-06-15, 10:25, Daniel Lezcano wrote:
>> Could you add in the changelog the subtle change with
>> set_mode(RESUME) and this code. As a default the timer was stopped
>> when entering in the set_mode function, now with the new API, this
>> is done explicitly.
>
>> Can you replace this line with a call to asm9260_timer_shutdown ?
>
> How does this look ?

Looks good to me.


-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 25/41] clocksource: tegra20: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 25/41] clocksource: tegra20: " Viresh Kumar
@ 2015-07-02 19:41   ` Daniel Lezcano
  2015-07-03  8:54     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Daniel Lezcano @ 2015-07-02 19:41 UTC (permalink / raw)
  To: Viresh Kumar, Thomas Gleixner
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Thierry Reding,
	Stephen Warren

On 06/18/2015 12:54 PM, Viresh Kumar wrote:
> Migrate tegra20 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.
>
> Cc: Thierry Reding <treding@nvidia.com>
> Cc: Stephen Warren <swarren@wwwdotorg.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---

[ ... ]

> +static int tegra_timer_shutdown(struct clock_event_device *evt)
>   {
> -	u32 reg;
> -
>   	timer_writel(0, TIMER3_BASE + TIMER_PTV);
> +	return 0;
> +}
>
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		reg = 0xC0000000 | ((1000000/HZ)-1);
> -		timer_writel(reg, TIMER3_BASE + TIMER_PTV);
> -		break;
> -	case CLOCK_EVT_MODE_ONESHOT:
> -		break;
> -	case CLOCK_EVT_MODE_UNUSED:
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	case CLOCK_EVT_MODE_RESUME:
> -		break;
> -	}
> +static int tegra_timer_set_periodic(struct clock_event_device *evt)
> +{
> +	u32 reg = 0xC0000000 | ((1000000 / HZ) - 1);
> +
> +	timer_writel(0, TIMER3_BASE + TIMER_PTV);

Replace with 'tegra_timer_shutdown'

> +	timer_writel(reg, TIMER3_BASE + TIMER_PTV);
> +	return 0;
>   }



-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 41/41] clocksource: zevio: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 41/41] clocksource: zevio: " Viresh Kumar
@ 2015-07-02 20:11   ` Daniel Lezcano
  2015-07-03  8:56     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Daniel Lezcano @ 2015-07-02 20:11 UTC (permalink / raw)
  To: Viresh Kumar, Thomas Gleixner
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Daniel Tang

On 06/18/2015 12:54 PM, Viresh Kumar wrote:
> Migrate zevio 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.
>
> Cc: Daniel Tang <dt.tangr@gmail.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---

[ ... ]

>   static irqreturn_t zevio_timer_interrupt(int irq, void *dev_id)
> @@ -162,7 +158,9 @@ static int __init zevio_timer_add(struct device_node *node)
>   	if (timer->interrupt_regs && irqnr) {
>   		timer->clkevt.name		= timer->clockevent_name;
>   		timer->clkevt.set_next_event	= zevio_timer_set_event;
> -		timer->clkevt.set_mode		= zevio_timer_set_mode;
> +		timer->clkevt.set_state_shutdown = zevio_timer_shutdown;
> +		timer->clkevt.set_state_oneshot = zevio_timer_set_oneshot;
> +		timer->clkevt.tick_resume	= zevio_timer_set_oneshot;

Why is tick_resume added here ?

>   		timer->clkevt.rating		= 200;
>   		timer->clkevt.cpumask		= cpu_all_mask;
>   		timer->clkevt.features		= CLOCK_EVT_FEAT_ONESHOT;
>


-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 39/41] clocksource: vf_pit: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 39/41] clocksource: vf_pit: " Viresh Kumar
@ 2015-07-03  8:10   ` Stefan Agner
  2015-07-03  8:57     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Stefan Agner @ 2015-07-03  8:10 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Jingchang Lu, Shawn Guo

On 2015-06-18 12:54, Viresh Kumar wrote:
> Migrate vf_pit 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.
> 
> Cc: Jingchang Lu <b35083@freescale.com>
> Cc: Stefan Agner <stefan@agner.ch>
> Cc: Shawn Guo <shawn.guo@linaro.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
>  drivers/clocksource/vf_pit_timer.c | 27 ++++++++++++---------------
>  1 file changed, 12 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/clocksource/vf_pit_timer.c
> b/drivers/clocksource/vf_pit_timer.c
> index b45ac6229b57..f07ba9932171 100644
> --- a/drivers/clocksource/vf_pit_timer.c
> +++ b/drivers/clocksource/vf_pit_timer.c
> @@ -86,20 +86,16 @@ static int pit_set_next_event(unsigned long delta,
>  	return 0;
>  }
>  
> -static void pit_set_mode(enum clock_event_mode mode,
> -				struct clock_event_device *evt)
> +static int pit_shutdown(struct clock_event_device *evt)
>  {
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		pit_set_next_event(cycle_per_jiffy, evt);
> -		break;
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -	case CLOCK_EVT_MODE_UNUSED:
> -		pit_timer_disable();
> -		break;
> -	default:
> -		break;
> -	}
> +	pit_timer_disable();
> +	return 0;
> +}
> +
> +static int pit_set_periodic(struct clock_event_device *evt)
> +{
> +	pit_set_next_event(cycle_per_jiffy, evt);
> +	return 0;
>  }
>  
>  static irqreturn_t pit_timer_interrupt(int irq, void *dev_id)
> @@ -114,7 +110,7 @@ static irqreturn_t pit_timer_interrupt(int irq,
> void *dev_id)
>  	 * and start the counter again. So software need to disable the timer
>  	 * to stop the counter loop in ONESHOT mode.
>  	 */
> -	if (likely(evt->mode == CLOCK_EVT_MODE_ONESHOT))
> +	if (likely(clockevent_state_oneshot(evt)))
>  		pit_timer_disable();
>  
>  	evt->event_handler(evt);
> @@ -125,7 +121,8 @@ static irqreturn_t pit_timer_interrupt(int irq,
> void *dev_id)
>  static struct clock_event_device clockevent_pit = {
>  	.name		= "VF pit timer",
>  	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> -	.set_mode	= pit_set_mode,
> +	.set_state_shutdown = pit_shutdown,
> +	.set_state_periodic = pit_set_periodic,

I'm not really familiar with the interface, but given that we announce
the feature CLOCK_EVT_FEAT_ONESHOT shouldn't we add a set_state_oneshot
callback here?

--
Stefan

>  	.set_next_event	= pit_set_next_event,
>  	.rating		= 300,
>  };


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 25/41] clocksource: tegra20: Migrate to new 'set-state' interface
  2015-07-02 19:41   ` Daniel Lezcano
@ 2015-07-03  8:54     ` Viresh Kumar
  0 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-07-03  8:54 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Thomas Gleixner, linaro-kernel, linux-kernel, linux-arm-kernel,
	Thierry Reding, Stephen Warren

On 02-07-15, 21:41, Daniel Lezcano wrote:
> >+	timer_writel(0, TIMER3_BASE + TIMER_PTV);
> 
> Replace with 'tegra_timer_shutdown'

Looks fine now ?

---------------8<-----------------------

Message-Id: <2b6d1a867e100033f1f406fda39d358a4db80733.1435913653.git.viresh.kumar@linaro.org>
From: Viresh Kumar <viresh.kumar@linaro.org>
Date: Fri, 27 Feb 2015 13:39:52 +0530
Subject: [PATCH] clocksource: tegra20: Migrate to new 'set-state' interface

Migrate tegra20 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.

Cc: Thierry Reding <treding@nvidia.com>
Cc: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/clocksource/tegra20_timer.c | 45 ++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/drivers/clocksource/tegra20_timer.c b/drivers/clocksource/tegra20_timer.c
index 5a112d72fc2d..6ebda1177e79 100644
--- a/drivers/clocksource/tegra20_timer.c
+++ b/drivers/clocksource/tegra20_timer.c
@@ -72,33 +72,36 @@ static int tegra_timer_set_next_event(unsigned long cycles,
 	return 0;
 }
 
-static void tegra_timer_set_mode(enum clock_event_mode mode,
-				    struct clock_event_device *evt)
+static inline void timer_shutdown(struct clock_event_device *evt)
 {
-	u32 reg;
-
 	timer_writel(0, TIMER3_BASE + TIMER_PTV);
+}
 
-	switch (mode) {
-	case CLOCK_EVT_MODE_PERIODIC:
-		reg = 0xC0000000 | ((1000000/HZ)-1);
-		timer_writel(reg, TIMER3_BASE + TIMER_PTV);
-		break;
-	case CLOCK_EVT_MODE_ONESHOT:
-		break;
-	case CLOCK_EVT_MODE_UNUSED:
-	case CLOCK_EVT_MODE_SHUTDOWN:
-	case CLOCK_EVT_MODE_RESUME:
-		break;
-	}
+static int tegra_timer_shutdown(struct clock_event_device *evt)
+{
+	timer_shutdown(evt);
+	return 0;
+}
+
+static int tegra_timer_set_periodic(struct clock_event_device *evt)
+{
+	u32 reg = 0xC0000000 | ((1000000 / HZ) - 1);
+
+	timer_shutdown(evt);
+	timer_writel(reg, TIMER3_BASE + TIMER_PTV);
+	return 0;
 }
 
 static struct clock_event_device tegra_clockevent = {
-	.name		= "timer0",
-	.rating		= 300,
-	.features	= CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
-	.set_next_event	= tegra_timer_set_next_event,
-	.set_mode	= tegra_timer_set_mode,
+	.name			= "timer0",
+	.rating			= 300,
+	.features		= CLOCK_EVT_FEAT_ONESHOT |
+				  CLOCK_EVT_FEAT_PERIODIC,
+	.set_next_event		= tegra_timer_set_next_event,
+	.set_state_shutdown	= tegra_timer_shutdown,
+	.set_state_periodic	= tegra_timer_set_periodic,
+	.set_state_oneshot	= tegra_timer_shutdown,
+	.tick_resume		= tegra_timer_shutdown,
 };
 
 static u64 notrace tegra_read_sched_clock(void)

^ permalink raw reply related	[flat|nested] 85+ messages in thread

* Re: [PATCH 41/41] clocksource: zevio: Migrate to new 'set-state' interface
  2015-07-02 20:11   ` Daniel Lezcano
@ 2015-07-03  8:56     ` Viresh Kumar
  2015-07-03  8:59       ` Daniel Lezcano
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-07-03  8:56 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Thomas Gleixner, linaro-kernel, linux-kernel, linux-arm-kernel,
	Daniel Tang

On 02-07-15, 22:11, Daniel Lezcano wrote:
> On 06/18/2015 12:54 PM, Viresh Kumar wrote:
> >Migrate zevio 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.
> >
> >Cc: Daniel Tang <dt.tangr@gmail.com>
> >Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> >---
> 
> [ ... ]
> 
> >  static irqreturn_t zevio_timer_interrupt(int irq, void *dev_id)
> >@@ -162,7 +158,9 @@ static int __init zevio_timer_add(struct device_node *node)
> >  	if (timer->interrupt_regs && irqnr) {
> >  		timer->clkevt.name		= timer->clockevent_name;
> >  		timer->clkevt.set_next_event	= zevio_timer_set_event;
> >-		timer->clkevt.set_mode		= zevio_timer_set_mode;
> >+		timer->clkevt.set_state_shutdown = zevio_timer_shutdown;
> >+		timer->clkevt.set_state_oneshot = zevio_timer_set_oneshot;
> >+		timer->clkevt.tick_resume	= zevio_timer_set_oneshot;
> 
> Why is tick_resume added here ?

I am assuming you are lost because of reviewing too many similar
patches, but anyway below was part of the diff and so resume was
required :)

-       switch (mode) {
-       case CLOCK_EVT_MODE_RESUME:
-       case CLOCK_EVT_MODE_ONESHOT:
-               /* Enable timer interrupts */
-               writel(TIMER_INTR_MSK, timer->interrupt_regs + IO_INTR_MSK);
-               writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
-               break;

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 39/41] clocksource: vf_pit: Migrate to new 'set-state' interface
  2015-07-03  8:10   ` Stefan Agner
@ 2015-07-03  8:57     ` Viresh Kumar
  2015-07-03 11:11       ` Stefan Agner
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-07-03  8:57 UTC (permalink / raw)
  To: Stefan Agner
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Jingchang Lu, Shawn Guo

On 03-07-15, 10:10, Stefan Agner wrote:
> >  	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> > -	.set_mode	= pit_set_mode,
> > +	.set_state_shutdown = pit_shutdown,
> > +	.set_state_periodic = pit_set_periodic,
> 
> I'm not really familiar with the interface, but given that we announce
> the feature CLOCK_EVT_FEAT_ONESHOT shouldn't we add a set_state_oneshot
> callback here?

We weren't doing anything in pit_set_mode(ONESHOT) and so that
callback is not implemented. In case you need to do something in
set_state_oneshot(), we can add it back.

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 41/41] clocksource: zevio: Migrate to new 'set-state' interface
  2015-07-03  8:56     ` Viresh Kumar
@ 2015-07-03  8:59       ` Daniel Lezcano
  0 siblings, 0 replies; 85+ messages in thread
From: Daniel Lezcano @ 2015-07-03  8:59 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, linaro-kernel, linux-kernel, linux-arm-kernel,
	Daniel Tang

On 07/03/2015 10:56 AM, Viresh Kumar wrote:
> On 02-07-15, 22:11, Daniel Lezcano wrote:
>> On 06/18/2015 12:54 PM, Viresh Kumar wrote:
>>> Migrate zevio 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.
>>>
>>> Cc: Daniel Tang <dt.tangr@gmail.com>
>>> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
>>> ---
>>
>> [ ... ]
>>
>>>   static irqreturn_t zevio_timer_interrupt(int irq, void *dev_id)
>>> @@ -162,7 +158,9 @@ static int __init zevio_timer_add(struct device_node *node)
>>>   	if (timer->interrupt_regs && irqnr) {
>>>   		timer->clkevt.name		= timer->clockevent_name;
>>>   		timer->clkevt.set_next_event	= zevio_timer_set_event;
>>> -		timer->clkevt.set_mode		= zevio_timer_set_mode;
>>> +		timer->clkevt.set_state_shutdown = zevio_timer_shutdown;
>>> +		timer->clkevt.set_state_oneshot = zevio_timer_set_oneshot;
>>> +		timer->clkevt.tick_resume	= zevio_timer_set_oneshot;
>>
>> Why is tick_resume added here ?
>
> I am assuming you are lost because of reviewing too many similar
> patches, but anyway below was part of the diff and so resume was
> required :)

Ah, yeah. I missed the RESUME. Thanks.


-- 
  <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 39/41] clocksource: vf_pit: Migrate to new 'set-state' interface
  2015-07-03  8:57     ` Viresh Kumar
@ 2015-07-03 11:11       ` Stefan Agner
  2015-07-03 11:17         ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Stefan Agner @ 2015-07-03 11:11 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Jingchang Lu, Shawn Guo

On 2015-07-03 10:57, Viresh Kumar wrote:
> On 03-07-15, 10:10, Stefan Agner wrote:
>> >  	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
>> > -	.set_mode	= pit_set_mode,
>> > +	.set_state_shutdown = pit_shutdown,
>> > +	.set_state_periodic = pit_set_periodic,
>>
>> I'm not really familiar with the interface, but given that we announce
>> the feature CLOCK_EVT_FEAT_ONESHOT shouldn't we add a set_state_oneshot
>> callback here?
> 
> We weren't doing anything in pit_set_mode(ONESHOT) and so that
> callback is not implemented. In case you need to do something in
> set_state_oneshot(), we can add it back.

True, weren't doing anything. I wonder if that is right. Afaik, we
should set the same timer for oneshot too, hence call
pit_set_next_event. With your change we can just reuse the same function
(pit_set_periodic) for set_state_oneshot.

To maintain the atomicity of the changes, this would need to be fixed in
a separate patch anyway. So this change looks good to me:

Acked-by: Stefan Agner <stefan@agner.ch>

I guess "clockevents: Allow set-state callbacks to be optional" makes it
before this patch? Otherwise we would call a null pointer...

--
Stefan

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 39/41] clocksource: vf_pit: Migrate to new 'set-state' interface
  2015-07-03 11:11       ` Stefan Agner
@ 2015-07-03 11:17         ` Viresh Kumar
  0 siblings, 0 replies; 85+ messages in thread
From: Viresh Kumar @ 2015-07-03 11:17 UTC (permalink / raw)
  To: Stefan Agner
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Jingchang Lu, Shawn Guo

On 03-07-15, 13:11, Stefan Agner wrote:
> On 2015-07-03 10:57, Viresh Kumar wrote:
> > On 03-07-15, 10:10, Stefan Agner wrote:
> >> >  	.features	= CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
> >> > -	.set_mode	= pit_set_mode,
> >> > +	.set_state_shutdown = pit_shutdown,
> >> > +	.set_state_periodic = pit_set_periodic,
> >>
> >> I'm not really familiar with the interface, but given that we announce
> >> the feature CLOCK_EVT_FEAT_ONESHOT shouldn't we add a set_state_oneshot
> >> callback here?
> > 
> > We weren't doing anything in pit_set_mode(ONESHOT) and so that
> > callback is not implemented. In case you need to do something in
> > set_state_oneshot(), we can add it back.
> 
> True, weren't doing anything. I wonder if that is right. Afaik, we
> should set the same timer for oneshot too, hence call
> pit_set_next_event. With your change we can just reuse the same function
> (pit_set_periodic) for set_state_oneshot.

pit_set_next_event() will be called by clockevents core directly after
tying to set the device in oneshot mode. And so no changes are
required.

> To maintain the atomicity of the changes, this would need to be fixed in
> a separate patch anyway. So this change looks good to me:
> 
> Acked-by: Stefan Agner <stefan@agner.ch>

Thanks.

> I guess "clockevents: Allow set-state callbacks to be optional" makes it
> before this patch? Otherwise we would call a null pointer...

Yeah, I have mentioned this in the cover-letter that there are
dependencies over clockevent core's next branch.

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 16/41] clocksource: pxa: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 16/41] clocksource: pxa: " Viresh Kumar
@ 2015-07-04 15:42   ` Robert Jarzmik
  2015-07-05  3:37     ` Viresh Kumar
  0 siblings, 1 reply; 85+ messages in thread
From: Robert Jarzmik @ 2015-07-04 15:42 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Russell King

Viresh Kumar <viresh.kumar@linaro.org> writes:

> @@ -88,26 +88,12 @@ pxa_osmr0_set_next_event(unsigned long delta, struct clock_event_device *dev)
>  	return (signed)(next - oscr) <= MIN_OSCR_DELTA ? -ETIME : 0;
>  }
>  
> -static void
> -pxa_osmr0_set_mode(enum clock_event_mode mode, struct clock_event_device *dev)
> +static int pxa_osmr0_shutdown(struct clock_event_device *evt)
>  {
> -	switch (mode) {
> -	case CLOCK_EVT_MODE_ONESHOT:
> -		timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
> -		timer_writel(OSSR_M0, OSSR);
> -		break;
> -
> -	case CLOCK_EVT_MODE_UNUSED:
> -	case CLOCK_EVT_MODE_SHUTDOWN:
> -		/* initializing, released, or preparing for suspend */
> -		timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
> -		timer_writel(OSSR_M0, OSSR);
> -		break;
> -
> -	case CLOCK_EVT_MODE_RESUME:
> -	case CLOCK_EVT_MODE_PERIODIC:
> -		break;
> -	}
> +	/* initializing, released, or preparing for suspend */
> +	timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
> +	timer_writel(OSSR_M0, OSSR);
> +	return 0;
For consistency, please leave an empty line before that return statement.

> @@ -147,13 +133,14 @@ static void pxa_timer_resume(struct clock_event_device *cedev)
>  #endif
>  
>  static struct clock_event_device ckevt_pxa_osmr0 = {
> -	.name		= "osmr0",
> -	.features	= CLOCK_EVT_FEAT_ONESHOT,
> -	.rating		= 200,
> -	.set_next_event	= pxa_osmr0_set_next_event,
> -	.set_mode	= pxa_osmr0_set_mode,
> -	.suspend	= pxa_timer_suspend,
> -	.resume		= pxa_timer_resume,
> +	.name			= "osmr0",
> +	.features		= CLOCK_EVT_FEAT_ONESHOT,
> +	.rating			= 200,
> +	.set_next_event		= pxa_osmr0_set_next_event,
> +	.set_state_shutdown	= pxa_osmr0_shutdown,
> +	.set_state_oneshot	= pxa_osmr0_shutdown,
A bit weird to have a "set_state_oneshot" function to point to a function called
"X_shutdown". As I don't have a clear idea on what's this new interface for,
I'll just hope it's the intended purpose. The code does look equivalent to me
anyway.

Apart from the cosmetic comment, once it is fixed :
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>

Cheers.

-- 
Robert

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 16/41] clocksource: pxa: Migrate to new 'set-state' interface
  2015-07-04 15:42   ` Robert Jarzmik
@ 2015-07-05  3:37     ` Viresh Kumar
  2015-07-06  6:13       ` Robert Jarzmik
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-07-05  3:37 UTC (permalink / raw)
  To: Robert Jarzmik
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Russell King

Hi Robert,

On 04-07-15, 17:42, Robert Jarzmik wrote:
> > +	/* initializing, released, or preparing for suspend */
> > +	timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
> > +	timer_writel(OSSR_M0, OSSR);
> > +	return 0;
> For consistency, please leave an empty line before that return statement.

Its already applied by Daniel now, and the change is too trivial to
request for an update to his tree. Maybe we should leave it as is for
now.

> > @@ -147,13 +133,14 @@ static void pxa_timer_resume(struct clock_event_device *cedev)
> >  #endif
> >  
> >  static struct clock_event_device ckevt_pxa_osmr0 = {
> > -	.name		= "osmr0",
> > -	.features	= CLOCK_EVT_FEAT_ONESHOT,
> > -	.rating		= 200,
> > -	.set_next_event	= pxa_osmr0_set_next_event,
> > -	.set_mode	= pxa_osmr0_set_mode,
> > -	.suspend	= pxa_timer_suspend,
> > -	.resume		= pxa_timer_resume,
> > +	.name			= "osmr0",
> > +	.features		= CLOCK_EVT_FEAT_ONESHOT,
> > +	.rating			= 200,
> > +	.set_next_event		= pxa_osmr0_set_next_event,
> > +	.set_state_shutdown	= pxa_osmr0_shutdown,
> > +	.set_state_oneshot	= pxa_osmr0_shutdown,
> A bit weird to have a "set_state_oneshot" function to point to a function called
> "X_shutdown".

What's weird (or looks weird) is that we stop the timer when requested
to switch to oneshot mode. But that's what we really wanted, because
set_next_event is the one that will program the timer in oneshot mode.

> As I don't have a clear idea on what's this new interface for,

It just provides per-state API's for what's being done in set_mode()
earlier.

> I'll just hope it's the intended purpose. The code does look equivalent to me
> anyway.
> 
> Apart from the cosmetic comment, once it is fixed :
> Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>

Thanks.

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 16/41] clocksource: pxa: Migrate to new 'set-state' interface
  2015-07-05  3:37     ` Viresh Kumar
@ 2015-07-06  6:13       ` Robert Jarzmik
  0 siblings, 0 replies; 85+ messages in thread
From: Robert Jarzmik @ 2015-07-06  6:13 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Russell King

Viresh Kumar <viresh.kumar@linaro.org> writes:

> Hi Robert,
>
> On 04-07-15, 17:42, Robert Jarzmik wrote:
>> > +	/* initializing, released, or preparing for suspend */
>> > +	timer_writel(timer_readl(OIER) & ~OIER_E0, OIER);
>> > +	timer_writel(OSSR_M0, OSSR);
>> > +	return 0;
>> For consistency, please leave an empty line before that return statement.
>
> Its already applied by Daniel now, and the change is too trivial to
> request for an update to his tree. Maybe we should leave it as is for
> now.
If it's applied it's indeed too late.

>> > +	.set_state_shutdown	= pxa_osmr0_shutdown,
>> > +	.set_state_oneshot	= pxa_osmr0_shutdown,
>> A bit weird to have a "set_state_oneshot" function to point to a function called
>> "X_shutdown".
>
> What's weird (or looks weird) is that we stop the timer when requested
> to switch to oneshot mode. But that's what we really wanted, because
> set_next_event is the one that will program the timer in oneshot mode.
Ok, thanks for the explanation.

Cheers.

-- 
Robert

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface Viresh Kumar
  2015-06-30  8:25   ` Daniel Lezcano
@ 2015-07-08  5:37   ` Vineet Gupta
  2015-07-08  5:43     ` Viresh Kumar
  1 sibling, 1 reply; 85+ messages in thread
From: Vineet Gupta @ 2015-07-08  5:37 UTC (permalink / raw)
  To: Viresh Kumar, Thomas Gleixner, Daniel Lezcano
  Cc: linaro-kernel, linux-kernel, linux-arm-kernel, Oleksij Rempel,
	linux-arch

On Thursday 18 June 2015 04:24 PM, Viresh Kumar wrote:
> Migrate asm9260 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.

Hi Viresh,

Is this series (and other one touching arch/arm/*) specific to ARM event timers.
Are you planning to fixup the drivers in arch/* or the respective maintainers need
to follow suit.

Thx,
-Vineet


^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface
  2015-07-08  5:37   ` Vineet Gupta
@ 2015-07-08  5:43     ` Viresh Kumar
  2015-07-08  6:14       ` Vineet Gupta
  0 siblings, 1 reply; 85+ messages in thread
From: Viresh Kumar @ 2015-07-08  5:43 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Oleksij Rempel, linux-arch

On 08-07-15, 11:07, Vineet Gupta wrote:
> Is this series (and other one touching arch/arm/*) specific to ARM event timers.
> Are you planning to fixup the drivers in arch/* or the respective maintainers need
> to follow suit.

Hi Vineet,

I am fixing all clockevent drivers available in Linux kernel, so you
need not worry :)

I stopped a bit because of a dependency patch, which just got included
in tip tree yesterday. Once that gets into next rc release (hopefully
-4.2-rc2), I will send all the patches I have. At that point, these
changes wouldn't have any dependency on clockevents tree and
maintainers like you can apply them directly.

Changes are kept here for testing by auto-bots, in case you wanna have
a look at arc patch :).

git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/linux.git clkevt/clocksource/set-state

-- 
viresh

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface
  2015-07-08  5:43     ` Viresh Kumar
@ 2015-07-08  6:14       ` Vineet Gupta
  0 siblings, 0 replies; 85+ messages in thread
From: Vineet Gupta @ 2015-07-08  6:14 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, linaro-kernel, linux-kernel,
	linux-arm-kernel, Oleksij Rempel, linux-arch

On Wednesday 08 July 2015 11:14 AM, Viresh Kumar wrote:
> On 08-07-15, 11:07, Vineet Gupta wrote:
>> Is this series (and other one touching arch/arm/*) specific to ARM event timers.
>> Are you planning to fixup the drivers in arch/* or the respective maintainers need
>> to follow suit.
> Hi Vineet,
>
> I am fixing all clockevent drivers available in Linux kernel, so you
> need not worry :)

Ok I can go back to sleeping peacefully again ;-)

> Changes are kept here for testing by auto-bots, in case you wanna have
> a look at arc patch :).
>
> git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/linux.git clkevt/clocksource/set-state

LGTM - I'll give it a spin when u send out the series on ml.

Thx,
-Vineet

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 15/41] clocksource: nomadik-mtu: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 15/41] clocksource: nomadik-mtu: " Viresh Kumar
@ 2015-07-14 11:11   ` Linus Walleij
  0 siblings, 0 replies; 85+ messages in thread
From: Linus Walleij @ 2015-07-14 11:11 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, Linaro Kernel Mailman List,
	linux-kernel, linux-arm-kernel

On Thu, Jun 18, 2015 at 12:54 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:

> Migrate nomadik-mtu 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.
>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 33/41] clocksource: integrator: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 33/41] clocksource: integrator: " Viresh Kumar
@ 2015-07-14 13:35   ` Linus Walleij
  0 siblings, 0 replies; 85+ messages in thread
From: Linus Walleij @ 2015-07-14 13:35 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, Linaro Kernel Mailman List,
	linux-kernel, linux-arm-kernel

On Thu, Jun 18, 2015 at 12:54 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:

> Migrate integrator 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.
>
> For oneshot mode the clkevt device was first getting disabled by
> clearing TIMER_CTRL_ENABLE bits in TIMER_CTRL register, followed by
> clearing TIMER_CTRL_PERIODIC bit. Both these are done with a single
> write operation now.
>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 38/41] clocksource: u300: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 38/41] clocksource: u300: " Viresh Kumar
@ 2015-07-14 13:36   ` Linus Walleij
  0 siblings, 0 replies; 85+ messages in thread
From: Linus Walleij @ 2015-07-14 13:36 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: Thomas Gleixner, Daniel Lezcano, Linaro Kernel Mailman List,
	linux-kernel, linux-arm-kernel

On Thu, Jun 18, 2015 at 12:54 PM, Viresh Kumar <viresh.kumar@linaro.org> wrote:

> Migrate u300 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.
>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

Acked-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 85+ messages in thread

* Re: [PATCH 14/41] clocksource: mxs: Migrate to new 'set-state' interface
  2015-06-18 10:54 ` [PATCH 14/41] clocksource: mxs: " Viresh Kumar
@ 2015-07-17  5:28   ` Stefan Wahren
  0 siblings, 0 replies; 85+ messages in thread
From: Stefan Wahren @ 2015-07-17  5:28 UTC (permalink / raw)
  To: Viresh Kumar
  Cc: linux-kernel, Shawn Guo, linux-arm-kernel, linaro-kernel,
	Thomas Gleixner, Daniel Lezcano, Fabio Estevam, Marek Vasut,
	Sascha Hauer

Hi Viresh,

[add Fabio, Marek and Pengutronix to CC]

> Viresh Kumar <viresh.kumar@linaro.org> hat am 18. Juni 2015 um 12:54
> geschrieben:
>
>
> Migrate mxs 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.
>
> Also drop:
> - 'mxs_clockevent_mode': as we have helpers available from core for the
> same.
> same state twice and so perhaps the check wasn't required.
> - 'clock_event_mode_label': CLOCK_EVT_MODE_* shouldn't be used anymore
> by drivers and it was used just to print old-state:new-state. The
> debug prints are called from mxs_irq_clear() now based on the
> state-name passed to it. The printed name will be same for shutdown
> and resume states as they use the same callback pointer.
>
> Cc: Shawn Guo <shawn.guo@linaro.org>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
>
> ---
> @Shawn: Please let me know if you want to print "resume" for resume
> state, as that will require a separate callback for resume state, just
> to print the name correctly. I thought it might not be worth enough :)
> ---

sorry for the late feedback. I've tested the patch with an i.MX23 and an i.MX28
board without any problems.

Tested-by: Stefan Wahren <stefan.wahren@i2se.com>

Regards
Stefan

^ permalink raw reply	[flat|nested] 85+ messages in thread

end of thread, other threads:[~2015-07-17  5:28 UTC | newest]

Thread overview: 85+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <cover.1434622147.git.viresh.kumar@linaro.org>
2015-06-18 10:54 ` [PATCH 01/41] clocksource: asm9260: Migrate to new 'set-state' interface Viresh Kumar
2015-06-30  8:25   ` Daniel Lezcano
2015-06-30  9:00     ` Viresh Kumar
2015-06-30  9:20       ` Daniel Lezcano
2015-07-08  5:37   ` Vineet Gupta
2015-07-08  5:43     ` Viresh Kumar
2015-07-08  6:14       ` Vineet Gupta
2015-06-18 10:54 ` [PATCH 02/41] clocksource: cadence_ttc: " Viresh Kumar
2015-06-25 23:15   ` Sören Brinkmann
2015-06-30  8:28   ` Daniel Lezcano
2015-06-18 10:54 ` [PATCH 03/41] clocksource: clps711x: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 04/41] clocksource: dummy_timer: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 05/41] clocksource: dw_apb: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 06/41] clocksource: exynos_mct: " Viresh Kumar
2015-06-18 16:38   ` Alexey Klimov
2015-06-19  2:14     ` Viresh Kumar
2015-06-18 10:54 ` [PATCH 07/41] clocksource: fsl_ftm: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 08/41] clocksource: i8253: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 09/41] clocksource: meson6: " Viresh Kumar
2015-06-20  6:53   ` Carlo Caione
2015-06-18 10:54 ` [PATCH 10/41] clocksource: metag_generic: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 11/41] clocksource: mips-gic: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 12/41] clocksource: moxart: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 13/41] clocksource: mtk: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 14/41] clocksource: mxs: " Viresh Kumar
2015-07-17  5:28   ` Stefan Wahren
2015-06-18 10:54 ` [PATCH 15/41] clocksource: nomadik-mtu: " Viresh Kumar
2015-07-14 11:11   ` Linus Walleij
2015-06-18 10:54 ` [PATCH 16/41] clocksource: pxa: " Viresh Kumar
2015-07-04 15:42   ` Robert Jarzmik
2015-07-05  3:37     ` Viresh Kumar
2015-07-06  6:13       ` Robert Jarzmik
2015-06-18 10:54 ` [PATCH 17/41] clocksource: qcom: " Viresh Kumar
2015-06-19 19:10   ` Stephen Boyd
2015-06-18 10:54 ` [PATCH 18/41] clocksource: rockchip: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 19/41] clocksource: samsung_pwm: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 20/41] clocksource: sh_cmt: " Viresh Kumar
2015-06-18 13:10   ` Laurent Pinchart
2015-06-18 10:54 ` [PATCH 21/41] clocksource: sh_mtu2: " Viresh Kumar
2015-06-18 13:10   ` Laurent Pinchart
2015-06-18 10:54 ` [PATCH 22/41] clocksource: sh_tmu: " Viresh Kumar
2015-06-18 13:10   ` Laurent Pinchart
2015-06-18 10:54 ` [PATCH 23/41] clocksource: sun4i: " Viresh Kumar
2015-06-18 12:01   ` Maxime Ripard
2015-06-18 12:23     ` Viresh Kumar
2015-06-19 10:30       ` Maxime Ripard
2015-06-18 10:54 ` [PATCH 24/41] clocksource: tcb_clksrc: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 25/41] clocksource: tegra20: " Viresh Kumar
2015-07-02 19:41   ` Daniel Lezcano
2015-07-03  8:54     ` Viresh Kumar
2015-06-18 10:54 ` [PATCH 26/41] clocksource: time-armada-370-xp: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 27/41] clocksource: efm32: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 28/41] clocksource: orion: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 29/41] clocksource: atlas7: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 30/41] clocksource: atmel: " Viresh Kumar
2015-06-18 14:28   ` Alexandre Belloni
2015-06-18 10:54 ` [PATCH 31/41] clocksource: atmel-st: " Viresh Kumar
2015-06-18 14:40   ` Alexandre Belloni
2015-06-19  1:49     ` Viresh Kumar
2015-06-19 11:48       ` Alexandre Belloni
2015-06-19 11:52         ` Viresh Kumar
2015-06-19 12:06           ` Alexandre Belloni
2015-06-18 10:54 ` [PATCH 32/41] clocksource: digicolor: " Viresh Kumar
2015-06-23 10:17   ` Baruch Siach
2015-06-23 10:21     ` Viresh Kumar
2015-06-18 10:54 ` [PATCH 33/41] clocksource: integrator: " Viresh Kumar
2015-07-14 13:35   ` Linus Walleij
2015-06-18 10:54 ` [PATCH 34/41] clocksource: keystone: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 35/41] clocksource: prima2: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 36/41] clocksource: stm32: " Viresh Kumar
2015-06-18 11:09   ` Maxime Coquelin
2015-06-18 11:32     ` Viresh Kumar
2015-06-18 10:54 ` [PATCH 37/41] clocksource: sun5i: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 38/41] clocksource: u300: " Viresh Kumar
2015-07-14 13:36   ` Linus Walleij
2015-06-18 10:54 ` [PATCH 39/41] clocksource: vf_pit: " Viresh Kumar
2015-07-03  8:10   ` Stefan Agner
2015-07-03  8:57     ` Viresh Kumar
2015-07-03 11:11       ` Stefan Agner
2015-07-03 11:17         ` Viresh Kumar
2015-06-18 10:54 ` [PATCH 40/41] clocksource: vt8500: " Viresh Kumar
2015-06-18 10:54 ` [PATCH 41/41] clocksource: zevio: " Viresh Kumar
2015-07-02 20:11   ` Daniel Lezcano
2015-07-03  8:56     ` Viresh Kumar
2015-07-03  8:59       ` Daniel Lezcano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).