Lines Matching refs:dec
262 static int rkvdec_devf_set_clk(struct rkvdec_dev *dec, in rkvdec_devf_set_clk() argument
268 struct clk *aclk = dec->aclk_info.clk; in rkvdec_devf_set_clk()
269 struct clk *clk_core = dec->core_clk_info.clk; in rkvdec_devf_set_clk()
270 struct clk *clk_cabac = dec->cabac_clk_info.clk; in rkvdec_devf_set_clk()
272 mutex_lock(&dec->set_clk_lock); in rkvdec_devf_set_clk()
276 clk_set_rate(aclk, dec->devf_aclk_rate_hz); in rkvdec_devf_set_clk()
277 clk_set_rate(clk_core, dec->devf_core_rate_hz); in rkvdec_devf_set_clk()
278 clk_set_rate(clk_cabac, dec->devf_cabac_rate_hz); in rkvdec_devf_set_clk()
279 dec->thermal_div = 0; in rkvdec_devf_set_clk()
285 dec->thermal_div = 0; in rkvdec_devf_set_clk()
288 if (!dec->thermal_div) { in rkvdec_devf_set_clk()
294 aclk_rate_hz / dec->thermal_div); in rkvdec_devf_set_clk()
296 core_rate_hz / dec->thermal_div); in rkvdec_devf_set_clk()
298 cabac_rate_hz / dec->thermal_div); in rkvdec_devf_set_clk()
300 dec->devf_aclk_rate_hz = aclk_rate_hz; in rkvdec_devf_set_clk()
301 dec->devf_core_rate_hz = core_rate_hz; in rkvdec_devf_set_clk()
302 dec->devf_cabac_rate_hz = cabac_rate_hz; in rkvdec_devf_set_clk()
305 dec->thermal_div = dec->devf_aclk_rate_hz / aclk_rate_hz; in rkvdec_devf_set_clk()
306 if (dec->thermal_div > 4) in rkvdec_devf_set_clk()
307 dec->thermal_div = 4; in rkvdec_devf_set_clk()
308 if (dec->thermal_div) { in rkvdec_devf_set_clk()
310 dec->devf_aclk_rate_hz / dec->thermal_div); in rkvdec_devf_set_clk()
312 dec->devf_core_rate_hz / dec->thermal_div); in rkvdec_devf_set_clk()
314 dec->devf_cabac_rate_hz / dec->thermal_div); in rkvdec_devf_set_clk()
319 mutex_unlock(&dec->set_clk_lock); in rkvdec_devf_set_clk()
333 struct rkvdec_dev *dec = dev_get_drvdata(dev); in devfreq_target() local
334 struct devfreq *devfreq = dec->devfreq; in devfreq_target()
354 aclk_rate_hz = dec->devf_aclk_rate_hz; in devfreq_target()
355 core_rate_hz = dec->devf_core_rate_hz; in devfreq_target()
356 cabac_rate_hz = dec->devf_cabac_rate_hz; in devfreq_target()
360 if (dec->volt == target_volt) in devfreq_target()
362 ret = regulator_set_voltage(dec->vdd, target_volt, INT_MAX); in devfreq_target()
368 dec->volt = target_volt; in devfreq_target()
373 ret = regulator_set_voltage(dec->vdd, target_volt, INT_MAX); in devfreq_target()
381 rkvdec_devf_set_clk(dec, aclk_rate_hz, core_rate_hz, cabac_rate_hz, clk_event); in devfreq_target()
385 ret = regulator_set_voltage(dec->vdd, target_volt, INT_MAX); in devfreq_target()
391 dec->volt = target_volt; in devfreq_target()
399 struct rkvdec_dev *dec = dev_get_drvdata(dev); in devfreq_get_cur_freq() local
401 *freq = clk_get_rate(dec->aclk_info.clk); in devfreq_get_cur_freq()
409 struct rkvdec_dev *dec = dev_get_drvdata(dev); in devfreq_get_dev_status() local
410 struct devfreq *devfreq = dec->devfreq; in devfreq_get_dev_status()
428 struct rkvdec_dev *dec = dev_get_drvdata(dev); in model_static_power() local
429 struct thermal_zone_device *tz = dec->thermal_zone; in model_static_power()
455 temp_scaling_factor = (dec->ts[3] * temp_cubed) in model_static_power()
456 + (dec->ts[2] * temp_squared) + (dec->ts[1] * temp) + dec->ts[0]; in model_static_power()
458 return (((dec->static_power_coeff * voltage_cubed) >> 20) in model_static_power()
469 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in power_model_simple_init() local
489 dec->thermal_zone = thermal_zone_get_zone_by_name(tz_name); in power_model_simple_init()
490 if (IS_ERR(dec->thermal_zone)) { in power_model_simple_init()
492 dec->thermal_zone = NULL; in power_model_simple_init()
498 &dec->static_power_coeff)) { in power_model_simple_init()
512 (u32 *)dec->ts, in power_model_simple_init()
525 struct rkvdec_dev *dec = container_of(nb, in devfreq_notifier_call() local
529 if (!dec) in devfreq_notifier_call()
533 mutex_lock(&dec->sip_reset_lock); in devfreq_notifier_call()
535 mutex_unlock(&dec->sip_reset_lock); in devfreq_notifier_call()
865 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_prepare_with_reset() local
871 if (out_task && !dec->had_reset) { in rkvdec_prepare_with_reset()
879 if (dec->last_fmt == RKVDEC_FMT_H264D && fmt == RKVDEC_FMT_VP9D) { in rkvdec_prepare_with_reset()
1046 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3328_isr() local
1069 if (dec->aux_iova != -1) { in rkvdec_3328_isr()
1070 iommu_unmap(mpp->iommu_info->domain, dec->aux_iova, IOMMU_PAGE_SIZE); in rkvdec_3328_isr()
1071 dec->aux_iova = -1; in rkvdec_3328_isr()
1123 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_finish_with_record_info() local
1127 dec->last_fmt = RKVDEC_GET_FORMAT(task->reg[RKVDEC_REG_SYS_CTRL_INDEX]); in rkvdec_finish_with_record_info()
1128 dec->had_reset = (atomic_read(&mpp->reset_request) > 0) ? true : false; in rkvdec_finish_with_record_info()
1170 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_procfs_remove() local
1172 if (dec->procfs) { in rkvdec_procfs_remove()
1173 proc_remove(dec->procfs); in rkvdec_procfs_remove()
1174 dec->procfs = NULL; in rkvdec_procfs_remove()
1182 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_procfs_init() local
1184 dec->procfs = proc_mkdir(mpp->dev->of_node->name, mpp->srv->procfs); in rkvdec_procfs_init()
1185 if (IS_ERR_OR_NULL(dec->procfs)) { in rkvdec_procfs_init()
1187 dec->procfs = NULL; in rkvdec_procfs_init()
1192 mpp_procfs_create_common(dec->procfs, mpp); in rkvdec_procfs_init()
1195 dec->procfs, &dec->aclk_info.debug_rate_hz); in rkvdec_procfs_init()
1197 dec->procfs, &dec->core_clk_info.debug_rate_hz); in rkvdec_procfs_init()
1199 dec->procfs, &dec->cabac_clk_info.debug_rate_hz); in rkvdec_procfs_init()
1201 dec->procfs, &dec->hevc_cabac_clk_info.debug_rate_hz); in rkvdec_procfs_init()
1203 dec->procfs, &mpp->session_max_buffers); in rkvdec_procfs_init()
1222 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_init() local
1224 mutex_init(&dec->sip_reset_lock); in rkvdec_init()
1228 ret = mpp_get_clk_info(mpp, &dec->aclk_info, "aclk_vcodec"); in rkvdec_init()
1231 ret = mpp_get_clk_info(mpp, &dec->hclk_info, "hclk_vcodec"); in rkvdec_init()
1234 ret = mpp_get_clk_info(mpp, &dec->core_clk_info, "clk_core"); in rkvdec_init()
1237 ret = mpp_get_clk_info(mpp, &dec->cabac_clk_info, "clk_cabac"); in rkvdec_init()
1240 ret = mpp_get_clk_info(mpp, &dec->hevc_cabac_clk_info, "clk_hevc_cabac"); in rkvdec_init()
1244 mpp_set_clk_info_rate_hz(&dec->aclk_info, CLK_MODE_DEFAULT, 300 * MHZ); in rkvdec_init()
1245 mpp_set_clk_info_rate_hz(&dec->core_clk_info, CLK_MODE_DEFAULT, 200 * MHZ); in rkvdec_init()
1246 mpp_set_clk_info_rate_hz(&dec->cabac_clk_info, CLK_MODE_DEFAULT, 200 * MHZ); in rkvdec_init()
1247 mpp_set_clk_info_rate_hz(&dec->hevc_cabac_clk_info, CLK_MODE_DEFAULT, 300 * MHZ); in rkvdec_init()
1251 "rockchip,default-max-load", &dec->default_max_load); in rkvdec_init()
1253 dec->rst_a = mpp_reset_control_get(mpp, RST_TYPE_A, "video_a"); in rkvdec_init()
1254 if (!dec->rst_a) in rkvdec_init()
1256 dec->rst_h = mpp_reset_control_get(mpp, RST_TYPE_H, "video_h"); in rkvdec_init()
1257 if (!dec->rst_h) in rkvdec_init()
1259 dec->rst_niu_a = mpp_reset_control_get(mpp, RST_TYPE_NIU_A, "niu_a"); in rkvdec_init()
1260 if (!dec->rst_niu_a) in rkvdec_init()
1262 dec->rst_niu_h = mpp_reset_control_get(mpp, RST_TYPE_NIU_H, "niu_h"); in rkvdec_init()
1263 if (!dec->rst_niu_h) in rkvdec_init()
1265 dec->rst_core = mpp_reset_control_get(mpp, RST_TYPE_CORE, "video_core"); in rkvdec_init()
1266 if (!dec->rst_core) in rkvdec_init()
1268 dec->rst_cabac = mpp_reset_control_get(mpp, RST_TYPE_CABAC, "video_cabac"); in rkvdec_init()
1269 if (!dec->rst_cabac) in rkvdec_init()
1271 dec->rst_hevc_cabac = mpp_reset_control_get(mpp, RST_TYPE_HEVC_CABAC, "video_hevc_cabac"); in rkvdec_init()
1272 if (!dec->rst_hevc_cabac) in rkvdec_init()
1298 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3328_iommu_hdl() local
1307 if (dec->aux_iova != -1) { in rkvdec_3328_iommu_hdl()
1308 iommu_unmap(mpp->iommu_info->domain, dec->aux_iova, IOMMU_PAGE_SIZE); in rkvdec_3328_iommu_hdl()
1309 dec->aux_iova = -1; in rkvdec_3328_iommu_hdl()
1314 page_to_phys(dec->aux_page), IOMMU_PAGE_SIZE, in rkvdec_3328_iommu_hdl()
1317 dec->aux_iova = page_iova; in rkvdec_3328_iommu_hdl()
1326 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_devfreq_remove() local
1328 devfreq_unregister_opp_notifier(mpp->dev, dec->devfreq); in rkvdec_devfreq_remove()
1338 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_devfreq_init() local
1340 mutex_init(&dec->set_clk_lock); in rkvdec_devfreq_init()
1341 dec->parent_devfreq = devfreq_get_devfreq_by_phandle(mpp->dev, "rkvdec_devfreq", 0); in rkvdec_devfreq_init()
1342 if (IS_ERR_OR_NULL(dec->parent_devfreq)) { in rkvdec_devfreq_init()
1343 if (PTR_ERR(dec->parent_devfreq) == -EPROBE_DEFER) { in rkvdec_devfreq_init()
1349 dec->devfreq_nb.notifier_call = devfreq_notifier_call; in rkvdec_devfreq_init()
1351 dec->parent_devfreq, in rkvdec_devfreq_init()
1352 &dec->devfreq_nb, in rkvdec_devfreq_init()
1356 dec->vdd = devm_regulator_get_optional(mpp->dev, "vcodec"); in rkvdec_devfreq_init()
1357 if (IS_ERR_OR_NULL(dec->vdd)) { in rkvdec_devfreq_init()
1358 if (PTR_ERR(dec->vdd) == -EPROBE_DEFER) { in rkvdec_devfreq_init()
1374 dec->devfreq = devm_devfreq_add_device(mpp->dev, &devfreq_profile, in rkvdec_devfreq_init()
1376 if (IS_ERR(dec->devfreq)) { in rkvdec_devfreq_init()
1377 ret = PTR_ERR(dec->devfreq); in rkvdec_devfreq_init()
1381 stat = &dec->devfreq->last_status; in rkvdec_devfreq_init()
1382 stat->current_frequency = clk_get_rate(dec->aclk_info.clk); in rkvdec_devfreq_init()
1384 ret = devfreq_register_opp_notifier(mpp->dev, dec->devfreq); in rkvdec_devfreq_init()
1390 if (!ret && dec->devfreq) { in rkvdec_devfreq_init()
1391 dec->devfreq_cooling = in rkvdec_devfreq_init()
1393 dec->devfreq, in rkvdec_devfreq_init()
1395 if (IS_ERR_OR_NULL(dec->devfreq_cooling)) { in rkvdec_devfreq_init()
1420 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3328_init() local
1425 dec->aux_page = alloc_page(GFP_KERNEL); in rkvdec_3328_init()
1426 if (!dec->aux_page) { in rkvdec_3328_init()
1431 dec->aux_iova = -1; in rkvdec_3328_init()
1441 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3328_exit() local
1443 if (dec->aux_page) in rkvdec_3328_exit()
1444 __free_page(dec->aux_page); in rkvdec_3328_exit()
1446 if (dec->aux_iova != -1) { in rkvdec_3328_exit()
1447 iommu_unmap(mpp->iommu_info->domain, dec->aux_iova, IOMMU_PAGE_SIZE); in rkvdec_3328_exit()
1448 dec->aux_iova = -1; in rkvdec_3328_exit()
1457 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_clk_on() local
1459 mpp_clk_safe_enable(dec->aclk_info.clk); in rkvdec_clk_on()
1460 mpp_clk_safe_enable(dec->hclk_info.clk); in rkvdec_clk_on()
1461 mpp_clk_safe_enable(dec->core_clk_info.clk); in rkvdec_clk_on()
1462 mpp_clk_safe_enable(dec->cabac_clk_info.clk); in rkvdec_clk_on()
1463 mpp_clk_safe_enable(dec->hevc_cabac_clk_info.clk); in rkvdec_clk_on()
1470 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_clk_off() local
1472 clk_disable_unprepare(dec->aclk_info.clk); in rkvdec_clk_off()
1473 clk_disable_unprepare(dec->hclk_info.clk); in rkvdec_clk_off()
1474 clk_disable_unprepare(dec->core_clk_info.clk); in rkvdec_clk_off()
1475 clk_disable_unprepare(dec->cabac_clk_info.clk); in rkvdec_clk_off()
1476 clk_disable_unprepare(dec->hevc_cabac_clk_info.clk); in rkvdec_clk_off()
1487 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_get_freq() local
1491 if (!dec->default_max_load || !task->pixels) in rkvdec_get_freq()
1508 if (workload > dec->default_max_load) in rkvdec_get_freq()
1536 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3368_set_grf() local
1538 dec->grf_changed = mpp_grf_is_changed(mpp->grf_info); in rkvdec_3368_set_grf()
1593 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_set_freq() local
1596 mpp_clk_set_rate(&dec->aclk_info, task->clk_mode); in rkvdec_set_freq()
1597 mpp_clk_set_rate(&dec->core_clk_info, task->clk_mode); in rkvdec_set_freq()
1598 mpp_clk_set_rate(&dec->cabac_clk_info, task->clk_mode); in rkvdec_set_freq()
1599 mpp_clk_set_rate(&dec->hevc_cabac_clk_info, task->clk_mode); in rkvdec_set_freq()
1606 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3368_set_freq() local
1610 if (dec->grf_changed) { in rkvdec_3368_set_freq()
1612 dec->grf_changed = false; in rkvdec_3368_set_freq()
1615 mpp_clk_set_rate(&dec->aclk_info, task->clk_mode); in rkvdec_3368_set_freq()
1616 mpp_clk_set_rate(&dec->core_clk_info, task->clk_mode); in rkvdec_3368_set_freq()
1617 mpp_clk_set_rate(&dec->cabac_clk_info, task->clk_mode); in rkvdec_3368_set_freq()
1618 mpp_clk_set_rate(&dec->hevc_cabac_clk_info, task->clk_mode); in rkvdec_3368_set_freq()
1626 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3328_set_freq() local
1630 if (dec->devfreq) { in rkvdec_3328_set_freq()
1634 stat = &dec->devfreq->last_status; in rkvdec_3328_set_freq()
1637 aclk_rate_hz = mpp_get_clk_info_rate_hz(&dec->aclk_info, in rkvdec_3328_set_freq()
1639 core_rate_hz = mpp_get_clk_info_rate_hz(&dec->core_clk_info, in rkvdec_3328_set_freq()
1641 cabac_rate_hz = mpp_get_clk_info_rate_hz(&dec->cabac_clk_info, in rkvdec_3328_set_freq()
1643 rkvdec_devf_set_clk(dec, aclk_rate_hz, in rkvdec_3328_set_freq()
1648 mpp_clk_set_rate(&dec->aclk_info, task->clk_mode); in rkvdec_3328_set_freq()
1649 mpp_clk_set_rate(&dec->core_clk_info, task->clk_mode); in rkvdec_3328_set_freq()
1650 mpp_clk_set_rate(&dec->cabac_clk_info, task->clk_mode); in rkvdec_3328_set_freq()
1658 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_reduce_freq() local
1660 mpp_clk_set_rate(&dec->aclk_info, CLK_MODE_REDUCE); in rkvdec_reduce_freq()
1661 mpp_clk_set_rate(&dec->core_clk_info, CLK_MODE_REDUCE); in rkvdec_reduce_freq()
1662 mpp_clk_set_rate(&dec->cabac_clk_info, CLK_MODE_REDUCE); in rkvdec_reduce_freq()
1663 mpp_clk_set_rate(&dec->hevc_cabac_clk_info, CLK_MODE_REDUCE); in rkvdec_reduce_freq()
1670 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_3328_reduce_freq() local
1673 if (dec->devfreq) { in rkvdec_3328_reduce_freq()
1677 stat = &dec->devfreq->last_status; in rkvdec_3328_reduce_freq()
1680 aclk_rate_hz = mpp_get_clk_info_rate_hz(&dec->aclk_info, in rkvdec_3328_reduce_freq()
1682 core_rate_hz = mpp_get_clk_info_rate_hz(&dec->core_clk_info, in rkvdec_3328_reduce_freq()
1684 cabac_rate_hz = mpp_get_clk_info_rate_hz(&dec->cabac_clk_info, in rkvdec_3328_reduce_freq()
1686 rkvdec_devf_set_clk(dec, aclk_rate_hz, in rkvdec_3328_reduce_freq()
1691 mpp_clk_set_rate(&dec->aclk_info, CLK_MODE_REDUCE); in rkvdec_3328_reduce_freq()
1692 mpp_clk_set_rate(&dec->core_clk_info, CLK_MODE_REDUCE); in rkvdec_3328_reduce_freq()
1693 mpp_clk_set_rate(&dec->cabac_clk_info, CLK_MODE_REDUCE); in rkvdec_3328_reduce_freq()
1701 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_reset() local
1704 if (dec->rst_a && dec->rst_h) { in rkvdec_reset()
1706 mpp_safe_reset(dec->rst_niu_a); in rkvdec_reset()
1707 mpp_safe_reset(dec->rst_niu_h); in rkvdec_reset()
1708 mpp_safe_reset(dec->rst_a); in rkvdec_reset()
1709 mpp_safe_reset(dec->rst_h); in rkvdec_reset()
1710 mpp_safe_reset(dec->rst_core); in rkvdec_reset()
1711 mpp_safe_reset(dec->rst_cabac); in rkvdec_reset()
1712 mpp_safe_reset(dec->rst_hevc_cabac); in rkvdec_reset()
1714 mpp_safe_unreset(dec->rst_niu_h); in rkvdec_reset()
1715 mpp_safe_unreset(dec->rst_niu_a); in rkvdec_reset()
1716 mpp_safe_unreset(dec->rst_a); in rkvdec_reset()
1717 mpp_safe_unreset(dec->rst_h); in rkvdec_reset()
1718 mpp_safe_unreset(dec->rst_core); in rkvdec_reset()
1719 mpp_safe_unreset(dec->rst_cabac); in rkvdec_reset()
1720 mpp_safe_unreset(dec->rst_hevc_cabac); in rkvdec_reset()
1732 struct rkvdec_dev *dec = to_rkvdec_dev(mpp); in rkvdec_sip_reset() local
1734 mutex_lock(&dec->sip_reset_lock); in rkvdec_sip_reset()
1736 mutex_unlock(&dec->sip_reset_lock); in rkvdec_sip_reset()
1973 struct rkvdec_dev *dec = NULL; in rkvdec_probe() local
1979 dec = devm_kzalloc(dev, sizeof(*dec), GFP_KERNEL); in rkvdec_probe()
1980 if (!dec) in rkvdec_probe()
1983 mpp = &dec->mpp; in rkvdec_probe()
2021 struct rkvdec_dev *dec = platform_get_drvdata(pdev); in rkvdec_remove() local
2024 mpp_dev_remove(&dec->mpp); in rkvdec_remove()
2025 rkvdec_procfs_remove(&dec->mpp); in rkvdec_remove()