mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	drm: Add acquire ctx parameter to ->plane_disable
Nouveau had a few direct calls to ->disable_plane, I replaced those with drm_plane_force_disable. Same story for shmob. Otherwise no code changes. Cc: Ben Skeggs <bskeggs@redhat.com> Cc: Russell King <linux@armlinux.org.uk> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170322215058.8671-5-daniel.vetter@ffwll.ch
This commit is contained in:
		
							parent
							
								
									5fbef3ee4a
								
							
						
					
					
						commit
						1931529448
					
				
					 9 changed files with 26 additions and 16 deletions
				
			
		| 
						 | 
					@ -258,7 +258,8 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int armada_ovl_plane_disable(struct drm_plane *plane)
 | 
					static int armada_ovl_plane_disable(struct drm_plane *plane,
 | 
				
			||||||
 | 
									    struct drm_modeset_acquire_ctx *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct armada_ovl_plane *dplane = drm_to_armada_ovl_plane(plane);
 | 
						struct armada_ovl_plane *dplane = drm_to_armada_ovl_plane(plane);
 | 
				
			||||||
	struct drm_framebuffer *fb;
 | 
						struct drm_framebuffer *fb;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2151,13 +2151,15 @@ EXPORT_SYMBOL(drm_atomic_helper_update_plane);
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * drm_atomic_helper_disable_plane - Helper for primary plane disable using * atomic
 | 
					 * drm_atomic_helper_disable_plane - Helper for primary plane disable using * atomic
 | 
				
			||||||
 * @plane: plane to disable
 | 
					 * @plane: plane to disable
 | 
				
			||||||
 | 
					 * @ctx: lock acquire context
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Provides a default plane disable handler using the atomic driver interface.
 | 
					 * Provides a default plane disable handler using the atomic driver interface.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * RETURNS:
 | 
					 * RETURNS:
 | 
				
			||||||
 * Zero on success, error code on failure
 | 
					 * Zero on success, error code on failure
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int drm_atomic_helper_disable_plane(struct drm_plane *plane)
 | 
					int drm_atomic_helper_disable_plane(struct drm_plane *plane,
 | 
				
			||||||
 | 
									    struct drm_modeset_acquire_ctx *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct drm_atomic_state *state;
 | 
						struct drm_atomic_state *state;
 | 
				
			||||||
	struct drm_plane_state *plane_state;
 | 
						struct drm_plane_state *plane_state;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -294,7 +294,7 @@ void drm_plane_force_disable(struct drm_plane *plane)
 | 
				
			||||||
	WARN_ON(drm_drv_uses_atomic_modeset(plane->dev));
 | 
						WARN_ON(drm_drv_uses_atomic_modeset(plane->dev));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	plane->old_fb = plane->fb;
 | 
						plane->old_fb = plane->fb;
 | 
				
			||||||
	ret = plane->funcs->disable_plane(plane);
 | 
						ret = plane->funcs->disable_plane(plane, NULL);
 | 
				
			||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		DRM_ERROR("failed to disable plane with busy fb\n");
 | 
							DRM_ERROR("failed to disable plane with busy fb\n");
 | 
				
			||||||
		plane->old_fb = NULL;
 | 
							plane->old_fb = NULL;
 | 
				
			||||||
| 
						 | 
					@ -473,7 +473,7 @@ static int __setplane_internal(struct drm_plane *plane,
 | 
				
			||||||
	/* No fb means shut it down */
 | 
						/* No fb means shut it down */
 | 
				
			||||||
	if (!fb) {
 | 
						if (!fb) {
 | 
				
			||||||
		plane->old_fb = plane->fb;
 | 
							plane->old_fb = plane->fb;
 | 
				
			||||||
		ret = plane->funcs->disable_plane(plane);
 | 
							ret = plane->funcs->disable_plane(plane, ctx);
 | 
				
			||||||
		if (!ret) {
 | 
							if (!ret) {
 | 
				
			||||||
			plane->crtc = NULL;
 | 
								plane->crtc = NULL;
 | 
				
			||||||
			plane->fb = NULL;
 | 
								plane->fb = NULL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -349,7 +349,7 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
 | 
				
			||||||
		 * provides their own disable function, this will just
 | 
							 * provides their own disable function, this will just
 | 
				
			||||||
		 * wind up returning -EINVAL to userspace.
 | 
							 * wind up returning -EINVAL to userspace.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		return plane->funcs->disable_plane(plane);
 | 
							return plane->funcs->disable_plane(plane, ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Find current connectors for CRTC */
 | 
						/* Find current connectors for CRTC */
 | 
				
			||||||
	num_connectors = get_connectors_for_crtc(crtc, NULL, 0);
 | 
						num_connectors = get_connectors_for_crtc(crtc, NULL, 0);
 | 
				
			||||||
| 
						 | 
					@ -398,7 +398,8 @@ EXPORT_SYMBOL(drm_primary_helper_update);
 | 
				
			||||||
 * RETURNS:
 | 
					 * RETURNS:
 | 
				
			||||||
 * Unconditionally returns -EINVAL.
 | 
					 * Unconditionally returns -EINVAL.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int drm_primary_helper_disable(struct drm_plane *plane)
 | 
					int drm_primary_helper_disable(struct drm_plane *plane,
 | 
				
			||||||
 | 
								       struct drm_modeset_acquire_ctx *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return -EINVAL;
 | 
						return -EINVAL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -173,7 +173,8 @@ nv10_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
nv10_disable_plane(struct drm_plane *plane)
 | 
					nv10_disable_plane(struct drm_plane *plane,
 | 
				
			||||||
 | 
							   struct drm_modeset_acquire_ctx *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct nvif_object *dev = &nouveau_drm(plane->dev)->client.device.object;
 | 
						struct nvif_object *dev = &nouveau_drm(plane->dev)->client.device.object;
 | 
				
			||||||
	struct nouveau_plane *nv_plane =
 | 
						struct nouveau_plane *nv_plane =
 | 
				
			||||||
| 
						 | 
					@ -191,7 +192,7 @@ nv10_disable_plane(struct drm_plane *plane)
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
nv_destroy_plane(struct drm_plane *plane)
 | 
					nv_destroy_plane(struct drm_plane *plane)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	plane->funcs->disable_plane(plane);
 | 
						drm_plane_force_disable(plane);
 | 
				
			||||||
	drm_plane_cleanup(plane);
 | 
						drm_plane_cleanup(plane);
 | 
				
			||||||
	kfree(plane);
 | 
						kfree(plane);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -332,7 +333,7 @@ nv10_overlay_init(struct drm_device *device)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	plane->set_params = nv10_set_params;
 | 
						plane->set_params = nv10_set_params;
 | 
				
			||||||
	nv10_set_params(plane);
 | 
						nv10_set_params(plane);
 | 
				
			||||||
	nv10_disable_plane(&plane->base);
 | 
						drm_plane_force_disable(&plane->base);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
cleanup:
 | 
					cleanup:
 | 
				
			||||||
	drm_plane_cleanup(&plane->base);
 | 
						drm_plane_cleanup(&plane->base);
 | 
				
			||||||
| 
						 | 
					@ -427,7 +428,8 @@ nv04_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
nv04_disable_plane(struct drm_plane *plane)
 | 
					nv04_disable_plane(struct drm_plane *plane,
 | 
				
			||||||
 | 
							   struct drm_modeset_acquire_ctx *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct nvif_object *dev = &nouveau_drm(plane->dev)->client.device.object;
 | 
						struct nvif_object *dev = &nouveau_drm(plane->dev)->client.device.object;
 | 
				
			||||||
	struct nouveau_plane *nv_plane =
 | 
						struct nouveau_plane *nv_plane =
 | 
				
			||||||
| 
						 | 
					@ -485,7 +487,7 @@ nv04_overlay_init(struct drm_device *device)
 | 
				
			||||||
	drm_object_attach_property(&plane->base.base,
 | 
						drm_object_attach_property(&plane->base.base,
 | 
				
			||||||
				   plane->props.brightness, plane->brightness);
 | 
									   plane->props.brightness, plane->brightness);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	nv04_disable_plane(&plane->base);
 | 
						drm_plane_force_disable(&plane->base);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
cleanup:
 | 
					cleanup:
 | 
				
			||||||
	drm_plane_cleanup(&plane->base);
 | 
						drm_plane_cleanup(&plane->base);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -209,7 +209,8 @@ shmob_drm_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int shmob_drm_plane_disable(struct drm_plane *plane)
 | 
					static int shmob_drm_plane_disable(struct drm_plane *plane,
 | 
				
			||||||
 | 
									   struct drm_modeset_acquire_ctx *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct shmob_drm_plane *splane = to_shmob_plane(plane);
 | 
						struct shmob_drm_plane *splane = to_shmob_plane(plane);
 | 
				
			||||||
	struct shmob_drm_device *sdev = plane->dev->dev_private;
 | 
						struct shmob_drm_device *sdev = plane->dev->dev_private;
 | 
				
			||||||
| 
						 | 
					@ -222,7 +223,7 @@ static int shmob_drm_plane_disable(struct drm_plane *plane)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void shmob_drm_plane_destroy(struct drm_plane *plane)
 | 
					static void shmob_drm_plane_destroy(struct drm_plane *plane)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	shmob_drm_plane_disable(plane);
 | 
						drm_plane_force_disable(plane);
 | 
				
			||||||
	drm_plane_cleanup(plane);
 | 
						drm_plane_cleanup(plane);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,7 +96,8 @@ int drm_atomic_helper_update_plane(struct drm_plane *plane,
 | 
				
			||||||
				   uint32_t src_x, uint32_t src_y,
 | 
									   uint32_t src_x, uint32_t src_y,
 | 
				
			||||||
				   uint32_t src_w, uint32_t src_h,
 | 
									   uint32_t src_w, uint32_t src_h,
 | 
				
			||||||
				   struct drm_modeset_acquire_ctx *ctx);
 | 
									   struct drm_modeset_acquire_ctx *ctx);
 | 
				
			||||||
int drm_atomic_helper_disable_plane(struct drm_plane *plane);
 | 
					int drm_atomic_helper_disable_plane(struct drm_plane *plane,
 | 
				
			||||||
 | 
									    struct drm_modeset_acquire_ctx *ctx);
 | 
				
			||||||
int __drm_atomic_helper_disable_plane(struct drm_plane *plane,
 | 
					int __drm_atomic_helper_disable_plane(struct drm_plane *plane,
 | 
				
			||||||
		struct drm_plane_state *plane_state);
 | 
							struct drm_plane_state *plane_state);
 | 
				
			||||||
int drm_atomic_helper_set_config(struct drm_mode_set *set);
 | 
					int drm_atomic_helper_set_config(struct drm_mode_set *set);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -203,7 +203,8 @@ struct drm_plane_funcs {
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * 0 on success or a negative error code on failure.
 | 
						 * 0 on success or a negative error code on failure.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	int (*disable_plane)(struct drm_plane *plane);
 | 
						int (*disable_plane)(struct drm_plane *plane,
 | 
				
			||||||
 | 
								     struct drm_modeset_acquire_ctx *ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @destroy:
 | 
						 * @destroy:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,8 @@ int drm_primary_helper_update(struct drm_plane *plane,
 | 
				
			||||||
			      uint32_t src_x, uint32_t src_y,
 | 
								      uint32_t src_x, uint32_t src_y,
 | 
				
			||||||
			      uint32_t src_w, uint32_t src_h,
 | 
								      uint32_t src_w, uint32_t src_h,
 | 
				
			||||||
			      struct drm_modeset_acquire_ctx *ctx);
 | 
								      struct drm_modeset_acquire_ctx *ctx);
 | 
				
			||||||
int drm_primary_helper_disable(struct drm_plane *plane);
 | 
					int drm_primary_helper_disable(struct drm_plane *plane,
 | 
				
			||||||
 | 
								       struct drm_modeset_acquire_ctx *ctx);
 | 
				
			||||||
void drm_primary_helper_destroy(struct drm_plane *plane);
 | 
					void drm_primary_helper_destroy(struct drm_plane *plane);
 | 
				
			||||||
extern const struct drm_plane_funcs drm_primary_helper_funcs;
 | 
					extern const struct drm_plane_funcs drm_primary_helper_funcs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue