lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 26 Mar 2015 10:50:02 +0100 From: Daniel Lezcano <daniel.lezcano@...aro.org> To: Maxime Coquelin <mcoquelin.stm32@...il.com>, u.kleine-koenig@...gutronix.de, afaerber@...e.de, geert@...ux-m68k.org, Rob Herring <robh+dt@...nel.org>, Philipp Zabel <p.zabel@...gutronix.de>, Linus Walleij <linus.walleij@...aro.org>, Arnd Bergmann <arnd@...db.de>, stefan@...er.ch, pmeerw@...erw.net, pebolle@...cali.nl CC: Jonathan Corbet <corbet@....net>, Pawel Moll <pawel.moll@....com>, Mark Rutland <mark.rutland@....com>, Ian Campbell <ijc+devicetree@...lion.org.uk>, Kumar Gala <galak@...eaurora.org>, Russell King <linux@....linux.org.uk>, Thomas Gleixner <tglx@...utronix.de>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Jiri Slaby <jslaby@...e.cz>, Andrew Morton <akpm@...ux-foundation.org>, "David S. Miller" <davem@...emloft.net>, Mauro Carvalho Chehab <mchehab@....samsung.com>, Joe Perches <joe@...ches.com>, Antti Palosaari <crope@....fi>, Tejun Heo <tj@...nel.org>, Will Deacon <will.deacon@....com>, Nikolay Borisov <Nikolay.Borisov@....com>, Rusty Russell <rusty@...tcorp.com.au>, Kees Cook <keescook@...omium.org>, Michal Marek <mmarek@...e.cz>, linux-doc@...r.kernel.org, linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org, devicetree@...r.kernel.org, linux-gpio@...r.kernel.org, linux-serial@...r.kernel.org, linux-arch@...r.kernel.org, linux-api@...r.kernel.org Subject: Re: [PATCH v3 04/15] clocksource: Add ARM System timer driver On 03/12/2015 10:55 PM, Maxime Coquelin wrote: > From: Maxime Coquelin <mcoquelin.stm32@...il.com> > > This patch adds clocksource support for ARMv7-M's System timer, > also known as SysTick. > > Signed-off-by: Maxime Coquelin <mcoquelin.stm32@...il.com> Hi Maxime, the driver looks good. Three comments below. -- Daniel > --- > drivers/clocksource/Kconfig | 7 ++++ > drivers/clocksource/Makefile | 1 + > drivers/clocksource/armv7m_systick.c | 78 ++++++++++++++++++++++++++++++++++++ > 3 files changed, 86 insertions(+) > create mode 100644 drivers/clocksource/armv7m_systick.c > > diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig > index 1c2506f..b82e58b 100644 > --- a/drivers/clocksource/Kconfig > +++ b/drivers/clocksource/Kconfig > @@ -134,6 +134,13 @@ config CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK > help > Use ARM global timer clock source as sched_clock > > +config ARMV7M_SYSTICK > + bool > + select CLKSRC_OF if OF > + select CLKSRC_MMIO > + help > + This options enables support for the ARMv7M system timer unit > + > config ATMEL_PIT > select CLKSRC_OF if OF > def_bool SOC_AT91SAM9 || SOC_SAMA5 > diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile > index 752d5c7..1c9a643 100644 > --- a/drivers/clocksource/Makefile > +++ b/drivers/clocksource/Makefile > @@ -44,6 +44,7 @@ obj-$(CONFIG_MTK_TIMER) += mtk_timer.o > > obj-$(CONFIG_ARM_ARCH_TIMER) += arm_arch_timer.o > obj-$(CONFIG_ARM_GLOBAL_TIMER) += arm_global_timer.o > +obj-$(CONFIG_ARMV7M_SYSTICK) += armv7m_systick.o > obj-$(CONFIG_CLKSRC_METAG_GENERIC) += metag_generic.o > obj-$(CONFIG_ARCH_HAS_TICK_BROADCAST) += dummy_timer.o > obj-$(CONFIG_ARCH_KEYSTONE) += timer-keystone.o > diff --git a/drivers/clocksource/armv7m_systick.c b/drivers/clocksource/armv7m_systick.c > new file mode 100644 > index 0000000..23d8249 > --- /dev/null > +++ b/drivers/clocksource/armv7m_systick.c > @@ -0,0 +1,78 @@ > +/* > + * Copyright (C) Maxime Coquelin 2015 > + * Author: Maxime Coquelin <mcoquelin.stm32@...il.com> > + * License terms: GNU General Public License (GPL), version 2 > + */ > + > +#include <linux/kernel.h> > +#include <linux/clocksource.h> > +#include <linux/clockchips.h> > +#include <linux/of.h> > +#include <linux/of_address.h> > +#include <linux/clk.h> > +#include <linux/bitops.h> > + > +#define SYST_CSR 0x00 > +#define SYST_RVR 0x04 > +#define SYST_CVR 0x08 > +#define SYST_CALIB 0x0c > + > +#define SYST_CSR_ENABLE BIT(0) > + > +#define SYSTICK_LOAD_RELOAD_MASK 0x00FFFFFF > + > +static void __init system_timer_of_register(struct device_node *np) > +{ > + struct clk *clk; > + void __iomem *base; > + u32 rate = 0; > + int ret; > + > + base = of_iomap(np, 0); > + if (!base) { > + pr_warn("system-timer: invalid base address\n"); > + return; > + } > + > + clk = of_clk_get(np, 0); > + if (!IS_ERR(clk)) { > + ret = clk_prepare_enable(clk); > + if (ret) { > + clk_put(clk); > + goto out_unmap; > + } > + > + rate = clk_get_rate(clk); > + } > + > + /* If no clock found, try to get clock-frequency property */ > + if (!rate) { > + ret = of_property_read_u32(np, "clock-frequency", &rate); > + if (ret) > + goto out_unmap; Shouldn't be 'goto out_clk_disable' ? > + } > + > + writel_relaxed(SYSTICK_LOAD_RELOAD_MASK, base + SYST_RVR); > + writel_relaxed(SYST_CSR_ENABLE, base + SYST_CSR); > + > + ret = clocksource_mmio_init(base + SYST_CVR, "arm_system_timer", rate, > + 200, 24, clocksource_mmio_readl_down); > + if (ret) { > + pr_err("failed to init clocksource (%d)\n", ret); > + goto out_clk_disable; > + } > + > + pr_info("ARM System timer initialized as clocksource\n"); > + > + return; > + > +out_clk_disable: > + if (!IS_ERR(clk)) Why do you need this check ? It isn't missing a clk_put ? > + clk_disable_unprepare(clk); > +out_unmap: > + iounmap(base); > + WARN(ret, "ARM System timer register failed (%d)\n", ret); > +} > + > +CLOCKSOURCE_OF_DECLARE(arm_systick, "arm,armv7m-systick", > + system_timer_of_register); > -- <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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists