drm/atomic: Pass the full state to planes atomic_check
authorMaxime Ripard <maxime@cerno.tech>
Fri, 19 Feb 2021 12:00:24 +0000 (13:00 +0100)
committerMaxime Ripard <maxime@cerno.tech>
Wed, 24 Feb 2021 19:27:00 +0000 (20:27 +0100)
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 convert all the remaining helpers to provide a consistent
interface, starting with the planes atomic_check.

The conversion was done using the coccinelle script below plus some
manual changes for vmwgfx, built tested on all the drivers.

@@
identifier plane, plane_state;
symbol state;
@@

 struct drm_plane_helper_funcs {
  ...
int (*atomic_check)(struct drm_plane *plane,
-     struct drm_plane_state *plane_state);
+     struct drm_atomic_state *state);
...
}

@ plane_atomic_func @
identifier helpers;
identifier func;
@@

static const struct drm_plane_helper_funcs helpers = {
...,
  .atomic_check = func,
...,
};

@@
struct drm_plane_helper_funcs *FUNCS;
identifier f;
identifier dev;
identifier plane, plane_state, state;
@@

 f(struct drm_device *dev, struct drm_atomic_state *state)
 {
  <+...
- FUNCS->atomic_check(plane, plane_state)
+ FUNCS->atomic_check(plane, state)
  ...+>
 }

@ ignores_new_state @
identifier plane_atomic_func.func;
identifier plane, new_plane_state;
@@

 func(struct drm_plane *plane, struct drm_plane_state *new_plane_state)
 {
... when != new_plane_state
 }

@ adds_new_state depends on plane_atomic_func && !ignores_new_state @
identifier plane_atomic_func.func;
identifier plane, new_plane_state;
@@

 func(struct drm_plane *plane, struct drm_plane_state *new_plane_state)
 {
+ struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state, plane);
  ...
 }

@ depends on plane_atomic_func @
identifier plane_atomic_func.func;
identifier plane, new_plane_state;
@@

 func(struct drm_plane *plane,
-     struct drm_plane_state *new_plane_state
+     struct drm_atomic_state *state
     )
 { ... }

@ include depends on adds_new_state @
@@

 #include <drm/drm_atomic.h>

@ no_include depends on !include && adds_new_state @
@@

+ #include <drm/drm_atomic.h>
  #include <drm/...>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20210219120032.260676-4-maxime@cerno.tech
51 files changed:
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/arm/display/komeda/komeda_plane.c
drivers/gpu/drm/arm/hdlcd_crtc.c
drivers/gpu/drm/arm/malidp_planes.c
drivers/gpu/drm/armada/armada_plane.c
drivers/gpu/drm/armada/armada_plane.h
drivers/gpu/drm/ast/ast_mode.c
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
drivers/gpu/drm/drm_atomic_helper.c
drivers/gpu/drm/drm_simple_kms_helper.c
drivers/gpu/drm/exynos/exynos_drm_plane.c
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
drivers/gpu/drm/imx/dcss/dcss-plane.c
drivers/gpu/drm/imx/ipuv3-plane.c
drivers/gpu/drm/ingenic/ingenic-drm-drv.c
drivers/gpu/drm/ingenic/ingenic-ipu.c
drivers/gpu/drm/kmb/kmb_plane.c
drivers/gpu/drm/mediatek/mtk_drm_plane.c
drivers/gpu/drm/meson/meson_overlay.c
drivers/gpu/drm/meson/meson_plane.c
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c
drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
drivers/gpu/drm/mxsfb/mxsfb_kms.c
drivers/gpu/drm/nouveau/dispnv50/wndw.c
drivers/gpu/drm/omapdrm/omap_plane.c
drivers/gpu/drm/qxl/qxl_display.c
drivers/gpu/drm/rcar-du/rcar_du_plane.c
drivers/gpu/drm/rcar-du/rcar_du_vsp.c
drivers/gpu/drm/rockchip/rockchip_drm_vop.c
drivers/gpu/drm/sti/sti_cursor.c
drivers/gpu/drm/sti/sti_gdp.c
drivers/gpu/drm/sti/sti_hqvdp.c
drivers/gpu/drm/stm/ltdc.c
drivers/gpu/drm/sun4i/sun8i_ui_layer.c
drivers/gpu/drm/sun4i/sun8i_vi_layer.c
drivers/gpu/drm/tegra/dc.c
drivers/gpu/drm/tegra/hub.c
drivers/gpu/drm/tidss/tidss_plane.c
drivers/gpu/drm/tilcdc/tilcdc_plane.c
drivers/gpu/drm/vboxvideo/vbox_mode.c
drivers/gpu/drm/vc4/vc4_plane.c
drivers/gpu/drm/virtio/virtgpu_plane.c
drivers/gpu/drm/vkms/vkms_plane.c
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
drivers/gpu/drm/xlnx/zynqmp_disp.c
drivers/gpu/drm/zte/zx_plane.c
include/drm/drm_modeset_helper_vtables.h

