diff options
Diffstat (limited to 'drivers/gpu/drm/vkms/vkms_plane.c')
-rw-r--r-- | drivers/gpu/drm/vkms/vkms_plane.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c index 0824327cc860..6d310d31b75d 100644 --- a/drivers/gpu/drm/vkms/vkms_plane.c +++ b/drivers/gpu/drm/vkms/vkms_plane.c @@ -5,6 +5,7 @@ #include <drm/drm_atomic.h> #include <drm/drm_atomic_helper.h> #include <drm/drm_fourcc.h> +#include <drm/drm_gem_atomic_helper.h> #include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_plane_helper.h> #include <drm/drm_gem_shmem_helper.h> @@ -92,20 +93,22 @@ static const struct drm_plane_funcs vkms_plane_funcs = { }; static void vkms_plane_atomic_update(struct drm_plane *plane, - struct drm_plane_state *old_state) + struct drm_atomic_state *state) { + struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state, + plane); struct vkms_plane_state *vkms_plane_state; - struct drm_framebuffer *fb = plane->state->fb; + struct drm_framebuffer *fb = new_state->fb; struct vkms_composer *composer; - if (!plane->state->crtc || !fb) + if (!new_state->crtc || !fb) return; - vkms_plane_state = to_vkms_plane_state(plane->state); + vkms_plane_state = to_vkms_plane_state(new_state); composer = vkms_plane_state->composer; - memcpy(&composer->src, &plane->state->src, sizeof(struct drm_rect)); - memcpy(&composer->dst, &plane->state->dst, sizeof(struct drm_rect)); + memcpy(&composer->src, &new_state->src, sizeof(struct drm_rect)); + memcpy(&composer->dst, &new_state->dst, sizeof(struct drm_rect)); memcpy(&composer->fb, fb, sizeof(struct drm_framebuffer)); drm_framebuffer_get(&composer->fb); composer->offset = fb->offsets[0]; @@ -114,23 +117,26 @@ static void vkms_plane_atomic_update(struct drm_plane *plane, } static int vkms_plane_atomic_check(struct drm_plane *plane, - struct drm_plane_state *state) + struct drm_atomic_state *state) { + struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, + plane); struct drm_crtc_state *crtc_state; bool can_position = false; int ret; - if (!state->fb || WARN_ON(!state->crtc)) + if (!new_plane_state->fb || WARN_ON(!new_plane_state->crtc)) return 0; - crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc); + crtc_state = drm_atomic_get_crtc_state(state, + new_plane_state->crtc); if (IS_ERR(crtc_state)) return PTR_ERR(crtc_state); if (plane->type == DRM_PLANE_TYPE_CURSOR) can_position = true; - ret = drm_atomic_helper_check_plane_state(state, crtc_state, + ret = drm_atomic_helper_check_plane_state(new_plane_state, crtc_state, DRM_PLANE_HELPER_NO_SCALING, DRM_PLANE_HELPER_NO_SCALING, can_position, true); @@ -138,7 +144,7 @@ static int vkms_plane_atomic_check(struct drm_plane *plane, return ret; /* for now primary plane must be visible and full screen */ - if (!state->visible && !can_position) + if (!new_plane_state->visible && !can_position) return -EINVAL; return 0; @@ -159,7 +165,7 @@ static int vkms_prepare_fb(struct drm_plane *plane, if (ret) DRM_ERROR("vmap failed: %d\n", ret); - return drm_gem_fb_prepare_fb(plane, state); + return drm_gem_plane_helper_prepare_fb(plane, state); } static void vkms_cleanup_fb(struct drm_plane *plane, |