• Maxime Ripard's avatar
    drm: Use state helper instead of CRTC state pointer · 253f28b6
    Maxime Ripard authored
    Many drivers reference the crtc->pointer in order to get the current CRTC
    state in their atomic_begin or atomic_flush hooks, which would be the new
    CRTC state in the global atomic state since _swap_state happened when those
    hooks are run.
    
    Use the drm_atomic_get_new_crtc_state helper to get that state to make it
    more obvious.
    
    This was made using the coccinelle script below:
    
    @ crtc_atomic_func @
    identifier helpers;
    identifier func;
    @@
    
    (
    static struct drm_crtc_helper_funcs helpers = {
    	...,
    	.atomic_begin = func,
    	...,
    };
    |
    static struct drm_crtc_helper_funcs helpers = {
    	...,
    	.atomic_flush = func,
    	...,
    };
    )
    
    @@
    identifier crtc_atomic_func.func;
    identifier crtc, state;
    symbol crtc_state;
    expression e;
    @@
    
      func(struct drm_crtc *crtc, struct drm_atomic_state *state) {
      ...
    - struct tegra_dc_state *crtc_state = e;
    + struct tegra_dc_state *dc_state = e;
      <+...
    -       crtc_state
    +	dc_state
      ...+>
      }
    
    @@
    identifier crtc_atomic_func.func;
    identifier crtc, state;
    symbol crtc_state;
    expression e;
    @@
    
      func(struct drm_crtc *crtc, struct drm_atomic_state *state) {
      ...
    - struct mtk_crtc_state *crtc_state = e;
    + struct mtk_crtc_state *mtk_crtc_state = e;
      <+...
    -       crtc_state
    +	mtk_crtc_state
      ...+>
      }
    
    @ replaces_new_state @
    identifier crtc_atomic_func.func;
    identifier crtc, state, crtc_state;
    @@
    
      func(struct drm_crtc *crtc, struct drm_atomic_state *state) {
      ...
    - struct drm_crtc_state *crtc_state = crtc->state;
    + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
      ...
     }
    
    @@
    identifier crtc_atomic_func.func;
    identifier crtc, state, crtc_state;
    @@
    
      func(struct drm_crtc *crtc, struct drm_atomic_state *state) {
      struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
      ...
    - crtc->state
    + crtc_state
      ...
     }
    
    @ adds_new_state @
    identifier crtc_atomic_func.func;
    identifier crtc, state;
    @@
    
      func(struct drm_crtc *crtc, struct drm_atomic_state *state) {
    + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
      ...
    - crtc->state
    + crtc_state
      ...
     }
    
    @ include depends on adds_new_state || replaces_new_state @
    @@
    
     #include <drm/drm_atomic.h>
    
    @ no_include depends on !include && (adds_new_state || replaces_new_state) @
    @@
    
    + #include <drm/drm_atomic.h>
      #include <drm/...>
    Suggested-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Acked-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
    Cc: "James (Qian) Wang" <james.qian.wang@arm.com>
    Cc: Liviu Dudau <liviu.dudau@arm.com>
    Cc: Mihail Atanassov <mihail.atanassov@arm.com>
    Cc: Brian Starkey <brian.starkey@arm.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Paul Cercueil <paul@crapouillou.net>
    Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Cc: Philipp Zabel <p.zabel@pengutronix.de>
    Cc: Sandy Huang <hjc@rock-chips.com>
    Cc: "Heiko Stübner" <heiko@sntech.de>
    Cc: Thierry Reding <thierry.reding@gmail.com>
    Cc: Gerd Hoffmann <kraxel@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20201105164518.392891-1-maxime@cerno.tech
    253f28b6
armada_crtc.c 31.1 KB