Hi Am 28.10.20 um 13:32 schrieb Maxime Ripard: > The current atomic helpers have either their object state being passed as > an argument or the full atomic state. > > The former is the pattern that was done at first, before switching to the > latter for new hooks or when it was needed. > > Let's start convert all the remaining helpers to provide a consistent > interface, starting with the CRTC's atomic_check. > > The conversion was done using the coccinelle script below, > built tested on all the drivers and actually tested on vc4. > > virtual report > > @@ > struct drm_crtc_helper_funcs *FUNCS; > struct drm_crtc *crtc; > struct drm_crtc_state *crtc_state; > identifier dev, state; > identifier ret, f; > @@ > > f(struct drm_device *dev, struct drm_atomic_state *state) > { > <... > - ret = FUNCS->atomic_check(crtc, crtc_state); > + ret = FUNCS->atomic_check(crtc, state); > ...> > } > > @@ > identifier crtc, new_state; > @@ > > struct drm_crtc_helper_funcs { > ... > - int (*atomic_check)(struct drm_crtc *crtc, struct drm_crtc_state *new_state); > + int (*atomic_check)(struct drm_crtc *crtc, struct drm_atomic_state *state); > ... > } > > @ crtc_atomic_func @ > identifier helpers; > identifier func; > @@ > > static struct drm_crtc_helper_funcs helpers = { > ..., > .atomic_check = func, > ..., > }; > > @ ignores_new_state @ > identifier crtc_atomic_func.func; > identifier crtc, new_state; > @@ > > int func(struct drm_crtc *crtc, > struct drm_crtc_state *new_state) > { > ... when != new_state > } > > @ adds_new_state depends on crtc_atomic_func && !ignores_new_state @ > identifier crtc_atomic_func.func; > identifier crtc, new_state; > @@ > > int func(struct drm_crtc *crtc, struct drm_crtc_state *new_state) > { > + struct drm_crtc_state *new_state = drm_atomic_get_new_crtc_state(state, crtc); > ... > } > > @ depends on crtc_atomic_func @ > identifier crtc_atomic_func.func; > expression E; > type T; > @@ > > int func(...) > { > ... > - T state = E; > + T crtc_state = E; > <+... > - state > + crtc_state > ...+> > } > > @ depends on crtc_atomic_func @ > identifier crtc_atomic_func.func; > type T; > @@ > > int func(...) > { > ... > - T state; > + T crtc_state; > <+... > - state > + crtc_state > ...+> > } > > @ depends on crtc_atomic_func @ > identifier crtc_atomic_func.func; > identifier new_state; > identifier crtc; > @@ > > int func(struct drm_crtc *crtc, > - struct drm_crtc_state *new_state > + struct drm_atomic_state *state > ) > { ... } > > @@ > identifier new_state; > identifier crtc; > @@ > > int vmw_du_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *new_state > + struct drm_atomic_state *state > ) > { > + struct drm_crtc_state *new_state = drm_atomic_get_new_crtc_state(state, crtc); > ... > } > > @@ > identifier new_state; > identifier crtc; > @@ > > int vmw_du_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *new_state > + struct drm_atomic_state *state > ); > > @ include depends on adds_new_state @ > @@ > > #include > > @ no_include depends on !include && adds_new_state @ > @@ > > + #include > #include > > Signed-off-by: Maxime Ripard Acked-by: Thomas Zimmermann I read through the patch and it looks correct to me. The naming is a bit off at times. For example, ast_state should now probably be called ast_crtc_state. But that's not a blocker IMHO. Best regards Thomas > --- > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 ++++++----- > .../gpu/drm/arm/display/komeda/komeda_crtc.c | 10 ++++---- > drivers/gpu/drm/arm/malidp_crtc.c | 20 ++++++++-------- > drivers/gpu/drm/armada/armada_crtc.c | 10 ++++---- > drivers/gpu/drm/ast/ast_mode.c | 12 ++++++---- > .../gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 3 ++- > drivers/gpu/drm/drm_atomic_helper.c | 2 +- > drivers/gpu/drm/drm_simple_kms_helper.c | 10 ++++---- > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 8 ++++--- > drivers/gpu/drm/imx/ipuv3-crtc.c | 6 +++-- > drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 19 +++++++++------ > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 23 +++++++++++-------- > drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 2 +- > drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 13 +++++++---- > drivers/gpu/drm/mxsfb/mxsfb_kms.c | 10 ++++---- > drivers/gpu/drm/nouveau/dispnv50/head.c | 7 ++++-- > drivers/gpu/drm/omapdrm/omap_crtc.c | 13 +++++++---- > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 11 +++++---- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 4 +++- > drivers/gpu/drm/sun4i/sun4i_crtc.c | 7 ++++-- > drivers/gpu/drm/tidss/tidss_crtc.c | 10 ++++---- > drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 12 ++++++---- > drivers/gpu/drm/vc4/vc4_crtc.c | 11 +++++---- > drivers/gpu/drm/vc4/vc4_txp.c | 10 ++++---- > drivers/gpu/drm/virtio/virtgpu_display.c | 2 +- > drivers/gpu/drm/vkms/vkms_crtc.c | 16 +++++++------ > drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 4 +++- > drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 +- > drivers/gpu/drm/xlnx/zynqmp_disp.c | 6 +++-- > include/drm/drm_modeset_helper_vtables.h | 5 ++-- > 30 files changed, 170 insertions(+), 112 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > index b24c14bfab31..eb3a5bfb9f11 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -5488,17 +5488,19 @@ static void dm_update_crtc_active_planes(struct drm_crtc *crtc, > } > > static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct amdgpu_device *adev = drm_to_adev(crtc->dev); > struct dc *dc = adev->dm.dc; > - struct dm_crtc_state *dm_crtc_state = to_dm_crtc_state(state); > + struct dm_crtc_state *dm_crtc_state = to_dm_crtc_state(crtc_state); > int ret = -EINVAL; > > - dm_update_crtc_active_planes(crtc, state); > + dm_update_crtc_active_planes(crtc, crtc_state); > > if (unlikely(!dm_crtc_state->stream && > - modeset_required(state, NULL, dm_crtc_state->stream))) { > + modeset_required(crtc_state, NULL, dm_crtc_state->stream))) { > WARN_ON(1); > return ret; > } > @@ -5511,8 +5513,8 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc, > * We want at least one hardware plane enabled to use > * the stream with a cursor enabled. > */ > - if (state->enable && state->active && > - does_crtc_have_active_cursor(state) && > + if (crtc_state->enable && crtc_state->active && > + does_crtc_have_active_cursor(crtc_state) && > dm_crtc_state->active_planes == 0) > return -EINVAL; > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c b/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c > index a4bbf56a7fc1..cc65623b5455 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_crtc.c > @@ -74,16 +74,18 @@ static void komeda_crtc_update_clock_ratio(struct komeda_crtc_state *kcrtc_st) > */ > static int > komeda_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct komeda_crtc *kcrtc = to_kcrtc(crtc); > - struct komeda_crtc_state *kcrtc_st = to_kcrtc_st(state); > + struct komeda_crtc_state *kcrtc_st = to_kcrtc_st(crtc_state); > int err; > > - if (drm_atomic_crtc_needs_modeset(state)) > + if (drm_atomic_crtc_needs_modeset(crtc_state)) > komeda_crtc_update_clock_ratio(kcrtc_st); > > - if (state->active) { > + if (crtc_state->active) { > err = komeda_build_display_data_flow(kcrtc, kcrtc_st); > if (err) > return err; > diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c > index 49766eb7a554..108e7a31bd26 100644 > --- a/drivers/gpu/drm/arm/malidp_crtc.c > +++ b/drivers/gpu/drm/arm/malidp_crtc.c > @@ -337,8 +337,10 @@ static int malidp_crtc_atomic_check_scaling(struct drm_crtc *crtc, > } > > static int malidp_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct malidp_drm *malidp = crtc_to_malidp_device(crtc); > struct malidp_hw_device *hwdev = malidp->dev; > struct drm_plane *plane; > @@ -373,7 +375,7 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc, > */ > > /* first count the number of rotated planes */ > - drm_atomic_crtc_state_for_each_plane_state(plane, pstate, state) { > + drm_atomic_crtc_state_for_each_plane_state(plane, pstate, crtc_state) { > struct drm_framebuffer *fb = pstate->fb; > > if ((pstate->rotation & MALIDP_ROTATED_MASK) || fb->modifier) > @@ -389,7 +391,7 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc, > rot_mem_free += hwdev->rotation_memory[1]; > > /* now validate the rotation memory requirements */ > - drm_atomic_crtc_state_for_each_plane_state(plane, pstate, state) { > + drm_atomic_crtc_state_for_each_plane_state(plane, pstate, crtc_state) { > struct malidp_plane *mp = to_malidp_plane(plane); > struct malidp_plane_state *ms = to_malidp_plane_state(pstate); > struct drm_framebuffer *fb = pstate->fb; > @@ -417,18 +419,18 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc, > } > > /* If only the writeback routing has changed, we don't need a modeset */ > - if (state->connectors_changed) { > + if (crtc_state->connectors_changed) { > u32 old_mask = crtc->state->connector_mask; > - u32 new_mask = state->connector_mask; > + u32 new_mask = crtc_state->connector_mask; > > if ((old_mask ^ new_mask) == > (1 << drm_connector_index(&malidp->mw_connector.base))) > - state->connectors_changed = false; > + crtc_state->connectors_changed = false; > } > > - ret = malidp_crtc_atomic_check_gamma(crtc, state); > - ret = ret ? ret : malidp_crtc_atomic_check_ctm(crtc, state); > - ret = ret ? ret : malidp_crtc_atomic_check_scaling(crtc, state); > + ret = malidp_crtc_atomic_check_gamma(crtc, crtc_state); > + ret = ret ? ret : malidp_crtc_atomic_check_ctm(crtc, crtc_state); > + ret = ret ? ret : malidp_crtc_atomic_check_scaling(crtc, crtc_state); > > return ret; > } > diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c > index e0fbfc9ce386..d22ca1496c43 100644 > --- a/drivers/gpu/drm/armada/armada_crtc.c > +++ b/drivers/gpu/drm/armada/armada_crtc.c > @@ -413,15 +413,17 @@ static void armada_drm_crtc_mode_set_nofb(struct drm_crtc *crtc) > } > > static int armada_drm_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name); > > - if (state->gamma_lut && drm_color_lut_size(state->gamma_lut) != 256) > + if (crtc_state->gamma_lut && drm_color_lut_size(crtc_state->gamma_lut) != 256) > return -EINVAL; > > - if (state->color_mgmt_changed) > - state->planes_changed = true; > + if (crtc_state->color_mgmt_changed) > + crtc_state->planes_changed = true; > > return 0; > } > diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c > index bd03a8a67e3a..346dce2d654f 100644 > --- a/drivers/gpu/drm/ast/ast_mode.c > +++ b/drivers/gpu/drm/ast/ast_mode.c > @@ -751,24 +751,26 @@ static void ast_crtc_dpms(struct drm_crtc *crtc, int mode) > } > > static int ast_crtc_helper_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct drm_device *dev = crtc->dev; > struct ast_crtc_state *ast_state; > const struct drm_format_info *format; > bool succ; > > - if (!state->enable) > + if (!crtc_state->enable) > return 0; /* no mode checks if CRTC is being disabled */ > > - ast_state = to_ast_crtc_state(state); > + ast_state = to_ast_crtc_state(crtc_state); > > format = ast_state->format; > if (drm_WARN_ON_ONCE(dev, !format)) > return -EINVAL; /* BUG: We didn't set format in primary check(). */ > > - succ = ast_get_vbios_mode_info(format, &state->mode, > - &state->adjusted_mode, > + succ = ast_get_vbios_mode_info(format, &crtc_state->mode, > + &crtc_state->adjusted_mode, > &ast_state->vbios_mode_info); > if (!succ) > return -EINVAL; > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c > index 2b3888df22f8..0e533ded2a96 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c > @@ -325,8 +325,9 @@ static int atmel_hlcdc_crtc_select_output_mode(struct drm_crtc_state *state) > } > > static int atmel_hlcdc_crtc_atomic_check(struct drm_crtc *c, > - struct drm_crtc_state *s) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *s = drm_atomic_get_new_crtc_state(state, c); > int ret; > > ret = atmel_hlcdc_crtc_select_output_mode(s); > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index a7bcb4b4586c..12d8095318d0 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -918,7 +918,7 @@ drm_atomic_helper_check_planes(struct drm_device *dev, > if (!funcs || !funcs->atomic_check) > continue; > > - ret = funcs->atomic_check(crtc, new_crtc_state); > + ret = funcs->atomic_check(crtc, state); > if (ret) { > DRM_DEBUG_ATOMIC("[CRTC:%d:%s] atomic driver check failed\n", > crtc->base.id, crtc->name); > diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c > index fa87b63e152a..4b46689634dd 100644 > --- a/drivers/gpu/drm/drm_simple_kms_helper.c > +++ b/drivers/gpu/drm/drm_simple_kms_helper.c > @@ -86,16 +86,18 @@ drm_simple_kms_crtc_mode_valid(struct drm_crtc *crtc, > } > > static int drm_simple_kms_crtc_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > - bool has_primary = state->plane_mask & > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > + bool has_primary = crtc_state->plane_mask & > drm_plane_mask(crtc->primary); > > /* We always want to have an active plane with an active CRTC */ > - if (has_primary != state->enable) > + if (has_primary != crtc_state->enable) > return -EINVAL; > > - return drm_atomic_add_affected_planes(state->state, crtc); > + return drm_atomic_add_affected_planes(crtc_state->state, crtc); > } > > static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc, > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > index 35f1d1dbb126..928f764efce8 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > @@ -49,15 +49,17 @@ static void exynos_drm_crtc_atomic_disable(struct drm_crtc *crtc, > } > > static int exynos_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc); > > - if (!state->enable) > + if (!crtc_state->enable) > return 0; > > if (exynos_crtc->ops->atomic_check) > - return exynos_crtc->ops->atomic_check(exynos_crtc, state); > + return exynos_crtc->ops->atomic_check(exynos_crtc, crtc_state); > > return 0; > } > diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c > index 7ecc27c41a6a..b6d864d7a0df 100644 > --- a/drivers/gpu/drm/imx/ipuv3-crtc.c > +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c > @@ -227,11 +227,13 @@ static bool ipu_crtc_mode_fixup(struct drm_crtc *crtc, > } > > static int ipu_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > u32 primary_plane_mask = drm_plane_mask(crtc->primary); > > - if (state->active && (primary_plane_mask & state->plane_mask) == 0) > + if (crtc_state->active && (primary_plane_mask & crtc_state->plane_mask) == 0) > return -EINVAL; > > return 0; > diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > index 2329754af116..aaa324bd5572 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > @@ -239,28 +239,33 @@ static void ingenic_drm_crtc_update_timings(struct ingenic_drm *priv, > } > > static int ingenic_drm_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct ingenic_drm *priv = drm_crtc_get_priv(crtc); > struct drm_plane_state *f1_state, *f0_state, *ipu_state = NULL; > > - if (state->gamma_lut && > - drm_color_lut_size(state->gamma_lut) != ARRAY_SIZE(priv->dma_hwdescs->palette)) { > + if (crtc_state->gamma_lut && > + drm_color_lut_size(crtc_state->gamma_lut) != ARRAY_SIZE(priv->dma_hwdescs->palette)) { > dev_dbg(priv->dev, "Invalid palette size\n"); > return -EINVAL; > } > > - if (drm_atomic_crtc_needs_modeset(state) && priv->soc_info->has_osd) { > - f1_state = drm_atomic_get_plane_state(state->state, &priv->f1); > + if (drm_atomic_crtc_needs_modeset(crtc_state) && priv->soc_info->has_osd) { > + f1_state = drm_atomic_get_plane_state(crtc_state->state, > + &priv->f1); > if (IS_ERR(f1_state)) > return PTR_ERR(f1_state); > > - f0_state = drm_atomic_get_plane_state(state->state, &priv->f0); > + f0_state = drm_atomic_get_plane_state(crtc_state->state, > + &priv->f0); > if (IS_ERR(f0_state)) > return PTR_ERR(f0_state); > > if (IS_ENABLED(CONFIG_DRM_INGENIC_IPU) && priv->ipu_plane) { > - ipu_state = drm_atomic_get_plane_state(state->state, priv->ipu_plane); > + ipu_state = drm_atomic_get_plane_state(crtc_state->state, > + priv->ipu_plane); > if (IS_ERR(ipu_state)) > return PTR_ERR(ipu_state); > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > index 5ba9b49dfa7a..d05aa91bc882 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > @@ -874,8 +874,10 @@ struct plane_state { > }; > > static int dpu_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct dpu_crtc *dpu_crtc; > struct plane_state *pstates; > struct dpu_crtc_state *cstate; > @@ -900,32 +902,33 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, > pstates = kzalloc(sizeof(*pstates) * DPU_STAGE_MAX * 4, GFP_KERNEL); > > dpu_crtc = to_dpu_crtc(crtc); > - cstate = to_dpu_crtc_state(state); > + cstate = to_dpu_crtc_state(crtc_state); > > - if (!state->enable || !state->active) { > + if (!crtc_state->enable || !crtc_state->active) { > DPU_DEBUG("crtc%d -> enable %d, active %d, skip atomic_check\n", > - crtc->base.id, state->enable, state->active); > + crtc->base.id, crtc_state->enable, > + crtc_state->active); > goto end; > } > > - mode = &state->adjusted_mode; > + mode = &crtc_state->adjusted_mode; > DPU_DEBUG("%s: check", dpu_crtc->name); > > /* force a full mode set if active state changed */ > - if (state->active_changed) > - state->mode_changed = true; > + if (crtc_state->active_changed) > + crtc_state->mode_changed = true; > > memset(pipe_staged, 0, sizeof(pipe_staged)); > > mixer_width = mode->hdisplay / cstate->num_mixers; > > - _dpu_crtc_setup_lm_bounds(crtc, state); > + _dpu_crtc_setup_lm_bounds(crtc, crtc_state); > > crtc_rect.x2 = mode->hdisplay; > crtc_rect.y2 = mode->vdisplay; > > /* get plane state for all drm planes associated with crtc state */ > - drm_atomic_crtc_state_for_each_plane_state(plane, pstate, state) { > + drm_atomic_crtc_state_for_each_plane_state(plane, pstate, crtc_state) { > struct drm_rect dst, clip = crtc_rect; > > if (IS_ERR_OR_NULL(pstate)) { > @@ -1031,7 +1034,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, > > atomic_inc(&_dpu_crtc_get_kms(crtc)->bandwidth_ref); > > - rc = dpu_core_perf_crtc_check(crtc, state); > + rc = dpu_core_perf_crtc_check(crtc, crtc_state); > if (rc) { > DPU_ERROR("crtc%d failed performance check %d\n", > crtc->base.id, rc); > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c > index 6b03ceeb5ba1..af80f3baf05b 100644 > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c > @@ -307,7 +307,7 @@ static void mdp4_crtc_atomic_enable(struct drm_crtc *crtc, > } > > static int mdp4_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); > DBG("%s: check", mdp4_crtc->name); > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c > index 747dd8a7aa6e..500f885c0eae 100644 > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c > @@ -7,6 +7,7 @@ > > #include > > +#include > #include > #include > #include > @@ -682,15 +683,17 @@ static enum mdp_mixer_stage_id get_start_stage(struct drm_crtc *crtc, > } > > static int mdp5_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct mdp5_kms *mdp5_kms = get_kms(crtc); > struct drm_plane *plane; > struct drm_device *dev = crtc->dev; > struct plane_state pstates[STAGE_MAX + 1]; > const struct mdp5_cfg_hw *hw_cfg; > const struct drm_plane_state *pstate; > - const struct drm_display_mode *mode = &state->adjusted_mode; > + const struct drm_display_mode *mode = &crtc_state->adjusted_mode; > bool cursor_plane = false; > bool need_right_mixer = false; > int cnt = 0, i; > @@ -699,7 +702,7 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc, > > DBG("%s: check", crtc->name); > > - drm_atomic_crtc_state_for_each_plane_state(plane, pstate, state) { > + drm_atomic_crtc_state_for_each_plane_state(plane, pstate, crtc_state) { > if (!pstate->visible) > continue; > > @@ -731,7 +734,7 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc, > if (mode->hdisplay > hw_cfg->lm.max_width) > need_right_mixer = true; > > - ret = mdp5_crtc_setup_pipeline(crtc, state, need_right_mixer); > + ret = mdp5_crtc_setup_pipeline(crtc, crtc_state, need_right_mixer); > if (ret) { > DRM_DEV_ERROR(dev->dev, "couldn't assign mixers %d\n", ret); > return ret; > @@ -744,7 +747,7 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc, > WARN_ON(cursor_plane && > (pstates[cnt - 1].plane->type != DRM_PLANE_TYPE_CURSOR)); > > - start = get_start_stage(crtc, state, &pstates[0].state->base); > + start = get_start_stage(crtc, crtc_state, &pstates[0].state->base); > > /* verify that there are not too many planes attached to crtc > * and that we don't have conflicting mixer stages: > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c > index 956f631997f2..b0757f84a979 100644 > --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c > +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c > @@ -269,17 +269,19 @@ static void mxsfb_crtc_mode_set_nofb(struct mxsfb_drm_private *mxsfb) > } > > static int mxsfb_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > - bool has_primary = state->plane_mask & > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > + bool has_primary = crtc_state->plane_mask & > drm_plane_mask(crtc->primary); > > /* The primary plane has to be enabled when the CRTC is active. */ > - if (state->active && !has_primary) > + if (crtc_state->active && !has_primary) > return -EINVAL; > > /* TODO: Is this needed ? */ > - return drm_atomic_add_affected_planes(state->state, crtc); > + return drm_atomic_add_affected_planes(crtc_state->state, crtc); > } > > static void mxsfb_crtc_atomic_flush(struct drm_crtc *crtc, > diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouveau/dispnv50/head.c > index 841edfaf5b9d..0542ca22b33a 100644 > --- a/drivers/gpu/drm/nouveau/dispnv50/head.c > +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c > @@ -30,6 +30,7 @@ > #include > #include > > +#include > #include > #include > #include > @@ -310,12 +311,14 @@ nv50_head_atomic_check_mode(struct nv50_head *head, struct nv50_head_atom *asyh) > } > > static int > -nv50_head_atomic_check(struct drm_crtc *crtc, struct drm_crtc_state *state) > +nv50_head_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct nouveau_drm *drm = nouveau_drm(crtc->dev); > struct nv50_head *head = nv50_head(crtc); > struct nv50_head_atom *armh = nv50_head_atom(crtc->state); > - struct nv50_head_atom *asyh = nv50_head_atom(state); > + struct nv50_head_atom *asyh = nv50_head_atom(crtc_state); > struct nouveau_conn_atom *asyc = NULL; > struct drm_connector_state *conns; > struct drm_connector *conn; > diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c > index fef3b0032fd8..69a0770ba38e 100644 > --- a/drivers/gpu/drm/omapdrm/omap_crtc.c > +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c > @@ -569,22 +569,25 @@ static bool omap_crtc_is_manually_updated(struct drm_crtc *crtc) > } > > static int omap_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct drm_plane_state *pri_state; > > - if (state->color_mgmt_changed && state->gamma_lut) { > - unsigned int length = state->gamma_lut->length / > + if (crtc_state->color_mgmt_changed && crtc_state->gamma_lut) { > + unsigned int length = crtc_state->gamma_lut->length / > sizeof(struct drm_color_lut); > > if (length < 2) > return -EINVAL; > } > > - pri_state = drm_atomic_get_new_plane_state(state->state, crtc->primary); > + pri_state = drm_atomic_get_new_plane_state(crtc_state->state, > + crtc->primary); > if (pri_state) { > struct omap_crtc_state *omap_crtc_state = > - to_omap_crtc_state(state); > + to_omap_crtc_state(crtc_state); > > /* Mirror new values for zpos and rotation in omap_crtc_state */ > omap_crtc_state->zpos = pri_state->zpos; > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > index 4c360a255849..460fb07b786f 100644 > --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > @@ -682,20 +682,23 @@ static void rcar_du_crtc_stop(struct rcar_du_crtc *rcrtc) > */ > > static int rcar_du_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *state) > + struct drm_atomic_state *state) > { > - struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(state); > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > + struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(crtc_state); > struct drm_encoder *encoder; > int ret; > > - ret = rcar_du_cmm_check(crtc, state); > + ret = rcar_du_cmm_check(crtc, crtc_state); > if (ret) > return ret; > > /* Store the routes from the CRTC output to the DU outputs. */ > rstate->outputs = 0; > > - drm_for_each_encoder_mask(encoder, crtc->dev, state->encoder_mask) { > + drm_for_each_encoder_mask(encoder, crtc->dev, > + crtc_state->encoder_mask) { > struct rcar_du_encoder *renc; > > /* Skip the writeback encoder. */ > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index 47835715b44b..fcbd758e6531 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -1415,8 +1415,10 @@ static void vop_wait_for_irq_handler(struct vop *vop) > } > > static int vop_crtc_atomic_check(struct drm_crtc *crtc, > - struct drm_crtc_state *crtc_state) > + struct drm_atomic_state *state) > { > + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, > + crtc); > struct vop *vop = to_vop(crtc); > struct drm_plane *plane; > struct drm_plane_state *plane_state; > diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c > index 999deb64bd70..8f91391832db 100644 > --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c > +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c > @@ -15,6 +15,7 @@ > > #include