Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 413d45d3 authored by Jason Wessel's avatar Jason Wessel Committed by Dave Airlie
Browse files

drm, kdb, kms: Add an enter argument to mode_set_base_atomic() API



Some devices such as the radeon chips receive information from user
space which needs to be saved when executing an atomic mode set
operation, else the user space would have to be queried again for the
information.

This patch extends the mode_set_base_atomic() call to pass an argument
to indicate if this is an entry or an exit from an atomic kernel mode
set change.  Individual drm drivers can properly save and restore
state accordingly.

Signed-off-by: default avatarJason Wessel <jason.wessel@windriver.com>
CC: Jesse Barnes <jbarnes@virtuousgeek.org>
CC: David Airlie <airlied@linux.ie>
CC: dri-devel@lists.freedesktop.org
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent be64c2bb
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -263,7 +263,8 @@ int drm_fb_helper_debug_enter(struct fb_info *info)
			funcs->mode_set_base_atomic(mode_set->crtc,
						    mode_set->fb,
						    mode_set->x,
						    mode_set->y);
						    mode_set->y,
						    1);

		}
	}
@@ -309,7 +310,7 @@ int drm_fb_helper_debug_leave(struct fb_info *info)
		}

		funcs->mode_set_base_atomic(mode_set->crtc, fb, crtc->x,
					    crtc->y);
					    crtc->y, 0);
	}

	return 0;
+2 −2
Original line number Diff line number Diff line
@@ -1492,7 +1492,7 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
/* Assume fb object is pinned & idle & fenced and just update base pointers */
static int
intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
			   int x, int y)
			   int x, int y, int enter)
{
	struct drm_device *dev = crtc->dev;
	struct drm_i915_private *dev_priv = dev->dev_private;
@@ -1614,7 +1614,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
			   atomic_read(&obj_priv->pending_flip) == 0);
	}

	ret = intel_pipe_set_base_atomic(crtc, crtc->fb, x, y);
	ret = intel_pipe_set_base_atomic(crtc, crtc->fb, x, y, 0);
	if (ret) {
		i915_gem_object_unpin(to_intel_framebuffer(crtc->fb)->obj);
		mutex_unlock(&dev->struct_mutex);
+1 −1
Original line number Diff line number Diff line
@@ -858,7 +858,7 @@ nv04_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
static int
nv04_crtc_mode_set_base_atomic(struct drm_crtc *crtc,
			       struct drm_framebuffer *fb,
			       int x, int y)
			       int x, int y, int enter)
{
	return nv04_crtc_do_mode_set_base(crtc, fb, x, y, true);
}
+1 −1
Original line number Diff line number Diff line
@@ -712,7 +712,7 @@ nv50_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
static int
nv50_crtc_mode_set_base_atomic(struct drm_crtc *crtc,
			       struct drm_framebuffer *fb,
			       int x, int y)
			       int x, int y, int enter)
{
	return nv50_crtc_do_mode_set_base(crtc, fb, x, y, true, true);
}
+1 −1
Original line number Diff line number Diff line
@@ -1180,7 +1180,7 @@ int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,

int atombios_crtc_set_base_atomic(struct drm_crtc *crtc,
                                  struct drm_framebuffer *fb,
                                  int x, int y)
                                  int x, int y, int enter)
{
       struct drm_device *dev = crtc->dev;
       struct radeon_device *rdev = dev->dev_private;
Loading