1. 16 10月, 2019 1 次提交
  2. 11 10月, 2019 1 次提交
  3. 09 10月, 2019 1 次提交
  4. 08 10月, 2019 3 次提交
    • A
      drm/i915/tgl: Switch between dc3co and dc5 based on display idleness · 1c4d821d
      Anshuman Gupta 提交于
      DC3CO is useful power state, when DMC detects PSR2 idle frame
      while an active video playback, playing 30fps video on 60hz panel
      is the classic example of this use case.
      
      B.Specs:49196 has a restriction to enable DC3CO only for Video Playback.
      It will be worthy to enable DC3CO after completion of each pageflip
      and switch back to DC5 when display is idle because driver doesn't
      differentiate between video playback and a normal pageflip.
      We will use Frontbuffer flush call tgl_dc3co_flush() to enable DC3CO
      state only for ORIGIN_FLIP flush call, because DC3CO state has primarily
      targeted for VPB use case. We are not interested here for frontbuffer
      invalidates calls because that triggers PSR2 exit, which will
      explicitly disable DC3CO.
      
      DC5 and DC6 saves more power, but can't be entered during video
      playback because there are not enough idle frames in a row to meet
      most PSR2 panel deep sleep entry requirement typically 4 frames.
      As PSR2 existing implementation is using minimum 6 idle frames for
      deep sleep, it is safer to enable DC5/6 after 6 idle frames
      (By scheduling a delayed work of 6 idle frames, once DC3CO has been
      enabled after a pageflip).
      
      After manually waiting for 6 idle frames DC5/6 will be enabled and
      PSR2 deep sleep idle frames will be restored to 6 idle frames, at this
      point DMC will triggers DC5/6 once PSR2 enters to deep sleep after
      6 idle frames.
      In future when we will enable S/W PSR2 tracking, we can change the
      PSR2 required deep sleep idle frames to 1 so DMC can trigger the
      DC5/6 immediately after S/W manual waiting of 6 idle frames get
      complete.
      
      v2: calculated s/w state to switch over dc3co when there is an
          update. [Imre]
          Used cancel_delayed_work_sync() in order to avoid any race
          with already scheduled delayed work. [Imre]
      v3: Cancel_delayed_work_sync() may blocked the commit work.
          hence dropping it, dc5_idle_thread() checks the valid wakeref before
          putting the reference count, which avoids any chances of dropping
          a zero wakeref. [Imre (IRC)]
      v4: Used frontbuffer flush mechanism. [Imre]
      v5: Used psr.pipe to extract frontbuffer busy bits. [Imre]
          Used cancel_delayed_work_sync() in encoder disable path. [Imre]
          Used mod_delayed_work() instead of cancelling and scheduling a
          delayed work. [Imre]
          Used psr.lock in tgl_dc5_idle_thread() to enable psr2 deep
          sleep. [Imre]
          Removed DC5_REQ_IDLE_FRAMES macro. [Imre]
      v6: Used dc3co_exitline check instead of TGL and dc3co allowed_dc_mask
          checks, used delayed_work_pending with the psr lock and removed the
          psr2_deep_slp_disabled flag. [Imre]
      v7: Code refactoring, moved most of functional code to inte_psr.c [Imre]
          Using frontbuffer_bits on psr.pipe check instead of
          busy_frontbuffer_bits. [Imre]
          Calculating dc3co_exit_delay in intel_psr_enable_locked. [Imre]
      
      Cc: Jani Nikula <jani.nikula@intel.com>
      Cc: Imre Deak <imre.deak@intel.com>
      Cc: Animesh Manna <animesh.manna@intel.com>
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NAnshuman Gupta <anshuman.gupta@intel.com>
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191003081738.22101-6-anshuman.gupta@intel.com
      1c4d821d
    • A
      drm/i915/tgl: Enable DC3CO state in "DC Off" power well · 4645e906
      Anshuman Gupta 提交于
      Add target_dc_state and used by set_target_dc_state API
      in order to enable DC3CO state with existing DC states.
      target_dc_state will enable/disable the desired DC state in
      DC_STATE_EN reg when "DC Off" power well gets disable/enable.
      
      v2: commit log improvement.
      v3: Used intel_wait_for_register to wait for DC3CO exit. [Imre]
          Used gen9_set_dc_state() to allow/disallow DC3CO. [Imre]
          Moved transcoder psr2 exit line enablement from tgl_allow_dc3co()
          to a appropriate place haswell_crtc_enable(). [Imre]
          Changed the DC3CO power well enabled call back logic as
          recommended in review comments. [Imre]
      v4: Used wait_for_us() instead of intel_wait_for_reg(). [Imre (IRC)]
      v5: using udelay() instead of waiting for DC3CO exit status.
      v6: Fixed minor unwanted change.
      v7: Removed DC3CO powerwell and POWER_DOMAIN_VIDEO.
      v8: Uniform checks by using only target_dc_state instead of allowed_dc_mask
          in "DC off" power well callback. [Imre]
          Adding "DC off" power well id to older platforms. [Imre]
          Removed psr2_deep_sleep flag from tgl_set_target_dc_state. [Imre]
      v9: Used switch case for target DC state in
          gen9_dc_off_power_well_disable(), checking DC3CO state against
          allowed DC mask, using WARN_ON() in
          tgl_set_target_dc_state(). [Imre]
      v10: Code refactoring and using sanitize_target_dc_state(). [Imre]
      
      Cc: Jani Nikula <jani.nikula@intel.com>
      Cc: Imre Deak <imre.deak@intel.com>
      Cc: Animesh Manna <animesh.manna@intel.com>
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NAnshuman Gupta <anshuman.gupta@intel.com>
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191003081738.22101-4-anshuman.gupta@intel.com
      4645e906
    • C
      drm/i915/perf: Wean ourselves off dev_priv · 8f8b1171
      Chris Wilson 提交于
      Use the local uncore accessors for the GT rather than using the [not-so]
      magic global dev_priv mmio routines. In the process, we also teach the
      perf stream to use backpointers to the i915_perf rather than digging it
      out of dev_priv.
      
      v2: Rebase onto i915_perf_types.h
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
      Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
      Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> #v1
      Link: https://patchwork.freedesktop.org/patch/msgid/20191007140812.10963-1-chris@chris-wilson.co.uk
      Link: https://patchwork.freedesktop.org/patch/msgid/20191007210942.18145-1-chris@chris-wilson.co.uk
      8f8b1171
  5. 07 10月, 2019 2 次提交
  6. 06 10月, 2019 1 次提交
  7. 04 10月, 2019 6 次提交
  8. 28 9月, 2019 1 次提交
  9. 27 9月, 2019 3 次提交
  10. 23 9月, 2019 3 次提交
  11. 16 9月, 2019 1 次提交
  12. 12 9月, 2019 2 次提交
  13. 11 9月, 2019 4 次提交
  14. 10 9月, 2019 1 次提交
  15. 07 9月, 2019 1 次提交
  16. 30 8月, 2019 2 次提交
  17. 24 8月, 2019 3 次提交
  18. 23 8月, 2019 1 次提交
    • J
      drm/i915/psr: Make PSR registers relative to transcoders · 4ab4fa10
      José Roberto de Souza 提交于
      PSR registers are a mess, some have the full address while others just
      have the additional offset from psr_mmio_base.
      
      For BDW+ psr_mmio_base is nothing more than TRANSCODER_EDP_OFFSET +
      0x800 and using it makes more difficult for people with an PSR
      register address or PSR register name from from BSpec as i915 also
      don't match the BSpec names.
      For HSW psr_mmio_base is _DDI_BUF_CTL_A + 0x800 and PSR registers are
      only available in DDIA.
      
      Other reason to make relative to transcoder is that since BDW every
      transcoder have PSR registers, so in theory it should be possible to
      have PSR enabled in a non-eDP transcoder.
      
      So for BDW+ we can use _TRANS2() to get the register offset of any
      PSR register in any transcoder while for HSW we have _HSW_PSR_ADJ
      that will calculate the register offset for the single PSR instance,
      noting that we are already guarded about trying to enable PSR in other
      port than DDIA on HSW by the 'if (dig_port->base.port != PORT_A)' in
      intel_psr_compute_config(), this check should only be valid for HSW
      and will be changed in future.
      PSR2 registers and PSR_EVENT was added after Haswell so that is why
      _PSR_ADJ() is not used in some macros.
      
      The only registers that can not be relative to transcoder are
      PSR_IMR and PSR_IIR that are not relative to anything, so keeping it
      hardcoded. That changed for TGL but it will be handled in another
      patch.
      
      Also removing BDW_EDP_PSR_BASE from GVT because it is not used as it
      is the only PSR register that GVT have.
      
      v5:
      - Macros changed to be more explicit about HSW (Dhinakaran)
      - Squashed with the patch that added the tran parameter to the
      macros (Dhinakaran)
      
      v6:
      - Checking for interruption errors after module reload in the
      transcoder that will be used (Dhinakaran)
      - Using lowercase to the registers offsets
      
      v7:
      - Removing IS_HASWELL() from registers macros(Jani)
      
      Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: NLucas De Marchi <lucas.demarchi@intel.com>
      Signed-off-by: NJosé Roberto de Souza <jose.souza@intel.com>
      Signed-off-by: NLucas De Marchi <lucas.demarchi@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190820223325.27490-1-jose.souza@intel.com
      4ab4fa10
  19. 22 8月, 2019 1 次提交
  20. 21 8月, 2019 1 次提交
  21. 20 8月, 2019 1 次提交