.. | .. |
---|
28 | 28 | #include <linux/nospec.h> |
---|
29 | 29 | #include <linux/workqueue.h> |
---|
30 | 30 | #include <soc/rockchip/pm_domains.h> |
---|
| 31 | +#include <soc/rockchip/rockchip_iommu.h> |
---|
31 | 32 | #include <soc/rockchip/rockchip_ipa.h> |
---|
32 | 33 | #include <soc/rockchip/rockchip_opp_select.h> |
---|
33 | 34 | #include <soc/rockchip/rockchip_system_monitor.h> |
---|
.. | .. |
---|
504 | 505 | |
---|
505 | 506 | mpp_write(mpp, RKVENC_INT_MSK_BASE, 0x100); |
---|
506 | 507 | mpp_write(mpp, RKVENC_INT_CLR_BASE, 0xffffffff); |
---|
507 | | - udelay(5); |
---|
508 | 508 | mpp_write(mpp, RKVENC_INT_STATUS_BASE, 0); |
---|
509 | 509 | |
---|
510 | 510 | mpp_debug_leave(); |
---|
.. | .. |
---|
534 | 534 | |
---|
535 | 535 | if (task->irq_status & RKVENC_INT_ERROR_BITS) { |
---|
536 | 536 | atomic_inc(&mpp->reset_request); |
---|
537 | | - /* dump register */ |
---|
538 | 537 | if (mpp_debug_unlikely(DEBUG_DUMP_ERR_REG)) { |
---|
539 | | - mpp_debug(DEBUG_DUMP_ERR_REG, "irq_status: %08x\n", |
---|
540 | | - task->irq_status); |
---|
541 | | - mpp_task_dump_hw_reg(mpp, mpp_task); |
---|
| 538 | + /* dump error register */ |
---|
| 539 | + mpp_debug(DEBUG_DUMP_ERR_REG, "irq_status: %08x\n", task->irq_status); |
---|
| 540 | + mpp_task_dump_hw_reg(mpp); |
---|
542 | 541 | } |
---|
543 | 542 | } |
---|
544 | 543 | |
---|
.. | .. |
---|
756 | 755 | } |
---|
757 | 756 | seq_puts(seq, "\n"); |
---|
758 | 757 | /* item data*/ |
---|
759 | | - seq_printf(seq, "|%8p|", session); |
---|
| 758 | + seq_printf(seq, "|%8d|", session->index); |
---|
760 | 759 | seq_printf(seq, "%8s|", mpp_device_name[session->device_type]); |
---|
761 | 760 | for (i = ENC_INFO_BASE; i < ENC_INFO_BUTT; i++) { |
---|
762 | 761 | u32 flag = priv->codec_info[i].flag; |
---|
.. | .. |
---|
789 | 788 | mutex_lock(&mpp->srv->session_lock); |
---|
790 | 789 | list_for_each_entry_safe(session, n, |
---|
791 | 790 | &mpp->srv->session_list, |
---|
792 | | - session_link) { |
---|
| 791 | + service_link) { |
---|
793 | 792 | if (session->device_type != MPP_DEVICE_RKVENC) |
---|
794 | 793 | continue; |
---|
795 | 794 | if (!session->priv) |
---|
.. | .. |
---|
970 | 969 | }; |
---|
971 | 970 | |
---|
972 | 971 | static struct monitor_dev_profile enc_mdevp = { |
---|
973 | | - .type = MONITOR_TPYE_DEV, |
---|
| 972 | + .type = MONITOR_TYPE_DEV, |
---|
974 | 973 | .low_temp_adjust = rockchip_monitor_dev_low_temp_adjust, |
---|
975 | 974 | .high_temp_adjust = rockchip_monitor_dev_high_temp_adjust, |
---|
976 | 975 | }; |
---|
.. | .. |
---|
999 | 998 | return ret; |
---|
1000 | 999 | } |
---|
1001 | 1000 | |
---|
| 1001 | +static const struct rockchip_opp_data __maybe_unused rv1126_rkvenc_opp_data = { |
---|
| 1002 | + .get_soc_info = rv1126_get_soc_info, |
---|
| 1003 | +}; |
---|
| 1004 | + |
---|
1002 | 1005 | static const struct of_device_id rockchip_rkvenc_of_match[] = { |
---|
1003 | 1006 | #ifdef CONFIG_CPU_RV1126 |
---|
1004 | 1007 | { |
---|
1005 | 1008 | .compatible = "rockchip,rv1109", |
---|
1006 | | - .data = (void *)&rv1126_get_soc_info, |
---|
| 1009 | + .data = (void *)&rv1126_rkvenc_opp_data, |
---|
1007 | 1010 | }, |
---|
1008 | 1011 | { |
---|
1009 | 1012 | .compatible = "rockchip,rv1126", |
---|
1010 | | - .data = (void *)&rv1126_get_soc_info, |
---|
| 1013 | + .data = (void *)&rv1126_rkvenc_opp_data, |
---|
1011 | 1014 | }, |
---|
1012 | 1015 | #endif |
---|
1013 | 1016 | {}, |
---|
.. | .. |
---|
1018 | 1021 | struct rkvenc_dev *enc = to_rkvenc_dev(mpp); |
---|
1019 | 1022 | struct clk *clk_core = enc->core_clk_info.clk; |
---|
1020 | 1023 | struct devfreq_cooling_power *venc_dcp = &venc_cooling_power_data; |
---|
| 1024 | + struct rockchip_opp_info opp_info = {0}; |
---|
1021 | 1025 | int ret = 0; |
---|
1022 | 1026 | |
---|
1023 | 1027 | if (!clk_core) |
---|
.. | .. |
---|
1035 | 1039 | return 0; |
---|
1036 | 1040 | } |
---|
1037 | 1041 | |
---|
1038 | | - ret = rockchip_init_opp_table(mpp->dev, rockchip_rkvenc_of_match, |
---|
1039 | | - "leakage", "venc"); |
---|
| 1042 | + rockchip_get_opp_data(rockchip_rkvenc_of_match, &opp_info); |
---|
| 1043 | + ret = rockchip_init_opp_table(mpp->dev, &opp_info, "leakage", "venc"); |
---|
1040 | 1044 | if (ret) { |
---|
1041 | 1045 | dev_err(mpp->dev, "failed to init_opp_table\n"); |
---|
1042 | 1046 | return ret; |
---|
.. | .. |
---|
1146 | 1150 | else |
---|
1147 | 1151 | enc->aux_iova = page_iova; |
---|
1148 | 1152 | |
---|
1149 | | - rk_iommu_unmask_irq(mpp->dev); |
---|
| 1153 | + rockchip_iommu_unmask_irq(mpp->dev); |
---|
1150 | 1154 | mpp_iommu_up_write(mpp->iommu_info); |
---|
1151 | 1155 | |
---|
1152 | 1156 | mpp_debug_leave(); |
---|
.. | .. |
---|
1163 | 1167 | mpp_debug(DEBUG_IOMMU, "IOMMU_GET_BUS_ID(status)=%d\n", IOMMU_GET_BUS_ID(status)); |
---|
1164 | 1168 | if (IOMMU_GET_BUS_ID(status)) { |
---|
1165 | 1169 | enc->fault_iova = iova; |
---|
1166 | | - rk_iommu_mask_irq(mpp->dev); |
---|
| 1170 | + rockchip_iommu_mask_irq(mpp->dev); |
---|
1167 | 1171 | queue_work(enc->iommu_wq, &enc->iommu_work); |
---|
1168 | 1172 | } |
---|
1169 | 1173 | mpp_debug_leave(); |
---|
.. | .. |
---|
1228 | 1232 | } |
---|
1229 | 1233 | INIT_WORK(&enc->iommu_work, rkvenc_iommu_handle_work); |
---|
1230 | 1234 | |
---|
1231 | | - mpp->iommu_info->hdl = rkvenc_iommu_fault_handle; |
---|
| 1235 | + mpp->fault_handler = rkvenc_iommu_fault_handle; |
---|
1232 | 1236 | |
---|
1233 | 1237 | return ret; |
---|
1234 | 1238 | } |
---|
.. | .. |
---|
1443 | 1447 | if (!enc) |
---|
1444 | 1448 | return -ENOMEM; |
---|
1445 | 1449 | mpp = &enc->mpp; |
---|
1446 | | - platform_set_drvdata(pdev, enc); |
---|
| 1450 | + platform_set_drvdata(pdev, mpp); |
---|
1447 | 1451 | |
---|
1448 | 1452 | if (pdev->dev.of_node) { |
---|
1449 | 1453 | match = of_match_node(mpp_rkvenc_dt_match, pdev->dev.of_node); |
---|
.. | .. |
---|
1482 | 1486 | static int rkvenc_remove(struct platform_device *pdev) |
---|
1483 | 1487 | { |
---|
1484 | 1488 | struct device *dev = &pdev->dev; |
---|
1485 | | - struct rkvenc_dev *enc = platform_get_drvdata(pdev); |
---|
| 1489 | + struct mpp_dev *mpp = dev_get_drvdata(dev); |
---|
1486 | 1490 | |
---|
1487 | 1491 | dev_info(dev, "remove device\n"); |
---|
1488 | | - mpp_dev_remove(&enc->mpp); |
---|
1489 | | - rkvenc_procfs_remove(&enc->mpp); |
---|
| 1492 | + mpp_dev_remove(mpp); |
---|
| 1493 | + rkvenc_procfs_remove(mpp); |
---|
1490 | 1494 | |
---|
1491 | 1495 | return 0; |
---|
1492 | | -} |
---|
1493 | | - |
---|
1494 | | -static void rkvenc_shutdown(struct platform_device *pdev) |
---|
1495 | | -{ |
---|
1496 | | - int ret; |
---|
1497 | | - int val; |
---|
1498 | | - struct device *dev = &pdev->dev; |
---|
1499 | | - struct rkvenc_dev *enc = platform_get_drvdata(pdev); |
---|
1500 | | - struct mpp_dev *mpp = &enc->mpp; |
---|
1501 | | - |
---|
1502 | | - dev_info(dev, "shutdown device\n"); |
---|
1503 | | - |
---|
1504 | | - atomic_inc(&mpp->srv->shutdown_request); |
---|
1505 | | - ret = readx_poll_timeout(atomic_read, |
---|
1506 | | - &mpp->task_count, |
---|
1507 | | - val, val == 0, 1000, 200000); |
---|
1508 | | - if (ret == -ETIMEDOUT) |
---|
1509 | | - dev_err(dev, "wait total running time out\n"); |
---|
1510 | | - |
---|
1511 | | - dev_info(dev, "shutdown success\n"); |
---|
1512 | 1496 | } |
---|
1513 | 1497 | |
---|
1514 | 1498 | struct platform_driver rockchip_rkvenc_driver = { |
---|
1515 | 1499 | .probe = rkvenc_probe, |
---|
1516 | 1500 | .remove = rkvenc_remove, |
---|
1517 | | - .shutdown = rkvenc_shutdown, |
---|
| 1501 | + .shutdown = mpp_dev_shutdown, |
---|
1518 | 1502 | .driver = { |
---|
1519 | 1503 | .name = RKVENC_DRIVER_NAME, |
---|
1520 | 1504 | .of_match_table = of_match_ptr(mpp_rkvenc_dt_match), |
---|