From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 18/19] ARM: bcmring: convert to sp804 clocksource
Date: Mon, 16 May 2011 18:31:36 +0100 [thread overview]
Message-ID: <E1QM1do-0003EP-DQ@rmk-PC.arm.linux.org.uk> (raw)
In-Reply-To: <20110516172334.GD13659@n2100.arm.linux.org.uk>
bcmring has a set of four sp804 timers incorporated, yet it has its
own copy of the sp804 code. Convert its clocksource implementation
to the standard sp804 support code.
Cc: Jiandong Zheng <jdzheng@broadcom.com>
Cc: Scott Branden <sbranden@broadcom.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
arch/arm/Kconfig | 1 +
arch/arm/mach-bcmring/core.c | 108 +++++++++++++++++-------------------------
2 files changed, 45 insertions(+), 64 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 43f003a..903c9c4 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -297,6 +297,7 @@ config ARCH_BCMRING
depends on MMU
select CPU_V6
select ARM_AMBA
+ select ARM_TIMER_SP804
select CLKDEV_LOOKUP
select GENERIC_CLOCKEVENTS
select ARCH_WANT_OPTIONAL_GPIOLIB
diff --git a/arch/arm/mach-bcmring/core.c b/arch/arm/mach-bcmring/core.c
index 8fc2035..0ea33ff 100644
--- a/arch/arm/mach-bcmring/core.c
+++ b/arch/arm/mach-bcmring/core.c
@@ -37,6 +37,7 @@
#include <linux/io.h>
#include <asm/irq.h>
#include <asm/hardware/arm_timer.h>
+#include <asm/hardware/timer-sp.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
@@ -97,6 +98,35 @@ static struct clk dummy_apb_pclk = {
.mode = CLK_MODE_XTAL,
};
+/* Timer 0 - 25 MHz, Timer3 at bus clock rate, typically 150-166 MHz */
+#if defined(CONFIG_ARCH_FPGA11107)
+/* fpga cpu/bus are currently 30 times slower so scale frequency as well to */
+/* slow down Linux's sense of time */
+#define TIMER0_FREQUENCY_MHZ (tmrHw_LOW_FREQUENCY_MHZ * 30)
+#define TIMER1_FREQUENCY_MHZ (tmrHw_LOW_FREQUENCY_MHZ * 30)
+#define TIMER3_FREQUENCY_MHZ (tmrHw_HIGH_FREQUENCY_MHZ * 30)
+#define TIMER3_FREQUENCY_KHZ (tmrHw_HIGH_FREQUENCY_HZ / 1000 * 30)
+#else
+#define TIMER0_FREQUENCY_MHZ tmrHw_LOW_FREQUENCY_MHZ
+#define TIMER1_FREQUENCY_MHZ tmrHw_LOW_FREQUENCY_MHZ
+#define TIMER3_FREQUENCY_MHZ tmrHw_HIGH_FREQUENCY_MHZ
+#define TIMER3_FREQUENCY_KHZ (tmrHw_HIGH_FREQUENCY_HZ / 1000)
+#endif
+
+static struct clk sp804_timer1_clk = {
+ .name = "sp804-timer-1",
+ .type = CLK_TYPE_PRIMARY,
+ .mode = CLK_MODE_XTAL,
+ .rate_hz = TIMER1_FREQUENCY_MHZ * 1000000,
+};
+
+static struct clk sp804_timer3_clk = {
+ .name = "sp804-timer-3",
+ .type = CLK_TYPE_PRIMARY,
+ .mode = CLK_MODE_XTAL,
+ .rate_hz = TIMER3_FREQUENCY_KHZ * 1000,
+};
+
static struct clk_lookup lookups[] = {
{ /* Bus clock */
.con_id = "apb_pclk",
@@ -107,6 +137,14 @@ static struct clk_lookup lookups[] = {
}, { /* UART1 */
.dev_id = "uartb",
.clk = &uart_clk,
+ }, { /* SP804 timer 1 */
+ .dev_id = "sp804",
+ .con_id = "timer1",
+ .clk = &sp804_timer1_clk,
+ }, { /* SP804 timer 3 */
+ .dev_id = "sp804",
+ .con_id = "timer3",
+ .clk = &sp804_timer3_clk,
}
};
@@ -162,25 +200,10 @@ void __init bcmring_amba_init(void)
/*
* Where is the timer (VA)?
*/
-#define TIMER0_VA_BASE MM_IO_BASE_TMR
-#define TIMER1_VA_BASE (MM_IO_BASE_TMR + 0x20)
-#define TIMER2_VA_BASE (MM_IO_BASE_TMR + 0x40)
-#define TIMER3_VA_BASE (MM_IO_BASE_TMR + 0x60)
-
-/* Timer 0 - 25 MHz, Timer3 at bus clock rate, typically 150-166 MHz */
-#if defined(CONFIG_ARCH_FPGA11107)
-/* fpga cpu/bus are currently 30 times slower so scale frequency as well to */
-/* slow down Linux's sense of time */
-#define TIMER0_FREQUENCY_MHZ (tmrHw_LOW_FREQUENCY_MHZ * 30)
-#define TIMER1_FREQUENCY_MHZ (tmrHw_LOW_FREQUENCY_MHZ * 30)
-#define TIMER3_FREQUENCY_MHZ (tmrHw_HIGH_FREQUENCY_MHZ * 30)
-#define TIMER3_FREQUENCY_KHZ (tmrHw_HIGH_FREQUENCY_HZ / 1000 * 30)
-#else
-#define TIMER0_FREQUENCY_MHZ tmrHw_LOW_FREQUENCY_MHZ
-#define TIMER1_FREQUENCY_MHZ tmrHw_LOW_FREQUENCY_MHZ
-#define TIMER3_FREQUENCY_MHZ tmrHw_HIGH_FREQUENCY_MHZ
-#define TIMER3_FREQUENCY_KHZ (tmrHw_HIGH_FREQUENCY_HZ / 1000)
-#endif
+#define TIMER0_VA_BASE ((void __iomem *)MM_IO_BASE_TMR)
+#define TIMER1_VA_BASE ((void __iomem *)(MM_IO_BASE_TMR + 0x20))
+#define TIMER2_VA_BASE ((void __iomem *)(MM_IO_BASE_TMR + 0x40))
+#define TIMER3_VA_BASE ((void __iomem *)(MM_IO_BASE_TMR + 0x60))
#define TICKS_PER_uSEC TIMER0_FREQUENCY_MHZ
@@ -189,10 +212,7 @@ void __init bcmring_amba_init(void)
*
*/
#define mSEC_1 1000
-#define mSEC_5 (mSEC_1 * 5)
#define mSEC_10 (mSEC_1 * 10)
-#define mSEC_25 (mSEC_1 * 25)
-#define SEC_1 (mSEC_1 * 1000)
/*
* How long is the timer interval?
@@ -279,53 +299,13 @@ static struct irqaction bcmring_timer_irq = {
.handler = bcmring_timer_interrupt,
};
-static cycle_t bcmring_get_cycles_timer1(struct clocksource *cs)
-{
- return ~readl(TIMER1_VA_BASE + TIMER_VALUE);
-}
-
-static cycle_t bcmring_get_cycles_timer3(struct clocksource *cs)
-{
- return ~readl(TIMER3_VA_BASE + TIMER_VALUE);
-}
-
-static struct clocksource clocksource_bcmring_timer1 = {
- .name = "timer1",
- .rating = 200,
- .read = bcmring_get_cycles_timer1,
- .mask = CLOCKSOURCE_MASK(32),
- .flags = CLOCK_SOURCE_IS_CONTINUOUS,
-};
-
-static struct clocksource clocksource_bcmring_timer3 = {
- .name = "timer3",
- .rating = 100,
- .read = bcmring_get_cycles_timer3,
- .mask = CLOCKSOURCE_MASK(32),
- .flags = CLOCK_SOURCE_IS_CONTINUOUS,
-};
-
static int __init bcmring_clocksource_init(void)
{
/* setup timer1 as free-running clocksource */
- writel(0, TIMER1_VA_BASE + TIMER_CTRL);
- writel(0xffffffff, TIMER1_VA_BASE + TIMER_LOAD);
- writel(0xffffffff, TIMER1_VA_BASE + TIMER_VALUE);
- writel(TIMER_CTRL_32BIT | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC,
- TIMER1_VA_BASE + TIMER_CTRL);
-
- clocksource_register_khz(&clocksource_bcmring_timer1,
- TIMER1_FREQUENCY_MHZ * 1000);
+ sp804_clocksource_init(TIMER1_VA_BASE, "timer1");
/* setup timer3 as free-running clocksource */
- writel(0, TIMER3_VA_BASE + TIMER_CTRL);
- writel(0xffffffff, TIMER3_VA_BASE + TIMER_LOAD);
- writel(0xffffffff, TIMER3_VA_BASE + TIMER_VALUE);
- writel(TIMER_CTRL_32BIT | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC,
- TIMER3_VA_BASE + TIMER_CTRL);
-
- clocksource_register_khz(&clocksource_bcmring_timer3,
- TIMER3_FREQUENCY_KHZ);
+ sp804_clocksource_init(TIMER3_VA_BASE, "timer3");
return 0;
}
--
1.7.4.4
next prev parent reply other threads:[~2011-05-16 17:31 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-16 17:23 [PATCH v2 00/19] Consolidate simple ARM MMIO clock sources Russell King - ARM Linux
2011-05-16 17:25 ` [PATCH 01/19] Make clocksource name const Russell King - ARM Linux
2011-05-19 1:24 ` Hans J. Koch
2011-05-19 7:19 ` Linus Walleij
2011-05-16 17:26 ` [PATCH 02/19] ARM: s5p: consolidate selection of timer register Russell King - ARM Linux
2011-05-16 17:26 ` [PATCH 03/19] ARM: omap1: delete useless interrupt handler Russell King - ARM Linux
2011-05-16 17:26 ` [PATCH 04/19] ARM: omap1: convert to using readl/writel instead of volatile struct Russell King - ARM Linux
2011-05-17 21:59 ` Catalin Marinas
2011-05-18 7:56 ` Russell King - ARM Linux
2011-05-18 20:48 ` Linus Walleij
2011-05-16 17:27 ` [PATCH 05/19] ARM: update sa1100 to reflect PXA updates Russell King - ARM Linux
2011-05-16 17:27 ` [PATCH 06/19] clocksource: add common mmio clocksource Russell King - ARM Linux
2011-05-16 17:27 ` [PATCH 07/19] clocksource: convert ARM 32-bit up counting clocksources Russell King - ARM Linux
2011-05-16 18:30 ` Eric Miao
2011-05-17 6:38 ` Sascha Hauer
2011-05-16 17:28 ` [PATCH 08/19] clocksource: convert ARM 32-bit down " Russell King - ARM Linux
2011-05-16 17:28 ` [PATCH 09/19] clocksource: convert W90x900 24-bit down counting clocksource Russell King - ARM Linux
2011-05-16 17:28 ` [PATCH 10/19] clocksource: convert Integrator/AP 16-bit " Russell King - ARM Linux
2011-05-16 17:29 ` [PATCH 11/19] clocksource: convert SPEAr platforms 16-bit up " Russell King - ARM Linux
2011-05-16 17:29 ` [PATCH 12/19] clocksource: convert MXS timrotv2 to 32-bit down " Russell King - ARM Linux
2011-05-16 17:29 ` [PATCH 13/19] clocksource: convert OMAP1 " Russell King - ARM Linux
2011-05-16 17:30 ` [PATCH 14/19] clocksource: ARM sp804: allow clocksource name to be specified Russell King - ARM Linux
2011-05-16 17:30 ` [PATCH 15/19] clocksource: ARM sp804: obtain sp804 timer rate via clks Russell King - ARM Linux
2011-05-16 22:18 ` Rob Herring
2011-05-16 22:34 ` Russell King - ARM Linux
2011-05-16 17:30 ` [PATCH 16/19] clockevents: ARM sp804: allow clockevent name to be specified Russell King - ARM Linux
2011-05-16 21:25 ` Rob Herring
2011-05-16 21:33 ` Russell King - ARM Linux
2011-05-23 10:55 ` Catalin Marinas
2011-05-16 17:31 ` [PATCH 17/19] clockevents: ARM sp804: obtain sp804 timer rate via clks Russell King - ARM Linux
2011-05-16 21:24 ` Rob Herring
2011-05-16 21:34 ` Russell King - ARM Linux
2011-05-23 10:56 ` Catalin Marinas
2011-05-16 17:31 ` Russell King - ARM Linux [this message]
2011-05-16 17:31 ` [PATCH 19/19] ARM: bcmring: convert to use sp804 clockevents Russell King - ARM Linux
2011-05-17 23:04 ` [PATCH] ARM: bcmring: fix patches to convert to " Jiandong Zheng
2011-05-17 23:20 ` Russell King - ARM Linux
2011-05-17 23:42 ` Jiandong Zheng
2011-05-18 15:46 ` Russell King - ARM Linux
2011-05-18 18:01 ` [PATCH] ARM: bcmring: Add clkdev table in init_early Jiandong Zheng
2011-05-18 20:42 ` Russell King - ARM Linux
2011-05-18 22:37 ` Russell King - ARM Linux
2011-05-18 22:45 ` Jiandong Zheng
2011-05-18 22:52 ` Russell King - ARM Linux
2011-05-18 23:38 ` Jiandong Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1QM1do-0003EP-DQ@rmk-PC.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).