hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
kernel/drivers/video/rockchip/mpp/mpp_vepu1.c
....@@ -264,6 +264,7 @@
264264 u32 i;
265265 u32 reg_en;
266266 struct vepu_task *task = to_vepu_task(mpp_task);
267
+ u32 timing_en = mpp->srv->timing_en;
267268
268269 mpp_debug_enter();
269270
....@@ -282,12 +283,21 @@
282283
283284 mpp_write_req(mpp, task->reg, s, e, reg_en);
284285 }
286
+
287
+ /* flush tlb before starting hardware */
288
+ mpp_iommu_flush_tlb(mpp->iommu_info);
289
+
285290 /* init current task */
286291 mpp->cur_task = mpp_task;
292
+
293
+ mpp_task_run_begin(mpp_task, timing_en, MPP_WORK_TIMEOUT_DELAY);
294
+
287295 /* Last, flush start registers */
288296 wmb();
289297 mpp_write(mpp, VEPU1_REG_ENC_EN,
290298 task->reg[reg_en] | VEPU1_ENC_START);
299
+
300
+ mpp_task_run_end(mpp_task, timing_en);
291301
292302 mpp_debug_leave();
293303
....@@ -555,6 +565,10 @@
555565 enc->procfs = NULL;
556566 return -EIO;
557567 }
568
+
569
+ /* for common mpp_dev options */
570
+ mpp_procfs_create_common(enc->procfs, mpp);
571
+
558572 mpp_procfs_create_u32("aclk", 0644,
559573 enc->procfs, &enc->aclk_info.debug_rate_hz);
560574 mpp_procfs_create_u32("session_buffers", 0644,
....@@ -656,13 +670,13 @@
656670
657671 if (enc->rst_a && enc->rst_h) {
658672 /* Don't skip this or iommu won't work after reset */
659
- rockchip_pmu_idle_request(mpp->dev, true);
673
+ mpp_pmu_idle_request(mpp, true);
660674 mpp_safe_reset(enc->rst_a);
661675 mpp_safe_reset(enc->rst_h);
662676 udelay(5);
663677 mpp_safe_unreset(enc->rst_a);
664678 mpp_safe_unreset(enc->rst_h);
665
- rockchip_pmu_idle_request(mpp->dev, false);
679
+ mpp_pmu_idle_request(mpp, false);
666680 }
667681 mpp_write(mpp, VEPU1_REG_ENC_EN, 0);
668682