From patchwork Fri Apr 27 18:56:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dong Aisheng X-Patchwork-Id: 10369657 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 A5CC7602DC for ; Fri, 27 Apr 2018 18:57:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 950A229144 for ; Fri, 27 Apr 2018 18:57:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 89EC829257; Fri, 27 Apr 2018 18:57:51 +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=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, 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 BB96129144 for ; Fri, 27 Apr 2018 18:57:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758700AbeD0S5t (ORCPT ); Fri, 27 Apr 2018 14:57:49 -0400 Received: from mail-db5eur01on0072.outbound.protection.outlook.com ([104.47.2.72]:46442 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758461AbeD0S5q (ORCPT ); Fri, 27 Apr 2018 14:57:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=lDO0us4xHK1SgoWc+XKUsAJXwPm+2d/GCaGKGsvBu/g=; b=p4JAdv/S6V/ocXWS0OYcgklI7pK85smrXhwhpZCMCcQ9RNLplr4h2GfJNW46AepSCjrBZMqezwrVBXJwamdfnW9CEecv5tPje6pubGM+jfcGBfX2vvSaEVwMVaK3ivi3mYRp9+/YVycWRRV+e5yHJp93is1LMieN0ZqOitBZKWA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aisheng.dong@nxp.com; Received: from b29396-OptiPlex-7040.ap.freescale.net (119.31.174.66) by AM6PR04MB4213.eurprd04.prod.outlook.com (2603:10a6:209:4f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.715.18; Fri, 27 Apr 2018 18:57:40 +0000 From: Dong Aisheng To: linux-clk@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, sboyd@kernel.org, mturquette@baylibre.com, shawnguo@kernel.org, fabio.estevam@nxp.com, linux-imx@nxp.com, kernel@pengutronix.de, Dong Aisheng Subject: [PATCH 08/12] clk: imx: scu: add scu clock gpr mux Date: Sat, 28 Apr 2018 02:56:39 +0800 Message-Id: <1524855403-15301-9-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1524855403-15301-1-git-send-email-aisheng.dong@nxp.com> References: <1524855403-15301-1-git-send-email-aisheng.dong@nxp.com> MIME-Version: 1.0 X-Originating-IP: [119.31.174.66] X-ClientProxiedBy: TYAPR01CA0025.jpnprd01.prod.outlook.com (2603:1096:404:28::13) To AM6PR04MB4213.eurprd04.prod.outlook.com (2603:10a6:209:4f::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:AM6PR04MB4213; X-Microsoft-Exchange-Diagnostics: 1; AM6PR04MB4213; 3:sZ5eHpGUdjTZ5wSB4SNIJkX6VDjyM/F7d8ZGDkoqG2ehg+wpZrg8PA5af26KEH4VdppWVIxcW9bfMEZ/oxNCnuP8EvQAucctgC9I4xmFz1JCyNq/xjOMViYCmJT+LCGu5/HIEHR4epWS60fzIOBHsiCBRtrFt2V4YaF6sc/lknaVkxD6haoOuKKXjyjswl1K03Laeu5uI/skHgOyQyCELKsiGvy3lyCJVHcn5jeD8v2kyfZPJp1KZNoSl/jWxu3w; 25:CP0Yvlc+IiyEi1MiSfj4rlmOlB947qVqSuoiIs8HcWehlAJJTghI2ors5O23wX9Jj4OKH0G8fu2BP/t0J6Fj1kOWSLCLxyL2oYTzOXoOyVZ8XrDeVUrEF3Y9jjHrySCQrvP2MmSuR93f0iqU3yIWH/1RrBI8d5KkekIL80T4YcR7LU99PmVCr3HCwC/RlKULBBoWt25sM3ANUbgRYHVCdQAOUm0NNVzeWwToS3EgKS5RUL+5YvZ94r5wtmvwjlsUFegyhvkbfqy+H8902I4tGuYVlnUN9OI7dHYC0pjJ7cNszydSW60PnotsymbOHd09+ByeLPk23LnVbvA3af2fYQ==; 31:/G14P+7PxOq7/4l1DnQfQGkF5u6U0AiVqExJaVeqjDRVYsltwWRGTK/pqmEZ9AzieSpmP14mybEMkweu64GV3lXIsNisdliNv5cNqt4CQwq7Wvk59EpzbkGB3MFlP1EtHf/8EjlGKDkhzNWAQ3xJDshK0qEWa6OLXjy8iLtfqt4B2G0X41guumqMk67IjiwaldZD04wRdVccowDF3M5mtLgzIF8k1XVc+E8bbvZS0lA= X-MS-TrafficTypeDiagnostic: AM6PR04MB4213: X-Microsoft-Exchange-Diagnostics: 1; AM6PR04MB4213; 20:odVh/5O4QaXfD+gzUzqyxc+CL4SN9YJ+7XTS6rWNS1lEx1CaU2OE5zLeBXxedPy/d/I4PijEj2yf4F0uOTj4uOMeyaDl+R4L3eeAr7dP5oKSomt9yY46qsUrb7ONCO2ihgTRJiG+p33fRr3WrFlBFz9ZplUo1cWTSmI1gt/dLmKPDmAe0E07k9VObnam2JdWDJnqdCrXeQ1PNYkf2ZtlY8BV8uLTp14ZUAdPd+t3XV+vEyufjDaVjkHPk9fjkfsxDL1jLETBsD2qTsYU8NNpVxUx+hLuipqhaimiId8k6ak8L9KVUJ+oBnLm4xU6Cm+Tr52CSYGeTwVlJfbuQHKGSuFUcibdqu5ugaEXfirIV+VAY+2DPi/jxxFKoN4AFh/0F5WQiSDaLdiu5RsaC34+nMapOgDkBDlr60KBuxK3v7D62JKUkP4qrTGcU5dtU9pw9z6mzTDsm49b+/xwq9e6HJNjKGa4kQceXMUL0HFA2jEZbX9qigGS9K4Hjqka/uOH; 4:QOvws6aT3OmOIfEyE47XyTi9E7dKupeSSz4b8uD7/GQs7qG4Wcum2nux141I3BU/RXmoQIdVhcmsJooUgHTdx6CybORUsDeiQBijfQWh8vzntSdBINAeLqxvmIDkeC2cBr3U2nk9yuosWfG5gWdWlYHuQbhRiVn08mbQrhJ41d4RWVS5Y4FiLASTWciGft6CU9DI5yt6MxqMipD4UJWINISFTfUqtPfp72Vm2svON8BbPzuqtY5RQBWkQUc0bxtp1U11+GFMN2HSJ5lR1vh5j6VF8wV9QkJ5+OBYyZn8klmEtTXVWuF9nZ3b5XV1Fi6p X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231232)(944501410)(52105095)(6055026)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:AM6PR04MB4213; BCL:0; PCL:0; RULEID:; SRVR:AM6PR04MB4213; X-Forefront-PRVS: 0655F9F006 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(39380400002)(366004)(396003)(346002)(376002)(199004)(189003)(76176011)(97736004)(26005)(305945005)(48376002)(47776003)(16526019)(186003)(6116002)(50226002)(7736002)(16586007)(106356001)(36756003)(50466002)(2906002)(51416003)(66066001)(3846002)(52116002)(316002)(6506007)(105586002)(386003)(25786009)(8936002)(4326008)(5660300001)(81156014)(81166006)(486006)(8676002)(6916009)(11346002)(446003)(476003)(2351001)(956004)(86362001)(2616005)(2361001)(68736007)(6486002)(6512007)(59450400001)(478600001)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR04MB4213; H:b29396-OptiPlex-7040.ap.freescale.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM6PR04MB4213; 23:RjCUfoXVZ09kJEULiVgh14nYx5nDgbxYW4N991q/j?= =?us-ascii?Q?9HhvsOvcc0l5ElMTfAKW9eW0gF2zpF1D50KgBjKcN3J4VeCY6KLXFBnWRP0Z?= =?us-ascii?Q?PRWn26oSoKbtA1CSsL9BxRnw2WlH8SUDwypE9cVwkPHaXz6U8VsNla/WMzzB?= =?us-ascii?Q?Bq8wqgwK4Sl0ccom+WN7kRVmubZYKWZtPQ3GToGTG4M8D3q70DapjX6qGvYg?= =?us-ascii?Q?/6jpMCElRme6UipgdWWhX/LL1DtlL3FQkLZs0kX1QSLNNRWj0jRem+J7Moxc?= =?us-ascii?Q?+augvUUF/5wRAsU41ZHxJsOJkirxwDrIpba/Y4dRt57mxB4RrarOaEOJfPtO?= =?us-ascii?Q?H/Savz25O5VhtNaBp+f7Rf0MTRXv7esF+S/updYUeo9/VD3HCnfE8WYufr/4?= =?us-ascii?Q?xX7H/hK7nMTRnPe+M+BKRhvnb1K3yW7RrJ9cPgoEUNV7jHZw6NdMrU8j/d9q?= =?us-ascii?Q?F/ErGj/7+aHV1+mE4j4mzfpukja8oNAAvE+ITEezDypd/8XYLrPgaePO31cb?= =?us-ascii?Q?UkRqOMQmxfRxvqvD7gBsmVTDQeC9CAVPbdkXWDWSqR1NeaTATqalwJi7XjRq?= =?us-ascii?Q?v8HvyGae9sKt7zx+Zxcf7QIrgZTYIatCI4z+X0ee6vBR3KxBuAXLqt/CRlYW?= =?us-ascii?Q?6W/60cjS2qvvpBhhch5NcVGYGUbLdcNdi54rnLIKAQYEFm3VE8/x6AYdeWlT?= =?us-ascii?Q?s/NV+SkmwfvGzIGFA/xZzgpC+PdTZaZrjog30vB8RC8NQ2bgonAFDk8v8GDc?= =?us-ascii?Q?pPSO43gT351Ffq6gZwdoy8GQnQO47MAHC6Jh8M7swkgzA/loPucg1fMwEqn9?= =?us-ascii?Q?AliIHqLpMFzf63HY0LxLDBd9cphD1MVlQMIO/r39JfsVOIhaxnsdmPdtGrq+?= =?us-ascii?Q?v4QjQdcUzdLKwjB82YZbyE0VfJ3QB2keND24HQMZ7haaElwOKB6hJXiPosqm?= =?us-ascii?Q?9pOvI2hz1W6X4KfOKDdSDnT7cyv6mNnsNqypXhfY+FbgckYmYBQiXUd5RrfX?= =?us-ascii?Q?VR6xN7TnA1HwmAtcNeRSrh+2xRH1M85QPJZCNAkUU3ajLVphyTH/+0h5Cg6/?= =?us-ascii?Q?+uSjFhELrmMtz8qz8jEr2rBmHxIj78qHMB03VI+qJZl0WLJP47uRvKrNSwx4?= =?us-ascii?Q?c8JYa57VlEKZ72ovMSjKabB/LAy0JDpPsrXYupB7VixaUtX7jl1cLQPYcgFk?= =?us-ascii?Q?h+iVACQz0IglNHEchzbhrETlJgPnF52TSvxWRDwMK5FU6pAkjgYMVDu5A=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Antispam-Message-Info: q7h8Hl10mNESNbIsLtHZTXi8TyvQAtaYyqakdGPUQ71TJHbiJWnrcR0sIia9DKHmvQ87vHus3pqgLmzT8NhvqsqeYZ2+hQwsj86UFaKZsncQ2yRxPRTwoKXrvmPovigIAsDuSs0vTHF9IqE7+NRMZG+FKksM7StyYpJ1/+t7eEVVQLsV/ZQPdKuZpkHTrBwL X-Microsoft-Exchange-Diagnostics: 1; AM6PR04MB4213; 6:074F0jwXunpPhXNFQhV4Khk/YllfgIBGDxzJJlM9VkVUU56Qj3hFk8trP2qFQWU68VcrMjAx1U7KtlCGCwrR4Yw3sHasA9E/2D5LOx6vS9uVT8EoOB8BjjYzKGdUfGlMuqlv/ZOhN2BaOrbqY7NyHafcTV5Xs92J4NgxBYWSkdIWAQIyXJk85/E+4mxJGVxI7adnUqvMcKZFvAoh1yUUBs18LTb6rFndlYZ6M3UGJdJHa9h6SIj6kqK+XYNNkOKI3bSF/F2ufY9nYiIuvieV4St8QnLKBOcgdNtdttlLSBl5ITxFjWGJL7c7TTAVFMlV07xxzfFtDFh3cv2NG2uQ9Ci0H8ixw6HQtyuwzmubq1oc82/DIG1kl/0OOUu8UHNUIUMm/tyKrpYNY3+N98jqzZEmSyf1ND2IUVm0XAfLxPKxLHYmKE5lBouSCH3nzgP/8hhY/wmL+p5eaFnzoUDt5g==; 5:VNuRmfKUnzIxvDH+riMLa4OUJtdrGzsWTkHDHqobkWvE8PmJSVfrtEZj1zNbr3Jd8t5XEAsPXPagats7AorFi2bSTRlhasDSnJImaOsfHsPTAKQ9ShCrcsgZ2Me2GqHU9NMShfWw9EiS3s4qxgYFvCdAnFzc4LSvNz+qP2jG0Qk=; 24:NvJccFM1zk9K/s12oIbdJZMOMO0MTiwzWAVCbiW6gnlkLzVTSY/Sjc1QFpV3smvtfARA8H+zZpexSboUPjS73tMdlIaCZmqbRhyrJvfCjuw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM6PR04MB4213; 7:IhKM6Af8z/tTHEsBm6vD41XjZSh8hbYxNHwS2YhsaQgc77mB48xBiBi2q8XZEw62HJJQXd64qG/gj9WuYtFnXVi+KoJDvxGnAgOSR8OQZbYpuhJnVlHxY64CmWxFa2K2PXNOj3hUbo+NZTlrqmse3d5ZbUdVpEQQHb1KyONiAT3+XL2HDtdOVlEm8yGdYq5B0F0bXG2kdLTlK5NgGrzIP8QeS7zl5p5e87VXaWze+fHExTI0VicJgTKh0oCbG0mv X-MS-Office365-Filtering-Correlation-Id: a28758e6-759b-4074-762a-08d5ac70c27b X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2018 18:57:40.6978 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a28758e6-759b-4074-762a-08d5ac70c27b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4213 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 Add scu based clock gpr mux. Unlike the normal scu mux, such muxes are controlled by GPR bits through SCU sc_misc_set_control API. Cc: Shawn Guo Cc: Sascha Hauer Cc: Fabio Estevam Cc: Stephen Boyd Cc: Michael Turquette Signed-off-by: Dong Aisheng --- drivers/clk/imx/scu/Makefile | 3 +- drivers/clk/imx/scu/clk-mux-gpr-scu.c | 90 +++++++++++++++++++++++++++++++++++ drivers/clk/imx/scu/clk-scu.h | 11 +++++ 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 drivers/clk/imx/scu/clk-mux-gpr-scu.c diff --git a/drivers/clk/imx/scu/Makefile b/drivers/clk/imx/scu/Makefile index aee56bf..a76ed78 100644 --- a/drivers/clk/imx/scu/Makefile +++ b/drivers/clk/imx/scu/Makefile @@ -6,4 +6,5 @@ obj-$(CONFIG_MXC_CLK_SCU) += \ clk-divider-gpr-scu.o \ clk-gate-scu.o \ clk-gate-gpr-scu.o \ - clk-mux-scu.o + clk-mux-scu.o \ + clk-mux-gpr-scu.o diff --git a/drivers/clk/imx/scu/clk-mux-gpr-scu.c b/drivers/clk/imx/scu/clk-mux-gpr-scu.c new file mode 100644 index 0000000..4d666eb --- /dev/null +++ b/drivers/clk/imx/scu/clk-mux-gpr-scu.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017~2018 NXP + * Dong Aisheng + */ + +#include +#include +#include +#include +#include + +#include "clk-scu.h" + +struct clk_mux_gpr_scu { + struct clk_hw hw; + sc_rsrc_t rsrc_id; + sc_ctrl_t gpr_id; +}; + +#define to_clk_mux_gpr_scu(_hw) container_of(_hw, struct clk_mux_gpr_scu, hw) + +static u8 clk_mux_gpr_scu_get_parent(struct clk_hw *hw) +{ + struct clk_mux_gpr_scu *gpr_mux = to_clk_mux_gpr_scu(hw); + sc_err_t ret; + u32 val = 0; + + ret = sc_misc_get_control(ccm_ipc_handle, gpr_mux->rsrc_id, + gpr_mux->gpr_id, &val); + if (ret != SC_ERR_NONE) { + pr_warn("%s: failed to get clock parent %d\n", + clk_hw_get_name(hw), ret); + return 0; + } + + return (u8)val; +} + +static int clk_mux_gpr_scu_set_parent(struct clk_hw *hw, u8 index) +{ + struct clk_mux_gpr_scu *gpr_mux = to_clk_mux_gpr_scu(hw); + sc_err_t ret; + + ret = sc_misc_set_control(ccm_ipc_handle, gpr_mux->rsrc_id, + gpr_mux->gpr_id, index); + if (ret != SC_ERR_NONE) + return -EINVAL; + + return 0; +} + +static const struct clk_ops clk_mux_gpr_scu_ops = { + .get_parent = clk_mux_gpr_scu_get_parent, + .set_parent = clk_mux_gpr_scu_set_parent, +}; + +struct clk_hw *clk_register_mux_gpr_scu(const char *name, const char * const *parents, + int num_parents, unsigned long flags, + sc_rsrc_t rsrc_id, sc_ctrl_t gpr_id) +{ + struct clk_mux_gpr_scu *mux; + struct clk_init_data init; + struct clk_hw *hw; + int ret; + + mux = kzalloc(sizeof(*mux), GFP_KERNEL); + if (!mux) + return ERR_PTR(-ENOMEM); + + init.name = name; + init.ops = &clk_mux_gpr_scu_ops; + init.parent_names = parents; + init.num_parents = num_parents; + init.flags = flags; + + mux->hw.init = &init; + mux->rsrc_id = rsrc_id; + mux->gpr_id = gpr_id; + + hw = &mux->hw; + ret = clk_hw_register(NULL, hw); + if (ret) { + kfree(mux); + hw = ERR_PTR(ret); + } + + return hw; +} diff --git a/drivers/clk/imx/scu/clk-scu.h b/drivers/clk/imx/scu/clk-scu.h index 672a26c..918056e 100644 --- a/drivers/clk/imx/scu/clk-scu.h +++ b/drivers/clk/imx/scu/clk-scu.h @@ -81,4 +81,15 @@ static inline struct clk_hw *imx_clk_mux_scu(const char *name, clk_type); } +struct clk_hw *clk_register_mux_gpr_scu(const char *name, const char * const *parents, + int num_parents, unsigned long flags, + sc_rsrc_t rsrc_id, sc_ctrl_t gpr_id); + +static inline struct clk_hw *imx_clk_mux_gpr_scu(const char *name, const char * const *parents, + int num_parents, sc_rsrc_t rsrc_id, sc_ctrl_t gpr_id) +{ + return clk_register_mux_gpr_scu(name, parents, num_parents, + CLK_SET_RATE_NO_REPARENT, rsrc_id, gpr_id); +} + #endif