From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH] drm/i915: bdw expands ACTHD to 64bit Date: Thu, 20 Mar 2014 16:56:57 +0000 Message-ID: <532B1DD9.8010008@linux.intel.com> References: <1395266088-24536-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 97C9B6E143 for ; Thu, 20 Mar 2014 09:56:59 -0700 (PDT) In-Reply-To: <1395266088-24536-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org 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