* [PATCH V2 0/7] ARM: OMAP2+: System timer updates
@ 2013-02-04 17:42 Jon Hunter
2013-02-04 17:43 ` [PATCH V2 1/7] ARM: OMAP2+: Fix selection of clockevent timer when using device-tree Jon Hunter
` (7 more replies)
0 siblings, 8 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:42 UTC (permalink / raw)
To: linux-arm-kernel
This series consists mainly of clean-ups for clockevents and
clocksource timers on OMAP2+ devices. The most significant change
in functionality comes from the 5th patch which is changing the
selection of the clocksource timer for OMAP3 and AM335x devices
when gptimers are used for clocksource. This change came about from
Vaibhav Bedia's series for AM335x [1]. See patch for more details on
the exact nature of the change.
Boot tested with and without device-tree on OMAP2420 H4, OMAP3430 SDP,
OMAP3430 Beagle Board, OMAP4430 SDP and AM335x EVM (AM335x only
supports device-tree boot). Also boot tested boards with kernel boot
parameter "clocksource=gp_timer".
This series is based upon ARM-SoC next branch.
V2 changes:
- Fixed bug in patch that updates clocksource and clockevents timer
names to use the hwmod timer names (thanks Vaibhav Bedia!)
- Updated patch that removes the hard-coded ID test to return an error
as soon as clk_set_parent fails instead of waiting for the end of the
function.
- Fixed bug in patches that "simplify system timer clock definitions"
and "simplify system timer definitions" that was prevent omap4/5
boards from booting with kernel boot parameter "clocksource=gp_timer".
- Updated changelog for patch "simplify system timer definitions" per
feedback received from Igor.
- Added new patch to store the timer ID in the omap_dm_timer structure
to clean-up the code.
- Added new patch to fix a sparse warning seen in ARM-SOC next.
[1] https://patchwork.kernel.org/patch/1921421/
Jon Hunter (7):
ARM: OMAP2+: Fix selection of clockevent timer when using device-tree
ARM: OMAP2+: Display correct system timer name
ARM: OMAP2+: Remove hard-coded test on timer ID
ARM: OMAP2+: Simplify system timer clock definitions
ARM: OMAP2+: Simplify system timers definitions
ARM: OMAP2+: Store ID of system timers in timer structure
ARM: OMAP4+: Fix sparse warning in system timers
arch/arm/mach-omap2/board-cm-t3517.c | 2 +-
arch/arm/mach-omap2/board-generic.c | 2 +-
arch/arm/mach-omap2/common.h | 3 +-
arch/arm/mach-omap2/timer.c | 121 +++++++++++++++++-----------------
4 files changed, 65 insertions(+), 63 deletions(-)
--
1.7.10.4
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V2 1/7] ARM: OMAP2+: Fix selection of clockevent timer when using device-tree
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
@ 2013-02-04 17:43 ` Jon Hunter
2013-02-04 17:43 ` [PATCH V2 2/7] ARM: OMAP2+: Display correct system timer name Jon Hunter
` (6 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:43 UTC (permalink / raw)
To: linux-arm-kernel
Commit 9725f44 (ARM: OMAP: Add DT support for timer driver) added
device-tree support for selecting a clockevent timer by property.
However, the code is currently ignoring the property passed and
selecting the first available timer found. Hence, for the OMAP3 beagle
board timer-12 is not being selected as expected. Fix this problem
by ensuring the timer property is passed to omap_get_timer_dt().
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
---
arch/arm/mach-omap2/timer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 2822833..72c2ca1 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -227,7 +227,7 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
int r = 0;
if (of_have_populated_dt()) {
- np = omap_get_timer_dt(omap_timer_match, NULL);
+ np = omap_get_timer_dt(omap_timer_match, property);
if (!np)
return -ENODEV;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V2 2/7] ARM: OMAP2+: Display correct system timer name
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
2013-02-04 17:43 ` [PATCH V2 1/7] ARM: OMAP2+: Fix selection of clockevent timer when using device-tree Jon Hunter
@ 2013-02-04 17:43 ` Jon Hunter
2013-02-04 17:43 ` [PATCH V2 3/7] ARM: OMAP2+: Remove hard-coded test on timer ID Jon Hunter
` (5 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:43 UTC (permalink / raw)
To: linux-arm-kernel
Currently on boot, when displaying the name of the gptimer used for
clockevents and clocksource timers, the timer ID is shown. However,
when booting with device-tree, the timer ID is not used to select a
gptimer but a timer property. Hence, it is possible that the timer
selected when booting with device-tree does not match the ID shown.
Therefore, instead display the HWMOD name of the gptimer and use
the HWMOD name as the name of clockevent and clocksource timer (if a
gptimer is used).
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
---
arch/arm/mach-omap2/timer.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 72c2ca1..83118fb 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -129,7 +129,6 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
}
static struct clock_event_device clockevent_gpt = {
- .name = "gp_timer",
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
.rating = 300,
.set_next_event = omap2_gp_timer_set_next_event,
@@ -214,10 +213,11 @@ static u32 __init omap_dm_timer_get_errata(void)
}
static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
- int gptimer_id,
- const char *fck_source,
- const char *property,
- int posted)
+ int gptimer_id,
+ const char *fck_source,
+ const char *property,
+ const char **timer_name,
+ int posted)
{
char name[10]; /* 10 = sizeof("gptXX_Xck0") */
const char *oh_name;
@@ -254,6 +254,8 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
if (!oh)
return -ENODEV;
+ *timer_name = oh->name;
+
if (!of_have_populated_dt()) {
r = omap_hwmod_get_resource_byname(oh, IORESOURCE_IRQ, NULL,
&irq);
@@ -327,7 +329,7 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
__omap_dm_timer_override_errata(&clkev, OMAP_TIMER_ERRATA_I103_I767);
res = omap_dm_timer_init_one(&clkev, gptimer_id, fck_source, property,
- OMAP_TIMER_POSTED);
+ &clockevent_gpt.name, OMAP_TIMER_POSTED);
BUG_ON(res);
omap2_gp_timer_irq.dev_id = &clkev;
@@ -341,8 +343,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
3, /* Timer internal resynch latency */
0xffffffff);
- pr_info("OMAP clockevent source: GPTIMER%d at %lu Hz\n",
- gptimer_id, clkev.rate);
+ pr_info("OMAP clockevent source: %s at %lu Hz\n", clockevent_gpt.name,
+ clkev.rate);
}
/* Clocksource code */
@@ -359,7 +361,6 @@ static cycle_t clocksource_read_cycles(struct clocksource *cs)
}
static struct clocksource clocksource_gpt = {
- .name = "gp_timer",
.rating = 300,
.read = clocksource_read_cycles,
.mask = CLOCKSOURCE_MASK(32),
@@ -449,6 +450,7 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
clksrc.errata = omap_dm_timer_get_errata();
res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source, NULL,
+ &clocksource_gpt.name,
OMAP_TIMER_NONPOSTED);
BUG_ON(res);
@@ -461,8 +463,8 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
pr_err("Could not register clocksource %s\n",
clocksource_gpt.name);
else
- pr_info("OMAP clocksource: GPTIMER%d at %lu Hz\n",
- gptimer_id, clksrc.rate);
+ pr_info("OMAP clocksource: %s at %lu Hz\n",
+ clocksource_gpt.name, clksrc.rate);
}
#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
--
1.7.10.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V2 3/7] ARM: OMAP2+: Remove hard-coded test on timer ID
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
2013-02-04 17:43 ` [PATCH V2 1/7] ARM: OMAP2+: Fix selection of clockevent timer when using device-tree Jon Hunter
2013-02-04 17:43 ` [PATCH V2 2/7] ARM: OMAP2+: Display correct system timer name Jon Hunter
@ 2013-02-04 17:43 ` Jon Hunter
2013-02-04 17:46 ` Russell King - ARM Linux
2013-02-04 17:43 ` [PATCH V2 4/7] ARM: OMAP2+: Simplify system timer clock definitions Jon Hunter
` (4 subsequent siblings)
7 siblings, 1 reply; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:43 UTC (permalink / raw)
To: linux-arm-kernel
Currently, when configuring the clock-events and clock-source timers
for OMAP2+ devices, we check whether the timer ID is 12 before
attempting to set the parent clock for the timer.
This test was added for OMAP3 general purpose devices (no security
features enabled) that a 12th timer available but unlike the other
timers only has a single functional clock source. Calling
clk_set_parent() for this 12th timer would always return an error
because there is only one choice for a parent clock. Therefore,
this hard-coded timer ID test was added.
To avoid this timer ID test, simply check to see if the timer's current
parent clock is the desired parent clock and only call clk_set_parent()
if this is not the case.
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
---
arch/arm/mach-omap2/timer.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 83118fb..ec2fb80 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -224,6 +224,7 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
struct device_node *np;
struct omap_hwmod *oh;
struct resource irq, mem;
+ struct clk *src;
int r = 0;
if (of_have_populated_dt()) {
@@ -280,22 +281,22 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
if (IS_ERR(timer->fclk))
return -ENODEV;
- /* FIXME: Need to remove hard-coded test on timer ID */
- if (gptimer_id != 12) {
- struct clk *src;
-
- src = clk_get(NULL, fck_source);
- if (IS_ERR(src)) {
- r = -EINVAL;
- } else {
- r = clk_set_parent(timer->fclk, src);
- if (IS_ERR_VALUE(r))
- pr_warn("%s: %s cannot set source\n",
- __func__, oh->name);
+ src = clk_get(NULL, fck_source);
+ if (IS_ERR(src))
+ return -EINVAL;
+
+ if (clk_get_parent(timer->fclk) != src) {
+ r = clk_set_parent(timer->fclk, src);
+ if (IS_ERR_VALUE(r)) {
+ pr_warn("%s: %s cannot set source\n", __func__,
+ oh->name);
clk_put(src);
+ return r;
}
}
+ clk_put(src);
+
omap_hwmod_setup_one(oh_name);
omap_hwmod_enable(oh);
__omap_dm_timer_init_regs(timer);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V2 4/7] ARM: OMAP2+: Simplify system timer clock definitions
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
` (2 preceding siblings ...)
2013-02-04 17:43 ` [PATCH V2 3/7] ARM: OMAP2+: Remove hard-coded test on timer ID Jon Hunter
@ 2013-02-04 17:43 ` Jon Hunter
2013-02-04 17:43 ` [PATCH V2 5/7] ARM: OMAP2+: Simplify system timers definitions Jon Hunter
` (3 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:43 UTC (permalink / raw)
To: linux-arm-kernel
In commit c59b537 (ARM: OMAP2+: Simplify dmtimer clock aliases), new
clock aliases for dmtimers were added to simplify the code. These clock
aliases can also be used when configuring the system timers and allow us
to remove the current definitions, simplifying the code.
Please note that for OMAP4/5 devices (unlike OMAP2/3 devices), there is
no clock alias for "timer_sys_ck" with NULL as the device name. Therefore
we still need to use the alias "sys_clkin_ck" for these devices.
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
---
arch/arm/mach-omap2/timer.c | 37 ++++++++++++++-----------------------
1 file changed, 14 insertions(+), 23 deletions(-)
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index ec2fb80..4213bf4 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -57,15 +57,6 @@
#include "common.h"
#include "powerdomain.h"
-/* Parent clocks, eventually these will come from the clock framework */
-
-#define OMAP2_MPU_SOURCE "sys_ck"
-#define OMAP3_MPU_SOURCE OMAP2_MPU_SOURCE
-#define OMAP4_MPU_SOURCE "sys_clkin_ck"
-#define OMAP2_32K_SOURCE "func_32k_ck"
-#define OMAP3_32K_SOURCE "omap_32k_fck"
-#define OMAP4_32K_SOURCE "sys_32k_ck"
-
#define REALTIME_COUNTER_BASE 0x48243200
#define INCREMENTER_NUMERATOR_OFFSET 0x10
#define INCREMENTER_DENUMERATOR_RELOAD_OFFSET 0x14
@@ -569,27 +560,27 @@ void __init omap##name##_sync32k_timer_init(void) \
}
#ifdef CONFIG_ARCH_OMAP2
-OMAP_SYS_32K_TIMER_INIT(2, 1, OMAP2_32K_SOURCE, "ti,timer-alwon",
- 2, OMAP2_MPU_SOURCE);
+OMAP_SYS_32K_TIMER_INIT(2, 1, "timer_32k_ck", "ti,timer-alwon",
+ 2, "timer_sys_ck");
#endif /* CONFIG_ARCH_OMAP2 */
#ifdef CONFIG_ARCH_OMAP3
-OMAP_SYS_32K_TIMER_INIT(3, 1, OMAP3_32K_SOURCE, "ti,timer-alwon",
- 2, OMAP3_MPU_SOURCE);
-OMAP_SYS_32K_TIMER_INIT(3_secure, 12, OMAP3_32K_SOURCE, "ti,timer-secure",
- 2, OMAP3_MPU_SOURCE);
-OMAP_SYS_GP_TIMER_INIT(3_gp, 1, OMAP3_MPU_SOURCE, "ti,timer-alwon",
- 2, OMAP3_MPU_SOURCE);
+OMAP_SYS_32K_TIMER_INIT(3, 1, "timer_32k_ck", "ti,timer-alwon",
+ 2, "timer_sys_ck");
+OMAP_SYS_32K_TIMER_INIT(3_secure, 12, "secure_32k_fck", "ti,timer-secure",
+ 2, "timer_sys_ck");
+OMAP_SYS_GP_TIMER_INIT(3_gp, 1, "timer_sys_ck", "ti,timer-alwon",
+ 2, "timer_sys_ck");
#endif /* CONFIG_ARCH_OMAP3 */
#ifdef CONFIG_SOC_AM33XX
-OMAP_SYS_GP_TIMER_INIT(3_am33xx, 1, OMAP4_MPU_SOURCE, "ti,timer-alwon",
- 2, OMAP4_MPU_SOURCE);
+OMAP_SYS_GP_TIMER_INIT(3_am33xx, 1, "timer_sys_ck", "ti,timer-alwon",
+ 2, "timer_sys_ck");
#endif /* CONFIG_SOC_AM33XX */
#ifdef CONFIG_ARCH_OMAP4
-OMAP_SYS_32K_TIMER_INIT(4, 1, OMAP4_32K_SOURCE, "ti,timer-alwon",
- 2, OMAP4_MPU_SOURCE);
+OMAP_SYS_32K_TIMER_INIT(4, 1, "timer_32k_ck", "ti,timer-alwon",
+ 2, "sys_clkin_ck");
#ifdef CONFIG_LOCAL_TIMERS
static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, OMAP44XX_LOCAL_TWD_BASE, 29);
void __init omap4_local_timer_init(void)
@@ -618,8 +609,8 @@ void __init omap4_local_timer_init(void)
#endif /* CONFIG_ARCH_OMAP4 */
#ifdef CONFIG_SOC_OMAP5
-OMAP_SYS_32K_TIMER_INIT(5, 1, OMAP4_32K_SOURCE, "ti,timer-alwon",
- 2, OMAP4_MPU_SOURCE);
+OMAP_SYS_32K_TIMER_INIT(5, 1, "timer_32k_ck", "ti,timer-alwon",
+ 2, "sys_clkin_ck");
void __init omap5_realtime_timer_init(void)
{
int err;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V2 5/7] ARM: OMAP2+: Simplify system timers definitions
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
` (3 preceding siblings ...)
2013-02-04 17:43 ` [PATCH V2 4/7] ARM: OMAP2+: Simplify system timer clock definitions Jon Hunter
@ 2013-02-04 17:43 ` Jon Hunter
2013-02-04 17:43 ` [PATCH V2 6/7] ARM: OMAP2+: Store ID of system timers in timer structure Jon Hunter
` (2 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:43 UTC (permalink / raw)
To: linux-arm-kernel
There is a lot of redundancy in the definitions for the various system
timers for OMAP2+ devices. For example, the omap3_am33xx_gptimer_timer_init()
function is the same as the omap3_gp_gptimer_timer_init() function and the
function omap4_sync32k_timer_init() can be re-used for OMAP5 devices.
Therefore, consolidate the definitions to simplify the code.
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Igor Grinberg <grinberg@compulab.co.il>
---
arch/arm/mach-omap2/board-cm-t3517.c | 2 +-
arch/arm/mach-omap2/board-generic.c | 2 +-
arch/arm/mach-omap2/common.h | 3 +--
arch/arm/mach-omap2/timer.c | 48 ++++++++++++++++++++--------------
4 files changed, 31 insertions(+), 24 deletions(-)
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
index 6a9529a..7c1ad68 100644
--- a/arch/arm/mach-omap2/board-cm-t3517.c
+++ b/arch/arm/mach-omap2/board-cm-t3517.c
@@ -297,6 +297,6 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
.handle_irq = omap3_intc_handle_irq,
.init_machine = cm_t3517_init,
.init_late = am35xx_init_late,
- .init_time = omap3_gp_gptimer_timer_init,
+ .init_time = omap3_gptimer_timer_init,
.restart = omap3xxx_restart,
MACHINE_END
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index 2590463..dfd9f48 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -138,7 +138,7 @@ DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")
.init_irq = omap_intc_of_init,
.handle_irq = omap3_intc_handle_irq,
.init_machine = omap_generic_init,
- .init_time = omap3_am33xx_gptimer_timer_init,
+ .init_time = omap3_gptimer_timer_init,
.dt_compat = am33xx_boards_compat,
MACHINE_END
#endif
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
index b435027..594ab3b 100644
--- a/arch/arm/mach-omap2/common.h
+++ b/arch/arm/mach-omap2/common.h
@@ -82,8 +82,7 @@ extern void omap2_init_common_infrastructure(void);
extern void omap2_sync32k_timer_init(void);
extern void omap3_sync32k_timer_init(void);
extern void omap3_secure_sync32k_timer_init(void);
-extern void omap3_gp_gptimer_timer_init(void);
-extern void omap3_am33xx_gptimer_timer_init(void);
+extern void omap3_gptimer_timer_init(void);
extern void omap4_local_timer_init(void);
extern void omap5_realtime_timer_init(void);
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 4213bf4..1b99b41 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -160,6 +160,12 @@ static struct device_node * __init omap_get_timer_dt(struct of_device_id *match,
if (property && !of_get_property(np, property, NULL))
continue;
+ if (!property && (of_get_property(np, "ti,timer-alwon", NULL) ||
+ of_get_property(np, "ti,timer-dsp", NULL) ||
+ of_get_property(np, "ti,timer-pwm", NULL) ||
+ of_get_property(np, "ti,timer-secure", NULL)))
+ continue;
+
of_add_property(np, &device_disabled);
return np;
}
@@ -435,13 +441,14 @@ static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
}
static void __init omap2_gptimer_clocksource_init(int gptimer_id,
- const char *fck_source)
+ const char *fck_source,
+ const char *property)
{
int res;
clksrc.errata = omap_dm_timer_get_errata();
- res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source, NULL,
+ res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source, property,
&clocksource_gpt.name,
OMAP_TIMER_NONPOSTED);
BUG_ON(res);
@@ -538,49 +545,52 @@ static inline void __init realtime_counter_init(void)
#endif
#define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
- clksrc_nr, clksrc_src) \
+ clksrc_nr, clksrc_src, clksrc_prop) \
void __init omap##name##_gptimer_timer_init(void) \
{ \
omap_dmtimer_init(); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
- omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src); \
+ omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
+ clksrc_prop); \
}
#define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
- clksrc_nr, clksrc_src) \
+ clksrc_nr, clksrc_src, clksrc_prop) \
void __init omap##name##_sync32k_timer_init(void) \
{ \
omap_dmtimer_init(); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
/* Enable the use of clocksource="gp_timer" kernel parameter */ \
if (use_gptimer_clksrc) \
- omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src);\
+ omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
+ clksrc_prop); \
else \
omap2_sync32k_clocksource_init(); \
}
#ifdef CONFIG_ARCH_OMAP2
OMAP_SYS_32K_TIMER_INIT(2, 1, "timer_32k_ck", "ti,timer-alwon",
- 2, "timer_sys_ck");
+ 2, "timer_sys_ck", NULL);
#endif /* CONFIG_ARCH_OMAP2 */
#ifdef CONFIG_ARCH_OMAP3
OMAP_SYS_32K_TIMER_INIT(3, 1, "timer_32k_ck", "ti,timer-alwon",
- 2, "timer_sys_ck");
+ 2, "timer_sys_ck", NULL);
OMAP_SYS_32K_TIMER_INIT(3_secure, 12, "secure_32k_fck", "ti,timer-secure",
- 2, "timer_sys_ck");
-OMAP_SYS_GP_TIMER_INIT(3_gp, 1, "timer_sys_ck", "ti,timer-alwon",
- 2, "timer_sys_ck");
+ 2, "timer_sys_ck", NULL);
#endif /* CONFIG_ARCH_OMAP3 */
-#ifdef CONFIG_SOC_AM33XX
-OMAP_SYS_GP_TIMER_INIT(3_am33xx, 1, "timer_sys_ck", "ti,timer-alwon",
- 2, "timer_sys_ck");
-#endif /* CONFIG_SOC_AM33XX */
+#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX)
+OMAP_SYS_GP_TIMER_INIT(3, 2, "timer_sys_ck", NULL,
+ 1, "timer_sys_ck", "ti,timer-alwon");
+#endif
-#ifdef CONFIG_ARCH_OMAP4
+#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
OMAP_SYS_32K_TIMER_INIT(4, 1, "timer_32k_ck", "ti,timer-alwon",
- 2, "sys_clkin_ck");
+ 2, "sys_clkin_ck", NULL);
+#endif
+
+#ifdef CONFIG_ARCH_OMAP4
#ifdef CONFIG_LOCAL_TIMERS
static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, OMAP44XX_LOCAL_TWD_BASE, 29);
void __init omap4_local_timer_init(void)
@@ -609,13 +619,11 @@ void __init omap4_local_timer_init(void)
#endif /* CONFIG_ARCH_OMAP4 */
#ifdef CONFIG_SOC_OMAP5
-OMAP_SYS_32K_TIMER_INIT(5, 1, "timer_32k_ck", "ti,timer-alwon",
- 2, "sys_clkin_ck");
void __init omap5_realtime_timer_init(void)
{
int err;
- omap5_sync32k_timer_init();
+ omap4_sync32k_timer_init();
realtime_counter_init();
err = arch_timer_of_register();
--
1.7.10.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V2 6/7] ARM: OMAP2+: Store ID of system timers in timer structure
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
` (4 preceding siblings ...)
2013-02-04 17:43 ` [PATCH V2 5/7] ARM: OMAP2+: Simplify system timers definitions Jon Hunter
@ 2013-02-04 17:43 ` Jon Hunter
2013-02-04 17:43 ` [PATCH V2 7/7] ARM: OMAP4+: Fix sparse warning in system timers Jon Hunter
2013-02-04 17:47 ` [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
7 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:43 UTC (permalink / raw)
To: linux-arm-kernel
Currently, the timer ID is being passed to the function
omap_dm_timer_init_one(). Instead of passing the ID separately, store it
in the omap_dm_timer structure, that is also passed, and access the ID
from this structure.
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
---
arch/arm/mach-omap2/timer.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 1b99b41..c5770ff 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -210,7 +210,6 @@ static u32 __init omap_dm_timer_get_errata(void)
}
static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
- int gptimer_id,
const char *fck_source,
const char *property,
const char **timer_name,
@@ -241,10 +240,10 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
of_node_put(np);
} else {
- if (omap_dm_timer_reserve_systimer(gptimer_id))
+ if (omap_dm_timer_reserve_systimer(timer->id))
return -ENODEV;
- sprintf(name, "timer%d", gptimer_id);
+ sprintf(name, "timer%d", timer->id);
oh_name = name;
}
@@ -317,6 +316,7 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
{
int res;
+ clkev.id = gptimer_id;
clkev.errata = omap_dm_timer_get_errata();
/*
@@ -326,7 +326,7 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
*/
__omap_dm_timer_override_errata(&clkev, OMAP_TIMER_ERRATA_I103_I767);
- res = omap_dm_timer_init_one(&clkev, gptimer_id, fck_source, property,
+ res = omap_dm_timer_init_one(&clkev, fck_source, property,
&clockevent_gpt.name, OMAP_TIMER_POSTED);
BUG_ON(res);
@@ -446,9 +446,10 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
{
int res;
+ clksrc.id = gptimer_id;
clksrc.errata = omap_dm_timer_get_errata();
- res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source, property,
+ res = omap_dm_timer_init_one(&clksrc, fck_source, property,
&clocksource_gpt.name,
OMAP_TIMER_NONPOSTED);
BUG_ON(res);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V2 7/7] ARM: OMAP4+: Fix sparse warning in system timers
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
` (5 preceding siblings ...)
2013-02-04 17:43 ` [PATCH V2 6/7] ARM: OMAP2+: Store ID of system timers in timer structure Jon Hunter
@ 2013-02-04 17:43 ` Jon Hunter
2013-02-04 17:47 ` [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
7 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:43 UTC (permalink / raw)
To: linux-arm-kernel
Commit 6bb27d7 (ARM: delete struct sys_timer) changed the function
created by the macro OMAP_SYS_32K_TIMER_INIT from static void to void.
For OMAP4+ devices this created the following sparse warning ...
arch/arm/mach-omap2/timer.c:585:1: warning: symbol
'omap4_sync32k_timer_init' was not declared. Should it be static?
The function omap4_sync32k_timer_init() is not referenced outside of the
file timer.c and so make this function static.
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
---
arch/arm/mach-omap2/timer.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index c5770ff..a5f88b2 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -587,8 +587,8 @@ OMAP_SYS_GP_TIMER_INIT(3, 2, "timer_sys_ck", NULL,
#endif
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
-OMAP_SYS_32K_TIMER_INIT(4, 1, "timer_32k_ck", "ti,timer-alwon",
- 2, "sys_clkin_ck", NULL);
+static OMAP_SYS_32K_TIMER_INIT(4, 1, "timer_32k_ck", "ti,timer-alwon",
+ 2, "sys_clkin_ck", NULL);
#endif
#ifdef CONFIG_ARCH_OMAP4
--
1.7.10.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH V2 3/7] ARM: OMAP2+: Remove hard-coded test on timer ID
2013-02-04 17:43 ` [PATCH V2 3/7] ARM: OMAP2+: Remove hard-coded test on timer ID Jon Hunter
@ 2013-02-04 17:46 ` Russell King - ARM Linux
2013-02-04 18:01 ` Jon Hunter
0 siblings, 1 reply; 11+ messages in thread
From: Russell King - ARM Linux @ 2013-02-04 17:46 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Feb 04, 2013 at 11:43:02AM -0600, Jon Hunter wrote:
> @@ -280,22 +281,22 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
> if (IS_ERR(timer->fclk))
> return -ENODEV;
>
> - /* FIXME: Need to remove hard-coded test on timer ID */
> - if (gptimer_id != 12) {
> - struct clk *src;
> -
> - src = clk_get(NULL, fck_source);
> - if (IS_ERR(src)) {
> - r = -EINVAL;
> - } else {
> - r = clk_set_parent(timer->fclk, src);
> - if (IS_ERR_VALUE(r))
> - pr_warn("%s: %s cannot set source\n",
> - __func__, oh->name);
> + src = clk_get(NULL, fck_source);
> + if (IS_ERR(src))
> + return -EINVAL;
This should be:
return PTR_ERR(src);
and should've been there previously...
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V2 0/7] ARM: OMAP2+: System timer updates
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
` (6 preceding siblings ...)
2013-02-04 17:43 ` [PATCH V2 7/7] ARM: OMAP4+: Fix sparse warning in system timers Jon Hunter
@ 2013-02-04 17:47 ` Jon Hunter
7 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 17:47 UTC (permalink / raw)
To: linux-arm-kernel
On 02/04/2013 11:42 AM, Jon Hunter wrote:
> This series consists mainly of clean-ups for clockevents and
> clocksource timers on OMAP2+ devices. The most significant change
> in functionality comes from the 5th patch which is changing the
> selection of the clocksource timer for OMAP3 and AM335x devices
> when gptimers are used for clocksource. This change came about from
> Vaibhav Bedia's series for AM335x [1]. See patch for more details on
> the exact nature of the change.
>
> Boot tested with and without device-tree on OMAP2420 H4, OMAP3430 SDP,
> OMAP3430 Beagle Board, OMAP4430 SDP and AM335x EVM (AM335x only
> supports device-tree boot). Also boot tested boards with kernel boot
> parameter "clocksource=gp_timer".
>
> This series is based upon ARM-SoC next branch.
>
> V2 changes:
> - Fixed bug in patch that updates clocksource and clockevents timer
> names to use the hwmod timer names (thanks Vaibhav Bedia!)
> - Updated patch that removes the hard-coded ID test to return an error
> as soon as clk_set_parent fails instead of waiting for the end of the
> function.
> - Fixed bug in patches that "simplify system timer clock definitions"
> and "simplify system timer definitions" that was prevent omap4/5
> boards from booting with kernel boot parameter "clocksource=gp_timer".
> - Updated changelog for patch "simplify system timer definitions" per
> feedback received from Igor.
> - Added new patch to store the timer ID in the omap_dm_timer structure
> to clean-up the code.
> - Added new patch to fix a sparse warning seen in ARM-SOC next.
>
> [1] https://patchwork.kernel.org/patch/1921421/
>
>
> Jon Hunter (7):
> ARM: OMAP2+: Fix selection of clockevent timer when using device-tree
Ugh, sorry something got screwed up here. This was not meant to be
included and I am missing another patch. Will resend this series.
Jon
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH V2 3/7] ARM: OMAP2+: Remove hard-coded test on timer ID
2013-02-04 17:46 ` Russell King - ARM Linux
@ 2013-02-04 18:01 ` Jon Hunter
0 siblings, 0 replies; 11+ messages in thread
From: Jon Hunter @ 2013-02-04 18:01 UTC (permalink / raw)
To: linux-arm-kernel
On 02/04/2013 11:46 AM, Russell King - ARM Linux wrote:
> On Mon, Feb 04, 2013 at 11:43:02AM -0600, Jon Hunter wrote:
>> @@ -280,22 +281,22 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
>> if (IS_ERR(timer->fclk))
>> return -ENODEV;
>>
>> - /* FIXME: Need to remove hard-coded test on timer ID */
>> - if (gptimer_id != 12) {
>> - struct clk *src;
>> -
>> - src = clk_get(NULL, fck_source);
>> - if (IS_ERR(src)) {
>> - r = -EINVAL;
>> - } else {
>> - r = clk_set_parent(timer->fclk, src);
>> - if (IS_ERR_VALUE(r))
>> - pr_warn("%s: %s cannot set source\n",
>> - __func__, oh->name);
>> + src = clk_get(NULL, fck_source);
>> + if (IS_ERR(src))
>> + return -EINVAL;
>
> This should be:
> return PTR_ERR(src);
>
> and should've been there previously...
Thanks for the catch. I will include this and resend.
Cheers
Jon
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2013-02-04 18:01 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-04 17:42 [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
2013-02-04 17:43 ` [PATCH V2 1/7] ARM: OMAP2+: Fix selection of clockevent timer when using device-tree Jon Hunter
2013-02-04 17:43 ` [PATCH V2 2/7] ARM: OMAP2+: Display correct system timer name Jon Hunter
2013-02-04 17:43 ` [PATCH V2 3/7] ARM: OMAP2+: Remove hard-coded test on timer ID Jon Hunter
2013-02-04 17:46 ` Russell King - ARM Linux
2013-02-04 18:01 ` Jon Hunter
2013-02-04 17:43 ` [PATCH V2 4/7] ARM: OMAP2+: Simplify system timer clock definitions Jon Hunter
2013-02-04 17:43 ` [PATCH V2 5/7] ARM: OMAP2+: Simplify system timers definitions Jon Hunter
2013-02-04 17:43 ` [PATCH V2 6/7] ARM: OMAP2+: Store ID of system timers in timer structure Jon Hunter
2013-02-04 17:43 ` [PATCH V2 7/7] ARM: OMAP4+: Fix sparse warning in system timers Jon Hunter
2013-02-04 17:47 ` [PATCH V2 0/7] ARM: OMAP2+: System timer updates Jon Hunter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox