Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f969369 authored by Harshdeep Dhatt's avatar Harshdeep Dhatt
Browse files

msm: kgsl: Vote for l3 via icc_set_bw



Henceforth, l3 clock is scaled using icc api instead
of the clock api.

Change-Id: I0de3250ed402b940dfb5991ea837edb98734529a
Signed-off-by: default avatarHarshdeep Dhatt <hdhatt@codeaurora.org>
parent eef17de5
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -1034,13 +1034,11 @@ l3_pwrlevel_probe(struct kgsl_device *device, struct device_node *node)
				&device->l3_freq[index]);
	}

	device->l3_clk = devm_clk_get(&device->pdev->dev, "l3_vote");
	device->l3_icc = of_icc_get(&device->pdev->dev, "l3_path");

	if (IS_ERR_OR_NULL(device->l3_clk)) {
	if (IS_ERR(device->l3_icc))
		dev_err(&device->pdev->dev,
			"Unable to get the l3_vote clock\n");
		device->l3_clk = NULL;
	}
			"Unable to get the l3 icc path\n");
}

static int adreno_of_get_power(struct adreno_device *adreno_dev,
+2 −0
Original line number Diff line number Diff line
@@ -3103,6 +3103,8 @@ static int a6xx_power_off(struct adreno_device *adreno_dev)

	kgsl_pwrscale_sleep(device);

	kgsl_pwrctrl_clear_l3_vote(device);

	trace_kgsl_pwr_set_state(device, KGSL_STATE_SLUMBER);

	return ret;
+2 −0
Original line number Diff line number Diff line
@@ -654,6 +654,8 @@ static int a6xx_hwsched_power_off(struct adreno_device *adreno_dev)

	kgsl_pwrscale_sleep(device);

	kgsl_pwrctrl_clear_l3_vote(device);

	trace_kgsl_pwr_set_state(device, KGSL_STATE_SLUMBER);

	return ret;
+1 −0
Original line number Diff line number Diff line
@@ -711,6 +711,7 @@ static void a6xx_rgmu_power_off(struct adreno_device *adreno_dev)
	a6xx_rgmu_disable_clks(adreno_dev);
	a6xx_rgmu_disable_gdsc(adreno_dev);

	kgsl_pwrctrl_clear_l3_vote(device);
}

static int a6xx_rgmu_clock_set(struct adreno_device *adreno_dev,
+12 −5
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
 * Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved.
 */

#include <linux/interconnect.h>
#include <linux/sched/clock.h>
#include <linux/slab.h>

@@ -753,9 +754,9 @@ static void adreno_ringbuffer_set_constraint(struct kgsl_device *device,
		((context->flags & KGSL_CONTEXT_PWR_CONSTRAINT) ||
			(flags & KGSL_CONTEXT_PWR_CONSTRAINT))) {

		if (device->l3_clk == NULL) {
		if (IS_ERR(device->l3_icc)) {
			dev_err_once(device->dev,
				"l3_vote clk not available\n");
				"l3_icc path not available\n");
			return;
		}

@@ -776,15 +777,21 @@ static void adreno_ringbuffer_set_constraint(struct kgsl_device *device,
			new_l3 = min_t(unsigned int, new_l3,
					device->num_l3_pwrlevels - 1);

			ret = clk_set_rate(device->l3_clk,
			if (device->cur_l3_pwrlevel == new_l3)
				return;

			ret = icc_set_bw(device->l3_icc, 0,
					device->l3_freq[new_l3]);

			if (!ret)
			if (!ret) {
				trace_kgsl_constraint(device,
					KGSL_CONSTRAINT_L3_PWRLEVEL, new_l3, 1);
				device->cur_l3_pwrlevel = new_l3;
			else
			} else {
				dev_err_ratelimited(device->dev,
						       "Could not set l3_vote: %d\n",
						       ret);
			}
			break;
			}
		}
Loading