All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Osipenko <digetx@gmail.com>
To: "Thierry Reding" <thierry.reding@gmail.com>,
	"MyungJoo Ham" <myungjoo.ham@samsung.com>,
	"Kyungmin Park" <kyungmin.park@samsung.com>,
	"Chanwoo Choi" <cw00.choi@samsung.com>,
	"Jonathan Hunter" <jonathanh@nvidia.com>,
	"Tomeu Vizoso" <tomeu.vizoso@collabora.com>,
	"Peter Geis" <pgwipeout@gmail.com>,
	"Michał Mirosław" <mirq-linux@rere.qmqm.pl>
Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v8 03/18] PM / devfreq: tegra30: Handle possible round-rate error
Date: Sun,  3 Nov 2019 23:41:15 +0300	[thread overview]
Message-ID: <20191103204130.2172-4-digetx@gmail.com> (raw)
In-Reply-To: <20191103204130.2172-1-digetx@gmail.com>

The EMC clock rate rounding technically could fail, hence let's handle
the error cases properly.

Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com>
Tested-by: Peter Geis <pgwipeout@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/devfreq/tegra30-devfreq.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c
index a0a5f3f7b789..66dfa98d8c6b 100644
--- a/drivers/devfreq/tegra30-devfreq.c
+++ b/drivers/devfreq/tegra30-devfreq.c
@@ -592,8 +592,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
 	struct tegra_devfreq_device *dev;
 	struct tegra_devfreq *tegra;
 	struct devfreq *devfreq;
-	unsigned long rate;
 	unsigned int i;
+	long rate;
 	int err;
 
 	tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL);
@@ -650,8 +650,14 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
 
 	reset_control_deassert(tegra->reset);
 
-	tegra->max_freq = clk_round_rate(tegra->emc_clock, ULONG_MAX) / KHZ;
+	rate = clk_round_rate(tegra->emc_clock, ULONG_MAX);
+	if (rate < 0) {
+		dev_err(&pdev->dev, "Failed to round clock rate: %ld\n", rate);
+		return rate;
+	}
+
 	tegra->cur_freq = clk_get_rate(tegra->emc_clock) / KHZ;
+	tegra->max_freq = rate / KHZ;
 
 	for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) {
 		dev = tegra->devices + i;
@@ -662,6 +668,13 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
 	for (rate = 0; rate <= tegra->max_freq * KHZ; rate++) {
 		rate = clk_round_rate(tegra->emc_clock, rate);
 
+		if (rate < 0) {
+			dev_err(&pdev->dev,
+				"Failed to round clock rate: %ld\n", rate);
+			err = rate;
+			goto remove_opps;
+		}
+
 		err = dev_pm_opp_add(&pdev->dev, rate, 0);
 		if (err) {
 			dev_err(&pdev->dev, "Failed to add OPP: %d\n", err);
-- 
2.23.0


  parent reply	other threads:[~2019-11-03 20:43 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-03 20:41 [PATCH v8 00/18] More improvements for Tegra30 devfreq driver Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 01/18] PM / devfreq: tegra30: Change irq type to unsigned int Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 02/18] PM / devfreq: tegra30: Keep interrupt disabled while governor is stopped Dmitry Osipenko
2019-11-03 20:41 ` Dmitry Osipenko [this message]
2019-11-03 20:41 ` [PATCH v8 04/18] PM / devfreq: tegra30: Drop write-barrier Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 05/18] PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 06/18] PM / devfreq: tegra30: Use kHz units uniformly in the code Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 07/18] PM / devfreq: tegra30: Use CPUFreq notifier Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 08/18] PM / devfreq: tegra30: Move clk-notifier's registration to governor's start Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 09/18] PM / devfreq: tegra30: Reset boosting on startup Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 10/18] PM / devfreq: tegra30: Don't enable consecutive-down interrupt " Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 11/18] PM / devfreq: tegra30: Constify structs Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 12/18] PM / devfreq: tegra30: Include appropriate header Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 13/18] PM / devfreq: tegra30: Don't enable already enabled consecutive interrupts Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 14/18] PM / devfreq: tegra30: Disable consecutive interrupts when appropriate Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 15/18] PM / devfreq: Add new interrupt_driven flag for governors Dmitry Osipenko
2019-11-04  2:48   ` Chanwoo Choi
2019-11-04 14:15     ` Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 16/18] PM / devfreq: tegra30: Support variable polling interval Dmitry Osipenko
2019-11-04  2:53   ` Chanwoo Choi
2019-11-04 14:36     ` Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 17/18] PM / devfreq: tegra30: Tune up MCCPU boost-down coefficient Dmitry Osipenko
2019-11-03 20:41 ` [PATCH v8 18/18] PM / devfreq: tegra20/30: Add Dmitry as a maintainer Dmitry Osipenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191103204130.2172-4-digetx@gmail.com \
    --to=digetx@gmail.com \
    --cc=cw00.choi@samsung.com \
    --cc=jonathanh@nvidia.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mirq-linux@rere.qmqm.pl \
    --cc=myungjoo.ham@samsung.com \
    --cc=pgwipeout@gmail.com \
    --cc=thierry.reding@gmail.com \
    --cc=tomeu.vizoso@collabora.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.