From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DBBB0CA0EEB for ; Tue, 12 Sep 2023 14:09:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZJEnlwkquN9DX7dEtjxKiVNWDM6txDX1jnRzlfPBgJc=; b=SA+fnDFeHuIvVZ UBLx/riYwVU/BL0OAu+xYbYmrBg/iECYYlFsRA7BbmKgH5Vr2U5NSdUeaNMBnLVYj0RlAFvZANtBQ T1HlVQJlgDWsfUdgsu+MEyb0vT5n8w6SVjoMqFRVAyyqmhk3GKXE/AhTNeSLEU00aVaaFpdZW6q2p NZEyD4OaEs/T3tfn+/PLFLbphIBrYSYfqWuP3IE9QoEWxDgcckUFkqc4JH6FYEZ+RW00uKqmSvpZq u8kfgws7sbEMnQSCq4YxD6AyqfAyMoRK22xqydVjateVLinnZuIxyVfIjxzssayTz3zB8+kQr0Vvm GNywUeUhFxOtx895qvFg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qg44e-003VH8-33; Tue, 12 Sep 2023 14:09:04 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qg44b-003VGG-1m for linux-arm-kernel@lists.infradead.org; Tue, 12 Sep 2023 14:09:03 +0000 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 38C5HBF8015086; Tue, 12 Sep 2023 14:08:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=AJEtOlWG3SOGORqqwQHYKtRlzQKBh6Ir+yq66oeVqlk=; b=XpYBM1qYEM4aPWt+8XrBGmQd7F4MgByx65ThFA7SZWHxwR1pTY+bQYCEbiQEdYgjmreG JI7z0iPRuRAV1mRVh7MOMgy3srqtixBNA/0Pbzl9bGtXeVSoKyz3+YDcdFSk30GCYCvd AIxF/gusk09KRU2s0BQSXdrRI4LI3J0QpazPFuRclCyThp2AmgMCyPqP9HDkBxytxa5I P8nRys1kCF+asoqw2fxZbsGx9DEV+DAGbK3Yd2A4WgYR154yYCB/IRok7CLFnnAzPlDM jrFVTOwy9RQ3p7dtpthgE8Lk7kIZUnCg/37foaQfFR69pU9PROXGzsSuqDkXlDOGB4Br 5A== Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3t29b0j81t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Sep 2023 14:08:31 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 38CE8Udt020212 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Sep 2023 14:08:30 GMT Received: from [10.216.43.40] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.36; Tue, 12 Sep 2023 07:08:22 -0700 Message-ID: <652b55cc-87dd-46d1-e480-e25f5f22b8d8@quicinc.com> Date: Tue, 12 Sep 2023 19:38:13 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 Subject: Re: [PATCH V2 5/7] clk: qcom: Add NSS clock Controller driver for IPQ9574 To: Dmitry Baryshkov CC: , , , , , , , , , , , , , , , , , , , , , , , References: <20230825091234.32713-1-quic_devipriy@quicinc.com> <20230825091234.32713-6-quic_devipriy@quicinc.com> Content-Language: en-US From: Devi Priya In-Reply-To: X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: P9dRJpXuTP0VCB60emYic4waAGfm0mV- X-Proofpoint-ORIG-GUID: P9dRJpXuTP0VCB60emYic4waAGfm0mV- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.957,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-09-12_12,2023-09-05_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 adultscore=0 impostorscore=0 priorityscore=1501 mlxscore=0 mlxlogscore=999 lowpriorityscore=0 bulkscore=0 spamscore=0 suspectscore=0 clxscore=1011 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2308100000 definitions=main-2309120117 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230912_070901_608575_08EB8DCB X-CRM114-Status: GOOD ( 33.51 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 8/25/2023 5:14 PM, Dmitry Baryshkov wrote: > On Fri, 25 Aug 2023 at 12:15, Devi Priya wrote: >> >> Add Networking Sub System Clock Controller(NSSCC) driver for ipq9574 based >> devices. >> >> Signed-off-by: Devi Priya >> --- >> Changes in V2: >> - Added depends on ARM64 || COMPILE_TEST in Kconfig >> - Added module_platform_driver >> - Dropped patch [2/6] - clk: qcom: gcc-ipq9574: Mark nssnoc clocks as critical >> & added pm_clk for nssnoc clocks >> - Updated the uniphy clock names >> >> drivers/clk/qcom/Kconfig | 7 + >> drivers/clk/qcom/Makefile | 1 + >> drivers/clk/qcom/nsscc-ipq9574.c | 3109 ++++++++++++++++++++++++++++++ >> 3 files changed, 3117 insertions(+) >> create mode 100644 drivers/clk/qcom/nsscc-ipq9574.c >> >> diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig >> index bd9bfb11b328..3ecc11e2c8e3 100644 >> --- a/drivers/clk/qcom/Kconfig >> +++ b/drivers/clk/qcom/Kconfig >> @@ -203,6 +203,13 @@ config IPQ_GCC_9574 >> i2c, USB, SD/eMMC, etc. Select this for the root clock >> of ipq9574. >> >> +config IPQ_NSSCC_9574 >> + tristate "IPQ9574 NSS Clock Controller" >> + depends on ARM64 || COMPILE_TEST >> + depends on IPQ_GCC_9574 >> + help >> + Support for NSS clock controller on ipq9574 devices. >> + >> config MSM_GCC_8660 >> tristate "MSM8660 Global Clock Controller" >> depends on ARM || COMPILE_TEST >> diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile >> index 4790c8cca426..3f084928962e 100644 >> --- a/drivers/clk/qcom/Makefile >> +++ b/drivers/clk/qcom/Makefile >> @@ -30,6 +30,7 @@ obj-$(CONFIG_IPQ_GCC_6018) += gcc-ipq6018.o >> obj-$(CONFIG_IPQ_GCC_806X) += gcc-ipq806x.o >> obj-$(CONFIG_IPQ_GCC_8074) += gcc-ipq8074.o >> obj-$(CONFIG_IPQ_GCC_9574) += gcc-ipq9574.o >> +obj-$(CONFIG_IPQ_NSSCC_9574) += nsscc-ipq9574.o >> obj-$(CONFIG_IPQ_LCC_806X) += lcc-ipq806x.o >> obj-$(CONFIG_MDM_GCC_9607) += gcc-mdm9607.o >> obj-$(CONFIG_MDM_GCC_9615) += gcc-mdm9615.o >> diff --git a/drivers/clk/qcom/nsscc-ipq9574.c b/drivers/clk/qcom/nsscc-ipq9574.c >> new file mode 100644 >> index 000000000000..65bdb449ae5f >> --- /dev/null >> +++ b/drivers/clk/qcom/nsscc-ipq9574.c >> @@ -0,0 +1,3109 @@ >> +// SPDX-License-Identifier: GPL-2.0-only >> +/* >> + * Copyright (c) 2021, The Linux Foundation. All rights reserved. >> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include >> +#include >> + >> +#include "clk-alpha-pll.h" >> +#include "clk-branch.h" >> +#include "clk-pll.h" >> +#include "clk-rcg.h" >> +#include "clk-regmap.h" >> +#include "clk-regmap-divider.h" >> +#include "clk-regmap-mux.h" >> +#include "common.h" >> +#include "reset.h" >> + >> +/* Need to match the order of clocks in DT binding */ >> +enum { >> + DT_NSSNOC_NSSCC_CLK, >> + DT_NSSNOC_SNOC_CLK, >> + DT_NSSNOC_SNOC_1_CLK, > > Not using the index makes it seem that these clocks are not used, > until one scrolls down to pm_clks. Okay, got it > > BTW: The NSSNOC_SNOC clocks make it look like there is an interconnect > here (not a simple NIU). Hi Dmitry, We are exploring on the ICC driver. In the meantime to unblock PCIe/NSS changes getting merged, shall we use regmap_update_bits and turn on the critical NSSNOC clocks, ANOC & SNOC pcie clocks in the probe function of the gcc driver itself as like sm8550 driver to get the changes merged? https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/clk/qcom/gcc-sm8550.c#n3347 > >> + DT_BIAS_PLL_CC_CLK, >> + DT_BIAS_PLL_NSS_NOC_CLK, >> + DT_BIAS_PLL_UBI_NC_CLK, >> + DT_GCC_GPLL0_OUT_AUX, >> + DT_UNIPHY0_NSS_RX_CLK, >> + DT_UNIPHY0_NSS_TX_CLK, >> + DT_UNIPHY1_NSS_RX_CLK, >> + DT_UNIPHY1_NSS_TX_CLK, >> + DT_UNIPHY2_NSS_RX_CLK, >> + DT_UNIPHY2_NSS_TX_CLK, >> + DT_XO, > > As I wrote, please move DT_XO closer to the beginning of the list. > >> +}; >> + >> +enum { >> + P_BIAS_PLL_CC_CLK, >> + P_BIAS_PLL_NSS_NOC_CLK, >> + P_BIAS_PLL_UBI_NC_CLK, >> + P_GCC_GPLL0_OUT_AUX, >> + P_UBI32_PLL_OUT_MAIN, >> + P_UNIPHY0_NSS_RX_CLK, >> + P_UNIPHY0_NSS_TX_CLK, >> + P_UNIPHY1_NSS_RX_CLK, >> + P_UNIPHY1_NSS_TX_CLK, >> + P_UNIPHY2_NSS_RX_CLK, >> + P_UNIPHY2_NSS_TX_CLK, >> + P_XO, >> +}; >> + >> +static const struct alpha_pll_config ubi32_pll_config = { >> + .l = 0x3e, >> + .alpha = 0x6666, >> + .config_ctl_val = 0x200d4aa8, >> + .config_ctl_hi_val = 0x3c, >> + .main_output_mask = BIT(0), >> + .aux_output_mask = BIT(1), >> + .pre_div_val = 0x0, >> + .pre_div_mask = BIT(12), >> + .post_div_val = 0x0, >> + .post_div_mask = GENMASK(9, 8), >> + .alpha_en_mask = BIT(24), >> + .test_ctl_val = 0x1c0000c0, >> + .test_ctl_hi_val = 0x4000, >> +}; >> + >> +static struct clk_alpha_pll ubi32_pll_main = { >> + .offset = 0x28000, >> + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_NSS_HUAYRA], >> + .flags = SUPPORTS_DYNAMIC_UPDATE, >> + .clkr = { >> + .hw.init = &(const struct clk_init_data) { >> + .name = "ubi32_pll_main", >> + .parent_data = &(const struct clk_parent_data) { >> + .index = DT_XO, >> + }, >> + .num_parents = 1, >> + .ops = &clk_alpha_pll_huayra_ops, >> + }, >> + }, >> +}; >> + >> +static struct clk_alpha_pll_postdiv ubi32_pll = { >> + .offset = 0x28000, >> + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_NSS_HUAYRA], >> + .width = 2, >> + .clkr.hw.init = &(const struct clk_init_data) { >> + .name = "ubi32_pll", >> + .parent_hws = (const struct clk_hw *[]) { >> + &ubi32_pll_main.clkr.hw >> + }, >> + .num_parents = 1, >> + .ops = &clk_alpha_pll_postdiv_ro_ops, >> + .flags = CLK_SET_RATE_PARENT, >> + }, >> +}; >> + > > [skipped clock tables, LGTM] > >> +static const struct of_device_id nss_cc_ipq9574_match_table[] = { >> + { .compatible = "qcom,ipq9574-nsscc" }, >> + { } >> +}; >> +MODULE_DEVICE_TABLE(of, nss_cc_ipq9574_match_table); >> + >> +static int nss_cc_ipq9574_probe(struct platform_device *pdev) >> +{ >> + struct regmap *regmap; >> + struct qcom_cc_desc nsscc_ipq9574_desc = nss_cc_ipq9574_desc; >> + >> + int ret; >> + >> + ret = devm_pm_runtime_enable(&pdev->dev); >> + if (ret < 0) >> + return ret; >> + >> + ret = devm_pm_clk_create(&pdev->dev); >> + if (ret < 0) >> + return ret; >> + >> + ret = of_pm_clk_add_clk(&pdev->dev, "nssnoc_nsscc"); > > As we are switching to DT indices, better add new API that takes index > rather than mixing indices and names. sure okay Thanks, Devi Priya > >> + if (ret < 0) { >> + dev_err(&pdev->dev, "Failed to acquire nssnoc_nsscc clock\n"); >> + return ret; >> + } >> + >> + ret = of_pm_clk_add_clk(&pdev->dev, "nssnoc_snoc"); >> + if (ret < 0) { >> + dev_err(&pdev->dev, "Failed to acquire nssnoc_snoc clock\n"); >> + return ret; >> + } >> + >> + ret = of_pm_clk_add_clk(&pdev->dev, "nssnoc_snoc_1"); >> + if (ret < 0) { >> + dev_err(&pdev->dev, "Failed to acquire nssnoc_snoc_1 clock\n"); >> + return ret; >> + } >> + >> + ret = pm_runtime_get(&pdev->dev); >> + if (ret) >> + return ret; >> + >> + regmap = qcom_cc_map(pdev, &nsscc_ipq9574_desc); >> + if (IS_ERR(regmap)) >> + return PTR_ERR(regmap); >> + >> + clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config); >> + >> + return qcom_cc_really_probe(pdev, &nsscc_ipq9574_desc, regmap); >> +} >> + >> +static const struct dev_pm_ops nss_cc_pm_ops = { >> + SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL) >> +}; >> + >> +static struct platform_driver nss_cc_ipq9574_driver = { >> + .probe = nss_cc_ipq9574_probe, >> + .driver = { >> + .name = "qcom,nsscc-ipq9574", >> + .of_match_table = nss_cc_ipq9574_match_table, >> + .pm = &nss_cc_pm_ops, >> + }, >> +}; >> + >> +module_platform_driver(nss_cc_ipq9574_driver); >> + >> +MODULE_DESCRIPTION("QTI NSS_CC IPQ9574 Driver"); >> +MODULE_LICENSE("GPL"); >> -- >> 2.34.1 >> > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel