Lines Matching refs:dec

199 	struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp);  in mpp_set_rcbbuf()  local
204 if (priv && dec->rcb_iova) { in mpp_set_rcbbuf()
210 if (width < dec->rcb_min_width) in mpp_set_rcbbuf()
217 if ((rcb_offset + rcb_size) > dec->rcb_size) { in mpp_set_rcbbuf()
224 task->reg[reg_idx] = dec->rcb_iova + rcb_offset; in mpp_set_rcbbuf()
418 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_isr() local
426 mpp_time_diff_with_hw_time(mpp_task, dec->cycle_clk->real_rate_hz); in rkvdec2_isr()
642 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_procfs_remove() local
644 if (dec->procfs) { in rkvdec2_procfs_remove()
645 proc_remove(dec->procfs); in rkvdec2_procfs_remove()
646 dec->procfs = NULL; in rkvdec2_procfs_remove()
661 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_procfs_init() local
670 dec->procfs = proc_mkdir(name, mpp->srv->procfs); in rkvdec2_procfs_init()
671 if (IS_ERR_OR_NULL(dec->procfs)) { in rkvdec2_procfs_init()
673 dec->procfs = NULL; in rkvdec2_procfs_init()
678 mpp_procfs_create_common(dec->procfs, mpp); in rkvdec2_procfs_init()
681 dec->procfs, &dec->aclk_info.debug_rate_hz); in rkvdec2_procfs_init()
683 dec->procfs, &dec->core_clk_info.debug_rate_hz); in rkvdec2_procfs_init()
685 dec->procfs, &dec->cabac_clk_info.debug_rate_hz); in rkvdec2_procfs_init()
687 dec->procfs, &dec->hevc_cabac_clk_info.debug_rate_hz); in rkvdec2_procfs_init()
689 dec->procfs, &mpp->session_max_buffers); in rkvdec2_procfs_init()
691 dec->procfs, rkvdec2_show_pref_sel_offset); in rkvdec2_procfs_init()
693 dec->procfs, &mpp->task_index); in rkvdec2_procfs_init()
717 struct rkvdec2_dev *dec = dev_get_drvdata(dev); in rkvdec2_devfreq_target() local
718 struct devfreq *devfreq = dec->devfreq; in rkvdec2_devfreq_target()
732 dec->core_last_rate_hz = target_freq; in rkvdec2_devfreq_target()
733 if (dec->volt == target_volt) in rkvdec2_devfreq_target()
735 ret = regulator_set_voltage(dec->vdd, target_volt, INT_MAX); in rkvdec2_devfreq_target()
741 dec->volt = target_volt; in rkvdec2_devfreq_target()
746 ret = regulator_set_voltage(dec->vdd, target_volt, INT_MAX); in rkvdec2_devfreq_target()
754 clk_set_rate(dec->core_clk_info.clk, target_freq); in rkvdec2_devfreq_target()
756 dec->core_last_rate_hz = target_freq; in rkvdec2_devfreq_target()
759 ret = regulator_set_voltage(dec->vdd, target_volt, INT_MAX); in rkvdec2_devfreq_target()
765 dec->volt = target_volt; in rkvdec2_devfreq_target()
779 struct rkvdec2_dev *dec = dev_get_drvdata(dev); in rkvdec2_devfreq_get_cur_freq() local
781 *freq = dec->core_last_rate_hz; in rkvdec2_devfreq_get_cur_freq()
794 struct rkvdec2_dev *dec = df->data; in devfreq_vdec2_ondemand_func() local
796 if (dec) in devfreq_vdec2_ondemand_func()
797 *freq = dec->core_rate_hz; in devfreq_vdec2_ondemand_func()
819 struct rkvdec2_dev *dec = devfreq->data; in rkvdec2_get_static_power() local
821 if (!dec->model_data) in rkvdec2_get_static_power()
824 return rockchip_ipa_get_static_power(dec->model_data, in rkvdec2_get_static_power()
840 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_devfreq_init() local
841 struct clk *clk_core = dec->core_clk_info.clk; in rkvdec2_devfreq_init()
848 dec->vdd = devm_regulator_get_optional(mpp->dev, "vdec"); in rkvdec2_devfreq_init()
849 if (IS_ERR_OR_NULL(dec->vdd)) { in rkvdec2_devfreq_init()
850 if (PTR_ERR(dec->vdd) == -EPROBE_DEFER) { in rkvdec2_devfreq_init()
874 dec->devfreq = devm_devfreq_add_device(mpp->dev, in rkvdec2_devfreq_init()
876 "vdec2_ondemand", (void *)dec); in rkvdec2_devfreq_init()
877 if (IS_ERR(dec->devfreq)) { in rkvdec2_devfreq_init()
878 ret = PTR_ERR(dec->devfreq); in rkvdec2_devfreq_init()
879 dec->devfreq = NULL; in rkvdec2_devfreq_init()
882 dec->devfreq->last_status.total_time = 1; in rkvdec2_devfreq_init()
883 dec->devfreq->last_status.busy_time = 1; in rkvdec2_devfreq_init()
885 devfreq_register_opp_notifier(mpp->dev, dec->devfreq); in rkvdec2_devfreq_init()
889 dec->model_data = rockchip_ipa_power_model_init(mpp->dev, in rkvdec2_devfreq_init()
891 if (IS_ERR_OR_NULL(dec->model_data)) { in rkvdec2_devfreq_init()
892 dec->model_data = NULL; in rkvdec2_devfreq_init()
894 } else if (dec->model_data->dynamic_coefficient) { in rkvdec2_devfreq_init()
896 dec->model_data->dynamic_coefficient; in rkvdec2_devfreq_init()
903 dec->devfreq_cooling = in rkvdec2_devfreq_init()
905 dec->devfreq, vdec2_dcp); in rkvdec2_devfreq_init()
906 if (IS_ERR_OR_NULL(dec->devfreq_cooling)) in rkvdec2_devfreq_init()
909 vdec2_mdevp.data = dec->devfreq; in rkvdec2_devfreq_init()
910 dec->mdev_info = rockchip_system_monitor_register(mpp->dev, &vdec2_mdevp); in rkvdec2_devfreq_init()
911 if (IS_ERR(dec->mdev_info)) { in rkvdec2_devfreq_init()
913 dec->mdev_info = NULL; in rkvdec2_devfreq_init()
929 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_devfreq_remove() local
931 if (dec->mdev_info) in rkvdec2_devfreq_remove()
932 rockchip_system_monitor_unregister(dec->mdev_info); in rkvdec2_devfreq_remove()
933 if (dec->devfreq) { in rkvdec2_devfreq_remove()
934 devfreq_unregister_opp_notifier(mpp->dev, dec->devfreq); in rkvdec2_devfreq_remove()
944 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in mpp_devfreq_set_core_rate() local
946 if (dec->devfreq) { in mpp_devfreq_set_core_rate()
949 mutex_lock(&dec->devfreq->lock); in mpp_devfreq_set_core_rate()
950 core_rate_hz = mpp_get_clk_info_rate_hz(&dec->core_clk_info, mode); in mpp_devfreq_set_core_rate()
951 if (dec->core_rate_hz != core_rate_hz) { in mpp_devfreq_set_core_rate()
952 dec->core_rate_hz = core_rate_hz; in mpp_devfreq_set_core_rate()
953 update_devfreq(dec->devfreq); in mpp_devfreq_set_core_rate()
955 mutex_unlock(&dec->devfreq->lock); in mpp_devfreq_set_core_rate()
958 mpp_clk_set_rate(&dec->core_clk_info, mode); in mpp_devfreq_set_core_rate()
973 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in mpp_devfreq_set_core_rate() local
975 mpp_clk_set_rate(&dec->core_clk_info, mode); in mpp_devfreq_set_core_rate()
982 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_init() local
984 mutex_init(&dec->sip_reset_lock); in rkvdec2_init()
988 ret = mpp_get_clk_info(mpp, &dec->aclk_info, "aclk_vcodec"); in rkvdec2_init()
991 ret = mpp_get_clk_info(mpp, &dec->hclk_info, "hclk_vcodec"); in rkvdec2_init()
994 ret = mpp_get_clk_info(mpp, &dec->core_clk_info, "clk_core"); in rkvdec2_init()
997 ret = mpp_get_clk_info(mpp, &dec->cabac_clk_info, "clk_cabac"); in rkvdec2_init()
1000 ret = mpp_get_clk_info(mpp, &dec->hevc_cabac_clk_info, "clk_hevc_cabac"); in rkvdec2_init()
1004 mpp_set_clk_info_rate_hz(&dec->aclk_info, CLK_MODE_DEFAULT, 300 * MHZ); in rkvdec2_init()
1005 mpp_set_clk_info_rate_hz(&dec->core_clk_info, CLK_MODE_DEFAULT, 200 * MHZ); in rkvdec2_init()
1006 mpp_set_clk_info_rate_hz(&dec->cabac_clk_info, CLK_MODE_DEFAULT, 200 * MHZ); in rkvdec2_init()
1007 mpp_set_clk_info_rate_hz(&dec->hevc_cabac_clk_info, CLK_MODE_DEFAULT, 300 * MHZ); in rkvdec2_init()
1009 dec->cycle_clk = &dec->aclk_info; in rkvdec2_init()
1012 "rockchip,default-max-load", &dec->default_max_load); in rkvdec2_init()
1014 dec->rst_a = mpp_reset_control_get(mpp, RST_TYPE_A, "video_a"); in rkvdec2_init()
1015 if (!dec->rst_a) in rkvdec2_init()
1017 dec->rst_h = mpp_reset_control_get(mpp, RST_TYPE_H, "video_h"); in rkvdec2_init()
1018 if (!dec->rst_h) in rkvdec2_init()
1020 dec->rst_niu_a = mpp_reset_control_get(mpp, RST_TYPE_NIU_A, "niu_a"); in rkvdec2_init()
1021 if (!dec->rst_niu_a) in rkvdec2_init()
1023 dec->rst_niu_h = mpp_reset_control_get(mpp, RST_TYPE_NIU_H, "niu_h"); in rkvdec2_init()
1024 if (!dec->rst_niu_h) in rkvdec2_init()
1026 dec->rst_core = mpp_reset_control_get(mpp, RST_TYPE_CORE, "video_core"); in rkvdec2_init()
1027 if (!dec->rst_core) in rkvdec2_init()
1029 dec->rst_cabac = mpp_reset_control_get(mpp, RST_TYPE_CABAC, "video_cabac"); in rkvdec2_init()
1030 if (!dec->rst_cabac) in rkvdec2_init()
1032 dec->rst_hevc_cabac = mpp_reset_control_get(mpp, RST_TYPE_HEVC_CABAC, "video_hevc_cabac"); in rkvdec2_init()
1033 if (!dec->rst_hevc_cabac) in rkvdec2_init()
1046 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_rk3568_init() local
1048 dec->fix = mpp_dma_alloc(mpp->dev, FIX_RK3568_BUF_SIZE); in rkvdec2_rk3568_init()
1049 ret = dec->fix ? 0 : -ENOMEM; in rkvdec2_rk3568_init()
1051 rkvdec2_3568_hack_data_setup(dec->fix); in rkvdec2_rk3568_init()
1062 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_rk3568_exit() local
1066 if (dec->fix) in rkvdec2_rk3568_exit()
1067 mpp_dma_free(dec->fix); in rkvdec2_rk3568_exit()
1074 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_clk_on() local
1076 mpp_clk_safe_enable(dec->aclk_info.clk); in rkvdec2_clk_on()
1077 mpp_clk_safe_enable(dec->hclk_info.clk); in rkvdec2_clk_on()
1078 mpp_clk_safe_enable(dec->core_clk_info.clk); in rkvdec2_clk_on()
1079 mpp_clk_safe_enable(dec->cabac_clk_info.clk); in rkvdec2_clk_on()
1080 mpp_clk_safe_enable(dec->hevc_cabac_clk_info.clk); in rkvdec2_clk_on()
1087 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_clk_off() local
1089 clk_disable_unprepare(dec->aclk_info.clk); in rkvdec2_clk_off()
1090 clk_disable_unprepare(dec->hclk_info.clk); in rkvdec2_clk_off()
1091 clk_disable_unprepare(dec->core_clk_info.clk); in rkvdec2_clk_off()
1092 clk_disable_unprepare(dec->cabac_clk_info.clk); in rkvdec2_clk_off()
1093 clk_disable_unprepare(dec->hevc_cabac_clk_info.clk); in rkvdec2_clk_off()
1104 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_get_freq() local
1108 if (!dec->default_max_load || !task->pixels) in rkvdec2_get_freq()
1125 if (workload > dec->default_max_load) in rkvdec2_get_freq()
1137 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_set_freq() local
1140 mpp_clk_set_rate(&dec->aclk_info, task->clk_mode); in rkvdec2_set_freq()
1141 mpp_clk_set_rate(&dec->cabac_clk_info, task->clk_mode); in rkvdec2_set_freq()
1142 mpp_clk_set_rate(&dec->hevc_cabac_clk_info, task->clk_mode); in rkvdec2_set_freq()
1186 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_reset() local
1195 if (ret && dec->rst_a && dec->rst_h) { in rkvdec2_reset()
1198 mpp_safe_reset(dec->rst_niu_a); in rkvdec2_reset()
1199 mpp_safe_reset(dec->rst_niu_h); in rkvdec2_reset()
1200 mpp_safe_reset(dec->rst_a); in rkvdec2_reset()
1201 mpp_safe_reset(dec->rst_h); in rkvdec2_reset()
1202 mpp_safe_reset(dec->rst_core); in rkvdec2_reset()
1203 mpp_safe_reset(dec->rst_cabac); in rkvdec2_reset()
1204 mpp_safe_reset(dec->rst_hevc_cabac); in rkvdec2_reset()
1206 mpp_safe_unreset(dec->rst_niu_h); in rkvdec2_reset()
1207 mpp_safe_unreset(dec->rst_niu_a); in rkvdec2_reset()
1208 mpp_safe_unreset(dec->rst_a); in rkvdec2_reset()
1209 mpp_safe_unreset(dec->rst_h); in rkvdec2_reset()
1210 mpp_safe_unreset(dec->rst_core); in rkvdec2_reset()
1211 mpp_safe_unreset(dec->rst_cabac); in rkvdec2_reset()
1212 mpp_safe_unreset(dec->rst_hevc_cabac); in rkvdec2_reset()
1404 static int rkvdec2_alloc_rcbbuf(struct platform_device *pdev, struct rkvdec2_dev *dec) in rkvdec2_alloc_rcbbuf() argument
1458 domain = dec->mpp.iommu_info->domain; in rkvdec2_alloc_rcbbuf()
1483 dec->rcb_page = page; in rkvdec2_alloc_rcbbuf()
1485 dec->sram_size = sram_size; in rkvdec2_alloc_rcbbuf()
1486 dec->rcb_size = rcb_size; in rkvdec2_alloc_rcbbuf()
1487 dec->rcb_iova = iova; in rkvdec2_alloc_rcbbuf()
1489 dev_info(dev, "rcb_iova %pad\n", &dec->rcb_iova); in rkvdec2_alloc_rcbbuf()
1490 dev_info(dev, "sram_size %u\n", dec->sram_size); in rkvdec2_alloc_rcbbuf()
1491 dev_info(dev, "rcb_size %u\n", dec->rcb_size); in rkvdec2_alloc_rcbbuf()
1493 ret = of_property_read_u32(dev->of_node, "rockchip,rcb-min-width", &dec->rcb_min_width); in rkvdec2_alloc_rcbbuf()
1494 if (!ret && dec->rcb_min_width) in rkvdec2_alloc_rcbbuf()
1495 dev_info(dev, "min_width %u\n", dec->rcb_min_width); in rkvdec2_alloc_rcbbuf()
1498 dec->rcb_info_count = device_property_count_u32(dev, "rockchip,rcb-info"); in rkvdec2_alloc_rcbbuf()
1499 if (dec->rcb_info_count > 0 && in rkvdec2_alloc_rcbbuf()
1500 dec->rcb_info_count <= (sizeof(dec->rcb_infos) / sizeof(u32))) { in rkvdec2_alloc_rcbbuf()
1504 dec->rcb_infos, dec->rcb_info_count); in rkvdec2_alloc_rcbbuf()
1506 dev_info(dev, "rcb_info_count %u\n", dec->rcb_info_count); in rkvdec2_alloc_rcbbuf()
1507 for (i = 0; i < dec->rcb_info_count; i += 2) in rkvdec2_alloc_rcbbuf()
1509 dec->rcb_infos[i], dec->rcb_infos[i+1]); in rkvdec2_alloc_rcbbuf()
1524 struct rkvdec2_dev *dec; in rkvdec2_core_probe() local
1529 dec = devm_kzalloc(dev, sizeof(*dec), GFP_KERNEL); in rkvdec2_core_probe()
1530 if (!dec) in rkvdec2_core_probe()
1533 mpp = &dec->mpp; in rkvdec2_core_probe()
1551 dec->mmu_base = ioremap(dec->mpp.io_base + 0x600, 0x80); in rkvdec2_core_probe()
1552 if (!dec->mmu_base) in rkvdec2_core_probe()
1556 ret = rkvdec2_attach_ccu(dev, dec); in rkvdec2_core_probe()
1563 rkvdec2_alloc_rcbbuf(pdev, dec); in rkvdec2_core_probe()
1566 ret = rkvdec2_ccu_link_init(pdev, dec); in rkvdec2_core_probe()
1571 if (dec->ccu->ccu_mode == RKVDEC2_CCU_TASK_SOFT) { in rkvdec2_core_probe()
1574 } else if (dec->ccu->ccu_mode == RKVDEC2_CCU_TASK_HARD) { in rkvdec2_core_probe()
1576 dec->link_dec->task_capacity = mpp->task_capacity; in rkvdec2_core_probe()
1577 ret = rkvdec2_ccu_alloc_table(dec, dec->link_dec); in rkvdec2_core_probe()
1610 struct rkvdec2_dev *dec = NULL; in rkvdec2_probe_default() local
1615 dec = devm_kzalloc(dev, sizeof(*dec), GFP_KERNEL); in rkvdec2_probe_default()
1616 if (!dec) in rkvdec2_probe_default()
1619 mpp = &dec->mpp; in rkvdec2_probe_default()
1634 rkvdec2_alloc_rcbbuf(pdev, dec); in rkvdec2_probe_default()
1635 rkvdec2_link_init(pdev, dec); in rkvdec2_probe_default()
1637 if (dec->link_dec) { in rkvdec2_probe_default()
1685 static int rkvdec2_free_rcbbuf(struct platform_device *pdev, struct rkvdec2_dev *dec) in rkvdec2_free_rcbbuf() argument
1689 if (dec->rcb_page) { in rkvdec2_free_rcbbuf()
1690 size_t page_size = PAGE_ALIGN(dec->rcb_size - dec->sram_size); in rkvdec2_free_rcbbuf()
1693 __free_pages(dec->rcb_page, order); in rkvdec2_free_rcbbuf()
1695 if (dec->rcb_iova) { in rkvdec2_free_rcbbuf()
1696 domain = dec->mpp.iommu_info->domain; in rkvdec2_free_rcbbuf()
1697 iommu_unmap(domain, dec->rcb_iova, dec->rcb_size); in rkvdec2_free_rcbbuf()
1712 struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp); in rkvdec2_remove() local
1715 if (dec->mmu_base) { in rkvdec2_remove()
1716 iounmap(dec->mmu_base); in rkvdec2_remove()
1717 dec->mmu_base = NULL; in rkvdec2_remove()
1719 rkvdec2_free_rcbbuf(pdev, dec); in rkvdec2_remove()
1722 rkvdec2_link_remove(mpp, dec->link_dec); in rkvdec2_remove()