From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932554AbbLNNgU (ORCPT ); Mon, 14 Dec 2015 08:36:20 -0500 Received: from mail-wm0-f54.google.com ([74.125.82.54]:33435 "EHLO mail-wm0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932480AbbLNNgQ (ORCPT ); Mon, 14 Dec 2015 08:36:16 -0500 Subject: Re: [PATCH v1 02/10] clockevents/drivers: add MPS2 Timer driver To: Vladimir Murzin , arnd@arndb.de, linux@arm.linux.org.uk, gregkh@linuxfoundation.org, tglx@linutronix.de, u.kleine-koenig@pengutronix.de, afaerber@suse.de, mcoquelin.stm32@gmail.com References: <1449048790-25859-1-git-send-email-vladimir.murzin@arm.com> <1449048790-25859-3-git-send-email-vladimir.murzin@arm.com> Cc: Mark.Rutland@arm.com, Pawel.Moll@arm.com, ijc+devicetree@hellion.org.uk, galak@codeaurora.org, jslaby@suse.cz, robh+dt@kernel.org, devicetree@vger.kernel.org, linux-serial@vger.kernel.org, linux-api@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org From: Daniel Lezcano Message-ID: <566EC5D2.9050005@linaro.org> Date: Mon, 14 Dec 2015 14:36:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <1449048790-25859-3-git-send-email-vladimir.murzin@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/02/2015 10:33 AM, Vladimir Murzin wrote: > 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 > --- [ ... ] > +static void clockevent_mps2_writel(u32 val, struct clock_event_device *c, u32 offset) > +{ > + writel(val, to_mps2_clkevt(c)->reg + offset); > +} Is it possible to use writel_relaxed here ? [ ... ] > +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(ce->reg + TIMER_INT); > + > + if (!status) { > + pr_warn("spuirous interrupt\n"); typo: 'spurious' [ ... ] > + ce = kzalloc(sizeof(struct clockevent_mps2), GFP_KERNEL); > + if (!ce) { > + ret = -ENOMEM; > + pr_err("failed to allocate clockevent: %d\n", ret); There is already a stack trace in the kernel when an allocation fails. With the above fixed: Acked-by: Daniel Lezcano -- Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog