[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

Subsystems: arm port, clocksource, clockevent drivers, open firmware and flattened device tree bindings, real time clock (rtc) subsystem, the rest

STALE5168d

9 messages, 4 authors, 2012-07-11 · open the first message on its own page

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: dinguyen at altera.com <hidden>
Date: 2012-07-10 21:39:40

From: Dinh Nguyen <redacted>

Make a common device tree glue for clocksource/dw_apb_timer.
Move mach-picoxcell/time.c to be a generic device tree application
of the dw_apb_timer.

Signed-off-by: Pavel Machek <redacted>
Signed-off-by: Dinh Nguyen <redacted>
---
 Documentation/devicetree/bindings/rtc/dw-apb.txt   |   24 ++++++++++
 arch/arm/Kconfig                                   |    1 +
 drivers/clocksource/Kconfig                        |    3 ++
 drivers/clocksource/Makefile                       |    1 +
 .../clocksource/dw_apb_timer_of.c                  |   49 +++++++++++---------
 5 files changed, 57 insertions(+), 21 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/dw-apb.txt
 rename arch/arm/mach-picoxcell/time.c => drivers/clocksource/dw_apb_timer_of.c (60%)
diff --git a/Documentation/devicetree/bindings/rtc/dw-apb.txt b/Documentation/devicetree/bindings/rtc/dw-apb.txt
new file mode 100644
index 0000000..7183f69
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/dw-apb.txt
@@ -0,0 +1,24 @@
+* Designware APB timer
+
+Required properties:
+- compatible: "snps,dw-apb-timer-sp" or "snps,dw-apb-timer-osc"
+- reg: physical base address of the controller and length of memory mapped
+  region.
+- interrupts: IRQ line for the timer.
+- clock-freq: The frequency in HZ of the timer.
+
+Example:
+
+		timer1: timer at ffc09000 {
+				compatible = "snps,dw-apb-timer-sp";
+				interrupts = <0 168 4>;
+				clock-freq = <200000000>;
+				reg = <0xffc09000 0x1000>;
+			};
+
+		timer2: timer at ffd00000 {
+				compatible = "snps,dw-apb-timer-osc";
+				interrupts = <0 169 4>;
+				clock-freq = <200000000>;
+				reg = <0xffd00000 0x1000>;
+			};
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index a91009c..57eb6ef 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -658,6 +658,7 @@ config ARCH_PICOXCELL
 	select ARM_VIC
 	select CPU_V6K
 	select DW_APB_TIMER
+	select DW_APB_TIMER_OF
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_GPIO
 	select HAVE_TCM
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 99c6b20..4cff7ea 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -15,6 +15,9 @@ config CLKSRC_MMIO
 
 config DW_APB_TIMER
 	bool
+	
+config DW_APB_TIMER_OF
+	bool
 
 config CLKSRC_DBX500_PRCMU
 	bool "Clocksource PRCMU Timer"
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index dd3e661..2cdaf7d 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -10,4 +10,5 @@ obj-$(CONFIG_EM_TIMER_STI)	+= em_sti.o
 obj-$(CONFIG_CLKBLD_I8253)	+= i8253.o
 obj-$(CONFIG_CLKSRC_MMIO)	+= mmio.o
 obj-$(CONFIG_DW_APB_TIMER)	+= dw_apb_timer.o
+obj-$(CONFIG_DW_APB_TIMER_OF)	+= dw_apb_timer_of.o
 obj-$(CONFIG_CLKSRC_DBX500_PRCMU)	+= clksrc-dbx500-prcmu.o
\ No newline at end of file
diff --git a/arch/arm/mach-picoxcell/time.c b/drivers/clocksource/dw_apb_timer_of.c
similarity index 60%
rename from arch/arm/mach-picoxcell/time.c
rename to drivers/clocksource/dw_apb_timer_of.c
index 2ecba67..83bd997 100644
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
 /*
+ * Copyright (C) 2012 Altera Corporation
  * Copyright (c) 2011 Picochip Ltd., Jamie Iles
  *
+ * Modified from mach-picoxcell/time.c
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * All enquiries to support at picochip.com
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include <linux/dw_apb_timer.h>
 #include <linux/of.h>
@@ -15,8 +24,6 @@
 #include <asm/mach/time.h>
 #include <asm/sched_clock.h>
 
-#include "common.h"
-
 static void timer_get_base_and_rate(struct device_node *np,
 				    void __iomem **base, u32 *rate)
 {
@@ -29,7 +36,7 @@ static void timer_get_base_and_rate(struct device_node *np,
 		panic("No clock-freq property for %s", np->name);
 }
 
-static void picoxcell_add_clockevent(struct device_node *event_timer)
+static void add_clockevent(struct device_node *event_timer)
 {
 	void __iomem *iobase;
 	struct dw_apb_clock_event_device *ced;
@@ -49,7 +56,7 @@ static void picoxcell_add_clockevent(struct device_node *event_timer)
 	dw_apb_clockevent_register(ced);
 }
 
-static void picoxcell_add_clocksource(struct device_node *source_timer)
+static void add_clocksource(struct device_node *source_timer)
 {
 	void __iomem *iobase;
 	struct dw_apb_clocksource *cs;
@@ -67,55 +74,55 @@ static void picoxcell_add_clocksource(struct device_node *source_timer)
 
 static void __iomem *sched_io_base;
 
-static u32 picoxcell_read_sched_clock(void)
+static u32 read_sched_clock(void)
 {
 	return __raw_readl(sched_io_base);
 }
 
-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-sp" },
 	{ /* Sentinel */ },
 };
 
-static void picoxcell_init_sched_clock(void)
+static void init_sched_clock(void)
 {
 	struct device_node *sched_timer;
 	u32 rate;
 
-	sched_timer = of_find_matching_node(NULL, picoxcell_rtc_ids);
+	sched_timer = of_find_matching_node(NULL, sptimer_ids);
 	if (!sched_timer)
 		panic("No RTC for sched clock to use");
 
 	timer_get_base_and_rate(sched_timer, &sched_io_base, &rate);
 	of_node_put(sched_timer);
 
-	setup_sched_clock(picoxcell_read_sched_clock, 32, rate);
+	setup_sched_clock(read_sched_clock, 32, rate);
 }
 
-static const struct of_device_id picoxcell_timer_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-timer" },
+static const struct of_device_id osctimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-osc" },
 	{},
 };
 
-static void __init picoxcell_timer_init(void)
+static void __init timer_init(void)
 {
 	struct device_node *event_timer, *source_timer;
 
-	event_timer = of_find_matching_node(NULL, picoxcell_timer_ids);
+	event_timer = of_find_matching_node(NULL, osctimer_ids);
 	if (!event_timer)
 		panic("No timer for clockevent");
-	picoxcell_add_clockevent(event_timer);
+	add_clockevent(event_timer);
 
-	source_timer = of_find_matching_node(event_timer, picoxcell_timer_ids);
+	source_timer = of_find_matching_node(event_timer, osctimer_ids);
 	if (!source_timer)
 		panic("No timer for clocksource");
-	picoxcell_add_clocksource(source_timer);
+	add_clocksource(source_timer);
 
 	of_node_put(source_timer);
 
-	picoxcell_init_sched_clock();
+	init_sched_clock();
 }
 
-struct sys_timer picoxcell_timer = {
-	.init = picoxcell_timer_init,
+struct sys_timer dw_apb_timer = {
+	.init = timer_init,
 };
-- 
1.7.9.5

[PATCH v2 2/2] arm: picoxcell: Make use of dw_apb_timer_of

From: dinguyen at altera.com <hidden>
Date: 2012-07-10 21:39:41

From: Dinh Nguyen <redacted>

Make use of the move dw_apb_timer_of device tree implementation in
clocksource.

Signed-off-by: Pavel Machek <redacted>
Signed-off-by: Dinh Nguyen <redacted>
---
 arch/arm/mach-picoxcell/Makefile |    1 -
 arch/arm/mach-picoxcell/common.c |    3 ++-
 arch/arm/mach-picoxcell/common.h |    2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-picoxcell/Makefile b/arch/arm/mach-picoxcell/Makefile
index e5ec4a8..8e39f80 100644
--- a/arch/arm/mach-picoxcell/Makefile
+++ b/arch/arm/mach-picoxcell/Makefile
@@ -1,2 +1 @@
 obj-y	:= common.o
-obj-y	+= time.o
diff --git a/arch/arm/mach-picoxcell/common.c b/arch/arm/mach-picoxcell/common.c
index a2e8ae8..8f9a0b4 100644
--- a/arch/arm/mach-picoxcell/common.c
+++ b/arch/arm/mach-picoxcell/common.c
@@ -14,6 +14,7 @@
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
+#include <linux/dw_apb_timer.h>
 
 #include <asm/mach/arch.h>
 #include <asm/hardware/vic.h>
@@ -97,7 +98,7 @@ DT_MACHINE_START(PICOXCELL, "Picochip picoXcell")
 	.nr_irqs	= NR_IRQS_LEGACY,
 	.init_irq	= picoxcell_init_irq,
 	.handle_irq	= vic_handle_irq,
-	.timer		= &picoxcell_timer,
+	.timer		= &dw_apb_timer,
 	.init_machine	= picoxcell_init_machine,
 	.dt_compat	= picoxcell_dt_match,
 	.restart	= picoxcell_wdt_restart,
diff --git a/arch/arm/mach-picoxcell/common.h b/arch/arm/mach-picoxcell/common.h
index 83d55ab..a65cb02 100644
--- a/arch/arm/mach-picoxcell/common.h
+++ b/arch/arm/mach-picoxcell/common.h
@@ -12,6 +12,6 @@
 
 #include <asm/mach/time.h>
 
-extern struct sys_timer picoxcell_timer;
+extern struct sys_timer dw_apb_timer;
 
 #endif /* __PICOXCELL_COMMON_H__ */
-- 
1.7.9.5

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: Jamie Iles <hidden>
Date: 2012-07-10 23:15:25

Hi,

On Tue, Jul 10, 2012 at 04:39:40PM -0500, dinguyen at altera.com wrote:
quoted hunk
From: Dinh Nguyen <redacted>

Make a common device tree glue for clocksource/dw_apb_timer.
Move mach-picoxcell/time.c to be a generic device tree application
of the dw_apb_timer.

Signed-off-by: Pavel Machek <redacted>
Signed-off-by: Dinh Nguyen <redacted>
---
 Documentation/devicetree/bindings/rtc/dw-apb.txt   |   24 ++++++++++
 arch/arm/Kconfig                                   |    1 +
 drivers/clocksource/Kconfig                        |    3 ++
 drivers/clocksource/Makefile                       |    1 +
 .../clocksource/dw_apb_timer_of.c                  |   49 +++++++++++---------
 5 files changed, 57 insertions(+), 21 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/dw-apb.txt
 rename arch/arm/mach-picoxcell/time.c => drivers/clocksource/dw_apb_timer_of.c (60%)
diff --git a/arch/arm/mach-picoxcell/time.c  
b/drivers/clocksource/dw_apb_timer_of.c
similarity index 60%
rename from arch/arm/mach-picoxcell/time.c
rename to drivers/clocksource/dw_apb_timer_of.c
index 2ecba67..83bd997 100644
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
[...]
-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-sp" },
 	{ /* Sentinel */ },
Please keep picochip,pc3x2-rtc in the compatible list otherwise we won't 
boot any more.
-static const struct of_device_id picoxcell_timer_ids[] __initconst = 
{
-	{ .compatible = "picochip,pc3x2-timer" },
+static const struct of_device_id osctimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-osc" },
 	{},
 };
The same here.  Also, I'm not sure that the split of these patches is 
correct - there isn't any bisectability here as you remove the timer in 
this patch but picoxcell won't build.  I think squashing these 2 patches 
is fine.

I can't test on hardware right now, but with those changes:

Acked-by: Jamie Iles <redacted>

Jamie

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: Rob Herring <hidden>
Date: 2012-07-11 01:39:14

Dinh,

On 07/10/2012 04:39 PM, dinguyen at altera.com wrote:
quoted hunk
From: Dinh Nguyen <redacted>

Make a common device tree glue for clocksource/dw_apb_timer.
Move mach-picoxcell/time.c to be a generic device tree application
of the dw_apb_timer.

Signed-off-by: Pavel Machek <redacted>
Signed-off-by: Dinh Nguyen <redacted>
---
 Documentation/devicetree/bindings/rtc/dw-apb.txt   |   24 ++++++++++
 arch/arm/Kconfig                                   |    1 +
 drivers/clocksource/Kconfig                        |    3 ++
 drivers/clocksource/Makefile                       |    1 +
 .../clocksource/dw_apb_timer_of.c                  |   49 +++++++++++---------
 5 files changed, 57 insertions(+), 21 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/dw-apb.txt
 rename arch/arm/mach-picoxcell/time.c => drivers/clocksource/dw_apb_timer_of.c (60%)
diff --git a/Documentation/devicetree/bindings/rtc/dw-apb.txt b/Documentation/devicetree/bindings/rtc/dw-apb.txt
new file mode 100644
index 0000000..7183f69
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/dw-apb.txt
@@ -0,0 +1,24 @@
+* Designware APB timer
+
+Required properties:
+- compatible: "snps,dw-apb-timer-sp" or "snps,dw-apb-timer-osc"
+- reg: physical base address of the controller and length of memory mapped
+  region.
+- interrupts: IRQ line for the timer.
+- clock-freq: The frequency in HZ of the timer.
clock-frequency is the standard name here.

Rob
quoted hunk
+
+Example:
+
+		timer1: timer at ffc09000 {
+				compatible = "snps,dw-apb-timer-sp";
+				interrupts = <0 168 4>;
+				clock-freq = <200000000>;
+				reg = <0xffc09000 0x1000>;
+			};
+
+		timer2: timer at ffd00000 {
+				compatible = "snps,dw-apb-timer-osc";
+				interrupts = <0 169 4>;
+				clock-freq = <200000000>;
+				reg = <0xffd00000 0x1000>;
+			};
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index a91009c..57eb6ef 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -658,6 +658,7 @@ config ARCH_PICOXCELL
 	select ARM_VIC
 	select CPU_V6K
 	select DW_APB_TIMER
+	select DW_APB_TIMER_OF
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_GPIO
 	select HAVE_TCM
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 99c6b20..4cff7ea 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -15,6 +15,9 @@ config CLKSRC_MMIO
 
 config DW_APB_TIMER
 	bool
+	
+config DW_APB_TIMER_OF
+	bool
 
 config CLKSRC_DBX500_PRCMU
 	bool "Clocksource PRCMU Timer"
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index dd3e661..2cdaf7d 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -10,4 +10,5 @@ obj-$(CONFIG_EM_TIMER_STI)	+= em_sti.o
 obj-$(CONFIG_CLKBLD_I8253)	+= i8253.o
 obj-$(CONFIG_CLKSRC_MMIO)	+= mmio.o
 obj-$(CONFIG_DW_APB_TIMER)	+= dw_apb_timer.o
+obj-$(CONFIG_DW_APB_TIMER_OF)	+= dw_apb_timer_of.o
 obj-$(CONFIG_CLKSRC_DBX500_PRCMU)	+= clksrc-dbx500-prcmu.o
\ No newline at end of file
diff --git a/arch/arm/mach-picoxcell/time.c b/drivers/clocksource/dw_apb_timer_of.c
similarity index 60%
rename from arch/arm/mach-picoxcell/time.c
rename to drivers/clocksource/dw_apb_timer_of.c
index 2ecba67..83bd997 100644
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
 /*
+ * Copyright (C) 2012 Altera Corporation
  * Copyright (c) 2011 Picochip Ltd., Jamie Iles
  *
+ * Modified from mach-picoxcell/time.c
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * All enquiries to support at picochip.com
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include <linux/dw_apb_timer.h>
 #include <linux/of.h>
@@ -15,8 +24,6 @@
 #include <asm/mach/time.h>
 #include <asm/sched_clock.h>
 
-#include "common.h"
-
 static void timer_get_base_and_rate(struct device_node *np,
 				    void __iomem **base, u32 *rate)
 {
@@ -29,7 +36,7 @@ static void timer_get_base_and_rate(struct device_node *np,
 		panic("No clock-freq property for %s", np->name);
 }
 
-static void picoxcell_add_clockevent(struct device_node *event_timer)
+static void add_clockevent(struct device_node *event_timer)
 {
 	void __iomem *iobase;
 	struct dw_apb_clock_event_device *ced;
@@ -49,7 +56,7 @@ static void picoxcell_add_clockevent(struct device_node *event_timer)
 	dw_apb_clockevent_register(ced);
 }
 
-static void picoxcell_add_clocksource(struct device_node *source_timer)
+static void add_clocksource(struct device_node *source_timer)
 {
 	void __iomem *iobase;
 	struct dw_apb_clocksource *cs;
@@ -67,55 +74,55 @@ static void picoxcell_add_clocksource(struct device_node *source_timer)
 
 static void __iomem *sched_io_base;
 
-static u32 picoxcell_read_sched_clock(void)
+static u32 read_sched_clock(void)
 {
 	return __raw_readl(sched_io_base);
 }
 
-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-sp" },
 	{ /* Sentinel */ },
 };
 
-static void picoxcell_init_sched_clock(void)
+static void init_sched_clock(void)
 {
 	struct device_node *sched_timer;
 	u32 rate;
 
-	sched_timer = of_find_matching_node(NULL, picoxcell_rtc_ids);
+	sched_timer = of_find_matching_node(NULL, sptimer_ids);
 	if (!sched_timer)
 		panic("No RTC for sched clock to use");
 
 	timer_get_base_and_rate(sched_timer, &sched_io_base, &rate);
 	of_node_put(sched_timer);
 
-	setup_sched_clock(picoxcell_read_sched_clock, 32, rate);
+	setup_sched_clock(read_sched_clock, 32, rate);
 }
 
-static const struct of_device_id picoxcell_timer_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-timer" },
+static const struct of_device_id osctimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-osc" },
 	{},
 };
 
-static void __init picoxcell_timer_init(void)
+static void __init timer_init(void)
 {
 	struct device_node *event_timer, *source_timer;
 
-	event_timer = of_find_matching_node(NULL, picoxcell_timer_ids);
+	event_timer = of_find_matching_node(NULL, osctimer_ids);
 	if (!event_timer)
 		panic("No timer for clockevent");
-	picoxcell_add_clockevent(event_timer);
+	add_clockevent(event_timer);
 
-	source_timer = of_find_matching_node(event_timer, picoxcell_timer_ids);
+	source_timer = of_find_matching_node(event_timer, osctimer_ids);
 	if (!source_timer)
 		panic("No timer for clocksource");
-	picoxcell_add_clocksource(source_timer);
+	add_clocksource(source_timer);
 
 	of_node_put(source_timer);
 
-	picoxcell_init_sched_clock();
+	init_sched_clock();
 }
 
