Lines Matching refs:mpp
87 container_of(dev, struct iep2_dev, mpp)
214 struct mpp_dev mpp; member
354 static void iep2_config(struct mpp_dev *mpp, struct iep_task *task) in iep2_config() argument
356 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_config()
369 mpp_write_relaxed(mpp, IEP2_REG_IEP_CONFIG0, reg); in iep2_config()
371 mpp_write_relaxed(mpp, IEP2_REG_WORK_MODE, IEP2_REG_IEP2_MODE); in iep2_config()
375 mpp_write_relaxed(mpp, IEP2_REG_SRC_IMG_SIZE, reg); in iep2_config()
379 mpp_write_relaxed(mpp, IEP2_REG_VIR_SRC_IMG_WIDTH, reg); in iep2_config()
382 mpp_write_relaxed(mpp, IEP2_REG_VIR_DST_IMG_WIDTH, reg); in iep2_config()
399 mpp_write_relaxed(mpp, IEP2_REG_DIL_CONFIG0, reg); in iep2_config()
402 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_CURY, in iep2_config()
404 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_CURUV, in iep2_config()
406 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_CURV, in iep2_config()
409 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_NXTY, in iep2_config()
411 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_NXTUV, in iep2_config()
413 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_NXTV, in iep2_config()
434 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_CURY, top->y); in iep2_config()
435 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_CURUV, top->cbcr); in iep2_config()
436 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_CURV, top->cr); in iep2_config()
437 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_NXTY, bot->y); in iep2_config()
438 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_NXTUV, bot->cbcr); in iep2_config()
439 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_NXTV, bot->cr); in iep2_config()
443 mpp_write_relaxed(mpp, IEP2_REG_TIMEOUT_CFG, reg); in iep2_config()
445 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_PREY, cfg->src[2].y); in iep2_config()
446 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_PREUV, cfg->src[2].cbcr); in iep2_config()
447 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_PREV, cfg->src[2].cr); in iep2_config()
449 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_MD, cfg->md_addr); in iep2_config()
450 mpp_write_relaxed(mpp, IEP2_REG_SRC_ADDR_MV, cfg->mv_addr); in iep2_config()
451 mpp_write_relaxed(mpp, IEP2_REG_DST_ADDR_MD, cfg->md_addr); in iep2_config()
452 mpp_write_relaxed(mpp, IEP2_REG_DST_ADDR_MV, cfg->mv_addr); in iep2_config()
453 mpp_write_relaxed(mpp, IEP2_REG_ROI_ADDR, (u32)iep->roi.iova); in iep2_config()
455 mpp_write_relaxed(mpp, IEP2_REG_DST_ADDR_TOPY, cfg->dst[0].y); in iep2_config()
456 mpp_write_relaxed(mpp, IEP2_REG_DST_ADDR_TOPC, cfg->dst[0].cbcr); in iep2_config()
457 mpp_write_relaxed(mpp, IEP2_REG_DST_ADDR_BOTY, cfg->dst[1].y); in iep2_config()
458 mpp_write_relaxed(mpp, IEP2_REG_DST_ADDR_BOTC, cfg->dst[1].cbcr); in iep2_config()
463 mpp_write_relaxed(mpp, IEP2_REG_MD_CONFIG0, reg); in iep2_config()
469 mpp_write_relaxed(mpp, IEP2_REG_DECT_CONFIG0, reg); in iep2_config()
474 mpp_write_relaxed(mpp, IEP2_REG_OSD_LIMIT_CONFIG, reg); in iep2_config()
476 mpp_write_relaxed(mpp, IEP2_REG_OSD_LIMIT_AREA(0), in iep2_config()
478 mpp_write_relaxed(mpp, IEP2_REG_OSD_LIMIT_AREA(1), in iep2_config()
483 mpp_write_relaxed(mpp, IEP2_REG_OSD_CONFIG0, reg); in iep2_config()
490 mpp_write_relaxed(mpp, IEP2_REG_ME_CONFIG0, reg); in iep2_config()
494 mpp_write_relaxed(mpp, IEP2_REG_ME_LIMIT_CONFIG, reg); in iep2_config()
496 mpp_write_relaxed(mpp, IEP2_REG_EEDI_CONFIG0, in iep2_config()
498 mpp_write_relaxed(mpp, IEP2_REG_BLE_CONFIG0, in iep2_config()
502 static void iep2_osd_cfg(struct mpp_dev *mpp, struct iep_task *task) in iep2_osd_cfg() argument
513 mpp_write_relaxed(mpp, IEP2_REG_OSD_AREA_CONF(i), reg); in iep2_osd_cfg()
517 mpp_write_relaxed(mpp, IEP2_REG_OSD_AREA_CONF(i), 0); in iep2_osd_cfg()
520 static void iep2_mtn_tab_cfg(struct mpp_dev *mpp, struct iep_task *task) in iep2_mtn_tab_cfg() argument
527 mpp_write_relaxed(mpp, IEP2_REG_DIL_MTN_TAB(i), mtn_tab[i]); in iep2_mtn_tab_cfg()
537 static void iep2_tru_list_cfg(struct mpp_dev *mpp, struct iep_task *task) in iep2_tru_list_cfg() argument
562 mpp_write_relaxed(mpp, IEP2_REG_MV_TRU_LIST(i / 4), reg); in iep2_tru_list_cfg()
566 static void iep2_comb_cfg(struct mpp_dev *mpp, struct iep_task *task) in iep2_comb_cfg() argument
580 mpp_write_relaxed(mpp, IEP2_REG_COMB_CONFIG0, reg); in iep2_comb_cfg()
583 static int iep2_run(struct mpp_dev *mpp, in iep2_run() argument
587 u32 timing_en = mpp->srv->timing_en; in iep2_run()
594 mpp->cur_task = mpp_task; in iep2_run()
596 iep2_config(mpp, task); in iep2_run()
597 iep2_osd_cfg(mpp, task); in iep2_run()
598 iep2_mtn_tab_cfg(mpp, task); in iep2_run()
599 iep2_tru_list_cfg(mpp, task); in iep2_run()
600 iep2_comb_cfg(mpp, task); in iep2_run()
603 mpp_write_relaxed(mpp, IEP2_REG_INT_EN, in iep2_run()
610 mpp_iommu_flush_tlb(mpp->iommu_info); in iep2_run()
617 mpp_write(mpp, IEP2_REG_FRM_START, 1); in iep2_run()
626 static int iep2_irq(struct mpp_dev *mpp) in iep2_irq() argument
628 u32 work_mode = mpp_read(mpp, IEP2_REG_WORK_MODE); in iep2_irq()
632 mpp->irq_status = mpp_read(mpp, IEP2_REG_INT_STS); in iep2_irq()
633 mpp_write(mpp, IEP2_REG_INT_CLR, 0xffffffff); in iep2_irq()
635 if (!IEP2_REG_RO_VALID_INT_STS(mpp->irq_status)) in iep2_irq()
641 static int iep2_isr(struct mpp_dev *mpp) in iep2_isr() argument
645 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_isr()
647 mpp_task = mpp->cur_task; in iep2_isr()
650 dev_err(iep->mpp.dev, "no current task\n"); in iep2_isr()
655 mpp->cur_task = NULL; in iep2_isr()
656 task->irq_status = mpp->irq_status; in iep2_isr()
662 atomic_inc(&mpp->reset_request); in iep2_isr()
671 static void iep2_osd_done(struct mpp_dev *mpp, struct iep_task *task) in iep2_osd_done() argument
677 reg = mpp_read(mpp, IEP2_REG_RO_OSD_AREA_X(i)); in iep2_osd_done()
681 reg = mpp_read(mpp, IEP2_REG_RO_OSD_AREA_Y(i)); in iep2_osd_done()
694 static int iep2_finish(struct mpp_dev *mpp, in iep2_finish() argument
704 output->dect_pd_tcnt = mpp_read(mpp, IEP2_REG_RO_PD_TCNT); in iep2_finish()
705 output->dect_pd_bcnt = mpp_read(mpp, IEP2_REG_RO_PD_BCNT); in iep2_finish()
706 output->dect_ff_cur_tcnt = mpp_read(mpp, IEP2_REG_RO_FF_CUR_TCNT); in iep2_finish()
707 output->dect_ff_cur_bcnt = mpp_read(mpp, IEP2_REG_RO_FF_CUR_BCNT); in iep2_finish()
708 output->dect_ff_nxt_tcnt = mpp_read(mpp, IEP2_REG_RO_FF_NXT_TCNT); in iep2_finish()
709 output->dect_ff_nxt_bcnt = mpp_read(mpp, IEP2_REG_RO_FF_NXT_BCNT); in iep2_finish()
710 output->dect_ff_ble_tcnt = mpp_read(mpp, IEP2_REG_RO_FF_BLE_TCNT); in iep2_finish()
711 output->dect_ff_ble_bcnt = mpp_read(mpp, IEP2_REG_RO_FF_BLE_BCNT); in iep2_finish()
712 output->dect_ff_nz = mpp_read(mpp, IEP2_REG_RO_FF_COMB_NZ); in iep2_finish()
713 output->dect_ff_comb_f = mpp_read(mpp, IEP2_REG_RO_FF_COMB_F); in iep2_finish()
714 output->dect_osd_cnt = mpp_read(mpp, IEP2_REG_RO_OSD_NUM); in iep2_finish()
716 reg = mpp_read(mpp, IEP2_REG_RO_COMB_CNT); in iep2_finish()
719 output->ff_gradt_tcnt = mpp_read(mpp, IEP2_REG_RO_FF_GRADT_TCNT); in iep2_finish()
720 output->ff_gradt_bcnt = mpp_read(mpp, IEP2_REG_RO_FF_GRADT_BCNT); in iep2_finish()
722 iep2_osd_done(mpp, task); in iep2_finish()
725 reg = mpp_read(mpp, IEP2_REG_RO_MV_HIST_BIN(i / 2)); in iep2_finish()
735 static int iep2_result(struct mpp_dev *mpp, in iep2_result() argument
768 static int iep2_procfs_remove(struct mpp_dev *mpp) in iep2_procfs_remove() argument
770 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_procfs_remove()
780 static int iep2_procfs_init(struct mpp_dev *mpp) in iep2_procfs_init() argument
782 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_procfs_init()
784 iep->procfs = proc_mkdir(mpp->dev->of_node->name, mpp->srv->procfs); in iep2_procfs_init()
792 mpp_procfs_create_common(iep->procfs, mpp); in iep2_procfs_init()
797 iep->procfs, &mpp->session_max_buffers); in iep2_procfs_init()
802 static inline int iep2_procfs_remove(struct mpp_dev *mpp) in iep2_procfs_remove() argument
807 static inline int iep2_procfs_init(struct mpp_dev *mpp) in iep2_procfs_init() argument
816 static int iep2_init(struct mpp_dev *mpp) in iep2_init() argument
819 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_init()
821 mpp->grf_info = &mpp->srv->grf_infos[MPP_DRIVER_IEP2]; in iep2_init()
824 ret = mpp_get_clk_info(mpp, &iep->aclk_info, "aclk"); in iep2_init()
827 ret = mpp_get_clk_info(mpp, &iep->hclk_info, "hclk"); in iep2_init()
830 ret = mpp_get_clk_info(mpp, &iep->sclk_info, "sclk"); in iep2_init()
836 iep->rst_a = mpp_reset_control_get(mpp, RST_TYPE_A, "rst_a"); in iep2_init()
839 iep->rst_h = mpp_reset_control_get(mpp, RST_TYPE_H, "rst_h"); in iep2_init()
842 iep->rst_s = mpp_reset_control_get(mpp, RST_TYPE_CORE, "rst_s"); in iep2_init()
847 iep->roi.vaddr = dma_alloc_coherent(mpp->dev, iep->roi.size, in iep2_init()
851 dev_err(mpp->dev, "allocate roi buffer failed\n"); in iep2_init()
858 static int iep2_clk_on(struct mpp_dev *mpp) in iep2_clk_on() argument
860 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_clk_on()
869 static int iep2_clk_off(struct mpp_dev *mpp) in iep2_clk_off() argument
871 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_clk_off()
880 static int iep2_set_freq(struct mpp_dev *mpp, in iep2_set_freq() argument
883 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_set_freq()
891 static int iep2_reset(struct mpp_dev *mpp) in iep2_reset() argument
893 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_reset()
899 mpp_write(mpp, IEP2_REG_IEP_CONFIG0, IEP2_REG_ACLK_SRESET_P); in iep2_reset()
900 ret = readl_relaxed_poll_timeout(mpp->reg_base + IEP2_REG_STATUS, in iep2_reset()
908 mpp_pmu_idle_request(mpp, true); in iep2_reset()
916 mpp_pmu_idle_request(mpp, false); in iep2_reset()
970 struct mpp_dev *mpp = NULL; in iep2_probe() local
979 mpp = &iep->mpp; in iep2_probe()
980 platform_set_drvdata(pdev, mpp); in iep2_probe()
985 mpp->var = (struct mpp_dev_var *)match->data; in iep2_probe()
988 ret = mpp_dev_probe(mpp, pdev); in iep2_probe()
994 ret = devm_request_threaded_irq(dev, mpp->irq, in iep2_probe()
998 dev_name(dev), mpp); in iep2_probe()
1004 mpp->session_max_buffers = IEP2_SESSION_MAX_BUFFERS; in iep2_probe()
1005 iep2_procfs_init(mpp); in iep2_probe()
1007 mpp_dev_register_srv(mpp, mpp->srv); in iep2_probe()
1016 struct mpp_dev *mpp = dev_get_drvdata(dev); in iep2_remove() local
1017 struct iep2_dev *iep = to_iep2_dev(mpp); in iep2_remove()
1022 mpp_dev_remove(mpp); in iep2_remove()
1023 iep2_procfs_remove(mpp); in iep2_remove()