From patchwork Wed Apr 15 14:26:39 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dong Aisheng X-Patchwork-Id: 6221041 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id BA21BBF4A6 for ; Wed, 15 Apr 2015 14:33:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id ABDEA201F2 for ; Wed, 15 Apr 2015 14:33:24 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9BD872022A for ; Wed, 15 Apr 2015 14:33:23 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1YiOLY-0004Gt-70; Wed, 15 Apr 2015 14:31:20 +0000 Received: from mail-bn1on0137.outbound.protection.outlook.com ([157.56.110.137] helo=na01-bn1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1YiOKM-0002PI-8H for linux-arm-kernel@lists.infradead.org; Wed, 15 Apr 2015 14:30:07 +0000 Received: from BN3PR0301CA0073.namprd03.prod.outlook.com (0.160.152.169) by CY1PR0301MB1210.namprd03.prod.outlook.com (0.161.212.144) with Microsoft SMTP Server (TLS) id 15.1.130.23; Wed, 15 Apr 2015 14:29:43 +0000 Received: from BY2FFO11FD015.protection.gbl (2a01:111:f400:7c0c::140) by BN3PR0301CA0073.outlook.office365.com (2a01:111:e400:401e::41) with Microsoft SMTP Server (TLS) id 15.1.136.25 via Frontend Transport; Wed, 15 Apr 2015 14:29:43 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11FD015.mail.protection.outlook.com (10.1.14.131) with Microsoft SMTP Server (TLS) id 15.1.148.11 via Frontend Transport; Wed, 15 Apr 2015 14:29:42 +0000 Received: from shlinux2.ap.freescale.net (shlinux2.ap.freescale.net [10.192.224.44]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t3FETK18031785; Wed, 15 Apr 2015 07:29:38 -0700 From: Dong Aisheng To: Subject: [PATCH RFC v1 5/5] clk: introduce clk_core_enable_lock and clk_core_disable_lock functions Date: Wed, 15 Apr 2015 22:26:39 +0800 Message-ID: <1429107999-24413-6-git-send-email-aisheng.dong@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1429107999-24413-1-git-send-email-aisheng.dong@freescale.com> References: <1429107999-24413-1-git-send-email-aisheng.dong@freescale.com> X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; BMV:1; SFV:NSPM; SFS:(10019020)(6009001)(339900001)(199003)(189002)(87936001)(48376002)(50226001)(50466002)(6806004)(19580405001)(19580395003)(86362001)(47776003)(85426001)(92566002)(36756003)(2351001)(229853001)(110136001)(2950100001)(106466001)(77096005)(104016003)(77156002)(62966003)(46102003)(33646002)(50986999)(76176999)(105606002)(4001430100001)(217873001); DIR:OUT; SFP:1102; SCL:1; SRVR:CY1PR0301MB1210; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:sfv; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1210; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(5002010); SRVR:CY1PR0301MB1210; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0301MB1210; X-Forefront-PRVS: 0547116B72 X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2015 14:29:42.2534 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1210 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150415_073006_590464_89DF7AA0 X-CRM114-Status: GOOD ( 10.40 ) X-Spam-Score: 1.3 (+) Cc: Ranjani.Vaidyanathan@freescale.com, b20596@freescale.com, mturquette@linaro.org, sboyd@codeaurora.org, linux-kernel@vger.kernel.org, r64343@freescale.com, b20788@freescale.com, shawn.guo@linaro.org, b29396@freescale.com, linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,RCVD_ILLEGAL_IP, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This can be usefully when clock core wants to enable/disable clocks. Then we don't have to convert the struct clk_core to struct clk to call clk_enable/clk_disable which is a bit un-align with exist using. Cc: Mike Turquette Cc: Stephen Boyd Signed-off-by: Dong Aisheng --- drivers/clk/clk.c | 79 +++++++++++++++++++++++++------------------------------ 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index f2470e5..6c481e7 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -48,6 +48,8 @@ static int clk_core_prepare(struct clk_core *clk); static void clk_core_unprepare(struct clk_core *clk); static int clk_core_enable(struct clk_core *clk); static void clk_core_disable(struct clk_core *clk); +static int clk_core_enable_lock(struct clk_core *clk); +static void clk_core_disable_lock(struct clk_core *clk); /*** private data structures ***/ @@ -523,9 +525,7 @@ static void clk_disable_unused_subtree(struct clk_core *clk) if (clk->flags & CLK_SET_PARENT_ON && parent) { clk_core_prepare(parent->core); - flags = clk_enable_lock(); - clk_core_enable(parent->core); - clk_enable_unlock(flags); + clk_core_enable_lock(parent->core); } flags = clk_enable_lock(); @@ -553,9 +553,7 @@ static void clk_disable_unused_subtree(struct clk_core *clk) unlock_out: clk_enable_unlock(flags); if (clk->flags & CLK_SET_PARENT_ON && parent) { - flags = clk_enable_lock(); - clk_core_disable(parent->core); - clk_enable_unlock(flags); + clk_core_disable_lock(parent->core); clk_core_unprepare(parent->core); } } @@ -1050,6 +1048,15 @@ static void clk_core_disable(struct clk_core *clk) clk_core_disable(clk->parent); } +static void clk_core_disable_lock(struct clk_core *clk) +{ + unsigned long flags; + + flags = clk_enable_lock(); + clk_core_disable(clk); + clk_enable_unlock(flags); +} + /** * clk_disable - gate a clock * @clk: the clk being gated @@ -1108,6 +1115,18 @@ static int clk_core_enable(struct clk_core *clk) return 0; } +static int clk_core_enable_lock(struct clk_core *clk) +{ + unsigned long flags; + int ret; + + flags = clk_enable_lock(); + ret = clk_core_enable(clk); + clk_enable_unlock(flags); + + return ret; +} + /** * clk_enable - ungate a clock * @clk: the clk being ungated @@ -1489,20 +1508,13 @@ static struct clk_core *__clk_set_parent_before(struct clk_core *clk, */ if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) { clk_core_prepare(parent); - flags = clk_enable_lock(); - clk_core_enable(parent); - clk_enable_unlock(flags); + clk_core_enable_lock(parent); if (clk->prepare_count) { - flags = clk_enable_lock(); - clk_core_enable(clk); - clk_enable_unlock(flags); + clk_core_enable_lock(clk); } else { - clk_core_prepare(old_parent); - flags = clk_enable_lock(); - clk_core_enable(old_parent); - clk_enable_unlock(flags); + clk_core_enable_lock(old_parent); } } @@ -1518,26 +1530,18 @@ static void __clk_set_parent_after(struct clk_core *clk, struct clk_core *parent, struct clk_core *old_parent) { - unsigned long flags; - /* * Finish the migration of prepare state and undo the changes done * for preventing a race with clk_enable(). */ if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) { - flags = clk_enable_lock(); - clk_core_disable(old_parent); - clk_enable_unlock(flags); + clk_core_disable_lock(old_parent); clk_core_unprepare(old_parent); if (clk->prepare_count) { - flags = clk_enable_lock(); - clk_core_disable(clk); - clk_enable_unlock(flags); + clk_core_disable_lock(clk); } else { - flags = clk_enable_lock(); - clk_core_disable(parent); - clk_enable_unlock(flags); + clk_core_disable_lock(parent); clk_core_unprepare(parent); } } @@ -1566,19 +1570,13 @@ static int __clk_set_parent(struct clk_core *clk, struct clk_core *parent, clk_enable_unlock(flags); if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) { - flags = clk_enable_lock(); - clk_core_disable(parent); - clk_enable_unlock(flags); + clk_core_disable_lock(parent); clk_core_unprepare(parent); if (clk->prepare_count) { - flags = clk_enable_lock(); - clk_core_disable(clk); - clk_enable_unlock(flags); + clk_core_disable_lock(clk); } else { - flags = clk_enable_lock(); - clk_core_disable(old_parent); - clk_enable_unlock(flags); + clk_core_disable_lock(old_parent); clk_core_unprepare(old_parent); } @@ -1798,7 +1796,6 @@ static void clk_change_rate(struct clk_core *clk) bool skip_set_rate = false; struct clk_core *old_parent; struct clk_core *parent = NULL; - unsigned long flags; old_rate = clk->rate; @@ -1831,9 +1828,7 @@ static void clk_change_rate(struct clk_core *clk) if (clk->flags & CLK_SET_PARENT_ON && parent) { clk_core_prepare(parent); - flags = clk_enable_lock(); - clk_core_enable(parent); - clk_enable_unlock(flags); + clk_core_enable_lock(parent); } if (!skip_set_rate && clk->ops->set_rate) @@ -1844,9 +1839,7 @@ static void clk_change_rate(struct clk_core *clk) clk->rate = clk_recalc(clk, best_parent_rate); if (clk->flags & CLK_SET_PARENT_ON && parent) { - flags = clk_enable_lock(); - clk_core_disable(parent); - clk_enable_unlock(flags); + clk_core_disable_lock(parent); clk_core_unprepare(parent); }