hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/video/rockchip/mpp/mpp_rkvenc.c
....@@ -439,6 +439,7 @@
439439 int i;
440440 struct mpp_request *req;
441441 u32 reg_en = mpp_task->hw_info->reg_en;
442
+ u32 timing_en = mpp->srv->timing_en;
442443
443444 /*
444445 * Tips: ensure osd plt clock is 0 before setting register,
....@@ -466,11 +467,20 @@
466467 rkvenc_write_req_backward(mpp, task->reg, s, e, reg_en);
467468 }
468469 }
470
+
471
+ /* flush tlb before starting hardware */
472
+ mpp_iommu_flush_tlb(mpp->iommu_info);
473
+
469474 /* init current task */
470475 mpp->cur_task = mpp_task;
476
+
477
+ mpp_task_run_begin(mpp_task, timing_en, MPP_WORK_TIMEOUT_DELAY);
478
+
471479 /* Flush the register before the start the device */
472480 wmb();
473481 mpp_write(mpp, RKVENC_ENC_START_BASE, task->reg[reg_en]);
482
+
483
+ mpp_task_run_end(mpp_task, timing_en);
474484 } break;
475485 case RKVENC_MODE_LINKTABLE_FIX:
476486 case RKVENC_MODE_LINKTABLE_UPDATE:
....@@ -802,6 +812,10 @@
802812 enc->procfs = NULL;
803813 return -EIO;
804814 }
815
+
816
+ /* for common mpp_dev options */
817
+ mpp_procfs_create_common(enc->procfs, mpp);
818
+
805819 /* for debug */
806820 mpp_procfs_create_u32("aclk", 0644,
807821 enc->procfs, &enc->aclk_info.debug_rate_hz);
....@@ -1264,7 +1278,7 @@
12641278 mpp_write(mpp, RKVENC_INT_STATUS_BASE, 0);
12651279 /* cru reset */
12661280 if (enc->rst_a && enc->rst_h && enc->rst_core) {
1267
- rockchip_pmu_idle_request(mpp->dev, true);
1281
+ mpp_pmu_idle_request(mpp, true);
12681282 mpp_safe_reset(enc->rst_a);
12691283 mpp_safe_reset(enc->rst_h);
12701284 mpp_safe_reset(enc->rst_core);
....@@ -1272,7 +1286,7 @@
12721286 mpp_safe_unreset(enc->rst_a);
12731287 mpp_safe_unreset(enc->rst_h);
12741288 mpp_safe_unreset(enc->rst_core);
1275
- rockchip_pmu_idle_request(mpp->dev, false);
1289
+ mpp_pmu_idle_request(mpp, false);
12761290 }
12771291 #ifdef CONFIG_PM_DEVFREQ
12781292 if (enc->devfreq)