The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros
@ 2015-11-08 22:36 Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 02/10] clocksource/drivers/h8300: Remove pointless headers for TPU Daniel Lezcano
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

Some macros are unused, delete them.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_tpu.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/clocksource/h8300_tpu.c b/drivers/clocksource/h8300_tpu.c
index ed0b493..576dae6 100644
--- a/drivers/clocksource/h8300_tpu.c
+++ b/drivers/clocksource/h8300_tpu.c
@@ -20,16 +20,9 @@
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
 
-#define TCR	0
-#define TMDR	1
-#define TIOR	2
-#define TER	4
-#define TSR	5
-#define TCNT	6
-#define TGRA	8
-#define TGRB	10
-#define TGRC	12
-#define TGRD	14
+#define TCR	0x0
+#define TSR	0x5
+#define TCNT	0x6
 
 struct tpu_priv {
 	struct clocksource cs;
-- 
1.9.1


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

* [RFC PATCH 02/10] clocksource/drivers/h8300: Remove pointless headers for TPU
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 03/10] clocksource/drivers/h8300_timer8: Remove unused headers Daniel Lezcano
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_tpu.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/clocksource/h8300_tpu.c b/drivers/clocksource/h8300_tpu.c
index 576dae6..c1eef42 100644
--- a/drivers/clocksource/h8300_tpu.c
+++ b/drivers/clocksource/h8300_tpu.c
@@ -6,14 +6,9 @@
  */
 
 #include <linux/errno.h>
-#include <linux/sched.h>
 #include <linux/kernel.h>
-#include <linux/interrupt.h>
 #include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
 #include <linux/clocksource.h>
-#include <linux/module.h>
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/of.h>
-- 
1.9.1


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

* [RFC PATCH 03/10] clocksource/drivers/h8300_timer8: Remove unused headers
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 02/10] clocksource/drivers/h8300: Remove pointless headers for TPU Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 04/10] clocksource/drivers/h8300_timer8: Remove unused macros Daniel Lezcano
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_timer8.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index f0680eb..8ac39a5 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -8,21 +8,16 @@
  */
 
 #include <linux/errno.h>
-#include <linux/sched.h>
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
-#include <linux/slab.h>
 #include <linux/clockchips.h>
-#include <linux/module.h>
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
 
-#include <asm/irq.h>
-
 #define _8TCR	0
 #define _8TCSR	2
 #define TCORA	4
-- 
1.9.1


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

* [RFC PATCH 04/10] clocksource/drivers/h8300_timer8: Remove unused macros
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 02/10] clocksource/drivers/h8300: Remove pointless headers for TPU Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 03/10] clocksource/drivers/h8300_timer8: Remove unused headers Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 05/10] clocksource/drivers/h8300_timer8: Remove PERIODIC and ONESHOT macro Daniel Lezcano
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_timer8.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index 8ac39a5..598bea2 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -24,7 +24,6 @@
 #define TCORB	6
 #define _8TCNT	8
 
-#define FLAG_REPROGRAM (1 << 0)
 #define FLAG_SKIPEVENT (1 << 1)
 #define FLAG_IRQCONTEXT (1 << 2)
 #define FLAG_STARTED (1 << 3)
@@ -32,9 +31,6 @@
 #define ONESHOT  0
 #define PERIODIC 1
 
-#define RELATIVE 0
-#define ABSOLUTE 1
-
 #define SCALE 64
 
 struct timer8_priv {
-- 
1.9.1


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

* [RFC PATCH 05/10] clocksource/drivers/h8300_timer8: Remove PERIODIC and ONESHOT macro
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
                   ` (2 preceding siblings ...)
  2015-11-08 22:36 ` [RFC PATCH 04/10] clocksource/drivers/h8300_timer8: Remove unused macros Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 06/10] clocksource/drivers/h8300_timer8: Fix irq return value check Daniel Lezcano
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

Specify the delta as parameter for the timer8_clock_event_start function
instead of using a macro to tell PERIODIC or ONESHOT.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_timer8.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index 598bea2..f66cd6f 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -28,9 +28,6 @@
 #define FLAG_IRQCONTEXT (1 << 2)
 #define FLAG_STARTED (1 << 3)
 
-#define ONESHOT  0
-#define PERIODIC 1
-
 #define SCALE 64
 
 struct timer8_priv {
@@ -147,7 +144,7 @@ static inline struct timer8_priv *ced_to_priv(struct clock_event_device *ced)
 	return container_of(ced, struct timer8_priv, ced);
 }
 
-static void timer8_clock_event_start(struct timer8_priv *p, int periodic)
+static void timer8_clock_event_start(struct timer8_priv *p, unsigned long delta)
 {
 	struct clock_event_device *ced = &p->ced;
 
@@ -158,7 +155,7 @@ static void timer8_clock_event_start(struct timer8_priv *p, int periodic)
 	ced->max_delta_ns = clockevent_delta2ns(0xffff, ced);
 	ced->min_delta_ns = clockevent_delta2ns(0x0001, ced);
 
-	timer8_set_next(p, periodic?(p->rate + HZ/2) / HZ:0x10000);
+	timer8_set_next(p, delta);
 }
 
 static int timer8_clock_event_shutdown(struct clock_event_device *ced)
@@ -173,7 +170,7 @@ static int timer8_clock_event_periodic(struct clock_event_device *ced)
 
 	pr_info("%s: used for periodic clock events\n", ced->name);
 	timer8_stop(p);
-	timer8_clock_event_start(p, PERIODIC);
+	timer8_clock_event_start(p, (p->rate + HZ/2) / HZ);
 
 	return 0;
 }
@@ -184,7 +181,7 @@ static int timer8_clock_event_oneshot(struct clock_event_device *ced)
 
 	pr_info("%s: used for oneshot clock events\n", ced->name);
 	timer8_stop(p);
-	timer8_clock_event_start(p, ONESHOT);
+	timer8_clock_event_start(p, 0x10000);
 
 	return 0;
 }
-- 
1.9.1


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

* [RFC PATCH 06/10] clocksource/drivers/h8300_timer8: Fix irq return value check
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
                   ` (3 preceding siblings ...)
  2015-11-08 22:36 ` [RFC PATCH 05/10] clocksource/drivers/h8300_timer8: Remove PERIODIC and ONESHOT macro Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 07/10] clocksource/drivers/h8300_timer8: Remove pointless irq re-entrant safe code Daniel Lezcano
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

The value returned in case of error for the 'irq_of_parse_and_map' function is
zero in case of error. Fix the check in the init code.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_timer8.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index f66cd6f..680f65b 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -230,7 +230,7 @@ static void __init h8300_8timer_init(struct device_node *node)
 	}
 
 	irq = irq_of_parse_and_map(node, 0);
-	if (irq < 0) {
+	if (!irq) {
 		pr_err("failed to get irq for clockevent\n");
 		goto unmap_reg;
 	}
-- 
1.9.1


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

* [RFC PATCH 07/10] clocksource/drivers/h8300_timer8: Remove pointless irq re-entrant safe code
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
                   ` (4 preceding siblings ...)
  2015-11-08 22:36 ` [RFC PATCH 06/10] clocksource/drivers/h8300_timer8: Fix irq return value check Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 08/10] clocksource/drivers/h8300_timer8: Remove irq and lock legacy code Daniel Lezcano
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

The current code assumes the interrupt function is re-entrant.

That is not correct. An interrupt handler is never invoked concurrently. The
interrupt line is masked on all processors.

Remove the chewing flags in the code.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_timer8.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index 680f65b..ba219cf 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -24,8 +24,6 @@
 #define TCORB	6
 #define _8TCNT	8
 
-#define FLAG_SKIPEVENT (1 << 1)
-#define FLAG_IRQCONTEXT (1 << 2)
 #define FLAG_STARTED (1 << 3)
 
 #define SCALE 64
@@ -67,14 +65,13 @@ static irqreturn_t timer8_interrupt(int irq, void *dev_id)
 
 	ctrl_outb(ctrl_inb(p->mapbase + _8TCSR) & ~0x40,
 		  p->mapbase + _8TCSR);
-	p->flags |= FLAG_IRQCONTEXT;
+
 	ctrl_outw(p->tcora, p->mapbase + TCORA);
-	if (!(p->flags & FLAG_SKIPEVENT)) {
-		if (clockevent_state_oneshot(&p->ced))
-			ctrl_outw(0x0000, p->mapbase + _8TCR);
-		p->ced.event_handler(&p->ced);
-	}
-	p->flags &= ~(FLAG_SKIPEVENT | FLAG_IRQCONTEXT);
+
+	if (clockevent_state_oneshot(&p->ced))
+		ctrl_outw(0x0000, p->mapbase + _8TCR);
+
+	p->ced.event_handler(&p->ced);
 
 	return IRQ_HANDLED;
 }
-- 
1.9.1


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

* [RFC PATCH 08/10] clocksource/drivers/h8300_timer8: Remove irq and lock legacy code
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
                   ` (5 preceding siblings ...)
  2015-11-08 22:36 ` [RFC PATCH 07/10] clocksource/drivers/h8300_timer8: Remove pointless irq re-entrant safe code Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 09/10] h8300: Rename ctlr_out/in[bwl] to read/write[bwl] Daniel Lezcano
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

The time framawork takes care of disabling the interrupts and takes a lock
to prevent races.

Remove the legacy code in the driver taking care of the races.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_timer8.c | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index ba219cf..0885014 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -31,7 +31,6 @@
 struct timer8_priv {
 	struct clock_event_device ced;
 	unsigned long mapbase;
-	raw_spinlock_t lock;
 	unsigned long flags;
 	unsigned int rate;
 	unsigned int tcora;
@@ -78,10 +77,8 @@ static irqreturn_t timer8_interrupt(int irq, void *dev_id)
 
 static void timer8_set_next(struct timer8_priv *p, unsigned long delta)
 {
-	unsigned long flags;
 	unsigned long now;
 
-	raw_spin_lock_irqsave(&p->lock, flags);
 	if (delta >= 0x10000)
 		dev_warn(&p->pdev->dev, "delta out of range\n");
 	now = timer8_get_counter(p);
@@ -91,8 +88,6 @@ static void timer8_set_next(struct timer8_priv *p, unsigned long delta)
 		ctrl_outw(delta, p->mapbase + TCORA);
 	else
 		ctrl_outw(now + 1, p->mapbase + TCORA);
-
-	raw_spin_unlock_irqrestore(&p->lock, flags);
 }
 
 static int timer8_enable(struct timer8_priv *p)
@@ -108,9 +103,6 @@ static int timer8_enable(struct timer8_priv *p)
 static int timer8_start(struct timer8_priv *p)
 {
 	int ret = 0;
-	unsigned long flags;
-
-	raw_spin_lock_irqsave(&p->lock, flags);
 
 	if (!(p->flags & FLAG_STARTED))
 		ret = timer8_enable(p);
@@ -120,20 +112,12 @@ static int timer8_start(struct timer8_priv *p)
 	p->flags |= FLAG_STARTED;
 
  out:
-	raw_spin_unlock_irqrestore(&p->lock, flags);
-
 	return ret;
 }
 
 static void timer8_stop(struct timer8_priv *p)
 {
-	unsigned long flags;
-
-	raw_spin_lock_irqsave(&p->lock, flags);
-
 	ctrl_outw(0x0000, p->mapbase + _8TCR);
-
-	raw_spin_unlock_irqrestore(&p->lock, flags);
 }
 
 static inline struct timer8_priv *ced_to_priv(struct clock_event_device *ced)
-- 
1.9.1


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

* [RFC PATCH 09/10] h8300: Rename ctlr_out/in[bwl] to read/write[bwl]
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
                   ` (6 preceding siblings ...)
  2015-11-08 22:36 ` [RFC PATCH 08/10] clocksource/drivers/h8300_timer8: Remove irq and lock legacy code Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:36 ` [RFC PATCH 10/10] clocksource/drivers/h8300_timer8: Retrieve the clock rate at init time Daniel Lezcano
  2015-11-08 22:38 ` [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

For the sake of consistency, let rename all ctrl_out/in calls to the write/read
calls so we have the same API consistent with the other architectures hence
open the door for the increasing of the test compilation coverage.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 arch/h8300/include/asm/io.h         | 12 ++++++------
 arch/h8300/kernel/setup.c           |  8 ++++----
 drivers/clocksource/h8300_timer16.c | 20 ++++++++++----------
 drivers/clocksource/h8300_timer8.c  | 30 +++++++++++++++---------------
 drivers/clocksource/h8300_tpu.c     | 20 ++++++++++----------
 5 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/arch/h8300/include/asm/io.h b/arch/h8300/include/asm/io.h
index 1d09b2f..eed2218 100644
--- a/arch/h8300/include/asm/io.h
+++ b/arch/h8300/include/asm/io.h
@@ -6,32 +6,32 @@
 #include <asm-generic/io.h>
 
 /* H8/300 internal I/O functions */
-static inline unsigned char ctrl_inb(unsigned long addr)
+static inline unsigned char readb(unsigned long addr)
 {
 	return *(volatile unsigned char *)addr;
 }
 
-static inline unsigned short ctrl_inw(unsigned long addr)
+static inline unsigned short readw(unsigned long addr)
 {
 	return *(volatile unsigned short *)addr;
 }
 
-static inline unsigned long ctrl_inl(unsigned long addr)
+static inline unsigned long readl(unsigned long addr)
 {
 	return *(volatile unsigned long *)addr;
 }
 
-static inline void ctrl_outb(unsigned char b, unsigned long addr)
+static inline void writeb(unsigned char b, unsigned long addr)
 {
 	*(volatile unsigned char *)addr = b;
 }
 
-static inline void ctrl_outw(unsigned short b, unsigned long addr)
+static inline void writew(unsigned short b, unsigned long addr)
 {
 	*(volatile unsigned short *)addr = b;
 }
 
-static inline void ctrl_outl(unsigned long b, unsigned long addr)
+static inline void writel(unsigned long b, unsigned long addr)
 {
 	*(volatile unsigned long *)addr = b;
 }
diff --git a/arch/h8300/kernel/setup.c b/arch/h8300/kernel/setup.c
index 0fd1fe6..9b92aea 100644
--- a/arch/h8300/kernel/setup.c
+++ b/arch/h8300/kernel/setup.c
@@ -206,14 +206,14 @@ device_initcall(device_probe);
 #define get_wait(base, addr) ({		\
 	int baddr;			\
 	baddr = ((addr) / 0x200000 * 2);			     \
-	w *= (ctrl_inw((unsigned long)(base) + 2) & (3 << baddr)) + 1;	\
+	w *= (readw((unsigned long)(base) + 2) & (3 << baddr)) + 1;	\
 	})
 #endif
 #if defined(CONFIG_CPU_H8S)
 #define get_wait(base, addr) ({		\
 	int baddr;			\
 	baddr = ((addr) / 0x200000 * 16);			     \
