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: 9224719 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 9C96760868 for ; Tue, 12 Jul 2016 07:50:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8F41B27CF9 for ; Tue, 12 Jul 2016 07:50:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 834EF27DCD; Tue, 12 Jul 2016 07:50:18 +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=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7FF5D27CF9 for ; Tue, 12 Jul 2016 07:50:17 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMsPP-0006Fp-Bd; Tue, 12 Jul 2016 07:47:11 +0000 Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMsPN-0006Fj-MV for xen-devel@lists.xenproject.org; Tue, 12 Jul 2016 07:47:10 +0000 Received: from [85.158.143.35] by server-2.bemta-6.messagelabs.com id F7/DB-11548-C70A4875; Tue, 12 Jul 2016 07:47:08 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrFIsWRWlGSWpSXmKPExsXSzf+WW7dmQUu 4wZZt3Bbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8b8CevZC/bIVuzruc7ewLhaoouRi0NI4Ayj xOQ3+5lAHBaBt0wSLyZdY4LIPGeUeLzpIiuEs4ZR4nlzE1CGE8hZySjR+YEdxGYT0JLYOaGDH aRIRGAxo8SHh0vB2pkFbjJK9Jw5zAhSJSxgKHF1zlFWEJtFQFViyu8JYJN4BdwlDs1fzwJiSw jISayb/J0dIi4ocXLmE7A4s4CExMEXL5ghakQkJv59zwZhW0qcXzmfCcI+xyJxYjvjBEbBWUj aZyFpX8DItIpRvTi1qCy1SNdQL6koMz2jJDcxM0fX0MBMLze1uDgxPTUnMalYLzk/dxMjMEwZ gGAH487nTocYJTmYlER5m5lbwoX4kvJTKjMSizPii0pzUosPMcpwcChJ8M6bD5QTLEpNT61Iy 8wBRgxMWoKDR0mEdw1Imre4IDG3ODMdInWKUVFKnHcmSEIAJJFRmgfXBovSS4yyUsK8jECHCP EUpBblZpagyr9iFOdgVBLmbQGZwpOZVwI3/RXQYiagxbUOzSCLSxIRUlINjOJTnr805O1l2tl xldtTdWLpo3yJbbwPj2dp8JhP6PF3/n1u27Eyi09L/eUn/V8fMFFlTtEErzzPIMPUzytWu7oa tlzaqcGd5H5AI+EP841V05qvCixzleawv64QV7mG54aFRmK/xJWTK8RvTdabrvD/QhBLq5WQ6 cL79xK92W5xxhxf9JWxX4mlOCPRUIu5qDgRAARV7YzNAgAA X-Env-Sender: Dirk.Behme@de.bosch.com X-Msg-Ref: server-10.tower-21.messagelabs.com!1468309627!23291775!1 X-Originating-IP: [139.15.237.11] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTM5LjE1LjIzNy4xMSA9PiAxNTMwMzA=\n X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked Received: (qmail 48799 invoked from network); 12 Jul 2016 07:47:08 -0000 Received: from smtp6-v.fe.bosch.de (HELO smtp6-v.fe.bosch.de) (139.15.237.11) by server-10.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 12 Jul 2016 07:47:08 -0000 Received: from vsmta13.fe.internet.bosch.com (unknown [10.4.98.53]) by imta24.fe.bosch.de (Postfix) with ESMTP id A1B7CD80212 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-HUB1000.de.bosch.com (vsgw23.fe.internet.bosch.com [10.4.98.23]) by vsmta13.fe.internet.bosch.com (Postfix) with ESMTP id 58CEE2E40278 for ; Tue, 12 Jul 2016 09:47:07 +0200 (CEST) Received: from hi-z08if.hi.de.bosch.com (10.34.209.31) by FE-HUB1000.de.bosch.com (10.4.103.107) 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 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= Cc: devicetree@vger.kernel.org, Dirk Behme , Stephen Boyd , Stefano Stabellini , xen-devel@lists.xenproject.org, linux-clk@vger.kernel.org Subject: [Xen-devel] [PATCH v4] xen/arm: Add a clock property X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" 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) { }