Skip to content

Commit

Permalink
drm/vkms: Inherit plane state from struct drm_shadow_plane_state
Browse files Browse the repository at this point in the history
Subclass struct drm_shadow_plane_state for VKMS planes and update
all plane-state callbacks accordingly.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Melissa Wen <melissa.srw@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210705074633.9425-3-tzimmermann@suse.de
  • Loading branch information
Thomas Zimmermann committed Jul 13, 2021
1 parent b715650 commit 7602d42
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 11 deletions.
2 changes: 1 addition & 1 deletion drivers/gpu/drm/vkms/vkms_composer.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ void vkms_composer_worker(struct work_struct *work)

if (crtc_state->num_active_planes >= 1) {
act_plane = crtc_state->active_planes[0];
if (act_plane->base.plane->type == DRM_PLANE_TYPE_PRIMARY)
if (act_plane->base.base.plane->type == DRM_PLANE_TYPE_PRIMARY)
primary_composer = act_plane->composer;
}

Expand Down
5 changes: 3 additions & 2 deletions drivers/gpu/drm/vkms/vkms_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include <drm/drm.h>
#include <drm/drm_gem.h>
#include <drm/drm_gem_atomic_helper.h>
#include <drm/drm_encoder.h>
#include <drm/drm_writeback.h>

Expand All @@ -33,7 +34,7 @@ struct vkms_composer {
* @composer: data required for composing computation
*/
struct vkms_plane_state {
struct drm_plane_state base;
struct drm_shadow_plane_state base;
struct vkms_composer *composer;
};

Expand Down Expand Up @@ -111,7 +112,7 @@ struct vkms_device {
container_of(target, struct vkms_crtc_state, base)

#define to_vkms_plane_state(target)\
container_of(target, struct vkms_plane_state, base)
container_of(target, struct vkms_plane_state, base.base)

/* CRTC */
int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
Expand Down
16 changes: 8 additions & 8 deletions drivers/gpu/drm/vkms/vkms_plane.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,16 @@ vkms_plane_duplicate_state(struct drm_plane *plane)

vkms_state->composer = composer;

__drm_atomic_helper_plane_duplicate_state(plane,
&vkms_state->base);
__drm_gem_duplicate_shadow_plane_state(plane, &vkms_state->base);

return &vkms_state->base;
return &vkms_state->base.base;
}

static void vkms_plane_destroy_state(struct drm_plane *plane,
struct drm_plane_state *old_state)
{
struct vkms_plane_state *vkms_state = to_vkms_plane_state(old_state);
struct drm_crtc *crtc = vkms_state->base.crtc;
struct drm_crtc *crtc = vkms_state->base.base.crtc;

if (crtc) {
/* dropping the reference we acquired in
Expand All @@ -63,25 +62,26 @@ static void vkms_plane_destroy_state(struct drm_plane *plane,
kfree(vkms_state->composer);
vkms_state->composer = NULL;

__drm_atomic_helper_plane_destroy_state(old_state);
__drm_gem_destroy_shadow_plane_state(&vkms_state->base);
kfree(vkms_state);
}

static void vkms_plane_reset(struct drm_plane *plane)
{
struct vkms_plane_state *vkms_state;

if (plane->state)
if (plane->state) {
vkms_plane_destroy_state(plane, plane->state);
plane->state = NULL; /* must be set to NULL here */
}

vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL);
if (!vkms_state) {
DRM_ERROR("Cannot allocate vkms_plane_state\n");
return;
}

plane->state = &vkms_state->base;
plane->state->plane = plane;
__drm_gem_reset_shadow_plane(plane, &vkms_state->base);
}

static const struct drm_plane_funcs vkms_plane_funcs = {
Expand Down

0 comments on commit 7602d42

Please sign in to comment.