1. 24 8月, 2012 1 次提交
  2. 14 8月, 2012 3 次提交
    • C
      drm/i915: Apply post-sync write for pipe control invalidates · 7d54a904
      Chris Wilson 提交于
      When invalidating the TLBs it is documentated as requiring a post-sync
      write. Failure to do so seems to result in a GPU hang.
      
      Exposure to this hang on IVB seems to be a result of removing the extra
      stalls required for SNB pipecontrol workarounds:
      
      commit 6c6cf5aa
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Fri Jul 20 18:02:28 2012 +0100
      
          drm/i915: Only apply the SNB pipe control w/a to gen6
      
      Note: Manually switch the pipe_control cmd to 4 dwords to avoid a
      (silent) functional conflict with -next. This way will get a loud (but
      conflict with next (since the scratch_addr has been deleted there).
      
      Reported-and-tested-by: yex.tian@intel.com
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=53322Acked-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      [danvet: added note about merge conflict with -next.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      7d54a904
    • D
      drm/i915: reorder edp disabling to fix ivb MacBook Air · 35a38556
      Daniel Vetter 提交于
      eDP is tons of fun. It turns out that at least the new MacBook Air 5,1
      model absolutely doesn't like the new force vdd dance we've introduced
      in
      
      commit 6cb49835
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Sun May 20 17:14:50 2012 +0200
      
          drm/i915: enable vdd when switching off the eDP panel
      
      But that patch also tried to fix some neat edp sequence issue with the
      force_vdd timings. Closer inspection reveals that we've raised
      force_vdd only to do the aux channel communication dp_sink_dpms. If we
      move the edp_panel_off below that, we don't need any force_vdd for the
      disable sequence, which makes the Air happy.
      
      Unfortunately the reporter of the original bug that the above commit
      fixed is travelling, so we can't test whether this regresses things.
      But my theory is that since we don't check for any power-off ->
      force_vdd-on delays in edp_panel_vdd_on, this was the actual
      root-cause of this failure. With that force_vdd dance completely
      eliminated, I'm hopeful the original bug stays fixed, too.
      
      For reference the old bug, which hopefully doesn't get broken by this:
      
      https://bugzilla.kernel.org/show_bug.cgi?id=43163
      
      In any case, regression fixers win over plain bugfixes, so this needs
      to go in asap.
      
      v2: The crucial pieces seems to be to clear the force_vdd flag
      uncoditionally, too, in edp_panel_off. Looks like this is left behind
      by the firmware somehow.
      
      v3: The Apple firmware seems to switch off the panel on it's own, hence
      we still need to keep force_vdd on, but properly clear it when switching
      the panel off.
      
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=45671Tested-by: NRoberto Romer <sildurin@gmail.com>
      Tested-by: NDaniel Wagner <wagi@monom.org>
      Tested-by: NKeith Packard <keithp@keithp.com>
      Cc: stable@vger.kernel.org
      Cc: Keith Packard <keithp@keithp.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      35a38556
    • J
      drm/i915: ensure i2c adapter is all set before adding it · cee25168
      Jani Nikula 提交于
      i2c_add_adapter() may do i2c transfers on the bus to detect supported
      devices. Therefore the adapter needs to be all set before adding it. This
      was not the case for the bit-banging fallback, resulting in an oops if the
      device detection GMBUS transfers timed out. Fix the issue by calling
      i2c_add_adapter() only after intel_gpio_setup().
      
      LKML-Reference: <5021F00B.7000503@ionic.de>
      Tested-by: NMihai Moldovan <ionic@ionic.de>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      cee25168
  3. 12 8月, 2012 3 次提交
  4. 11 8月, 2012 2 次提交
  5. 10 8月, 2012 16 次提交
  6. 09 8月, 2012 1 次提交
  7. 08 8月, 2012 3 次提交
  8. 07 8月, 2012 2 次提交
  9. 06 8月, 2012 5 次提交
  10. 27 7月, 2012 2 次提交
    • D
      drm/i915: fix forcewake related hangs on snb · 6af2d180
      Daniel Vetter 提交于
      ... by adding seemingly redudant posting reads.
      
      This little dragon lair exploded the first time around when we've
      refactored the code a bit to use the common wait_for_atomic_us in
      "drm/i915: Group the GT routines together in both code and vtable",
      which caused QA to file fdo bug #51738.
      
      Chris Wilson entertained a few approaches to fixing #51738: Replacing
      the udelay(1) with the previously-used udelay(10) (or any other
      "sufficiently larger" delay), adding a posting read, or ditching the
      delay completely and using cpu_relax. We went with the cpu_relax and
      "915: Workaround hang with BSD and forcewake on SandyBridge". Which
      blew up in fdo bug #52424, but adding the posting read while still
      using cpu_relax seems to also fix that, it looks like the
      posting read is the important ingriedient to fix these rc6 related
      hangs on snb.
      
      Popular theories as to why this is like it is include:
      - A herd of pink elephants got royally angered somehow.
      
      - The gpu has internally different functional units and judging by the
        register offsets, the forcewake request register and the forcewake
        ack registers are _not_ in the same functional unit (or at least
        aren't reached through the same routes). Hence the posting read
        syncs up with the wrong block and gets the entire gpu confused.
      
      - ...
      
      As a minimal ducttape fix for 3.6, let's just put these posting reads
      into place again. We can try fancier approaches (like adding back the
      cpu_relax instead of the udelay) in -next.
      
      This (re-)fixes a regression introduced in
      
      commit 990bbdad
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Mon Jul 2 11:51:02 2012 -0300
      
          drm/i915: Group the GT routines together in both code and vtable
      
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Tested-by: NChris Wilson <chris@chris-wilson.co.uk>
      Tested-by: NDu Yan <yanx.du@intel.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=52424
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51738uSigned-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      6af2d180
    • E
      drm/i915: prevent possible pin leak on error path · ab3951eb
      Eugeni Dodonov 提交于
      We should not hit this under any sane conditions, but still, this does not
      looks right.
      
      CC: Chris Wilson <chris@chris-wilson.co.uk>
      CC: Daniel Vetter <daniel.vetter@ffwll.ch>
      CC: stable@vger.kernel.org
      Reported-by: NHerton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
      Reviewed-by: NChris Wlison <chris@chris-wilson.co.uk>
      Signed-off-by: NEugeni Dodonov <eugeni.dodonov@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      ab3951eb
  11. 26 7月, 2012 2 次提交
    • D
      drm/i915: rip out sanitize_pm again · acbe9475
      Daniel Vetter 提交于
      We believe to have squashed all issues around the gen6+ rps interrupt
      generation and why the gpu sometimes got stuck. With that cleared up,
      there's no user left for the sanitize_pm infrastructure, so let's just
      rip it out.
      
      Note that 'intel_reg_write 0xa014 0x13070000' is the w/a if we find
      ourselves stuck again.
      Acked-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      acbe9475
    • D
      drm/i915: Only set the down rps limit when at the loweset frequency · 20b46e59
      Daniel Vetter 提交于
      The power docs say that when the gt leaves rc6, it is in the lowest
      frequency and only about 25 usec later will switch to the frequency
      selected in GEN6_RPNSWREQ. If the downclock limit expires in that
      window and the down limit is set to the lowest possible frequency, the
      hw will not send the down interrupt. Which leads to a too high gpu
      clock and wasted power.
      
      Chris Wilson already worked on this with
      
      commit 7b9e0ae6
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Sat Apr 28 08:56:39 2012 +0100
      
          drm/i915: Always update RPS interrupts thresholds along with
          frequency
      
      but got the logic inverted: The current code set the down limit as
      long as we haven't reached it. Instead of only once with reached the
      lowest frequency.
      
      Note that we can't always set the downclock limit to 0, because
      otherwise the hw will keep on bugging us with downclock request irqs
      once the lowest level is reached.
      
      For similar reasons also always set the upclock limit, otherwise the
      hw might poke us again with interrupts.
      
      v2: Chris Wilson noticed that the limit reg is also computed in
      sanitize_pm. To avoid duplication, extract the code into a common
      function.
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      20b46e59