hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/video/rockchip/mpp/mpp_vepu2.c
....@@ -287,6 +287,7 @@
287287 u32 i;
288288 u32 reg_en;
289289 struct vepu_task *task = to_vepu_task(mpp_task);
290
+ u32 timing_en = mpp->srv->timing_en;
290291
291292 mpp_debug_enter();
292293
....@@ -305,12 +306,21 @@
305306
306307 mpp_write_req(mpp, task->reg, s, e, reg_en);
307308 }
309
+
310
+ /* flush tlb before starting hardware */
311
+ mpp_iommu_flush_tlb(mpp->iommu_info);
312
+
308313 /* init current task */
309314 mpp->cur_task = mpp_task;
315
+
316
+ mpp_task_run_begin(mpp_task, timing_en, MPP_WORK_TIMEOUT_DELAY);
317
+
310318 /* Last, flush the registers */
311319 wmb();
312320 mpp_write(mpp, VEPU2_REG_ENC_EN,
313321 task->reg[reg_en] | VEPU2_ENC_START);
322
+
323
+ mpp_task_run_end(mpp_task, timing_en);
314324
315325 mpp_debug_leave();
316326
....@@ -578,6 +588,10 @@
578588 enc->procfs = NULL;
579589 return -EIO;
580590 }
591
+
592
+ /* for common mpp_dev options */
593
+ mpp_procfs_create_common(enc->procfs, mpp);
594
+
581595 mpp_procfs_create_u32("aclk", 0644,
582596 enc->procfs, &enc->aclk_info.debug_rate_hz);
583597 mpp_procfs_create_u32("session_buffers", 0644,
....@@ -722,15 +736,17 @@
722736 {
723737 struct vepu_dev *enc = to_vepu_dev(mpp);
724738
739
+ mpp_write(mpp, VEPU2_REG_ENC_EN, 0);
740
+ udelay(5);
725741 if (enc->rst_a && enc->rst_h) {
726742 /* Don't skip this or iommu won't work after reset */
727
- rockchip_pmu_idle_request(mpp->dev, true);
743
+ mpp_pmu_idle_request(mpp, true);
728744 mpp_safe_reset(enc->rst_a);
729745 mpp_safe_reset(enc->rst_h);
730746 udelay(5);
731747 mpp_safe_unreset(enc->rst_a);
732748 mpp_safe_unreset(enc->rst_h);
733
- rockchip_pmu_idle_request(mpp->dev, false);
749
+ mpp_pmu_idle_request(mpp, false);
734750 }
735751 mpp_write(mpp, VEPU2_REG_INT, VEPU2_INT_CLEAR);
736752