linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Guo Ren <ren_guo@c-sky.com>
Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
	daniel.lezcano@linaro.org, jason@lakedaemon.net, arnd@arndb.de,
	c-sky_gcc_upstream@c-sky.com, gnu-csky@mentor.com,
	thomas.petazzoni@bootlin.com, wbx@uclibc-ng.org,
	green.hu@gmail.com
Subject: Re: [PATCH V2 18/19] clocksource: add C-SKY clocksource drivers
Date: Tue, 3 Jul 2018 11:39:05 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.21.1807031130050.1601@nanos.tec.linutronix.de> (raw)
In-Reply-To: <aba005fd5005c066a2e3d760c334bb55f902d771.1530465326.git.ren_guo@c-sky.com>

On Mon, 2 Jul 2018, Guo Ren wrote:

-EEMPTYCHANGELOG

> Signed-off-by: Guo Ren <ren_guo@c-sky.com>
> --- /dev/null
> +++ b/drivers/clocksource/timer-csky-v1.c
> @@ -0,0 +1,169 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// Copyright (C) 2018 Hangzhou NationalChip Science & Technology Co.,Ltd.

newline please

> +#include <linux/init.h>
> +#include <linux/interrupt.h>
> +#include <linux/sched_clock.h>
> +#include <linux/cpu.h>
> +#include <asm/reg_ops.h>
> +
> +#include "timer-of.h"
> +
> +#define PTIM_CTLR	"cr<0, 14>"
> +#define PTIM_TSR	"cr<1, 14>"
> +#define PTIM_CCVR_HI	"cr<2, 14>"
> +#define PTIM_CCVR_LO	"cr<3, 14>"
> +#define PTIM_LVR	"cr<6, 14>"
> +
> +#define BITS_CSKY_TIMER	56
> +
> +DECLARE_PER_CPU(struct timer_of, csky_to);

static?

> +
> +static int csky_timer_irq;
> +static int csky_timer_rate;
> +
> +static inline u64 get_ccvr(void)
> +{
> +	u32 lo, hi, t;
> +
> +	do {
> +		hi = mfcr(PTIM_CCVR_HI);
> +		lo = mfcr(PTIM_CCVR_LO);
> +		t  = mfcr(PTIM_CCVR_HI);
> +	} while(t != hi);

No idea which frequency this timer ticks at, but if the 32 bit wrap does
not come too fast, then you really should avoid that loop. That function is
called very frequently.

> +	return ((u64)hi << 32) | lo;
> +}
> +

> +DEFINE_PER_CPU(struct timer_of, csky_to) = {

static

> +	.flags = TIMER_OF_CLOCK | TIMER_OF_IRQ,
> +
> +	.clkevt = {
> +		.name = "C-SKY SMP Timer V1",
> +		.rating = 300,
> +		.features = CLOCK_EVT_FEAT_PERCPU | CLOCK_EVT_FEAT_ONESHOT,
> +		.set_state_shutdown		= csky_timer_shutdown,
> +		.set_state_oneshot		= csky_timer_oneshot,
> +		.set_state_oneshot_stopped	= csky_timer_oneshot_stopped,
> +		.set_next_event			= csky_timer_set_next_event,
> +	},
> +
> +	.of_irq = {
> +		.handler = timer_interrupt,
> +		.flags = IRQF_TIMER,
> +		.percpu = 1,

This is inconsistent. You made it half tabular and half not. Please use
tabular style consistently.

> +	},
> +};
> +
> +/*** clock event for percpu ***/

Please refrain from inventing new horrible comment styles.

