• Ville Syrjälä's avatar
    drm/i915: Make RPS EI/thresholds multiple of 25 on SNB-BDW · 344a144c
    Ville Syrjälä authored
    [ Upstream commit 4ea39590 ]
    
    Somehow my SNB GT1 (Dell XPS 8300) gets very unhappy around
    GPU hangs if the RPS EI/thresholds aren't suitably aligned.
    It seems like scheduling/timer interupts stop working somehow
    and things get stuck eg. in usleep_range().
    
    I bisected the problem down to
    commit 8a586437 ("drm/i915/skl: Restructured the gen6_set_rps_thresholds function")
    I observed that before all the values were at least multiples of 25,
    but afterwards they are not. And rounding things up to the next multiple
    of 25 does seem to help, so lets' do that. I also tried roundup(..., 5)
    but that wasn't sufficient. Also I have no idea if we might need this sort of
    thing on gen9+ as well.
    
    These are the original EI/thresholds:
     LOW_POWER
      GEN6_RP_UP_EI          12500
      GEN6_RP_UP_THRESHOLD   11800
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 21250
     BETWEEN
      GEN6_RP_UP_EI          10250
      GEN6_RP_UP_THRESHOLD    9225
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 18750
     HIGH_POWER
      GEN6_RP_UP_EI           8000
      GEN6_RP_UP_THRESHOLD    6800
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 15000
    
    These are after 8a586437:
     LOW_POWER
      GEN6_RP_UP_EI          12500
      GEN6_RP_UP_THRESHOLD   11875
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 21250
     BETWEEN
      GEN6_RP_UP_EI          10156
      GEN6_RP_UP_THRESHOLD    9140
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 18750
     HIGH_POWER
      GEN6_RP_UP_EI           7812
      GEN6_RP_UP_THRESHOLD    6640
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 15000
    
    And these are what we have after this patch:
     LOW_POWER
      GEN6_RP_UP_EI          12500
      GEN6_RP_UP_THRESHOLD   11875
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 21250
     BETWEEN
      GEN6_RP_UP_EI          10175
      GEN6_RP_UP_THRESHOLD    9150
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 18750
     HIGH_POWER
      GEN6_RP_UP_EI           7825
      GEN6_RP_UP_THRESHOLD    6650
      GEN6_RP_DOWN_EI        25000
      GEN6_RP_DOWN_THRESHOLD 15000
    
    Cc: stable@vger.kernel.org
    Cc: Akash Goel <akash.goel@intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Testcase: igt/kms_pipe_crc_basic/hang-read-crc-pipe-B
    Fixes: 8a586437 ("drm/i915/skl: Restructured the gen6_set_rps_thresholds function")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1461159836-9108-1-git-send-email-ville.syrjala@linux.intel.comAcked-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarPatrik Jakobsson <patrik.jakobsson@linux.intel.com>
    (cherry picked from commit 8a292d01)
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
    344a144c
i915_reg.h 276 KB