| .. | .. |
|---|
| 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), |
|---|