Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/rkl: Disable PSR2

RKL doesn't have PSR2 HW tracking, it was replaced by software/manual
tracking. The driver is required to track the areas that needs update
and program hardware to send selective updates.

So until the software tracking is implemented, PSR2 needs to be disabled
for platforms without PSR2 HW tracking.

BSpec: 50422
BSpec: 50424

Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200603211529.3005059-15-matthew.d.roper@intel.com

authored by

José Roberto de Souza and committed by
Matt Roper
24d2fc3d 562ddcb7

+21
+15
drivers/gpu/drm/i915/display/intel_psr.c
··· 647 647 } 648 648 649 649 /* 650 + * Some platforms lack PSR2 HW tracking and instead require manual 651 + * tracking by software. In this case, the driver is required to track 652 + * the areas that need updates and program hardware to send selective 653 + * updates. 654 + * 655 + * So until the software tracking is implemented, PSR2 needs to be 656 + * disabled for platforms without PSR2 HW tracking. 657 + */ 658 + if (!HAS_PSR_HW_TRACKING(dev_priv)) { 659 + drm_dbg_kms(&dev_priv->drm, 660 + "No PSR2 HW tracking in the platform\n"); 661 + return false; 662 + } 663 + 664 + /* 650 665 * DSC and PSR2 cannot be enabled simultaneously. If a requested 651 666 * resolution requires DSC to be enabled, priority is given to DSC 652 667 * over PSR2.
+2
drivers/gpu/drm/i915/i915_drv.h
··· 1643 1643 #define HAS_DDI(dev_priv) (INTEL_INFO(dev_priv)->display.has_ddi) 1644 1644 #define HAS_FPGA_DBG_UNCLAIMED(dev_priv) (INTEL_INFO(dev_priv)->has_fpga_dbg) 1645 1645 #define HAS_PSR(dev_priv) (INTEL_INFO(dev_priv)->display.has_psr) 1646 + #define HAS_PSR_HW_TRACKING(dev_priv) \ 1647 + (INTEL_INFO(dev_priv)->display.has_psr_hw_tracking) 1646 1648 #define HAS_TRANSCODER(dev_priv, trans) ((INTEL_INFO(dev_priv)->cpu_transcoder_mask & BIT(trans)) != 0) 1647 1649 1648 1650 #define HAS_RC6(dev_priv) (INTEL_INFO(dev_priv)->has_rc6)
+3
drivers/gpu/drm/i915/i915_pci.c
··· 536 536 .display.has_ddi = 1, \ 537 537 .has_fpga_dbg = 1, \ 538 538 .display.has_psr = 1, \ 539 + .display.has_psr_hw_tracking = 1, \ 539 540 .display.has_dp_mst = 1, \ 540 541 .has_rc6p = 0 /* RC6p removed-by HSW */, \ 541 542 HSW_PIPE_OFFSETS, \ ··· 691 690 .display.has_fbc = 1, \ 692 691 .display.has_hdcp = 1, \ 693 692 .display.has_psr = 1, \ 693 + .display.has_psr_hw_tracking = 1, \ 694 694 .has_runtime_pm = 1, \ 695 695 .display.has_csr = 1, \ 696 696 .has_rc6 = 1, \ ··· 886 884 .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | 887 885 BIT(TRANSCODER_C), 888 886 .require_force_probe = 1, 887 + .display.has_psr_hw_tracking = 0, 889 888 .engine_mask = 890 889 BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0), 891 890 };
+1
drivers/gpu/drm/i915/intel_device_info.h
··· 148 148 func(has_modular_fia); \ 149 149 func(has_overlay); \ 150 150 func(has_psr); \ 151 + func(has_psr_hw_tracking); \ 151 152 func(overlay_needs_physical); \ 152 153 func(supports_tv); 153 154