[PATCH 66/70] drm/vc4: Convert to atomic_create_state
Maxime Ripard <[email protected]>
| Newsgroups | org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
The vc4 crtc implementation provides a custom reset hook. However, this hook only allocates the state, initializes it with __drm_atomic_helper_crtc_reset(), sets the assigned_channel field to VC4_HVS_CHANNEL_DISABLED, 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: "Maíra Canal" <[email protected]> Cc: Dave Stevenson <[email protected]> Cc: Raspberry Pi Kernel Maintenance <[email protected]> --- drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c | 2 +- drivers/gpu/drm/vc4/vc4_crtc.c | 14 ++++++-------- drivers/gpu/drm/vc4/vc4_drv.h | 2 +- drivers/gpu/drm/vc4/vc4_txp.c | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c b/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c index ade3309ae042..247863f8e2c5 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c +++ b/drivers/gpu/drm/vc4/tests/vc4_mock_crtc.c @@ -12,11 +12,11 @@ static const struct drm_crtc_helper_funcs vc4_dummy_crtc_helper_funcs = { }; static const struct drm_crtc_funcs vc4_dummy_crtc_funcs = { .atomic_destroy_state = vc4_crtc_destroy_state, .atomic_duplicate_state = vc4_crtc_duplicate_state, - .reset = vc4_crtc_reset, + .atomic_create_state = vc4_crtc_create_state, }; struct vc4_dummy_crtc *vc4_mock_pv(struct kunit *test, struct drm_device *drm, struct drm_plane *plane, diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c index 4572b0b9bae1..f42cd5353230 100644 --- a/drivers/gpu/drm/vc4/vc4_crtc.c +++ b/drivers/gpu/drm/vc4/vc4_crtc.c @@ -1133,25 +1133,23 @@ void vc4_crtc_destroy_state(struct drm_crtc *crtc, } drm_atomic_helper_crtc_destroy_state(crtc, state); } -void vc4_crtc_reset(struct drm_crtc *crtc) +struct drm_crtc_state *vc4_crtc_create_state(struct drm_crtc *crtc) { struct vc4_crtc_state *vc4_crtc_state; - if (crtc->state) - vc4_crtc_destroy_state(crtc, crtc->state); - vc4_crtc_state = kzalloc_obj(*vc4_crtc_state); if (!vc4_crtc_state) { - crtc->state = NULL; - return; + return ERR_PTR(-ENOMEM); } vc4_crtc_state->assigned_channel = VC4_HVS_CHANNEL_DISABLED; - __drm_atomic_helper_crtc_reset(crtc, &vc4_crtc_state->base); + __drm_atomic_helper_crtc_state_init(&vc4_crtc_state->base, crtc); + + return &vc4_crtc_state->base; } int vc4_crtc_late_register(struct drm_crtc *crtc) { struct drm_device *drm = crtc->dev; @@ -1168,11 +1166,11 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .page_flip = vc4_page_flip, .set_property = NULL, .cursor_set = NULL, /* handled by drm_mode_cursor_universal */ .cursor_move = NULL, /* handled by drm_mode_cursor_universal */ - .reset = vc4_crtc_reset, + .atomic_create_state = vc4_crtc_create_state, .atomic_duplicate_state = vc4_crtc_duplicate_state, .atomic_destroy_state = vc4_crtc_destroy_state, .enable_vblank = vc4_enable_vblank, .disable_vblank = vc4_disable_vblank, .get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp, diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h index 0f5958c1e6b6..649032174dbd 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.h +++ b/drivers/gpu/drm/vc4/vc4_drv.h @@ -947,11 +947,11 @@ int vc4_page_flip(struct drm_crtc *crtc, int vc4_crtc_atomic_check(struct drm_crtc *crtc, struct drm_atomic_commit *state); struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc); void vc4_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *state); -void vc4_crtc_reset(struct drm_crtc *crtc); +struct drm_crtc_state *vc4_crtc_create_state(struct drm_crtc *crtc); void vc4_crtc_handle_vblank(struct vc4_crtc *crtc); void vc4_crtc_send_vblank(struct drm_crtc *crtc); int vc4_crtc_late_register(struct drm_crtc *crtc); void vc4_crtc_get_margins(struct drm_crtc_state *state, unsigned int *left, unsigned int *right, diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c index bc3f366fc3e6..c469f8b1068b 100644 --- a/drivers/gpu/drm/vc4/vc4_txp.c +++ b/drivers/gpu/drm/vc4/vc4_txp.c @@ -423,11 +423,11 @@ static int vc4_txp_enable_vblank(struct drm_crtc *crtc) static void vc4_txp_disable_vblank(struct drm_crtc *crtc) {} static const struct drm_crtc_funcs vc4_txp_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .page_flip = vc4_page_flip, - .reset = vc4_crtc_reset, + .atomic_create_state = vc4_crtc_create_state, .atomic_duplicate_state = vc4_crtc_duplicate_state, .atomic_destroy_state = vc4_crtc_destroy_state, .enable_vblank = vc4_txp_enable_vblank, .disable_vblank = vc4_txp_disable_vblank, .late_register = vc4_crtc_late_register, -- 2.55.0