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: 9224715 X-Patchwork-Delegate: mturquette@baylibre.com 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 F153C60868 for ; Tue, 12 Jul 2016 07:47:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E375C27D29 for ; Tue, 12 Jul 2016 07:47:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D755C27E63; Tue, 12 Jul 2016 07:47:12 +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=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 52A9327D29 for ; Tue, 12 Jul 2016 07:47:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750945AbcGLHrK (ORCPT ); Tue, 12 Jul 2016 03:47:10 -0400 Received: from smtp6-v.fe.bosch.de ([139.15.237.11]:12023 "EHLO smtp6-v.fe.bosch.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750897AbcGLHrJ (ORCPT ); Tue, 12 Jul 2016 03:47:09 -0400 Received: from vsmta11.fe.internet.bosch.com (unknown [10.4.98.51]) by imta24.fe.bosch.de (Postfix) with ESMTP id 6BAB6D8021E; 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 C51322380215; Tue, 12 Jul 2016 09:47:06 +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 CC: , , Stefano Stabellini , , Stephen Boyd , Dirk Behme 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= Sender: linux-clk-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.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) { }