From: Russell King <rmk@arm.linux.org.uk>
To: Paul Walmsley <paul@pwsan.com>
Cc: Aaro Koskinen <aaro.koskinen@nokia.com>,
Santosh Shilimkar <santosh.shilimkar@ti.com>,
Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>,
Tony Lindgren <tony@atomide.com>,
linux-omap@vger.kernel.org
Subject: Re: Open issues after 2.6.38 merge window
Date: Mon, 17 Jan 2011 21:19:56 +0000 [thread overview]
Message-ID: <20110117211956.GD4042@flint.arm.linux.org.uk> (raw)
In-Reply-To: <alpine.DEB.2.00.1101171341591.13225@utopia.booyaka.com>
On Mon, Jan 17, 2011 at 02:00:17PM -0700, Paul Walmsley wrote:
> On Mon, 17 Jan 2011, Russell King wrote:
>
> > On Mon, Jan 17, 2011 at 01:31:47PM -0700, Paul Walmsley wrote:
> > >
> > > OMAP15xx uses the MPU timer for its clocksource, since OMAP15xx doesn't
> > > have GPTIMERs or the 32k sync timer, and the MPU timer code in
> > > mach-omap1/time.c wasn't updated for sched_clock() support.
> > >
> > > Adding an init_fixed_sched_clock() into omap_init_clocksource() should
> > > fix the boot on OMAP15xx/7xx.
> >
> > No, it needs fixing properly. There's no reason the gpt clocksource
> > can't be used for sched_clock.
>
> There's a very good reason why it can't on OMAP15xx/7xx. GPTIMER/DMTIMER
> IP blocks are only present on OMAP1610 and later[1]. Nor is a
> SYNCTIMER_32K IP block present on OMAP15xx/7xx[2].
Yes I realise that. That doesn't negate what I said though. Let me
show you how to do it:
static DEFINE_CLOCK_DATA(cd);
static inline u32 32k_read_cycles(void)
{
...
}
static inline u32 gpt_read_cycles(void)
{
...
}
#if defined(GPTIMER) && defined(32KTIMER)
static u32 (*omap_read_cycles)(void);
#elif defined(32KTIMER)
#define SC_MULT 4000000000u
#define SC_SHIFT 17
#define omap_read_cycles 32k_read_cycles
#else
#define SC_MULT gpt_value_if_fixed
#define SC_SHIFT gpt_value_if_fixed
#define omap_read_cycles gpt_read_cycles
#endif
unsigned long long notrace sched_clock(void)
{
u32 cyc = omap_read_cycles();
#ifdef SC_MULT
return cyc_to_fixed_sched_clock(&cd, cyc, (u32)~0, SC_MULT, SC_SHIFT);
#else
return cyc_to_sched_clock(&cd, cyc, (u32)~0);
#endif
}
static void notrace omap_update_sched_clock(void)
{
u32 cyc = omap_read_cycles();
update_sched_clock(&cd, cyc, (u32)~0);
}
void omap_init_sched_clock(int gpt)
{
unsigned long rate;
#ifndef omap_read_cycles
omap_read_cycles = gpt ? gpt_read_cycles : 32k_read_cycles;
#endif
if (gpt)
rate = gpt_rate;
else
rate = 32768;
#ifdef SC_MULT
init_fixed_sched_clock(&cd, omap_update_sched_clock, 32, rate
SC_MULT, SC_SHIFT);
#else
init_sched_clock(&cd, omap_update_sched_clock, 32, rate);
#endif
}
Both a GPT _and_ 32K sched_clock implementation together, selectable
at runtime or build time depending on what is selected. I'll give you
that it isn't nice code, but it does what's required.
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of:
next prev parent reply other threads:[~2011-01-17 21:20 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-14 19:47 Open issues after 2.6.38 merge window Tony Lindgren
2011-01-14 20:24 ` Tony Lindgren
2011-01-14 20:37 ` Jarkko Nikula
2011-01-14 20:54 ` Tony Lindgren
2011-01-14 22:22 ` Nishanth Menon
2011-01-14 20:57 ` David Anders
2011-01-14 23:38 ` Tony Lindgren
2011-01-14 23:59 ` Tony Lindgren
2011-01-14 23:54 ` Thomas Weber
2011-01-15 5:19 ` Santosh Shilimkar
2011-01-17 10:15 ` Santosh Shilimkar
2011-01-27 18:41 ` Tony Lindgren
2011-01-17 11:37 ` Aaro Koskinen
2011-01-17 11:59 ` Santosh Shilimkar
2011-01-17 12:11 ` Russell King
2011-01-17 12:19 ` Santosh Shilimkar
2011-01-17 12:24 ` Russell King
2011-01-17 18:29 ` Tony Lindgren
2011-01-17 12:22 ` Aaro Koskinen
2011-01-17 12:35 ` Santosh Shilimkar
2011-01-17 12:50 ` Russell King
2011-01-17 18:20 ` Tony Lindgren
2011-01-17 20:31 ` Paul Walmsley
2011-01-17 20:39 ` Russell King
2011-01-17 21:00 ` Paul Walmsley
2011-01-17 21:19 ` Russell King [this message]
2011-01-17 22:49 ` Paul Walmsley
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=20110117211956.GD4042@flint.arm.linux.org.uk \
--to=rmk@arm.linux.org.uk \
--cc=aaro.koskinen@nokia.com \
--cc=jkrzyszt@tis.icnet.pl \
--cc=linux-omap@vger.kernel.org \
--cc=paul@pwsan.com \
--cc=santosh.shilimkar@ti.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.