[v2,08/12] ARM: davinci: dm355: switch to using the clocksource driver
diff mbox series

Message ID 20190204171757.32073-9-brgl@bgdev.pl
State New
Headers show
Series
  • ARM: davinci: modernize the timer support
Related show

Commit Message

Bartosz Golaszewski Feb. 4, 2019, 5:17 p.m. UTC
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>

We now have a proper clocksource driver for davinci. Switch the platform
to using it.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
 arch/arm/mach-davinci/dm355.c | 36 ++++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 13 deletions(-)

Comments

Sekhar Nori Feb. 8, 2019, 12:34 p.m. UTC | #1
On 04/02/19 10:47 PM, Bartosz Golaszewski wrote:
> -/*
> - * T0_BOT: Timer 0, bottom:  clockevent source for hrtimers
> - * T0_TOP: Timer 0, top   :  clocksource for generic timekeeping
> - * T1_BOT: Timer 1, bottom:  (used by DSP in TI DSPLink code)
> - * T1_TOP: Timer 1, top   :  <unused>

Documenting this timer division is important because DSP usage and
unused timers are not immediately clear from kernel code alone. Can you
retain these comments in all patches of this series (I guess T0_BOT etc.
terminology is changed, so feel free to adjust the comment text).

> - */
> -static struct davinci_timer_info dm355_timer_info = {
> -	.timers		= davinci_timer_instance,
> -	.clockevent_id	= T0_BOT,
> -	.clocksource_id	= T0_TOP,
> +static const struct davinci_timer_cfg dm355_timer_cfg = {
> +	.reg = {
> +		.start		= DAVINCI_TIMER0_BASE,
> +		.end		= DAVINCI_TIMER0_BASE + SZ_4K,

Here and other places too, SZ_4K - 1

Thanks,
Sekhar
Bartosz Golaszewski Feb. 26, 2019, 12:09 p.m. UTC | #2
pt., 8 lut 2019 o 13:34 Sekhar Nori <nsekhar@ti.com> napisaƂ(a):
>
> On 04/02/19 10:47 PM, Bartosz Golaszewski wrote:
> > -/*
> > - * T0_BOT: Timer 0, bottom:  clockevent source for hrtimers
> > - * T0_TOP: Timer 0, top   :  clocksource for generic timekeeping
> > - * T1_BOT: Timer 1, bottom:  (used by DSP in TI DSPLink code)
> > - * T1_TOP: Timer 1, top   :  <unused>
>
> Documenting this timer division is important because DSP usage and
> unused timers are not immediately clear from kernel code alone. Can you
> retain these comments in all patches of this series (I guess T0_BOT etc.
> terminology is changed, so feel free to adjust the comment text).
>
> > - */
> > -static struct davinci_timer_info dm355_timer_info = {
> > -     .timers         = davinci_timer_instance,
> > -     .clockevent_id  = T0_BOT,
> > -     .clocksource_id = T0_TOP,
> > +static const struct davinci_timer_cfg dm355_timer_cfg = {
> > +     .reg = {
> > +             .start          = DAVINCI_TIMER0_BASE,
> > +             .end            = DAVINCI_TIMER0_BASE + SZ_4K,
>
> Here and other places too, SZ_4K - 1
>
> Thanks,
> Sekhar

I used appropriate DEFINE_RES_x() macros instead.

Bart

Patch
diff mbox series

diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index 2a523fa7c716..287cddaec67c 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -29,7 +29,8 @@ 
 #include <mach/irqs.h>
 #include <mach/mux.h>
 #include <mach/serial.h>
-#include <mach/time.h>
+
+#include <clocksource/timer-davinci.h>
 
 #include "asp.h"
 #include "davinci.h"
@@ -617,16 +618,24 @@  static struct davinci_id dm355_ids[] = {
 	},
 };
 
-/*
- * T0_BOT: Timer 0, bottom:  clockevent source for hrtimers
- * T0_TOP: Timer 0, top   :  clocksource for generic timekeeping
- * T1_BOT: Timer 1, bottom:  (used by DSP in TI DSPLink code)
- * T1_TOP: Timer 1, top   :  <unused>
- */
-static struct davinci_timer_info dm355_timer_info = {
-	.timers		= davinci_timer_instance,
-	.clockevent_id	= T0_BOT,
-	.clocksource_id	= T0_TOP,
+static const struct davinci_timer_cfg dm355_timer_cfg = {
+	.reg = {
+		.start		= DAVINCI_TIMER0_BASE,
+		.end		= DAVINCI_TIMER0_BASE + SZ_4K,
+		.flags		= IORESOURCE_MEM,
+	},
+	.irq = {
+		{
+			.start	= IRQ_TINT0_TINT12,
+			.end	= IRQ_TINT0_TINT12,
+			.flags	= IORESOURCE_IRQ,
+		},
+		{
+			.start	= IRQ_TINT0_TINT34,
+			.end	= IRQ_TINT0_TINT34,
+			.flags	= IORESOURCE_IRQ,
+		}
+	}
 };
 
 static struct plat_serial8250_port dm355_serial0_platform_data[] = {
@@ -708,7 +717,6 @@  static const struct davinci_soc_info davinci_soc_info_dm355 = {
 	.intc_type		= DAVINCI_INTC_TYPE_AINTC,
 	.intc_irq_prios		= dm355_default_priorities,
 	.intc_irq_num		= DAVINCI_N_AINTC_IRQ,
-	.timer_info		= &dm355_timer_info,
 	.sram_dma		= 0x00010000,
 	.sram_len		= SZ_32K,
 };
@@ -735,6 +743,7 @@  void __init dm355_init_time(void)
 {
 	void __iomem *pll1, *psc;
 	struct clk *clk;
+	int rv;
 
 	clk_register_fixed_rate(NULL, "ref_clk", NULL, 0, DM355_REF_FREQ);
 
@@ -750,7 +759,8 @@  void __init dm355_init_time(void)
 		return;
 	}
 
-	davinci_timer_init(clk);
+	rv = davinci_timer_register(clk, &dm355_timer_cfg);
+	WARN(rv, "Unable to register the timer: %d\n", rv);
 }
 
 static struct resource dm355_pll2_resources[] = {