All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Carlo Caione <carlo@caione.org>
Cc: "linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-serial@vger.kernel.org" <linux-serial@vger.kernel.org>,
	"linux@arm.linux.org.uk" <linux@arm.linux.org.uk>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"ijc+devicetree@hellion.org.uk" <ijc+devicetree@hellion.org.uk>,
	"daniel.lezcano@linaro.org" <daniel.lezcano@linaro.org>,
	"tglx@linutronix.de" <tglx@linutronix.de>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"jslaby@suse.cz" <jslaby@suse.cz>,
	"grant.likely@linaro.org" <grant.likely@linaro.org>,
	"b.galvani@gmail.com" <b.galvani@gmail.com>
Subject: Re: [PATCH 3/7] ARM: meson6: clocksource: add Meson6 timer support
Date: Mon, 18 Aug 2014 17:27:26 +0100	[thread overview]
Message-ID: <20140818162726.GE3302@leverpostej> (raw)
In-Reply-To: <1408272594-10814-4-git-send-email-carlo@caione.org>

On Sun, Aug 17, 2014 at 11:49:50AM +0100, Carlo Caione wrote:
> Meson6 SoCs are equipped with 5 32-bit timers, called TIMER_A, TIMER_B,
> TIMER_C, TIMER_D and TIMER_E.
> 
> The driver is providing clocksource support for the 32-bit counter using
> TIMER_E. Clockevents are also supported using TIMER_A.
> 
> Signed-off-by: Carlo Caione <carlo@caione.org>
> ---
>  drivers/clocksource/Kconfig        |   3 +
>  drivers/clocksource/Makefile       |   1 +
>  drivers/clocksource/meson6_timer.c | 187 +++++++++++++++++++++++++++++++++++++
>  3 files changed, 191 insertions(+)
>  create mode 100644 drivers/clocksource/meson6_timer.c
> 
> diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
> index cfd6519..38029ca 100644
> --- a/drivers/clocksource/Kconfig
> +++ b/drivers/clocksource/Kconfig
> @@ -30,6 +30,9 @@ config ARMADA_370_XP_TIMER
>  	bool
>  	select CLKSRC_OF
>  
> +config MESON6_TIMER
> +	bool
> +
>  config ORION_TIMER
>  	select CLKSRC_OF
>  	select CLKSRC_MMIO
> diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
> index 7fd9fd1..e4ae987 100644
> --- a/drivers/clocksource/Makefile
> +++ b/drivers/clocksource/Makefile
> @@ -25,6 +25,7 @@ obj-$(CONFIG_ARCH_PRIMA2)	+= timer-prima2.o
>  obj-$(CONFIG_ARCH_U300)		+= timer-u300.o
>  obj-$(CONFIG_SUN4I_TIMER)	+= sun4i_timer.o
>  obj-$(CONFIG_SUN5I_HSTIMER)	+= timer-sun5i.o
> +obj-$(CONFIG_MESON6_TIMER)	+= meson6_timer.o
>  obj-$(CONFIG_ARCH_TEGRA)	+= tegra20_timer.o
>  obj-$(CONFIG_VT8500_TIMER)	+= vt8500_timer.o
>  obj-$(CONFIG_ARCH_NSPIRE)	+= zevio-timer.o
> diff --git a/drivers/clocksource/meson6_timer.c b/drivers/clocksource/meson6_timer.c
> new file mode 100644
> index 0000000..1ef1095
> --- /dev/null
> +++ b/drivers/clocksource/meson6_timer.c
> @@ -0,0 +1,187 @@
> +/*
> + * Amlogic Meson6 SoCs timer handling.
> + *
> + * Copyright (C) 2014 Carlo Caione
> + *
> + * Carlo Caione <carlo@caione.org>
> + *
> + * Based on code from Amlogic, Inc
> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2.  This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/clockchips.h>
> +#include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/irqreturn.h>
> +#include <linux/sched_clock.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/of_irq.h>
> +
> +enum {
> +	A = 0,
> +	B,
> +	C,
> +	D,
> +};

That's a very terse set of enum names. I would recomment something a
little longer.

Any reason for missing E?

> +
> +#define TIMER_ISA_MUX		0
> +#define TIMER_ISA_E_VAL		0x14
> +#define TIMER_ISA_t_VAL(t)	((t + 1) << 2)
> +
> +#define TIMER_t_INPUT_BIT(t)	(2 * t)
> +#define TIMER_E_INPUT_BIT	8
> +#define TIMER_t_INPUT_MASK(t)	(3UL << TIMER_t_INPUT_BIT(t))
> +#define TIMER_E_INPUT_MASK	(7UL << TIMER_E_INPUT_BIT)
> +#define TIMER_t_ENABLE_BIT(t)	(16 + t)
> +#define TIMER_E_ENABLE_BIT	20
> +#define TIMER_t_PERIODIC_BIT(t)	(12 + t)

While I don't think it matters for any of these, it's usually good
practice to add parentheses around arguments, e.g.

#define FOO(x)		((x) * 2)

So you can avoid bad expansions in cases like:

FOO(reg + 4)

> +
> +#define TIMER_UNIT_1us		0
> +#define TIMER_E_UNIT_1us	1
> +
> +static void __iomem *timer_base;
> +
> +static cycle_t cycle_read_timer_e(struct clocksource *cs)
> +{
> +	return (cycle_t)readl(timer_base + TIMER_ISA_E_VAL);
> +}
> +
> +static struct clocksource clocksource_timer_e = {
> +	.name	= "meson6_timerE",

Do we really care which specific timer we're using within the block?

Why not just "meson6_clocksource"?

> +	.rating	= 300,
> +	.read	= cycle_read_timer_e,
> +	.mask	= CLOCKSOURCE_MASK(32),
> +	.flags  = CLOCK_SOURCE_IS_CONTINUOUS,
> +};

[...]

> +static irqreturn_t meson6_timer_interrupt(int irq, void *dev_id)
> +{
> +	struct clock_event_device *evt = (struct clock_event_device *)dev_id;
> +
> +	evt->event_handler(evt);
> +
> +	return IRQ_HANDLED;
> +}
> +
> +static struct irqaction meson6_timer_irq = {
> +	.name		= "meson6_timerA",

Similarly to the clocksource naming, this might be better as
"meson6_timer", without the 'A'.

Thanks,
Mark.

WARNING: multiple messages have this Message-ID (diff)
From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/7] ARM: meson6: clocksource: add Meson6 timer support
Date: Mon, 18 Aug 2014 17:27:26 +0100	[thread overview]
Message-ID: <20140818162726.GE3302@leverpostej> (raw)
In-Reply-To: <1408272594-10814-4-git-send-email-carlo@caione.org>

On Sun, Aug 17, 2014 at 11:49:50AM +0100, Carlo Caione wrote:
> Meson6 SoCs are equipped with 5 32-bit timers, called TIMER_A, TIMER_B,
> TIMER_C, TIMER_D and TIMER_E.
> 
> The driver is providing clocksource support for the 32-bit counter using
> TIMER_E. Clockevents are also supported using TIMER_A.
> 
> Signed-off-by: Carlo Caione <carlo@caione.org>
> ---
>  drivers/clocksource/Kconfig        |   3 +
>  drivers/clocksource/Makefile       |   1 +
>  drivers/clocksource/meson6_timer.c | 187 +++++++++++++++++++++++++++++++++++++
>  3 files changed, 191 insertions(+)
>  create mode 100644 drivers/clocksource/meson6_timer.c
> 
> diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
> index cfd6519..38029ca 100644
> --- a/drivers/clocksource/Kconfig
> +++ b/drivers/clocksource/Kconfig
> @@ -30,6 +30,9 @@ config ARMADA_370_XP_TIMER
>  	bool
>  	select CLKSRC_OF
>  
> +config MESON6_TIMER
> +	bool
> +
>  config ORION_TIMER
>  	select CLKSRC_OF
>  	select CLKSRC_MMIO
> diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
> index 7fd9fd1..e4ae987 100644
> --- a/drivers/clocksource/Makefile
> +++ b/drivers/clocksource/Makefile
> @@ -25,6 +25,7 @@ obj-$(CONFIG_ARCH_PRIMA2)	+= timer-prima2.o
>  obj-$(CONFIG_ARCH_U300)		+= timer-u300.o
>  obj-$(CONFIG_SUN4I_TIMER)	+= sun4i_timer.o
>  obj-$(CONFIG_SUN5I_HSTIMER)	+= timer-sun5i.o
> +obj-$(CONFIG_MESON6_TIMER)	+= meson6_timer.o
>  obj-$(CONFIG_ARCH_TEGRA)	+= tegra20_timer.o
>  obj-$(CONFIG_VT8500_TIMER)	+= vt8500_timer.o
>  obj-$(CONFIG_ARCH_NSPIRE)	+= zevio-timer.o
> diff --git a/drivers/clocksource/meson6_timer.c b/drivers/clocksource/meson6_timer.c
> new file mode 100644
> index 0000000..1ef1095
> --- /dev/null
> +++ b/drivers/clocksource/meson6_timer.c
> @@ -0,0 +1,187 @@
> +/*
> + * Amlogic Meson6 SoCs timer handling.
> + *
> + * Copyright (C) 2014 Carlo Caione
> + *
> + * Carlo Caione <carlo@caione.org>
> + *
> + * Based on code from Amlogic, Inc
> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2.  This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/clockchips.h>
> +#include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/irqreturn.h>
> +#include <linux/sched_clock.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/of_irq.h>
> +
> +enum {
> +	A = 0,
> +	B,
> +	C,
> +	D,
> +};

That's a very terse set of enum names. I would recomment something a
little longer.

Any reason for missing E?

> +
> +#define TIMER_ISA_MUX		0
> +#define TIMER_ISA_E_VAL		0x14
> +#define TIMER_ISA_t_VAL(t)	((t + 1) << 2)
> +
> +#define TIMER_t_INPUT_BIT(t)	(2 * t)
> +#define TIMER_E_INPUT_BIT	8
> +#define TIMER_t_INPUT_MASK(t)	(3UL << TIMER_t_INPUT_BIT(t))
> +#define TIMER_E_INPUT_MASK	(7UL << TIMER_E_INPUT_BIT)
> +#define TIMER_t_ENABLE_BIT(t)	(16 + t)
> +#define TIMER_E_ENABLE_BIT	20
> +#define TIMER_t_PERIODIC_BIT(t)	(12 + t)

While I don't think it matters for any of these, it's usually good
practice to add parentheses around arguments, e.g.

#define FOO(x)		((x) * 2)

So you can avoid bad expansions in cases like:

FOO(reg + 4)

> +
> +#define TIMER_UNIT_1us		0
> +#define TIMER_E_UNIT_1us	1
> +
> +static void __iomem *timer_base;
> +
> +static cycle_t cycle_read_timer_e(struct clocksource *cs)
> +{
> +	return (cycle_t)readl(timer_base + TIMER_ISA_E_VAL);
> +}
> +
> +static struct clocksource clocksource_timer_e = {
> +	.name	= "meson6_timerE",

Do we really care which specific timer we're using within the block?

Why not just "meson6_clocksource"?

> +	.rating	= 300,
> +	.read	= cycle_read_timer_e,
> +	.mask	= CLOCKSOURCE_MASK(32),
> +	.flags  = CLOCK_SOURCE_IS_CONTINUOUS,
> +};

[...]

> +static irqreturn_t meson6_timer_interrupt(int irq, void *dev_id)
> +{
> +	struct clock_event_device *evt = (struct clock_event_device *)dev_id;
> +
> +	evt->event_handler(evt);
> +
> +	return IRQ_HANDLED;
> +}
> +
> +static struct irqaction meson6_timer_irq = {
> +	.name		= "meson6_timerA",

Similarly to the clocksource naming, this might be better as
"meson6_timer", without the 'A'.

Thanks,
Mark.

  parent reply	other threads:[~2014-08-18 16:28 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-17 10:49 [PATCH 0/7] ARM: meson: add preliminary support for MesonX/Meson6 SoCs Carlo Caione
2014-08-17 10:49 ` Carlo Caione
2014-08-17 10:49 ` [PATCH 1/7] ARM: meson: debug: add debug UART for earlyprintk support Carlo Caione
2014-08-17 10:49   ` Carlo Caione
2014-08-17 10:49 ` [PATCH 2/7] ARM: meson: serial: add MesonX SoC on-chip uart driver Carlo Caione
2014-08-17 10:49   ` Carlo Caione
2014-08-28  7:51   ` Carlo Caione
2014-08-28  7:51     ` Carlo Caione
2014-09-06 18:28   ` Carlo Caione
2014-09-06 18:28     ` Carlo Caione
2014-09-06 18:38     ` Greg KH
2014-09-06 18:38       ` Greg KH
2014-09-06 18:51       ` Carlo Caione
2014-09-06 18:51         ` Carlo Caione
2014-08-17 10:49 ` [PATCH 3/7] ARM: meson6: clocksource: add Meson6 timer support Carlo Caione
2014-08-17 10:49   ` Carlo Caione
2014-08-18 11:59   ` Matthias Brugger
2014-08-18 11:59     ` Matthias Brugger
2014-08-18 14:11     ` Carlo Caione
2014-08-18 14:11       ` Carlo Caione
2014-08-18 16:27   ` Mark Rutland [this message]
2014-08-18 16:27     ` Mark Rutland
2014-08-19 16:01     ` Carlo Caione
2014-08-19 16:01       ` Carlo Caione
2014-08-17 10:49 ` [PATCH 4/7] ARM: meson: add basic support for MesonX SoCs Carlo Caione
2014-08-17 10:49   ` Carlo Caione
2014-08-17 14:21   ` Maxime Ripard
2014-08-17 14:21     ` Maxime Ripard
2014-08-18 13:27     ` Carlo Caione
2014-08-18 13:27       ` Carlo Caione
2014-08-18 15:10       ` Matthias Brugger
2014-08-18 15:10         ` Matthias Brugger
2014-08-18 19:11       ` Maxime Ripard
2014-08-18 19:11         ` Maxime Ripard
2014-08-17 10:49 ` [PATCH 5/7] ARM: meson: dts: add basic Meson/Meson6/Meson6-atv1200 DTSI/DTS Carlo Caione
2014-08-17 10:49   ` Carlo Caione
2014-08-17 14:42   ` Beniamino Galvani
2014-08-17 14:42     ` Beniamino Galvani
2014-08-17 15:21     ` Carlo Caione
2014-08-17 15:21       ` Carlo Caione
2014-08-18 16:15       ` Mark Rutland
2014-08-18 16:15         ` Mark Rutland
2014-08-18 16:17   ` Mark Rutland
2014-08-18 16:17     ` Mark Rutland
2014-08-19 16:16     ` Carlo Caione
2014-08-19 16:16       ` Carlo Caione
2014-08-23 11:27   ` Andreas Färber
2014-08-23 11:27     ` Andreas Färber
2014-08-17 10:49 ` [PATCH 6/7] ARM: meson: update defconfigs Carlo Caione
2014-08-17 10:49   ` Carlo Caione
2014-08-18 10:31   ` Matthias Brugger
2014-08-18 10:31     ` Matthias Brugger
2014-08-18 13:31     ` Carlo Caione
2014-08-18 13:31       ` Carlo Caione
     [not found] ` <1408272594-10814-1-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
2014-08-17 10:49   ` [PATCH 7/7] ARM: meson: update documentation (uart, timer and vendors) Carlo Caione
2014-08-17 10:49     ` Carlo Caione
2014-08-18 10:36     ` Matthias Brugger
2014-08-18 10:36       ` Matthias Brugger
2014-08-18 13:33       ` Carlo Caione
2014-08-18 13:33         ` Carlo Caione
2014-08-23 12:24     ` Andreas Färber
2014-08-23 12:24       ` Andreas Färber
2014-08-17 14:29 ` [PATCH 0/7] ARM: meson: add preliminary support for MesonX/Meson6 SoCs Beniamino Galvani
2014-08-17 14:29   ` Beniamino Galvani
2014-08-17 15:25   ` Carlo Caione
2014-08-17 15:25     ` Carlo Caione

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=20140818162726.GE3302@leverpostej \
    --to=mark.rutland@arm.com \
    --cc=b.galvani@gmail.com \
    --cc=carlo@caione.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=jslaby@suse.cz \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=robh+dt@kernel.org \
    --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 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.