> +static int csky_timer_starting_cpu(unsigned int cpu)
> +{
> +	struct timer_of *to = this_cpu_ptr(&csky_to);
> +
> +	to->clkevt.cpumask = cpumask_of(smp_processor_id());
> +
> +	clockevents_config_and_register(&to->clkevt, csky_timer_rate, 0, ULONG_MAX);
> +
> +	enable_percpu_irq(csky_timer_irq, 0);
> +
> +	return 0;
> +}
> +
> +static int csky_timer_dying_cpu(unsigned int cpu)
> +{
> +	disable_percpu_irq(csky_timer_irq);
> +
> +	return 0;
> +}
> +
> +/*** clock source ***/
> +static u64 sched_clock_read(void)
> +{
> +	return get_ccvr();
> +}
> +
> +static u64 clksrc_read(struct clocksource *c)
> +{
> +	return get_ccvr();
> +}
> +
> +struct clocksource csky_clocksource = {
> +	.name = "csky_timer_v1_clksrc",
> +	.rating = 400,
> +	.mask = CLOCKSOURCE_MASK(BITS_CSKY_TIMER),
> +	.flags = CLOCK_SOURCE_IS_CONTINUOUS,
> +	.read = clksrc_read,

tabular style please

> +};
> +
> +static void csky_clksrc_init(void)
> +{
> +	clocksource_register_hz(&csky_clocksource, csky_timer_rate);
> +
> +	sched_clock_register(sched_clock_read, BITS_CSKY_TIMER, csky_timer_rate);
> +}
> +
> +static int __init csky_timer_v1_init(struct device_node *np)
> +{
> +	int ret;
> +	struct timer_of *to = this_cpu_ptr(&csky_to);
> +
> +	ret = timer_of_init(np, to);
> +	if (ret)
> +		return ret;
> +
> +	csky_timer_irq = to->of_irq.irq;
> +	csky_timer_rate = timer_of_rate(to);
> +
> +	ret = cpuhp_setup_state(CPUHP_AP_DUMMY_TIMER_STARTING,
> +				"clockevents/csky/timer:starting",
> +				csky_timer_starting_cpu,
> +				csky_timer_dying_cpu);

Oh no. Just picking a random hotplug event is not how it works. Add your
own please and make sure it's at the proper place.

> +++ b/drivers/clocksource/timer-nationalchip.c
> @@ -0,0 +1,165 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// Copyright (C) 2018 Hangzhou NationalChip Science & Technology Co.,Ltd.

...

> +#include <linux/init.h>

> +static irqreturn_t timer_interrupt(int irq, void *dev)
> +{
> +	struct clock_event_device *ce = (struct clock_event_device *) dev;

Pointless type cast.

> +	void __iomem *base = timer_of_base(to_timer_of(ce));
> +
> +	writel_relaxed(STATUS_clr, base + TIMER_STATUS);
> +
> +	ce->event_handler(ce);
> +
> +	return IRQ_HANDLED;
> +}

> +static struct timer_of to = {
> +	.flags = TIMER_OF_IRQ | TIMER_OF_BASE | TIMER_OF_CLOCK,
> +
> +	.clkevt = {
> +		.name = TIMER_NAME,
> +		.rating = 300,
> +		.features = CLOCK_EVT_FEAT_DYNIRQ | CLOCK_EVT_FEAT_PERIODIC |
> +			CLOCK_EVT_FEAT_ONESHOT,
> +		.set_state_shutdown	= nc_timer_shutdown,
> +		.set_state_periodic	= nc_timer_set_periodic,
> +		.set_next_event		= nc_timer_set_next_event,
> +		.cpumask = cpu_possible_mask,
> +	},
> +
> +	.of_irq = {
> +		.handler = timer_interrupt,
> +		.flags = IRQF_TIMER | IRQF_IRQPOLL,
> +	},

See above

> +};

Thanks,

	tglx

  parent reply	other threads:[~2018-07-03  9:39 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-01 17:30 [PATCH V2 00/19] C-SKY(csky) Linux Kernel Port Guo Ren
2018-07-01 17:30 ` [PATCH V2 01/19] csky: Build infrastructure Guo Ren
2018-07-01 21:01   ` Randy Dunlap
2018-07-02  1:13     ` Guo Ren
2018-07-03  3:33   ` Rob Herring
2018-07-03  9:14     ` Guo Ren
2018-07-03 16:03   ` Arnd Bergmann
2018-07-04 11:40     ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 02/19] csky: defconfig Guo Ren
2018-07-03  3:16   ` Rob Herring
2018-07-03  8:31     ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 03/19] csky: Kernel booting Guo Ren
2018-07-01 17:30 ` [PATCH V2 04/19] csky: Exception handling Guo Ren
2018-07-01 17:30 ` [PATCH V2 05/19] csky: System Call Guo Ren
2018-07-03 19:53   ` Arnd Bergmann
2018-07-04 11:49     ` Guo Ren
2018-07-04 21:04       ` Arnd Bergmann
2018-07-05  5:38         ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 06/19] csky: Cache and TLB routines Guo Ren
2018-07-05 17:40   ` Peter Zijlstra
2018-07-07 11:51     ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 07/19] csky: MMU and page table management Guo Ren
2018-07-02 13:29   ` Christoph Hellwig
2018-07-03  2:53     ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 08/19] csky: Process management and Signal Guo Ren
2018-07-01 17:30 ` [PATCH V2 09/19] csky: VDSO and rt_sigreturn Guo Ren
2018-07-01 17:30 ` [PATCH V2 10/19] csky: IRQ handling Guo Ren
2018-07-01 17:30 ` [PATCH V2 11/19] csky: Atomic operations Guo Ren
2018-07-05 17:50   ` Peter Zijlstra
2018-07-06 11:01     ` Guo Ren
2018-07-06 11:56       ` Peter Zijlstra
2018-07-06 12:17         ` Peter Zijlstra
2018-07-07  8:08           ` Guo Ren
2018-07-07 20:10             ` Andrea Parri
2018-07-08  1:05               ` Guo Ren
2018-07-07  7:42         ` Guo Ren
2018-07-07 19:54           ` Andrea Parri
2018-07-08  0:39             ` Guo Ren
2018-07-05 17:59   ` Peter Zijlstra
2018-07-06 11:44     ` Guo Ren
2018-07-06 12:03       ` Peter Zijlstra
2018-07-06 13:01         ` Peter Zijlstra
2018-07-06 14:06         ` Guo Ren
2018-07-05 18:00   ` Peter Zijlstra
2018-07-06 11:48     ` Guo Ren
2018-07-06 12:05       ` Peter Zijlstra
2018-07-06 13:46         ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 12/19] csky: ELF and module probe Guo Ren
2018-07-01 17:30 ` [PATCH V2 13/19] csky: Library functions Guo Ren
2018-07-03 20:04   ` Arnd Bergmann
2018-07-04 10:51     ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 14/19] csky: User access Guo Ren
2018-07-01 17:30 ` [PATCH V2 15/19] csky: Debug and Ptrace GDB Guo Ren
2018-07-01 17:30 ` [PATCH V2 16/19] csky: SMP support Guo Ren
2018-07-05 18:05   ` Peter Zijlstra
2018-07-06  6:07     ` Guo Ren
2018-07-06  9:39       ` Peter Zijlstra
2018-07-06 13:22         ` Guo Ren
2018-07-06  5:24   ` Mark Rutland
2018-07-06 11:32     ` Guo Ren
2018-07-06 11:43       ` Mark Rutland
2018-07-06 12:26         ` Guo Ren
2018-07-06 16:21           ` Mark Rutland
2018-07-07  6:16             ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 17/19] csky: Misc headers Guo Ren
2018-07-01 17:30 ` [PATCH V2 18/19] clocksource: add C-SKY clocksource drivers Guo Ren
2018-07-01 17:34   ` Guo Ren
2018-07-03  9:39   ` Thomas Gleixner [this message]
2018-07-04 10:49     ` Guo Ren
2018-07-04 14:35       ` Thomas Gleixner
2018-07-05  5:03         ` Guo Ren
2018-07-04 17:05   ` Daniel Lezcano
2018-07-05  3:30     ` Guo Ren
2018-07-05  9:23       ` Daniel Lezcano
2018-07-06  5:57         ` Guo Ren
2018-07-01 17:30 ` [PATCH V2 19/19] irqchip: add C-SKY irqchip drivers Guo Ren
2018-07-03  3:27   ` Rob Herring
2018-07-03  7:38     ` Guo Ren
2018-07-03  9:28   ` Thomas Gleixner
2018-07-04  5:08     ` Guo Ren
2018-07-04  6:43       ` Thomas Gleixner
2018-07-04 11:58         ` Guo Ren
2018-07-11  9:51 ` [PATCH V2 00/19] C-SKY(csky) Linux Kernel Port David Howells
2018-07-12 12:51   ` Guo Ren
2018-07-12 16:04     ` Sandra Loosemore
2018-07-13  1:30       ` Guo Ren
2018-07-13 10:23     ` David Howells

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=alpine.DEB.2.21.1807031130050.1601@nanos.tec.linutronix.de \
    --to=tglx@linutronix.de \
    --cc=arnd@arndb.de \
    --cc=c-sky_gcc_upstream@c-sky.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=gnu-csky@mentor.com \
    --cc=green.hu@gmail.com \
    --cc=jason@lakedaemon.net \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ren_guo@c-sky.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=wbx@uclibc-ng.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).