From: tony@atomide.com (Tony Lindgren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/8] ARM: OMAP: Move public portion of dmtimer.h to include/linux/omap-timer.h
Date: Tue, 26 Nov 2013 10:29:09 -0800 [thread overview]
Message-ID: <20131126182908.GK26766@atomide.com> (raw)
In-Reply-To: <52940F32.3000006@ti.com>
* Joel Fernandes <joelf@ti.com> [131125 19:03]:
> Hi Tony,
>
> Few replies inline below. Adding Suman as well who is planning to use dmtimer
> directly for his work with DSP.
>
> On 11/22/2013 09:33 AM, Tony Lindgren wrote:
> > Hi,
> >
> > * Joel Fernandes <joelf@ti.com> [131121 18:00]:
> >> Multiplatform support has made arch/arm/plat-omap/include/plat/ inaccessible to
> >> drivers outside the plat-omap directory [1]. Due to this the following drivers
> >> are disabled with !CONFIG_ARCH_MULTIPLATFORM:
> >> CONFIG_IR_RX51 (drivers/media/rc/ir-rx51.c)
> >> CONFIG_TIDSPBRIDGE (drivers/staging/tidspbridge/core/dsp-clock.c)
> >>
> >> We move the portion of the dmtimer "API" that should be accessible to the
> >> drivers, into include/linux/omap-timer.h
> >
> > As we chatted earlier, we don't have to expose all these hardware specific
> > functions and use existing Linux generic frameworks instead.
>
> I thought over this, and strongly feel that in this case moving to a generic
> framework is not the right approach. I mentioned reasons in last post, but
> summarizing all of them below:
>
> 1. It is not immediately intuitive or obvious unlike GPIO that a timer can be an
> irqchip.
But that's what it really is for hadware timers :)
> 2. There are only 1-2 users of the dmtimer directly so moving to linux generic
> framework is bit overkill I feel. Further there is already a framework-
> clockevents/hrtimer which everyone should be using. For the 1-2 direct dmtimer
> users, they should just use the dmtimer public API.
But the thing is, we don't want to expose the dmtimer public API. That will
lead to drivers tinkering directly with the hardware timers and then other
SoCs will follow.
> More reasons below...
>
> >
> > We can implement an irqchip and a clocksource in the dmtimer code for the
> > client drivers to use, and after that we only have a couple of dmtimer
> > specific functions left to export.
> >
> > I'm thinkging some thing like this for the public API:
> >
> > omap_dm_timer_request request_irq
> > omap_dm_timer_request_specific request_irq
> > omap_dm_timer_get_irq request_irq
> > omap_dm_timer_set_source clk_set_rate
>
> For clk_set_rate, how would one directly access the timer node if we've hidden
> it behind an irq chip abstraction?
>
> per your suggestion, one would have something like:
>
> dsp {
> interrupt-parent = <&timer1>;
> }
>
> so how do you clk_set_rate rate something like this given the dsp node?
All you have to do is implement a clocksource driver in dmtimer.c code.
> If the suggestion is to get the timer1 node from the interrupt-parent property,
> if I may say- that's a bit ugly because now you're breaking the irq chip
> abstraction just to access the timer node..
Hmm sorry I don't follow you here.
> > omap_dm_timer_stop disable_irq
> > omap_dm_timer_start enable_irq
> > omap_dm_timer_disable disable_irq
> > omap_dm_timer_free free_irq
> > omap_dm_timer_set_int_enable enable_irq
> >
> > After that, what's left to export are some functions to configure
> > the hardware timer:
> >
> > omap_dm_timer_write_counter
> > omap_dm_timer_set_match
> > omap_dm_timer_read_counter
> > omap_dm_timer_read_status
> > omap_dm_timer_write_status
>
> Same comment for clk_set_rate applies here, we've to access interrupt-parent
> property to get timer node and call dmtimer API which breaks the abstraction.
Sorry, I don't follow you here either. I'm sure we'll have some Linux generic
standard for programming hardware timers, but still using request_irq +
clk_set_rate is very standard behaviour no matter what happens later on.
> Usually I've seen frameworks come up because there is code duplication etc. In
> this case there is no duplication as such, and the number of users of the API is
> also few. What is the problem with exposing a small set of API to timer users in
> drivers/ specially when they are prefixed by a unique name (omap_dm_timer)?
Because we don't want to export 27 omap specific functions to drivers:
$ grep EXPORT_SYMBOL arch/arm/plat-omap/dmtimer.c | wc -l
27
Instead, it looks like we can get away with exporting just:
omap_dm_timer_write_counter
omap_dm_timer_set_match
omap_dm_timer_read_counter
omap_dm_timer_read_status
omap_dm_timer_write_status
And I'm sure we'll have some solution for those also later on.
Regards,
Tony
next prev parent reply other threads:[~2013-11-26 18:29 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-22 1:56 [PATCH 0/8] OMAP: timers: Preparation for migration to clocksource Joel Fernandes
2013-11-22 1:56 ` [PATCH 1/8] ARM: OMAP: Move public portion of dmtimer.h to include/linux/omap-timer.h Joel Fernandes
2013-11-22 15:33 ` Tony Lindgren
2013-11-22 16:01 ` Joel Fernandes
2013-11-26 3:02 ` Joel Fernandes
2013-11-26 18:29 ` Tony Lindgren [this message]
2013-11-26 19:52 ` Joel Fernandes
2013-11-26 20:32 ` Tony Lindgren
2013-11-22 1:56 ` [PATCH 2/8] rc: ir-rx51: Use clk API to get clock rate Joel Fernandes
2013-11-22 1:56 ` [PATCH 3/8] rc: ir-rx51: Turn ON ir-rx51 as it should work for MULTIPLATFORM Joel Fernandes
2013-11-22 1:56 ` [PATCH 4/8] ARM: OMAP4: timer: Remove non-DT code for TWD timer Joel Fernandes
2013-11-22 1:56 ` [PATCH 5/8] ARM: OMAP2+: timer: Introduce OF-friendly clocksource/clockevent system timers Joel Fernandes
2013-11-22 3:51 ` Felipe Balbi
2013-11-22 15:09 ` Joel Fernandes
2013-11-22 15:58 ` Rob Herring
2013-11-22 16:42 ` Joel Fernandes
2013-11-22 20:01 ` Rob Herring
2013-11-23 1:12 ` Joel Fernandes
2013-11-23 1:22 ` Joel Fernandes
2013-11-23 16:26 ` Rob Herring
2013-11-22 1:56 ` [PATCH 6/8] devicetree: doc: Document ti,timer-parent property Joel Fernandes
2013-11-22 15:58 ` Tony Lindgren
2013-11-22 16:36 ` Joel Fernandes
2013-11-22 17:08 ` Tony Lindgren
2013-11-23 0:31 ` Joel Fernandes
2013-11-23 0:52 ` Tony Lindgren
2013-11-22 17:05 ` Joel Fernandes
2013-11-22 17:11 ` Tony Lindgren
2013-11-22 1:56 ` [PATCH 7/8] ARM: DTS: am33xx: Provide the " Joel Fernandes
2013-11-22 1:56 ` [PATCH 8/8] ARM: AM33xx: Move to using omap_generic_timer_init for init_time 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=20131126182908.GK26766@atomide.com \
--to=tony@atomide.com \
--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).