hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/video/rockchip/mpp/mpp_jpgdec.c
....@@ -251,6 +251,7 @@
251251 u32 i;
252252 u32 reg_en;
253253 struct jpgdec_task *task = to_jpgdec_task(mpp_task);
254
+ u32 timing_en = mpp->srv->timing_en;
254255
255256 mpp_debug_enter();
256257
....@@ -263,12 +264,21 @@
263264
264265 mpp_write_req(mpp, task->reg, s, e, reg_en);
265266 }
267
+
268
+ /* flush tlb before starting hardware */
269
+ mpp_iommu_flush_tlb(mpp->iommu_info);
270
+
266271 /* init current task */
267272 mpp->cur_task = mpp_task;
273
+
274
+ mpp_task_run_begin(mpp_task, timing_en, MPP_WORK_TIMEOUT_DELAY);
275
+
268276 /* Flush the register before the start the device */
269277 wmb();
270278 mpp_write(mpp, JPGDEC_REG_INT_EN_BASE,
271279 task->reg[reg_en] | JPGDEC_START_EN);
280
+
281
+ mpp_task_run_end(mpp_task, timing_en);
272282
273283 mpp_debug_leave();
274284
....@@ -374,6 +384,10 @@
374384 dec->procfs = NULL;
375385 return -EIO;
376386 }
387
+
388
+ /* for common mpp_dev options */
389
+ mpp_procfs_create_common(dec->procfs, mpp);
390
+
377391 mpp_procfs_create_u32("aclk", 0644,
378392 dec->procfs, &dec->aclk_info.debug_rate_hz);
379393 mpp_procfs_create_u32("session_buffers", 0644,
....@@ -510,13 +524,13 @@
510524 mpp_debug(DEBUG_RESET, "reset in\n");
511525
512526 /* Don't skip this or iommu won't work after reset */
513
- rockchip_pmu_idle_request(mpp->dev, true);
527
+ mpp_pmu_idle_request(mpp, true);
514528 mpp_safe_reset(dec->rst_a);
515529 mpp_safe_reset(dec->rst_h);
516530 udelay(5);
517531 mpp_safe_unreset(dec->rst_a);
518532 mpp_safe_unreset(dec->rst_h);
519
- rockchip_pmu_idle_request(mpp->dev, false);
533
+ mpp_pmu_idle_request(mpp, false);
520534
521535 mpp_debug(DEBUG_RESET, "reset out\n");
522536 }