1. 14 10月, 2017 1 次提交
  2. 10 10月, 2017 1 次提交
  3. 22 9月, 2017 1 次提交
  4. 20 9月, 2017 1 次提交
  5. 14 9月, 2017 1 次提交
  6. 08 9月, 2017 1 次提交
  7. 07 9月, 2017 1 次提交
  8. 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
  9. 07 7月, 2017 1 次提交
  10. 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
  11. 30 5月, 2017 1 次提交
  12. 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
  13. 22 5月, 2017 1 次提交
  14. 19 5月, 2017 3 次提交
  15. 11 5月, 2017 1 次提交
  16. 09 5月, 2017 1 次提交
  17. 03 5月, 2017 2 次提交
  18. 28 4月, 2017 1 次提交
  19. 27 4月, 2017 1 次提交
  20. 12 4月, 2017 1 次提交
  21. 11 4月, 2017 2 次提交
  22. 10 4月, 2017 2 次提交
  23. 08 4月, 2017 1 次提交
  24. 07 4月, 2017 1 次提交
  25. 23 3月, 2017 6 次提交
  26. 17 3月, 2017 1 次提交
  27. 13 3月, 2017 1 次提交
  28. 10 3月, 2017 1 次提交
  29. 02 3月, 2017 2 次提交
    • C
      drm/i915: s/assert_spin_locked/lockdep_assert_held/ · 67520415
      Chris Wilson 提交于
      assert_spin_locked() becomes an unconditionally compiled BUG_ON(),
      adding debug code right into the heart of critical routines like
      interrupt handlers.
      
         text	   data	    bss	    dec	    hex
      1296480	  19944	   2272	1318696	 141f28	before (lockdep disabled)
      1295984	  19944	   2272	1318200	 141d38	after
      
      1336261	  21139	   3208	1360608	 14c2e0	before (lockdep enabled)
      1339920	  21139	   3208	1364267	 14d12b	after
      
      Small saving for release; hopefully more instructive in debug.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170302132801.599-1-chris@chris-wilson.co.ukReviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      67520415
    • H
      drm/i915: Listen for PMIC bus access notifications · 264ec1a8
      Hans de Goede 提交于
      Listen for PMIC bus access notifications and get FORCEWAKE_ALL while
      the bus is accessed to avoid needing to do any forcewakes, which need
      PMIC bus access, while the PMIC bus is busy:
      
      This fixes errors like these showing up in dmesg, usually followed
      by a gfx or system freeze:
      
      [drm:fw_domains_get [i915]] *ERROR* render: timed out waiting for forcewake ack request.
      [drm:fw_domains_get [i915]] *MEDIA* render: timed out waiting for forcewake ack request.
      i2c_designware 808622C1:06: punit semaphore timed out, resetting
      i2c_designware 808622C1:06: PUNIT SEM: 2
      i2c_designware 808622C1:06: couldn't acquire bus ownership
      
      Downside of this approach is that it causes wakeups whenever the PMIC
      bus is accessed. Unfortunately we cannot simply wait for the PMIC bus
      to go idle when we hit a race, as forcewakes may be done from interrupt
      handlers where we cannot sleep to wait for the i2c PMIC bus access to
      finish.
      
      Note that the notifications and thus the wakeups will only happen on
      baytrail / cherrytrail devices using PMICs with a shared i2c bus for
      P-Unit and host PMIC access (i2c busses with a _SEM method in their
      APCI node), e.g. an axp288 PMIC.
      
      I plan to write some patches for drivers accessing the PMIC bus to
      limit their bus accesses to a bare minimum (e.g. cache registers, do not
      update battery level more often then 4 times a minute), to limit the
      amount of wakeups.
      
      BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=155241Signed-off-by: NHans de Goede <hdegoede@redhat.com>
      Tested-by: Ntagorereddy <tagore.chandan@gmail.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      [danvet: Wiggle in conflicts.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      264ec1a8