public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: "Siluvery, Arun" <arun.siluvery@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [RFC] Move BDW workarounds to ring init fn
Date: Wed, 30 Jul 2014 12:36:28 +0300	[thread overview]
Message-ID: <20140730093628.GD4193@intel.com> (raw)
In-Reply-To: <53D81FEB.5060808@linux.intel.com>

On Tue, Jul 29, 2014 at 11:27:55PM +0100, Siluvery, Arun wrote:
> On 28/07/2014 18:26, Ville Syrjälä wrote:
> > On Mon, Jul 28, 2014 at 05:31:45PM +0100, arun.siluvery@linux.intel.com wrote:
> >> From: Arun Siluvery <arun.siluvery@linux.intel.com>
> >>
> >> This patch moves BDW workarounds from init_clock_gating() to render ring
> >> init fn otherwise they are lost when gpu is reset.
> >> In case of execlists, some of the workarounds modify registers that are
> >> part of register state context which doesn't get initialized until
> >> init_clock_gating(); this results in default context with incorrect values
> >> as it is restored and saved before updated by workarounds.
> >
> > I don't think it has to do with execlists. Many of the registers are
> > part of the context image even in ring buffer mode AFAIK.
> >
> >>
> >> Open issue:
> >> For Wa4x4STCOptimizationDisable, we set CACHE_MODE_1[6:6] = 1
> >> At the time when HW contexts are enabled after rings are initialized with
> >> default context this workaround is valid but followed by a context switch
> >> this is getting reset, please see below log snippet.
> >
> > This is a bit weird. The default context should have restore inhibit==1
> > so it shouldn't clobber the CACHE_MODE_1 register. There was a specific magic
> > dance you're supposed to do when accessing such registers with mmio, but here
> > we do the write even before the first context switch.
> >
> > Apparently there was some kind of problem with CACHE_MODE_0 on snb too:
> >   commit 3a69ddd6f872180b6f61fda87152b37202118fbc
> >   Author: Kenneth Graunke <kenneth@whitecape.org>
> >   Date:   Fri Apr 27 12:44:41 2012 -0700
> >
> >      drm/i915: Set the Stencil Cache eviction policy to non-LRA mode.
> >
> > but IIRC I wasn't able to reproduce it when I tried.
> 
> Similar to this register I am also applying this in render ring init fn.
> 
> >
> > Maybe we need to delay these register writes until we've switched to the default
> > context?
> >
> In its current state (WAs applied in init_clock_gating()) we are writing 
> these registers after switching to default context.
> 
> When a new hw context is created does all the registers part of context 
> start with default values or they sample the current state? and at what 
> point this sampling takes place?

We load each uninitialized context with restore inhibit=true so AFAIK
the current register values should stay intact.

> 
> As a test I have updated CACHE_MODE_1 after mi_set_context() then the 
> workaround was valid with every context switch but I think it may not be 
> the right way otherwise we will have to update other WA registers also 
> at this point with every context switch.

Maybe there's something special about the very first context switch?
Though I don't see why that would be the case.

