All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@intel.com>
To: Daniel Vetter <daniel@ffwll.ch>, Chris Wilson <chris@chris-wilson.co.uk>
Cc: "Daniel Vetter" <daniel.vetter@ffwll.ch>,
	intel-gfx@lists.freedesktop.org, stable@vger.kernel.org,
	"Matti Hämäläinen" <ccr@tnsp.org>
Subject: Re: [Intel-gfx] [PATCH v2] drm/i915: Mark uneven memory banks on gen4 desktop as unknown swizzling
Date: Thu, 19 Nov 2015 17:30:29 +0200	[thread overview]
Message-ID: <87poz6t3ai.fsf@intel.com> (raw)
In-Reply-To: <20151119152039.GD17050@phenom.ffwll.local>

On Thu, 19 Nov 2015, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Thu, Nov 19, 2015 at 09:58:05AM +0000, Chris Wilson wrote:
>> We have varied reports of swizzling corruption on gen4 desktop, and
>> confirmation that one at least is triggered by uneven memory banks
>> (L-shaped memory). The implication is that the swizzling varies between
>> the paired channels and the remainder of memory on the single channel. As
>> the object then has unpredictable swizzling (it will vary depending on
>> exact page allocation and may even change during the object's lifetime as
>> the pages are replaced), we have to report to userspace that the swizzling
>> is unknown.
>> 
>> However, some existing userspace is buggy when it meets an unknown
>> swizzling configuration and so we need to tell another white lie and
>> mark the swizzling as NONE but report it as UNKNOWN through the extended
>> get-tiling-ioctl. See
>> 
>> commit 5eb3e5a5e11d14f9deb2a4b83555443b69ab9940
>> Author: Chris Wilson <chris@chris-wilson.co.uk>
>> Date:   Sun Jun 28 09:19:26 2015 +0100
>> 
>>     drm/i915: Declare the swizzling unknown for L-shaped configurations
>> 
>> for the previous example where we found that telling the truth to
>> userspace just ends up in a world of hurt.
>> 
>> Also since we don't truly know what the swizzling is on the pages, we
>> need to keep them pinned to prevent swapping as the reports also
>> suggest that some gen4 devices have previously undetected bit17
>> swizzling.
>> 
>> v2: Combine unknown + quirk patches to prevent userspace ever seeing
>> unknown swizzling through the normal get-tiling-ioctl. Also use the same
>> path for the existing uneven bank detection for mobile gen4.
>> 
>> Reported-by: Matti Hämäläinen <ccr@tnsp.org>
>> Tested--by: Matti Hämäläinen <ccr@tnsp.org>
>> References: https://bugs.freedesktop.org/show_bug.cgi?id=90725
>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>> Cc: Matti Hämäläinen <ccr@tnsp.org>
>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Cc: Jani Nikula <jani.nikula@intel.com>
>> Cc: stable@vger.kernel.org
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Pushed to drm-intel-fixes, thanks for the patch and review.

BR,
Jani.


>
>> ---
>>  drivers/gpu/drm/i915/i915_gem_fence.c | 36 ++++++++++++++++++++++++++---------
>>  1 file changed, 27 insertions(+), 9 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/i915/i915_gem_fence.c b/drivers/gpu/drm/i915/i915_gem_fence.c
>> index 40a10b25956c..f010391b87f5 100644
>> --- a/drivers/gpu/drm/i915/i915_gem_fence.c
>> +++ b/drivers/gpu/drm/i915/i915_gem_fence.c
>> @@ -642,11 +642,10 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
>>  		}
>>  
>>  		/* check for L-shaped memory aka modified enhanced addressing */
>> -		if (IS_GEN4(dev)) {
>> -			uint32_t ddc2 = I915_READ(DCC2);
>> -
>> -			if (!(ddc2 & DCC2_MODIFIED_ENHANCED_DISABLE))
>> -				dev_priv->quirks |= QUIRK_PIN_SWIZZLED_PAGES;
>> +		if (IS_GEN4(dev) &&
>> +		    !(I915_READ(DCC2) & DCC2_MODIFIED_ENHANCED_DISABLE)) {
>> +			swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
>> +			swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
>>  		}
>>  
>>  		if (dcc == 0xffffffff) {
>> @@ -675,16 +674,35 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
>>  		 * matching, which was the case for the swizzling required in
>>  		 * the table above, or from the 1-ch value being less than
>>  		 * the minimum size of a rank.
>> +		 *
>> +		 * Reports indicate that the swizzling actually
>> +		 * varies depending upon page placement inside the
>> +		 * channels, i.e. we see swizzled pages where the
>> +		 * banks of memory are paired and unswizzled on the
>> +		 * uneven portion, so leave that as unknown.
>>  		 */
>> -		if (I915_READ16(C0DRB3) != I915_READ16(C1DRB3)) {
>> -			swizzle_x = I915_BIT_6_SWIZZLE_NONE;
>> -			swizzle_y = I915_BIT_6_SWIZZLE_NONE;
>> -		} else {
>> +		if (I915_READ16(C0DRB3) == I915_READ16(C1DRB3)) {
>>  			swizzle_x = I915_BIT_6_SWIZZLE_9_10;
>>  			swizzle_y = I915_BIT_6_SWIZZLE_9;
>>  		}
>>  	}
>>  
>> +	if (swizzle_x == I915_BIT_6_SWIZZLE_UNKNOWN ||
>> +	    swizzle_y == I915_BIT_6_SWIZZLE_UNKNOWN) {
>> +		/* Userspace likes to explode if it sees unknown swizzling,
>> +		 * so lie. We will finish the lie when reporting through
>> +		 * the get-tiling-ioctl by reporting the physical swizzle
>> +		 * mode as unknown instead.
>> +		 *
>> +		 * As we don't strictly know what the swizzling is, it may be
>> +		 * bit17 dependent, and so we need to also prevent the pages
>> +		 * from being moved.
>> +		 */
>> +		dev_priv->quirks |= QUIRK_PIN_SWIZZLED_PAGES;
>> +		swizzle_x = I915_BIT_6_SWIZZLE_NONE;
>> +		swizzle_y = I915_BIT_6_SWIZZLE_NONE;
>> +	}
>> +
>>  	dev_priv->mm.bit_6_swizzle_x = swizzle_x;
>>  	dev_priv->mm.bit_6_swizzle_y = swizzle_y;
>>  }
>> -- 
>> 2.6.2
>> 

-- 
Jani Nikula, Intel Open Source Technology Center

      reply	other threads:[~2015-11-19 15:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-19  9:58 [PATCH v2] drm/i915: Mark uneven memory banks on gen4 desktop as unknown swizzling Chris Wilson
2015-11-19 15:20 ` Daniel Vetter
2015-11-19 15:20   ` Daniel Vetter
2015-11-19 15:30   ` Jani Nikula [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87poz6t3ai.fsf@intel.com \
    --to=jani.nikula@intel.com \
    --cc=ccr@tnsp.org \
    --cc=chris@chris-wilson.co.uk \
    --cc=daniel.vetter@ffwll.ch \
    --cc=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.