From patchwork Fri Mar 8 12:51:41 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 226112 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-wg0-f63.google.com (mail-wg0-f63.google.com [74.125.82.63]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority" (not verified)) by ozlabs.org (Postfix) with ESMTPS id B1BD02C039B for ; Fri, 8 Mar 2013 23:54:08 +1100 (EST) Received: by mail-wg0-f63.google.com with SMTP id dt14sf684338wgb.28 for ; Fri, 08 Mar 2013 04:54:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=x-received:mime-version:x-beenthere:x-received:received-spf :x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-google-group-id :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe:content-type; bh=DeoOL60PzpRnWko7P9mB4RAWhNfS2grwn8bt8AjQ9tQ=; b=SEYsIQY2uRJsjIELJuIMqEsSszBVZbcpZpp/b91/XyjiDhn12AefzS0c+jNEitqU7S JquYs9gIP+B0egaXUR6Q8NFNYZW1GZI44dzZmBAVIPFJHMPiYQUcZvIWq7y7fZ/YT4uZ YxwJEaxTs6AetUn24u+vu/tKDYmPim+aq50FMN5WJaMXKZr7EcA9XlCcnzvr8XmPryd1 OiwSppinMzJzs/UYGOMwLwXG/EvZCxoRzVWkeL6v8qyZObqoYKVYt6gupMy4/Lb7lZGS g8SsGofM7w18yffyg97hjKWE5zq+7i/9MhI4Kp7AAD8tCeHnVm4jogiPcOnDbARd+OWK r1XQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:x-beenthere:x-received:received-spf :x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-google-group-id :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe:content-type; bh=DeoOL60PzpRnWko7P9mB4RAWhNfS2grwn8bt8AjQ9tQ=; b=GNEAVGlRO7ST6yEJxilke4Vb1twLJlttdM+eIKOtVpe56mYKBaASUGk0arbkmYdAXr XawQBUy5m1xXvK87GE2ObgkisMBm8DQ2EisvfFo5lSt/z9gDvotPLs9w+RW5Ps/3Fbm3 CuFmUyeeivnP3RAdRJaJjXT2oEOKvOVjcirpy86v85T24MQt6KLhX8VQSoGxCrAJlN6b 5gp8e8cvswO5dqi4SxFQLmXA0Tll+e5yQQT4ScfDjy+6ycfiMoO95FQVUatDxIDktj9L X8WaxphOwJykbQ8mIlCZlnLGqFoX+M85DmkGnM84hJxa3kIUWgTP1JDhBd+tb4ZdLWYO n5kQ== X-Received: by 10.180.75.174 with SMTP id d14mr137023wiw.17.1362747244644; Fri, 08 Mar 2013 04:54:04 -0800 (PST) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.180.160.201 with SMTP id xm9ls943719wib.53.canary; Fri, 08 Mar 2013 04:54:03 -0800 (PST) X-Received: by 10.204.107.141 with SMTP id b13mr75025bkp.6.1362747243633; Fri, 08 Mar 2013 04:54:03 -0800 (PST) Received: from mail-la0-x22c.google.com ([2a00:1450:4010:c03::22c]) by gmr-mx.google.com with ESMTPS id 14si461563bky.0.2013.03.08.04.54.03 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 08 Mar 2013 04:54:03 -0800 (PST) Received-SPF: pass (google.com: domain of jhovold@gmail.com designates 2a00:1450:4010:c03::22c as permitted sender) client-ip=2a00:1450:4010:c03::22c; Received: by mail-la0-f44.google.com with SMTP id eb20so1666654lab.17 for ; Fri, 08 Mar 2013 04:54:03 -0800 (PST) X-Received: by 10.152.111.67 with SMTP id ig3mr1933904lab.41.1362747243298; Fri, 08 Mar 2013 04:54:03 -0800 (PST) Received: from omicron.terra (c83-179-13-247.cust.tele2.se. [83.179.13.247]) by mx.google.com with ESMTPS id b13sm1627221lbd.10.2013.03.08.04.53.59 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 08 Mar 2013 04:54:00 -0800 (PST) Received: from johan by omicron.terra with local (Exim 4.80.1) (envelope-from ) id 1UDwnO-0005bl-Ug; Fri, 08 Mar 2013 13:53:10 +0100 From: Johan Hovold To: Nicolas Ferre Cc: Jean-Christophe Plagniol-Villard , Andrew Victor , Alessandro Zummo , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, rtc-linux@googlegroups.com, Johan Hovold , stable Subject: [rtc-linux] [PATCH 1/3] ARM: at91/rtc: fix boot after RTC wake-up Date: Fri, 8 Mar 2013 13:51:41 +0100 Message-Id: <1362747103-21445-2-git-send-email-jhovold@gmail.com> X-Mailer: git-send-email 1.8.1.1 In-Reply-To: <1362747103-21445-1-git-send-email-jhovold@gmail.com> References: <1362747103-21445-1-git-send-email-jhovold@gmail.com> X-Original-Sender: jhovold@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of jhovold@gmail.com designates 2a00:1450:4010:c03::22c as permitted sender) smtp.mail=jhovold@gmail.com; dkim=pass header.i=@gmail.com Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , Fix failed boot after RTC wake-up by making sure RTC-interrupts are disabled at shutdown. The RTC-registers are not reset at shutdown when there is backup power available, and hence the RTC-interrupt, which uses the shared system interrupt, may be enabled during early boot. If an RTC-alarm goes off before the RTC-driver is initialised (e.g. when waking up from an RTC-alarm) this results in disabled system interrupts. Without earlyprintk boot hangs after Uncompressing Linux... done, booting the kernel. and earlyprintk reveals that the shared system interrupt gets disabled: irq 17: nobody cared (try booting with the "irqpoll" option) [] (unwind_backtrace+0x0/0xf0) from [] (__report_bad_irq+0x20/0xe8) [] (__report_bad_irq+0x20/0xe8) from [] (note_interrupt+0x1e0/0x244) [] (note_interrupt+0x1e0/0x244) from [] (handle_irq_event_percpu+0xac/0x1c4) [] (handle_irq_event_percpu+0xac/0x1c4) from [] (handle_irq_event+0x54/0x84) [] (handle_irq_event+0x54/0x84) from [] (handle_fasteoi_irq+0x84/0x154) [] (handle_fasteoi_irq+0x84/0x154) from [] (generic_handle_irq+0x20/0x30) [] (generic_handle_irq+0x20/0x30) from [] (handle_IRQ+0x30/0x84) [] (handle_IRQ+0x30/0x84) from [] (__irq_svc+0x40/0x6c) [] (__irq_svc+0x40/0x6c) from [] (__do_softirq+0x5c/0x164) [] (__do_softirq+0x5c/0x164) from [] (irq_exit+0x58/0x60) [] (irq_exit+0x58/0x60) from [] (handle_IRQ+0x34/0x84) [] (handle_IRQ+0x34/0x84) from [] (__irq_svc+0x40/0x6c) [] (__irq_svc+0x40/0x6c) from [] (start_kernel+0x1d8/0x29c) [] (start_kernel+0x1d8/0x29c) from [<70008040>] (0x70008040) handlers: [] at91sam926x_pit_interrupt Disabling IRQ #17 Note that disabling the RTC-interrupts at shutdown fixes boot after a clean shutdown, but that an RTC-alarm after a user (or watchdog) reset could still prevent the system from booting. Note also that the only way to recover from a failed boot after an RTC-alarm is to remove any backup power (e.g. backup battery) or to disable (or acknowledge) the RTC-interrupt manually from the bootloader. In particular, a user-reset is not sufficient. Tested on at91sam9g45. Cc: stable Signed-off-by: Johan Hovold --- drivers/rtc/rtc-at91rm9200.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c index b6469e2..936c75a 100644 --- a/drivers/rtc/rtc-at91rm9200.c +++ b/drivers/rtc/rtc-at91rm9200.c @@ -338,6 +338,14 @@ static int __exit at91_rtc_remove(struct platform_device *pdev) return 0; } +static void at91_rtc_shutdown(struct platform_device *pdev) +{ + /* Disable all interrupts */ + at91_rtc_write(AT91_RTC_IDR, AT91_RTC_ACKUPD | AT91_RTC_ALARM | + AT91_RTC_SECEV | AT91_RTC_TIMEV | + AT91_RTC_CALEV); +} + #ifdef CONFIG_PM /* AT91RM9200 RTC Power management control */ @@ -384,6 +392,7 @@ static const struct dev_pm_ops at91_rtc_pm = { static struct platform_driver at91_rtc_driver = { .remove = __exit_p(at91_rtc_remove), + .shutdown = at91_rtc_shutdown, .driver = { .name = "at91_rtc", .owner = THIS_MODULE,