-	w *= (ctrl_inl((unsigned long)(base) + 2) & (7 << baddr)) + 1;	\
+	w *= (readl((unsigned long)(base) + 2) & (7 << baddr)) + 1;	\
 	})
 #endif
 
@@ -227,8 +227,8 @@ static __init int access_timing(void)
 
 	bsc = of_find_compatible_node(NULL, NULL, "renesas,h8300-bsc");
 	base = of_iomap(bsc, 0);
-	w = (ctrl_inb((unsigned long)base + 0) & bit)?2:1;
-	if (ctrl_inb((unsigned long)base + 1) & bit)
+	w = (readb((unsigned long)base + 0) & bit)?2:1;
+	if (readb((unsigned long)base + 1) & bit)
 		w *= get_wait(base, addr);
 	else
 		w *= 2;
diff --git a/drivers/clocksource/h8300_timer16.c b/drivers/clocksource/h8300_timer16.c
index cdf0d83..2472da1 100644
--- a/drivers/clocksource/h8300_timer16.c
+++ b/drivers/clocksource/h8300_timer16.c
@@ -69,15 +69,15 @@ static unsigned long timer16_get_counter(struct timer16_priv *p)
 	unsigned long v1, v2, v3;
 	int o1, o2;
 
-	o1 = ctrl_inb(p->mapcommon + TISRC) & p->ovf;
+	o1 = readb(p->mapcommon + TISRC) & p->ovf;
 
 	/* Make sure the timer value is stable. Stolen from acpi_pm.c */
 	do {
 		o2 = o1;
-		v1 = ctrl_inw(p->mapbase + TCNT);
-		v2 = ctrl_inw(p->mapbase + TCNT);
-		v3 = ctrl_inw(p->mapbase + TCNT);
-		o1 = ctrl_inb(p->mapcommon + TISRC) & p->ovf;
+		v1 = readw(p->mapbase + TCNT);
+		v2 = readw(p->mapbase + TCNT);
+		v3 = readw(p->mapbase + TCNT);
+		o1 = readb(p->mapcommon + TISRC) & p->ovf;
 	} while (unlikely((o1 != o2) || (v1 > v2 && v1 < v3)
 			  || (v2 > v3 && v2 < v1) || (v3 > v1 && v3 < v2)));
 
