From fe9d706bb71a6fc418488256e6acad820345d9aa Mon Sep 17 00:00:00 2001 From: Jianqun Xu Date: Tue, 26 May 2020 12:49:28 +0800 Subject: [PATCH] media: rockchip: isp: init reserved memory for isp device Change-Id: I43744fd48e5791d7788bd1fc69e9870d97b95c3d Signed-off-by: Jianqun Xu Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/dev.c | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index 0f30096045bd..aa867cb5a0a2 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -867,6 +868,24 @@ err: return ret; } +static inline bool is_iommu_enable(struct device *dev) +{ + struct device_node *iommu; + + iommu = of_parse_phandle(dev->of_node, "iommus", 0); + if (!iommu) { + dev_info(dev, "no iommu attached, using non-iommu buffers\n"); + return false; + } else if (!of_device_is_available(iommu)) { + dev_info(dev, "iommu is disabled, using non-iommu buffers\n"); + of_node_put(iommu); + return false; + } + of_node_put(iommu); + + return true; +} + static int rkisp_vs_irq_parse(struct platform_device *pdev) { int ret; @@ -1075,6 +1094,13 @@ static int rkisp_plat_probe(struct platform_device *pdev) if (ret < 0) goto err_unreg_media_dev; + if (!is_iommu_enable(dev)) { + ret = of_reserved_mem_device_init(dev); + if (ret) + v4l2_warn(v4l2_dev, + "No reserved memory region assign to isp\n"); + } + pm_runtime_enable(&pdev->dev); ret = rkisp_vs_irq_parse(pdev);