Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1335244 > unrolled thread
| Started by | Vladimir Murzin <vladimir.murzin@arm.com> |
|---|---|
| First post | 2016-02-16 11:20 +0100 |
| Last post | 2016-02-16 17:20 +0100 |
| Articles | 8 on this page of 28 — 6 participants |
Back to article view | Back to linux.kernel
[PATCH v3 00/10] Support for Cortex-M Prototyping System Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 11:20 +0100
[PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 11:20 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Arnd Bergmann <arnd@arndb.de> - 2016-02-16 12:10 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 17:20 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-17 17:50 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Arnd Bergmann <arnd@arndb.de> - 2016-02-17 18:00 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-18 11:20 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Arnd Bergmann <arnd@arndb.de> - 2016-02-18 11:50 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-18 12:20 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Arnd Bergmann <arnd@arndb.de> - 2016-02-18 13:20 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-18 13:50 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Linus Walleij <linus.walleij@linaro.org> - 2016-02-16 16:20 +0100
Re: [PATCH v3 09/10] ARM: dts: introduce MPS2 AN385/AN386 Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 16:40 +0100
[PATCH v3 05/10] serial: mps2-uart: add support for early console Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 11:20 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Andy Shevchenko <andy.shevchenko@gmail.com> - 2016-02-16 11:40 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 14:20 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Andy Shevchenko <andy.shevchenko@gmail.com> - 2016-02-16 14:20 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 14:40 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Andy Shevchenko <andy.shevchenko@gmail.com> - 2016-02-16 15:10 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk> - 2016-02-16 17:20 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-19 10:50 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Andy Shevchenko <andy.shevchenko@gmail.com> - 2016-02-19 11:00 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Peter Hurley <peter@hurleysoftware.com> - 2016-02-19 16:50 +0100
Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-19 17:30 +0100
[PATCH v3 01/10] dt-bindings: document the MPS2 timer bindings Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 11:20 +0100
[PATCH v3 02/10] clockevents/drivers: add MPS2 Timer driver Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 11:20 +0100
Re: [PATCH v3 00/10] Support for Cortex-M Prototyping System Arnd Bergmann <arnd@arndb.de> - 2016-02-16 12:10 +0100
Re: [PATCH v3 00/10] Support for Cortex-M Prototyping System Vladimir Murzin <vladimir.murzin@arm.com> - 2016-02-16 17:20 +0100
Page 2 of 2 — ← Prev page 1 [2]
| From | Vladimir Murzin <vladimir.murzin@arm.com> |
|---|---|
| Date | 2016-02-19 10:50 +0100 |
| Subject | Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console |
| Message-ID | <r3PRg-31X-3@gated-at.bofh.it> |
| In reply to | #1335375 |
On 16/02/16 13:09, Vladimir Murzin wrote: >>> +EARLYCON_DECLARE(mps2, mps2_early_console_setup); >>> >> +OF_EARLYCON_DECLARE(mps2, "arm,mps2-uart", mps2_early_console_setup); >> > >> > IIRC Peter Hurley mentioned you don't need to put both anymore, OF_ >> > one is enough. >> > > I've just tried with OF_ only and seems it works fine. Thanks for > pointing at it! > ..and the reason for that was that I had stdout pointing at uart node. Now, while testing v4 I end-up with configuration: 1) no EARLYCON_DECLARE in mps2-uart.c 2) stdout not set 3) cmdline has "earlycon=mps2,0x40004000 console=/dev/ttyMPS" and I don't see bootconsole, but if I avoid 1) everything works fine. So, I'd leave EARLYCON_DECLARE in this patch. Cheers Vladimir
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andy.shevchenko@gmail.com> |
|---|---|
| Date | 2016-02-19 11:00 +0100 |
| Subject | Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console |
| Message-ID | <r3Q0W-37f-11@gated-at.bofh.it> |
| In reply to | #1338017 |
On Fri, Feb 19, 2016 at 11:45 AM, Vladimir Murzin <vladimir.murzin@arm.com> wrote: > On 16/02/16 13:09, Vladimir Murzin wrote: >>>> +EARLYCON_DECLARE(mps2, mps2_early_console_setup); >>>> >> +OF_EARLYCON_DECLARE(mps2, "arm,mps2-uart", mps2_early_console_setup); >>> > >>> > IIRC Peter Hurley mentioned you don't need to put both anymore, OF_ >>> > one is enough. >>> > >> I've just tried with OF_ only and seems it works fine. Thanks for >> pointing at it! >> > > ..and the reason for that was that I had stdout pointing at uart node. > Now, while testing v4 I end-up with configuration: > > 1) no EARLYCON_DECLARE in mps2-uart.c > 2) stdout not set > 3) cmdline has "earlycon=mps2,0x40004000 console=/dev/ttyMPS" > > and I don't see bootconsole, but if I avoid 1) everything works fine. > So, I'd leave EARLYCON_DECLARE in this patch. Peter, what is your comment on this? -- With Best Regards, Andy Shevchenko
[toc] | [prev] | [next] | [standalone]
| From | Peter Hurley <peter@hurleysoftware.com> |
|---|---|
| Date | 2016-02-19 16:50 +0100 |
| Subject | Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console |
| Message-ID | <r3VtE-7e6-13@gated-at.bofh.it> |
| In reply to | #1338022 |
On 02/19/2016 01:57 AM, Andy Shevchenko wrote: > On Fri, Feb 19, 2016 at 11:45 AM, Vladimir Murzin > <vladimir.murzin@arm.com> wrote: >> On 16/02/16 13:09, Vladimir Murzin wrote: >>>>> +EARLYCON_DECLARE(mps2, mps2_early_console_setup); >>>>>>> +OF_EARLYCON_DECLARE(mps2, "arm,mps2-uart", mps2_early_console_setup); >>>>> >>>>> IIRC Peter Hurley mentioned you don't need to put both anymore, OF_ >>>>> one is enough. >>>>> >>> I've just tried with OF_ only and seems it works fine. Thanks for >>> pointing at it! >>> >> >> ..and the reason for that was that I had stdout pointing at uart node. >> Now, while testing v4 I end-up with configuration: >> >> 1) no EARLYCON_DECLARE in mps2-uart.c >> 2) stdout not set >> 3) cmdline has "earlycon=mps2,0x40004000 console=/dev/ttyMPS" >> >> and I don't see bootconsole, but if I avoid 1) everything works fine. >> So, I'd leave EARLYCON_DECLARE in this patch. > > Peter, what is your comment on this? That Vladimir is not testing with linux-next. linux-next has common framework for both command line and OF-defined earlycons. Vladimir, if you pull in Greg's tty-next branch, then just OF_EARLYCON_DECLARE(mps2, "arm,mps2-uart", mps2_early_console_setup); should enable both command-line and OF-defined earlycons. Regards, Peter Hurley
[toc] | [prev] | [next] | [standalone]
| From | Vladimir Murzin <vladimir.murzin@arm.com> |
|---|---|
| Date | 2016-02-19 17:30 +0100 |
| Subject | Re: [PATCH v3 05/10] serial: mps2-uart: add support for early console |
| Message-ID | <r3W6n-7OW-49@gated-at.bofh.it> |
| In reply to | #1338300 |
On 19/02/16 15:46, Peter Hurley wrote: > On 02/19/2016 01:57 AM, Andy Shevchenko wrote: >> On Fri, Feb 19, 2016 at 11:45 AM, Vladimir Murzin >> <vladimir.murzin@arm.com> wrote: >>> On 16/02/16 13:09, Vladimir Murzin wrote: >>>>>> +EARLYCON_DECLARE(mps2, mps2_early_console_setup); >>>>>>>> +OF_EARLYCON_DECLARE(mps2, "arm,mps2-uart", mps2_early_console_setup); >>>>>> >>>>>> IIRC Peter Hurley mentioned you don't need to put both anymore, OF_ >>>>>> one is enough. >>>>>> >>>> I've just tried with OF_ only and seems it works fine. Thanks for >>>> pointing at it! >>>> >>> >>> ..and the reason for that was that I had stdout pointing at uart node. >>> Now, while testing v4 I end-up with configuration: >>> >>> 1) no EARLYCON_DECLARE in mps2-uart.c >>> 2) stdout not set >>> 3) cmdline has "earlycon=mps2,0x40004000 console=/dev/ttyMPS" >>> >>> and I don't see bootconsole, but if I avoid 1) everything works fine. >>> So, I'd leave EARLYCON_DECLARE in this patch. >> >> Peter, what is your comment on this? > > That Vladimir is not testing with linux-next. > > linux-next has common framework for both command line and OF-defined > earlycons. > > Vladimir, if you pull in Greg's tty-next branch, then just > > OF_EARLYCON_DECLARE(mps2, "arm,mps2-uart", mps2_early_console_setup); > > should enable both command-line and OF-defined earlycons. Confirmed! No doubt now EARLYCON_DECLARE can be dropped from this patch safely. Thanks! Vladimir > > Regards, > Peter Hurley > >
[toc] | [prev] | [next] | [standalone]
| From | Vladimir Murzin <vladimir.murzin@arm.com> |
|---|---|
| Date | 2016-02-16 11:20 +0100 |
| Subject | [PATCH v3 01/10] dt-bindings: document the MPS2 timer bindings |
| Message-ID | <r2KTE-6wn-21@gated-at.bofh.it> |
| In reply to | #1335244 |
This adds documentation of device tree bindings for the
timers found on ARM MPS2 platform.
Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Acked-by: Rob Herring <robh@kernel.org>
---
.../devicetree/bindings/timer/arm,mps2-timer.txt | 28 ++++++++++++++++++++
1 file changed, 28 insertions(+)
create mode 100644 Documentation/devicetree/bindings/timer/arm,mps2-timer.txt
diff --git a/Documentation/devicetree/bindings/timer/arm,mps2-timer.txt b/Documentation/devicetree/bindings/timer/arm,mps2-timer.txt
new file mode 100644
index 0000000..48f84d7
--- /dev/null
+++ b/Documentation/devicetree/bindings/timer/arm,mps2-timer.txt
@@ -0,0 +1,28 @@
+ARM MPS2 timer
+
+The MPS2 platform has simple general-purpose 32 bits timers.
+
+Required properties:
+- compatible : Should be "arm,mps2-timer"
+- reg : Address and length of the register set
+- interrupts : Reference to the timer interrupt
+
+Required clocking property, have to be one of:
+- clocks : The input clock of the timer
+- clock-frequency : The rate in HZ in input of the ARM MPS2 timer
+
+Examples:
+
+timer1: mps2-timer@40000000 {
+ compatible = "arm,mps2-timer";
+ reg = <0x40000000 0x1000>;
+ interrupts = <8>;
+ clocks = <&sysclk>;
+};
+
+timer2: mps2-timer@40001000 {
+ compatible = "arm,mps2-timer";
+ reg = <0x40001000 0x1000>;
+ interrupts = <9>;
+ clock-frequency = <25000000>;
+};
--
1.7.9.5
[toc] | [prev] | [next] | [standalone]
| From | Vladimir Murzin <vladimir.murzin@arm.com> |
|---|---|
| Date | 2016-02-16 11:20 +0100 |
| Subject | [PATCH v3 02/10] clockevents/drivers: add MPS2 Timer driver |
| Message-ID | <r2KTE-6wn-15@gated-at.bofh.it> |
| In reply to | #1335244 |
MPS2 platform has simple 32 bits general purpose countdown timers.
The driver uses the first detected timer as a clocksource and the rest
of the timers as a clockevent
Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
drivers/clocksource/Kconfig | 6 +
drivers/clocksource/Makefile | 1 +
drivers/clocksource/mps2-timer.c | 275 ++++++++++++++++++++++++++++++++++++++
3 files changed, 282 insertions(+)
create mode 100644 drivers/clocksource/mps2-timer.c
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 33db740..7ce3892 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -185,6 +185,12 @@ config CLKSRC_STM32
depends on OF && ARM && (ARCH_STM32 || COMPILE_TEST)
select CLKSRC_MMIO
+config CLKSRC_MPS2
+ bool "Clocksource for MPS2 SoCs" if COMPILE_TEST
+ depends on GENERIC_SCHED_CLOCK
+ select CLKSRC_MMIO
+ select CLKSRC_OF
+
config ARM_ARCH_TIMER
bool
select CLKSRC_OF if OF
diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
index dc2b899..b0a3c96 100644
--- a/drivers/clocksource/Makefile
+++ b/drivers/clocksource/Makefile
@@ -39,6 +39,7 @@ obj-$(CONFIG_CLKSRC_EFM32) += time-efm32.o
obj-$(CONFIG_CLKSRC_STM32) += timer-stm32.o
obj-$(CONFIG_CLKSRC_EXYNOS_MCT) += exynos_mct.o
obj-$(CONFIG_CLKSRC_LPC32XX) += time-lpc32xx.o
+obj-$(CONFIG_CLKSRC_MPS2) += mps2-timer.o
obj-$(CONFIG_CLKSRC_SAMSUNG_PWM) += samsung_pwm_timer.o
obj-$(CONFIG_FSL_FTM_TIMER) += fsl_ftm_timer.o
obj-$(CONFIG_VF_PIT_TIMER) += vf_pit_timer.o
diff --git a/drivers/clocksource/mps2-timer.c b/drivers/clocksource/mps2-timer.c
new file mode 100644
index 0000000..fe73fd7
--- /dev/null
+++ b/drivers/clocksource/mps2-timer.c
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2015 ARM Limited
+ *
+ * Author: Vladimir Murzin <vladimir.murzin@arm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/clk.h>
+#include <linux/clockchips.h>
+#include <linux/clocksource.h>
+#include <linux/err.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/of_address.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
+#include <linux/sched_clock.h>
+#include <linux/slab.h>
+
+#define TIMER_CTRL 0x0
+#define TIMER_CTRL_ENABLE BIT(0)
+#define TIMER_CTRL_IE BIT(3)
+
+#define TIMER_VALUE 0x4
+#define TIMER_RELOAD 0x8
+#define TIMER_INT 0xc
+
+struct clockevent_mps2 {
+ void __iomem *reg;
+ u32 clock_count_per_tick;
+ struct clock_event_device clkevt;
+};
+
+static void __iomem *sched_clock_base;
+
+static u64 notrace mps2_sched_read(void)
+{
+ return ~readl_relaxed(sched_clock_base + TIMER_VALUE);
+}
+
+static inline struct clockevent_mps2 *to_mps2_clkevt(struct clock_event_device *c)
+{
+ return container_of(c, struct clockevent_mps2, clkevt);
+}
+
+static void clockevent_mps2_writel(u32 val, struct clock_event_device *c, u32 offset)
+{
+ writel_relaxed(val, to_mps2_clkevt(c)->reg + offset);
+}
+
+static int mps2_timer_shutdown(struct clock_event_device *ce)
+{
+ clockevent_mps2_writel(0, ce, TIMER_RELOAD);
+ clockevent_mps2_writel(0, ce, TIMER_CTRL);
+
+ return 0;
+}
+
+static int mps2_timer_set_next_event(unsigned long next, struct clock_event_device *ce)
+{
+ clockevent_mps2_writel(next, ce, TIMER_VALUE);
+ clockevent_mps2_writel(TIMER_CTRL_IE | TIMER_CTRL_ENABLE, ce, TIMER_CTRL);
+
+ return 0;
+}
+
+static int mps2_timer_set_periodic(struct clock_event_device *ce)
+{
+ u32 clock_count_per_tick = to_mps2_clkevt(ce)->clock_count_per_tick;
+
+ clockevent_mps2_writel(clock_count_per_tick, ce, TIMER_RELOAD);
+ clockevent_mps2_writel(clock_count_per_tick, ce, TIMER_VALUE);
+ clockevent_mps2_writel(TIMER_CTRL_IE | TIMER_CTRL_ENABLE, ce, TIMER_CTRL);
+
+ return 0;
+}
+
+static irqreturn_t mps2_timer_interrupt(int irq, void *dev_id)
+{
+ struct clockevent_mps2 *ce = dev_id;
+ u32 status = readl_relaxed(ce->reg + TIMER_INT);
+
+ if (!status) {
+ pr_warn("spurious interrupt\n");
+ return IRQ_NONE;
+ }
+
+ writel_relaxed(1, ce->reg + TIMER_INT);
+
+ ce->clkevt.event_handler(&ce->clkevt);
+
+ return IRQ_HANDLED;
+}
+
+static int __init mps2_clockevent_init(struct device_node *np)
+{
+ void __iomem *base;
+ struct clk *clk = NULL;
+ struct clockevent_mps2 *ce;
+ u32 rate;
+ int irq, ret;
+ const char *name = "mps2-clkevt";
+
+ ret = of_property_read_u32(np, "clock-frequency", &rate);
+ if (ret) {
+ clk = of_clk_get(np, 0);
+ if (IS_ERR(clk)) {
+ ret = PTR_ERR(clk);
+ pr_err("failed to get clock for clockevent: %d\n", ret);
+ goto out;
+ }
+
+ ret = clk_prepare_enable(clk);
+ if (ret) {
+ pr_err("failed to enable clock for clockevent: %d\n", ret);
+ goto out_clk_put;
+ }
+
+ rate = clk_get_rate(clk);
+ }
+
+ base = of_iomap(np, 0);
+ if (!base) {
+ ret = -EADDRNOTAVAIL;
+ pr_err("failed to map register for clockevent: %d\n", ret);
+ goto out_clk_disable;
+ }
+
+ irq = irq_of_parse_and_map(np, 0);
+ if (!irq) {
+ ret = -ENOENT;
+ pr_err("failed to get irq for clockevent: %d\n", ret);
+ goto out_iounmap;
+ }
+
+ ce = kzalloc(sizeof(struct clockevent_mps2), GFP_KERNEL);
+ if (!ce) {
+ ret = -ENOMEM;
+ goto out_iounmap;
+ }
+
+ ce->reg = base;
+ ce->clock_count_per_tick = DIV_ROUND_CLOSEST(rate, HZ);
+ ce->clkevt.irq = irq;
+ ce->clkevt.name = name;
+ ce->clkevt.rating = 200;
+ ce->clkevt.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
+ ce->clkevt.cpumask = cpu_possible_mask;
+ ce->clkevt.set_state_shutdown = mps2_timer_shutdown,
+ ce->clkevt.set_state_periodic = mps2_timer_set_periodic,
+ ce->clkevt.set_state_oneshot = mps2_timer_shutdown,
+ ce->clkevt.set_next_event = mps2_timer_set_next_event;
+
+ /* Ensure timer is disabled */
+ writel_relaxed(0, base + TIMER_CTRL);
+
+ ret = request_irq(irq, mps2_timer_interrupt, IRQF_TIMER, name, ce);
+ if (ret) {
+ pr_err("failed to request irq for clockevent: %d\n", ret);
+ goto out_kfree;
+ }
+
+ clockevents_config_and_register(&ce->clkevt, rate, 0xf, 0xffffffff);
+
+ return 0;
+
+out_kfree:
+ kfree(ce);
+out_iounmap:
+ iounmap(base);
+out_clk_disable:
+ /* clk_{disable, unprepare, put}() can handle NULL as a parameter */
+ clk_disable_unprepare(clk);
+out_clk_put:
+ clk_put(clk);
+out:
+ return ret;
+}
+
+static int __init mps2_clocksource_init(struct device_node *np)
+{
+ void __iomem *base;
+ struct clk *clk = NULL;
+ u32 rate;
+ int ret;
+ const char *name = "mps2-clksrc";
+
+ ret = of_property_read_u32(np, "clock-frequency", &rate);
+ if (ret) {
+ clk = of_clk_get(np, 0);
+ if (IS_ERR(clk)) {
+ ret = PTR_ERR(clk);
+ pr_err("failed to get clock for clocksource: %d\n", ret);
+ goto out;
+ }
+
+ ret = clk_prepare_enable(clk);
+ if (ret) {
+ pr_err("failed to enable clock for clocksource: %d\n", ret);
+ goto out_clk_put;
+ }
+
+ rate = clk_get_rate(clk);
+ }
+
+ base = of_iomap(np, 0);
+ if (!base) {
+ ret = -EADDRNOTAVAIL;
+ pr_err("failed to map register for clocksource: %d\n", ret);
+ goto out_clk_disable;
+ }
+
+ /* Ensure timer is disabled */
+ writel_relaxed(0, base + TIMER_CTRL);
+
+ /* ... and set it up as free-running clocksource */
+ writel_relaxed(0xffffffff, base + TIMER_VALUE);
+ writel_relaxed(0xffffffff, base + TIMER_RELOAD);
+
+ writel_relaxed(TIMER_CTRL_ENABLE, base + TIMER_CTRL);
+
+ ret = clocksource_mmio_init(base + TIMER_VALUE, name,
+ rate, 200, 32,
+ clocksource_mmio_readl_down);
+ if (ret) {
+ pr_err("failed to init clocksource: %d\n", ret);
+ goto out_iounmap;
+ }
+
+ sched_clock_base = base;
+ sched_clock_register(mps2_sched_read, 32, rate);
+
+ return 0;
+
+out_iounmap:
+ iounmap(base);
+out_clk_disable:
+ /* clk_{disable, unprepare, put}() can handle NULL as a parameter */
+ clk_disable_unprepare(clk);
+out_clk_put:
+ clk_put(clk);
+out:
+ return ret;
+}
+
+static void __init mps2_timer_init(struct device_node *np)
+{
+ static int has_clocksource, has_clockevent;
+ int ret;
+
+ if (!has_clocksource) {
+ ret = mps2_clocksource_init(np);
+ if (!ret) {
+ has_clocksource = 1;
+ return;
+ }
+ }
+
+ if (!has_clockevent) {
+ ret = mps2_clockevent_init(np);
+ if (!ret) {
+ has_clockevent = 1;
+ return;
+ }
+ }
+}
+
+CLOCKSOURCE_OF_DECLARE(mps2_timer, "arm,mps2-timer", mps2_timer_init);
--
1.7.9.5
[toc] | [prev] | [next] | [standalone]
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2016-02-16 12:10 +0100 |
| Message-ID | <r2LG3-751-29@gated-at.bofh.it> |
| In reply to | #1335244 |
On Tuesday 16 February 2016 10:08:05 Vladimir Murzin wrote: > Hi, > > This patch series provide the basic support for running ucLinux on V2M-MPS2 > platform. > > With these patches applied ucLinux can be run on both HW and FVP models > with Cortex-M3/M4/M7 configurations. Looks very nice overall now. I have mentioned a few details that I noticed but no show-stoppers. Most important question for me is how this is going to be maintained in the long run. Can you add a patch to list the added files in MAINTAINERS? My preference from the arm-soc perspective would be to get pull requests for this together with vexpress and juno through the existing maintainers (Liviu, Sudeep, Lorenzo), and have you send your patches to them. Does that work for you all? Arnd
[toc] | [prev] | [next] | [standalone]
| From | Vladimir Murzin <vladimir.murzin@arm.com> |
|---|---|
| Date | 2016-02-16 17:20 +0100 |
| Message-ID | <r2Qw1-1LV-1@gated-at.bofh.it> |
| In reply to | #1335282 |
On 16/02/16 11:05, Arnd Bergmann wrote: > On Tuesday 16 February 2016 10:08:05 Vladimir Murzin wrote: >> Hi, >> >> This patch series provide the basic support for running ucLinux on V2M-MPS2 >> platform. >> >> With these patches applied ucLinux can be run on both HW and FVP models >> with Cortex-M3/M4/M7 configurations. > > Looks very nice overall now. I have mentioned a few details that I noticed > but no show-stoppers. > > Most important question for me is how this is going to be maintained > in the long run. Can you add a patch to list the added files in > MAINTAINERS? > > My preference from the arm-soc perspective would be to get pull requests for > this together with vexpress and juno through the existing maintainers > (Liviu, Sudeep, Lorenzo), and have you send your patches to them. Does > that work for you all? > I'm quite happy with either way. I'm not targeting for 4.6, so we have some time to sort it out. Thanks Vladimir > Arnd > > >
[toc] | [prev] | [standalone]
Page 2 of 2 — ← Prev page 1 [2]
Back to top | Article view | linux.kernel
csiph-web