Disp: Snapshot change for lahaina display driver

This snapshot change adds downstream support
for drm 5.x+(msm_lahaina branch) linux kernel.

Change-Id: Ia691c95da155a00e449c91a2f1a5b20a8e71aed4
Signed-off-by: Narendra Muppalla <NarendraM@codeaurora.org>
This commit is contained in:
Narendra Muppalla
2019-05-02 10:04:31 -07:00
rodzic 1dc48c24cc
commit d1d9ae8b19
29 zmienionych plików z 292 dodań i 283 usunięć

Wyświetl plik

@@ -55,8 +55,6 @@
static void sde_rotator_submit_handler(struct kthread_work *work);
static void sde_rotator_retire_handler(struct kthread_work *work);
static void sde_rotator_pm_qos_request(struct sde_rotator_device *rot_dev,
bool add_request);
#ifdef CONFIG_COMPAT
static long sde_rotator_compat_ioctl32(struct file *file,
unsigned int cmd, unsigned long arg);
@@ -1001,8 +999,6 @@ struct sde_rotator_ctx *sde_rotator_ctx_open(
SDEDEV_DBG(ctx->rot_dev->dev, "timeline is not available\n");
sde_rot_mgr_lock(rot_dev->mgr);
sde_rotator_pm_qos_request(rot_dev,
SDE_ROTATOR_ADD_REQUEST);
ret = sde_rotator_session_open(rot_dev->mgr, &ctx->private,
ctx->session_id, &ctx->work_queue);
if (ret < 0) {
@@ -1127,8 +1123,6 @@ static int sde_rotator_ctx_release(struct sde_rotator_ctx *ctx,
}
SDEDEV_DBG(rot_dev->dev, "release session s:%d\n", session_id);
sde_rot_mgr_lock(rot_dev->mgr);
sde_rotator_pm_qos_request(rot_dev,
SDE_ROTATOR_REMOVE_REQUEST);
sde_rotator_session_close(rot_dev->mgr, ctx->private, session_id);
sde_rot_mgr_unlock(rot_dev->mgr);
SDEDEV_DBG(rot_dev->dev, "release retire work s:%d\n", session_id);
@@ -1243,104 +1237,6 @@ static bool sde_rotator_is_request_retired(struct sde_rotator_request *request)
return retire_delta >= 0;
}
static void sde_rotator_pm_qos_remove(struct sde_rot_data_type *rot_mdata)
{
struct pm_qos_request *req;
u32 cpu_mask;
if (!rot_mdata) {
SDEROT_DBG("invalid rot device or context\n");
return;
}
cpu_mask = rot_mdata->rot_pm_qos_cpu_mask;
if (!cpu_mask)
return;
req = &rot_mdata->pm_qos_rot_cpu_req;
pm_qos_remove_request(req);
}
void sde_rotator_pm_qos_add(struct sde_rot_data_type *rot_mdata)
{
struct pm_qos_request *req;
u32 cpu_mask;
int cpu;
if (!rot_mdata) {
SDEROT_DBG("invalid rot device or context\n");
return;
}
cpu_mask = rot_mdata->rot_pm_qos_cpu_mask;
if (!cpu_mask)
return;
req = &rot_mdata->pm_qos_rot_cpu_req;
req->type = PM_QOS_REQ_AFFINE_CORES;
cpumask_empty(&req->cpus_affine);
for_each_possible_cpu(cpu) {
if ((1 << cpu) & cpu_mask)
cpumask_set_cpu(cpu, &req->cpus_affine);
}
pm_qos_add_request(req, PM_QOS_CPU_DMA_LATENCY,
PM_QOS_DEFAULT_VALUE);
SDEROT_DBG("rotator pmqos add mask %x latency %x\n",
rot_mdata->rot_pm_qos_cpu_mask,
rot_mdata->rot_pm_qos_cpu_dma_latency);
}
static void sde_rotator_pm_qos_request(struct sde_rotator_device *rot_dev,
bool add_request)
{
u32 cpu_mask;
u32 cpu_dma_latency;
bool changed = false;
if (!rot_dev) {
SDEROT_DBG("invalid rot device or context\n");
return;
}
cpu_mask = rot_dev->mdata->rot_pm_qos_cpu_mask;
cpu_dma_latency = rot_dev->mdata->rot_pm_qos_cpu_dma_latency;
if (!cpu_mask)
return;
if (add_request) {
if (rot_dev->mdata->rot_pm_qos_cpu_count == 0)
changed = true;
rot_dev->mdata->rot_pm_qos_cpu_count++;
} else {
if (rot_dev->mdata->rot_pm_qos_cpu_count != 0) {
rot_dev->mdata->rot_pm_qos_cpu_count--;
if (rot_dev->mdata->rot_pm_qos_cpu_count == 0)
changed = true;
} else {
SDEROT_DBG("%s: ref_count is not balanced\n",
__func__);
}
}
if (!changed)
return;
SDEROT_EVTLOG(add_request, cpu_mask, cpu_dma_latency);
if (!add_request) {
pm_qos_update_request(&rot_dev->mdata->pm_qos_rot_cpu_req,
PM_QOS_DEFAULT_VALUE);
return;
}
pm_qos_update_request(&rot_dev->mdata->pm_qos_rot_cpu_req,
cpu_dma_latency);
}
/*
* sde_rotator_inline_open - open inline rotator session
* @pdev: Pointer to rotator platform device
@@ -3689,7 +3585,6 @@ static int sde_rotator_remove(struct platform_device *pdev)
return 0;
}
sde_rotator_pm_qos_remove(rot_dev->mdata);
for (i = MAX_ROT_OPEN_SESSION - 1; i >= 0; i--)
kthread_stop(rot_dev->rot_thread[i]);
sde_rotator_destroy_debugfs(rot_dev->debugfs_root);