Lines Matching +full:rockchip +full:- +full:vop

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
4 * Author:Mark Yao <mark.yao@rock-chips.com>
9 #include <linux/dma-mapping.h>
27 #include <asm/dma-iommu.h>
38 #define DRIVER_NAME "rockchip"
39 #define DRIVER_DESC "RockChip Soc DRM"
54 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_dma_attach_device()
57 if (!private->domain) in rockchip_drm_dma_attach_device()
69 ret = iommu_attach_device(private->domain, dev); in rockchip_drm_dma_attach_device()
81 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_dma_detach_device()
83 if (!private->domain) in rockchip_drm_dma_detach_device()
86 iommu_detach_device(private->domain, dev); in rockchip_drm_dma_detach_device()
92 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_dma_init_device()
95 private->iommu_dev = ERR_PTR(-ENODEV); in rockchip_drm_dma_init_device()
96 else if (!private->iommu_dev) in rockchip_drm_dma_init_device()
97 private->iommu_dev = dev; in rockchip_drm_dma_init_device()
102 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_init_iommu()
106 if (IS_ERR_OR_NULL(private->iommu_dev)) in rockchip_drm_init_iommu()
109 private->domain = iommu_domain_alloc(private->iommu_dev->bus); in rockchip_drm_init_iommu()
110 if (!private->domain) in rockchip_drm_init_iommu()
111 return -ENOMEM; in rockchip_drm_init_iommu()
113 geometry = &private->domain->geometry; in rockchip_drm_init_iommu()
114 start = geometry->aperture_start; in rockchip_drm_init_iommu()
115 end = geometry->aperture_end; in rockchip_drm_init_iommu()
117 DRM_DEBUG("IOMMU context initialized (aperture: %#llx-%#llx)\n", in rockchip_drm_init_iommu()
119 drm_mm_init(&private->mm, start, end - start + 1); in rockchip_drm_init_iommu()
120 mutex_init(&private->mm_lock); in rockchip_drm_init_iommu()
127 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_iommu_cleanup()
129 if (!private->domain) in rockchip_iommu_cleanup()
132 drm_mm_takedown(&private->mm); in rockchip_iommu_cleanup()
133 iommu_domain_free(private->domain); in rockchip_iommu_cleanup()
146 "Failed to remove existing framebuffers - %d.\n", in rockchip_drm_bind()
157 private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL); in rockchip_drm_bind()
159 ret = -ENOMEM; in rockchip_drm_bind()
163 drm_dev->dev_private = private; in rockchip_drm_bind()
180 ret = drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc); in rockchip_drm_bind()
282 return -ENOENT; in rockchip_drm_encoder_set_crtc_endpoint_id()
286 return -ENOENT; in rockchip_drm_encoder_set_crtc_endpoint_id()
292 rkencoder->crtc_endpoint_id = ep.id; in rockchip_drm_encoder_set_crtc_endpoint_id()
298 * Check if a vop endpoint is leading to a rockchip subdriver or bridge.
302 * @ep: endpoint of a rockchip vop
304 * returns true if subdriver, false if external bridge and -ENODEV
315 return -ENODEV; in rockchip_drm_endpoint_is_subdriver()
317 /* status disabled will prevent creation of platform-devices */ in rockchip_drm_endpoint_is_subdriver()
320 return -ENODEV; in rockchip_drm_endpoint_is_subdriver()
326 /* enabled non-platform-devices can immediately return here */ in rockchip_drm_endpoint_is_subdriver()
331 * All rockchip subdrivers have probed at this point, so in rockchip_drm_endpoint_is_subdriver()
334 drv = pdev->dev.driver; in rockchip_drm_endpoint_is_subdriver()
355 list_for_each_entry(link, &dev->links.consumers, s_node) in rockchip_drm_match_remove()
369 d = platform_find_device_by_driver(p, &drv->driver); in rockchip_drm_match_add()
384 return match ?: ERR_PTR(-ENODEV); in rockchip_drm_match_add()
394 struct device_node *np = dev->of_node; in rockchip_drm_platform_of_probe()
400 return -ENODEV; in rockchip_drm_platform_of_probe()
407 if (!of_device_is_available(port->parent)) { in rockchip_drm_platform_of_probe()
418 return -ENODEV; in rockchip_drm_platform_of_probe()
423 "No available vop found for display-subsystem.\n"); in rockchip_drm_platform_of_probe()
424 return -ENODEV; in rockchip_drm_platform_of_probe()
432 struct device *dev = &pdev->dev; in rockchip_drm_platform_probe()
455 component_master_del(&pdev->dev, &rockchip_drm_ops); in rockchip_drm_platform_remove()
457 rockchip_drm_match_remove(&pdev->dev); in rockchip_drm_platform_remove()
471 { .compatible = "rockchip,display-subsystem", },
481 .name = "rockchip-drm",
498 return -ENODEV; in rockchip_drm_init()
544 MODULE_AUTHOR("Mark Yao <mark.yao@rock-chips.com>");
545 MODULE_DESCRIPTION("ROCKCHIP DRM Driver");