* [PATCH v3 1/6] clocksource: armada-370-xp: Use BIT()
2013-08-12 19:16 [PATCH v3 0/6] Armada 370/XP clocksource fixes Ezequiel Garcia
@ 2013-08-12 19:16 ` Ezequiel Garcia
2013-08-12 19:16 ` [PATCH v3 2/6] clocksource: armada-370-xp: Simplify TIMER_CTRL register access Ezequiel Garcia
` (5 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Ezequiel Garcia @ 2013-08-12 19:16 UTC (permalink / raw)
To: linux-arm-kernel
This is a purely cosmetic commit: we replace hardcoded values that
representing bits by BIT(), which is slightly more readable.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/clocksource/time-armada-370-xp.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
index 847cab6..ed584ec 100644
--- a/drivers/clocksource/time-armada-370-xp.c
+++ b/drivers/clocksource/time-armada-370-xp.c
@@ -36,13 +36,13 @@
* Timer block registers.
*/
#define TIMER_CTRL_OFF 0x0000
-#define TIMER0_EN 0x0001
-#define TIMER0_RELOAD_EN 0x0002
-#define TIMER0_25MHZ 0x0800
+#define TIMER0_EN BIT(0)
+#define TIMER0_RELOAD_EN BIT(1)
+#define TIMER0_25MHZ BIT(11)
#define TIMER0_DIV(div) ((div) << 19)
-#define TIMER1_EN 0x0004
-#define TIMER1_RELOAD_EN 0x0008
-#define TIMER1_25MHZ 0x1000
+#define TIMER1_EN BIT(2)
+#define TIMER1_RELOAD_EN BIT(3)
+#define TIMER1_25MHZ BIT(12)
#define TIMER1_DIV(div) ((div) << 22)
#define TIMER_EVENTS_STATUS 0x0004
#define TIMER0_CLR_MASK (~0x1)
--
1.8.1.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 2/6] clocksource: armada-370-xp: Simplify TIMER_CTRL register access
2013-08-12 19:16 [PATCH v3 0/6] Armada 370/XP clocksource fixes Ezequiel Garcia
2013-08-12 19:16 ` [PATCH v3 1/6] clocksource: armada-370-xp: Use BIT() Ezequiel Garcia
@ 2013-08-12 19:16 ` Ezequiel Garcia
2013-08-12 19:16 ` [PATCH v3 3/6] clocksource: armada-370-xp: Use CLOCKSOURCE_OF_DECLARE Ezequiel Garcia
` (4 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Ezequiel Garcia @ 2013-08-12 19:16 UTC (permalink / raw)
To: linux-arm-kernel
This commit creates two functions to access the TIMER_CTRL register:
one for global one for the per-cpu. This makes the code much more
readable. In addition, since the TIMER_CTRL register is also used for
watchdog, this is preparation work for future thread-safe improvements.
Acked-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/clocksource/time-armada-370-xp.c | 62 +++++++++++++++-----------------
1 file changed, 29 insertions(+), 33 deletions(-)
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
index ed584ec..6b4f4a9 100644
--- a/drivers/clocksource/time-armada-370-xp.c
+++ b/drivers/clocksource/time-armada-370-xp.c
@@ -72,6 +72,18 @@ static u32 ticks_per_jiffy;
static struct clock_event_device __percpu *armada_370_xp_evt;
+static void timer_ctrl_clrset(u32 clr, u32 set)
+{
+ writel((readl(timer_base + TIMER_CTRL_OFF) & ~clr) | set,
+ timer_base + TIMER_CTRL_OFF);
+}
+
+static void local_timer_ctrl_clrset(u32 clr, u32 set)
+{
+ writel((readl(local_base + TIMER_CTRL_OFF) & ~clr) | set,
+ local_base + TIMER_CTRL_OFF);
+}
+
static u32 notrace armada_370_xp_read_sched_clock(void)
{
return ~readl(timer_base + TIMER0_VAL_OFF);
@@ -84,7 +96,6 @@ static int
armada_370_xp_clkevt_next_event(unsigned long delta,
struct clock_event_device *dev)
{
- u32 u;
/*
* Clear clockevent timer interrupt.
*/
@@ -98,11 +109,8 @@ armada_370_xp_clkevt_next_event(unsigned long delta,
/*
* Enable the timer.
*/
- u = readl(local_base + TIMER_CTRL_OFF);
- u = ((u & ~TIMER0_RELOAD_EN) | TIMER0_EN |
- TIMER0_DIV(TIMER_DIVIDER_SHIFT));
- writel(u, local_base + TIMER_CTRL_OFF);
-
+ local_timer_ctrl_clrset(TIMER0_RELOAD_EN,
+ TIMER0_EN | TIMER0_DIV(TIMER_DIVIDER_SHIFT));
return 0;
}
@@ -110,8 +118,6 @@ static void
armada_370_xp_clkevt_mode(enum clock_event_mode mode,
struct clock_event_device *dev)
{
- u32 u;
-
if (mode == CLOCK_EVT_MODE_PERIODIC) {
/*
@@ -123,18 +129,14 @@ armada_370_xp_clkevt_mode(enum clock_event_mode mode,
/*
* Enable timer.
*/
-
- u = readl(local_base + TIMER_CTRL_OFF);
-
- writel((u | TIMER0_EN | TIMER0_RELOAD_EN |
- TIMER0_DIV(TIMER_DIVIDER_SHIFT)),
- local_base + TIMER_CTRL_OFF);
+ local_timer_ctrl_clrset(0, TIMER0_RELOAD_EN |
+ TIMER0_EN |
+ TIMER0_DIV(TIMER_DIVIDER_SHIFT));
} else {
/*
* Disable timer.
*/
- u = readl(local_base + TIMER_CTRL_OFF);
- writel(u & ~TIMER0_EN, local_base + TIMER_CTRL_OFF);
+ local_timer_ctrl_clrset(TIMER0_EN, 0);
/*
* ACK pending timer interrupt.
@@ -163,14 +165,14 @@ static irqreturn_t armada_370_xp_timer_interrupt(int irq, void *dev_id)
*/
static int armada_370_xp_timer_setup(struct clock_event_device *evt)
{
- u32 u;
+ u32 clr = 0, set = 0;
int cpu = smp_processor_id();
- u = readl(local_base + TIMER_CTRL_OFF);
if (timer25Mhz)
- writel(u | TIMER0_25MHZ, local_base + TIMER_CTRL_OFF);
+ set = TIMER0_25MHZ;
else
- writel(u & ~TIMER0_25MHZ, local_base + TIMER_CTRL_OFF);
+ clr = TIMER0_25MHZ;
+ local_timer_ctrl_clrset(clr, set);
evt->name = "armada_370_xp_per_cpu_tick",
evt->features = CLOCK_EVT_FEAT_ONESHOT |
@@ -219,7 +221,7 @@ static struct notifier_block armada_370_xp_timer_cpu_nb = {
void __init armada_370_xp_timer_init(void)
{
- u32 u;
+ u32 clr = 0, set = 0;
struct device_node *np;
int res;
@@ -230,23 +232,19 @@ void __init armada_370_xp_timer_init(void)
if (of_find_property(np, "marvell,timer-25Mhz", NULL)) {
/* The fixed 25MHz timer is available so let's use it */
- u = readl(timer_base + TIMER_CTRL_OFF);
- writel(u | TIMER0_25MHZ,
- timer_base + TIMER_CTRL_OFF);
+ set = TIMER0_25MHZ;
timer_clk = 25000000;
} else {
unsigned long rate = 0;
struct clk *clk = of_clk_get(np, 0);
WARN_ON(IS_ERR(clk));
rate = clk_get_rate(clk);
-
- u = readl(timer_base + TIMER_CTRL_OFF);
- writel(u & ~(TIMER0_25MHZ),
- timer_base + TIMER_CTRL_OFF);
-
timer_clk = rate / TIMER_DIVIDER;
+
+ clr = TIMER0_25MHZ;
timer25Mhz = false;
}
+ timer_ctrl_clrset(clr, set);
/*
* We use timer 0 as clocksource, and private(local) timer 0
@@ -268,10 +266,8 @@ void __init armada_370_xp_timer_init(void)
writel(0xffffffff, timer_base + TIMER0_VAL_OFF);
writel(0xffffffff, timer_base + TIMER0_RELOAD_OFF);
- u = readl(timer_base + TIMER_CTRL_OFF);
-
- writel((u | TIMER0_EN | TIMER0_RELOAD_EN |
- TIMER0_DIV(TIMER_DIVIDER_SHIFT)), timer_base + TIMER_CTRL_OFF);
+ timer_ctrl_clrset(0, TIMER0_EN | TIMER0_RELOAD_EN |
+ TIMER0_DIV(TIMER_DIVIDER_SHIFT));
clocksource_mmio_init(timer_base + TIMER0_VAL_OFF,
"armada_370_xp_clocksource",
--
1.8.1.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 3/6] clocksource: armada-370-xp: Use CLOCKSOURCE_OF_DECLARE
2013-08-12 19:16 [PATCH v3 0/6] Armada 370/XP clocksource fixes Ezequiel Garcia
2013-08-12 19:16 ` [PATCH v3 1/6] clocksource: armada-370-xp: Use BIT() Ezequiel Garcia
2013-08-12 19:16 ` [PATCH v3 2/6] clocksource: armada-370-xp: Simplify TIMER_CTRL register access Ezequiel Garcia
@ 2013-08-12 19:16 ` Ezequiel Garcia
2013-08-12 19:16 ` [PATCH v3 4/6] clocksource: armada-370-xp: Introduce new compatibles Ezequiel Garcia
` (3 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Ezequiel Garcia @ 2013-08-12 19:16 UTC (permalink / raw)
To: linux-arm-kernel
This is almost cosmetic: we achieve a bit of consistency with
other clocksource drivers by using the CLOCKSOURCE_OF_DECLARE
macro for the boilerplate code.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
arch/arm/mach-mvebu/armada-370-xp.c | 4 ++--
drivers/clocksource/time-armada-370-xp.c | 7 +++----
include/linux/time-armada-370-xp.h | 16 ----------------
3 files changed, 5 insertions(+), 22 deletions(-)
delete mode 100644 include/linux/time-armada-370-xp.h
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c
index 97cbb80..4ea03ad 100644
--- a/arch/arm/mach-mvebu/armada-370-xp.c
+++ b/arch/arm/mach-mvebu/armada-370-xp.c
@@ -18,7 +18,7 @@
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/io.h>
-#include <linux/time-armada-370-xp.h>
+#include <linux/clocksource.h>
#include <linux/dma-mapping.h>
#include <linux/mbus.h>
#include <asm/hardware/cache-l2x0.h>
@@ -69,7 +69,7 @@ static void __init armada_370_xp_mbus_init(void)
static void __init armada_370_xp_timer_and_clk_init(void)
{
of_clk_init(NULL);
- armada_370_xp_timer_init();
+ clocksource_of_init();
coherency_init();
armada_370_xp_mbus_init();
#ifdef CONFIG_CACHE_L2X0
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
index 6b4f4a9..89e7871 100644
--- a/drivers/clocksource/time-armada-370-xp.c
+++ b/drivers/clocksource/time-armada-370-xp.c
@@ -30,7 +30,6 @@
#include <linux/module.h>
#include <linux/sched_clock.h>
#include <linux/percpu.h>
-#include <linux/time-armada-370-xp.h>
/*
* Timer block registers.
@@ -219,13 +218,11 @@ static struct notifier_block armada_370_xp_timer_cpu_nb = {
.notifier_call = armada_370_xp_timer_cpu_notify,
};
-void __init armada_370_xp_timer_init(void)
+static void __init armada_370_xp_timer_init(struct device_node *np)
{
u32 clr = 0, set = 0;
- struct device_node *np;
int res;
- np = of_find_compatible_node(NULL, NULL, "marvell,armada-370-xp-timer");
timer_base = of_iomap(np, 0);
WARN_ON(!timer_base);
local_base = of_iomap(np, 1);
@@ -289,3 +286,5 @@ void __init armada_370_xp_timer_init(void)
if (!res)
armada_370_xp_timer_setup(this_cpu_ptr(armada_370_xp_evt));
}
+CLOCKSOURCE_OF_DECLARE(armada_370_xp, "marvell,armada-370-xp-timer",
+ armada_370_xp_timer_init);
diff --git a/include/linux/time-armada-370-xp.h b/include/linux/time-armada-370-xp.h
deleted file mode 100644
index 6fb0856..0000000
--- a/include/linux/time-armada-370-xp.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Marvell Armada 370/XP SoC timer handling.
- *
- * Copyright (C) 2012 Marvell
- *
- * Lior Amsalem <alior@marvell.com>
- * Gregory CLEMENT <gregory.clement@free-electrons.com>
- * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
- *
- */
-#ifndef __TIME_ARMADA_370_XPPRCMU_H
-#define __TIME_ARMADA_370_XPPRCMU_H
-
-void armada_370_xp_timer_init(void);
-
-#endif
--
1.8.1.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 4/6] clocksource: armada-370-xp: Introduce new compatibles
2013-08-12 19:16 [PATCH v3 0/6] Armada 370/XP clocksource fixes Ezequiel Garcia
` (2 preceding siblings ...)
2013-08-12 19:16 ` [PATCH v3 3/6] clocksource: armada-370-xp: Use CLOCKSOURCE_OF_DECLARE Ezequiel Garcia
@ 2013-08-12 19:16 ` Ezequiel Garcia
2013-08-12 19:16 ` [PATCH v3 5/6] clocksource: armada-370-xp: Fix device-tree binding Ezequiel Garcia
` (2 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Ezequiel Garcia @ 2013-08-12 19:16 UTC (permalink / raw)
To: linux-arm-kernel
The Armada XP SoC clocksource driver cannot work without the 25 MHz
fixed timer. Therefore it's appropriate to introduce a new compatible
string and use it to set the 25 MHz fixed timer.
The 'marvell,timer-25MHz' property will be marked as deprecated.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/clocksource/time-armada-370-xp.c | 54 +++++++++++++++++++++++---------
1 file changed, 39 insertions(+), 15 deletions(-)
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c
index 89e7871..11d91e5 100644
--- a/drivers/clocksource/time-armada-370-xp.c
+++ b/drivers/clocksource/time-armada-370-xp.c
@@ -13,6 +13,19 @@
*
* Timer 0 is used as free-running clocksource, while timer 1 is
* used as clock_event_device.
+ *
+ * ---
+ * Clocksource driver for Armada 370 and Armada XP SoC.
+ * This driver implements one compatible string for each SoC, given
+ * each has its own characteristics:
+ *
+ * * Armada 370 has no 25 MHz fixed timer.
+ *
+ * * Armada XP cannot work properly without such 25 MHz fixed timer as
+ * doing otherwise leads to using a clocksource whose frequency varies
+ * when doing cpufreq frequency changes.
+ *
+ * See Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt
*/
#include <linux/init.h>
@@ -218,7 +231,7 @@ static struct notifier_block armada_370_xp_timer_cpu_nb = {
.notifier_call = armada_370_xp_timer_cpu_notify,
};
-static void __init armada_370_xp_timer_init(struct device_node *np)
+static void __init armada_370_xp_timer_common_init(struct device_node *np)
{
u32 clr = 0, set = 0;
int res;
@@ -227,20 +240,10 @@ static void __init armada_370_xp_timer_init(struct device_node *np)
WARN_ON(!timer_base);
local_base = of_iomap(np, 1);
- if (of_find_property(np, "marvell,timer-25Mhz", NULL)) {
- /* The fixed 25MHz timer is available so let's use it */
+ if (timer25Mhz)
set = TIMER0_25MHZ;
- timer_clk = 25000000;
- } else {
- unsigned long rate = 0;
- struct clk *clk = of_clk_get(np, 0);
- WARN_ON(IS_ERR(clk));
- rate = clk_get_rate(clk);
- timer_clk = rate / TIMER_DIVIDER;
-
+ else
clr = TIMER0_25MHZ;
- timer25Mhz = false;
- }
timer_ctrl_clrset(clr, set);
/*
@@ -286,5 +289,26 @@ static void __init armada_370_xp_timer_init(struct device_node *np)
if (!res)
armada_370_xp_timer_setup(this_cpu_ptr(armada_370_xp_evt));
}
-CLOCKSOURCE_OF_DECLARE(armada_370_xp, "marvell,armada-370-xp-timer",
- armada_370_xp_timer_init);
+
+static void __init armada_xp_timer_init(struct device_node *np)
+{
+ /* The fixed 25MHz timer is required, timer25Mhz is true by default */
+ timer_clk = 25000000;
+
+ armada_370_xp_timer_common_init(np);
+}
+CLOCKSOURCE_OF_DECLARE(armada_xp, "marvell,armada-xp-timer",
+ armada_xp_timer_init);
+
+static void __init armada_370_timer_init(struct device_node *np)
+{
+ struct clk *clk = of_clk_get(np, 0);
+
+ WARN_ON(IS_ERR(clk));
+ timer_clk = clk_get_rate(clk) / TIMER_DIVIDER;
+ timer25Mhz = false;
+
+ armada_370_xp_timer_common_init(np);
+}
+CLOCKSOURCE_OF_DECLARE(armada_370, "marvell,armada-370-timer",
+ armada_370_timer_init);
--
1.8.1.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 5/6] clocksource: armada-370-xp: Fix device-tree binding
2013-08-12 19:16 [PATCH v3 0/6] Armada 370/XP clocksource fixes Ezequiel Garcia
` (3 preceding siblings ...)
2013-08-12 19:16 ` [PATCH v3 4/6] clocksource: armada-370-xp: Introduce new compatibles Ezequiel Garcia
@ 2013-08-12 19:16 ` Ezequiel Garcia
2013-08-12 19:20 ` Jason Cooper
2013-08-12 19:16 ` [PATCH v3 6/6] ARM: mvebu: Fix the Armada 370/XP timer compatible strings Ezequiel Garcia
2013-08-13 12:28 ` [PATCH v3 0/6] Armada 370/XP clocksource fixes Daniel Lezcano
6 siblings, 1 reply; 11+ messages in thread
From: Ezequiel Garcia @ 2013-08-12 19:16 UTC (permalink / raw)
To: linux-arm-kernel
This commit fixes the DT binding for the Armada 370/XP SoC timer.
The previous "marvell,armada-370-xp-timer" compatible is removed and
two new compatible strings are introduced: "marvell,armada-xp-timer"
and "marvell,armada-370-timer".
The rationale behind this change is that the Armada 370 SoC and the
Armada XP SoC timers are not really compatible:
* Armada 370 has no 25 MHz fixed timer.
* Armada XP cannot work properly without such 25 MHz fixed timer
as doing otherwise leads to using a clocksource whose frequency
varies when doing cpufreq frequency changes.
This commit also removes the "marvell,timer-25Mhz" property, given
it's now meaningless.
Cc: devicetree at vger.kernel.org
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
.../bindings/timer/marvell,armada-370-xp-timer.txt | 27 ++++++++++++++++++----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt b/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt
index 3638112..4c453b2 100644
--- a/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt
+++ b/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt
@@ -2,14 +2,31 @@ Marvell Armada 370 and Armada XP Timers
---------------------------------------
Required properties:
-- compatible: Should be "marvell,armada-370-xp-timer"
+- compatible: Should be either "marvell,armada-370-timer" or
+ "marvell,armada-xp-timer" as appropriate.
- interrupts: Should contain the list of Global Timer interrupts and
then local timer interrupts
- reg: Should contain location and length for timers register. First
pair for the Global Timer registers, second pair for the
local/private timers.
-- clocks: clock driving the timer hardware
+- clocks: clock driving the timer hardware, only required for
+ "marvell,armada-370-timer";
-Optional properties:
-- marvell,timer-25Mhz: Tells whether the Global timer supports the 25
- Mhz fixed mode (available on Armada XP and not on Armada 370)
+Examples:
+
+- Armada 370:
+
+ timer {
+ compatible = "marvell,armada-370-timer";
+ reg = <0x20300 0x30>, <0x21040 0x30>;
+ interrupts = <37>, <38>, <39>, <40>, <5>, <6>;
+ clocks = <&coreclk 2>;
+ };
+
+- Armada XP:
+
+ timer {
+ compatible = "marvell,armada-xp-timer";
+ reg = <0x20300 0x30>, <0x21040 0x30>;
+ interrupts = <37>, <38>, <39>, <40>, <5>, <6>;
+ };
--
1.8.1.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 5/6] clocksource: armada-370-xp: Fix device-tree binding
2013-08-12 19:16 ` [PATCH v3 5/6] clocksource: armada-370-xp: Fix device-tree binding Ezequiel Garcia
@ 2013-08-12 19:20 ` Jason Cooper
0 siblings, 0 replies; 11+ messages in thread
From: Jason Cooper @ 2013-08-12 19:20 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Aug 12, 2013 at 04:16:55PM -0300, Ezequiel Garcia wrote:
> This commit fixes the DT binding for the Armada 370/XP SoC timer.
> The previous "marvell,armada-370-xp-timer" compatible is removed and
> two new compatible strings are introduced: "marvell,armada-xp-timer"
> and "marvell,armada-370-timer".
>
> The rationale behind this change is that the Armada 370 SoC and the
> Armada XP SoC timers are not really compatible:
>
> * Armada 370 has no 25 MHz fixed timer.
>
> * Armada XP cannot work properly without such 25 MHz fixed timer
> as doing otherwise leads to using a clocksource whose frequency
> varies when doing cpufreq frequency changes.
>
> This commit also removes the "marvell,timer-25Mhz" property, given
> it's now meaningless.
>
> Cc: devicetree at vger.kernel.org
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> .../bindings/timer/marvell,armada-370-xp-timer.txt | 27 ++++++++++++++++++----
> 1 file changed, 22 insertions(+), 5 deletions(-)
As there are no native DT-booting Marvell products in the wild yet,
Acked-by: Jason Cooper <jason@lakedaemon.net>
thx,
Jason.
>
> diff --git a/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt b/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt
> index 3638112..4c453b2 100644
> --- a/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt
> +++ b/Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt
> @@ -2,14 +2,31 @@ Marvell Armada 370 and Armada XP Timers
> ---------------------------------------
>
> Required properties:
> -- compatible: Should be "marvell,armada-370-xp-timer"
> +- compatible: Should be either "marvell,armada-370-timer" or
> + "marvell,armada-xp-timer" as appropriate.
> - interrupts: Should contain the list of Global Timer interrupts and
> then local timer interrupts
> - reg: Should contain location and length for timers register. First
> pair for the Global Timer registers, second pair for the
> local/private timers.
> -- clocks: clock driving the timer hardware
> +- clocks: clock driving the timer hardware, only required for
> + "marvell,armada-370-timer";
>
> -Optional properties:
> -- marvell,timer-25Mhz: Tells whether the Global timer supports the 25
> - Mhz fixed mode (available on Armada XP and not on Armada 370)
> +Examples:
> +
> +- Armada 370:
> +
> + timer {
> + compatible = "marvell,armada-370-timer";
> + reg = <0x20300 0x30>, <0x21040 0x30>;
> + interrupts = <37>, <38>, <39>, <40>, <5>, <6>;
> + clocks = <&coreclk 2>;
> + };
> +
> +- Armada XP:
> +
> + timer {
> + compatible = "marvell,armada-xp-timer";
> + reg = <0x20300 0x30>, <0x21040 0x30>;
> + interrupts = <37>, <38>, <39>, <40>, <5>, <6>;
> + };
> --
> 1.8.1.5
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 6/6] ARM: mvebu: Fix the Armada 370/XP timer compatible strings
2013-08-12 19:16 [PATCH v3 0/6] Armada 370/XP clocksource fixes Ezequiel Garcia
` (4 preceding siblings ...)
2013-08-12 19:16 ` [PATCH v3 5/6] clocksource: armada-370-xp: Fix device-tree binding Ezequiel Garcia
@ 2013-08-12 19:16 ` Ezequiel Garcia
2013-08-13 12:28 ` [PATCH v3 0/6] Armada 370/XP clocksource fixes Daniel Lezcano
6 siblings, 0 replies; 11+ messages in thread
From: Ezequiel Garcia @ 2013-08-12 19:16 UTC (permalink / raw)
To: linux-arm-kernel
The "marvell,armada-370-xp-timer" compatible string, together with
the "marvell,timer-25Mhz" property are deprecated and should be
removed from current DT.
Instead, the timer DT nodes are now required to have an appropriate
compatible string, which should be either "marvell,armada-370-timer"
or "marvell,armada-xp-timer", depending on SoC.
The clock property is now required only for Armada 370 so move it accordingly.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
arch/arm/boot/dts/armada-370-xp.dtsi | 2 --
arch/arm/boot/dts/armada-370.dtsi | 5 +++++
arch/arm/boot/dts/armada-xp.dtsi | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi
index 90b1176..442c84e 100644
--- a/arch/arm/boot/dts/armada-370-xp.dtsi
+++ b/arch/arm/boot/dts/armada-370-xp.dtsi
@@ -81,10 +81,8 @@
};
timer at 20300 {
- compatible = "marvell,armada-370-xp-timer";
reg = <0x20300 0x30>, <0x21040 0x30>;
interrupts = <37>, <38>, <39>, <40>, <5>, <6>;
- clocks = <&coreclk 2>;
};
sata at a0000 {
diff --git a/arch/arm/boot/dts/armada-370.dtsi b/arch/arm/boot/dts/armada-370.dtsi
index fa3dfc6..f166367 100644
--- a/arch/arm/boot/dts/armada-370.dtsi
+++ b/arch/arm/boot/dts/armada-370.dtsi
@@ -104,6 +104,11 @@
interrupts = <91>;
};
+ timer at 20300 {
+ compatible = "marvell,armada-370-timer";
+ clocks = <&coreclk 2>;
+ };
+
coreclk: mvebu-sar at 18230 {
compatible = "marvell,armada-370-core-clock";
reg = <0x18230 0x08>;
diff --git a/arch/arm/boot/dts/armada-xp.dtsi b/arch/arm/boot/dts/armada-xp.dtsi
index 416eb94..549151e 100644
--- a/arch/arm/boot/dts/armada-xp.dtsi
+++ b/arch/arm/boot/dts/armada-xp.dtsi
@@ -62,7 +62,7 @@
};
timer at 20300 {
- marvell,timer-25Mhz;
+ compatible = "marvell,armada-xp-timer";
};
coreclk: mvebu-sar at 18230 {
--
1.8.1.5
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 0/6] Armada 370/XP clocksource fixes
2013-08-12 19:16 [PATCH v3 0/6] Armada 370/XP clocksource fixes Ezequiel Garcia
` (5 preceding siblings ...)
2013-08-12 19:16 ` [PATCH v3 6/6] ARM: mvebu: Fix the Armada 370/XP timer compatible strings Ezequiel Garcia
@ 2013-08-13 12:28 ` Daniel Lezcano
2013-08-13 14:05 ` Ezequiel Garcia
6 siblings, 1 reply; 11+ messages in thread
From: Daniel Lezcano @ 2013-08-13 12:28 UTC (permalink / raw)
To: linux-arm-kernel
On 08/12/2013 09:16 PM, Ezequiel Garcia wrote:
> This small patchset fixes a somewhat minor issue found in the clocksource
> driver for Armada 370/XP SoC.
>
> On one side the Armada 370 SoC has no 25 MHz fixed timer.
> On the other side the Armada XP SoC cannot work properly without such 25 MHz
> fixed timer selected, because otherwise the base clock frequency would vary
> when doing cpufreq frequency changes.
>
> Therefore we can consider the SoCs as not being compatible, being better to
> have two compatible strings, one for each SoC. The previous compatible and
> its behavior has been removed, considering there are no DT-enabled boards
> in use in the field.
>
> In addition, CLOCKSOURCE_OF_DECLARE is used to simplify the initialization.
>
> This patchset is based on v3.11-rc4. Also, to ease maintainer's task this
> is based on these two patches which are in linux-next:
>
> commit be14114934545f52be2ffddbe401ba0951007c59
> Author: Stephen Boyd <sboyd@codeaurora.org>
> "clocksource: time-armada-370-xp: Divorce from local timer API"
>
> commit 4047c794ae18c467a5ea987265238186bc253f61
> Author: Stephen Boyd <sboyd@codeaurora.org>
> "clocksource: time-armada-370-xp: Fix sparse warning"
Your patchset does not apply to my tree for timers/core
These two patches described above are in the ARM tree, not available in
the timers/core tree.
The correct submission path for these would have been through timers/urgent:
timers/urgent -> v3.11-rcX -> arm-soc
-> timers/core
Or alternatively if it depends on material in arm-soc, a pull request
based in a v3.11-rcX where Olof and I can pull from.
I guess you have to rebase your patchset on top of timers/core.
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] 11+ messages in thread
* [PATCH v3 0/6] Armada 370/XP clocksource fixes
2013-08-13 12:28 ` [PATCH v3 0/6] Armada 370/XP clocksource fixes Daniel Lezcano
@ 2013-08-13 14:05 ` Ezequiel Garcia
2013-08-13 14:07 ` Daniel Lezcano
0 siblings, 1 reply; 11+ messages in thread
From: Ezequiel Garcia @ 2013-08-13 14:05 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Aug 13, 2013 at 02:28:41PM +0200, Daniel Lezcano wrote:
> On 08/12/2013 09:16 PM, Ezequiel Garcia wrote:
> > This small patchset fixes a somewhat minor issue found in the clocksource
> > driver for Armada 370/XP SoC.
> >
> > On one side the Armada 370 SoC has no 25 MHz fixed timer.
> > On the other side the Armada XP SoC cannot work properly without such 25 MHz
> > fixed timer selected, because otherwise the base clock frequency would vary
> > when doing cpufreq frequency changes.
> >
> > Therefore we can consider the SoCs as not being compatible, being better to
> > have two compatible strings, one for each SoC. The previous compatible and
> > its behavior has been removed, considering there are no DT-enabled boards
> > in use in the field.
> >
> > In addition, CLOCKSOURCE_OF_DECLARE is used to simplify the initialization.
> >
> > This patchset is based on v3.11-rc4. Also, to ease maintainer's task this
> > is based on these two patches which are in linux-next:
> >
> > commit be14114934545f52be2ffddbe401ba0951007c59
> > Author: Stephen Boyd <sboyd@codeaurora.org>
> > "clocksource: time-armada-370-xp: Divorce from local timer API"
> >
> > commit 4047c794ae18c467a5ea987265238186bc253f61
> > Author: Stephen Boyd <sboyd@codeaurora.org>
> > "clocksource: time-armada-370-xp: Fix sparse warning"
>
> Your patchset does not apply to my tree for timers/core
>
> These two patches described above are in the ARM tree, not available in
> the timers/core tree.
>
> The correct submission path for these would have been through timers/urgent:
>
> timers/urgent -> v3.11-rcX -> arm-soc
> -> timers/core
>
> Or alternatively if it depends on material in arm-soc, a pull request
> based in a v3.11-rcX where Olof and I can pull from.
>
> I guess you have to rebase your patchset on top of timers/core.
>
Sure. I'll just send this patchset on top of timers/core.
I guess it was just a silly thing to base this on top of those
two patches.
Thanks,
--
Ezequiel Garc?a, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 0/6] Armada 370/XP clocksource fixes
2013-08-13 14:05 ` Ezequiel Garcia
@ 2013-08-13 14:07 ` Daniel Lezcano
0 siblings, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2013-08-13 14:07 UTC (permalink / raw)
To: linux-arm-kernel
On 08/13/2013 04:05 PM, Ezequiel Garcia wrote:
> On Tue, Aug 13, 2013 at 02:28:41PM +0200, Daniel Lezcano wrote:
>> On 08/12/2013 09:16 PM, Ezequiel Garcia wrote:
>>> This small patchset fixes a somewhat minor issue found in the clocksource
>>> driver for Armada 370/XP SoC.
>>>
>>> On one side the Armada 370 SoC has no 25 MHz fixed timer.
>>> On the other side the Armada XP SoC cannot work properly without such 25 MHz
>>> fixed timer selected, because otherwise the base clock frequency would vary
>>> when doing cpufreq frequency changes.
>>>
>>> Therefore we can consider the SoCs as not being compatible, being better to
>>> have two compatible strings, one for each SoC. The previous compatible and
>>> its behavior has been removed, considering there are no DT-enabled boards
>>> in use in the field.
>>>
>>> In addition, CLOCKSOURCE_OF_DECLARE is used to simplify the initialization.
>>>
>>> This patchset is based on v3.11-rc4. Also, to ease maintainer's task this
>>> is based on these two patches which are in linux-next:
>>>
>>> commit be14114934545f52be2ffddbe401ba0951007c59
>>> Author: Stephen Boyd <sboyd@codeaurora.org>
>>> "clocksource: time-armada-370-xp: Divorce from local timer API"
>>>
>>> commit 4047c794ae18c467a5ea987265238186bc253f61
>>> Author: Stephen Boyd <sboyd@codeaurora.org>
>>> "clocksource: time-armada-370-xp: Fix sparse warning"
>>
>> Your patchset does not apply to my tree for timers/core
>>
>> These two patches described above are in the ARM tree, not available in
>> the timers/core tree.
>>
>> The correct submission path for these would have been through timers/urgent:
>>
>> timers/urgent -> v3.11-rcX -> arm-soc
>> -> timers/core
>>
>> Or alternatively if it depends on material in arm-soc, a pull request
>> based in a v3.11-rcX where Olof and I can pull from.
>>
>> I guess you have to rebase your patchset on top of timers/core.
>>
>
> Sure. I'll just send this patchset on top of timers/core.
Ok, thx.
> I guess it was just a silly thing to base this on top of those
> two patches.
>
> 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] 11+ messages in thread