[Intel-gfx] [PATCH] drm/i915: bdw expands ACTHD to 64bit

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Thu Mar 20 17:56:57 CET 2014


On 03/19/2014 09:54 PM, Chris Wilson wrote:
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 7a01911c16f8..a6ceb2c6f36d 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -417,13 +417,19 @@ static void ring_write_tail(struct intel_ring_buffer *ring,
>   	I915_WRITE_TAIL(ring, value);
>   }
>
> -u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
> +u64 intel_ring_get_active_head(struct intel_ring_buffer *ring)
>   {
>   	drm_i915_private_t *dev_priv = ring->dev->dev_private;
> -	u32 acthd_reg = INTEL_INFO(ring->dev)->gen >= 4 ?
> -			RING_ACTHD(ring->mmio_base) : ACTHD;
>
> -	return I915_READ(acthd_reg);
> +	u32 reg = (INTEL_INFO(ring->dev)->gen >= 4 ?
> +		   RING_ACTHD(ring->mmio_base) : ACTHD);
> +	u64 acthd;
> +
> +	acthd = I915_READ(reg);
> +	if (INTEL_INFO(ring->dev)->gen >= 8)
> +		acthd |= (u64)I915_READ(RING_ACTHD_UDW(ring->mmio_base)) << 32;
> +
> +	return acthd;
>   }

Can it happen, and does anyone care, for a low dword to wrap so instead 
of say, 0x00010000, this function falsely returns 0x0001ffff ?

Tvrtko



More information about the Intel-gfx mailing list