diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_sprite.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_sprite.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c index f0b06c09da40..bdb64fc14655 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c | |||
@@ -189,7 +189,7 @@ skl_update_plane(struct drm_plane *drm_plane, struct drm_crtc *crtc, | |||
189 | struct intel_plane *intel_plane = to_intel_plane(drm_plane); | 189 | struct intel_plane *intel_plane = to_intel_plane(drm_plane); |
190 | const int pipe = intel_plane->pipe; | 190 | const int pipe = intel_plane->pipe; |
191 | const int plane = intel_plane->plane + 1; | 191 | const int plane = intel_plane->plane + 1; |
192 | u32 plane_ctl, stride; | 192 | u32 plane_ctl, stride_div; |
193 | int pixel_size = drm_format_plane_cpp(fb->pixel_format, 0); | 193 | int pixel_size = drm_format_plane_cpp(fb->pixel_format, 0); |
194 | 194 | ||
195 | plane_ctl = I915_READ(PLANE_CTL(pipe, plane)); | 195 | plane_ctl = I915_READ(PLANE_CTL(pipe, plane)); |
@@ -247,15 +247,20 @@ skl_update_plane(struct drm_plane *drm_plane, struct drm_crtc *crtc, | |||
247 | 247 | ||
248 | switch (fb->modifier[0]) { | 248 | switch (fb->modifier[0]) { |
249 | case DRM_FORMAT_MOD_NONE: | 249 | case DRM_FORMAT_MOD_NONE: |
250 | stride = fb->pitches[0] >> 6; | ||
251 | break; | 250 | break; |
252 | case I915_FORMAT_MOD_X_TILED: | 251 | case I915_FORMAT_MOD_X_TILED: |
253 | plane_ctl |= PLANE_CTL_TILED_X; | 252 | plane_ctl |= PLANE_CTL_TILED_X; |
254 | stride = fb->pitches[0] >> 9; | 253 | break; |
254 | case I915_FORMAT_MOD_Y_TILED: | ||
255 | plane_ctl |= PLANE_CTL_TILED_Y; | ||
256 | break; | ||
257 | case I915_FORMAT_MOD_Yf_TILED: | ||
258 | plane_ctl |= PLANE_CTL_TILED_YF; | ||
255 | break; | 259 | break; |
256 | default: | 260 | default: |
257 | BUG(); | 261 | MISSING_CASE(fb->modifier[0]); |
258 | } | 262 | } |
263 | |||
259 | if (drm_plane->state->rotation == BIT(DRM_ROTATE_180)) | 264 | if (drm_plane->state->rotation == BIT(DRM_ROTATE_180)) |
260 | plane_ctl |= PLANE_CTL_ROTATE_180; | 265 | plane_ctl |= PLANE_CTL_ROTATE_180; |
261 | 266 | ||
@@ -266,6 +271,9 @@ skl_update_plane(struct drm_plane *drm_plane, struct drm_crtc *crtc, | |||
266 | pixel_size, true, | 271 | pixel_size, true, |
267 | src_w != crtc_w || src_h != crtc_h); | 272 | src_w != crtc_w || src_h != crtc_h); |
268 | 273 | ||
274 | stride_div = intel_fb_stride_alignment(dev, fb->modifier[0], | ||
275 | fb->pixel_format); | ||
276 | |||
269 | /* Sizes are 0 based */ | 277 | /* Sizes are 0 based */ |
270 | src_w--; | 278 | src_w--; |
271 | src_h--; | 279 | src_h--; |
@@ -273,7 +281,7 @@ skl_update_plane(struct drm_plane *drm_plane, struct drm_crtc *crtc, | |||
273 | crtc_h--; | 281 | crtc_h--; |
274 | 282 | ||
275 | I915_WRITE(PLANE_OFFSET(pipe, plane), (y << 16) | x); | 283 | I915_WRITE(PLANE_OFFSET(pipe, plane), (y << 16) | x); |
276 | I915_WRITE(PLANE_STRIDE(pipe, plane), stride); | 284 | I915_WRITE(PLANE_STRIDE(pipe, plane), fb->pitches[0] / stride_div); |
277 | I915_WRITE(PLANE_POS(pipe, plane), (crtc_y << 16) | crtc_x); | 285 | I915_WRITE(PLANE_POS(pipe, plane), (crtc_y << 16) | crtc_x); |
278 | I915_WRITE(PLANE_SIZE(pipe, plane), (crtc_h << 16) | crtc_w); | 286 | I915_WRITE(PLANE_SIZE(pipe, plane), (crtc_h << 16) | crtc_w); |
279 | I915_WRITE(PLANE_CTL(pipe, plane), plane_ctl); | 287 | I915_WRITE(PLANE_CTL(pipe, plane), plane_ctl); |