On Sat, Jul 14, 2018 at 03:22:36PM +0300, Haneen Mohammed wrote:
Subclass CRTC state struct to enable storing driver's private state. This patch only adds the base drm_crtc_state struct and the atomic functions that handle it.
Signed-off-by: Haneen Mohammed hamohammed.sa@gmail.com Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch
Reviewed-by: Sean Paul seanpaul@chromium.org
drivers/gpu/drm/vkms/vkms_crtc.c | 53 ++++++++++++++++++++++++++++++-- drivers/gpu/drm/vkms/vkms_drv.h | 11 +++++++ 2 files changed, 61 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c index 875fca662ac0..26babb85ca77 100644 --- a/drivers/gpu/drm/vkms/vkms_crtc.c +++ b/drivers/gpu/drm/vkms/vkms_crtc.c @@ -64,13 +64,60 @@ bool vkms_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe, return true; }
+static void vkms_atomic_crtc_reset(struct drm_crtc *crtc) +{
- struct vkms_crtc_state *vkms_state = NULL;
- if (crtc->state) {
vkms_state = to_vkms_crtc_state(crtc->state);
__drm_atomic_helper_crtc_destroy_state(crtc->state);
kfree(vkms_state);
crtc->state = NULL;
- }
- vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL);
- if (!vkms_state)
return;
- crtc->state = &vkms_state->base;
- crtc->state->crtc = crtc;
+}
+static struct drm_crtc_state * +vkms_atomic_crtc_duplicate_state(struct drm_crtc *crtc) +{
- struct vkms_crtc_state *vkms_state;
- if (WARN_ON(!crtc->state))
return NULL;
- vkms_state = kzalloc(sizeof(*vkms_state), GFP_KERNEL);
- if (!vkms_state)
return NULL;
- __drm_atomic_helper_crtc_duplicate_state(crtc, &vkms_state->base);
- return &vkms_state->base;
+}
+static void vkms_atomic_crtc_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state)
+{
- struct vkms_crtc_state *vkms_state;
- vkms_state = to_vkms_crtc_state(state);
- __drm_atomic_helper_crtc_destroy_state(state);
- kfree(vkms_state);
+}
static const struct drm_crtc_funcs vkms_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .destroy = drm_crtc_cleanup, .page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
- .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
- .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
- .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,
}; diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h index 855e1ea8bc35..bf811d0ec349 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -20,6 +20,14 @@ static const u32 vkms_formats[] = { DRM_FORMAT_XRGB8888, };
+/**
- vkms_crtc_state - Driver specific CRTC state
- @base: base CRTC state
- */
+struct vkms_crtc_state {
- struct drm_crtc_state base;
+};
struct vkms_output { struct drm_crtc crtc; struct drm_encoder encoder; @@ -52,6 +60,9 @@ struct vkms_gem_object { #define drm_gem_to_vkms_gem(target)\ container_of(target, struct vkms_gem_object, gem)
+#define to_vkms_crtc_state(target)\
- container_of(target, struct vkms_crtc_state, base)
/* CRTC */ int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, struct drm_plane *primary, struct drm_plane *cursor); -- 2.17.1