.. | .. |
---|
20 | 20 | #include <linux/regmap.h> |
---|
21 | 21 | #include <linux/pm_runtime.h> |
---|
22 | 22 | #include <linux/proc_fs.h> |
---|
23 | | -#include <linux/mfd/syscon.h> |
---|
24 | | -#include <linux/rockchip/cpu.h> |
---|
25 | 23 | #include <soc/rockchip/pm_domains.h> |
---|
26 | 24 | |
---|
27 | 25 | #include "rockchip_iep2_regs.h" |
---|
.. | .. |
---|
268 | 266 | |
---|
269 | 267 | mem_region = mpp_task_attach_fd(&task->mpp_task, usr_fd); |
---|
270 | 268 | if (IS_ERR(mem_region)) { |
---|
271 | | - mpp_debug(DEBUG_IOMMU, "reg[%3d]: %08x failed\n", |
---|
272 | | - iep2_addr_rnum[i], paddr[i]); |
---|
| 269 | + mpp_err("reg[%03d]: %08x failed\n", |
---|
| 270 | + iep2_addr_rnum[i], paddr[i]); |
---|
273 | 271 | return PTR_ERR(mem_region); |
---|
274 | 272 | } |
---|
275 | 273 | |
---|
.. | .. |
---|
979 | 977 | return -ENOMEM; |
---|
980 | 978 | |
---|
981 | 979 | mpp = &iep->mpp; |
---|
982 | | - platform_set_drvdata(pdev, iep); |
---|
| 980 | + platform_set_drvdata(pdev, mpp); |
---|
983 | 981 | |
---|
984 | 982 | if (pdev->dev.of_node) { |
---|
985 | 983 | match = of_match_node(mpp_iep2_match, pdev->dev.of_node); |
---|
.. | .. |
---|
1015 | 1013 | static int iep2_remove(struct platform_device *pdev) |
---|
1016 | 1014 | { |
---|
1017 | 1015 | struct device *dev = &pdev->dev; |
---|
1018 | | - struct iep2_dev *iep = platform_get_drvdata(pdev); |
---|
| 1016 | + struct mpp_dev *mpp = dev_get_drvdata(dev); |
---|
| 1017 | + struct iep2_dev *iep = to_iep2_dev(mpp); |
---|
1019 | 1018 | |
---|
1020 | 1019 | dma_free_coherent(dev, iep->roi.size, iep->roi.vaddr, iep->roi.iova); |
---|
1021 | 1020 | |
---|
1022 | 1021 | dev_info(dev, "remove device\n"); |
---|
1023 | | - mpp_dev_remove(&iep->mpp); |
---|
1024 | | - iep2_procfs_remove(&iep->mpp); |
---|
| 1022 | + mpp_dev_remove(mpp); |
---|
| 1023 | + iep2_procfs_remove(mpp); |
---|
1025 | 1024 | |
---|
1026 | 1025 | return 0; |
---|
1027 | 1026 | } |
---|
1028 | | - |
---|
1029 | | -static void iep2_shutdown(struct platform_device *pdev) |
---|
1030 | | -{ |
---|
1031 | | - int ret; |
---|
1032 | | - int val; |
---|
1033 | | - struct device *dev = &pdev->dev; |
---|
1034 | | - struct iep2_dev *iep = platform_get_drvdata(pdev); |
---|
1035 | | - struct mpp_dev *mpp = &iep->mpp; |
---|
1036 | | - |
---|
1037 | | - dev_info(dev, "shutdown device\n"); |
---|
1038 | | - |
---|
1039 | | - atomic_inc(&mpp->srv->shutdown_request); |
---|
1040 | | - ret = readx_poll_timeout(atomic_read, |
---|
1041 | | - &mpp->task_count, |
---|
1042 | | - val, val == 0, 20000, 200000); |
---|
1043 | | - if (ret == -ETIMEDOUT) |
---|
1044 | | - dev_err(dev, "wait total running time out\n"); |
---|
1045 | | -} |
---|
1046 | | - |
---|
1047 | | -static int iep2_runtime_suspend(struct device *dev) |
---|
1048 | | -{ |
---|
1049 | | - struct mpp_dev *mpp = dev_get_drvdata(dev); |
---|
1050 | | - struct mpp_grf_info *info = mpp->grf_info; |
---|
1051 | | - struct mpp_taskqueue *queue = mpp->queue; |
---|
1052 | | - |
---|
1053 | | - if (cpu_is_rk3528() && info && info->mem_offset) { |
---|
1054 | | - mutex_lock(&queue->ref_lock); |
---|
1055 | | - if (!atomic_dec_if_positive(&queue->runtime_cnt)) { |
---|
1056 | | - regmap_write(info->grf, info->mem_offset, |
---|
1057 | | - info->val_mem_off); |
---|
1058 | | - } |
---|
1059 | | - mutex_unlock(&queue->ref_lock); |
---|
1060 | | - } |
---|
1061 | | - |
---|
1062 | | - return 0; |
---|
1063 | | -} |
---|
1064 | | - |
---|
1065 | | -static int iep2_runtime_resume(struct device *dev) |
---|
1066 | | -{ |
---|
1067 | | - struct mpp_dev *mpp = dev_get_drvdata(dev); |
---|
1068 | | - struct mpp_grf_info *info = mpp->grf_info; |
---|
1069 | | - struct mpp_taskqueue *queue = mpp->queue; |
---|
1070 | | - |
---|
1071 | | - if (cpu_is_rk3528() && info && info->mem_offset) { |
---|
1072 | | - mutex_lock(&queue->ref_lock); |
---|
1073 | | - regmap_write(info->grf, info->mem_offset, |
---|
1074 | | - info->val_mem_on); |
---|
1075 | | - atomic_inc(&queue->runtime_cnt); |
---|
1076 | | - mutex_unlock(&queue->ref_lock); |
---|
1077 | | - } |
---|
1078 | | - |
---|
1079 | | - return 0; |
---|
1080 | | -} |
---|
1081 | | - |
---|
1082 | | -static const struct dev_pm_ops iep2_pm_ops = { |
---|
1083 | | - .runtime_suspend = iep2_runtime_suspend, |
---|
1084 | | - .runtime_resume = iep2_runtime_resume, |
---|
1085 | | -}; |
---|
1086 | 1027 | |
---|
1087 | 1028 | struct platform_driver rockchip_iep2_driver = { |
---|
1088 | 1029 | .probe = iep2_probe, |
---|
1089 | 1030 | .remove = iep2_remove, |
---|
1090 | | - .shutdown = iep2_shutdown, |
---|
| 1031 | + .shutdown = mpp_dev_shutdown, |
---|
1091 | 1032 | .driver = { |
---|
1092 | 1033 | .name = IEP2_DRIVER_NAME, |
---|
1093 | | - .pm = &iep2_pm_ops, |
---|
1094 | 1034 | .of_match_table = of_match_ptr(mpp_iep2_match), |
---|
1095 | 1035 | }, |
---|
1096 | 1036 | }; |
---|