From: Joel Fernandes <joelf@ti.com>
To: Linux OMAP List <linux-omap@vger.kernel.org>,
Linux ARM Kernel List <linux-arm-kernel@lists.infradead.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Cc: Tony Lindgren <tony@atomide.com>, Joel Fernandes <joelf@ti.com>
Subject: [PATCH 19/26] ARM: OMAP: dmtimer: Remove API __omap_dm_timer_load_start
Date: Thu, 24 Apr 2014 16:44:02 -0500 [thread overview]
Message-ID: <1398375849-6017-20-git-send-email-joelf@ti.com> (raw)
In-Reply-To: <1398375849-6017-1-git-send-email-joelf@ti.com>
Fold back functionality of __omap_dm_timer_load_start from the header into the
public dmtimer.c omap_dmtimer_set_load_start API, and convert all dependencies
to use it. All users should use the existing omap_dmtimer_set_load_start
function for such uses. This is in the direction of making the system timer
code independent of the private functions which we're trying to eliminate so
that they can just use the public ones which we want to expose.
Signed-off-by: Joel Fernandes <joelf@ti.com>
---
arch/arm/mach-omap2/timer.c | 17 +++++--------
arch/arm/plat-omap/dmtimer.c | 34 +++++++++++++++-----------
arch/arm/plat-omap/include/plat/dmtimer.h | 12 ++-------
drivers/staging/tidspbridge/core/dsp-clock.c | 2 +-
4 files changed, 29 insertions(+), 36 deletions(-)
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 81a29b1..6735e2f 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -95,8 +95,7 @@ static struct irqaction omap2_gp_timer_irq = {
static int omap2_gp_timer_set_next_event(unsigned long cycles,
struct clock_event_device *evt)
{
- __omap_dm_timer_load_start(&clkev, 0,
- 0xffffffff - cycles, OMAP_TIMER_POSTED);
+ omap_dm_timer_set_load_start(&clkev, 0xffffffff - cycles, 0, 0);
return 0;
}
@@ -112,12 +111,7 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_PERIODIC:
period = clkev.rate / HZ;
period -= 1;
- /* Looks like we need to first set the load value separately */
- __omap_dm_timer_write(&clkev, OMAP_TIMER_LOAD_REG,
- 0xffffffff - period, OMAP_TIMER_POSTED);
- __omap_dm_timer_load_start(&clkev,
- OMAP_TIMER_CTRL_AR,
- 0xffffffff - period, OMAP_TIMER_POSTED);
+ omap_dm_timer_set_load_start(&clkev, 0xffffffff - period, 1, 0);
break;
case CLOCK_EVT_MODE_ONESHOT:
break;
@@ -259,6 +253,8 @@ static int legacy_hwmod_clkget(struct omap_dm_timer *timer, const char *oh_name)
timer->fclk = clk_get(NULL, omap_hwmod_get_main_clk(oh));
if (IS_ERR(timer->fclk))
return PTR_ERR(timer->fclk);
+
+ return 0;
}
static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
@@ -528,9 +524,8 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
clocksource_gpt.name = "timer_clksrc";
- __omap_dm_timer_load_start(&clksrc,
- OMAP_TIMER_CTRL_AR, 0,
- OMAP_TIMER_NONPOSTED);
+ omap_dm_timer_set_load_start(&clksrc, 0, 1, 0);
+
sched_clock_register(dmtimer_read_sched_clock, 32, clksrc.rate);
if (clocksource_register_hz(&clocksource_gpt, clksrc.rate))
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index b52d34d..dee70be 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -571,33 +571,39 @@ int omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload,
EXPORT_SYMBOL_GPL(omap_dm_timer_set_load);
/* Optimized set_load which removes costly spin wait in timer_start */
-int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,
- unsigned int load)
+int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, unsigned int load,
+ int autoreload, int pm)
{
- u32 l;
int rc;
+ u32 mask = ~0, val = 0;
if (unlikely(!timer))
return -EINVAL;
- rc = omap_dm_timer_enable(timer);
- if (rc)
- return rc;
+ if (pm) {
+ rc = omap_dm_timer_enable(timer);
+ if (rc)
+ return rc;
+ }
- l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
if (autoreload) {
- l |= OMAP_TIMER_CTRL_AR;
+ val |= OMAP_TIMER_CTRL_AR;
omap_dm_timer_write_reg(timer, OMAP_TIMER_LOAD_REG, load);
} else {
- l &= ~OMAP_TIMER_CTRL_AR;
+ mask &= ~OMAP_TIMER_CTRL_AR;
}
- __omap_dm_timer_load_start(timer, l, load, timer->posted);
+ val |= OMAP_TIMER_CTRL_ST;
- /* Save the context */
- timer->context.tclr = l;
- timer->context.tldr = load;
- timer->context.tcrr = load;
+ omap_dm_timer_write_reg(timer, OMAP_TIMER_COUNTER_REG, load);
+ val = omap_dm_timer_write_ctrl(timer, mask, val);
+
+ if (pm) {
+ /* Save the context */
+ timer->context.tclr = val;
+ timer->context.tldr = load;
+ timer->context.tcrr = load;
+ }
return 0;
}
EXPORT_SYMBOL_GPL(omap_dm_timer_set_load_start);
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h
index 6b6fbd2..7432bf3 100644
--- a/arch/arm/plat-omap/include/plat/dmtimer.h
+++ b/arch/arm/plat-omap/include/plat/dmtimer.h
@@ -145,7 +145,8 @@ int omap_dm_timer_stop(struct omap_dm_timer *timer);
int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source);
int omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload, unsigned int value);
-int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload, unsigned int value);
+int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, unsigned int load,
+ int autoreload, int pm);
int omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable, unsigned int match);
int omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, int trigger);
int omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler);
@@ -389,15 +390,6 @@ static inline void __omap_dm_timer_stop(struct omap_dm_timer *timer,
__raw_writel(OMAP_TIMER_INT_OVERFLOW, timer->irq_stat);
}
-static inline void __omap_dm_timer_load_start(struct omap_dm_timer *timer,
- u32 ctrl, unsigned int load,
- int posted)
-{
- ctrl |= OMAP_TIMER_CTRL_ST;
- __omap_dm_timer_write(timer, OMAP_TIMER_COUNTER_REG, load, posted);
- __omap_dm_timer_write(timer, OMAP_TIMER_CTRL_REG, ctrl, posted);
-}
-
static inline void __omap_dm_timer_int_enable(struct omap_dm_timer *timer,
unsigned int value)
{
diff --git a/drivers/staging/tidspbridge/core/dsp-clock.c b/drivers/staging/tidspbridge/core/dsp-clock.c
index 2f084e18..2788158 100644
--- a/drivers/staging/tidspbridge/core/dsp-clock.c
+++ b/drivers/staging/tidspbridge/core/dsp-clock.c
@@ -189,7 +189,7 @@ void dsp_gpt_wait_overflow(short int clk_id, unsigned int load)
* Set counter value to overflow counter after
* one tick and start timer.
*/
- omap_dm_timer_set_load_start(gpt, 0, load);
+ omap_dm_timer_set_load_start(gpt, load, 0, 1);
/* Wait 80us for timer to overflow */
udelay(80);
--
1.7.9.5
next prev parent reply other threads:[~2014-04-24 22:49 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-24 21:43 [PATCH 00/26] OMAP dmtimer prep series Joel Fernandes
2014-04-24 21:43 ` [PATCH 01/26] ARM: OMAP: dmtimer: Remove setting of clk parent indirectly through platform hook Joel Fernandes
2014-05-07 15:19 ` Tony Lindgren
2014-05-07 21:43 ` Joel Fernandes
2014-05-07 22:04 ` Tony Lindgren
2014-05-07 22:08 ` Joel Fernandes
2014-04-24 21:43 ` [PATCH 02/26] ARM: OMAP: dmtimer: Add comments on OMAP1 clock framework Joel Fernandes
2014-05-07 15:20 ` Tony Lindgren
2014-05-07 21:48 ` Joel Fernandes
2014-05-07 22:07 ` Tony Lindgren
2014-05-07 22:10 ` Joel Fernandes
2014-04-24 21:43 ` [PATCH 03/26] ARM: OMAP: dmtimer: Add note to set parent from DT Joel Fernandes
2014-04-24 21:43 ` [PATCH 04/26] ARM: OMAP: dmtimer: Add function to check if timer is running Joel Fernandes
2014-05-07 15:25 ` Tony Lindgren
2014-05-07 22:00 ` Joel Fernandes
2014-04-24 21:43 ` [PATCH 05/26] ARM: OMAP1: dmtimer: Rewrite modify of IDLECT mask to use new is_running function Joel Fernandes
2014-04-24 21:43 ` [PATCH 06/26] ARM: OMAP: dmtimer: Add a write_ctrl function to simplify bit setting Joel Fernandes
2014-04-24 21:43 ` [PATCH 07/26] ARM: OMAP: dmtimer: Have __omap_dm_timer_load_start set ST bit in CTRL instead of caller Joel Fernandes
2014-04-24 21:43 ` [PATCH 08/26] ARM: OMAP: dmtimer: Add function to check for timer availability Joel Fernandes
2014-04-24 21:43 ` [PATCH 09/26] ARM: OMAP: dmtimer: Get rid of check for mem resource error Joel Fernandes
2014-05-07 15:24 ` Tony Lindgren
2014-05-07 21:52 ` Joel Fernandes
2014-05-07 22:10 ` Tony Lindgren
2014-05-07 22:14 ` Joel Fernandes
2014-05-07 22:22 ` Tony Lindgren
2014-04-24 21:43 ` [PATCH 10/26] ARM: OMAP: dmtimer: Check return of pm_runtime_get_sync Joel Fernandes
2014-04-24 21:43 ` [PATCH 11/26] ARM: OMAP2+: timer: Add a powerup function Joel Fernandes
2014-04-24 21:43 ` [PATCH 12/26] ARM: OMAP2+: timer: Simplify clock event/source name setting Joel Fernandes
2014-04-24 21:43 ` [PATCH 13/26] ARM: OMAP2+: timer: Add comment on timer clk parenting Joel Fernandes
2014-04-24 21:43 ` [PATCH 14/26] ARM: OMAP2+: timer: Remove hwmod look-up dependency for DT-boot Joel Fernandes
2014-04-24 21:43 ` [PATCH 15/26] ARM: OMAP2+: timer: Use of_clk_get for DT platforms Joel Fernandes
2014-04-24 21:43 ` [PATCH 16/26] ARM: OMAP2+: timer: Fix error message to not use hwmod structure Joel Fernandes
2014-04-24 21:44 ` [PATCH 17/26] ARM: OMAP2+: timer: Add fallback for of_clk_get Joel Fernandes
2014-04-24 21:44 ` [PATCH 18/26] ARM: OMAP2+: timer: Add legacy code for old way of getting fclk Joel Fernandes
2014-04-24 21:44 ` Joel Fernandes [this message]
2014-04-24 21:44 ` [PATCH 20/26] ARM: OMAP: dmtimer: Fold back private stop function Joel Fernandes
2014-04-24 21:44 ` [PATCH 21/26] ARM: OMAP: dmtimer: Add systimer flag to dmtimer structure Joel Fernandes
2014-04-24 21:44 ` [PATCH 22/26] ARM: OMAP: dmtimer: Eliminate __omap_dm_timer_write_status function Joel Fernandes
2014-04-24 21:44 ` [PATCH 23/26] ARM: OMAP: dmtimer: Eliminate __omap_dm_timer_read_counter function Joel Fernandes
2014-04-24 21:44 ` [PATCH 24/26] ARM: OMAP: dmtimer: Move private functions into dmtimer core and export others Joel Fernandes
2014-04-24 21:44 ` [PATCH 25/26] ARM: OMAP: dmtimer: Eliminate omap_dm_timer_int_enable function Joel Fernandes
2014-04-24 21:44 ` [PATCH 26/26] ARM: OMAP: dmtimer: Use is_timer_available function in omap_dm_timer_trigger Joel Fernandes
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=1398375849-6017-20-git-send-email-joelf@ti.com \
--to=joelf@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=tony@atomide.com \
/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
Powered by JetHome