提交 c54173a8 编写于 作者: D Damien Lespiau 提交者: Daniel Vetter

drm/i915: Fix sprite offset on HSW

HSW consolidates SPRTILEOFF and SPRLINOFF into a single SPROFFSET
register.

v2: Remove a useless level of indentation (Paulo Zanoni)
Signed-off-by: NDamien Lespiau <damien.lespiau@intel.com>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> (v1)
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 bc1c91eb
...@@ -3190,6 +3190,7 @@ ...@@ -3190,6 +3190,7 @@
#define _SPRA_SURF 0x7029c #define _SPRA_SURF 0x7029c
#define _SPRA_KEYMAX 0x702a0 #define _SPRA_KEYMAX 0x702a0
#define _SPRA_TILEOFF 0x702a4 #define _SPRA_TILEOFF 0x702a4
#define _SPRA_OFFSET 0x702a4
#define _SPRA_SCALE 0x70304 #define _SPRA_SCALE 0x70304
#define SPRITE_SCALE_ENABLE (1<<31) #define SPRITE_SCALE_ENABLE (1<<31)
#define SPRITE_FILTER_MASK (3<<29) #define SPRITE_FILTER_MASK (3<<29)
...@@ -3210,6 +3211,7 @@ ...@@ -3210,6 +3211,7 @@
#define _SPRB_SURF 0x7129c #define _SPRB_SURF 0x7129c
#define _SPRB_KEYMAX 0x712a0 #define _SPRB_KEYMAX 0x712a0
#define _SPRB_TILEOFF 0x712a4 #define _SPRB_TILEOFF 0x712a4
#define _SPRB_OFFSET 0x712a4
#define _SPRB_SCALE 0x71304 #define _SPRB_SCALE 0x71304
#define _SPRB_GAMC 0x71400 #define _SPRB_GAMC 0x71400
...@@ -3223,6 +3225,7 @@ ...@@ -3223,6 +3225,7 @@
#define SPRSURF(pipe) _PIPE(pipe, _SPRA_SURF, _SPRB_SURF) #define SPRSURF(pipe) _PIPE(pipe, _SPRA_SURF, _SPRB_SURF)
#define SPRKEYMAX(pipe) _PIPE(pipe, _SPRA_KEYMAX, _SPRB_KEYMAX) #define SPRKEYMAX(pipe) _PIPE(pipe, _SPRA_KEYMAX, _SPRB_KEYMAX)
#define SPRTILEOFF(pipe) _PIPE(pipe, _SPRA_TILEOFF, _SPRB_TILEOFF) #define SPRTILEOFF(pipe) _PIPE(pipe, _SPRA_TILEOFF, _SPRB_TILEOFF)
#define SPROFFSET(pipe) _PIPE(pipe, _SPRA_OFFSET, _SPRB_OFFSET)
#define SPRSCALE(pipe) _PIPE(pipe, _SPRA_SCALE, _SPRB_SCALE) #define SPRSCALE(pipe) _PIPE(pipe, _SPRA_SCALE, _SPRB_SCALE)
#define SPRGAMC(pipe) _PIPE(pipe, _SPRA_GAMC, _SPRB_GAMC) #define SPRGAMC(pipe) _PIPE(pipe, _SPRA_GAMC, _SPRB_GAMC)
......
...@@ -127,7 +127,12 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb, ...@@ -127,7 +127,12 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
I915_WRITE(SPRSTRIDE(pipe), fb->pitches[0]); I915_WRITE(SPRSTRIDE(pipe), fb->pitches[0]);
I915_WRITE(SPRPOS(pipe), (crtc_y << 16) | crtc_x); I915_WRITE(SPRPOS(pipe), (crtc_y << 16) | crtc_x);
if (obj->tiling_mode != I915_TILING_NONE) {
if (IS_HASWELL(dev)) {
/* HSW consolidates SPRTILEOFF and SPRLINOFF into a single
* SPROFFSET register */
I915_WRITE(SPROFFSET(pipe), (y << 16) | x);
} else if (obj->tiling_mode != I915_TILING_NONE) {
I915_WRITE(SPRTILEOFF(pipe), (y << 16) | x); I915_WRITE(SPRTILEOFF(pipe), (y << 16) | x);
} else { } else {
unsigned long offset; unsigned long offset;
...@@ -135,6 +140,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb, ...@@ -135,6 +140,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8); offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
I915_WRITE(SPRLINOFF(pipe), offset); I915_WRITE(SPRLINOFF(pipe), offset);
} }
I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w); I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
if (intel_plane->can_scale) if (intel_plane->can_scale)
I915_WRITE(SPRSCALE(pipe), sprscale); I915_WRITE(SPRSCALE(pipe), sprscale);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册