index 906fa4a..1cdff04 100644 (file)
@@ -6432,8 +6432,10 @@ static int dm_plane_helper_check_state(struct drm_plane_state *state,
 }
 
 static int dm_plane_atomic_check(struct drm_plane *plane,
-                                struct drm_plane_state *new_plane_state)
+                                struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct amdgpu_device *adev = drm_to_adev(plane->dev);
        struct dc *dc = adev->dm.dc;
        struct dm_plane_state *dm_plane_state;
index 00fd83c..96a6fe9 100644 (file)
@@ -69,8 +69,10 @@ komeda_plane_init_data_flow(struct drm_plane_state *st,
  */
 static int
 komeda_plane_atomic_check(struct drm_plane *plane,
-                         struct drm_plane_state *new_plane_state)
+                         struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct komeda_plane *kplane = to_kplane(plane);
        struct komeda_plane_state *kplane_st = to_kplane_st(new_plane_state);
        struct komeda_layer *layer = kplane->layer;
index d5a79a4..9da9d05 100644 (file)
@@ -229,8 +229,10 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
 };
 
 static int hdlcd_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *new_plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        int i;
        struct drm_crtc *crtc;
        struct drm_crtc_state *crtc_state;
index e64367f..c94c4a9 100644 (file)
@@ -502,8 +502,10 @@ static void malidp_de_prefetch_settings(struct malidp_plane *mp,
 }
 
 static int malidp_de_plane_check(struct drm_plane *plane,
-                                struct drm_plane_state *new_plane_state)
+                                struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct malidp_plane *mp = to_malidp_plane(plane);
        struct malidp_plane_state *ms = to_malidp_plane_state(new_plane_state);
        bool rotated = new_plane_state->rotation & MALIDP_ROTATED_MASK;
index 27f83b0..b1266c5 100644 (file)
@@ -106,8 +106,10 @@ void armada_drm_plane_cleanup_fb(struct drm_plane *plane,
 }
 
 int armada_drm_plane_atomic_check(struct drm_plane *plane,
-       struct drm_plane_state *new_plane_state)
+       struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct armada_plane_state *st = to_armada_plane_state(new_plane_state);
        struct drm_crtc *crtc = new_plane_state->crtc;
        struct drm_crtc_state *crtc_state;
