From patchwork Mon Sep 20 17:22:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 12506327 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 0824CC433F5 for ; Mon, 20 Sep 2021 21:03:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E469A6115B for ; Mon, 20 Sep 2021 21:03:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236555AbhITVEd (ORCPT ); Mon, 20 Sep 2021 17:04:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54678 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237260AbhITVCb (ORCPT ); Mon, 20 Sep 2021 17:02:31 -0400 Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00422C059360; Mon, 20 Sep 2021 10:23:17 -0700 (PDT) Received: by mail-lf1-x136.google.com with SMTP id g1so71208106lfj.12; Mon, 20 Sep 2021 10:23:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5KsYfuNRlvMrE9NTZucMYXQywZC0cvfGbwd3TTvoBus=; b=mIy29wnqTh/a+pG1/GhLjs4DPHYZh1fwdtWW9WBdYtBOZtF+FMQuaB0QREWg6WNMQM CxKIjEWqB6RHsDTwIkLRXLAQJPUx6Opfjie0elWseVbWwomEKw7q8UeqyXX1IVL+youx dNGg8IT6hG6njsTIpkEWrncIHRkgil7XomK+YmJ4wP+UcepHESEHYkUzjS6r/Z1Mj9Cu KjECztze6YUjw/EKcZwLZVbsS/sAtoeddghdaw8YHvK0b/+z1bvfh8HAFp7qO4Rect5S XFKjBa5dleRBaQQ/MZ+KGDBCfnLPix4akR1CzyW9AUBBtu7PiqtrbotIeILBbpxJ60XI dqQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5KsYfuNRlvMrE9NTZucMYXQywZC0cvfGbwd3TTvoBus=; b=dmh1NYOaH+jKhxkEDHwRa+AkNfdMLykDjS8b3gK9BePJpWf7DxQ/V7TxDQX/B76zun LS3w6HEd9uMcViJcSmTxP5an5Qr3gtSPkIv0dmR6bkr56rJEZ1/iAutyEHdEMP2oYz8S ou0urGj3Zime7lO2yHI4b9MaeRolDnaqNzd08ZYm2ENZ4jFf9R+34DYlPCnfi/ZHBRLd oHKwrkRO/TJwKEruQ1fkYeg18gMtl0MyyP6BQTT9S4cGdWhPQVm9o4kQ9dRD41eXICou bWKRsZXWatn/GwMphCMeY4QDh/NsWlUAUE1IItM6Y6imqtw16/9Df0xd9LnPbgOtja5p izEQ== X-Gm-Message-State: AOAM53383QqbDHghcUF+VezerEOpJOXSHleb2th0sKEuOUq+4hC+N7SY D5Ash0PRPYHBTynWhIDekic= X-Google-Smtp-Source: ABdhPJwoDWyXi9BcogBV3S+UFDfaIOWEOVRWIFTDYk1rirMOV90ZCNnisW4HjFBDVUdNDYBesRAkwg== X-Received: by 2002:a05:6512:1292:: with SMTP id u18mr19358027lfs.218.1632158594857; Mon, 20 Sep 2021 10:23:14 -0700 (PDT) Received: from localhost.localdomain (46-138-151-206.dynamic.spd-mgts.ru. [46.138.151.206]) by smtp.gmail.com with ESMTPSA id t13sm1311038lff.279.2021.09.20.10.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Sep 2021 10:23:14 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Viresh Kumar , Nishanth Menon , MyungJoo Ham , Stephen Boyd , Kyungmin Park , Chanwoo Choi Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 1/4] opp: Add more resource-managed variants of dev_pm_opp_of_add_table() Date: Mon, 20 Sep 2021 20:22:46 +0300 Message-Id: <20210920172249.28206-2-digetx@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210920172249.28206-1-digetx@gmail.com> References: <20210920172249.28206-1-digetx@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Add resource-managed variants of dev_pm_opp_of_add_table_indexed() and dev_pm_opp_of_add_table_noclk(), allowing drivers to remove boilerplate code. Signed-off-by: Dmitry Osipenko --- drivers/opp/of.c | 46 +++++++++++++++++++++++++++++++++++------- include/linux/pm_opp.h | 12 +++++++++++ 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/drivers/opp/of.c b/drivers/opp/of.c index 2a97c6535c4c..bd01ecb1d85c 100644 --- a/drivers/opp/of.c +++ b/drivers/opp/of.c @@ -1081,6 +1081,17 @@ static void devm_pm_opp_of_table_release(void *data) dev_pm_opp_of_remove_table(data); } +static int devm_of_add_table_indexed(struct device *dev, int index, bool getclk) +{ + int ret; + + ret = _of_add_table_indexed(dev, index, getclk); + if (ret) + return ret; + + return devm_add_action_or_reset(dev, devm_pm_opp_of_table_release, dev); +} + /** * devm_pm_opp_of_add_table() - Initialize opp table from device tree * @dev: device pointer used to lookup OPP table. @@ -1102,13 +1113,7 @@ static void devm_pm_opp_of_table_release(void *data) */ int devm_pm_opp_of_add_table(struct device *dev) { - int ret; - - ret = dev_pm_opp_of_add_table(dev); - if (ret) - return ret; - - return devm_add_action_or_reset(dev, devm_pm_opp_of_table_release, dev); + return devm_of_add_table_indexed(dev, 0, true); } EXPORT_SYMBOL_GPL(devm_pm_opp_of_add_table); @@ -1151,6 +1156,19 @@ int dev_pm_opp_of_add_table_indexed(struct device *dev, int index) } EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table_indexed); +/** + * devm_pm_opp_of_add_table_indexed() - Initialize indexed opp table from device tree + * @dev: device pointer used to lookup OPP table. + * @index: Index number. + * + * This is a resource-managed variant of dev_pm_opp_of_add_table_indexed(). + */ +int devm_pm_opp_of_add_table_indexed(struct device *dev, int index) +{ + return devm_of_add_table_indexed(dev, index, true); +} +EXPORT_SYMBOL_GPL(devm_pm_opp_of_add_table_indexed); + /** * dev_pm_opp_of_add_table_noclk() - Initialize indexed opp table from device * tree without getting clk for device. @@ -1169,6 +1187,20 @@ int dev_pm_opp_of_add_table_noclk(struct device *dev, int index) } EXPORT_SYMBOL_GPL(dev_pm_opp_of_add_table_noclk); +/** + * devm_pm_opp_of_add_table_noclk() - Initialize indexed opp table from device + * tree without getting clk for device. + * @dev: device pointer used to lookup OPP table. + * @index: Index number. + * + * This is a resource-managed variant of dev_pm_opp_of_add_table_noclk(). + */ +int devm_pm_opp_of_add_table_noclk(struct device *dev, int index) +{ + return devm_of_add_table_indexed(dev, index, false); +} +EXPORT_SYMBOL_GPL(devm_pm_opp_of_add_table_noclk); + /* CPU device specific helpers */ /** diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index 84150a22fd7c..a95d6fdd20b6 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -439,7 +439,9 @@ static inline int dev_pm_opp_sync_regulators(struct device *dev) #if defined(CONFIG_PM_OPP) && defined(CONFIG_OF) int dev_pm_opp_of_add_table(struct device *dev); int dev_pm_opp_of_add_table_indexed(struct device *dev, int index); +int devm_pm_opp_of_add_table_indexed(struct device *dev, int index); int dev_pm_opp_of_add_table_noclk(struct device *dev, int index); +int devm_pm_opp_of_add_table_noclk(struct device *dev, int index); void dev_pm_opp_of_remove_table(struct device *dev); int devm_pm_opp_of_add_table(struct device *dev); int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask); @@ -465,11 +467,21 @@ static inline int dev_pm_opp_of_add_table_indexed(struct device *dev, int index) return -EOPNOTSUPP; } +static inline int devm_pm_opp_of_add_table_indexed(struct device *dev, int index) +{ + return -EOPNOTSUPP; +} + static inline int dev_pm_opp_of_add_table_noclk(struct device *dev, int index) { return -EOPNOTSUPP; } +static inline int devm_pm_opp_of_add_table_noclk(struct device *dev, int index) +{ + return -EOPNOTSUPP; +} + static inline void dev_pm_opp_of_remove_table(struct device *dev) { } From patchwork Mon Sep 20 17:22:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 12506325 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 AD364C433EF for ; Mon, 20 Sep 2021 21:03:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9403961019 for ; Mon, 20 Sep 2021 21:03:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232212AbhITVEc (ORCPT ); Mon, 20 Sep 2021 17:04:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54672 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233028AbhITVCb (ORCPT ); Mon, 20 Sep 2021 17:02:31 -0400 Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 574F7C05935F; Mon, 20 Sep 2021 10:23:17 -0700 (PDT) Received: by mail-lf1-x136.google.com with SMTP id b15so52295267lfe.7; Mon, 20 Sep 2021 10:23:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lpp5P4ugre+3Bt1zcMzEqxuMaP87lFqCuB5qRKv8mNk=; b=g3edkwtY6cLRoMAGjN5XX0Eogof/sYH0pouYGJGAMIpVwVxrHnbU4bKCPFvhqm8Lln MzFnpLDKXQgZNLUCeMJLABIlHoqcBURqrq+iBx00KOWsuYsniwYvBqtXRLfjxG/QSPln iJ0Hyiq3zG3lNjYFwV23+MEXGkp1rLhUIh65x59MFBXBBx48BntuqL3txS25dD0I0HvX 6yYzC1ik6n0cDV25c++olY61/6ExeysD604qpmumlSRuYbLasVwKmgKyqJpfNlURWAUp cWhEElCveRwYlbrrhFWIDINK6DtxqID2L3PKQjBWlPBaLjkewn+GR7gC5I8hnEa1RXqI L2gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lpp5P4ugre+3Bt1zcMzEqxuMaP87lFqCuB5qRKv8mNk=; b=KoVmRtK+5HvluyhiOAjLdBM5XSjqgSryFHxkaf43ViFhlYXTBK1kFNrYNMuL2EukZy f/RfrO7mrVXyvzmtiz7ZPOIkyndTBal4YF/ZayIcQ56OgH79jYO7lyOM1y1cnvYuvhWm 4BWxSN7mqI/HSHpyKjSknB9HJtZTVq6mZhYCrhkNLIi8WGGl0m/k2E+JLOJ3O1dyFbWN kBWyI+WcymvKIIZd93f2e0LpcPCIrLa/19hVoJc10PW0RVc5G9EapKi36Hui5aK41VWz G8nYtSMrLH7I0KDFhMOfhgisnjMnGjwlkUbDmkhq+V9PhIDI9gDOvZVscB6U4kADcAvc ZbDA== X-Gm-Message-State: AOAM531V+rkxQW+Fi4qZSfK8OogsalrCxFQ5e6eLw97Ea8WjM2gMMxkx h1E/fevQI8rrEVmho98khQc= X-Google-Smtp-Source: ABdhPJz9soTFZ2UwBv5pkLAGxgJ1zX159icqD41ZzvHls7eFDm0AN6gTPaTc9tL9vUH5voN27nbaGA== X-Received: by 2002:a05:6512:344d:: with SMTP id j13mr20795746lfr.47.1632158595633; Mon, 20 Sep 2021 10:23:15 -0700 (PDT) Received: from localhost.localdomain (46-138-151-206.dynamic.spd-mgts.ru. [46.138.151.206]) by smtp.gmail.com with ESMTPSA id t13sm1311038lff.279.2021.09.20.10.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Sep 2021 10:23:15 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Viresh Kumar , Nishanth Menon , MyungJoo Ham , Stephen Boyd , Kyungmin Park , Chanwoo Choi Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 2/4] PM / devfreq: Add devm_devfreq_add_governor() Date: Mon, 20 Sep 2021 20:22:47 +0300 Message-Id: <20210920172249.28206-3-digetx@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210920172249.28206-1-digetx@gmail.com> References: <20210920172249.28206-1-digetx@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Add resource-managed variant of devfreq_add_governor(). Signed-off-by: Dmitry Osipenko Acked-by: Chanwoo Choi --- drivers/devfreq/devfreq.c | 26 ++++++++++++++++++++++++++ drivers/devfreq/governor.h | 3 +++ 2 files changed, 29 insertions(+) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 85faa7a5c7d1..4579eefb8fe7 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -1301,6 +1301,32 @@ int devfreq_add_governor(struct devfreq_governor *governor) } EXPORT_SYMBOL(devfreq_add_governor); +static void devm_devfreq_remove_governor(void *governor) +{ + WARN_ON(devfreq_remove_governor(governor)); +} + +/** + * devm_devfreq_add_governor() - Add devfreq governor + * @dev: device which adds devfreq governor + * @governor: the devfreq governor to be added + * + * This is a resource-managed variant of devfreq_add_governor(). + */ +int devm_devfreq_add_governor(struct device *dev, + struct devfreq_governor *governor) +{ + int err; + + err = devfreq_add_governor(governor); + if (err) + return err; + + return devm_add_action_or_reset(dev, devm_devfreq_remove_governor, + governor); +} +EXPORT_SYMBOL(devm_devfreq_add_governor); + /** * devfreq_remove_governor() - Remove devfreq feature from a device. * @governor: the devfreq governor to be removed diff --git a/drivers/devfreq/governor.h b/drivers/devfreq/governor.h index 2d69a0ce6291..002a7d67e39d 100644 --- a/drivers/devfreq/governor.h +++ b/drivers/devfreq/governor.h @@ -84,6 +84,9 @@ void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay); int devfreq_add_governor(struct devfreq_governor *governor); int devfreq_remove_governor(struct devfreq_governor *governor); +int devm_devfreq_add_governor(struct device *dev, + struct devfreq_governor *governor); + int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); int devfreq_update_target(struct devfreq *devfreq, unsigned long freq); From patchwork Mon Sep 20 17:22:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 12506329 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 85D76C4321E for ; Mon, 20 Sep 2021 21:03:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5BE906115B for ; Mon, 20 Sep 2021 21:03:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231901AbhITVEe (ORCPT ); Mon, 20 Sep 2021 17:04:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229851AbhITVCc (ORCPT ); Mon, 20 Sep 2021 17:02:32 -0400 Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1FC1FC059361; Mon, 20 Sep 2021 10:23:18 -0700 (PDT) Received: by mail-lf1-x12a.google.com with SMTP id i25so71362352lfg.6; Mon, 20 Sep 2021 10:23:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cA9wCB4pJs3LwykWyuF6E7GswKKTAqR9cFJTGNkwFK0=; b=ZmnX5lSP/OyvwfdTBy8gpdpR/T5W8S884Yg6Y3NRfliyKE23Let6UeaW228GDvGqeZ rkVgtroX2/5ES0zc1SAVM+aNGEvn3HfJk8p4djXsqFTv8G2XVt6DfLGOGKJrGrWC0ly5 JOViUGyXKQH7vWrnCSGWz5JdBSkOl9pcMkJL9GDRgh6A1IKslgEDV6gRUibgTamXvbap ci8EdfYtutR2NctkgGVb1ito0ocnXyZRubDyO7YB6bHPVvk9ruEK2FmI/WjaBG+argbY ByCCrqQ5Ds6jTvzC2NZNkcIKEalfpQmF6qWisDmG1Vo8x9wfIYL2kw5Lo0WlTG4YTfCd aZjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cA9wCB4pJs3LwykWyuF6E7GswKKTAqR9cFJTGNkwFK0=; b=MVT+wxc1P9IKHSLeZMWvBXd1QXDfHmerJtPMq2r/JypwzFQAPTsyOb6VHwQCgBqrdO /8MvXlMXoQSmdYCs/CdfoK0YBQgCx3MQu4nwYBoTRomCpvB6+bYcqlT/MTQvVZ2EPHc2 HqotA/7dhS9ac25f5r5ZBurRRH9bsanOeaJSpQK6ZhnfErSQkP7WpUML41S4gKRqyO37 uokv2MBAJsb7e29bhSLmLePPuRj6E04aOWE0ZuWCqpr6cZynT6fcYdBHW1BhxV7tspj1 pzkb5j35p1UTEKZ+Py4TJfoYGk3u/SzETj4Mk5dpzOBDPJXtYGPpWQgmLfcQfSN5jZ1W t1Cw== X-Gm-Message-State: AOAM533bsn67UvWmtlh+17Pl+tKpJGiFJIqKRsKHLN8ChLpm1LNGYQOY Mn41UO+DnoQdKzN8rLE8muJSf75y7w0= X-Google-Smtp-Source: ABdhPJxAUfQjb/JVjl/EG+/PWAmCAeGicXjmL2WmSdcU3VEse5fhbinIjrHAFmdAdJi8jxSNEdy5zg== X-Received: by 2002:a2e:9e53:: with SMTP id g19mr1719816ljk.478.1632158596408; Mon, 20 Sep 2021 10:23:16 -0700 (PDT) Received: from localhost.localdomain (46-138-151-206.dynamic.spd-mgts.ru. [46.138.151.206]) by smtp.gmail.com with ESMTPSA id t13sm1311038lff.279.2021.09.20.10.23.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Sep 2021 10:23:16 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Viresh Kumar , Nishanth Menon , MyungJoo Ham , Stephen Boyd , Kyungmin Park , Chanwoo Choi Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 3/4] PM / devfreq: tegra30: Use resource-managed helpers Date: Mon, 20 Sep 2021 20:22:48 +0300 Message-Id: <20210920172249.28206-4-digetx@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210920172249.28206-1-digetx@gmail.com> References: <20210920172249.28206-1-digetx@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Use resource-managed API helpers to simplify driver's probe() function, making code cleaner. Signed-off-by: Dmitry Osipenko Acked-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 107 +++++++++++++----------------- 1 file changed, 46 insertions(+), 61 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 10661eb2aed8..d83fdc2713ed 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -178,7 +178,6 @@ struct tegra_devfreq_soc_data { struct tegra_devfreq { struct devfreq *devfreq; - struct opp_table *opp_table; struct reset_control *reset; struct clk *clock; @@ -789,6 +788,39 @@ static struct devfreq_governor tegra_devfreq_governor = { .event_handler = tegra_governor_event_handler, }; +static void devm_tegra_devfreq_deinit_hw(void *data) +{ + struct tegra_devfreq *tegra = data; + + reset_control_reset(tegra->reset); + clk_disable_unprepare(tegra->clock); +} + +static int devm_tegra_devfreq_init_hw(struct device *dev, + struct tegra_devfreq *tegra) +{ + int err; + + err = clk_prepare_enable(tegra->clock); + if (err) { + dev_err(dev, "Failed to prepare and enable ACTMON clock\n"); + return err; + } + + err = devm_add_action_or_reset(dev, devm_tegra_devfreq_deinit_hw, + tegra); + if (err) + return err; + + err = reset_control_reset(tegra->reset); + if (err) { + dev_err(dev, "Failed to reset hardware: %d\n", err); + return err; + } + + return err; +} + static int tegra_devfreq_probe(struct platform_device *pdev) { u32 hw_version = BIT(tegra_sku_info.soc_speedo_id); @@ -842,38 +874,26 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return err; } - tegra->opp_table = dev_pm_opp_set_supported_hw(&pdev->dev, - &hw_version, 1); - err = PTR_ERR_OR_ZERO(tegra->opp_table); + err = devm_pm_opp_set_supported_hw(&pdev->dev, &hw_version, 1); if (err) { dev_err(&pdev->dev, "Failed to set supported HW: %d\n", err); return err; } - err = dev_pm_opp_of_add_table_noclk(&pdev->dev, 0); + err = devm_pm_opp_of_add_table_noclk(&pdev->dev, 0); if (err) { dev_err(&pdev->dev, "Failed to add OPP table: %d\n", err); - goto put_hw; - } - - err = clk_prepare_enable(tegra->clock); - if (err) { - dev_err(&pdev->dev, - "Failed to prepare and enable ACTMON clock\n"); - goto remove_table; + return err; } - err = reset_control_reset(tegra->reset); - if (err) { - dev_err(&pdev->dev, "Failed to reset hardware: %d\n", err); - goto disable_clk; - } + err = devm_tegra_devfreq_init_hw(&pdev->dev, tegra); + if (err) + return err; rate = clk_round_rate(tegra->emc_clock, ULONG_MAX); if (rate < 0) { dev_err(&pdev->dev, "Failed to round clock rate: %ld\n", rate); - err = rate; - goto disable_clk; + return rate; } tegra->max_freq = rate / KHZ; @@ -892,52 +912,18 @@ static int tegra_devfreq_probe(struct platform_device *pdev) INIT_DELAYED_WORK(&tegra->cpufreq_update_work, tegra_actmon_delayed_update); - err = devfreq_add_governor(&tegra_devfreq_governor); + err = devm_devfreq_add_governor(&pdev->dev, &tegra_devfreq_governor); if (err) { dev_err(&pdev->dev, "Failed to add governor: %d\n", err); - goto remove_opps; + return err; } tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); - devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, - "tegra_actmon", NULL); - if (IS_ERR(devfreq)) { - err = PTR_ERR(devfreq); - goto remove_governor; - } - - return 0; - -remove_governor: - devfreq_remove_governor(&tegra_devfreq_governor); - -remove_opps: - dev_pm_opp_remove_all_dynamic(&pdev->dev); - - reset_control_reset(tegra->reset); -disable_clk: - clk_disable_unprepare(tegra->clock); -remove_table: - dev_pm_opp_of_remove_table(&pdev->dev); -put_hw: - dev_pm_opp_put_supported_hw(tegra->opp_table); - - return err; -} - -static int tegra_devfreq_remove(struct platform_device *pdev) -{ - struct tegra_devfreq *tegra = platform_get_drvdata(pdev); - - devfreq_remove_device(tegra->devfreq); - devfreq_remove_governor(&tegra_devfreq_governor); - - reset_control_reset(tegra->reset); - clk_disable_unprepare(tegra->clock); - - dev_pm_opp_of_remove_table(&pdev->dev); - dev_pm_opp_put_supported_hw(tegra->opp_table); + devfreq = devm_devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, + "tegra_actmon", NULL); + if (IS_ERR(devfreq)) + return PTR_ERR(devfreq); return 0; } @@ -967,7 +953,6 @@ MODULE_DEVICE_TABLE(of, tegra_devfreq_of_match); static struct platform_driver tegra_devfreq_driver = { .probe = tegra_devfreq_probe, - .remove = tegra_devfreq_remove, .driver = { .name = "tegra-devfreq", .of_match_table = tegra_devfreq_of_match, From patchwork Mon Sep 20 17:22:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 12506331 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=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 223B1C433F5 for ; Mon, 20 Sep 2021 21:03:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0A43561019 for ; Mon, 20 Sep 2021 21:03:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237514AbhITVEi (ORCPT ); Mon, 20 Sep 2021 17:04:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229686AbhITVCh (ORCPT ); Mon, 20 Sep 2021 17:02:37 -0400 Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7FD54C059363; Mon, 20 Sep 2021 10:23:20 -0700 (PDT) Received: by mail-lf1-x130.google.com with SMTP id e15so31880755lfr.10; Mon, 20 Sep 2021 10:23:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FH0NgxJWofET3fg5T9f/eJzZHrX+F/eL7pq4def6uQw=; b=q1Gf88uXqLRq3AwuB/CdnFpMAERakzmDWQ7s1yj0n7DqBzkX680ZfEh6OMiNliwMIc kCBvBA0Cf+kFV5QJi+y3aaO2H6vhrk/Nv8EGYfw2vfPJRQTwHXAKOPZcyMfzKYS852mf yBFCVhJLKEB641bZw9/px0GdxtQkNkoq8fdFWCzpNQvjISDIYp7uOiz1+/eON78PJ2p1 aLl/JkMGeHk8Q5e9QcNgzrKr7Zfmn7lDgeD9sI43SseXwX6VknYe4CfxQ8DofBTOl3Vu PwxwCJAY5Nui7OIYb7WKvE6UczVr28JJodCqpW8JsKHdqDQxpmvlxcunTaBHC4DtIzcb 0XJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FH0NgxJWofET3fg5T9f/eJzZHrX+F/eL7pq4def6uQw=; b=KXM+wLUcJgLppK2W6Vz3Y/aH7Qw/GI8eoD9q+r98gAzHRwRxSDZp/9XaTRHqgI2WT+ wu7J/RyHIEvyrqLwBt0rVfCeBDSfpPcpPY9vF7kBjkJD3cyBNzvXmo8QTS3z9eeEAOoK J7+c4SM2xc4KR4de5pCPYONo7pDczCIZPR/v+nZgiBYYZFOBht+OZ9UMMCNTkH10ZAEG Hs7+mhlqk5raYhc8nc2ibEFk7Zs7HL4Nz66TsFvvoHWnDyRIBmnZGDaTYoXKoQl6VtQM s1hrGxsWTBwJefCWCQ1NsGL2h+udbhEBbr8qCyPKVmk/V7U1xOlQWSl8Ij9dkNCkY8Wb RtdQ== X-Gm-Message-State: AOAM5332RVyteIg6FvhXLHNfjNqErd82S7K6uMgCwpkuDkiRAWObZnhm wF2fRuegOdQQbq/t9VLvMOg= X-Google-Smtp-Source: ABdhPJyPvN4cSVL2kD7wPRc/kuAhlKI5+a+HKu4WN6DA7Q/2GqPk67C3wcNlO2sGQYlfoZjC3Yumwg== X-Received: by 2002:ac2:484e:: with SMTP id 14mr20858664lfy.140.1632158597129; Mon, 20 Sep 2021 10:23:17 -0700 (PDT) Received: from localhost.localdomain (46-138-151-206.dynamic.spd-mgts.ru. [46.138.151.206]) by smtp.gmail.com with ESMTPSA id t13sm1311038lff.279.2021.09.20.10.23.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Sep 2021 10:23:16 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Viresh Kumar , Nishanth Menon , MyungJoo Ham , Stephen Boyd , Kyungmin Park , Chanwoo Choi Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 4/4] PM / devfreq: tegra30: Check whether clk_round_rate() returns zero rate Date: Mon, 20 Sep 2021 20:22:49 +0300 Message-Id: <20210920172249.28206-5-digetx@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210920172249.28206-1-digetx@gmail.com> References: <20210920172249.28206-1-digetx@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org EMC clock is always-on and can't be zero. Check whether clk_round_rate() returns zero rate and error out if it does. It can return zero if clock tree isn't initialized properly. Acked-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index d83fdc2713ed..65ecf17a36f4 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -891,9 +891,9 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return err; rate = clk_round_rate(tegra->emc_clock, ULONG_MAX); - if (rate < 0) { + if (rate <= 0) { dev_err(&pdev->dev, "Failed to round clock rate: %ld\n", rate); - return rate; + return rate ?: -EINVAL; } tegra->max_freq = rate / KHZ;