-struct sys_timer picoxcell_timer = {
-	.init = picoxcell_timer_init,
+struct sys_timer dw_apb_timer = {
+	.init = timer_init,
 };

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: Dinh Nguyen <hidden>
Date: 2012-07-11 15:20:26

On Wed, 2012-07-11 at 00:15 +0100, Jamie Iles wrote:
Hi,

On Tue, Jul 10, 2012 at 04:39:40PM -0500, dinguyen at altera.com wrote:
quoted
From: Dinh Nguyen <redacted>

Make a common device tree glue for clocksource/dw_apb_timer.
Move mach-picoxcell/time.c to be a generic device tree application
of the dw_apb_timer.

Signed-off-by: Pavel Machek <redacted>
Signed-off-by: Dinh Nguyen <redacted>
---
 Documentation/devicetree/bindings/rtc/dw-apb.txt   |   24 ++++++++++
 arch/arm/Kconfig                                   |    1 +
 drivers/clocksource/Kconfig                        |    3 ++
 drivers/clocksource/Makefile                       |    1 +
 .../clocksource/dw_apb_timer_of.c                  |   49 +++++++++++---------
 5 files changed, 57 insertions(+), 21 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/dw-apb.txt
 rename arch/arm/mach-picoxcell/time.c => drivers/clocksource/dw_apb_timer_of.c (60%)
diff --git a/arch/arm/mach-picoxcell/time.c  
b/drivers/clocksource/dw_apb_timer_of.c
similarity index 60%
rename from arch/arm/mach-picoxcell/time.c
rename to drivers/clocksource/dw_apb_timer_of.c
index 2ecba67..83bd997 100644
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
[...]
quoted
-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-sp" },
 	{ /* Sentinel */ },
Please keep picochip,pc3x2-rtc in the compatible list otherwise we won't 
boot any more.
Should I add another .compatible entry here, or make the change in
picoxcell-pc3x2 and picoxcell-pc3x3 dtsi files?
quoted
-static const struct of_device_id picoxcell_timer_ids[] __initconst = 
{
-	{ .compatible = "picochip,pc3x2-timer" },
+static const struct of_device_id osctimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-osc" },
 	{},
 };
The same here.  Also, I'm not sure that the split of these patches is 
correct - there isn't any bisectability here as you remove the timer in 
this patch but picoxcell won't build.  I think squashing these 2 patches 
is fine.
Will do...thanks for the review.

Dinh
I can't test on hardware right now, but with those changes:

Acked-by: Jamie Iles <redacted>

Jamie

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: Dinh Nguyen <hidden>
Date: 2012-07-11 15:21:01

On Tue, 2012-07-10 at 20:39 -0500, Rob Herring wrote:
Dinh,

On 07/10/2012 04:39 PM, dinguyen at altera.com wrote:
quoted
From: Dinh Nguyen <redacted>

Make a common device tree glue for clocksource/dw_apb_timer.
Move mach-picoxcell/time.c to be a generic device tree application
of the dw_apb_timer.

Signed-off-by: Pavel Machek <redacted>
Signed-off-by: Dinh Nguyen <redacted>
---
 Documentation/devicetree/bindings/rtc/dw-apb.txt   |   24 ++++++++++
 arch/arm/Kconfig                                   |    1 +
 drivers/clocksource/Kconfig                        |    3 ++
 drivers/clocksource/Makefile                       |    1 +
 .../clocksource/dw_apb_timer_of.c                  |   49 +++++++++++---------
 5 files changed, 57 insertions(+), 21 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/dw-apb.txt
 rename arch/arm/mach-picoxcell/time.c => drivers/clocksource/dw_apb_timer_of.c (60%)
diff --git a/Documentation/devicetree/bindings/rtc/dw-apb.txt b/Documentation/devicetree/bindings/rtc/dw-apb.txt
new file mode 100644
index 0000000..7183f69
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/dw-apb.txt
@@ -0,0 +1,24 @@
+* Designware APB timer
+
+Required properties:
+- compatible: "snps,dw-apb-timer-sp" or "snps,dw-apb-timer-osc"
+- reg: physical base address of the controller and length of memory mapped
+  region.
+- interrupts: IRQ line for the timer.
+- clock-freq: The frequency in HZ of the timer.
clock-frequency is the standard name here.
Thanks for the review Rob!

Dinh
Rob
quoted
+
+Example:
+
+           timer1: timer at ffc09000 {
+                           compatible = "snps,dw-apb-timer-sp";
+                           interrupts = <0 168 4>;
+                           clock-freq = <200000000>;
+                           reg = <0xffc09000 0x1000>;
+                   };
+
+           timer2: timer at ffd00000 {
+                           compatible = "snps,dw-apb-timer-osc";
+                           interrupts = <0 169 4>;
+                           clock-freq = <200000000>;
+                           reg = <0xffd00000 0x1000>;
+                   };
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index a91009c..57eb6ef 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -658,6 +658,7 @@ config ARCH_PICOXCELL
    select ARM_VIC
    select CPU_V6K
    select DW_APB_TIMER
+   select DW_APB_TIMER_OF
    select GENERIC_CLOCKEVENTS
    select GENERIC_GPIO
    select HAVE_TCM
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 99c6b20..4cff7ea 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -15,6 +15,9 @@ config CLKSRC_MMIO

 config DW_APB_TIMER
    bool
+
+config DW_APB_TIMER_OF
+   bool

 config CLKSRC_DBX500_PRCMU
    bool "Clocksource PRCMU Timer"
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index dd3e661..2cdaf7d 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -10,4 +10,5 @@ obj-$(CONFIG_EM_TIMER_STI)        += em_sti.o
 obj-$(CONFIG_CLKBLD_I8253) += i8253.o
 obj-$(CONFIG_CLKSRC_MMIO)  += mmio.o
 obj-$(CONFIG_DW_APB_TIMER) += dw_apb_timer.o
+obj-$(CONFIG_DW_APB_TIMER_OF)      += dw_apb_timer_of.o
 obj-$(CONFIG_CLKSRC_DBX500_PRCMU)  += clksrc-dbx500-prcmu.o
\ No newline at end of file
diff --git a/arch/arm/mach-picoxcell/time.c b/drivers/clocksource/dw_apb_timer_of.c
similarity index 60%
rename from arch/arm/mach-picoxcell/time.c
rename to drivers/clocksource/dw_apb_timer_of.c
index 2ecba67..83bd997 100644
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
 /*
+ * Copyright (C) 2012 Altera Corporation
  * Copyright (c) 2011 Picochip Ltd., Jamie Iles
  *
+ * Modified from mach-picoxcell/time.c
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * All enquiries to support at picochip.com
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include <linux/dw_apb_timer.h>
 #include <linux/of.h>
@@ -15,8 +24,6 @@
 #include <asm/mach/time.h>
 #include <asm/sched_clock.h>

-#include "common.h"
-
 static void timer_get_base_and_rate(struct device_node *np,
                                void __iomem **base, u32 *rate)
 {
@@ -29,7 +36,7 @@ static void timer_get_base_and_rate(struct device_node *np,
            panic("No clock-freq property for %s", np->name);
 }

-static void picoxcell_add_clockevent(struct device_node *event_timer)
+static void add_clockevent(struct device_node *event_timer)
 {
    void __iomem *iobase;
    struct dw_apb_clock_event_device *ced;
@@ -49,7 +56,7 @@ static void picoxcell_add_clockevent(struct device_node *event_timer)
    dw_apb_clockevent_register(ced);
 }

-static void picoxcell_add_clocksource(struct device_node *source_timer)
+static void add_clocksource(struct device_node *source_timer)
 {
    void __iomem *iobase;
    struct dw_apb_clocksource *cs;
@@ -67,55 +74,55 @@ static void picoxcell_add_clocksource(struct device_node *source_timer)

 static void __iomem *sched_io_base;

-static u32 picoxcell_read_sched_clock(void)
+static u32 read_sched_clock(void)
 {
    return __raw_readl(sched_io_base);
 }

-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-   { .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+   { .compatible = "snps,dw-apb-timer-sp" },
    { /* Sentinel */ },
 };

