From patchwork Tue Jul 12 07:46:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dirk Behme X-Patchwork-Id: 9224717 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E569C60868 for ; Tue, 12 Jul 2016 07:49:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D79F927F9A for ; Tue, 12 Jul 2016 07:49:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CC4C927F9E; Tue, 12 Jul 2016 07:49:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5D5E427F9A for ; Tue, 12 Jul 2016 07:49:05 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bMsPq-0003EL-As; Tue, 12 Jul 2016 07:47:38 +0000 Received: from smtp6-v.fe.bosch.de ([2a03:cc00:ff0:100::2]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bMsPl-0003Cf-Cj for linux-arm-kernel@lists.infradead.org; Tue, 12 Jul 2016 07:47:35 +0000 Received: from vsmta11.fe.internet.bosch.com (unknown [10.4.98.51]) by imta24.fe.bosch.de (Postfix) with ESMTP id AC06BD80222 for ; Tue, 12 Jul 2016 09:47:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=de.bosch.com; s=2015-01-21; t=1468309627; bh=4ZRF4okGTpQskJp7Lf5dM29UZDoPVCUFNQ+TfHbOSGI=; l=10; h=From:From:Reply-To:Sender; b=PkML6VA6VV+VFhlnDgkIPX0kAwM6AQce7Yt7u25Hm8woYh+fs6G1Xa6Q2YHKQRA/r lALdYTGu3bdaXVjF9SdL2RVaIcA2qv+AVlN60HkGnYWBTu5SS479SWkoMiGG6OwNyj GVcahHYbC820RJnM8VzKBHqoE7u+QqDD7goC6ma0= Received: from FE-HUB1001.de.bosch.com (vsgw23.fe.internet.bosch.com [10.4.98.23]) by vsmta11.fe.internet.bosch.com (Postfix) with ESMTP id 65D5F2380226 for ; Tue, 12 Jul 2016 09:47:07 +0200 (CEST) Received: from hi-z08if.hi.de.bosch.com (10.34.209.31) by FE-HUB1001.de.bosch.com (10.4.103.109) with Microsoft SMTP Server id 14.3.195.1; Tue, 12 Jul 2016 09:47:05 +0200 Received: from hi-z08if.hi.de.bosch.com (localhost [127.0.0.1]) by hi-z08if.hi.de.bosch.com (Postfix) with ESMTP id 75A39625F50; Tue, 12 Jul 2016 09:46:49 +0200 (CEST) From: Dirk Behme To: , Julien Grall , Mark Rutland , Michael Turquette Subject: [PATCH v4] xen/arm: Add a clock property Date: Tue, 12 Jul 2016 09:46:45 +0200 Message-ID: <1468309605-19522-1-git-send-email-dirk.behme@de.bosch.com> X-Mailer: git-send-email 2.8.0 MIME-Version: 1.0 X-TM-AS-MML: disable X-TM-AS-Product-Ver: IMSS-7.1.0.1679-8.0.0.1202-22444.006 X-TMASE-MatchedRID: gSuBSFN3kUzMHUInqqZ02i4uTw19Klh6cDE+oNxhOFAOUs4CTUgKy0rn Kix7t5mTBwUKapaDwZp5a2yur3iJTfw6RJrswLb7hK8o4aoss8ooUVkB7ifJnk4K0IMk2m3GW5I ZSmTamxR4Eg7FADpgCPcp5b1fTt/Nupptyy2mu+4X2N9OpwN26PioIsi7Sa0gsneuamRRT5P6vi SyhRDzBXbGbaLYKjQHltf52Juml6kVAZE5jK7smRcanaCAqviGTJDl9FKHbrnOxDyJFXIPjlxFY ZqEedYU0Q2PKuAVSm5kDaEyMa6Zgqh+3Rlbev+JutvHF25zoU8GP0vl6tsW4d9zZd3pUn7KtxlL /QQFT0Ihjxu0MmlDxudUFRFZ6XZP8jx0AfaT+UQVglQa/gMvfJYcYQ11P5U/JLfQYoCQHFZcUWQ c9/E0r+dhsebaDb56jenw2507tJ8fE8yM4pjsDzXJPZYaymc4xEHRux+uk8h+ICquNi0WJMbqE+ cZCtiAQ9zqFNwgak8vvMNXR0U91De6mK5zKHijftwZ3X11IV0= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160712_004734_073848_38553D29 X-CRM114-Status: GOOD ( 14.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Dirk Behme , Stephen Boyd , Stefano Stabellini , xen-devel@lists.xenproject.org, linux-clk@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Clocks described by this property are reserved for use by Xen, and the OS must not alter their state any way, such as disabling or gating a clock, or modifying its rate. Ensuring this may impose constraints on parent clocks or other resources used by the clock tree. This property is used to proxy clocks for devices Xen has taken ownership of, such as UARTs, for which the associated clock controller(s) remain under the control of Dom0. Up to now, the workaround for this has been to use the Linux kernel command line parameter 'clk_ignore_unused'. See Xen bug http://bugs.xenproject.org/xen/bug/45 too. Signed-off-by: Dirk Behme --- Changes in v4: Switch to the xen.txt description proposed by Mark: https://www.spinics.net/lists/arm-kernel/msg516158.html Changes in v3: Use the xen.txt description proposed by Michael. Thanks! Changes in v2: Drop the Linux implementation details like clk_disable_unused in xen.txt. Documentation/devicetree/bindings/arm/xen.txt | 12 +++++++ arch/arm/xen/enlighten.c | 47 +++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/xen.txt b/Documentation/devicetree/bindings/arm/xen.txt index c9b9321..437e50b 100644 --- a/Documentation/devicetree/bindings/arm/xen.txt +++ b/Documentation/devicetree/bindings/arm/xen.txt @@ -17,6 +17,18 @@ the following properties: A GIC node is also required. This property is unnecessary when booting Dom0 using ACPI. +Optional properties: + +- clocks: a list of phandle + clock-specifier pairs + Clocks described by this property are reserved for use by Xen, and the + OS must not alter their state any way, such as disabling or gating a + clock, or modifying its rate. Ensuring this may impose constraints on + parent clocks or other resources used by the clock tree. + + Note: this property is used to proxy clocks for devices Xen has taken + ownership of, such as UARTs, for which the associated clock + controller(s) remain under the control of Dom0. + To support UEFI on Xen ARM virtual platforms, Xen populates the FDT "uefi" node under /hypervisor with following parameters: diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index 47acb36..5c546d0 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -444,6 +445,52 @@ static int __init xen_pm_init(void) } late_initcall(xen_pm_init); +/* + * Check if we want to register some clocks, that they + * are not freed because unused by clk_disable_unused(). + * E.g. the serial console clock. + */ +static int __init xen_arm_register_clks(void) +{ + struct clk *clk; + struct device_node *xen_node; + unsigned int i, count; + int ret = 0; + + xen_node = of_find_compatible_node(NULL, NULL, "xen,xen"); + if (!xen_node) { + pr_err("Xen support was detected before, but it has disappeared\n"); + return -EINVAL; + } + + count = of_clk_get_parent_count(xen_node); + if (!count) + goto out; + + for (i = 0; i < count; i++) { + clk = of_clk_get(xen_node, i); + if (IS_ERR(clk)) { + pr_err("Xen failed to register clock %i. Error: %li\n", + i, PTR_ERR(clk)); + ret = PTR_ERR(clk); + goto out; + } + + ret = clk_prepare_enable(clk); + if (ret < 0) { + pr_err("Xen failed to enable clock %i. Error: %i\n", + i, ret); + goto out; + } + } + + ret = 0; + +out: + of_node_put(xen_node); + return ret; +} +late_initcall(xen_arm_register_clks); /* empty stubs */ void xen_arch_pre_suspend(void) { }