1. 04 2月, 2021 4 次提交
  2. 07 1月, 2021 2 次提交
  3. 29 12月, 2020 1 次提交
  4. 28 11月, 2020 1 次提交
  5. 18 11月, 2020 1 次提交
    • L
      drm/mediatek/mtk_drm_crtc: Demote seriously out-of-date struct header · eaa4d562
      Lee Jones 提交于
      This needs someone with in-depth knowledge of the driver to complete.
      
      Fixes the following W=1 kernel build warning(s):
      
       drivers/gpu/drm/mediatek/mtk_drm_crtc.c:62: warning: Function parameter or member 'pending_needs_vblank' not described in 'mtk_drm_crtc'
       drivers/gpu/drm/mediatek/mtk_drm_crtc.c:62: warning: Function parameter or member 'event' not described in 'mtk_drm_crtc'
       drivers/gpu/drm/mediatek/mtk_drm_crtc.c:62: warning: Function parameter or member 'layer_nr' not described in 'mtk_drm_crtc'
       drivers/gpu/drm/mediatek/mtk_drm_crtc.c:62: warning: Function parameter or member 'pending_async_planes' not described in 'mtk_drm_crtc'
       drivers/gpu/drm/mediatek/mtk_drm_crtc.c:62: warning: Function parameter or member 'cmdq_client' not described in 'mtk_drm_crtc'
       drivers/gpu/drm/mediatek/mtk_drm_crtc.c:62: warning: Function parameter or member 'cmdq_event' not described in 'mtk_drm_crtc'
       drivers/gpu/drm/mediatek/mtk_drm_crtc.c:62: warning: Function parameter or member 'hw_lock' not described in 'mtk_drm_crtc'
      
      Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
      Cc: Philipp Zabel <p.zabel@pengutronix.de>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: Matthias Brugger <matthias.bgg@gmail.com>
      Cc: dri-devel@lists.freedesktop.org
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-mediatek@lists.infradead.org
      Signed-off-by: NLee Jones <lee.jones@linaro.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201116174112.1833368-12-lee.jones@linaro.org
      eaa4d562
  6. 10 11月, 2020 1 次提交
    • M
      drm: Use state helper instead of CRTC state pointer · 253f28b6
      Maxime Ripard 提交于
      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: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NMaxime Ripard <maxime@cerno.tech>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Acked-by: NThomas 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
  7. 02 11月, 2020 1 次提交
    • M
      drm/atomic: Pass the full state to CRTC atomic begin and flush · f6ebe9f9
      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_begin and atomic_flush.
      
      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;
      identifier old_crtc_state, old_state;
      identifier crtc;
      identifier f;
      @@
      
       f(struct drm_crtc_state *old_crtc_state)
       {
      	...
       	struct drm_atomic_state *old_state = old_crtc_state->state;
      	<...
      -	FUNCS->atomic_begin(crtc, old_crtc_state);
      +	FUNCS->atomic_begin(crtc, old_state);
      	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      identifier old_crtc_state, old_state;
      identifier crtc;
      identifier f;
      @@
      
       f(struct drm_crtc_state *old_crtc_state)
       {
      	...
       	struct drm_atomic_state *old_state = old_crtc_state->state;
      	<...
      -	FUNCS->atomic_flush(crtc, old_crtc_state);
      +	FUNCS->atomic_flush(crtc, old_state);
      	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      struct drm_crtc *crtc;
      struct drm_crtc_state *crtc_state;
      identifier dev, state;
      identifier f;
      @@
      
       f(struct drm_device *dev, struct drm_atomic_state *state, ...)
       {
      	<...
      -	FUNCS->atomic_begin(crtc, crtc_state);
      +	FUNCS->atomic_begin(crtc, state);
      	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      struct drm_crtc *crtc;
      struct drm_crtc_state *crtc_state;
      identifier dev, state;
      identifier f;
      @@
      
       f(struct drm_device *dev, struct drm_atomic_state *state, ...)
       {
      	<...
      -	FUNCS->atomic_flush(crtc, crtc_state);
      +	FUNCS->atomic_flush(crtc, state);
      	...>
       }
      
      @@
      identifier crtc, old_state;
      @@
      
       struct drm_crtc_helper_funcs {
      	...
      -	void (*atomic_begin)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_begin)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      -	void (*atomic_flush)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_flush)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      }
      
      @ 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,
      	...,
      };
      )
      
      @ ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc,
      		struct drm_crtc_state *old_state)
      {
      	... when != old_state
      }
      
      @ adds_old_state depends on crtc_atomic_func && !ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
      {
      +	struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
      	...
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      expression E;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state = E;
      +	T crtc_state = E;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state;
      +	T crtc_state;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vc4_hvs_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   )
      {
      +	struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
      	...
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vc4_hvs_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   );
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   )
      {
      	...
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   );
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   )
      {
      	...
      }
      
      @@
      identifier old_state;
      identifier crtc;
      @@
      
       void vmw_du_crtc_atomic_flush(struct drm_crtc *crtc,
      -			   struct drm_crtc_state *old_state
      +			   struct drm_atomic_state *state
      			   );
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      identifier old_state;
      identifier crtc;
      @@
      
      void func(struct drm_crtc *crtc,
      -	       struct drm_crtc_state *old_state
      +	       struct drm_atomic_state *state
      	       )
      		{ ... }
      
      @ include depends on adds_old_state @
      @@
      
       #include <drm/drm_atomic.h>
      
      @ no_include depends on !include && adds_old_state @
      @@
      
      + #include <drm/drm_atomic.h>
        #include <drm/...>
      Signed-off-by: NMaxime Ripard <maxime@cerno.tech>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Acked-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Acked-by: NThomas Zimmermann <tzimmermann@suse.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201028123222.1732139-2-maxime@cerno.tech
      f6ebe9f9
  8. 09 10月, 2020 1 次提交
    • M
      drm/atomic: Pass the full state to CRTC atomic enable/disable · 351f950d
      Maxime Ripard 提交于
      If the CRTC driver ever needs to access the full DRM state, it can't do so
      at atomic_enable / atomic_disable time since drm_atomic_helper_swap_state
      will have cleared the pointer from the struct drm_crtc_state to the struct
      drm_atomic_state before calling those hooks.
      
      In order to allow that, let's pass the full DRM state to atomic_enable and
      atomic_disable. 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;
      identifier dev, state;
      identifier crtc, crtc_state;
      @@
      
       disable_outputs(struct drm_device *dev, struct drm_atomic_state *state)
       {
       	<...
      -	FUNCS->atomic_disable(crtc, crtc_state);
      +	FUNCS->atomic_disable(crtc, state);
       	...>
       }
      
      @@
      struct drm_crtc_helper_funcs *FUNCS;
      identifier dev, state;
      identifier crtc, crtc_state;
      @@
      
       drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, struct drm_atomic_state *state)
       {
       	<...
      -	FUNCS->atomic_enable(crtc, crtc_state);
      +	FUNCS->atomic_enable(crtc, state);
       	...>
       }
      
      @@
      identifier crtc, old_state;
      @@
      
       struct drm_crtc_helper_funcs {
      	...
      -	void (*atomic_enable)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_enable)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      -	void (*atomic_disable)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
      +	void (*atomic_disable)(struct drm_crtc *crtc, struct drm_atomic_state *state);
      	...
      }
      
      @ crtc_atomic_func @
      identifier helpers;
      identifier func;
      @@
      
      (
      static struct drm_crtc_helper_funcs helpers = {
      	...,
      	.atomic_enable = func,
      	...,
      };
      |
      static struct drm_crtc_helper_funcs helpers = {
      	...,
      	.atomic_disable = func,
      	...,
      };
      )
      
      @ ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc,
      		struct drm_crtc_state *old_state)
      {
      	... when != old_state
      }
      
      @ adds_old_state depends on crtc_atomic_func && !ignores_old_state @
      identifier crtc_atomic_func.func;
      identifier crtc, old_state;
      @@
      
      void func(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
      {
      +	struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
      	...
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      expression E;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state = E;
      +	T crtc_state = E;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      type T;
      @@
      
      void func(...)
      {
      	...
      -	T state;
      +	T crtc_state;
      	<+...
      -	state
      +	crtc_state
      	...+>
      
      }
      
      @ depends on crtc_atomic_func @
      identifier crtc_atomic_func.func;
      identifier old_state;
      identifier crtc;
      @@
      
      void func(struct drm_crtc *crtc,
      -	       struct drm_crtc_state *old_state
      +	       struct drm_atomic_state *state
      	       )
      		{ ... }
      
      @ include depends on adds_old_state @
      @@
      
       #include <drm/drm_atomic.h>
      
      @ no_include depends on !include && adds_old_state @
      @@
      
      + #include <drm/drm_atomic.h>
        #include <drm/...>
      Signed-off-by: NMaxime Ripard <maxime@cerno.tech>
      Acked-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: https://patchwork.freedesktop.org/patch/msgid/845aa10ef171fc0ea060495efef142a0c13f7870.1602161031.git-series.maxime@cerno.tech
      351f950d
  9. 25 9月, 2020 2 次提交
  10. 17 9月, 2020 1 次提交
  11. 03 7月, 2020 1 次提交
  12. 27 6月, 2020 2 次提交
  13. 22 6月, 2020 1 次提交
  14. 27 5月, 2020 1 次提交
    • V
      drm: Nuke mode->vrefresh · 0425662f
      Ville Syrjälä 提交于
      Get rid of mode->vrefresh and just calculate it on demand. Saves
      a bit of space and avoids the cached value getting out of sync
      with reality.
      
      Mostly done with cocci, with the following manual fixups:
      - Remove the now empty loop in drm_helper_probe_single_connector_modes()
      - Fix __MODE() macro in ch7006_mode.c
      - Fix DRM_MODE_ARG() macro in drm_modes.h
      - Remove leftover comment from samsung_s6d16d0_mode
      - Drop the TODO
      
      @@
      @@
      struct drm_display_mode {
      	...
      -	int vrefresh;
      	...
      };
      
      @@
      identifier N;
      expression E;
      @@
      struct drm_display_mode N = {
      -	.vrefresh = E
      };
      
      @@
      identifier N;
      expression E;
      @@
      struct drm_display_mode N[...] = {
      ...,
      {
      -	.vrefresh = E
      }
      ,...
      };
      
      @@
      expression E;
      @@
      {
      	DRM_MODE(...),
      -	.vrefresh = E,
      }
      
      @@
      identifier M, R;
      @@
      int drm_mode_vrefresh(const struct drm_display_mode *M)
      {
        ...
      - if (M->vrefresh > 0)
      - 	R = M->vrefresh;
      - else
        if (...) {
        ...
        }
        ...
      }
      
      @@
      struct drm_display_mode *p;
      expression E;
      @@
      (
      - p->vrefresh = E;
      |
      - p->vrefresh
      + drm_mode_vrefresh(p)
      )
      
      @@
      struct drm_display_mode s;
      expression E;
      @@
      (
      - s.vrefresh = E;
      |
      - s.vrefresh
      + drm_mode_vrefresh(&s)
      )
      
      @@
      expression E;
      @@
      - drm_mode_vrefresh(E) ? drm_mode_vrefresh(E) : drm_mode_vrefresh(E)
      + drm_mode_vrefresh(E)
      
      @find_substruct@
      identifier X;
      identifier S;
      @@
      struct X {
      ...
      	struct drm_display_mode S;
      ...
      };
      
      @@
      identifier find_substruct.S;
      expression E;
      identifier I;
      @@
      {
      .S = {
      -	.vrefresh = E
      }
      }
      
      @@
      identifier find_substruct.S;
      identifier find_substruct.X;
      expression E;
      identifier I;
      @@
      struct X I[...] = {
      ...,
      .S = {
      -	.vrefresh = E
      }
      ,...
      };
      
      v2: Drop TODO
      v3: Rebase
      v4: Rebase
      
      Cc: Andrzej Hajda <a.hajda@samsung.com>
      Cc: Neil Armstrong <narmstrong@baylibre.com>
      Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
      Cc: Jonas Karlman <jonas@kwiboo.se>
      Cc: Jernej Skrabec <jernej.skrabec@siol.net>
      Cc: Inki Dae <inki.dae@samsung.com>
      Cc: Joonyoung Shim <jy0922.shim@samsung.com>
      Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Cc: CK Hu <ck.hu@mediatek.com>
      Cc: Philipp Zabel <p.zabel@pengutronix.de>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Cc: Jerry Han <hanxu5@huaqin.corp-partner.google.com>
      Cc: Icenowy Zheng <icenowy@aosc.io>
      Cc: Jagan Teki <jagan@amarulasolutions.com>
      Cc: Stefan Mavrodiev <stefan@olimex.com>
      Cc: Robert Chiras <robert.chiras@nxp.com>
      Cc: "Guido Günther" <agx@sigxcpu.org>
      Cc: Purism Kernel Team <kernel@puri.sm>
      Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
      Cc: Vincent Abriou <vincent.abriou@st.com>
      Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
      Cc: Thomas Hellstrom <thellstrom@vmware.com>
      Cc: linux-amlogic@lists.infradead.org
      Cc: nouveau@lists.freedesktop.org
      Reviewed-by: NLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Reviewed-by: NEmil Velikov <emil.velikov@collabora.com>
      Reviewed-by: NSam Ravnborg <sam@ravnborg.org>
      Acked-by: NLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200428171940.19552-4-ville.syrjala@linux.intel.com
      0425662f
  15. 13 4月, 2020 1 次提交
  16. 18 2月, 2020 2 次提交
  17. 11 2月, 2020 2 次提交
  18. 10 1月, 2020 2 次提交
  19. 09 1月, 2020 2 次提交
  20. 20 12月, 2019 5 次提交
  21. 09 12月, 2019 2 次提交
  22. 06 11月, 2019 4 次提交