[PATCH 68/70] drm/vmwgfx: Convert to atomic_create_state
Maxime Ripard <[email protected]>
| Newsgroups | org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
The vmwgfx crtc implementation provides a custom reset hook. However, this hook only allocates the state, initializes it with __drm_atomic_helper_crtc_reset(), and frees the previous state. It does not perform any hardware reset. Since this is exactly what the atomic_create_state hook is meant to do, minus the old state cleanup which the caller handles, convert the implementation to use atomic_create_state with __drm_atomic_helper_crtc_state_init() instead. Signed-off-by: Maxime Ripard <[email protected]> --- Cc: Broadcom internal kernel review list <[email protected]> Cc: Zack Rusin <[email protected]> --- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 22 +++++++--------------- drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 2 +- 5 files changed, 11 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index 1b407b61f683..0b470809661c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -204,36 +204,28 @@ vmw_du_crtc_duplicate_state(struct drm_crtc *crtc) return state; } /** - * vmw_du_crtc_reset - creates a blank vmw crtc state + * vmw_du_crtc_create_state - creates a blank vmw crtc state * @crtc: DRM crtc * - * Resets the atomic state for @crtc by freeing the state pointer (which - * might be NULL, e.g. at driver load time) and allocating a new empty state - * object. + * Allocates a new empty state object for @crtc. */ -void vmw_du_crtc_reset(struct drm_crtc *crtc) +struct drm_crtc_state *vmw_du_crtc_create_state(struct drm_crtc *crtc) { struct vmw_crtc_state *vcs; - - if (crtc->state) { - __drm_atomic_helper_crtc_destroy_state(crtc->state); - - kfree(vmw_crtc_state_to_vcs(crtc->state)); - } - vcs = kzalloc_obj(*vcs); - if (!vcs) { DRM_ERROR("Cannot allocate vmw_crtc_state\n"); - return; + return ERR_PTR(-ENOMEM); } - __drm_atomic_helper_crtc_reset(crtc, &vcs->base); + __drm_atomic_helper_crtc_state_init(&vcs->base, crtc); + + return &vcs->base; } /** * vmw_du_crtc_destroy_state - destroy crtc state diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h index 2224d7d91d1b..e641f33341e6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h @@ -419,11 +419,11 @@ void vmw_du_plane_unpin_surf(struct vmw_plane_state *vps); int vmw_du_crtc_atomic_check(struct drm_crtc *crtc, struct drm_atomic_commit *state); void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_atomic_commit *state); -void vmw_du_crtc_reset(struct drm_crtc *crtc); +struct drm_crtc_state *vmw_du_crtc_create_state(struct drm_crtc *crtc); struct drm_crtc_state *vmw_du_crtc_duplicate_state(struct drm_crtc *crtc); void vmw_du_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *state); void vmw_du_connector_reset(struct drm_connector *connector); struct drm_connector_state * diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c index af3e32174563..a4b28341f622 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c @@ -247,11 +247,11 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc) } static const struct drm_crtc_funcs vmw_legacy_crtc_funcs = { .gamma_set = vmw_du_crtc_gamma_set, .destroy = vmw_ldu_crtc_destroy, - .reset = vmw_du_crtc_reset, + .atomic_create_state = vmw_du_crtc_create_state, .atomic_duplicate_state = vmw_du_crtc_duplicate_state, .atomic_destroy_state = vmw_du_crtc_destroy_state, .set_config = drm_atomic_helper_set_config, .page_flip = drm_atomic_helper_page_flip, .enable_vblank = vmw_vkms_enable_vblank, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c index c83061cf7455..a05f935f1841 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c @@ -303,11 +303,11 @@ static void vmw_sou_crtc_atomic_disable(struct drm_crtc *crtc, } static const struct drm_crtc_funcs vmw_screen_object_crtc_funcs = { .gamma_set = vmw_du_crtc_gamma_set, .destroy = vmw_sou_crtc_destroy, - .reset = vmw_du_crtc_reset, + .atomic_create_state = vmw_du_crtc_create_state, .atomic_duplicate_state = vmw_du_crtc_duplicate_state, .atomic_destroy_state = vmw_du_crtc_destroy_state, .set_config = drm_atomic_helper_set_config, .page_flip = drm_atomic_helper_page_flip, .enable_vblank = vmw_vkms_enable_vblank, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c index 4139837f4caf..939da0e11dbb 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c @@ -776,11 +776,11 @@ int vmw_kms_stdu_surface_dirty(struct vmw_private *dev_priv, * Screen Target CRTC dispatch table */ static const struct drm_crtc_funcs vmw_stdu_crtc_funcs = { .gamma_set = vmw_du_crtc_gamma_set, .destroy = vmw_stdu_crtc_destroy, - .reset = vmw_du_crtc_reset, + .atomic_create_state = vmw_du_crtc_create_state, .atomic_duplicate_state = vmw_du_crtc_duplicate_state, .atomic_destroy_state = vmw_du_crtc_destroy_state, .set_config = drm_atomic_helper_set_config, .page_flip = drm_atomic_helper_page_flip, .enable_vblank = vmw_vkms_enable_vblank, -- 2.55.0