Commit 864a2701 authored by Yangtao Li's avatar Yangtao Li Committed by Viresh Kumar
Browse files

drm/lima: Convert to use resource-managed OPP API



Use resource-managed OPP API to simplify code.

Signed-off-by: default avatarYangtao Li <tiny.windzz@gmail.com>
Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
parent 411281d2
Loading
Loading
Loading
Loading
+11 −36
Original line number Diff line number Diff line
@@ -99,20 +99,12 @@ void lima_devfreq_fini(struct lima_device *ldev)
		devm_devfreq_remove_device(ldev->dev, devfreq->devfreq);
		devfreq->devfreq = NULL;
	}

	dev_pm_opp_of_remove_table(ldev->dev);

	dev_pm_opp_put_regulators(devfreq->regulators_opp_table);
	dev_pm_opp_put_clkname(devfreq->clkname_opp_table);
	devfreq->regulators_opp_table = NULL;
	devfreq->clkname_opp_table = NULL;
}

int lima_devfreq_init(struct lima_device *ldev)
{
	struct thermal_cooling_device *cooling;
	struct device *dev = ldev->dev;
	struct opp_table *opp_table;
	struct devfreq *devfreq;
	struct lima_devfreq *ldevfreq = &ldev->devfreq;
	struct dev_pm_opp *opp;
@@ -125,40 +117,28 @@ int lima_devfreq_init(struct lima_device *ldev)

	spin_lock_init(&ldevfreq->lock);

	opp_table = dev_pm_opp_set_clkname(dev, "core");
	if (IS_ERR(opp_table)) {
		ret = PTR_ERR(opp_table);
		goto err_fini;
	}

	ldevfreq->clkname_opp_table = opp_table;

	opp_table = dev_pm_opp_set_regulators(dev,
					      (const char *[]){ "mali" },
					      1);
	if (IS_ERR(opp_table)) {
		ret = PTR_ERR(opp_table);
	ret = devm_pm_opp_set_clkname(dev, "core");
	if (ret)
		return ret;

	ret = devm_pm_opp_set_regulators(dev, (const char *[]){ "mali" }, 1);
	if (ret) {
		/* Continue if the optional regulator is missing */
		if (ret != -ENODEV)
			goto err_fini;
	} else {
		ldevfreq->regulators_opp_table = opp_table;
			return ret;
	}

	ret = dev_pm_opp_of_add_table(dev);
	ret = devm_pm_opp_of_add_table(dev);
	if (ret)
		goto err_fini;
		return ret;

	lima_devfreq_reset(ldevfreq);

	cur_freq = clk_get_rate(ldev->clk_gpu);

	opp = devfreq_recommended_opp(dev, &cur_freq, 0);
	if (IS_ERR(opp)) {
		ret = PTR_ERR(opp);
		goto err_fini;
	}
	if (IS_ERR(opp))
		return PTR_ERR(opp);

	lima_devfreq_profile.initial_freq = cur_freq;
	dev_pm_opp_put(opp);
@@ -167,8 +147,7 @@ int lima_devfreq_init(struct lima_device *ldev)
					  DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
	if (IS_ERR(devfreq)) {
		dev_err(dev, "Couldn't initialize GPU devfreq\n");
		ret = PTR_ERR(devfreq);
		goto err_fini;
		return PTR_ERR(devfreq);
	}

	ldevfreq->devfreq = devfreq;
@@ -180,10 +159,6 @@ int lima_devfreq_init(struct lima_device *ldev)
		ldevfreq->cooling = cooling;

	return 0;

err_fini:
	lima_devfreq_fini(ldev);
	return ret;
}

void lima_devfreq_record_busy(struct lima_devfreq *devfreq)
+0 −3
Original line number Diff line number Diff line
@@ -8,15 +8,12 @@
#include <linux/ktime.h>

struct devfreq;
struct opp_table;
struct thermal_cooling_device;

struct lima_device;

struct lima_devfreq {
	struct devfreq *devfreq;
	struct opp_table *clkname_opp_table;
	struct opp_table *regulators_opp_table;
	struct thermal_cooling_device *cooling;

	ktime_t busy_time;