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>
10 #include <linux/dma-iommu.h>
32 #define DRIVER_NAME "rockchip"
33 #define DRIVER_DESC "RockChip Soc DRM"
49 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_dma_attach_device()
55 ret = iommu_attach_device(private->domain, dev); in rockchip_drm_dma_attach_device()
67 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_dma_detach_device()
68 struct iommu_domain *domain = private->domain; in rockchip_drm_dma_detach_device()
78 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_init_iommu()
85 private->domain = iommu_domain_alloc(&platform_bus_type); in rockchip_drm_init_iommu()
86 if (!private->domain) in rockchip_drm_init_iommu()
87 return -ENOMEM; in rockchip_drm_init_iommu()
89 geometry = &private->domain->geometry; in rockchip_drm_init_iommu()
90 start = geometry->aperture_start; in rockchip_drm_init_iommu()
91 end = geometry->aperture_end; in rockchip_drm_init_iommu()
93 DRM_DEBUG("IOMMU context initialized (aperture: %#llx-%#llx)\n", in rockchip_drm_init_iommu()
95 drm_mm_init(&private->mm, start, end - start + 1); in rockchip_drm_init_iommu()
96 mutex_init(&private->mm_lock); in rockchip_drm_init_iommu()
103 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_iommu_cleanup()
108 drm_mm_takedown(&private->mm); in rockchip_iommu_cleanup()
109 iommu_domain_free(private->domain); in rockchip_iommu_cleanup()
122 "Failed to remove existing framebuffers - %d.\n", in rockchip_drm_bind()
133 private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL); in rockchip_drm_bind()
135 ret = -ENOMEM; in rockchip_drm_bind()
139 drm_dev->dev_private = private; in rockchip_drm_bind()
141 INIT_LIST_HEAD(&private->psr_list); in rockchip_drm_bind()
142 mutex_init(&private->psr_list_lock); in rockchip_drm_bind()
159 ret = drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc); in rockchip_drm_bind()
258 * Check if a vop endpoint is leading to a rockchip subdriver or bridge.
262 * @ep: endpoint of a rockchip vop
264 * returns true if subdriver, false if external bridge and -ENODEV
275 return -ENODEV; in rockchip_drm_endpoint_is_subdriver()
277 /* status disabled will prevent creation of platform-devices */ in rockchip_drm_endpoint_is_subdriver()
281 return -ENODEV; in rockchip_drm_endpoint_is_subdriver()
284 * All rockchip subdrivers have probed at this point, so in rockchip_drm_endpoint_is_subdriver()
287 drv = pdev->dev.driver; in rockchip_drm_endpoint_is_subdriver()
313 list_for_each_entry(link, &dev->links.consumers, s_node) in rockchip_drm_match_remove()
327 d = platform_find_device_by_driver(p, &drv->driver); in rockchip_drm_match_add()
342 return match ?: ERR_PTR(-ENODEV); in rockchip_drm_match_add()
352 struct device_node *np = dev->of_node; in rockchip_drm_platform_of_probe()
358 return -ENODEV; in rockchip_drm_platform_of_probe()
367 if (!of_device_is_available(port->parent)) { in rockchip_drm_platform_of_probe()
372 iommu = of_parse_phandle(port->parent, "iommus", 0); in rockchip_drm_platform_of_probe()
373 if (!iommu || !of_device_is_available(iommu->parent)) { in rockchip_drm_platform_of_probe()
375 "no iommu attached for %pOF, using non-iommu buffers\n", in rockchip_drm_platform_of_probe()
376 port->parent); in rockchip_drm_platform_of_probe()
379 * crtc use non-iommu buffer. in rockchip_drm_platform_of_probe()
392 return -ENODEV; in rockchip_drm_platform_of_probe()
397 "No available vop found for display-subsystem.\n"); in rockchip_drm_platform_of_probe()
398 return -ENODEV; in rockchip_drm_platform_of_probe()
406 struct device *dev = &pdev->dev; in rockchip_drm_platform_probe()
429 component_master_del(&pdev->dev, &rockchip_drm_ops); in rockchip_drm_platform_remove()
431 rockchip_drm_match_remove(&pdev->dev); in rockchip_drm_platform_remove()
445 { .compatible = "rockchip,display-subsystem", },
455 .name = "rockchip-drm",
514 MODULE_AUTHOR("Mark Yao <mark.yao@rock-chips.com>");
515 MODULE_DESCRIPTION("ROCKCHIP DRM Driver");