diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig index 1f301690907e..3642be592737 100644 --- a/drivers/gpu/drm/rockchip/Kconfig +++ b/drivers/gpu/drm/rockchip/Kconfig @@ -117,6 +117,13 @@ config ROCKCHIP_VCONN This selects support virtual HDMI/DP/DSI drived by rockchip vop, This is used for some test. +config DRM_ROCKCHIP_VVOP + bool "Rockchip virtual VOP drm driver" + help + Say y here if you want use some module of rockchip drm, but + don't need a real vop driver(et: you just want rockchip drm + gem driver to allocate memory). + source "drivers/gpu/drm/rockchip/rk628/Kconfig" endif diff --git a/drivers/gpu/drm/rockchip/Makefile b/drivers/gpu/drm/rockchip/Makefile index 7ad5bf3ed030..fe6961c06aab 100644 --- a/drivers/gpu/drm/rockchip/Makefile +++ b/drivers/gpu/drm/rockchip/Makefile @@ -21,6 +21,7 @@ rockchipdrm-$(CONFIG_ROCKCHIP_LVDS) += rockchip_lvds.o rockchipdrm-$(CONFIG_ROCKCHIP_RGB) += rockchip_rgb.o rockchipdrm-$(CONFIG_ROCKCHIP_RK3066_HDMI) += rk3066_hdmi.o rockchipdrm-$(CONFIG_ROCKCHIP_VCONN) += rockchip_drm_vconn.o +rockchipdrm-$(CONFIG_DRM_ROCKCHIP_VVOP) += rockchip_drm_vvop.o obj-$(CONFIG_DRM_ROCKCHIP) += rockchipdrm.o diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 022c449beed4..fa6285529920 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -44,7 +44,12 @@ #define DRIVER_MAJOR 3 #define DRIVER_MINOR 0 +#if IS_ENABLED(CONFIG_DRM_ROCKCHIP_VVOP) +static bool is_support_iommu = false; +#else static bool is_support_iommu = true; +#endif + static struct drm_driver rockchip_drm_driver; void drm_mode_convert_to_split_mode(struct drm_display_mode *mode) @@ -1780,8 +1785,10 @@ static int rockchip_drm_platform_probe(struct platform_device *pdev) int ret; ret = rockchip_drm_platform_of_probe(dev); +#if !IS_ENABLED(CONFIG_DRM_ROCKCHIP_VVOP) if (ret) return ret; +#endif match = rockchip_drm_match_add(dev); if (IS_ERR(match)) @@ -1845,6 +1852,9 @@ static int __init rockchip_drm_init(void) int ret; num_rockchip_sub_drivers = 0; +#if IS_ENABLED(CONFIG_DRM_ROCKCHIP_VVOP) + ADD_ROCKCHIP_SUB_DRIVER(vvop_platform_driver, CONFIG_DRM_ROCKCHIP_VVOP); +#else ADD_ROCKCHIP_SUB_DRIVER(vop_platform_driver, CONFIG_DRM_ROCKCHIP); ADD_ROCKCHIP_SUB_DRIVER(vop2_platform_driver, CONFIG_DRM_ROCKCHIP); ADD_ROCKCHIP_SUB_DRIVER(vconn_platform_driver, CONFIG_ROCKCHIP_VCONN); @@ -1865,6 +1875,7 @@ static int __init rockchip_drm_init(void) ADD_ROCKCHIP_SUB_DRIVER(rockchip_rgb_driver, CONFIG_ROCKCHIP_RGB); ADD_ROCKCHIP_SUB_DRIVER(dw_dp_driver, CONFIG_ROCKCHIP_DW_DP); +#endif ret = platform_register_drivers(rockchip_sub_drivers, num_rockchip_sub_drivers); if (ret) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index 7f3b7c765357..72658241535e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -475,4 +475,5 @@ extern struct platform_driver rk3066_hdmi_driver; extern struct platform_driver rockchip_rgb_driver; extern struct platform_driver dw_dp_driver; extern struct platform_driver vconn_platform_driver; +extern struct platform_driver vvop_platform_driver; #endif /* _ROCKCHIP_DRM_DRV_H_ */ diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c index 9c74221d7a05..3013b89f2cc0 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vvop.c @@ -6,11 +6,14 @@ #include #include +#include #include #include #include #include #include +#include +#include #define DRIVER_NAME "virtual-vop"