[Intel-gfx] [PATCH] Revert "drm/i915: Mask reserved bits in display/sprite address registers"
Ville Syrjälä
ville.syrjala at linux.intel.com
Fri Jan 24 12:04:56 CET 2014
On Fri, Jan 24, 2014 at 10:40:11AM +0100, Daniel Vetter wrote:
> This reverts commit 446f254566ea8911c9e19c7bc8a162fc0e53cf31.
>
> I've left the masking in the pageflip code since that seems to be some
> useful piece of preemptive robustness.
What masking where?
> Iirc I've merged this patch under the assumption that the BIOS leaves
> some random gunk in the lower bits and gets unhappy if we trample on
> them. We have quite a few case like this, so this made sense.
>
> Now I've just learned that there's actual hardware features bits in
> the low 12 bits, and the kernel needs to preserve them to allow a
> userspace blob to do its job. Given Dave Airlie's clear stance on
> userspace blob drivers I've quickly chatted with him and he doesn't
> seem too happy. So let's revert this.
>
> If there are indeed bits that we must preserve in this range then we
> can ressurrect this patch, but with proper documentation for those
> bits supplied. And we probably also need to think a bit about
> interactions with our driver.
>
> Cc: Armin Reese <armin.c.reese at intel.com>
> Cc: Jesse Barnes <jbarnes at virtuousgeek.org>
> Cc: Dave Airlie <airlied at linux.ie>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
I always disliked this code.
Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg.h | 2 --
> drivers/gpu/drm/i915/intel_display.c | 8 ++++----
> drivers/gpu/drm/i915/intel_sprite.c | 18 +++++++++---------
> 3 files changed, 13 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index ba0550222269..a48b7cad6f11 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -3578,8 +3578,6 @@
> #define DISP_BASEADDR_MASK (0xfffff000)
> #define I915_LO_DISPBASE(val) (val & ~DISP_BASEADDR_MASK)
> #define I915_HI_DISPBASE(val) (val & DISP_BASEADDR_MASK)
> -#define I915_MODIFY_DISPBASE(reg, gfx_addr) \
> - (I915_WRITE((reg), (gfx_addr) | I915_LO_DISPBASE(I915_READ(reg))))
>
> /* VBIOS flags */
> #define SWF00 (dev_priv->info->display_mmio_offset + 0x71410)
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 98371eeac77c..40a9338ad54f 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2114,8 +2114,8 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
> fb->pitches[0]);
> I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
> if (INTEL_INFO(dev)->gen >= 4) {
> - I915_MODIFY_DISPBASE(DSPSURF(plane),
> - i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset);
> + I915_WRITE(DSPSURF(plane),
> + i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset);
> I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
> I915_WRITE(DSPLINOFF(plane), linear_offset);
> } else
> @@ -2205,8 +2205,8 @@ static int ironlake_update_plane(struct drm_crtc *crtc,
> i915_gem_obj_ggtt_offset(obj), linear_offset, x, y,
> fb->pitches[0]);
> I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
> - I915_MODIFY_DISPBASE(DSPSURF(plane),
> - i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset);
> + I915_WRITE(DSPSURF(plane),
> + i915_gem_obj_ggtt_offset(obj) + intel_crtc->dspaddr_offset);
> if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
> I915_WRITE(DSPOFFSET(plane), (y << 16) | x);
> } else {
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> index fe4de89c374c..716a3c9c0751 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -141,8 +141,8 @@ vlv_update_plane(struct drm_plane *dplane, struct drm_crtc *crtc,
>
> I915_WRITE(SPSIZE(pipe, plane), (crtc_h << 16) | crtc_w);
> I915_WRITE(SPCNTR(pipe, plane), sprctl);
> - I915_MODIFY_DISPBASE(SPSURF(pipe, plane), i915_gem_obj_ggtt_offset(obj) +
> - sprsurf_offset);
> + I915_WRITE(SPSURF(pipe, plane), i915_gem_obj_ggtt_offset(obj) +
> + sprsurf_offset);
> POSTING_READ(SPSURF(pipe, plane));
> }
>
> @@ -158,7 +158,7 @@ vlv_disable_plane(struct drm_plane *dplane, struct drm_crtc *crtc)
> I915_WRITE(SPCNTR(pipe, plane), I915_READ(SPCNTR(pipe, plane)) &
> ~SP_ENABLE);
> /* Activate double buffered register update */
> - I915_MODIFY_DISPBASE(SPSURF(pipe, plane), 0);
> + I915_WRITE(SPSURF(pipe, plane), 0);
> POSTING_READ(SPSURF(pipe, plane));
>
> intel_update_sprite_watermarks(dplane, crtc, 0, 0, false, false);
> @@ -315,8 +315,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
> if (intel_plane->can_scale)
> I915_WRITE(SPRSCALE(pipe), sprscale);
> I915_WRITE(SPRCTL(pipe), sprctl);
> - I915_MODIFY_DISPBASE(SPRSURF(pipe),
> - i915_gem_obj_ggtt_offset(obj) + sprsurf_offset);
> + I915_WRITE(SPRSURF(pipe),
> + i915_gem_obj_ggtt_offset(obj) + sprsurf_offset);
> POSTING_READ(SPRSURF(pipe));
> }
>
> @@ -333,7 +333,7 @@ ivb_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
> if (intel_plane->can_scale)
> I915_WRITE(SPRSCALE(pipe), 0);
> /* Activate double buffered register update */
> - I915_MODIFY_DISPBASE(SPRSURF(pipe), 0);
> + I915_WRITE(SPRSURF(pipe), 0);
> POSTING_READ(SPRSURF(pipe));
>
> /*
> @@ -489,8 +489,8 @@ ilk_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
> I915_WRITE(DVSSIZE(pipe), (crtc_h << 16) | crtc_w);
> I915_WRITE(DVSSCALE(pipe), dvsscale);
> I915_WRITE(DVSCNTR(pipe), dvscntr);
> - I915_MODIFY_DISPBASE(DVSSURF(pipe),
> - i915_gem_obj_ggtt_offset(obj) + dvssurf_offset);
> + I915_WRITE(DVSSURF(pipe),
> + i915_gem_obj_ggtt_offset(obj) + dvssurf_offset);
> POSTING_READ(DVSSURF(pipe));
> }
>
> @@ -506,7 +506,7 @@ ilk_disable_plane(struct drm_plane *plane, struct drm_crtc *crtc)
> /* Disable the scaler */
> I915_WRITE(DVSSCALE(pipe), 0);
> /* Flush double buffered register updates */
> - I915_MODIFY_DISPBASE(DVSSURF(pipe), 0);
> + I915_WRITE(DVSSURF(pipe), 0);
> POSTING_READ(DVSSURF(pipe));
>
> /*
> --
> 1.8.5.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
More information about the Intel-gfx
mailing list