index 2707ec7..51dab8d 100644 (file)
@@ -26,7 +26,7 @@ int armada_drm_plane_prepare_fb(struct drm_plane *plane,
 void armada_drm_plane_cleanup_fb(struct drm_plane *plane,
        struct drm_plane_state *old_state);
 int armada_drm_plane_atomic_check(struct drm_plane *plane,
-       struct drm_plane_state *state);
+       struct drm_atomic_state *state);
 void armada_plane_reset(struct drm_plane *plane);
 struct drm_plane_state *armada_plane_duplicate_state(struct drm_plane *plane);
 void armada_plane_destroy_state(struct drm_plane *plane,
index 2665d3d..cb86501 100644 (file)
@@ -536,8 +536,10 @@ static const uint32_t ast_primary_plane_formats[] = {
 };
 
 static int ast_primary_plane_helper_atomic_check(struct drm_plane *plane,
-                                                struct drm_plane_state *new_plane_state)
+                                                struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc_state *crtc_state;
        struct ast_crtc_state *ast_crtc_state;
        int ret;
@@ -756,8 +758,10 @@ static const uint32_t ast_cursor_plane_formats[] = {
 };
 
 static int ast_cursor_plane_helper_atomic_check(struct drm_plane *plane,
-                                               struct drm_plane_state *new_plane_state)
+                                               struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_framebuffer *fb = new_plane_state->fb;
        struct drm_crtc_state *crtc_state;
        int ret;
index c62e930..445105e 100644 (file)
@@ -593,8 +593,9 @@ atmel_hlcdc_plane_update_disc_area(struct atmel_hlcdc_plane *plane,
 }
 
 static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
-                                         struct drm_plane_state *s)
+                                         struct drm_atomic_state *state)
 {
+       struct drm_plane_state *s = drm_atomic_get_new_plane_state(state, p);
        struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p);
        struct atmel_hlcdc_plane_state *hstate =
                                drm_plane_state_to_atmel_hlcdc_plane_state(s);
index bd0bb74..c06bd5f 100644 (file)
@@ -902,7 +902,7 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
                if (!funcs || !funcs->atomic_check)
                        continue;
 
-               ret = funcs->atomic_check(plane, new_plane_state);
+               ret = funcs->atomic_check(plane, state);
                if (ret) {
                        DRM_DEBUG_ATOMIC("[PLANE:%d:%s] atomic driver check failed\n",
                                         plane->base.id, plane->name);
index 89675d4..a43e34e 100644 (file)
@@ -177,8 +177,10 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
 };
 
 static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
-                                       struct drm_plane_state *plane_state)
+                                       struct drm_atomic_state *state)
 {
+       struct drm_plane_state *plane_state = drm_atomic_get_new_plane_state(state,
+                                                                            plane);
        struct drm_simple_display_pipe *pipe;
        struct drm_crtc_state *crtc_state;
        int ret;
index 009a629..2c4ceb7 100644 (file)
@@ -228,8 +228,10 @@ exynos_drm_plane_check_size(const struct exynos_drm_plane_config *config,
 }
 
 static int exynos_plane_atomic_check(struct drm_plane *plane,
-                                    struct drm_plane_state *new_plane_state)
+                                    struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct exynos_drm_plane *exynos_plane = to_exynos_plane(plane);
        struct exynos_drm_plane_state *exynos_state =
                                                to_exynos_plane_state(new_plane_state);
index fc3ec6b..7d2aa2c 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <linux/regmap.h>
 
+#include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_fb_cma_helper.h>
@@ -33,8 +34,10 @@ static int fsl_dcu_drm_plane_index(struct drm_plane *plane)
 }
 
 static int fsl_dcu_drm_plane_atomic_check(struct drm_plane *plane,
-                                         struct drm_plane_state *new_plane_state)
+                                         struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_framebuffer *fb = new_plane_state->fb;
 
        if (!new_plane_state->fb || !new_plane_state->crtc)
index d276f37..ddcf121 100644 (file)
@@ -53,8 +53,10 @@ static const struct hibmc_dislay_pll_config hibmc_pll_table[] = {
 };
 
 static int hibmc_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *new_plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_framebuffer *fb = new_plane_state->fb;
        struct drm_crtc *crtc = new_plane_state->crtc;
        struct drm_crtc_state *crtc_state;