> 
> regards
> Arun
> 
> >>
> >> ...
> >> [    5.978209] [drm:i915_pages_create_for_stolen] offset=0x0, size=8294400
> >> [    5.978213] [drm:intel_alloc_plane_obj] plane fb obj ffff8801472e0000
> >> [    5.978215] [drm:i915_gem_setup_global_gtt] reserving preallocated space: 0 + 7e9000
> >> [    5.978216] [drm:i915_gem_setup_global_gtt] clearing unused GTT space: [7e9000, fffff000]
> >> [    5.979613] [drm:i915_gem_init] CACHE_MODE_1: 0x00000180
> >> [    5.981372] [drm:gen8_ppgtt_init] Allocated 4 pages for page directories (0 wasted)
> >> [    5.981373] [drm:gen8_ppgtt_init] Allocated 2048 pages for page tables (0 wasted)
> >> [    5.981376] [drm:i915_gem_context_init] HW context support initialized
> >> [    5.981462] [drm:i915_gem_init_hw] CACHE_MODE_1: 0x00000180
> >> [    5.981467] [drm:i915_gem_init_rings] CACHE_MODE_1: 0x00000180
> >> [    5.981704] [drm:bdw_init_workarounds] CACHE_MODE_1: 0x000001C0
> >> [    5.981716] [drm:init_status_page] bsd ring hws offset: 0x0081e000
> >> [    5.981792] [drm:init_status_page] blitter ring hws offset: 0x0083f000
> >> [    5.981910] [drm:init_status_page] video enhancement ring hws offset: 0x00860000
> >> [    5.982001] [drm:i915_gem_init_hw] CACHE_MODE_1: 0x000001C0
> >> [    5.982104] [drm:i915_gem_context_enable] Switch render ring to default_context
> >> [    5.982106] [drm:i915_gem_render_state_init] render ring: Render state init
> >> [    5.982120] [drm:do_switch] render ring, CACHE_MODE_1: 0x000001C0, uninitialized: 1
> >> [    5.982121] [drm:i915_gem_context_enable] Switch bsd ring to default_context
> >> [    5.982122] [drm:do_switch] bsd ring, CACHE_MODE_1: 0x000001C0, uninitialized: 0
> >> [    5.982123] [drm:i915_gem_context_enable] Switch blitter ring to default_context
> >> [    5.982126] [drm:do_switch] blitter ring, CACHE_MODE_1: 0x000001C0, uninitialized: 0
> >> [    5.982126] [drm:i915_gem_context_enable] Switch video enhancement ring to default_context
> >> [    5.982128] [drm:do_switch] video enhancement ring, CACHE_MODE_1: 0x000001C0, uninitialized: 0
> >> [    5.982133] [drm:i915_gem_init] CACHE_MODE_1: 0x000001C0
> >> [    5.982258] [drm:intel_init_clock_gating]
> >> ...
> >> [   10.037019] [drm:do_switch] blitter ring, CACHE_MODE_1: 0x00000180, uninitialized: 0
> >> ...
> >> [   10.488145] [drm:do_switch] render ring, CACHE_MODE_1: 0x00000180, uninitialized: 0
> >> ...
> >>
> >> I am currently testing this with an igt which triggers a gpu reset and compares
> >> WA register contents before and after reset but the test fails because of
> >> this register hence not sending it now.
> >> Please let me know how to keep this WA valid after a context switch.
> >>
> >>
> >> Arun Siluvery (1):
> >>    drm/i915/bdw: Initialize BDW workarounds in render ring init fn
> >>
> >>   drivers/gpu/drm/i915/i915_debugfs.c     | 46 ++++++++++++++++++++++
> >>   drivers/gpu/drm/i915/intel_pm.c         | 59 ----------------------------
> >>   drivers/gpu/drm/i915/intel_ringbuffer.c | 68 +++++++++++++++++++++++++++++++++
> >>   3 files changed, 114 insertions(+), 59 deletions(-)
> >>
> >> --
> >> 1.9.2
> >>
> >> _______________________________________________
> >> Intel-gfx mailing list
> >> Intel-gfx@lists.freedesktop.org
> >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> >

-- 
Ville Syrjälä
Intel OTC

      reply	other threads:[~2014-07-30  9:36 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-28 16:31 [RFC] Move BDW workarounds to ring init fn arun.siluvery
2014-07-28 16:31 ` [RFC] drm/i915/bdw: Initialize BDW workarounds in render " arun.siluvery
2014-07-28 17:00   ` Ville Syrjälä
2014-07-28 19:22     ` Daniel Vetter
2014-07-28 20:41       ` Siluvery, Arun
2014-07-28 20:46     ` Siluvery, Arun
2014-07-29  9:56       ` Ville Syrjälä
2014-07-28 17:26 ` [RFC] Move BDW workarounds to " Ville Syrjälä
2014-07-29 22:27   ` Siluvery, Arun
2014-07-30  9:36     ` Ville Syrjälä [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=20140730093628.GD4193@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=arun.siluvery@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox