diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_sprite.c | 8 |
4 files changed, 15 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 967b92eaf797..ab023ca73b45 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -1368,7 +1368,8 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe) | |||
1368 | obj = work->pending_flip_obj; | 1368 | obj = work->pending_flip_obj; |
1369 | if (INTEL_INFO(dev)->gen >= 4) { | 1369 | if (INTEL_INFO(dev)->gen >= 4) { |
1370 | int dspsurf = DSPSURF(intel_crtc->plane); | 1370 | int dspsurf = DSPSURF(intel_crtc->plane); |
1371 | stall_detected = I915_READ(dspsurf) == obj->gtt_offset; | 1371 | stall_detected = I915_HI_DISPBASE(I915_READ(dspsurf)) == |
1372 | obj->gtt_offset; | ||
1372 | } else { | 1373 | } else { |
1373 | int dspaddr = DSPADDR(intel_crtc->plane); | 1374 | int dspaddr = DSPADDR(intel_crtc->plane); |
1374 | stall_detected = I915_READ(dspaddr) == (obj->gtt_offset + | 1375 | stall_detected = I915_READ(dspaddr) == (obj->gtt_offset + |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 0668815d05d7..d093dba8224b 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -2869,6 +2869,13 @@ | |||
2869 | #define DSPSURF(plane) _PIPE(plane, _DSPASURF, _DSPBSURF) | 2869 | #define DSPSURF(plane) _PIPE(plane, _DSPASURF, _DSPBSURF) |
2870 | #define DSPTILEOFF(plane) _PIPE(plane, _DSPATILEOFF, _DSPBTILEOFF) | 2870 | #define DSPTILEOFF(plane) _PIPE(plane, _DSPATILEOFF, _DSPBTILEOFF) |
2871 | 2871 | ||
2872 | /* Display/Sprite base address macros */ | ||
2873 | #define DISP_BASEADDR_MASK (0xfffff000) | ||
2874 | #define I915_LO_DISPBASE(val) (val & ~DISP_BASEADDR_MASK) | ||
2875 | #define I915_HI_DISPBASE(val) (val & DISP_BASEADDR_MASK) | ||
2876 | #define I915_MODIFY_DISPBASE(reg, gfx_addr) \ | ||
2877 | (I915_WRITE(reg, gfx_addr | I915_LO_DISPBASE(I915_READ(reg)))) | ||
2878 | |||
2872 | /* VBIOS flags */ | 2879 | /* VBIOS flags */ |
2873 | #define SWF00 0x71410 | 2880 | #define SWF00 0x71410 |
2874 | #define SWF01 0x71414 | 2881 | #define SWF01 0x71414 |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 02e9932c3774..eb7ebf49f97e 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -2236,7 +2236,7 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb, | |||
2236 | Start, Offset, x, y, fb->pitches[0]); | 2236 | Start, Offset, x, y, fb->pitches[0]); |
2237 | I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]); | 2237 | I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]); |
2238 | if (INTEL_INFO(dev)->gen >= 4) { | 2238 | if (INTEL_INFO(dev)->gen >= 4) { |
2239 | I915_WRITE(DSPSURF(plane), Start); | 2239 | I915_MODIFY_DISPBASE(DSPSURF(plane), Start); |
2240 | I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); | 2240 | I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); |
2241 | I915_WRITE(DSPADDR(plane), Offset); | 2241 | I915_WRITE(DSPADDR(plane), Offset); |
2242 | } else | 2242 | } else |
@@ -2316,7 +2316,7 @@ static int ironlake_update_plane(struct drm_crtc *crtc, | |||
2316 | DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n", | 2316 | DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n", |
2317 | Start, Offset, x, y, fb->pitches[0]); | 2317 | Start, Offset, x, y, fb->pitches[0]); |
2318 | I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]); | 2318 | I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]); |
2319 | I915_WRITE(DSPSURF(plane), Start); | 2319 | I915_MODIFY_DISPBASE(DSPSURF(plane), Start); |
2320 | I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); | 2320 | I915_WRITE(DSPTILEOFF(plane), (y << 16) | x); |
2321 | I915_WRITE(DSPADDR(plane), Offset); | 2321 | I915_WRITE(DSPADDR(plane), Offset); |
2322 | POSTING_READ(reg); | 2322 | POSTING_READ(reg); |
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c index 987800a0234f..fbf03b996587 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c | |||
@@ -133,7 +133,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb, | |||
133 | I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w); | 133 | I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w); |
134 | I915_WRITE(SPRSCALE(pipe), sprscale); | 134 | I915_WRITE(SPRSCALE(pipe), sprscale); |
135 | I915_WRITE(SPRCTL(pipe), sprctl); | 135 | I915_WRITE(SPRCTL(pipe), sprctl); |
136 | I915_WRITE(SPRSURF(pipe), obj->gtt_offset); | 136 | I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset); |
137 | POSTING_READ(SPRSURF(pipe)); | 137 | POSTING_READ(SPRSURF(pipe)); |
138 | } | 138 | } |
139 | 139 | ||
@@ -149,7 +149,7 @@ ivb_disable_plane(struct drm_plane *plane) | |||
149 | /* Can't leave the scaler enabled... */ | 149 | /* Can't leave the scaler enabled... */ |
150 | I915_WRITE(SPRSCALE(pipe), 0); | 150 | I915_WRITE(SPRSCALE(pipe), 0); |
151 | /* Activate double buffered register update */ | 151 | /* Activate double buffered register update */ |
152 | I915_WRITE(SPRSURF(pipe), 0); | 152 | I915_MODIFY_DISPBASE(SPRSURF(pipe), 0); |
153 | POSTING_READ(SPRSURF(pipe)); | 153 | POSTING_READ(SPRSURF(pipe)); |
154 | } | 154 | } |
155 | 155 | ||
@@ -291,7 +291,7 @@ ilk_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb, | |||
291 | I915_WRITE(DVSSIZE(pipe), (crtc_h << 16) | crtc_w); | 291 | I915_WRITE(DVSSIZE(pipe), (crtc_h << 16) | crtc_w); |
292 | I915_WRITE(DVSSCALE(pipe), dvsscale); | 292 | I915_WRITE(DVSSCALE(pipe), dvsscale); |
293 | I915_WRITE(DVSCNTR(pipe), dvscntr); | 293 | I915_WRITE(DVSCNTR(pipe), dvscntr); |
294 | I915_WRITE(DVSSURF(pipe), obj->gtt_offset); | 294 | I915_MODIFY_DISPBASE(DVSSURF(pipe), obj->gtt_offset); |
295 | POSTING_READ(DVSSURF(pipe)); | 295 | POSTING_READ(DVSSURF(pipe)); |
296 | } | 296 | } |
297 | 297 | ||
@@ -307,7 +307,7 @@ ilk_disable_plane(struct drm_plane *plane) | |||
307 | /* Disable the scaler */ | 307 | /* Disable the scaler */ |
308 | I915_WRITE(DVSSCALE(pipe), 0); | 308 | I915_WRITE(DVSSCALE(pipe), 0); |
309 | /* Flush double buffered register updates */ | 309 | /* Flush double buffered register updates */ |
310 | I915_WRITE(DVSSURF(pipe), 0); | 310 | I915_MODIFY_DISPBASE(DVSSURF(pipe), 0); |
311 | POSTING_READ(DVSSURF(pipe)); | 311 | POSTING_READ(DVSSURF(pipe)); |
312 | } | 312 | } |
313 | 313 | ||