msm/sde/rotator: Remove unneeded PM QoS requests

When the rotator is actually used (still an unsolved question in
computer science), these PM QoS requests block some CPUs in the LITTLE
cluster from entering deep idle because the driver assumes that display
rotating work occurs on a hardcoded set of CPUs, which is false. We
already have the IRQ PM QoS machinery for display rendering operations
that actually matter, so this cruft is unneeded.

Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
Signed-off-by: Ruchit <ruchitmarathe@gmail.com>
fourteen
Sultan Alsawaf 4 years ago committed by Jenna
parent 7b2c91efe3
commit fe593f6bc0
  1. 8
      drivers/media/platform/msm/sde/rotator/sde_rotator_base.c
  2. 6
      drivers/media/platform/msm/sde/rotator/sde_rotator_base.h
  3. 2
      drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
  4. 110
      drivers/media/platform/msm/sde/rotator/sde_rotator_dev.c
  5. 2
      drivers/media/platform/msm/sde/rotator/sde_rotator_dev.h

@ -802,14 +802,6 @@ static int sde_mdp_parse_dt_misc(struct platform_device *pdev,
sde_mdp_parse_inline_rot_lut_setting(pdev, mdata);
rc = of_property_read_u32(pdev->dev.of_node,
"qcom,mdss-rot-qos-cpu-mask", &data);
mdata->rot_pm_qos_cpu_mask = (!rc ? data : 0);
rc = of_property_read_u32(pdev->dev.of_node,
"qcom,mdss-rot-qos-cpu-dma-latency", &data);
mdata->rot_pm_qos_cpu_dma_latency = (!rc ? data : 0);
mdata->mdp_base = mdata->sde_io.base + SDE_MDP_OFFSET;
return 0;

@ -25,7 +25,6 @@
#include "sde_rotator_io_util.h"
#include "sde_rotator_smmu.h"
#include "sde_rotator_formats.h"
#include <linux/pm_qos.h>
/* HW Revisions for different targets */
#define SDE_GET_MAJOR_REV(rev) ((rev) >> 28)
@ -270,11 +269,6 @@ struct sde_rot_data_type {
u32 vbif_xin_id[MAX_XIN];
struct pm_qos_request pm_qos_rot_cpu_req;
u32 rot_pm_qos_cpu_count;
u32 rot_pm_qos_cpu_mask;
u32 rot_pm_qos_cpu_dma_latency;
u32 vbif_memtype_count;
u32 *vbif_memtype;

@ -3207,8 +3207,6 @@ int sde_rotator_core_init(struct sde_rot_mgr **pmgr,
goto error_hw_init;
}
sde_rotator_pm_qos_add(mdata);
ret = sde_rotator_init_queue(mgr);
if (ret) {
SDEROT_ERR("fail to init queue\n");

@ -55,15 +55,8 @@
#define SDE_ROTATOR_DEGREE_180 180
#define SDE_ROTATOR_DEGREE_90 90
/* Inline rotator qos request */
#define SDE_ROTATOR_ADD_REQUEST 1
#define SDE_ROTATOR_REMOVE_REQUEST 0
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);
@ -1049,8 +1042,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) {
@ -1175,8 +1166,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);
@ -1291,104 +1280,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
@ -3726,7 +3617,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);

@ -260,6 +260,4 @@ struct sde_rot_mgr *sde_rot_mgr_from_device(struct device *dev)
return ((struct sde_rotator_device *) dev_get_drvdata(dev))->mgr;
}
void sde_rotator_pm_qos_add(struct sde_rot_data_type *rot_mdata);
#endif /* __SDE_ROTATOR_DEV_H__ */

Loading…
Cancel
Save