1. 15 11月, 2017 1 次提交
  2. 14 11月, 2017 1 次提交
  3. 10 11月, 2017 1 次提交
    • H
      drm/i915: Acquire PUNIT->PMIC bus for intel_uncore_forcewake_reset() · a5266db4
      Hans de Goede 提交于
      intel_uncore_forcewake_reset() does forcewake puts and gets as such
      we need to make sure that no-one tries to access the PUNIT->PMIC bus
      (on systems where this bus is shared) while it runs, otherwise bad
      things happen.
      
      Normally this is taken care of by the i915_pmic_bus_access_notifier()
      which does an intel_uncore_forcewake_get(FORCEWAKE_ALL) when some other
      driver tries to access the PMIC bus, so that later forcewake gets are
      no-ops (for the duration of the bus access).
      
      But intel_uncore_forcewake_reset gets called in 3 cases:
      1) Before registering the pmic_bus_access_notifier
      2) After unregistering the pmic_bus_access_notifier
      3) To reset forcewake state on a GPU reset
      
      In all 3 cases the i915_pmic_bus_access_notifier() protection is
      insufficient.
      
      This commit fixes this race by calling iosf_mbi_punit_acquire() before
      calling intel_uncore_forcewake_reset(). In the case where it is called
      directly after unregistering the pmic_bus_access_notifier, we need to
      hold the punit-lock over both calls to avoid a race where
      intel_uncore_fw_release_timer() may execute between the 2 calls.
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      Acked-by: NIngo Molnar <mingo@kernel.org>
      Signed-off-by: NHans de Goede <hdegoede@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20171019111620.26761-3-hdegoede@redhat.com
      a5266db4
  4. 02 11月, 2017 3 次提交
  5. 27 10月, 2017 1 次提交
  6. 14 10月, 2017 1 次提交
  7. 10 10月, 2017 1 次提交
  8. 22 9月, 2017 1 次提交
  9. 20 9月, 2017 1 次提交
  10. 14 9月, 2017 1 次提交
  11. 08 9月, 2017 1 次提交
  12. 07 9月, 2017 1 次提交
  13. 18 8月, 2017 1 次提交
    • C
      drm/i915: Stop touching forcewake following a gen6+ engine reset · 4055dc75
      Chris Wilson 提交于
      Forcewake is not affected by the engine reset on gen6+. Indeed the
      reason why we added intel_uncore_forcewake_reset() to
      gen6_reset_engines() was to keep the bookkeeping intact because the
      reset did not touch the forcewake bit (yet we cancelled the forcewake
      consumers)!  This was done in commit 521198a2:
          Author: Mika Kuoppala <mika.kuoppala@linux.intel.com>
          Date:   Fri Aug 23 16:52:30 2013 +0300
      
      	drm/i915: sanitize forcewake registers on reset
      
      	In reset we try to restore the forcewake state to
      	pre reset state, using forcewake_count. The reset
      	doesn't seem to clear the forcewake bits so we
      	get warn on forcewake ack register not clearing.
      
      That futzing of the forcewake bookkeeping was dropped in commit
      0294ae7b ("drm/i915: Consolidate forcewake resetting to a single
      function"), but it did not make the realisation that the remaining
      intel_uncore_forcewake_reset() was redundant.
      
      The new danger with using intel_uncore_forcewake_reset() with per-engine
      resets is that the driver and hw are still in an active state as we
      perform the reset. We may be using the forcewake to read protected
      registers elsewhere and those results may be clobbered by the concurrent
      dropping of forcewake.
      Reported-by: NMichel Thierry <michel.thierry@intel.com>
      Fixes: 142bc7d9 ("drm/i915: Modify error handler for per engine hang recovery")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Michel Thierry <michel.thierry@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20170817173229.20324-1-chris@chris-wilson.co.ukReviewed-by: NMichel Thierry <michel.thierry@intel.com>
      Acked-by: NMika Kuoppala <mika.kuoppala@linux.intel.com>
      4055dc75
  14. 07 7月, 2017 1 次提交
  15. 21 6月, 2017 1 次提交
    • M
      drm/i915: Modify error handler for per engine hang recovery · 142bc7d9
      Michel Thierry 提交于
      This is a preparatory patch which modifies error handler to do per engine
      hang recovery. The actual patch which implements this sequence follows
      later in the series. The aim is to prepare existing recovery function to
      adapt to this new function where applicable (which fails at this point
      because core implementation is lacking) and continue recovery using legacy
      full gpu reset.
      
      A helper function is also added to query the availability of engine
      reset. A subsequent patch will add the capability to query which type
      of reset is present (engine -> full -> no-reset) via the get-param
      ioctl.
      
      It has been decided that the error events that are used to notify user of
      reset will only be sent in case if full chip reset. In case of just
      single (or multiple) engine resets, userspace won't be notified by these
      events.
      
      Note that this implementation of engine reset is for i915 directly
      submitting to the ELSP, where the driver manages the hang detection,
      recovery and resubmission. With GuC submission these tasks are shared
      between driver and firmware; i915 will still responsible for detecting a
      hang, and when it does it will have to request GuC to reset that Engine and
      remind the firmware about the outstanding submissions. This will be
      added in different patch.
      
      v2: rebase, advertise engine reset availability in platform definition,
      add note about GuC submission.
      v3: s/*engine_reset*/*reset_engine*/. (Chris)
      Handle reset as 2 level resets, by first going to engine only and fall
      backing to full/chip reset as needed, i.e. reset_engine will need the
      struct_mutex.
      v4: Pass the engine mask to i915_reset. (Chris)
      v5: Rebase, update selftests.
      v6: Rebase, prepare for mutex-less reset engine.
      v7: Pass reset_engine mask as a function parameter, and iterate over the
      engine mask for reset_engine. (Chris)
      v8: Use i915.reset >=2 in has_reset_engine; remove redundant reset
      logging; add a reset-engine-in-progress flag to prevent concurrent
      resets, and avoid dual purposing of reset-backoff. (Chris)
      v9: Support reset of different engines in parallel (Chris)
      v10: Handle reset-engine flag locking better (Chris)
      v11: Squash in reporting of per-engine-reset availability.
      
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Signed-off-by: NIan Lister <ian.lister@intel.com>
      Signed-off-by: NTomas Elf <tomas.elf@intel.com>
      Signed-off-by: NArun Siluvery <arun.siluvery@linux.intel.com>
      Signed-off-by: NMichel Thierry <michel.thierry@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170615201828.23144-4-michel.thierry@intel.comReviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170620095751.13127-5-chris@chris-wilson.co.uk
      142bc7d9
  16. 30 5月, 2017 1 次提交
  17. 26 5月, 2017 1 次提交
    • C
      drm/i915: Keep the forcewake timer alive for 1ms past the most recent use · c9e0c6da
      Chris Wilson 提交于
      Currently the timer is armed for 1ms after the first use and is killed
      immediately, dropping the forcewake as early as possible. However, for
      very frequent operations the forcewake dance has a large impact on
      latency and keeping the timer alive until we are idle is preferred. To
      achieve this, if we call intel_uncore_forcewake_get whilst the timer is
      alive (repeated use), then set a flag to restart the timer on expiry
      rather than drop the forcewake usage count. The timer is racy, the
      consequence of the race is to expire the timer earlier than is now
      desired but does not impact on correct behaviour. The offset the race
      slightly, we set the active flag again on intel_uncore_forcewake_put.
      
      The effect should be to reduce the jitter of reacquiring the fw every
      1ms on a busy system. However, the cost is to keep the timer alive for
      an extra 1ms on a nearly idle system. We chose to incur the jitter
      previously to keep the timer off for as much as possible.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170526132209.14640-1-chris@chris-wilson.co.uk
      c9e0c6da
  18. 22 5月, 2017 1 次提交
  19. 19 5月, 2017 3 次提交
  20. 11 5月, 2017 1 次提交
  21. 09 5月, 2017 1 次提交
  22. 03 5月, 2017 2 次提交
  23. 28 4月, 2017 1 次提交
  24. 27 4月, 2017 1 次提交
  25. 12 4月, 2017 1 次提交
  26. 11 4月, 2017 2 次提交
  27. 10 4月, 2017 2 次提交
  28. 08 4月, 2017 1 次提交
  29. 07 4月, 2017 1 次提交
  30. 23 3月, 2017 4 次提交