@@ -90,7 +90,7 @@ static irqreturn_t timer16_interrupt(int irq, void *dev_id)
 {
 	struct timer16_priv *p = (struct timer16_priv *)dev_id;
 
-	ctrl_outb(ctrl_inb(p->mapcommon + TISRA) & ~p->imfa,
+	writeb(readb(p->mapcommon + TISRA) & ~p->imfa,
 		  p->mapcommon + TISRA);
 	p->total_cycles += 0x10000;
 
@@ -123,9 +123,9 @@ static int timer16_enable(struct clocksource *cs)
 	WARN_ON(p->cs_enabled);
 
 	p->total_cycles = 0;
-	ctrl_outw(0x0000, p->mapbase + TCNT);
-	ctrl_outb(0x83, p->mapbase + TCR);
-	ctrl_outb(ctrl_inb(p->mapcommon + TSTR) | p->enb,
+	writew(0x0000, p->mapbase + TCNT);
+	writeb(0x83, p->mapbase + TCR);
+	writeb(readb(p->mapcommon + TSTR) | p->enb,
 		  p->mapcommon + TSTR);
 
 	p->cs_enabled = true;
@@ -138,7 +138,7 @@ static void timer16_disable(struct clocksource *cs)
 
 	WARN_ON(!p->cs_enabled);
 
-	ctrl_outb(ctrl_inb(p->mapcommon + TSTR) & ~p->enb,
+	writeb(readb(p->mapcommon + TSTR) & ~p->enb,
 		  p->mapcommon + TSTR);
 
 	p->cs_enabled = false;
diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index 0885014..cf0feee 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -42,15 +42,15 @@ static unsigned long timer8_get_counter(struct timer8_priv *p)
 	unsigned long v1, v2, v3;
 	int o1, o2;
 
-	o1 = ctrl_inb(p->mapbase + _8TCSR) & 0x20;
+	o1 = readb(p->mapbase + _8TCSR) & 0x20;
 
 	/* Make sure the timer value is stable. Stolen from acpi_pm.c */
 	do {
 		o2 = o1;
-		v1 = ctrl_inw(p->mapbase + _8TCNT);
-		v2 = ctrl_inw(p->mapbase + _8TCNT);
-		v3 = ctrl_inw(p->mapbase + _8TCNT);
-		o1 = ctrl_inb(p->mapbase + _8TCSR) & 0x20;
+		v1 = readw(p->mapbase + _8TCNT);
+		v2 = readw(p->mapbase + _8TCNT);
+		v3 = readw(p->mapbase + _8TCNT);
+		o1 = readb(p->mapbase + _8TCSR) & 0x20;
 	} while (unlikely((o1 != o2) || (v1 > v2 && v1 < v3)
 			  || (v2 > v3 && v2 < v1) || (v3 > v1 && v3 < v2)));
 
@@ -62,13 +62,13 @@ static irqreturn_t timer8_interrupt(int irq, void *dev_id)
 {
 	struct timer8_priv *p = dev_id;
 
-	ctrl_outb(ctrl_inb(p->mapbase + _8TCSR) & ~0x40,
+	writeb(readb(p->mapbase + _8TCSR) & ~0x40,
 		  p->mapbase + _8TCSR);
 
-	ctrl_outw(p->tcora, p->mapbase + TCORA);
+	writew(p->tcora, p->mapbase + TCORA);
 
 	if (clockevent_state_oneshot(&p->ced))
-		ctrl_outw(0x0000, p->mapbase + _8TCR);
+		writew(0x0000, p->mapbase + _8TCR);
 
 	p->ced.event_handler(&p->ced);
 
@@ -83,19 +83,19 @@ static void timer8_set_next(struct timer8_priv *p, unsigned long delta)
 		dev_warn(&p->pdev->dev, "delta out of range\n");
 	now = timer8_get_counter(p);
 	p->tcora = delta;
-	ctrl_outb(ctrl_inb(p->mapbase + _8TCR) | 0x40, p->mapbase + _8TCR);
+	writeb(readb(p->mapbase + _8TCR) | 0x40, p->mapbase + _8TCR);
 	if (delta > now)
-		ctrl_outw(delta, p->mapbase + TCORA);
+		writew(delta, p->mapbase + TCORA);
 	else
-		ctrl_outw(now + 1, p->mapbase + TCORA);
+		writew(now + 1, p->mapbase + TCORA);
 }
 
 static int timer8_enable(struct timer8_priv *p)
 {
 	p->rate = clk_get_rate(p->pclk) / SCALE;
-	ctrl_outw(0xffff, p->mapbase + TCORA);
-	ctrl_outw(0x0000, p->mapbase + _8TCNT);
-	ctrl_outw(0x0c02, p->mapbase + _8TCR);
+	writew(0xffff, p->mapbase + TCORA);
+	writew(0x0000, p->mapbase + _8TCNT);
+	writew(0x0c02, p->mapbase + _8TCR);
 
 	return 0;
 }
@@ -117,7 +117,7 @@ static int timer8_start(struct timer8_priv *p)
 
 static void timer8_stop(struct timer8_priv *p)
 {
-	ctrl_outw(0x0000, p->mapbase + _8TCR);
+	writew(0x0000, p->mapbase + _8TCR);
 }
 
 static inline struct timer8_priv *ced_to_priv(struct clock_event_device *ced)
diff --git a/drivers/clocksource/h8300_tpu.c b/drivers/clocksource/h8300_tpu.c
index c1eef42..1f67a38 100644
--- a/drivers/clocksource/h8300_tpu.c
+++ b/drivers/clocksource/h8300_tpu.c
@@ -31,8 +31,8 @@ static inline unsigned long read_tcnt32(struct tpu_priv *p)
 {
 	unsigned long tcnt;
 
-	tcnt = ctrl_inw(p->mapbase1 + TCNT) << 16;
-	tcnt |= ctrl_inw(p->mapbase2 + TCNT);
+	tcnt = readw(p->mapbase1 + TCNT) << 16;
+	tcnt |= readw(p->mapbase2 + TCNT);
 	return tcnt;
 }
 
@@ -41,7 +41,7 @@ static int tpu_get_counter(struct tpu_priv *p, unsigned long long *val)
 	unsigned long v1, v2, v3;
 	int o1, o2;
 
-	o1 = ctrl_inb(p->mapbase1 + TSR) & 0x10;
+	o1 = readb(p->mapbase1 + TSR) & 0x10;
 
 	/* Make sure the timer value is stable. Stolen from acpi_pm.c */
 	do {
@@ -49,7 +49,7 @@ static int tpu_get_counter(struct tpu_priv *p, unsigned long long *val)
 		v1 = read_tcnt32(p);
 		v2 = read_tcnt32(p);
 		v3 = read_tcnt32(p);
-		o1 = ctrl_inb(p->mapbase1 + TSR) & 0x10;
+		o1 = readb(p->mapbase1 + TSR) & 0x10;
 	} while (unlikely((o1 != o2) || (v1 > v2 && v1 < v3)
 			  || (v2 > v3 && v2 < v1) || (v3 > v1 && v3 < v2)));
 
@@ -82,10 +82,10 @@ static int tpu_clocksource_enable(struct clocksource *cs)
 
 	WARN_ON(p->cs_enabled);
 
-	ctrl_outw(0, p->mapbase1 + TCNT);
-	ctrl_outw(0, p->mapbase2 + TCNT);
-	ctrl_outb(0x0f, p->mapbase1 + TCR);
-	ctrl_outb(0x03, p->mapbase2 + TCR);
+	writew(0, p->mapbase1 + TCNT);
+	writew(0, p->mapbase2 + TCNT);
+	writeb(0x0f, p->mapbase1 + TCR);
+	writeb(0x03, p->mapbase2 + TCR);
 
 	p->cs_enabled = true;
 	return 0;
@@ -97,8 +97,8 @@ static void tpu_clocksource_disable(struct clocksource *cs)
 
 	WARN_ON(!p->cs_enabled);
 
-	ctrl_outb(0, p->mapbase1 + TCR);
-	ctrl_outb(0, p->mapbase2 + TCR);
+	writeb(0, p->mapbase1 + TCR);
+	writeb(0, p->mapbase2 + TCR);
 	p->cs_enabled = false;
 }
 
-- 
1.9.1


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

* [RFC PATCH 10/10] clocksource/drivers/h8300_timer8: Retrieve the clock rate at init time
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
                   ` (7 preceding siblings ...)
  2015-11-08 22:36 ` [RFC PATCH 09/10] h8300: Rename ctlr_out/in[bwl] to read/write[bwl] Daniel Lezcano
@ 2015-11-08 22:36 ` Daniel Lezcano
  2015-11-08 22:38 ` [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:36 UTC (permalink / raw)
  To: daniel.lezcano, ysato
  Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE

The current code retrieves the rate value when the timer is enabled which
occurs each time a timer is re-armed. Except if the clock frequency has changed
magically I don't see why this should be done each time.

Retrieve the clock rate value at init time only.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/h8300_timer8.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
index cf0feee..020f109 100644
--- a/drivers/clocksource/h8300_timer8.c
+++ b/drivers/clocksource/h8300_timer8.c
@@ -34,7 +34,6 @@ struct timer8_priv {
 	unsigned long flags;
 	unsigned int rate;
 	unsigned int tcora;
-	struct clk *pclk;
 };
 
 static unsigned long timer8_get_counter(struct timer8_priv *p)
@@ -92,7 +91,6 @@ static void timer8_set_next(struct timer8_priv *p, unsigned long delta)
 
 static int timer8_enable(struct timer8_priv *p)
 {
-	p->rate = clk_get_rate(p->pclk) / SCALE;
 	writew(0xffff, p->mapbase + TCORA);
 	writew(0x0000, p->mapbase + _8TCNT);
 	writew(0x0c02, p->mapbase + _8TCR);
@@ -102,16 +100,15 @@ static int timer8_enable(struct timer8_priv *p)
 
 static int timer8_start(struct timer8_priv *p)
 {
-	int ret = 0;
+	int ret;
 
-	if (!(p->flags & FLAG_STARTED))
-		ret = timer8_enable(p);
+	if ((p->flags & FLAG_STARTED))
+		return 0;
 
-	if (ret)
-		goto out;
-	p->flags |= FLAG_STARTED;
+	ret = timer8_enable(p);
+	if (!ret)
+		p->flags |= FLAG_STARTED;
 
- out:
 	return ret;
 }
 
@@ -217,7 +214,12 @@ static void __init h8300_8timer_init(struct device_node *node)
 	}
 
 	timer8_priv.mapbase = (unsigned long)base;
-	timer8_priv.pclk = clk;
+
+	rate = clk_get_rate(clk) / SCALE;
+	if (!rate) {
+		pr_err("Failed to get rate for the clocksource\n");
+		goto unmap_reg;
+	}
 
 	ret = request_irq(irq, timer8_interrupt,
 			  IRQF_TIMER, timer8_priv.ced.name, &timer8_priv);
@@ -225,10 +227,10 @@ static void __init h8300_8timer_init(struct device_node *node)
 		pr_err("failed to request irq %d for clockevent\n", irq);
 		goto unmap_reg;
 	}
-	rate = clk_get_rate(clk) / SCALE;
+
 	clockevents_config_and_register(&timer8_priv.ced, rate, 1, 0x0000ffff);
-	return;
 
+	return;
 unmap_reg:
 	iounmap(base);
 free_clk:
-- 
1.9.1


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

* Re: [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros
  2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
                   ` (8 preceding siblings ...)
  2015-11-08 22:36 ` [RFC PATCH 10/10] clocksource/drivers/h8300_timer8: Retrieve the clock rate at init time Daniel Lezcano
@ 2015-11-08 22:38 ` Daniel Lezcano
  9 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2015-11-08 22:38 UTC (permalink / raw)
  To: ysato; +Cc: tglx, linux-kernel, moderated list:H8/300 ARCHITECTURE


Series not compiled, not tested.

Greetings

   -- 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] 11+ messages in thread

end of thread, other threads:[~2015-11-08 22:38 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-08 22:36 [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 02/10] clocksource/drivers/h8300: Remove pointless headers for TPU Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 03/10] clocksource/drivers/h8300_timer8: Remove unused headers Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 04/10] clocksource/drivers/h8300_timer8: Remove unused macros Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 05/10] clocksource/drivers/h8300_timer8: Remove PERIODIC and ONESHOT macro Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 06/10] clocksource/drivers/h8300_timer8: Fix irq return value check Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 07/10] clocksource/drivers/h8300_timer8: Remove pointless irq re-entrant safe code Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 08/10] clocksource/drivers/h8300_timer8: Remove irq and lock legacy code Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 09/10] h8300: Rename ctlr_out/in[bwl] to read/write[bwl] Daniel Lezcano
2015-11-08 22:36 ` [RFC PATCH 10/10] clocksource/drivers/h8300_timer8: Retrieve the clock rate at init time Daniel Lezcano
2015-11-08 22:38 ` [RFC PATCH 01/10] clocksource/drivers/h8300: Remove unused macros Daniel Lezcano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox