The vmwgfx connector reset implementation creates a custom state subclass, but only initializes a pristine state without resetting any hardware. This is equivalent to what atomic_create_state expects. Convert to it.
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 | 23 ++++++++--------------- drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 3 ++- 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, 13 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index 9031dccad31d..792758d92f3c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -351,36 +351,29 @@ vmw_du_connector_duplicate_state(struct drm_connector *connector) return state; } /** - * vmw_du_connector_reset - creates a blank vmw connector state + * vmw_du_connector_create_state - creates a blank vmw connector state * @connector: DRM connector * - * Resets the atomic state for @connector 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 @connector. */ -void vmw_du_connector_reset(struct drm_connector *connector) +struct drm_connector_state * +vmw_du_connector_create_state(struct drm_connector *connector) { struct vmw_connector_state *vcs; - - if (connector->state) { - __drm_atomic_helper_connector_destroy_state(connector->state); - - kfree(vmw_connector_state_to_vcs(connector->state)); - } - vcs = kzalloc_obj(*vcs); - if (!vcs) { DRM_ERROR("Cannot allocate vmw_connector_state\n"); - return; + return ERR_PTR(-ENOMEM); } - __drm_atomic_helper_connector_reset(connector, &vcs->base); + __drm_atomic_helper_connector_state_init(&vcs->base, connector); + + return &vcs->base; } /** * vmw_du_connector_destroy_state - destroy connector state diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h index 5085d8bccf0a..283550363fac 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h @@ -423,11 +423,12 @@ void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_atomic_commit *state); 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 * +vmw_du_connector_create_state(struct drm_connector *connector); struct drm_connector_state * vmw_du_connector_duplicate_state(struct drm_connector *connector); void vmw_du_connector_destroy_state(struct drm_connector *connector, struct drm_connector_state *state); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c index b147f5db9df5..0dea09cc29a7 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c @@ -285,11 +285,11 @@ static void vmw_ldu_connector_destroy(struct drm_connector *connector) static const struct drm_connector_funcs vmw_legacy_connector_funcs = { .dpms = vmw_du_connector_dpms, .detect = vmw_du_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, .destroy = vmw_ldu_connector_destroy, - .reset = vmw_du_connector_reset, + .atomic_create_state = vmw_du_connector_create_state, .atomic_duplicate_state = vmw_du_connector_duplicate_state, .atomic_destroy_state = vmw_du_connector_destroy_state, }; static const struct diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c index 89714d5c235b..39d58fc392bf 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c @@ -340,11 +340,11 @@ static void vmw_sou_connector_destroy(struct drm_connector *connector) static const struct drm_connector_funcs vmw_sou_connector_funcs = { .dpms = vmw_du_connector_dpms, .detect = vmw_du_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, .destroy = vmw_sou_connector_destroy, - .reset = vmw_du_connector_reset, + .atomic_create_state = vmw_du_connector_create_state, .atomic_duplicate_state = vmw_du_connector_duplicate_state, .atomic_destroy_state = vmw_du_connector_destroy_state, }; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c index cbf55084110a..b505f8ba3e83 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c @@ -906,11 +906,11 @@ static int vmw_stdu_connector_atomic_check(struct drm_connector *conn, static const struct drm_connector_funcs vmw_stdu_connector_funcs = { .dpms = vmw_du_connector_dpms, .detect = vmw_du_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, .destroy = vmw_stdu_connector_destroy, - .reset = vmw_du_connector_reset, + .atomic_create_state = vmw_du_connector_create_state, .atomic_duplicate_state = vmw_du_connector_duplicate_state, .atomic_destroy_state = vmw_du_connector_destroy_state, }; -- 2.55.0
