1. 04 10月, 2016 5 次提交
  2. 07 9月, 2016 1 次提交
  3. 27 8月, 2016 1 次提交
  4. 22 7月, 2016 2 次提交
  5. 19 7月, 2016 1 次提交
  6. 14 7月, 2016 1 次提交
    • C
      drm/i915: Defer enabling rc6 til after we submit the first batch/context · b7137e0c
      Chris Wilson 提交于
      Some hardware requires a valid render context before it can initiate
      rc6 power gating of the GPU; the default state of the GPU is not
      sufficient and may lead to undefined behaviour. The first execution of
      any batch will load the "golden render state", at which point it is safe
      to enable rc6. As we do not forcibly load the kernel context at resume,
      we have to hook into the batch submission to be sure that the render
      state is setup before enabling rc6.
      
      However, since we don't enable powersaving until that first batch, we
      queued a delayed task in order to guarantee that the batch is indeed
      submitted.
      
      v2: Rearrange intel_disable_gt_powersave() to match.
      v3: Apply user specified cur_freq (or idle_freq if not set).
      v4: Give in, and supply a delayed work to autoenable rc6
      v5: Mika suggested a couple of better names for delayed_resume_work
      v6: Rebalance rpm_put around the autoenable task
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1468397438-21226-7-git-send-email-chris@chris-wilson.co.ukReviewed-by: NMika Kuoppala <mika.kuoppala@intel.com>
      b7137e0c
  7. 05 7月, 2016 1 次提交
  8. 04 7月, 2016 2 次提交
  9. 01 7月, 2016 1 次提交
  10. 30 6月, 2016 2 次提交
  11. 23 5月, 2016 1 次提交
  12. 13 5月, 2016 1 次提交
  13. 11 5月, 2016 2 次提交
  14. 09 5月, 2016 1 次提交
  15. 18 4月, 2016 1 次提交
  16. 14 4月, 2016 3 次提交
  17. 13 4月, 2016 1 次提交
  18. 12 4月, 2016 6 次提交
    • T
      drm/i915: Only grab correct forcewake for the engine with execlists · 3756685a
      Tvrtko Ursulin 提交于
      Rather than blindly waking up all forcewake domains on command
      submission, we can teach each engine what is (or are) the correct
      one to take.
      
      On platforms with multiple forcewake domains like VLV, CHV, SKL
      and BXT, this has the potential of lowering the GPU and CPU
      power use and submission latency.
      
      To implement it we add a function named
      intel_uncore_forcewake_for_reg whose purpose is to query which
      forcewake domains need to be taken to read or write a specific
      register with raw mmio accessors.
      
      These enables the execlists engine setup  to query which
      forcewake domains are relevant per engine on the currently
      running platform.
      
      v2:
        * Kerneldoc.
        * Split from intel_uncore.c macro extraction, WARN_ON,
          no warns on old platforms. (Chris Wilson)
      
      v3:
        * Single domain per engine, mention all registers,
          bi-directional function and a new name, fix handling
          of gen6 and gen7 writes. (Chris Wilson)
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Link: http://patchwork.freedesktop.org/patch/msgid/1460468251-14069-1-git-send-email-tvrtko.ursulin@linux.intel.com
      3756685a
    • T
      drm/i915: Remove forcewake request registers from the shadowed table · a70ecc16
      Tvrtko Ursulin 提交于
      Chris Wilson points out that we can remove them from the array
      since they are always written to with raw accessors.
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      a70ecc16
    • T
      drm/i915: Extract knowledge of register forcewake domains · 6863b76c
      Tvrtko Ursulin 提交于
      Knowledge of which register per platform belonds in which
      forcewake domain was embedded in the MMIO accessors themselves.
      
      Extract it into standalone macros so they can be used from
      new code in the following patches.
      
      This causes GCC to compile some of the MMIO accessors slightly
      differently and grows the code a tiny amount. But none of the
      growth is on the fast-path so it does not matter hugely.
      
      Affected sizes before:
      
      00000000000026f0 00000000000001a5 t gen6_read16
      0000000000002390 00000000000001a5 t gen6_read32
      00000000000028a0 00000000000001a5 t gen6_read64
      
      00000000000061d0 000000000000019e t gen8_write16
      0000000000006510 000000000000019d t gen8_write32
      0000000000006370 000000000000019d t gen8_write64
      00000000000021f0 000000000000019d t gen8_write8
      
      Affected sizes after:
      
      0000000000002840 00000000000001aa t gen6_read16
      00000000000024e0 00000000000001a9 t gen6_read32
      00000000000029f0 00000000000001a9 t gen6_read64
      
      0000000000004f20 00000000000001b5 t gen8_write16
      0000000000004ba0 00000000000001b4 t gen8_write32
      00000000000050e0 00000000000001b4 t gen8_write64
      0000000000004d60 00000000000001b4 t gen8_write8
      
      Other MMIO accessors are not affected in size.
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Acked-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      6863b76c
    • T
      drm/i915: Do not serialize forcewake acquire across domains · 4e1176dd
      Tvrtko Ursulin 提交于
      On platforms with multiple forcewake domains it seems more efficient
      to request all desired ones and then to wait for acks to avoid
      needlessly serializing on each domain.
      
      v2: Rebase.
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Link: http://patchwork.freedesktop.org/patch/msgid/1460045074-1006-1-git-send-email-tvrtko.ursulin@linux.intel.com
      4e1176dd
    • T
      drm/i915: Simplify for_each_fw_domain iterators · 33c582c1
      Tvrtko Ursulin 提交于
      As the vast majority of users do not use the domain id variable,
      we can eliminate it from the iterator and also change the latter
      using the same principle as was recently done for for_each_engine.
      
      For a couple of callers which do need the domain mask, store it
      in the domain array (which already has the domain id), then both
      can be retrieved thence.
      
      Result is clearer code and smaller generated binary, especially
      in the tight fw get/put loops. Also, relationship between domain
      id and mask is no longer assumed in the macro.
      
      v2: Improve grammar in the commit message and rename the
          iterator to for_each_fw_domain_masked for consistency.
          (Dave Gordon)
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NDave Gordon <david.s.gordon@intel.com>
      33c582c1
    • T
      drm/i915: Use consistent forcewake auto-release timeout across kernel configs · a57a4a67
      Tvrtko Ursulin 提交于
      Because it is based on jiffies, current implementation releases the
      forcewake at any time between straight away and between 1ms and 10ms,
      depending on the kernel configuration (CONFIG_HZ).
      
      This is probably not what has been desired, since the dynamics of keeping
      parts of the GPU awake should not be correlated with this kernel
      configuration parameter.
      
      Change the auto-release mechanism to use hrtimers and set the timeout to
      1ms with a 1ms of slack. This should make the GPU power consistent
      across kernel configs, and timer slack should enable some timer coalescing
      where multiple force-wake domains exist, or with unrelated timers.
      
      For GlBench/T-Rex this decreases the number of forcewake releases from
      ~480 to ~300 per second, and for a heavy combined OGL/OCL test from
      ~670 to ~360 (HZ=1000 kernel).
      
      Even though this reduction can be attributed to the average release period
      extending from 0-1ms to 1-2ms, as discussed above, it will make the
      forcewake timeout consistent for different CONFIG_HZ values.
      
      Real life measurements with the above workload has shown that, with this
      patch, both manage to auto-release the forcewake between 2-4 times per
      10ms, even though the number of forcewake gets is dramatically different.
      
      T-Rex requests between 5-10 explicit gets and 5-10 implict gets in each
      10ms period, while the OGL/OCL test requests 250 and 380 times in the same
      period.
      
      The two data points together suggest that the nature of the forwake
      accesses is bursty and that further changes and potential timeout
      extensions, or moving the start of timeout from the first to the last
      automatic forcewake grab, should be carefully measured for power and
      performance effects.
      
      v2:
        * Commit spelling. (Dave Gordon)
        * More discussion on numbers in the commit. (Chris Wilson)
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NDave Gordon <david.s.gordon@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      a57a4a67
  19. 07 4月, 2016 1 次提交
  20. 05 4月, 2016 1 次提交
    • A
      drm/i915/guc: reset GuC and retry on firmware load failure · 6b332fa2
      Arun Siluvery 提交于
      Due to timing issues in the HW, some of the status bits required for GuC
      authentication occasionally don't get set; when that happens, the GuC
      cannot be initialized and we will be left with a wedged GPU. The W/A
      suggested is to perform a soft reset of the GuC and attempt to reload
      the F/W again for few times before giving up.
      
      As the failure is dependent on timing, tests performed by triggering
      manual full gpu reset (i915_wedged) showed that we could sometimes hit
      this after several thousand iterations, but sometimes tests ran even
      longer without any issues. Reset and reload mechanism proved helpful
      when we indeed hit f/w load failure, so it is better to include this
      to improve driver stability.
      
      This change implements the following WAs,
      
      	WaEnableuKernelHeaderValidFix:skl,bxt
      	WaEnableGuCBootHashCheckNotSet:skl,bxt
      Signed-off-by: NArun Siluvery <arun.siluvery@linux.intel.com>
      Signed-off-by: NDave Gordon <david.s.gordon@intel.com>
      Reviewed-by: NAlex Dai <yu.dai@intel.com>
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      6b332fa2
  21. 30 3月, 2016 1 次提交
  22. 17 3月, 2016 1 次提交
  23. 16 3月, 2016 1 次提交
    • T
      drm/i915: More intel_engine_cs renaming · 666796da
      Tvrtko Ursulin 提交于
      Some trivial ones, first pass done with Coccinelle:
      
      @@
      @@
      (
      - I915_NUM_RINGS
      + I915_NUM_ENGINES
      |
      - intel_ring_flag
      + intel_engine_flag
      |
      - for_each_ring
      + for_each_engine
      |
      - i915_gem_request_get_ring
      + i915_gem_request_get_engine
      |
      - intel_ring_idle
      + intel_engine_idle
      |
      - i915_gem_reset_ring_status
      + i915_gem_reset_engine_status
      |
      - i915_gem_reset_ring_cleanup
      + i915_gem_reset_engine_cleanup
      |
      - init_ring_lists
      + init_engine_lists
      )
      
      But that didn't fully work so I cleaned it up with:
      
      for f in *.[hc]; do sed -i -e s/I915_NUM_RINGS/I915_NUM_ENGINES/ $f; done
      for f in *.[hc]; do sed -i -e s/i915_gem_request_get_ring/i915_gem_request_get_engine/ $f; done
      for f in *.[hc]; do sed -i -e s/intel_ring_flag/intel_engine_flag/ $f; done
      for f in *.[hc]; do sed -i -e s/intel_ring_idle/intel_engine_idle/ $f; done
      for f in *.[hc]; do sed -i -e s/init_ring_lists/init_engine_lists/ $f; done
      for f in *.[hc]; do sed -i -e s/i915_gem_reset_ring_cleanup/i915_gem_reset_engine_cleanup/ $f; done
      for f in *.[hc]; do sed -i -e s/i915_gem_reset_ring_status/i915_gem_reset_engine_status/ $f; done
      
      v2: Rebase.
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      666796da
  24. 04 3月, 2016 1 次提交
  25. 06 2月, 2016 1 次提交
    • S
      drm/i915/bxt: Check BIOS RC6 setup before enabling RC6 · 274008e8
      Sagar Arun Kamble 提交于
      RC6 setup is shared between BIOS and Driver. BIOS sets up subset of RC6
      setup registers. If those are not setup Driver should not enable RC6.
      For implementing this, driver can check RC_CTRL0 and RC_CTRL1 values
      to know if BIOS has enabled HW/SW RC6.
      This will also enable user to control RC6 using BIOS settings alone.
      RC6 related instability can be avoided by disabling via BIOS settings
      till driver fixes it.
      
      v2: Had placed logic in gen8 function by mistake. Fixed it.
      Ensuring RPM is not enabled in case BIOS disabled RC6.
      
      v3: Need to disable RPM if RC6 is disabled due to BIOS settings. (Daniel)
      Runtime PM enabling happens before gen9_enable_rc6.
      Moved the updation of enable_rc6 parameter in intel_uncore_sanitize.
      
      v4: Added elaborate check for BIOS RC6 setup. Prepared check_pctx for bxt.
          (Imre)
      
      v5: Caching reserved stolen base and size in the driver private data.
          Reorganized RC6 setup check. Moved from gen9_enable_rc6 to
          intel_uncore_sanitize. (Imre)
      
      v6: Rebasing on the patch submitted by Imre that moves gem_init_stolen
          earlier in the load.
      
      v7: Removed PWRCTX_MAXCNT_VCSUNIT1 check as it applies to SKL. (Imre)
      
      v8: Fixed formatting and checkpatch issues. Fixed functional issue where
          RC6 ctx size check was missing. (Imre)
      
      Cc: Imre Deak <imre.deak@intel.com>
      Signed-off-by: NSagar Arun Kamble <sagar.a.kamble@intel.com>
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1454697809-22113-1-git-send-email-sagar.a.kamble@intel.com
      274008e8