Hi, On Wed, Jan 08, 2025 at 11:19:01AM +0100, Herve Codina wrote: > reset_pipe() allows to reset the CRTC active outputs. > > In order to use it from other drivers without code duplication, move it > to an atomic helper without any functional changes. > > Signed-off-by: Herve Codina <herve.codina@xxxxxxxxxxx> > --- > drivers/gpu/drm/drm_atomic_helper.c | 41 +++++++++++++++++++++++++++++ > drivers/gpu/drm/vc4/vc4_hdmi.c | 30 +-------------------- > include/drm/drm_atomic_helper.h | 2 ++ > 3 files changed, 44 insertions(+), 29 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 8ed186ddaeaf..4225b814ea35 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -3363,6 +3363,47 @@ int drm_atomic_helper_disable_all(struct drm_device *dev, > } > EXPORT_SYMBOL(drm_atomic_helper_disable_all); > > +/** > + * drm_atomic_helper_reset_pipe - reset the active outputs of a CRTC > + * @crtc: DRM CRTC > + * @ctx: lock acquisition context > + * > + * Reset the active outputs by indicating that connectors have changed. > + * This implies a reset of all active components available between the CRTC and > + * connectors. > + * > + * Returns: > + * 0 on success or a negative error code on failure. > + */ > +int drm_atomic_helper_reset_pipe(struct drm_crtc *crtc, > + struct drm_modeset_acquire_ctx *ctx) We should probably name it reset_crtc to make it more consistent with the other helpers. > +{ > + struct drm_atomic_state *state; > + struct drm_crtc_state *crtc_state; > + int ret; > + > + state = drm_atomic_state_alloc(crtc->dev); > + if (!state) > + return -ENOMEM; > + > + state->acquire_ctx = ctx; > + > + crtc_state = drm_atomic_get_crtc_state(state, crtc); > + if (IS_ERR(crtc_state)) { > + ret = PTR_ERR(crtc_state); > + goto out; > + } > + > + crtc_state->connectors_changed = true; > + > + ret = drm_atomic_commit(state); > +out: > + drm_atomic_state_put(state); > + > + return ret; > +} > +EXPORT_SYMBOL(drm_atomic_helper_reset_pipe); > + > /** > * drm_atomic_helper_shutdown - shutdown all CRTC > * @dev: DRM device > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > index e3818c48c9b8..19f6592a8cc5 100644 > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -269,34 +269,6 @@ static void vc4_hdmi_cec_update_clk_div(struct vc4_hdmi *vc4_hdmi) > static void vc4_hdmi_cec_update_clk_div(struct vc4_hdmi *vc4_hdmi) {} > #endif > > -static int reset_pipe(struct drm_crtc *crtc, > - struct drm_modeset_acquire_ctx *ctx) > -{ > - struct drm_atomic_state *state; > - struct drm_crtc_state *crtc_state; > - int ret; > - > - state = drm_atomic_state_alloc(crtc->dev); > - if (!state) > - return -ENOMEM; > - > - state->acquire_ctx = ctx; > - > - crtc_state = drm_atomic_get_crtc_state(state, crtc); > - if (IS_ERR(crtc_state)) { > - ret = PTR_ERR(crtc_state); > - goto out; > - } > - > - crtc_state->connectors_changed = true; > - > - ret = drm_atomic_commit(state); > -out: > - drm_atomic_state_put(state); > - > - return ret; > -} > - > static int vc4_hdmi_reset_link(struct drm_connector *connector, > struct drm_modeset_acquire_ctx *ctx) > { > @@ -375,7 +347,7 @@ static int vc4_hdmi_reset_link(struct drm_connector *connector, > * would be perfectly happy if were to just reconfigure > * the SCDC settings on the fly. > */ > - return reset_pipe(crtc, ctx); > + return drm_atomic_helper_reset_pipe(crtc, ctx); > } And that part should be in another patch Maxime
Attachment:
signature.asc
Description: PGP signature