-static void picoxcell_init_sched_clock(void)
+static void init_sched_clock(void)
 {
    struct device_node *sched_timer;
    u32 rate;

-   sched_timer = of_find_matching_node(NULL, picoxcell_rtc_ids);
+   sched_timer = of_find_matching_node(NULL, sptimer_ids);
    if (!sched_timer)
            panic("No RTC for sched clock to use");

    timer_get_base_and_rate(sched_timer, &sched_io_base, &rate);
    of_node_put(sched_timer);

-   setup_sched_clock(picoxcell_read_sched_clock, 32, rate);
+   setup_sched_clock(read_sched_clock, 32, rate);
 }

-static const struct of_device_id picoxcell_timer_ids[] __initconst = {
-   { .compatible = "picochip,pc3x2-timer" },
+static const struct of_device_id osctimer_ids[] __initconst = {
+   { .compatible = "snps,dw-apb-timer-osc" },
    {},
 };

-static void __init picoxcell_timer_init(void)
+static void __init timer_init(void)
 {
    struct device_node *event_timer, *source_timer;

-   event_timer = of_find_matching_node(NULL, picoxcell_timer_ids);
+   event_timer = of_find_matching_node(NULL, osctimer_ids);
    if (!event_timer)
            panic("No timer for clockevent");
-   picoxcell_add_clockevent(event_timer);
+   add_clockevent(event_timer);

-   source_timer = of_find_matching_node(event_timer, picoxcell_timer_ids);
+   source_timer = of_find_matching_node(event_timer, osctimer_ids);
    if (!source_timer)
            panic("No timer for clocksource");
-   picoxcell_add_clocksource(source_timer);
+   add_clocksource(source_timer);

    of_node_put(source_timer);

-   picoxcell_init_sched_clock();
+   init_sched_clock();
 }

-struct sys_timer picoxcell_timer = {
-   .init = picoxcell_timer_init,
+struct sys_timer dw_apb_timer = {
+   .init = timer_init,
 };

Confidentiality Notice.
This message may contain information that is confidential or otherwise protected from disclosure. If you are not the intended recipient, you are hereby notified that any use, disclosure, dissemination, distribution,  or copying  of this message, or any attachments, is strictly prohibited.  If you have received this message in error, please advise the sender by reply e-mail, and delete the message and any attachments.  Thank you.

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: Jamie Iles <hidden>
Date: 2012-07-11 16:03:58

On Wed, Jul 11, 2012 at 10:20:26AM -0500, Dinh Nguyen wrote:
On Wed, 2012-07-11 at 00:15 +0100, Jamie Iles wrote:
quoted
On Tue, Jul 10, 2012 at 04:39:40PM -0500, dinguyen at altera.com wrote:
quoted
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
[...]
quoted
-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-sp" },
 	{ /* Sentinel */ },
Please keep picochip,pc3x2-rtc in the compatible list otherwise we won't 
boot any more.
Should I add another .compatible entry here, or make the change in
picoxcell-pc3x2 and picoxcell-pc3x3 dtsi files?
I think that adding another compatible entry is the right thing to do 
here - it avoids churn of the dtsi files and means that the compiled 
device-tree blobs on deployed devices won't need updating.

Jamie

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: Pavel Machek <hidden>
Date: 2012-07-11 16:23:41

On Wed 2012-07-11 17:03:58, Jamie Iles wrote:
On Wed, Jul 11, 2012 at 10:20:26AM -0500, Dinh Nguyen wrote:
quoted
On Wed, 2012-07-11 at 00:15 +0100, Jamie Iles wrote:
quoted
On Tue, Jul 10, 2012 at 04:39:40PM -0500, dinguyen at altera.com wrote:
quoted
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
[...]
quoted
-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-	{ .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+	{ .compatible = "snps,dw-apb-timer-sp" },
 	{ /* Sentinel */ },
Please keep picochip,pc3x2-rtc in the compatible list otherwise we won't 
boot any more.
Should I add another .compatible entry here, or make the change in
picoxcell-pc3x2 and picoxcell-pc3x3 dtsi files?
I think that adding another compatible entry is the right thing to do 
here - it avoids churn of the dtsi files and means that the compiled 
device-tree blobs on deployed devices won't need updating.
Rob requested making "-freq" -> "-frequency" change, which will make
it incompatible. 

Shall we:

a) drop all the compatibility

b) make it parse both "-freq" and "-freqency" and both sets of ids

?

Thanks,
									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[PATCH v2 1/2] clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer

From: Dinh Nguyen <hidden>
Date: 2012-07-11 16:32:20

On Wed, 2012-07-11 at 18:23 +0200, Pavel Machek wrote:
On Wed 2012-07-11 17:03:58, Jamie Iles wrote:
quoted
On Wed, Jul 11, 2012 at 10:20:26AM -0500, Dinh Nguyen wrote:
quoted
On Wed, 2012-07-11 at 00:15 +0100, Jamie Iles wrote:
quoted
On Tue, Jul 10, 2012 at 04:39:40PM -0500, dinguyen at altera.com wrote:
quoted
--- a/arch/arm/mach-picoxcell/time.c
+++ b/drivers/clocksource/dw_apb_timer_of.c
@@ -1,11 +1,20 @@
[...]
quoted
-static const struct of_device_id picoxcell_rtc_ids[] __initconst = {
-     { .compatible = "picochip,pc3x2-rtc" },
+static const struct of_device_id sptimer_ids[] __initconst = {
+     { .compatible = "snps,dw-apb-timer-sp" },
      { /* Sentinel */ },
Please keep picochip,pc3x2-rtc in the compatible list otherwise we won't
boot any more.
Should I add another .compatible entry here, or make the change in
picoxcell-pc3x2 and picoxcell-pc3x3 dtsi files?
I think that adding another compatible entry is the right thing to do
here - it avoids churn of the dtsi files and means that the compiled
device-tree blobs on deployed devices won't need updating.
Rob requested making "-freq" -> "-frequency" change, which will make
it incompatible.
I think everyone uses -frequency. Just realized that I need up send out
a v4.
Because this is wrong:
if (of_property_read_u32(np, "clock-freq", rate))

Dinh
Shall we:

a) drop all the compatibility

b) make it parse both "-freq" and "-freqency" and both sets of ids

?

Thanks,
                                                                      Pavel

Confidentiality Notice.
This message may contain information that is confidential or otherwise protected from disclosure. If you are not the intended recipient, you are hereby notified that any use, disclosure, dissemination, distribution,  or copying  of this message, or any attachments, is strictly prohibited.  If you have received this message in error, please advise the sender by reply e-mail, and delete the message and any attachments.  Thank you.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help