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

Commit 99d5e9f6 authored by Dhaval Patel's avatar Dhaval Patel
Browse files

drm/msm/sde: manage sde pm_qos vote through atomic counter



SDE driver registers for single pm_qos node but uses it for
multiple command displays. That may lead to warnings if multiple
independent command mode displays try to keep vote at same time.
This change adds atomic refcount to add/remove the vote.

Change-Id: Idc5655bff2fea4a9724a6b9024e85ced46a9c4bc
Signed-off-by: default avatarDhaval Patel <pdhaval@codeaurora.org>
parent 61240ba4
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -308,6 +308,7 @@ static void _sde_encoder_pm_qos_add_request(struct drm_encoder *drm_enc)
	if (!cpu_mask)
		return;

	if (atomic_inc_return(&sde_kms->pm_qos_counts) == 1) {
		req = &sde_kms->pm_qos_cpu_req;
		req->type = PM_QOS_REQ_AFFINE_CORES;
		cpumask_empty(&req->cpus_affine);
@@ -315,7 +316,9 @@ static void _sde_encoder_pm_qos_add_request(struct drm_encoder *drm_enc)
			if ((1 << cpu) & cpu_mask)
				cpumask_set_cpu(cpu, &req->cpus_affine);
		}
	pm_qos_add_request(req, PM_QOS_CPU_DMA_LATENCY, cpu_dma_latency);
		pm_qos_add_request(req, PM_QOS_CPU_DMA_LATENCY,
							cpu_dma_latency);
	}

	SDE_EVT32_VERBOSE(DRMID(drm_enc), cpu_mask, cpu_dma_latency);
}
@@ -340,6 +343,8 @@ static void _sde_encoder_pm_qos_remove_request(struct drm_encoder *drm_enc)
	if (!sde_kms || !sde_kms->catalog || !sde_kms->catalog->perf.cpu_mask)
		return;

	atomic_add_unless(&sde_kms->pm_qos_counts, -1, 0);
	if (atomic_read(&sde_kms->pm_qos_counts) == 0)
		pm_qos_remove_request(&sde_kms->pm_qos_cpu_req);
}

+1 −0
Original line number Diff line number Diff line
@@ -3202,6 +3202,7 @@ static int sde_kms_hw_init(struct msm_kms *kms)
	mutex_init(&sde_kms->secure_transition_lock);
	atomic_set(&sde_kms->detach_sec_cb, 0);
	atomic_set(&sde_kms->detach_all_cb, 0);
	atomic_set(&sde_kms->pm_qos_counts, 0);

	/*
	 * Support format modifiers for compression etc.
+1 −0
Original line number Diff line number Diff line
@@ -225,6 +225,7 @@ struct sde_kms {
	struct msm_gem_address_space *aspace[MSM_SMMU_DOMAIN_MAX];
	struct sde_power_client *core_client;
	struct pm_qos_request pm_qos_cpu_req;
	atomic_t pm_qos_counts;

	struct sde_power_event *power_event;