-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
clocksource: add common mmio clocksource
Add a generic mmio clocksource, covering both 32-bit and 16-bit register access sizes, for up or down counters. This can be used to easily create clocksources for simple counter-based implementations. Cc: Alessandro Rubini <rubini@unipv.it> Cc: Colin Cross <ccross@android.com> Cc: Eric Miao <eric.y.miao@gmail.com> Cc: Erik Gilling <konkers@android.com> Acked-by: "Hans J. Koch" <hjk@hansjkoch.de> Cc: Imre Kaloz <kaloz@openwrt.org> Cc: Krzysztof Halasa <khc@pm.waw.pl> Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: Lennert Buytenhek <kernel@wantstofly.org> Cc: Linus Walleij <linus.walleij@stericsson.com> Cc: linux-omap@vger.kernel.org Acked-by: Nicolas Pitre <nico@fluxnic.net> Cc: Olof Johansson <olof@lixom.net> Tested-by: Sascha Hauer <s.hauer@pengutronix.de> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Tony Lindgren <tony@atomide.com> Reviewed-by: Viresh Kumar <viresh.kumar@st.com> Cc: Wan ZongShun <mcuos.com@gmail.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- Loading branch information
Russell King
committed
May 23, 2011
1 parent
1ba4c3c
commit 442c817
Showing
4 changed files
with
85 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,5 @@ | ||
config CLKSRC_I8253 | ||
bool | ||
|
||
config CLKSRC_MMIO | ||
bool |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
* Generic MMIO clocksource support | ||
* | ||
* 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. | ||
*/ | ||
#include <linux/clocksource.h> | ||
#include <linux/errno.h> | ||
#include <linux/init.h> | ||
#include <linux/slab.h> | ||
|
||
struct clocksource_mmio { | ||
void __iomem *reg; | ||
struct clocksource clksrc; | ||
}; | ||
|
||
static inline struct clocksource_mmio *to_mmio_clksrc(struct clocksource *c) | ||
{ | ||
return container_of(c, struct clocksource_mmio, clksrc); | ||
} | ||
|
||
cycle_t clocksource_mmio_readl_up(struct clocksource *c) | ||
{ | ||
return readl_relaxed(to_mmio_clksrc(c)->reg); | ||
} | ||
|
||
cycle_t clocksource_mmio_readl_down(struct clocksource *c) | ||
{ | ||
return ~readl_relaxed(to_mmio_clksrc(c)->reg); | ||
} | ||
|
||
cycle_t clocksource_mmio_readw_up(struct clocksource *c) | ||
{ | ||
return readw_relaxed(to_mmio_clksrc(c)->reg); | ||
} | ||
|
||
cycle_t clocksource_mmio_readw_down(struct clocksource *c) | ||
{ | ||
return ~(unsigned)readw_relaxed(to_mmio_clksrc(c)->reg); | ||
} | ||
|
||
/** | ||
* clocksource_mmio_init - Initialize a simple mmio based clocksource | ||
* @base: Virtual address of the clock readout register | ||
* @name: Name of the clocksource | ||
* @hz: Frequency of the clocksource in Hz | ||
* @rating: Rating of the clocksource | ||
* @bits: Number of valid bits | ||
* @read: One of clocksource_mmio_read*() above | ||
*/ | ||
int __init clocksource_mmio_init(void __iomem *base, const char *name, | ||
unsigned long hz, int rating, unsigned bits, | ||
cycle_t (*read)(struct clocksource *)) | ||
{ | ||
struct clocksource_mmio *cs; | ||
|
||
if (bits > 32 || bits < 16) | ||
return -EINVAL; | ||
|
||
cs = kzalloc(sizeof(struct clocksource_mmio), GFP_KERNEL); | ||
if (!cs) | ||
return -ENOMEM; | ||
|
||
cs->reg = base; | ||
cs->clksrc.name = name; | ||
cs->clksrc.rating = rating; | ||
cs->clksrc.read = read; | ||
cs->clksrc.mask = CLOCKSOURCE_MASK(bits); | ||
cs->clksrc.flags = CLOCK_SOURCE_IS_CONTINUOUS; | ||
|
||
return clocksource_register_hz(&cs->clksrc, hz); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters