1. 26 10月, 2016 1 次提交
  2. 25 10月, 2016 2 次提交
    • S
      drm/i915: Support for GuC interrupts · 26705e20
      Sagar Arun Kamble 提交于
      There are certain types of interrupts which Host can receive from GuC.
      GuC ukernel sends an interrupt to Host for certain events, like for
      example retrieve/consume the logs generated by ukernel.
      This patch adds support to receive interrupts from GuC but currently
      enables & partially handles only the interrupt sent by GuC ukernel.
      Future patches will add support for handling other interrupt types.
      
      v2:
      - Use common low level routines for PM IER/IIR programming (Chris)
      - Rename interrupt functions to gen9_xxx from gen8_xxx (Chris)
      - Replace disabling of wake ref asserts with rpm get/put (Chris)
      
      v3:
      - Update comments for more clarity. (Tvrtko)
      - Remove the masking of GuC interrupt, which was kept masked till the
        start of bottom half, its not really needed as there is only a
        single instance of work item & wq is ordered. (Tvrtko)
      
      v4:
      - Rebase.
      - Rename guc_events to pm_guc_events so as to be indicative of the
        register/control block it is associated with. (Chris)
      - Add handling for back to back log buffer flush interrupts.
      
      v5:
      - Move the read & clearing of register, containing Guc2Host message
        bits, outside the irq spinlock. (Tvrtko)
      
      v6:
      - Move the log buffer flush interrupt related stuff to the following
        patch so as to do only generic bits in this patch. (Tvrtko)
      - Rebase.
      
      v7:
      - Remove the interrupts_enabled check from gen9_guc_irq_handler, want to
        process that last interrupt also before disabling the interrupt, sync
        against the work queued by irq handler will be done by caller disabling
        the interrupt.
      Signed-off-by: NSagar Arun Kamble <sagar.a.kamble@intel.com>
      Signed-off-by: NAkash Goel <akash.goel@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      26705e20
    • A
      drm/i915: Add low level set of routines for programming PM IER/IIR/IMR register set · f4e9af4f
      Akash Goel 提交于
      So far PM IER/IIR/IMR registers were being used only for Turbo related
      interrupts. But interrupts coming from GuC also use the same set.
      As a precursor to supporting GuC interrupts, added new low level routines
      so as to allow sharing the programming of PM IER/IIR/IMR registers between
      Turbo & GuC.
      Also similar to PM IMR, maintaining a bitmask for PM IER register, to allow
      easy sharing of it between Turbo & GuC without involving a rmw operation.
      
      v2:
      - For appropriateness & avoid any ambiguity, rename old functions
        enable/disable pm_irq to mask/unmask pm_irq and rename new functions
        enable/disable pm_interrupts to enable/disable pm_irq. (Tvrtko)
      - Use u32 in place of uint32_t. (Tvrtko)
      
      v3:
      - Rename the fields pm_irq_mask & pm_ier_mask and do some cleanup. (Chris)
      - Rebase.
      
      v4: Fix the inadvertent disabling of User interrupt for VECS ring causing
          failure for certain IGTs.
      
      v5: Use dev_priv with HAS_VEBOX macro. (Tvrtko)
      Suggested-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NAkash Goel <akash.goel@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      f4e9af4f
  3. 24 10月, 2016 1 次提交
  4. 22 10月, 2016 2 次提交
  5. 20 10月, 2016 3 次提交
  6. 18 10月, 2016 2 次提交
  7. 17 10月, 2016 3 次提交
  8. 15 10月, 2016 1 次提交
  9. 14 10月, 2016 1 次提交
  10. 13 10月, 2016 2 次提交
  11. 10 10月, 2016 2 次提交
  12. 04 10月, 2016 1 次提交
  13. 29 9月, 2016 1 次提交
  14. 27 9月, 2016 1 次提交
  15. 23 9月, 2016 1 次提交
    • P
      drm/i915/fbc: disable FBC on FIFO underruns · 61a585d6
      Paulo Zanoni 提交于
      Ever since I started working on FBC I was already aware that FBC can
      really amplify the FIFO underrun symptoms. On systems where FIFO
      underruns were harmless error messages, enabling FBC would cause the
      underruns to give black screens.
      
      We recently tried to enable FBC on Haswell and got reports of a system
      that would hang after some hours of uptime, and the first bad commit
      was the one that enabled FBC. We also observed that this system had
      FIFO underrun error messages on its dmesg. Although we don't have any
      evidence that fixing the underruns would solve the bug and make FBC
      work properly on this machine, IMHO it's better if we minimize the
      amount of possible problems by just giving up FBC whenever we detect
      an underrun.
      
      v2: New version, different implementation and commit message.
      v3: Clarify the fact that we run from an IRQ handler (Chris).
      v4: Also add the underrun_detected check at can_choose() to avoid
          misleading dmesg messages (DK).
      v5: Fix Engrish, use READ_ONCE on the unlocked read (Chris).
      
      Cc: Stefan Richter <stefanr@s5r6.in-berlin.de>
      Cc: Lyude <cpaul@redhat.com>
      Cc: stevenhoneyman@gmail.com <stevenhoneyman@gmail.com>
      Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1473773937-19758-1-git-send-email-paulo.r.zanoni@intel.com
      61a585d6
  16. 22 9月, 2016 3 次提交
  17. 20 9月, 2016 1 次提交
  18. 15 9月, 2016 1 次提交
  19. 10 9月, 2016 2 次提交
  20. 09 9月, 2016 1 次提交
  21. 08 9月, 2016 2 次提交
  22. 07 9月, 2016 1 次提交
  23. 25 8月, 2016 1 次提交
    • L
      drm/i915/skl: Update DDB values atomically with wms/plane attrs · 27082493
      Lyude 提交于
      Now that we can hook into update_crtcs and control the order in which we
      update CRTCs at each modeset, we can finish the final step of fixing
      Skylake's watermark handling by performing DDB updates at the same time
      as plane updates and watermark updates.
      
      The first major change in this patch is skl_update_crtcs(), which
      handles ensuring that we order each CRTC update in our atomic commits
      properly so that they honor the DDB flush order.
      
      The second major change in this patch is the order in which we flush the
      pipes. While the previous order may have worked, it can't be used in
      this approach since it no longer will do the right thing. For example,
      using the old ddb flush order:
      
      We have pipes A, B, and C enabled, and we're disabling C. Initial ddb
      allocation looks like this:
      
      |   A   |   B   |xxxxxxx|
      
      Since we're performing the ddb updates after performing any CRTC
      disablements in intel_atomic_commit_tail(), the space to the right of
      pipe B is unallocated.
      
      1. Flush pipes with new allocation contained into old space. None
         apply, so we skip this
      2. Flush pipes having their allocation reduced, but overlapping with a
         previous allocation. None apply, so we also skip this
      3. Flush pipes that got more space allocated. This applies to A and B,
         giving us the following update order: A, B
      
      This is wrong, since updating pipe A first will cause it to overlap with
      B and potentially burst into flames. Our new order (see the code
      comments for details) would update the pipes in the proper order: B, A.
      
      As well, we calculate the order for each DDB update during the check
      phase, and reference it later in the commit phase when we hit
      skl_update_crtcs().
      
      This long overdue patch fixes the rest of the underruns on Skylake.
      
      Changes since v1:
       - Add skl_ddb_entry_write() for cursor into skl_write_cursor_wm()
      Changes since v2:
       - Use the method for updating CRTCs that Ville suggested
       - In skl_update_wm(), only copy the watermarks for the crtc that was
         passed to us
      Changes since v3:
       - Small comment fix in skl_ddb_allocation_overlaps()
      Changes since v4:
       - Remove the second loop in intel_update_crtcs() and use Ville's
         suggestion for updating the ddb allocations in the right order
       - Get rid of the second loop and just use the ddb state as it updates
         to determine what order to update everything in (thanks for the
         suggestion Ville)
       - Simplify skl_ddb_allocation_overlaps()
       - Split actual overlap checking into it's own helper
      
      Fixes: 0e8fb7ba ("drm/i915/skl: Flush the WM configuration")
      Fixes: 8211bd5b ("drm/i915/skl: Program the DDB allocation")
      [omitting CC for stable, since this patch will need to be changed for
      such backports first]
      
      Testcase: kms_cursor_legacy
      Testcase: plane-all-modeset-transition
      Signed-off-by: NLyude <cpaul@redhat.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@intel.com>
      Cc: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
      Cc: Hans de Goede <hdegoede@redhat.com>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1471961565-28540-2-git-send-email-cpaul@redhat.com
      27082493
  24. 24 8月, 2016 1 次提交
  25. 23 8月, 2016 3 次提交
    • L
      drm/i915/skl: Update plane watermarks atomically during plane updates · 62e0fb88
      Lyude 提交于
      Thanks to Ville for suggesting this as a potential solution to pipe
      underruns on Skylake.
      
      On Skylake all of the registers for configuring planes, including the
      registers for configuring their watermarks, are double buffered. New
      values written to them won't take effect until said registers are
      "armed", which is done by writing to the PLANE_SURF (or in the case of
      cursor planes, the CURBASE register) register.
      
      With this in mind, up until now we've been updating watermarks on skl
      like this:
      
        non-modeset {
         - calculate (during atomic check phase)
         - finish_atomic_commit:
           - intel_pre_plane_update:
              - intel_update_watermarks()
           - {vblank happens; new watermarks + old plane values => underrun }
           - drm_atomic_helper_commit_planes_on_crtc:
              - start vblank evasion
              - write new plane registers
              - end vblank evasion
        }
      
        or
      
        modeset {
         - calculate (during atomic check phase)
         - finish_atomic_commit:
           - crtc_enable:
              - intel_update_watermarks()
           - {vblank happens; new watermarks + old plane values => underrun }
           - drm_atomic_helper_commit_planes_on_crtc:
              - start vblank evasion
              - write new plane registers
              - end vblank evasion
        }
      
      Now we update watermarks atomically like this:
      
        non-modeset {
         - calculate (during atomic check phase)
         - finish_atomic_commit:
           - intel_pre_plane_update:
              - intel_update_watermarks() (wm values aren't written yet)
           - drm_atomic_helper_commit_planes_on_crtc:
              - start vblank evasion
              - write new plane registers
              - write new wm values
              - end vblank evasion
        }
      
        modeset {
         - calculate (during atomic check phase)
         - finish_atomic_commit:
           - crtc_enable:
              - intel_update_watermarks() (actual wm values aren't written
                yet)
           - drm_atomic_helper_commit_planes_on_crtc:
              - start vblank evasion
              - write new plane registers
      	- write new wm values
              - end vblank evasion
        }
      
      So this patch moves all of the watermark writes into the right place;
      inside of the vblank evasion where we update all of the registers for
      each plane. While this patch doesn't fix everything, it does allow us to
      update the watermark values in the way the hardware expects us to.
      
      Changes since original patch series:
       - Remove mutex_lock/mutex_unlock since they don't do anything and we're
         not touching global state
       - Move skl_write_cursor_wm/skl_write_plane_wm functions into
         intel_pm.c, make externally visible
       - Add skl_write_plane_wm calls to skl_update_plane
       - Fix conditional for for loop in skl_write_plane_wm (level < max_level
         should be level <= max_level)
       - Make diagram in commit more accurate to what's actually happening
       - Add Fixes:
      
      Changes since v1:
       - Use IS_GEN9() instead of IS_SKYLAKE() since these fixes apply to more
         then just Skylake
       - Update description to make it clear this patch doesn't fix everything
       - Check if pipes were actually changed before writing watermarks
      
      Changes since v2:
       - Write PIPE_WM_LINETIME during vblank evasion
      
      Changes since v3:
       - Rebase against new SAGV patch changes
      
      Changes since v4:
       - Add a parameter to choose what skl_wm_values struct to use when
         writing new plane watermarks
      
      Changes since v5:
       - Remove cursor ddb entry write in skl_write_cursor_wm(), defer until
         patch 6
       - Write WM_LINETIME in intel_begin_crtc_commit()
      
      Changes since v6:
       - Remove redundant dirty_pipes check in skl_write_plane_wm (we check
         this in all places where we call this function, and it was supposed
         to have been removed earlier anyway)
       - In i9xx_update_cursor(), use dev_priv->info.gen >= 9 instead of
         IS_GEN9(dev_priv). We do this everywhere else and I'd imagine this
         needs to be done for gen10 as well
      
      Changes since v7:
       - Fix rebase fail (unused variable obj)
       - Make struct skl_wm_values *wm const
       - Fix indenting
       - Use INTEL_GEN() instead of dev_priv->info.gen
      
      Changes since v8:
       - Don't forget calls to skl_write_plane_wm() when disabling planes
       - Use INTEL_GEN(), not INTEL_INFO()->gen in intel_begin_crtc_commit()
      
      Fixes: 2d41c0b5 ("drm/i915/skl: SKL Watermark Computation")
      Signed-off-by: NLyude <cpaul@redhat.com>
      Reviewed-by: NMatt Roper <matthew.d.roper@intel.com>
      Cc: stable@vger.kernel.org
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@intel.com>
      Cc: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
      Cc: Hans de Goede <hdegoede@redhat.com>
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1471884608-10671-1-git-send-email-cpaul@redhat.com
      Link: http://patchwork.freedesktop.org/patch/msgid/1471884608-10671-1-git-send-email-cpaul@redhat.com
      62e0fb88
    • M
      drm/i915: Convert intel_dp to use atomic state · 85cb48a1
      Maarten Lankhorst 提交于
      Slightly less straightforward. Some of the drrs calls are done from
      workers or from intel_ddi.c, pass along crtc_state when we can,
      or crtc->config when we can't.
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1470755054-32699-15-git-send-email-maarten.lankhorst@linux.intel.comReviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      85cb48a1
    • M
      0a478c27