1. 19 May, 2016 36 commits
  2. 11 May, 2016 4 commits
    • Greg Kroah-Hartman's avatar
      Linux 4.5.4 · a29ab351
      Greg Kroah-Hartman authored
      a29ab351
    • Srinivas Pandruvada's avatar
      ACPI / processor: Request native thermal interrupt handling via _OSC · 0d5406b6
      Srinivas Pandruvada authored
      commit a2121167 upstream.
      
      There are several reports of freeze on enabling HWP (Hardware PStates)
      feature on Skylake-based systems by the Intel P-states driver. The root
      cause is identified as the HWP interrupts causing BIOS code to freeze.
      
      HWP interrupts use the thermal LVT which can be handled by Linux
      natively, but on the affected Skylake-based systems SMM will respond
      to it by default.  This is a problem for several reasons:
       - On the affected systems the SMM thermal LVT handler is broken (it
         will crash when invoked) and a BIOS update is necessary to fix it.
       - With thermal interrupt handled in SMM we lose all of the reporting
         features of the arch/x86/kernel/cpu/mcheck/therm_throt driver.
       - Some thermal drivers like x86-package-temp depend on the thermal
         threshold interrupts signaled via the thermal LVT.
       - The HWP interrupts are useful for debugging and tuning
         performance (if the kernel can handle them).
      The native handling of thermal interrupts needs to be enabled
      because of that.
      
      This requires some way to tell SMM that the OS can handle thermal
      interrupts.  That can be done by using _OSC/_PDC in processor
      scope very early during ACPI initialization.
      
      The meaning of _OSC/_PDC bit 12 in processor scope is whether or
      not the OS supports native handling of interrupts for Collaborative
      Processor Performance Control (CPPC) notifications.  Since on
      HWP-capable systems CPPC is a firmware interface to HWP, setting
      this bit effectively tells the firmware that the OS will handle
      thermal interrupts natively going forward.
      
      For details on _OSC/_PDC refer to:
      http://www.intel.com/content/www/us/en/standards/processor-vendor-specific-acpi-specification.html
      
      To implement the _OSC/_PDC handshake as described, introduce a new
      function, acpi_early_processor_osc(), that walks the ACPI
      namespace looking for ACPI processor objects and invokes _OSC for
      them with bit 12 in the capabilities buffer set and terminates the
      namespace walk on the first success.
      
      Also modify intel_thermal_interrupt() to clear HWP status bits in
      the HWP_STATUS MSR to acknowledge HWP interrupts (which prevents
      them from firing continuously).
      Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
      [ rjw: Subject & changelog, function rename ]
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0d5406b6
    • Shashank Sharma's avatar
      drm/i915: Fake HDMI live status · 833a9558
      Shashank Sharma authored
      commit 60b3143c upstream.
      
      This patch does the following:
      - Fakes live status of HDMI as connected (even if that's not).
        While testing certain (monitor + cable) combinations with
        various intel  platforms, it seems that live status register
        doesn't work reliably on some older devices. So limit the
        live_status check for HDMI detection, only for platforms
        from gen7 onwards.
      
      V2: restrict faking live_status to certain platforms
      V3: (Ville)
         - keep the debug message for !live_status case
         - fix indentation of comment
         - remove "warning" from the debug message
      
          (Jani)
         - Change format of fix details in the commit message
      
      Fixes: 237ed86c ("drm/i915: Check live status before reading edid")
      Suggested-by: default avatarVille Syrjala <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarShashank Sharma <shashank.sharma@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1461237606-16491-1-git-send-email-shashank.sharma@intel.comSigned-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      (cherry picked from commit 4f4a8185)
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      833a9558
    • Ville Syrjälä's avatar
      drm/i915: Make RPS EI/thresholds multiple of 25 on SNB-BDW · 92e75348
      Ville Syrjälä authored
      commit 4ea39590 upstream.
      
      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: 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 avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      92e75348