From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>,
Boris Brezillon <boris.brezillon@free-electrons.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 46/58] clocksource/drivers: Add a new driver for the Atmel ARM TC blocks
Date: Wed, 7 Jun 2017 16:17:35 +0200 [thread overview]
Message-ID: <20170607141735.GH2345@mai> (raw)
In-Reply-To: <20170606180559.pkrr7ux2qqnmsd6y@piout.net>
On Tue, Jun 06, 2017 at 08:05:59PM +0200, Alexandre Belloni wrote:
> On 06/06/2017 at 17:21:05 +0200, Daniel Lezcano wrote:
> > On Tue, May 30, 2017 at 11:51:27PM +0200, Alexandre Belloni wrote:
> > > Add a driver for the Atmel Timer Counter Blocks. This driver provides a
> > > clocksource and a clockevent device. The clockevent device is linked to the
> > > clocksource counter and so it will run at the same frequency.
> >
> > Where is the clockevent in this driver?
> >
>
> That's a leftover from v1, it seems I forgot to rework that commit
> message.
>
> > It seems the cutting out of this driver is a bit fuzzy and hard to follow.
> >
> > Please re-org the changes in a logical manner when resubmitting.
> >
>
> I can submit the whole driver as a single patch if that is easier for
> you to review.
As you wish. A single driver or a split into consistent parts.
> > > This driver uses regmap and syscon to be able to probe early in the boot
> > > and avoid having to switch on the TCB clocksource later. Using regmap also
> > > means that unused TCB channels may be used by other drivers (PWM for
> > > example).
> >
> > Can you give more details, I fail to understand how regmap and syscon help to
> > probe sooner than timer_init()?
>
>
> Because before that, the tcb driver relied on atmel_tclib to share the
> TCBs and it happened way too late, at arch_initcall() time.
So is it still necesary to use regmap? I would like to take the opportunity to
move the init routine to the common init routine if possible:
https://patchwork.kernel.org/patch/9768845/
> > > Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> > > Cc: Thomas Gleixner <tglx@linutronix.de>
> > > Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> > > ---
> > > drivers/clocksource/Kconfig | 13 ++
> > > drivers/clocksource/Makefile | 3 +-
> > > drivers/clocksource/timer-atmel-tcbclksrc.c | 252 ++++++++++++++++++++++++++++
> >
> > As it is a clksrc + clkevt, please change the name to something more adequate:
> >
> > eg. timer-tcb.c
> >
> > > 3 files changed, 267 insertions(+), 1 deletion(-)
> > > create mode 100644 drivers/clocksource/timer-atmel-tcbclksrc.c
> > >
> > > diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
> > > index 545d541ae20e..cbd710db3c09 100644
> > > --- a/drivers/clocksource/Kconfig
> > > +++ b/drivers/clocksource/Kconfig
> > > @@ -418,6 +418,19 @@ config ATMEL_ST
> > > help
> > > Support for the Atmel ST timer.
> > >
> > > +config ATMEL_ARM_TCB_CLKSRC
> > > + bool "TC Block Clocksource"
> > > + select REGMAP_MMIO
> > > + depends on GENERIC_CLOCKEVENTS
> > > + depends on SOC_AT91RM9200 || SOC_AT91SAM9 || SOC_SAMA5 || COMPILE_TEST
> > > + default SOC_AT91RM9200 || SOC_AT91SAM9 || SOC_SAMA5
> > > + help
> > > + Select this to get a high precision clocksource based on a
> > > + TC block with a 5+ MHz base clock rate.
> > > + On platforms with 16-bit counters, two timer channels are combined
> > > + to make a single 32-bit timer.
> > > + It can also be used as a clock event device supporting oneshot mode.
> > > +
> > > config CLKSRC_METAG_GENERIC
> > > def_bool y if METAG
> > > help
> > > diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
> > > index 2b5b56a6f00f..53a0b40e0db2 100644
> > > --- a/drivers/clocksource/Makefile
> > > +++ b/drivers/clocksource/Makefile
> > > @@ -2,7 +2,8 @@ obj-$(CONFIG_CLKSRC_PROBE) += clksrc-probe.o
> > > obj-$(CONFIG_CLKEVT_PROBE) += clkevt-probe.o
> > > obj-$(CONFIG_ATMEL_PIT) += timer-atmel-pit.o
> > > obj-$(CONFIG_ATMEL_ST) += timer-atmel-st.o
> > > -obj-$(CONFIG_ATMEL_TCB_CLKSRC) += tcb_clksrc.o
> > > +obj-$(CONFIG_ATMEL_TCB_CLKSRC) += tcb_clksrc.o
> > > +obj-$(CONFIG_ATMEL_ARM_TCB_CLKSRC) += timer-atmel-tcbclksrc.o
> > > obj-$(CONFIG_X86_PM_TIMER) += acpi_pm.o
> > > obj-$(CONFIG_SCx200HR_TIMER) += scx200_hrt.o
> > > obj-$(CONFIG_CS5535_CLOCK_EVENT_SRC) += cs5535-clockevt.o
> > > diff --git a/drivers/clocksource/timer-atmel-tcbclksrc.c b/drivers/clocksource/timer-atmel-tcbclksrc.c
> > > new file mode 100644
> > > index 000000000000..f18d177bfdea
> > > --- /dev/null
> > > +++ b/drivers/clocksource/timer-atmel-tcbclksrc.c
> > > @@ -0,0 +1,252 @@
> > > +#include <linux/clk.h>
> > > +#include <linux/clockchips.h>
> > > +#include <linux/clocksource.h>
> > > +#include <linux/interrupt.h>
> > > +#include <linux/kernel.h>
> > > +#include <linux/mfd/syscon.h>
> > > +#include <linux/of_irq.h>
> > > +#include <linux/regmap.h>
> > > +#include <linux/sched_clock.h>
> > > +#include <soc/at91/atmel_tcb.h>
> > > +
> > > +static struct atmel_tcb_clksrc {
> > > + char name[20];
> >
> > ^^^^^^^^^^^^^^
> > This field is pointless.
> >
>
> You mean you don't like how it is used? Or you don't think having the
> timer full name is useful?
The field is not needed, the only place where it is used is where we affect it.
> > > + struct clocksource clksrc;
> >
> > Why is this field defined and passed around to functions which do not use it?
> >
> > Please consider using clocksource_mmio_init() and remove this field.
> >
>
> Well, this doesn't work with a regmap so it doesn't fit.
>
> > > + struct regmap *regmap;
> > > + struct clk *clk[2];
> >
> > Can you explain why we have two clocks here?
> >
>
> Each channel have its clock, I can add a comment if you want.
I don't understand. Why do we have two clocks?
One channel is driven by one clock and the second one takes the overflow signal
from the first one, so no second clock is involved there, no?
> > > + int channels[2];
> >
> > Instead of dealing with 2 channels and a costly bits shifting in the hot path,
> > why not use a single channel with a different wrap up? IOW mask is 16 or 32.
> >
> > The resulting code will be simpler, nicer and perhaps more efficient if you
> > save the tc_get_cycles() loop?
> >
>
> I think the rationale behind it is that 16 bits at 5MHz makes it
> wrap every 13ms which is too fast to be useful.
Ok, I see.
> > > + int bits;
> >
> > ^^^^^^^^
> >
> > This field is pointless.
> >
> > > + int irq;
> >
> > irq belongs to clockevents changes.
> >
> > > + bool registered;
> >
> > What is the purpose of this registered boolean?
> >
>
> The main reason is that RobH doesn't want to have the use (clocksource
> or clockevent) of the timer in the DT so when probing a timer, I need to
> know whether I already have a clocksource to decide when it is time to
> register a clockevent.
Yes, we had this discussion some weeks ago.
This registered hack forces the DT to define first the clocksource, then the
clockevent.
So, I suggest you fold the timer definition into a single one like the other
drivers.
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
next prev parent reply other threads:[~2017-06-07 14:17 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-30 21:50 [PATCH 00/58] ARM: at91: rework Atmel TCB drivers Alexandre Belloni
2017-05-30 21:50 ` [PATCH 01/58] ARM: at91: Document new TCB bindings Alexandre Belloni
2017-06-07 21:17 ` Rob Herring
2017-05-30 21:50 ` [PATCH 02/58] ARM: dts: at91: at91rm9200: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:50 ` [PATCH 03/58] ARM: dts: at91: at91rm9200ek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:50 ` [PATCH 04/58] ARM: dts: at91: mpa1600: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 05/58] ARM: dts: at91: at91sam9260: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:50 ` [PATCH 06/58] ARM: dts: at91: at91sam9260ek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:50 ` [PATCH 07/58] ARM: dts: at91: sam9_l9260: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 08/58] ARM: dts: at91: ethernut5: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 09/58] ARM: dts: at91: foxg20: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 10/58] ARM: dts: at91: animeo_ip: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 11/58] ARM: dts: at91: kizbox: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 12/58] ARM: dts: at91: at91sam9g20ek: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 13/58] ARM: dts: at91: ge863-pro3: " Alexandre Belloni
2017-05-30 21:50 ` [PATCH 14/58] ARM: dts: at91: at91sam9261: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:50 ` [PATCH 15/58] ARM: dts: at91: at91sam9261ek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:50 ` [PATCH 16/58] ARM: dts: at91: at91sam9263: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:50 ` [PATCH 17/58] ARM: dts: at91: at91sam9263ek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:50 ` [PATCH 18/58] ARM: dts: at91: calao: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 19/58] ARM: dts: at91: at91sam9g45: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:51 ` [PATCH 20/58] ARM: dts: at91: at91sam9m10g45ek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:51 ` [PATCH 21/58] ARM: dts: at91: pm9g45: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 22/58] ARM: dts: at91: at91sam9rl: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:51 ` [PATCH 23/58] ARM: dts: at91: at91sam9rlek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:51 ` [PATCH 24/58] ARM: dts: at91: at91sam9n12: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:51 ` [PATCH 25/58] ARM: dts: at91: at91sam9n12ek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:51 ` [PATCH 26/58] ARM: dts: at91: at91sam9x5: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:51 ` [PATCH 27/58] ARM: dts: at91: at91sam9x5cm: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:51 ` [PATCH 28/58] ARM: dts: at91: acme/g25: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 29/58] ARM: dts: at91: cosino: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 30/58] ARM: dts: at91: kizboxmini: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 31/58] ARM: dts: at91: sama5d3: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:51 ` [PATCH 32/58] ARM: dts: at91: sama5d3xek: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:51 ` [PATCH 33/58] ARM: dts: at91: sama5d3 Xplained: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 34/58] ARM: dts: at91: kizbox2: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 35/58] ARM: dts: at91: sama5d3xek_cmp: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 36/58] ARM: dts: at91: linea/tse850-3: " Alexandre Belloni
2017-06-01 18:52 ` Peter Rosin
2017-05-30 21:51 ` [PATCH 37/58] ARM: dts: at91: sama5d4: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:51 ` [PATCH 38/58] ARM: dts: at91: sama5d4: Add TCB2 Alexandre Belloni
2017-05-30 21:51 ` [PATCH 39/58] ARM: dts: at91: sama5d4ek: use TCB2 as clocksource Alexandre Belloni
2017-05-30 21:51 ` [PATCH 40/58] ARM: dts: at91: sama5d4 Xplained: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 41/58] ARM: dts: at91: ma5d4: " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 42/58] ARM: dts: at91: vinco: " Alexandre Belloni
2017-06-02 12:48 ` Gregory CLEMENT
2017-05-30 21:51 ` [PATCH 43/58] ARM: dts: at91: sama5d2: TC blocks are also simple-mfd and syscon devices Alexandre Belloni
2017-05-30 21:51 ` [PATCH 44/58] ARM: dts: at91: sama5d2 Xplained: use TCB0 as clocksource Alexandre Belloni
2017-05-30 21:51 ` [PATCH 45/58] ARM: at91: add TCB registers definitions Alexandre Belloni
2017-05-30 21:51 ` [PATCH 46/58] clocksource/drivers: Add a new driver for the Atmel ARM TC blocks Alexandre Belloni
2017-06-06 15:21 ` Daniel Lezcano
2017-06-06 18:05 ` Alexandre Belloni
2017-06-07 14:17 ` Daniel Lezcano [this message]
2017-06-07 15:09 ` Alexandre Belloni
2017-06-07 21:38 ` Daniel Lezcano
2017-06-07 23:11 ` Alexandre Belloni
2017-06-08 6:52 ` Boris Brezillon
2017-06-07 15:27 ` Alexandre Belloni
2017-06-07 21:08 ` Daniel Lezcano
2017-06-07 23:17 ` Alexandre Belloni
2017-06-08 5:42 ` Boris Brezillon
2017-06-08 7:44 ` Daniel Lezcano
2017-06-08 7:59 ` Alexandre Belloni
2017-06-08 8:24 ` Daniel Lezcano
2017-06-08 8:33 ` Boris Brezillon
2017-06-08 8:42 ` Alexandre Belloni
2017-06-08 8:13 ` Boris Brezillon
2017-06-08 8:40 ` Daniel Lezcano
2017-06-08 8:57 ` Boris Brezillon
2017-06-12 12:54 ` Nicolas Ferre
2017-06-12 13:25 ` Daniel Lezcano
2017-06-12 15:26 ` Nicolas Ferre
2017-06-08 6:21 ` Boris Brezillon
2017-05-30 21:51 ` [PATCH 47/58] clocksource/drivers: timer-atmel-tcbclksrc: add clockevent device Alexandre Belloni
2017-05-30 21:51 ` [PATCH 48/58] clocksource/drivers: timer-atmel-tcbclksrc: add clockevent device on separate channel Alexandre Belloni
2017-05-30 21:51 ` [PATCH 49/58] clocksource/drivers: atmel-pit: allow unselecting ATMEL_PIT Alexandre Belloni
2017-05-30 21:51 ` [PATCH 50/58] ARM: at91/defconfig: sama5: unselect ATMEL_PIT Alexandre Belloni
2017-05-30 21:51 ` [PATCH 51/58] ARM: at91/defconfig: at91_dt " Alexandre Belloni
2017-05-30 21:51 ` [PATCH 52/58] PWM: atmel-tcb: switch to new binding Alexandre Belloni
2017-05-30 21:51 ` [PATCH 53/58] ARM: dts: at91: kizbox: switch to new pwm-atmel-tcb binding Alexandre Belloni
2017-05-30 21:51 ` [PATCH 54/58] clocksource/drivers: remove tcb_clksrc Alexandre Belloni
2017-05-30 21:51 ` [PATCH 55/58] misc: remove atmel_tclib.c Alexandre Belloni
2017-05-30 21:51 ` [PATCH 56/58] ARM: configs: at91: remove ATMEL_TCLIB Alexandre Belloni
2017-05-30 21:51 ` [PATCH 57/58] ARM: multi_v7_defconfig: Remove ATMEL_TCLIB Kconfig symbol Alexandre Belloni
2017-05-30 21:51 ` [PATCH 58/58] ARM: multi_v5_defconfig: " Alexandre Belloni
2017-05-31 6:34 ` [PATCH 00/58] ARM: at91: rework Atmel TCB drivers Peter Rosin
2017-05-31 7:21 ` Alexandre Belloni
2017-07-06 6:40 ` Thierry Reding
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=20170607141735.GH2345@mai \
--to=daniel.lezcano@linaro.org \
--cc=alexandre.belloni@free-electrons.com \
--cc=boris.brezillon@free-electrons.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.ferre@microchip.com \
--cc=tglx@linutronix.de \
/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