mirror of https://gitee.com/openkylin/linux.git
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: Jason 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: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
be64c2bb47
commit
413d45d362
|
@ -263,7 +263,8 @@ int drm_fb_helper_debug_enter(struct fb_info *info)
|
||||||
funcs->mode_set_base_atomic(mode_set->crtc,
|
funcs->mode_set_base_atomic(mode_set->crtc,
|
||||||
mode_set->fb,
|
mode_set->fb,
|
||||||
mode_set->x,
|
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,
|
funcs->mode_set_base_atomic(mode_set->crtc, fb, crtc->x,
|
||||||
crtc->y);
|
crtc->y, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -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 */
|
/* Assume fb object is pinned & idle & fenced and just update base pointers */
|
||||||
static int
|
static int
|
||||||
intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
|
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_device *dev = crtc->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
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);
|
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) {
|
if (ret) {
|
||||||
i915_gem_object_unpin(to_intel_framebuffer(crtc->fb)->obj);
|
i915_gem_object_unpin(to_intel_framebuffer(crtc->fb)->obj);
|
||||||
mutex_unlock(&dev->struct_mutex);
|
mutex_unlock(&dev->struct_mutex);
|
||||||
|
|
|
@ -858,7 +858,7 @@ nv04_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
static int
|
static int
|
||||||
nv04_crtc_mode_set_base_atomic(struct drm_crtc *crtc,
|
nv04_crtc_mode_set_base_atomic(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
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);
|
return nv04_crtc_do_mode_set_base(crtc, fb, x, y, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -712,7 +712,7 @@ nv50_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
static int
|
static int
|
||||||
nv50_crtc_mode_set_base_atomic(struct drm_crtc *crtc,
|
nv50_crtc_mode_set_base_atomic(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
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);
|
return nv50_crtc_do_mode_set_base(crtc, fb, x, y, true, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
int atombios_crtc_set_base_atomic(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
struct drm_framebuffer *fb,
|
||||||
int x, int y)
|
int x, int y, int enter)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = crtc->dev;
|
struct drm_device *dev = crtc->dev;
|
||||||
struct radeon_device *rdev = dev->dev_private;
|
struct radeon_device *rdev = dev->dev_private;
|
||||||
|
|
|
@ -353,7 +353,7 @@ int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
|
|
||||||
int radeon_crtc_set_base_atomic(struct drm_crtc *crtc,
|
int radeon_crtc_set_base_atomic(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
struct drm_framebuffer *fb,
|
||||||
int x, int y)
|
int x, int y, int enter)
|
||||||
{
|
{
|
||||||
return radeon_crtc_do_set_base(crtc, fb, x, y, 1);
|
return radeon_crtc_do_set_base(crtc, fb, x, y, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -516,7 +516,7 @@ extern int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
struct drm_framebuffer *old_fb);
|
struct drm_framebuffer *old_fb);
|
||||||
extern int atombios_crtc_set_base_atomic(struct drm_crtc *crtc,
|
extern int atombios_crtc_set_base_atomic(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
struct drm_framebuffer *fb,
|
||||||
int x, int y);
|
int x, int y, int enter);
|
||||||
extern int atombios_crtc_mode_set(struct drm_crtc *crtc,
|
extern int atombios_crtc_mode_set(struct drm_crtc *crtc,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode,
|
struct drm_display_mode *adjusted_mode,
|
||||||
|
@ -528,7 +528,7 @@ extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
struct drm_framebuffer *old_fb);
|
struct drm_framebuffer *old_fb);
|
||||||
extern int radeon_crtc_set_base_atomic(struct drm_crtc *crtc,
|
extern int radeon_crtc_set_base_atomic(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
struct drm_framebuffer *fb,
|
||||||
int x, int y);
|
int x, int y, int enter);
|
||||||
extern int radeon_crtc_do_set_base(struct drm_crtc *crtc,
|
extern int radeon_crtc_do_set_base(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb,
|
struct drm_framebuffer *fb,
|
||||||
int x, int y, int atomic);
|
int x, int y, int atomic);
|
||||||
|
|
|
@ -61,7 +61,8 @@ struct drm_crtc_helper_funcs {
|
||||||
int (*mode_set_base)(struct drm_crtc *crtc, int x, int y,
|
int (*mode_set_base)(struct drm_crtc *crtc, int x, int y,
|
||||||
struct drm_framebuffer *old_fb);
|
struct drm_framebuffer *old_fb);
|
||||||
int (*mode_set_base_atomic)(struct drm_crtc *crtc,
|
int (*mode_set_base_atomic)(struct drm_crtc *crtc,
|
||||||
struct drm_framebuffer *fb, int x, int y);
|
struct drm_framebuffer *fb, int x, int y,
|
||||||
|
int is_enter);
|
||||||
|
|
||||||
/* reload the current crtc LUT */
|
/* reload the current crtc LUT */
|
||||||
void (*load_lut)(struct drm_crtc *crtc);
|
void (*load_lut)(struct drm_crtc *crtc);
|
||||||
|
|
Loading…
Reference in New Issue