From patchwork Mon Nov 14 05:01:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pankaj Dubey X-Patchwork-Id: 9426463 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 217AD60484 for ; Mon, 14 Nov 2016 05:03:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E489288B4 for ; Mon, 14 Nov 2016 05:03:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F2DE1288F7; Mon, 14 Nov 2016 05:03:05 +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.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED 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 84978288B4 for ; Mon, 14 Nov 2016 05:03: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 1c69Ne-0007Kh-VB; Mon, 14 Nov 2016 05:00:30 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1c69Mp-0005x4-Hs for linux-arm-kernel@lists.infradead.org; Mon, 14 Nov 2016 04:59:42 +0000 Received: from epcpsbgm1new.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OGM00LQ78IMQU50@mailout2.samsung.com> for linux-arm-kernel@lists.infradead.org; Mon, 14 Nov 2016 13:59:14 +0900 (KST) X-AuditID: cbfee61a-f79916d0000062de-7c-582944a2c2d9 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1new.samsung.com (EPCPMTA) with SMTP id 67.23.25310.2A449285; Mon, 14 Nov 2016 13:59:14 +0900 (KST) Received: from pankaj.sisodomain.com ([107.108.83.125]) by mmp2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OGM009SR8IFBJ70@mmp2.samsung.com>; Mon, 14 Nov 2016 13:59:14 +0900 (KST) From: Pankaj Dubey To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 01/16] ARM: scu: Provide support for parsing SCU device node to enable SCU Date: Mon, 14 Nov 2016 10:31:56 +0530 Message-id: <1479099731-28108-2-git-send-email-pankaj.dubey@samsung.com> X-Mailer: git-send-email 2.7.4 In-reply-to: <1479099731-28108-1-git-send-email-pankaj.dubey@samsung.com> References: <1479099731-28108-1-git-send-email-pankaj.dubey@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpgleLIzCtJLcpLzFFi42I5/e+xoO4iF80Ig7ff9CzO3z3EbPF30jF2 i1Wf1jBbzJ09idHi/6PXrBbNW78yWrw7vpvFYsmTh+wW589vYLeY8mc5k8Wmx9dYLS7vmsNm cWjqXkaLA0vbWSwerH7LZvHuZYTFoq1f2C3mnLjKaPF05mY2i0v9E5ksXmwRt5j/7SSrxauD bSwWHcsYLTY/OMZm8eToFGYHKY8189Ywely+dpHZ4/evSYwes+6fZfOYeFbXY+esu+wej+du ZPfYtKqTzePOtT1sHpuX1Hvs3PGZyWPyQqD6/muT2D36tqxi9Nh+bR6zx9Mfe5kDRKLcbDJS E1NSixRS85LzUzLz0m2VQkPcdC2UFPISc1NtlSJ0fUOClBTKEnNKgTwjAzTg4BzgHqykb5fg lrHi6BLGgiPSFfMX7GNpYLwt1sXIySEhYCKx9vo1RghbTOLCvfVsXYxcHEICsxgl+r/0Qjk/ GSUmn57MBFLFJqAr8eT9XGYQW0TATeJGYwcTSBGzQBubROOr22wgCWGBGIlT/1pYQWwWAVWJ jau/soPYvAIeEk0v97NDrJOTuHmuE2wQp4CnxJzOM2C9QkA1z29cZ5zAyLuAkWEVo0RqQXJB cVJ6rmFearlecWJucWleul5yfu4mRnDsP5PawXhwl/shRgEORiUe3gNmmhFCrIllxZW5hxgl OJiVRHhdbYBCvCmJlVWpRfnxRaU5qcWHGE2BDpvILCWanA9MS3kl8YYm5ibmxgYW5paWJkZK 4ryNs5+FCwmkJ5akZqemFqQWwfQxcXBKNTCubYtWiL7q+OXsa+1Lc3/6/jwwb7rUxXfZPNGl DrXND+UE5ctVV6cvcpi+Qs/73r7znyNvxlWl9kVdapqTYO8pWiMxW+VwdNCBvysjn6ft3RSS Hptnk1Hb8M56r2xvT5jDw1M9W9OefrAo5PHX3XV5Y+LfeYsXJB8VnxtVf6DRfN9NObHA+ZuV WIozEg21mIuKEwHlg6pIEwMAAA== X-MTR: 20000000000000000@CPGS X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20161113_205939_814300_C0638BC2 X-CRM114-Status: GOOD ( 16.14 ) 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: Andrew Lunn , Heiko Stuebner , geert+renesas@glider.be, Linus Walleij , Liviu Dudau , Michal Simek , Wei Xu , Jisheng Zhang , vireshk@kernel.org, magnus.damm@gmail.com, Russell King , krzk@kernel.org, thomas.ab@samsung.com, arnd@arndb.de, Stephen Warren , Ray Jui , rmk+kernel@armlinux.org.uk, horms@verge.net.au, Jun Nie , shiraz.linux.kernel@gmail.com, Patrice Chotard , Pankaj Dubey , Dinh Nguyen , Shawn Guo MIME-Version: 1.0 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 Many platforms are duplicating code for enabling SCU, lets add common code to enable SCU by parsing SCU device node so the duplication in each platform can be avoided. CC: Krzysztof Kozlowski CC: Jisheng Zhang CC: Russell King CC: Dinh Nguyen CC: Patrice Chotard CC: Linus Walleij CC: Liviu Dudau CC: Ray Jui CC: Stephen Warren CC: Heiko Stuebner CC: Shawn Guo CC: Michal Simek CC: Wei Xu CC: Andrew Lunn CC: Jun Nie Suggested-by: Arnd Bergmann Signed-off-by: Pankaj Dubey --- arch/arm/include/asm/smp_scu.h | 4 +++ arch/arm/kernel/smp_scu.c | 56 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/arch/arm/include/asm/smp_scu.h b/arch/arm/include/asm/smp_scu.h index bfe163c..fdeec07 100644 --- a/arch/arm/include/asm/smp_scu.h +++ b/arch/arm/include/asm/smp_scu.h @@ -39,8 +39,12 @@ static inline int scu_power_mode(void __iomem *scu_base, unsigned int mode) #if defined(CONFIG_SMP) && defined(CONFIG_HAVE_ARM_SCU) void scu_enable(void __iomem *scu_base); +void __iomem *of_scu_get_base(void); +int of_scu_enable(void); #else static inline void scu_enable(void __iomem *scu_base) {} +static inline void __iomem *of_scu_get_base(void) {return NULL; } +static inline int of_scu_enable(void) {return 0; } #endif #endif diff --git a/arch/arm/kernel/smp_scu.c b/arch/arm/kernel/smp_scu.c index 72f9241..d0ac3ed 100644 --- a/arch/arm/kernel/smp_scu.c +++ b/arch/arm/kernel/smp_scu.c @@ -10,6 +10,7 @@ */ #include #include +#include #include #include @@ -70,6 +71,61 @@ void scu_enable(void __iomem *scu_base) */ flush_cache_all(); } + +static const struct of_device_id scu_match[] = { + { .compatible = "arm,cortex-a9-scu", }, + { .compatible = "arm,cortex-a5-scu", }, + { } +}; + +/* + * Helper API to get SCU base address + * In case platform DT do not have SCU node, or iomap fails + * this call will fallback and will try to map via call to + * scu_a9_get_base. + * This will return ownership of scu_base to the caller + */ +void __iomem *of_scu_get_base(void) +{ + unsigned long base = 0; + struct device_node *np; + void __iomem *scu_base; + + np = of_find_matching_node(NULL, scu_match); + scu_base = of_iomap(np, 0); + of_node_put(np); + if (!scu_base) { + pr_err("%s failed to map scu_base via DT\n", __func__); + if (scu_a9_has_base()) { + base = scu_a9_get_base(); + scu_base = ioremap(base, SZ_4K); + } + if (!scu_base) { + pr_err("%s failed to map scu_base\n", __func__); + return IOMEM_ERR_PTR(-ENOMEM); + } + } + return scu_base; +} + +/* + * Enable SCU via mapping scu_base DT + * If scu_base mapped successfully scu will be enabled and in case of + * failure if will return non-zero error code + */ +int of_scu_enable(void) +{ + void __iomem *scu_base; + + scu_base = of_scu_get_base(); + if (!IS_ERR(scu_base)) { + scu_enable(scu_base); + iounmap(scu_base); + return 0; + } + return PTR_ERR(scu_base); +} + #endif /*