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

Commit d8148fd6 authored by Suman Tatiraju's avatar Suman Tatiraju
Browse files

msm: kgsl: Turn off power resources only if SP/TP is collapsed



A430 has capability of collapsing SP/TP when idle. Check for the
power collapse status before turning off power resources.

Change-Id: Id67627820b18f7d89dbdf4fc00cfedf8f65e4ac2
Signed-off-by: default avatarSuman Tatiraju <sumant@codeaurora.org>
parent c267307b
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -2793,10 +2793,6 @@ bool adreno_hw_isidle(struct kgsl_device *device)
	struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
	struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);

	if (gpudev->is_sptp_idle)
		if (!gpudev->is_sptp_idle(adreno_dev))
			return false;

	adreno_readreg(adreno_dev, ADRENO_REG_RBBM_STATUS,
		&reg_rbbm_status);

@@ -3330,6 +3326,15 @@ static void adreno_regulator_enable(struct kgsl_device *device)
		gpudev->regulator_enable(adreno_dev);
}

static bool adreno_is_hw_collapsible(struct kgsl_device *device)
{
	struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
	struct adreno_gpudev *gpudev  = ADRENO_GPU_DEVICE(adreno_dev);

	return adreno_isidle(device) && (gpudev->is_sptp_idle ?
				gpudev->is_sptp_idle(adreno_dev) : true);
}

static const struct kgsl_functable adreno_functable = {
	/* Mandatory functions */
	.regread = adreno_regread,
@@ -3364,6 +3369,7 @@ static const struct kgsl_functable adreno_functable = {
	.enable_pc = adreno_enable_pc,
	.disable_pc = adreno_disable_pc,
	.regulator_enable = adreno_regulator_enable,
	.is_hw_collapsible = adreno_is_hw_collapsible,

};

+1 −0
Original line number Diff line number Diff line
@@ -183,6 +183,7 @@ struct kgsl_functable {
	void (*enable_pc)(struct kgsl_device *);
	void (*disable_pc)(struct kgsl_device *);
	void (*regulator_enable)(struct kgsl_device *);
	bool (*is_hw_collapsible)(struct kgsl_device *);
};

typedef long (*kgsl_ioctl_func_t)(struct kgsl_device_private *,
+3 −3
Original line number Diff line number Diff line
@@ -1344,7 +1344,7 @@ _nap(struct kgsl_device *device)
{
	switch (device->state) {
	case KGSL_STATE_ACTIVE:
		if (!device->ftbl->isidle(device)) {
		if (!device->ftbl->is_hw_collapsible(device)) {
			kgsl_pwrctrl_request_state(device, KGSL_STATE_NONE);
			return -EBUSY;
		}
@@ -1377,7 +1377,7 @@ _sleep(struct kgsl_device *device)
{
	switch (device->state) {
	case KGSL_STATE_ACTIVE:
		if (!device->ftbl->isidle(device)) {
		if (!device->ftbl->is_hw_collapsible(device)) {
			kgsl_pwrctrl_request_state(device, KGSL_STATE_NONE);
			return -EBUSY;
		}
@@ -1408,7 +1408,7 @@ _slumber(struct kgsl_device *device)
{
	switch (device->state) {
	case KGSL_STATE_ACTIVE:
		if (!device->ftbl->isidle(device)) {
		if (!device->ftbl->is_hw_collapsible(device)) {
			kgsl_pwrctrl_request_state(device, KGSL_STATE_NONE);
			return -EBUSY;
		}