linux/include/drm
Maxime Ripard 977697e20b
drm/atomic: Pass the full state to planes atomic disable and update
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 the remaining helpers to provide a consistent interface,
this time with the planes atomic_update and atomic_disable.

The conversion was done using the coccinelle script below, built tested on
all the drivers.

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

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

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

 struct drm_plane_helper_funcs {
	...
	void (*atomic_disable)(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_update = func,
	...,
 };
|
 static const struct drm_plane_helper_funcs helpers = {
 	...,
 	.atomic_disable = func,
	...,
 };
)

@@
struct drm_plane_helper_funcs *FUNCS;
identifier f;
identifier crtc_state;
identifier plane, plane_state, state;
expression e;
@@

 f(struct drm_crtc_state *crtc_state)
 {
 	...
 	struct drm_atomic_state *state = e;
 	<+...
(
-	FUNCS->atomic_disable(plane, plane_state)
+	FUNCS->atomic_disable(plane, state)
|
-	FUNCS->atomic_update(plane, plane_state)
+	FUNCS->atomic_update(plane, state)
)
 	...+>
 }

@@
identifier plane_atomic_func.func;
identifier plane;
symbol state;
@@

 func(struct drm_plane *plane,
-    struct drm_plane_state *state)
+    struct drm_plane_state *old_plane_state)
 {
	<...
-	state
+	old_plane_state
	...>
 }

@ ignores_old_state @
identifier plane_atomic_func.func;
identifier plane, old_state;
@@

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

@ adds_old_state depends on plane_atomic_func && !ignores_old_state @
identifier plane_atomic_func.func;
identifier plane, plane_state;
@@

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

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

 func(struct drm_plane *plane,
-     struct drm_plane_state *plane_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/...>

@@
identifier plane_atomic_func.func;
identifier plane, state;
identifier plane_state;
@@

 func(struct drm_plane *plane, struct drm_atomic_state *state) {
 	...
 	struct drm_plane_state *plane_state = drm_atomic_get_old_plane_state(state, plane);
 	<+...
-	plane_state->state
+	state
 	...+>
 }

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-9-maxime@cerno.tech
2021-02-25 08:05:28 +01:00
..
bridge
i2c
ttm drm/ttm: move memory accounting into vmwgfx v4 2021-02-09 17:27:33 +01:00
amd_asic_type.h
drm_agpsupport.h drm: Inline AGP wrappers into their only callers 2021-01-13 14:21:53 +01:00
drm_atomic.h drm: Introduce a drm_crtc_commit_wait helper 2021-01-21 12:11:04 +01:00
drm_atomic_helper.h drm: automatic legacy gamma support 2020-12-15 15:46:03 +02:00
drm_atomic_state_helper.h
drm_atomic_uapi.h
drm_audio_component.h
drm_auth.h
drm_blend.h
drm_bridge.h
drm_bridge_connector.h
drm_cache.h
drm_client.h
drm_color_mgmt.h
drm_connector.h Merge tag 'topic/dp-hdmi-2.1-pcon-2020-12-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2021-01-07 11:02:25 +01:00
drm_crtc.h drm: drm_crc: fix a kernel-doc markup 2021-01-14 15:11:46 +01:00
drm_crtc_helper.h
drm_damage_helper.h
drm_debugfs.h
drm_debugfs_crc.h
drm_device.h drm: Move struct drm_device.hose to legacy section 2021-01-13 14:22:37 +01:00
drm_displayid.h
drm_dp_dual_mode_helper.h
drm_dp_helper.h drm/dp_helper: Add helpers to configure PCONs RGB-YCbCr Conversion 2020-12-22 17:52:50 +02:00
drm_dp_mst_helper.h
drm_drv.h drm: Move legacy device list out of drm_driver 2021-01-05 07:20:29 +02:00
drm_dsc.h - Display hotplug fix for gen2/gen3 (Chris) 2021-01-07 12:20:29 +01:00
drm_edid.h drm/edid: Add additional HFVSDB fields for HDMI2.1 2020-12-22 17:39:06 +02:00
drm_encoder.h drm: add drmm_encoder_alloc() 2021-01-04 12:59:33 +01:00
drm_encoder_slave.h
drm_fb_cma_helper.h
drm_fb_helper.h drm/fb-helper: Rename dirty worker to damage worker 2020-11-24 09:27:55 +01:00
drm_file.h drm/drm_vblank: set the dma-fence timestamp during send_vblank_event 2021-01-22 16:22:29 +05:30
drm_fixed.h
drm_flip_work.h
drm_format_helper.h
drm_fourcc.h
drm_framebuffer.h
drm_gem.h drm: Don't export the drm_gem_dumb_destroy() function 2021-01-05 07:20:25 +02:00
drm_gem_atomic_helper.h drm/gem: Move drm_gem_fb_prepare_fb() to GEM atomic helpers 2021-02-23 08:54:22 +01:00
drm_gem_cma_helper.h drm/cma-helper: Implement mmap as GEM CMA object functions 2020-11-30 13:38:27 +01:00
drm_gem_framebuffer_helper.h drm/gem: Move drm_gem_fb_prepare_fb() to GEM atomic helpers 2021-02-23 08:54:22 +01:00
drm_gem_shmem_helper.h drm/shmem-helper: Removed drm_gem_shmem_create_object_cached() 2020-11-24 09:10:33 +01:00
drm_gem_ttm_helper.h
drm_gem_vram_helper.h drm/ttm: device naming cleanup 2021-01-21 14:51:45 +01:00
drm_hashtab.h
drm_hdcp.h
drm_ioctl.h
drm_irq.h drm/irq: Add the new api to install irq 2020-12-03 03:57:15 -05:00
drm_lease.h
drm_legacy.h drm: Use a const drm_driver for legacy PCI devices 2021-01-05 07:20:35 +02:00
drm_managed.h drm: Remove drmm_add_final_kfree() declaration from public headers 2020-12-05 20:01:12 +01:00
drm_mipi_dbi.h drm/mipi-dbi: Switch to new kerneldoc syntax for named variable macro argument 2021-01-08 09:54:43 +01:00
drm_mipi_dsi.h
drm_mm.h
drm_mode_config.h
drm_mode_object.h
drm_modes.h drm: document drm_mode_modeinfo 2020-11-20 11:55:41 +01:00
drm_modeset_helper.h
drm_modeset_helper_vtables.h drm/atomic: Pass the full state to planes atomic disable and update 2021-02-25 08:05:28 +01:00
drm_modeset_lock.h
drm_of.h
drm_panel.h
drm_pciids.h
drm_plane.h drm/gem: Move drm_gem_fb_prepare_fb() to GEM atomic helpers 2021-02-23 08:54:22 +01:00
drm_plane_helper.h
drm_prime.h drm/prime: split array import functions v4 2020-11-30 15:00:45 +01:00
drm_print.h
drm_probe_helper.h
drm_property.h drm: Fix macro name DRM_MODE_PROP_OBJECT in code comment 2021-01-12 09:56:48 +01:00
drm_rect.h
drm_scdc_helper.h
drm_self_refresh_helper.h
drm_simple_kms_helper.h drm/gem: Move drm_gem_fb_prepare_fb() to GEM atomic helpers 2021-02-23 08:54:22 +01:00
drm_syncobj.h
drm_sysfs.h
drm_util.h
drm_utils.h
drm_vblank.h drm/vblank: Document drm_crtc_vblank_restore constraints 2021-02-10 12:38:55 +01:00
drm_vblank_work.h
drm_vma_manager.h
drm_writeback.h
gma_drm.h
gpu_scheduler.h drm/scheduler: provide scheduler score externally 2021-02-05 10:47:11 +01:00
i915_component.h
i915_drm.h
i915_mei_hdcp_interface.h
i915_pciids.h
intel-gtt.h
intel_lpe_audio.h
spsc_queue.h
task_barrier.h