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 X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20816C43603 for ; Fri, 13 Dec 2019 01:24:41 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id E2271206B7 for ; Fri, 13 Dec 2019 01:24:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="HYMNQWOF"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="fdTr9uen" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E2271206B7 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To:MIME-Version: Date:Message-ID:From:To:Subject:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=UtvHnAXTxIk+GCdZ8ivB6TT4JmBWfaTnGpa90Ct0WHc=; b=HYMNQWOFLPsFtm k4eHIzIHR2Zy4wx7LggyCM/tSFnRvvfGsDbvHWVtxb3/Aaj80koT4J/oHDf/I7hnrFljtJPIKTSze DViVjVQ/MZRjIgQJqGMaEdlLWWQg/JAZgInPLARWG6WFMAC/z6dpKY4PSrx+Xdks3bBLR6BNgA0bA dsNznkRTXcHuif5Hdp0ybwsvsxckTBifmLHPOHtsMgJ87pJalVApwrqjvbXUrIvwnprYKQ4Vegipw GZSf45xXyXe5OOzpISlfyw0X0AtcoHe9mdzVIBFt9qlqjMQNf57D6aHQ6DZott+3KKKlLeQVqBEk3 fcNUpIIj2JosLlRjYCzg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ifZgx-0001Zs-7f; Fri, 13 Dec 2019 01:24:27 +0000 Received: from mailout3.samsung.com ([203.254.224.33]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ifZgt-0001Yi-BM for linux-arm-kernel@lists.infradead.org; Fri, 13 Dec 2019 01:24:25 +0000 Received: from epcas1p2.samsung.com (unknown [182.195.41.46]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20191213012420epoutp03816449037d3d2160c8d0209152d84b45~fyckWIf1E2850528505epoutp03g for ; Fri, 13 Dec 2019 01:24:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20191213012420epoutp03816449037d3d2160c8d0209152d84b45~fyckWIf1E2850528505epoutp03g DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1576200260; bh=5CvMUFlOh3CH/oawCLl54ZNz9H/LkRQEF/C9QHv+8XA=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=fdTr9uenEBkcjlIwGcU/ZD9DcLdGUog97/+0S0EbC5qN2hmVStMZVJpYE4NMeaVHJ PijyKADQFYlEg6oaxZCd1SQWoK687cXRU2DLaK14R7rHli9A6csC1DdcisCBFvRgo3 x6zJmKcn5A/XW/iONOb3hsKz2kVDvL4meKhSc9kM= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas1p4.samsung.com (KnoxPortal) with ESMTP id 20191213012419epcas1p4717e3fe7e5d59b28b9a7455ba67299d0~fycjkwQ762781827818epcas1p4F; Fri, 13 Dec 2019 01:24:19 +0000 (GMT) Received: from epsmges1p2.samsung.com (unknown [182.195.40.154]) by epsnrtp1.localdomain (Postfix) with ESMTP id 47YtHP0fvfzMqYm4; Fri, 13 Dec 2019 01:24:17 +0000 (GMT) Received: from epcas1p1.samsung.com ( [182.195.41.45]) by epsmges1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 5D.78.48498.048E2FD5; Fri, 13 Dec 2019 10:24:17 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas1p4.samsung.com (KnoxPortal) with ESMTPA id 20191213012416epcas1p4d1d2af13ce4822a7439b08801aef55d2~fycg-kx5J2813928139epcas1p40; Fri, 13 Dec 2019 01:24:16 +0000 (GMT) Received: from epsmgms1p2new.samsung.com (unknown [182.195.42.42]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191213012416epsmtrp135ba3a6b0e6f05d53d2d4b737758d27f~fycg_VY1G1299812998epsmtrp1d; Fri, 13 Dec 2019 01:24:16 +0000 (GMT) X-AuditID: b6c32a36-a3dff7000001bd72-eb-5df2e8403b8e Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p2new.samsung.com (Symantec Messaging Gateway) with SMTP id FB.9E.06569.048E2FD5; Fri, 13 Dec 2019 10:24:16 +0900 (KST) Received: from [10.113.221.102] (unknown [10.113.221.102]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191213012416epsmtip2538381df632dd67dae345724f33c2a1c~fycglJM5o1814718147epsmtip2P; Fri, 13 Dec 2019 01:24:16 +0000 (GMT) Subject: Re: [PATCH RFC v6 2/9] PM / devfreq: Add generic imx bus scaling driver To: Leonard Crestez , Georgi Djakov , Rob Herring From: Chanwoo Choi Organization: Samsung Electronics Message-ID: <8734a934-79e2-7445-c3e5-a0bb59afd4a8@samsung.com> Date: Fri, 13 Dec 2019 10:30:45 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Thunderbird/59.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA01Tf0xbVRjd7WvfeyCdbx3ItQkKz6gZhq2PX14UhovbfFESiUuM0yC+0BdA +it9hcjQjJGxsU4djSEbnRUmY4MOHS1lwBwyfrnAMmqnVBgjiKDBxQECdYiB2fbVyH/nO9/5 7nfPubkkpugilGShzsQbdZyGxsOlV/p3JCTsmVvKUVVYMNT3XTuBfDeHAbpwexCglZqrGJqZ mgCoozYP1Q2MyJCjbUKKTnc7cWSv6ZIit7uVQLcq/iBQ0+SfMuSc8cqQea0ZQ8ufDADU+JNH grxNFhlabp0ByDO8D00cacLRpZFeHNlWajBU2T1AIHPfOo42vA4pmnNFo8YGL4YcPvalGLbG 3ATYli9aALswVkmwZ8s9UrbeWcw67Sdw9q73Gs62nT/MOuY7JWzv/DUJe2pdxa71R7GfuuyA XXY+kb317aL0Ap5T88ZYXpenVxfq8jPo1w7kvpybkqpiEpg09Dwdq+O0fAa9Nys7YX+hxp8M HVvCaYr9VDYnCPSu3elGfbGJjy3QC6YMmjeoNYY0w06B0wrFuvydeXrtC4xKlZjiF75XVOAe /pEw3Mv44Lf7VlAOzIlmQJKQSoZfr+nNIJxUUJ0A/nrkPBCLJQBXL/pwsfgLwNrpFswMwoIT 1c7BUKMbQMvwV6FiAcCTo8eJgGo79QY8d7lZGsCRVBmsvlUhCYgwapyA1we/BYEGTsXDnrkx PIAfpeLg6OpMkJdTu+GUfVwWwFLqadjmnggeGkW9CYeuHA1ptsGh2tnggjDqXVje7gvyGBUN 78zWSUT8JOy4/zkWWAyp6yR8cGkSFz3shWce1hEi3g7v3XCFsBL+fupYCJfB5qEBXByuAtDV 871MbCTBnsbPJIH4MGoHvHx1l0jHwa5/bKFLbIXzvo9lYsJyWHVMIUqegj/8PCkR8eOw4fgJ vBrQ1k12rJssWDdZsP6/rB5I7eAx3iBo83mBMSRufm4nCH6b+NRO8OVIVh+gSEBHyLeol3IU Mq5EKNX2AUhidKQ880M/JVdzpYd4oz7XWKzhhT6Q4k/bgimj8vT+T6gz5TIpiUlJSSiZSU1h GDpaTq56chRUPmfii3jewBv/m5OQYcpykLn4TNWi8mJrFFliy3z/lZjXXz06HXEw4lDlR2ct TEzWwfCSB4fD2je6vR1l8/ve+cby0JeVTjzifis5H7s7O7q/lFxgbCsHnutvDjfrp+48O16v 20Ktp+m95sjGsJOuM429kTX1tuTpbXumxjJveATHOd/N0sW/cxoibv/y4saFzDhaKhRwTDxm FLh/AcXfFxZMBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA02Sa0hTYRiA+XbOzjmOVqdN8bOo1aKMwbxEPz7ITIjgFBFRFBWYHvKg0W7s ZGUtWoWBo5vRrFa5LipzGc6ZqaWYm8tL5VBsWsuEJmalCzUrht22Eezfw/c+z/v++ShMUiFc RB3UHOb0GlYlJ0T4Y7dcpswan85Os05B5HreQKLZFz0AVfV7APpmfoKhwIgfoMYbB5C1o1eI 6ur9OLrW6iSQ3dyMI6/XQaJXZyZIZBueEiJnwCdEplA1hmYudABUOdgnQD5bqRDNOAIA9fVs Qv7TNgI96G0n0O1vZgwVt3aQyOT6RaDfvjocjT9KRJX3fRiqm2WyljBmkw0wNeU1gPk6VEwy N419OHPHWcg47SUE887XQjD1FaeYumCTgGkPtgiYS7/SmJA7gbn4yA6YGefS7fP3iTLyONXB I5w+NTNXVODtGSB1n9cfG5u0ACMwrTGBOArSa+Flp4cwAREloZ8C6HH48OggCZb1eTAToP6x FLrdfNSZBLCmuBaEHSm9A96trY748fQJODfWiYUljB4m4fXznYJo8QHA3rLrRNgiaAVsGx+K 8AJ6OXz9MxDZJKYz4Yj9jTDMOL0S1nv9ZJgT6N2wuSIgiDoLYfeN0ci1OHo/NDbMRlqMToZz 5f1YlBPh21GrIMoy2Dh5C7sMpJaY3BKTWGISS0xyB+B2kMTpeHW+mk/XrdFwR1N4Vs0XavJT DmjVThD5OwpFE+jqynEBmgLyeWIbO50tEbJH+CK1C0AKk8eLNxj+PYnz2KLjnF6boy9UcbwL LKZweaJYpn2+V0Lns4e5Qxyn4/T/pwIqbpERxF9p5UscFTuN7MN1md2S5Ksvl6GPPz5dDE7s alwx19O2+cKZhJaz/qLvBQsM/tBmmXZP3mp6FVF1biO25MfIFrOqrKTUem/t9y26gZMUMIxy +NZyXXKu/I968ftQqTJotWSxA51kqqxBuTPl5rCUMTQ827EtQ7Xpi9RRO1illON8AZuuwPQ8 +xeaSAVbNwMAAA== X-CMS-MailID: 20191213012416epcas1p4d1d2af13ce4822a7439b08801aef55d2 X-Msg-Generator: CA X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20191114201049epcas5p4a24607634af7b31e6a2dbdb4166dd862 References: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191212_172423_899593_CAD55E0E X-CRM114-Status: GOOD ( 32.12 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , =?UTF-8?B?QXJ0dXIgxZp3aWdvxYQ=?= , Jacky Bai , "Rafael J. Wysocki" , Viresh Kumar , Michael Turquette , Angus Ainslie , MyungJoo Ham , Abel Vesa , Anson Huang , Krzysztof Kozlowski , Matthias Kaehlcke , linux-imx@nxp.com, devicetree@vger.kernel.org, linux-pm@vger.kernel.org, Martin Kepplinger , Silvano di Ninno , linux-arm-kernel@lists.infradead.org, Dong Aisheng , Saravana Kannan , Stephen Boyd , Kyungmin Park , kernel@pengutronix.de, Fabio Estevam , Shawn Guo , Alexandre Bailon Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, On 11/15/19 5:09 AM, Leonard Crestez wrote: > Add initial support for dynamic frequency switching on pieces of the imx > interconnect fabric. > > All this driver does is set a clk rate based on an opp table, it does > not map register areas. > > Signed-off-by: Leonard Crestez > --- > drivers/devfreq/Kconfig | 9 ++ > drivers/devfreq/Makefile | 1 + > drivers/devfreq/imx-devfreq.c | 150 ++++++++++++++++++++++++++++++++++ > 3 files changed, 160 insertions(+) > create mode 100644 drivers/devfreq/imx-devfreq.c > > diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig > index 923a6132e741..fef5ce831e90 100644 > --- a/drivers/devfreq/Kconfig > +++ b/drivers/devfreq/Kconfig > @@ -98,10 +98,19 @@ config ARM_IMX8M_DDRC_DEVFREQ > select DEVFREQ_GOV_USERSPACE > help > This adds the DEVFREQ driver for the i.MX8M DDR Controller. It allows > adjusting DRAM frequency. > > +config ARM_IMX_DEVFREQ > + tristate "i.MX Generic DEVFREQ Driver" > + depends on ARCH_MXC || COMPILE_TEST > + select DEVFREQ_GOV_PASSIVE > + select DEVFREQ_GOV_USERSPACE > + help > + This adds the generic DEVFREQ driver for i.MX interconnects. It > + allows adjusting NIC/NOC frequency. > + > config ARM_TEGRA_DEVFREQ > tristate "NVIDIA Tegra30/114/124/210 DEVFREQ Driver" > depends on ARCH_TEGRA_3x_SOC || ARCH_TEGRA_114_SOC || \ > ARCH_TEGRA_132_SOC || ARCH_TEGRA_124_SOC || \ > ARCH_TEGRA_210_SOC || \ > diff --git a/drivers/devfreq/Makefile b/drivers/devfreq/Makefile > index 3eb4d5e6635c..61d0edee16f7 100644 > --- a/drivers/devfreq/Makefile > +++ b/drivers/devfreq/Makefile > @@ -8,10 +8,11 @@ obj-$(CONFIG_DEVFREQ_GOV_USERSPACE) += governor_userspace.o > obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o > > # DEVFREQ Drivers > obj-$(CONFIG_ARM_EXYNOS_BUS_DEVFREQ) += exynos-bus.o > obj-$(CONFIG_ARM_IMX8M_DDRC_DEVFREQ) += imx8m-ddrc.o > +obj-$(CONFIG_ARM_IMX_DEVFREQ) += imx-devfreq.o > obj-$(CONFIG_ARM_RK3399_DMC_DEVFREQ) += rk3399_dmc.o > obj-$(CONFIG_ARM_TEGRA_DEVFREQ) += tegra30-devfreq.o > obj-$(CONFIG_ARM_TEGRA20_DEVFREQ) += tegra20-devfreq.o > > # DEVFREQ Event Drivers > diff --git a/drivers/devfreq/imx-devfreq.c b/drivers/devfreq/imx-devfreq.c > new file mode 100644 > index 000000000000..620b344e87aa > --- /dev/null > +++ b/drivers/devfreq/imx-devfreq.c > @@ -0,0 +1,150 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright 2019 NXP > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +struct imx_devfreq { > + struct devfreq_dev_profile profile; > + struct devfreq *devfreq; > + struct clk *clk; > + struct devfreq_passive_data passive_data; > +}; > + > +static int imx_devfreq_target(struct device *dev, > + unsigned long *freq, u32 flags) Don't use space for the indentation. Please use only tab. > +{ > + struct imx_devfreq *priv = dev_get_drvdata(dev); > + struct dev_pm_opp *new_opp; > + unsigned long new_freq; > + int ret; > + > + new_opp = devfreq_recommended_opp(dev, freq, flags); > + if (IS_ERR(new_opp)) { > + ret = PTR_ERR(new_opp); > + dev_err(dev, "failed to get recommended opp: %d\n", ret); > + return ret; > + } > + new_freq = dev_pm_opp_get_freq(new_opp); > + dev_pm_opp_put(new_opp); > + > + return clk_set_rate(priv->clk, new_freq); > +} > + > +static int imx_devfreq_get_cur_freq(struct device *dev, unsigned long *freq) > +{ > + struct imx_devfreq *priv = dev_get_drvdata(dev); > + > + *freq = clk_get_rate(priv->clk); > + > + return 0; > +} > + > +static int imx_devfreq_get_dev_status(struct device *dev, > + struct devfreq_dev_status *stat) ditto. Please use tab for the indentation. > +{ > + struct imx_devfreq *priv = dev_get_drvdata(dev); > + > + stat->busy_time = 0; > + stat->total_time = 0; > + stat->current_frequency = clk_get_rate(priv->clk); > + > + return 0; > +} > + > +static void imx_devfreq_exit(struct device *dev) > +{ > + dev_pm_opp_of_remove_table(dev); > +} > + > +static int imx_devfreq_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct imx_devfreq *priv; How about changing the variable name 'priv' to 'imx' or 'imx_data'? because it is not easy to catch the role of 'priv' from variable name. > + const char *gov = DEVFREQ_GOV_USERSPACE; > + void *govdata = NULL; How about changing the variable name 'govdata' to 'gov_data'? - govdata -> gov_data > + int ret; > + > + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > + if (!priv) > + return -ENOMEM; > + > + priv->clk = devm_clk_get(dev, NULL); nitpick: because the clock-name is not mandatory. Don't need to specify the clock name to inform the role of clock of other developer/user? For example, "ddr", "bus" and so on. > + if (IS_ERR(priv->clk)) { > + ret = PTR_ERR(priv->clk); > + dev_err(dev, "failed to fetch clk: %d\n", ret); > + return ret; > + } > + platform_set_drvdata(pdev, priv); > + > + ret = dev_pm_opp_of_add_table(dev); > + if (ret < 0) { > + dev_err(dev, "failed to get OPP table\n"); > + return ret; > + } > + > + priv->profile.polling_ms = 1000; > + priv->profile.target = imx_devfreq_target; > + priv->profile.get_dev_status = imx_devfreq_get_dev_status; > + priv->profile.exit = imx_devfreq_exit; > + priv->profile.get_cur_freq = imx_devfreq_get_cur_freq; > + priv->profile.initial_freq = clk_get_rate(priv->clk); > + > + /* Handle passive devfreq parent link */ > + priv->passive_data.parent = devfreq_get_devfreq_by_phandle(dev, 0); > + if (!IS_ERR(priv->passive_data.parent)) { > + dev_info(dev, "setup passive link to %s\n", > + dev_name(priv->passive_data.parent->dev.parent)); > + gov = DEVFREQ_GOV_PASSIVE; > + govdata = &priv->passive_data; > + } else if (priv->passive_data.parent != ERR_PTR(-ENODEV)) { > + // -ENODEV means no parent: not an error. > + ret = PTR_ERR(priv->passive_data.parent); > + if (ret != -EPROBE_DEFER) > + dev_warn(dev, "failed to get initialize passive parent: %d\n", > + ret); > + goto err; > + } You better to change the exception handling as following: It is more simple. } else if (PTR_ERR(priv->passive_data.parent) == -EPROBE_DEFER) || PTR_ERR(priv->passive_data.parent) == -ENODEV) { goto err; } else { ret = PTR_ERR(priv->passive_data.parent); dev_err(dev, "failed to get initialize passive parent: %d\n", ret); goto err; } > + > + priv->devfreq = devm_devfreq_add_device(dev, &priv->profile, > + gov, govdata); > + if (IS_ERR(priv->devfreq)) { > + ret = PTR_ERR(priv->devfreq); > + dev_err(dev, "failed to add devfreq device: %d\n", ret); > + goto err; > + } > + > + return 0; > + > +err: > + dev_pm_opp_of_remove_table(dev); > + return ret; > +} > + > +static const struct of_device_id imx_devfreq_of_match[] = { > + { .compatible = "fsl,imx8m-noc", }, > + { .compatible = "fsl,imx8m-nic", }, > + { /* sentinel */ }, > +}; > +MODULE_DEVICE_TABLE(of, imx_devfreq_of_match); > + > +static struct platform_driver imx_devfreq_platdrv = { > + .probe = imx_devfreq_probe, > + .driver = { > + .name = "imx-devfreq", > + .of_match_table = of_match_ptr(imx_devfreq_of_match), > + }, > +}; > +module_platform_driver(imx_devfreq_platdrv); > + > +MODULE_DESCRIPTION("Generic i.MX bus frequency driver"); If this driver is for bus frequency, you better to use 'bus' for the clock-name for the readability. > +MODULE_AUTHOR("Leonard Crestez "); > +MODULE_LICENSE("GPL v2"); > -- Best Regards, Chanwoo Choi Samsung Electronics _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel