diff --git a/drivers/gpu/drm/vkms/vkms_composer.c b/drivers/gpu/drm/vkms/vkms_composer.c index 2988d5b49eb6..2b516e60c07f 100644 --- a/drivers/gpu/drm/vkms/vkms_composer.c +++ b/drivers/gpu/drm/vkms/vkms_composer.c @@ -373,8 +373,22 @@ int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name) int ret = 0; ret = vkms_crc_parse_source(src_name, &enabled); - + printk(KERN_CRIT "enabled after parsing is %d\n", enabled); vkms_set_composer(out, enabled); return ret; } + + +int vkms_set_crc_vhw_source(struct drm_crtc *crtc, const char *src_name) +{ + struct vkms_output *out = drm_crtc_to_vkms_output(crtc); + bool enabled = false; + int ret = 0; + + ret = vkms_crc_parse_source(src_name, &enabled); + + //vkms_set_composer(out, enabled); + + return ret; +} \ No newline at end of file diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c index 8477b33c4d09..957f560612f1 100644 --- a/drivers/gpu/drm/vkms/vkms_crtc.c +++ b/drivers/gpu/drm/vkms/vkms_crtc.c @@ -174,6 +174,21 @@ static const struct drm_crtc_funcs vkms_crtc_funcs = { .verify_crc_source = vkms_verify_crc_source, }; +static const struct drm_crtc_funcs vkms_crtc_vhw_funcs = { + .set_config = drm_atomic_helper_set_config, + .destroy = drm_crtc_cleanup, + .page_flip = drm_atomic_helper_page_flip, + .reset = vkms_atomic_crtc_reset, + .atomic_duplicate_state = vkms_atomic_crtc_duplicate_state, + .atomic_destroy_state = vkms_atomic_crtc_destroy_state, + //.enable_vblank = vkms_enable_vblank, + //.disable_vblank = vkms_disable_vblank, + //.get_vblank_timestamp = vkms_get_vblank_timestamp, + .get_crc_sources = vkms_get_crc_sources, + .set_crc_source = vkms_set_crc_vhw_source, + .verify_crc_source = vkms_verify_crc_source, +}; + static int vkms_crtc_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *state) { @@ -302,8 +317,15 @@ int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, struct vkms_device *vkmsdev = drm_device_to_vkms_device(dev); int ret; - ret = drm_crtc_init_with_planes(dev, crtc, primary, cursor, + if (vkmsdev->config->virtual_hw) + ret = drm_crtc_init_with_planes(dev, crtc, primary, cursor, + &vkms_crtc_vhw_funcs, NULL); + else + ret = drm_crtc_init_with_planes(dev, crtc, primary, cursor, &vkms_crtc_funcs, NULL); + + //ret = drm_crtc_init_with_planes(dev, crtc, primary, cursor, + // &vkms_crtc_funcs, NULL); if (ret) { DRM_ERROR("Failed to init CRTC\n"); return ret; diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h index 770594e07f0e..1959e78746c5 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -129,6 +129,7 @@ struct vkms_plane *vkms_plane_init(struct vkms_device *vkmsdev, const char *const *vkms_get_crc_sources(struct drm_crtc *crtc, size_t *count); int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name); +int vkms_set_crc_vhw_source(struct drm_crtc *crtc, const char *src_name); int vkms_verify_crc_source(struct drm_crtc *crtc, const char *source_name, size_t *values_cnt);