index cba99b8..fab0833 100644 (file)
@@ -757,8 +757,10 @@ static void ade_disable_channel(struct kirin_plane *kplane)
 }
 
 static int ade_plane_atomic_check(struct drm_plane *plane,
-                                 struct drm_plane_state *new_plane_state)
+                                 struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_framebuffer *fb = new_plane_state->fb;
        struct drm_crtc *crtc = new_plane_state->crtc;
        struct drm_crtc_state *crtc_state;
index eacaf9a..3222fb0 100644 (file)
@@ -137,8 +137,10 @@ static bool dcss_plane_is_source_size_allowed(u16 src_w, u16 src_h, u32 pix_fmt)
 }
 
 static int dcss_plane_atomic_check(struct drm_plane *plane,
-                                  struct drm_plane_state *new_plane_state)
+                                  struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct dcss_plane *dcss_plane = to_dcss_plane(plane);
        struct dcss_dev *dcss = plane->dev->dev_private;
        struct drm_framebuffer *fb = new_plane_state->fb;
index 4756b36..57cd859 100644 (file)
@@ -337,8 +337,10 @@ static const struct drm_plane_funcs ipu_plane_funcs = {
 };
 
 static int ipu_plane_atomic_check(struct drm_plane *plane,
-                                 struct drm_plane_state *new_state)
+                                 struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state,
+                                                                          plane);
        struct drm_plane_state *old_state = plane->state;
        struct drm_crtc_state *crtc_state;
        struct device *dev = plane->dev->dev;
index b91836d..77b0ec7 100644 (file)
@@ -360,8 +360,10 @@ static void ingenic_drm_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static int ingenic_drm_plane_atomic_check(struct drm_plane *plane,
-                                         struct drm_plane_state *new_plane_state)
+                                         struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct ingenic_drm *priv = drm_device_get_priv(plane->dev);
        struct drm_crtc_state *crtc_state;
        struct drm_crtc *crtc = new_plane_state->crtc ?: plane->state->crtc;
index 8288a45..d6ec762 100644 (file)
@@ -514,8 +514,10 @@ static void ingenic_ipu_plane_atomic_update(struct drm_plane *plane,
 }
 
 static int ingenic_ipu_plane_atomic_check(struct drm_plane *plane,
-                                         struct drm_plane_state *new_plane_state)
+                                         struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        unsigned int num_w, denom_w, num_h, denom_h, xres, yres, max_w, max_h;
        struct ingenic_ipu *ipu = plane_to_ingenic_ipu(plane);
        struct drm_crtc *crtc = new_plane_state->crtc ?: plane->state->crtc;
index 51ceaae..909045b 100644 (file)
@@ -77,8 +77,10 @@ static unsigned int check_pixel_format(struct drm_plane *plane, u32 format)
 }
 
 static int kmb_plane_atomic_check(struct drm_plane *plane,
-                                 struct drm_plane_state *new_plane_state)
+                                 struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_framebuffer *fb;
        int ret;
        struct drm_crtc_state *crtc_state;
index d94ac55..e3abdc6 100644 (file)
@@ -141,8 +141,10 @@ static const struct drm_plane_funcs mtk_plane_funcs = {
 };
 
 static int mtk_plane_atomic_check(struct drm_plane *plane,
-                                 struct drm_plane_state *new_plane_state)
+                                 struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_framebuffer *fb = new_plane_state->fb;
        struct drm_crtc_state *crtc_state;
        int ret;
index cad5c41..8700177 100644 (file)
@@ -165,8 +165,10 @@ struct meson_overlay {
 #define FRAC_16_16(mult, div)    (((mult) << 16) / (div))
 
 static int meson_overlay_atomic_check(struct drm_plane *plane,
-                                     struct drm_plane_state *new_plane_state)
+                                     struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc_state *crtc_state;
 
        if (!new_plane_state->crtc)
index 961615c..32c5f51 100644 (file)
@@ -71,8 +71,10 @@ struct meson_plane {
 #define FRAC_16_16(mult, div)    (((mult) << 16) / (div))
 
 static int meson_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *new_plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc_state *crtc_state;
 
        if (!new_plane_state->crtc)
index 4be8c56..c3b55cc 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/debugfs.h>
 #include <linux/dma-buf.h>
 
+#include <drm/drm_atomic.h>
 #include <drm/drm_atomic_uapi.h>
 #include <drm/drm_damage_helper.h>
 #include <drm/drm_file.h>
@@ -950,8 +951,10 @@ static bool dpu_plane_validate_src(struct drm_rect *src,
 }
 
 static int dpu_plane_atomic_check(struct drm_plane *plane,
-                                 struct drm_plane_state *new_plane_state)
+                                 struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        int ret = 0, min_scale;
        struct dpu_plane *pdpu = to_dpu_plane(plane);
        struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state);
index da3cc1d..f95b14e 100644 (file)
@@ -106,7 +106,7 @@ static void mdp4_plane_cleanup_fb(struct drm_plane *plane,
 
 
 static int mdp4_plane_atomic_check(struct drm_plane *plane,
-               struct drm_plane_state *state)
+               struct drm_atomic_state *state)
 {
        return 0;
 }
index f5434a5..45f7780 100644 (file)
@@ -404,8 +404,10 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
 }
 
 static int mdp5_plane_atomic_check(struct drm_plane *plane,
-                                  struct drm_plane_state *new_plane_state)
+                                  struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc *crtc;
        struct drm_crtc_state *crtc_state;
 
index 7c19ec5..ca4bc0e 100644 (file)
@@ -402,8 +402,10 @@ static const struct drm_encoder_funcs mxsfb_encoder_funcs = {
  */
 
 static int mxsfb_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *plane_state = drm_atomic_get_new_plane_state(state,
+                                                                            plane);
        struct mxsfb_drm_private *mxsfb = to_mxsfb_drm_private(plane->dev);
        struct drm_crtc_state *crtc_state;
 
index f83bfc0..1382ccd 100644 (file)
@@ -30,6 +30,7 @@
 #include <nvhw/class/cl507e.h>
 #include <nvhw/class/clc37e.h>
 
+#include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_fourcc.h>
 
@@ -435,8 +436,10 @@ nv50_wndw_atomic_check_lut(struct nv50_wndw *wndw,
 
 static int
 nv50_wndw_atomic_check(struct drm_plane *plane,
-                      struct drm_plane_state *new_plane_state)
+                      struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct nouveau_drm *drm = nouveau_drm(plane->dev);
        struct nv50_wndw *wndw = nv50_wndw(plane);
        struct nv50_wndw_atom *armw = nv50_wndw_atom(wndw->plane.state);
index 53ad074..6bd384c 100644 (file)
@@ -99,8 +99,10 @@ static void omap_plane_atomic_disable(struct drm_plane *plane,
 }
 
 static int omap_plane_atomic_check(struct drm_plane *plane,
-                                  struct drm_plane_state *new_plane_state)
+                                  struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc_state *crtc_state;
 
        if (!new_plane_state->fb)
index b80965a..8b95b22 100644 (file)
@@ -463,8 +463,10 @@ static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = {
 };
 
 static int qxl_primary_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *new_plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct qxl_device *qdev = to_qxl(plane->dev);
        struct qxl_bo *bo;
 
index b887ab8..7afe744 100644 (file)
@@ -607,8 +607,10 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
 }
 
 static int rcar_du_plane_atomic_check(struct drm_plane *plane,
-                                     struct drm_plane_state *new_plane_state)
+                                     struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct rcar_du_plane_state *rstate = to_rcar_plane_state(new_plane_state);
 
        return __rcar_du_plane_atomic_check(plane, new_plane_state,
index c4af7de..407e175 100644 (file)
@@ -7,6 +7,7 @@
  * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
  */
 
+#include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_fb_cma_helper.h>
@@ -265,8 +266,10 @@ static void rcar_du_vsp_plane_cleanup_fb(struct drm_plane *plane,
 }
 
 static int rcar_du_vsp_plane_atomic_check(struct drm_plane *plane,
-                                         struct drm_plane_state *new_plane_state)
+                                         struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct rcar_du_vsp_plane_state *rstate = to_rcar_vsp_plane_state(new_plane_state);
 
        return __rcar_du_plane_atomic_check(plane, new_plane_state,
index db8cd3c..e789053 100644 (file)
@@ -779,8 +779,10 @@ static bool rockchip_mod_supported(struct drm_plane *plane,
 }
 
 static int vop_plane_atomic_check(struct drm_plane *plane,
-                          struct drm_plane_state *new_plane_state)
+                          struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc *crtc = new_plane_state->crtc;
        struct drm_crtc_state *crtc_state;
        struct drm_framebuffer *fb = new_plane_state->fb;
index c04c868..ceb30d5 100644 (file)
@@ -181,8 +181,10 @@ static void sti_cursor_init(struct sti_cursor *cursor)
 }
 
 static int sti_cursor_atomic_check(struct drm_plane *drm_plane,
-                                  struct drm_plane_state *new_plane_state)
+                                  struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                drm_plane);
        struct sti_plane *plane = to_sti_plane(drm_plane);
        struct sti_cursor *cursor = to_sti_cursor(plane);
        struct drm_crtc *crtc = new_plane_state->crtc;
index 4fe91ab..6382382 100644 (file)
@@ -615,8 +615,10 @@ static int sti_gdp_get_dst(struct device *dev, int dst, int src)
 }
 
 static int sti_gdp_atomic_check(struct drm_plane *drm_plane,
-                               struct drm_plane_state *new_plane_state)
+                               struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                drm_plane);
        struct sti_plane *plane = to_sti_plane(drm_plane);
        struct sti_gdp *gdp = to_sti_gdp(plane);
        struct drm_crtc *crtc = new_plane_state->crtc;
index 5d492ac..b3b10ee 100644 (file)
@@ -1017,8 +1017,10 @@ out:
 }
 
 static int sti_hqvdp_atomic_check(struct drm_plane *drm_plane,
-                                 struct drm_plane_state *new_plane_state)
+                                 struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                drm_plane);
        struct sti_plane *plane = to_sti_plane(drm_plane);
        struct sti_hqvdp *hqvdp = to_sti_hqvdp(plane);
        struct drm_crtc *crtc = new_plane_state->crtc;
index f61c008..83f4b2e 100644 (file)
@@ -749,8 +749,10 @@ static const struct drm_crtc_funcs ltdc_crtc_funcs = {
  */
 
 static int ltdc_plane_atomic_check(struct drm_plane *plane,
-                                  struct drm_plane_state *new_plane_state)
+                                  struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_framebuffer *fb = new_plane_state->fb;
        u32 src_w, src_h;
 
index 68eb752..d503ad7 100644 (file)
@@ -257,8 +257,10 @@ static int sun8i_ui_layer_update_buffer(struct sun8i_mixer *mixer, int channel,
 }
 
 static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
-                                      struct drm_plane_state *new_plane_state)
+                                      struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct sun8i_ui_layer *layer = plane_to_sun8i_ui_layer(plane);
        struct drm_crtc *crtc = new_plane_state->crtc;
        struct drm_crtc_state *crtc_state;
index c583144..6d341eb 100644 (file)
@@ -361,8 +361,10 @@ static int sun8i_vi_layer_update_buffer(struct sun8i_mixer *mixer, int channel,
 }
 
 static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
-                                      struct drm_plane_state *new_plane_state)
+                                      struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct sun8i_vi_layer *layer = plane_to_sun8i_vi_layer(plane);
        struct drm_crtc *crtc = new_plane_state->crtc;
        struct drm_crtc_state *crtc_state;
index 2d91956..bd2ee94 100644 (file)
@@ -604,8 +604,10 @@ static const u64 tegra124_modifiers[] = {
 };
 
 static int tegra_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *new_plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct tegra_plane_state *plane_state = to_tegra_plane_state(new_plane_state);
        unsigned int supported_rotation = DRM_MODE_ROTATE_0 |
                                          DRM_MODE_REFLECT_X |
@@ -831,8 +833,10 @@ static const u32 tegra_cursor_plane_formats[] = {
 };
 
 static int tegra_cursor_atomic_check(struct drm_plane *plane,
-                                    struct drm_plane_state *new_plane_state)
+                                    struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct tegra_plane *tegra = to_tegra_plane(plane);
        int err;
 
index 8a2d359..e5b2250 100644 (file)
@@ -336,8 +336,10 @@ static void tegra_dc_remove_shared_plane(struct tegra_dc *dc,
 }
 
 static int tegra_shared_plane_atomic_check(struct drm_plane *plane,
-                                          struct drm_plane_state *new_plane_state)
+                                          struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct tegra_plane_state *plane_state = to_tegra_plane_state(new_plane_state);
        struct tegra_shared_plane *tegra = to_tegra_shared_plane(plane);
        struct tegra_bo_tiling *tiling = &plane_state->tiling;
index 2674fff..333eed8 100644 (file)
 /* drm_plane_helper_funcs */
 
 static int tidss_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *new_plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_device *ddev = plane->dev;
        struct tidss_device *tidss = to_tidss(ddev);
        struct tidss_plane *tplane = to_tidss_plane(plane);
index 389c80a..f43670a 100644 (file)
@@ -21,8 +21,10 @@ static const struct drm_plane_funcs tilcdc_plane_funcs = {
 };
 
 static int tilcdc_plane_atomic_check(struct drm_plane *plane,
-                                    struct drm_plane_state *new_state)
+                                    struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state,
+                                                                          plane);
        struct drm_crtc_state *crtc_state;
        struct drm_plane_state *old_state = plane->state;
        unsigned int pitch;
index 6e4ad96..7140086 100644 (file)
@@ -253,8 +253,10 @@ static const struct drm_crtc_funcs vbox_crtc_funcs = {
 };
 
 static int vbox_primary_atomic_check(struct drm_plane *plane,
-                                    struct drm_plane_state *new_state)
+                                    struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state,
+                                                                          plane);
        struct drm_crtc_state *crtc_state = NULL;
 
        if (new_state->crtc) {
@@ -326,8 +328,10 @@ static void vbox_primary_atomic_disable(struct drm_plane *plane,
 }
 
 static int vbox_cursor_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *new_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state,
+                                                                          plane);
        struct drm_crtc_state *crtc_state = NULL;
        u32 width = new_state->crtc_w;
        u32 height = new_state->crtc_h;
index 939e951..72a495c 100644 (file)
@@ -1040,8 +1040,10 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
  * in the CRTC's flush.
  */
 static int vc4_plane_atomic_check(struct drm_plane *plane,
-                                 struct drm_plane_state *new_plane_state)
+                                 struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct vc4_plane_state *vc4_state = to_vc4_plane_state(new_plane_state);
        int ret;
 
index 9b2ec4d..0f4fdd8 100644 (file)
@@ -83,8 +83,10 @@ static const struct drm_plane_funcs virtio_gpu_plane_funcs = {
 };
 
 static int virtio_gpu_plane_atomic_check(struct drm_plane *plane,
-                                        struct drm_plane_state *new_plane_state)
+                                        struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        bool is_cursor = plane->type == DRM_PLANE_TYPE_CURSOR;
        struct drm_crtc_state *crtc_state;
        int ret;
index c43a893..6e0ada0 100644 (file)
@@ -115,8 +115,10 @@ static void vkms_plane_atomic_update(struct drm_plane *plane,
 }
 
 static int vkms_plane_atomic_check(struct drm_plane *plane,
-                                  struct drm_plane_state *new_plane_state)
+                                  struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc_state *crtc_state;
        bool can_position = false;
        int ret;
index 1b0c2e4..5be1e4b 100644 (file)
@@ -437,8 +437,10 @@ vmw_du_cursor_plane_atomic_update(struct drm_plane *plane,
  * Returns 0 on success
  */
 int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
-                                     struct drm_plane_state *new_state)
+                                     struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state,
+                                                                          plane);
        struct drm_crtc_state *crtc_state = NULL;
        struct drm_framebuffer *new_fb = new_state->fb;
        int ret;
@@ -476,8 +478,10 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
  * Returns 0 on success
  */
 int vmw_du_cursor_plane_atomic_check(struct drm_plane *plane,
-                                    struct drm_plane_state *new_state)
+                                    struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state,
+                                                                          plane);
        int ret = 0;
        struct drm_crtc_state *crtc_state = NULL;
        struct vmw_surface *surface = NULL;
index 6267ccf..c5183e7 100644 (file)
@@ -456,9 +456,9 @@ void vmw_du_cursor_plane_destroy(struct drm_plane *plane);
 
 /* Atomic Helpers */
 int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
-                                     struct drm_plane_state *state);
+                                     struct drm_atomic_state *state);
 int vmw_du_cursor_plane_atomic_check(struct drm_plane *plane,
-                                    struct drm_plane_state *state);
+                                    struct drm_atomic_state *state);
 void vmw_du_cursor_plane_atomic_update(struct drm_plane *plane,
                                       struct drm_plane_state *old_state);
 int vmw_du_cursor_plane_prepare_fb(struct drm_plane *plane,
index ee7793d..b0a3ba5 100644 (file)
@@ -1143,8 +1143,10 @@ static inline struct zynqmp_disp_layer *plane_to_layer(struct drm_plane *plane)
 
 static int
 zynqmp_disp_plane_atomic_check(struct drm_plane *plane,
-                              struct drm_plane_state *new_plane_state)
+                              struct drm_atomic_state *state)
 {
+       struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
+                                                                                plane);
        struct drm_crtc_state *crtc_state;
 
        if (!new_plane_state->crtc)
index 78d787a..20ac292 100644 (file)
@@ -46,8 +46,10 @@ static const uint32_t vl_formats[] = {
 #define FRAC_16_16(mult, div)    (((mult) << 16) / (div))
 
 static int zx_vl_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *plane_state = drm_atomic_get_new_plane_state(state,
+                                                                            plane);
        struct drm_framebuffer *fb = plane_state->fb;
        struct drm_crtc *crtc = plane_state->crtc;
        struct drm_crtc_state *crtc_state;
@@ -275,8 +277,10 @@ static const struct drm_plane_helper_funcs zx_vl_plane_helper_funcs = {
 };
 
 static int zx_gl_plane_atomic_check(struct drm_plane *plane,
-                                   struct drm_plane_state *plane_state)
+                                   struct drm_atomic_state *state)
 {
+       struct drm_plane_state *plane_state = drm_atomic_get_new_plane_state(state,
+                                                                            plane);
        struct drm_framebuffer *fb = plane_state->fb;
        struct drm_crtc *crtc = plane_state->crtc;
        struct drm_crtc_state *crtc_state;
index bb38daa..8222ed9 100644 (file)
@@ -1233,9 +1233,8 @@ struct drm_plane_helper_funcs {
         * NOTE:
         *
         * This function is called in the check phase of an atomic update. The
-        * driver is not allowed to change anything outside of the free-standing
-        * state objects passed-in or assembled in the overall &drm_atomic_state
-        * update tracking structure.
+        * driver is not allowed to change anything outside of the
+        * &drm_atomic_state update tracking structure.
         *
         * RETURNS:
         *
@@ -1245,7 +1244,7 @@ struct drm_plane_helper_funcs {
         * deadlock.
         */
        int (*atomic_check)(struct drm_plane *plane,
-                           struct drm_plane_state *state);
+                           struct drm_atomic_state *state);
 
        /**
         * @atomic_update: