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>
31 #define DRIVER_NAME "rockchip"
32 #define DRIVER_DESC "RockChip Soc DRM"
48 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_dma_attach_device()
54 ret = iommu_attach_device(private->domain, dev); in rockchip_drm_dma_attach_device()
66 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_dma_detach_device()
67 struct iommu_domain *domain = private->domain; in rockchip_drm_dma_detach_device()
77 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_drm_init_iommu()
84 private->domain = iommu_domain_alloc(&platform_bus_type); in rockchip_drm_init_iommu()
85 if (!private->domain) in rockchip_drm_init_iommu()
86 return -ENOMEM; in rockchip_drm_init_iommu()
88 geometry = &private->domain->geometry; in rockchip_drm_init_iommu()
89 start = geometry->aperture_start; in rockchip_drm_init_iommu()
90 end = geometry->aperture_end; in rockchip_drm_init_iommu()
92 DRM_DEBUG("IOMMU context initialized (aperture: %#llx-%#llx)\n", in rockchip_drm_init_iommu()
94 drm_mm_init(&private->mm, start, end - start + 1); in rockchip_drm_init_iommu()
95 mutex_init(&private->mm_lock); in rockchip_drm_init_iommu()
102 struct rockchip_drm_private *private = drm_dev->dev_private; in rockchip_iommu_cleanup()
107 drm_mm_takedown(&private->mm); in rockchip_iommu_cleanup()
108 iommu_domain_free(private->domain); in rockchip_iommu_cleanup()
123 private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL); in rockchip_drm_bind()
125 ret = -ENOMEM; in rockchip_drm_bind()
129 drm_dev->dev_private = private; in rockchip_drm_bind()
131 INIT_LIST_HEAD(&private->psr_list); in rockchip_drm_bind()
132 mutex_init(&private->psr_list_lock); in rockchip_drm_bind()
149 ret = drm_vblank_init(drm_dev, drm_dev->mode_config.num_crtc); in rockchip_drm_bind()
157 * - with irq_enabled = true, we can use the vblank feature. in rockchip_drm_bind()
159 drm_dev->irq_enabled = true; in rockchip_drm_bind()
259 * Check if a vop endpoint is leading to a rockchip subdriver or bridge.
263 * @ep: endpoint of a rockchip vop
265 * returns true if subdriver, false if external bridge and -ENODEV
276 return -ENODEV; in rockchip_drm_endpoint_is_subdriver()
278 /* status disabled will prevent creation of platform-devices */ in rockchip_drm_endpoint_is_subdriver()
282 return -ENODEV; in rockchip_drm_endpoint_is_subdriver()
285 * All rockchip subdrivers have probed at this point, so in rockchip_drm_endpoint_is_subdriver()
288 drv = pdev->dev.driver; in rockchip_drm_endpoint_is_subdriver()
314 list_for_each_entry(link, &dev->links.consumers, s_node) in rockchip_drm_match_remove()
328 d = platform_find_device_by_driver(p, &drv->driver); in rockchip_drm_match_add()
343 return match ?: ERR_PTR(-ENODEV); in rockchip_drm_match_add()
353 struct device_node *np = dev->of_node; in rockchip_drm_platform_of_probe()
359 return -ENODEV; in rockchip_drm_platform_of_probe()
368 if (!of_device_is_available(port->parent)) { in rockchip_drm_platform_of_probe()
373 iommu = of_parse_phandle(port->parent, "iommus", 0); in rockchip_drm_platform_of_probe()
374 if (!iommu || !of_device_is_available(iommu->parent)) { in rockchip_drm_platform_of_probe()
376 "no iommu attached for %pOF, using non-iommu buffers\n", in rockchip_drm_platform_of_probe()
377 port->parent); in rockchip_drm_platform_of_probe()
380 * crtc use non-iommu buffer. in rockchip_drm_platform_of_probe()
393 return -ENODEV; in rockchip_drm_platform_of_probe()
398 "No available vop found for display-subsystem.\n"); in rockchip_drm_platform_of_probe()
399 return -ENODEV; in rockchip_drm_platform_of_probe()
407 struct device *dev = &pdev->dev; in rockchip_drm_platform_probe()
430 component_master_del(&pdev->dev, &rockchip_drm_ops); in rockchip_drm_platform_remove()
432 rockchip_drm_match_remove(&pdev->dev); in rockchip_drm_platform_remove()
446 { .compatible = "rockchip,display-subsystem", },
456 .name = "rockchip-drm",
515 MODULE_AUTHOR("Mark Yao <mark.yao@rock-chips.com>");
516 MODULE_DESCRIPTION("ROCKCHIP DRM Driver");