From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752411AbcF3Jki (ORCPT ); Thu, 30 Jun 2016 05:40:38 -0400 Received: from mail-bn1bon0055.outbound.protection.outlook.com ([157.56.111.55]:56384 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752060AbcF3Ji0 (ORCPT ); Thu, 30 Jun 2016 05:38:26 -0400 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;nxp.com; dkim=none (message not signed) header.d=none; From: Dong Aisheng To: CC: , , , , , , Subject: [PATCH V3 2/8] clk: move clk_disable_unused after clk_core_disable_unprepare function Date: Thu, 30 Jun 2016 17:31:12 +0800 Message-ID: <1467279078-2330-3-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1467279078-2330-1-git-send-email-aisheng.dong@nxp.com> References: <1467279078-2330-1-git-send-email-aisheng.dong@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131117531029033657;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.158.2;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(2351001)(586003)(68736007)(11100500001)(36756003)(50226002)(229853001)(85426001)(305945005)(47776003)(86362001)(4326007)(92566002)(356003)(575784001)(97736004)(33646002)(7846002)(189998001)(19580405001)(104016004)(6806005)(2906002)(19580395003)(69596002)(48376002)(8676002)(5003940100001)(2950100001)(81156014)(8666005)(110136002)(50986999)(81166006)(87936001)(8936002)(50466002)(106466001)(76176999)(105606002)(77096005)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:SN2PR03MB1934;H:az84smr01.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD010;1:ABwR8vxIFGz7zwAzv/F5kiufyOtWeO4AU7N5Qw+ApmU/NSIBSh+gwb82dbYjtrns7XbjTjF97WZZVlj2O9krvSCx+TbQuUMnnnZ9mRiBYi+8q+Cveo8mM6N5W7G8I2V7HldfGSGilTZsketeomu8OGJwiS1KhKHzv5KhouP9q+9ByxtQi9/m8aBLURcirFXALVnatzzaSdTqa2EYDZHr7ksYLtw7GvsmeOKOlWjOzV69Thc3IExLAkULbu0ATQpGWwoFinANCrGz+Uus63XQ0iNKzzgMSw9TpANgd401q7XprNulliuWwdTSlFdmEy0PQGEzQxr6wYFMAGlQnUUy5DT7A2PR5LajdNhesmjg6RmaEmjptYCp5UDIIiI6KvgZdBZja4XRqWp4rBLOkxRIzp4FdDXqvKIXNSfDtoDVNHQcjoMKmBzyEDT4rvqew4rQcOt9vPLpVWy6n3F/WxT0nssBOk1kvhR9e71i/xA5cHUOXhq4ewj3sal3Yk3HQwTyOFjyIufA9q9ccmGKtjzf1Dw/p7BuPGWZ3ITA6sIv/4IZpxWr0eqrkKr9WNOjix/LHf8By1zMIP1Kh8ipvymOx3zCEv1qvGbgt5hnr6lrzQodVjt4+ZAzhjHrYyPupmnfM4n4b28rCGyGZSD4T3/1h50MPj6r71182kYw4XqsKeSEr8s8zCAYP450FQvNBiFHOi2gwXuGzk3AU7VsWv7yydnEt6KHOE7fnYhxpTg4CJRlfV3YS3mIxijq55IYgHo2 MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: c29cb97f-2c47-4156-7159-08d3a0ca4744 X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB1934;2:4QfrXvO5zujnJnVPbM2T5kmWhnlhlG55VT04LNIpNSqVJpsbXbTfHaNHMVNKPg7uq5emP/gk0Io+tJMkb2zqzjuyjQAxahm13ndeUqCmo736Wgu/Qs3Mx9QAIVrhJ5CRFi9S5fDNyaL5qtKOlLLnaWlG1lV/ts2pWQ0PWwJN4OlMhCv+xO0L3OD88g8Hu+y0;3:FwxNZXS5OAaCtYOwrTQx1yyrOIx5+OIlptgTihe6Ql0jdVkQSCWK7XtFSR9CXuSa75jeWZSrNNquzJL4F0pGZACfctYGki3N/csYfcwLv8H29kFClgYYQMRcORl61FFhqwDispOF02SfBGa2miaVNPtlvZEwgaqGpeIir9bbq1S/2OH1peiLE/lfvlgAaiRpCa36fJ8PjdBBcY0WzurS1mSUhXsaFvsDHRDwintqfxU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN2PR03MB1934; X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB1934;25:KenjXC1lZZxUUl/6mPuFanQnlKSEbDpPFn1WjVoS75digQcQ+jsNGpyo65qmDtyYh5vEbaEcSi2TRMHa2UzMMAEbIyPiv7YcYrKMd7CEKMPYoRA1CCa/4zdtvxrrrwPBShDiWZrJMfll2vP+N6XZ45QMz9DXC8qXdFisqUFgZpLJ4va9Uirq8NlKfC+Aa8PCboXy6MdREwdMADS19CwWDzFOWmniX96SMlNK+/5j4jsUFb3tD/RXU4PO6hL4jcXn/yqDZ7oz8GkqXOINu8N8UJxWq8vwpOIt4pFccFDk9DfbOtTTWKjab+Anlr9EijbgCM9KMhwIneJe33cMe1teX8c642o26/7McMPZg4lvmKk5Qk3AGM42xKmpc+jtqlQ+UihnZCZ0S2yxpCuhhWnPoZiNm0nI5z0j4sGRxyLgxe0kgZ0NTDwL+ONqhzN7YFhhViCAkaBnEyehkd7IY5FsB0wkrMY8ClagBkPq/QyaaM9QzG3H0KblR6dU1IM8cw1S618jS7DBqCGzZo3e8mv8pAVcD33mBeIp7Xh2dJTzkGsDeFXALtAVsaF1Jiqd7WCY X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(13015025)(13018025)(13017025)(13024025)(13023025)(10201501046)(3002001)(6055026);SRVR:SN2PR03MB1934;BCL:0;PCL:0;RULEID:(400006);SRVR:SN2PR03MB1934; X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB1934;4:W1oXQWez8PCrxJd3SLvHxsYUQ4o6rgOjZGP963yVsvclEZX2rmWO9hXD7P8WPhJg08hzzkkn6zljngeUJtiOb2DdeCb16C+nV7QRDSeXtYXn4T8r6plNV/T85ULEEHpgFpdI+lo5Z8mZG5A3KXZ62ar/J36MmLjCUYkmIQRdCIHtFHi02kE5GAlyZewWJkLDKWK09HpL6dzQI4bJ5iUaUSWDcjnKTqECOcEVwTwgVIS1siQUsP9wytcQXi2pYhhFkL1VtfdNVcd9fM5JF4g9V4BjCav2eyyA5WuHpUv5aCsJA9nZntrJ4hCcXsK6p1vYq14UjRUVPgkPlt0zBky95xvo0LY0NjhXqTGRfeovjgMQmsLSs53kMUyIAROsITu4z18Trq0Y5aEno0HGfv7KJbkqMmwGCK4ubDp5g+AhaCu6zDsTSI/vzi35CMSK9JslCW3+mowBMby9fG91/DaOX3tnl4lJv8mEdnEZWGXOit8aLrJBKJgmTxAndSNrq9fEW7BfC4vDwfxutkeUROJb4w== X-Forefront-PRVS: 0989A7979C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN2PR03MB1934;23:rOSeA7dmiSb33CQNak7xtV11YT23zfJ15eglH6dEW?= =?us-ascii?Q?t4hsqDub7FKkVgV1y8jZyaang7TgIqmLMSg1z8Ry56XNSzOX/CyGRNHtj09D?= =?us-ascii?Q?KpXLU8YVx/raN129ARmpdQnXjv5cILI8nUxtpEj0ueP1F7/xQbuZ1bT2U12T?= =?us-ascii?Q?JvwUz90Cjt3Q7XjDgBXmC9O3wK0VT4MteOzVOvGFKdfk2SQPZLNIMnwM9/5I?= =?us-ascii?Q?HpQtlm2MboEC3SKo3NomJTc0RiZb+pEJxcm9Lbl1IhAZmIp+xKyXggbp4KVu?= =?us-ascii?Q?324BJoZsUMhHRU9ToeCaKfAaS5A30TpJPf2W+Umo4J0y4gkc0a5onU7hBsEF?= =?us-ascii?Q?Xtd+yuvvnCY9F1Nx7n6LR2AvLaWF/476X2HlE65QG8T5AToi38L3HLqzU4GF?= =?us-ascii?Q?+1rMwzmpd7yZQzS8qvFDYcj8GNvq8KtCZezFmeqI78PkCTZWlPy6SzgRnaon?= =?us-ascii?Q?pCy4lfCWyWxG3TX1up0qm2peQI2PF7FxenmQB88ZAD/Odi2k8m/17c2WFD37?= =?us-ascii?Q?uhBbtz04388avDDy8vNpCPdwY7NtmmT5tMlE31JfkTwvUHhQnFMMYbbmd+8a?= =?us-ascii?Q?3+lKlaP/ODjKbMUA7Zvr939LzVkwRfBHc70f5w8YqP1Uzn8FCOAqJiLDHG9H?= =?us-ascii?Q?5emJC1fjguKHyvGXFXjJgEoVlLyMxkBuOc1QIR1h8lnaQVCiJnUTVYk4qDxE?= =?us-ascii?Q?2SBxWBfMLWONAvSlyz/cBXsmv4kgbIH9ahtUeXqVi6s7PTq61l+C7XSMwq3i?= =?us-ascii?Q?DDPVOiTpVHjDstvDTnnOAqZDG3Dq+e3bHeG/vSsHB/b0jZXd6iyu67d1i58V?= =?us-ascii?Q?ODN1ofQQPsRTQ1O9SevkT4rAbXIr6L1155nlgRUef4OOAyctAa6m0eNkYl8a?= =?us-ascii?Q?j3UGNCuR/xvpRkfJxaz85/5Q3/vhJ8KMl8TUGh4ybi814HEOZhXarL9MnipW?= =?us-ascii?Q?AiEhsdRgwEFCxUoVsrZ/3AiCnDIk2+x3F0/C+ftBX3nbLovBXHpGpe3IeYqY?= =?us-ascii?Q?yHXCyHR1au9UglLISnNf5S3R6pODgs6+az+NQ7Tsg62OCg37Oriss3V8qaf/?= =?us-ascii?Q?/QXF0qVraoXBpCW7sJOAVg6l2EfGgtXzfn7JNjUo6GktcbRWYWrTx9FsjlAf?= =?us-ascii?Q?gQ09EIlgXp3rc1yY9qUyXiflQ4ibH73SS8qkG6Tr9VOGB6eb0As4M5DgMgYX?= =?us-ascii?Q?WuMse+Ih0hL8kVG3Usn5AikB65K+c2t82kOH63XNkC1XOiOu9rahTagYQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB1934;5:qdiUc3fH8Ev3n+EUg1O4SMKVAVOLsSynmaO+1dCZxsO/BJe8u0wqSJJmusjUtlf0YJtpEfmFk12QN72AmiM0kE8F3pGXBZU6TGNZvFa1SWIHRin5Zz2OSwCc3AQA+MdIXQ/gqJfxNDXjJvzokhGrN/4/qXxS3NAUabcayOAJkzI=;24:1yrCRzu6JF5U59QRbwJcLQLJHk38rz3d8+1uMDxrZiTwkg3zdIwI5eckfO1BQQ6/V7WsDbyDtpmwTqUhdIkib8V9wkCPaJtZNg/de/MA07M= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2016 09:38:22.6537 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR03MB1934 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org No function level change, just moving code place. clk_disable_unused function will need to call clk_core_prepare_enable/ clk_core_disable_unprepare when adding CLK_OPS_PARENT_ENABLE features. So move it after clk_core_disable_unprepare to avoid adding forward declared functions later. Cc: Michael Turquette Cc: Stephen Boyd Cc: Shawn Guo Signed-off-by: Dong Aisheng --- drivers/clk/clk.c | 196 +++++++++++++++++++++++++++--------------------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 55e62bac0fb4..e2e8f0c9f20a 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -172,104 +172,6 @@ static bool clk_core_is_enabled(struct clk_core *core) return core->ops->is_enabled(core->hw); } -static void clk_unprepare_unused_subtree(struct clk_core *core) -{ - struct clk_core *child; - - lockdep_assert_held(&prepare_lock); - - hlist_for_each_entry(child, &core->children, child_node) - clk_unprepare_unused_subtree(child); - - if (core->prepare_count) - return; - - if (core->flags & CLK_IGNORE_UNUSED) - return; - - if (clk_core_is_prepared(core)) { - trace_clk_unprepare(core); - if (core->ops->unprepare_unused) - core->ops->unprepare_unused(core->hw); - else if (core->ops->unprepare) - core->ops->unprepare(core->hw); - trace_clk_unprepare_complete(core); - } -} - -static void clk_disable_unused_subtree(struct clk_core *core) -{ - struct clk_core *child; - unsigned long flags; - - lockdep_assert_held(&prepare_lock); - - hlist_for_each_entry(child, &core->children, child_node) - clk_disable_unused_subtree(child); - - flags = clk_enable_lock(); - - if (core->enable_count) - goto unlock_out; - - if (core->flags & CLK_IGNORE_UNUSED) - goto unlock_out; - - /* - * some gate clocks have special needs during the disable-unused - * sequence. call .disable_unused if available, otherwise fall - * back to .disable - */ - if (clk_core_is_enabled(core)) { - trace_clk_disable(core); - if (core->ops->disable_unused) - core->ops->disable_unused(core->hw); - else if (core->ops->disable) - core->ops->disable(core->hw); - trace_clk_disable_complete(core); - } - -unlock_out: - clk_enable_unlock(flags); -} - -static bool clk_ignore_unused; -static int __init clk_ignore_unused_setup(char *__unused) -{ - clk_ignore_unused = true; - return 1; -} -__setup("clk_ignore_unused", clk_ignore_unused_setup); - -static int clk_disable_unused(void) -{ - struct clk_core *core; - - if (clk_ignore_unused) { - pr_warn("clk: Not disabling unused clocks\n"); - return 0; - } - - clk_prepare_lock(); - - hlist_for_each_entry(core, &clk_root_list, child_node) - clk_disable_unused_subtree(core); - - hlist_for_each_entry(core, &clk_orphan_list, child_node) - clk_disable_unused_subtree(core); - - hlist_for_each_entry(core, &clk_root_list, child_node) - clk_unprepare_unused_subtree(core); - - hlist_for_each_entry(core, &clk_orphan_list, child_node) - clk_unprepare_unused_subtree(core); - - clk_prepare_unlock(); - - return 0; -} -late_initcall_sync(clk_disable_unused); - /*** helper functions ***/ const char *__clk_get_name(const struct clk *clk) @@ -828,6 +730,104 @@ static void clk_core_disable_unprepare(struct clk_core *core) clk_core_unprepare_lock(core); } +static void clk_unprepare_unused_subtree(struct clk_core *core) +{ + struct clk_core *child; + + lockdep_assert_held(&prepare_lock); + + hlist_for_each_entry(child, &core->children, child_node) + clk_unprepare_unused_subtree(child); + + if (core->prepare_count) + return; + + if (core->flags & CLK_IGNORE_UNUSED) + return; + + if (clk_core_is_prepared(core)) { + trace_clk_unprepare(core); + if (core->ops->unprepare_unused) + core->ops->unprepare_unused(core->hw); + else if (core->ops->unprepare) + core->ops->unprepare(core->hw); + trace_clk_unprepare_complete(core); + } +} + +static void clk_disable_unused_subtree(struct clk_core *core) +{ + struct clk_core *child; + unsigned long flags; + + lockdep_assert_held(&prepare_lock); + + hlist_for_each_entry(child, &core->children, child_node) + clk_disable_unused_subtree(child); + + flags = clk_enable_lock(); + + if (core->enable_count) + goto unlock_out; + + if (core->flags & CLK_IGNORE_UNUSED) + goto unlock_out; + + /* + * some gate clocks have special needs during the disable-unused + * sequence. call .disable_unused if available, otherwise fall + * back to .disable + */ + if (clk_core_is_enabled(core)) { + trace_clk_disable(core); + if (core->ops->disable_unused) + core->ops->disable_unused(core->hw); + else if (core->ops->disable) + core->ops->disable(core->hw); + trace_clk_disable_complete(core); + } + +unlock_out: + clk_enable_unlock(flags); +} + +static bool clk_ignore_unused; +static int __init clk_ignore_unused_setup(char *__unused) +{ + clk_ignore_unused = true; + return 1; +} +__setup("clk_ignore_unused", clk_ignore_unused_setup); + +static int clk_disable_unused(void) +{ + struct clk_core *core; + + if (clk_ignore_unused) { + pr_warn("clk: Not disabling unused clocks\n"); + return 0; + } + + clk_prepare_lock(); + + hlist_for_each_entry(core, &clk_root_list, child_node) + clk_disable_unused_subtree(core); + + hlist_for_each_entry(core, &clk_orphan_list, child_node) + clk_disable_unused_subtree(core); + + hlist_for_each_entry(core, &clk_root_list, child_node) + clk_unprepare_unused_subtree(core); + + hlist_for_each_entry(core, &clk_orphan_list, child_node) + clk_unprepare_unused_subtree(core); + + clk_prepare_unlock(); + + return 0; +} +late_initcall_sync(clk_disable_unused); + static int clk_core_round_rate_nolock(struct clk_core *core, struct clk_rate_request *req) { -- 1.9.1