summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-07-13 15:44:50 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-07-13 15:44:50 -0700
commita4e4aba7e44d6eccb2e69a3868d9af3b2f5204ba (patch)
tree818651631892fe5a5de184909dba1464df9fde35 /drivers
parent400520a6e2f06cc7c45e386e769a85d4aded565b (diff)
parent2b1343d5a52d54615f4d1c88fe75c4c0f614a9a3 (diff)
Merge "msm: vidc: pm qos stability fixes for video driver"
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/platform/msm/vidc/venus_hfi.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/media/platform/msm/vidc/venus_hfi.c b/drivers/media/platform/msm/vidc/venus_hfi.c
index 5525e35a029f..68c51c40c7cc 100644
--- a/drivers/media/platform/msm/vidc/venus_hfi.c
+++ b/drivers/media/platform/msm/vidc/venus_hfi.c
@@ -2218,9 +2218,14 @@ static int venus_hfi_core_init(void *device)
if (rc || __iface_cmdq_write(dev, &version_pkt))
dprintk(VIDC_WARN, "Failed to send image version pkt to f/w\n");
- if (dev->res->pm_qos_latency_us)
+ if (dev->res->pm_qos_latency_us) {
+#ifdef CONFIG_SMP
+ dev->qos.type = PM_QOS_REQ_AFFINE_IRQ;
+ dev->qos.irq = dev->hal_data->irq;
+#endif
pm_qos_add_request(&dev->qos, PM_QOS_CPU_DMA_LATENCY,
dev->res->pm_qos_latency_us);
+ }
mutex_unlock(&dev->lock);
return rc;
@@ -2244,7 +2249,8 @@ static int venus_hfi_core_release(void *dev)
mutex_lock(&device->lock);
- if (device->res->pm_qos_latency_us)
+ if (device->res->pm_qos_latency_us &&
+ pm_qos_request_active(&device->qos))
pm_qos_remove_request(&device->qos);
__set_state(device, VENUS_STATE_DEINIT);
__unload_fw(device);
@@ -4208,7 +4214,8 @@ static inline int __suspend(struct venus_hfi_device *device)
dprintk(VIDC_DBG, "Entering power collapse\n");
- if (device->res->pm_qos_latency_us)
+ if (device->res->pm_qos_latency_us &&
+ pm_qos_request_active(&device->qos))
pm_qos_remove_request(&device->qos);
rc = __tzbsp_set_video_state(TZBSP_VIDEO_STATE_SUSPEND);
@@ -4270,9 +4277,14 @@ static inline int __resume(struct venus_hfi_device *device)
*/
__set_threshold_registers(device);
- if (device->res->pm_qos_latency_us)
+ if (device->res->pm_qos_latency_us) {
+#ifdef CONFIG_SMP
+ device->qos.type = PM_QOS_REQ_AFFINE_IRQ;
+ device->qos.irq = device->hal_data->irq;
+#endif
pm_qos_add_request(&device->qos, PM_QOS_CPU_DMA_LATENCY,
device->res->pm_qos_latency_us);
+ }
dprintk(VIDC_INFO, "Resumed from power collapse\n");
exit:
device->skip_pc_count = 0;