]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Merge tag 'drm-intel-next-2024-10-11' of https://gitlab.freedesktop.org/drm/i915...
authorDave Airlie <airlied@redhat.com>
Thu, 17 Oct 2024 04:19:22 +0000 (14:19 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 17 Oct 2024 23:13:31 +0000 (09:13 +1000)
drm/i915 features for v6.13:

[airlied: fixed build problem xe->display]
Features and functionality:
- Enable BMG and LNL+ ultra joiner support to join 2+2 pipes (Ankit, Stan)
- Enable 10bpc+CCS scanout for ICL+ and fp16+CCS scanout for TGL+ (Ville)
- Use DSB for plane/color management commits (Ville)
- Expose package temperature in hwmon (Raag)
- Add more Arrow Lake (ARL) PCI IDs (Dnyaneshwar)
- Add intel_display_caps debugfs for display capabilities and params (Jani)
- Debug log detected LTTPR PHY descriptors (Imre)

Refactoring and cleanups:
- Add intel_bo abstraction to remove drm/xe -Ddrm_i915_gem_object=xe_bo hack (Jani)
- IRQ enable/disable/suspend/resume cleanups (Rodrigo)
- Pre-SKL watermark/CxSR cleanups (Ville)
- Joiner refactoring and cleanups (Ankit, Stan)
- Unify PCI ROM vs. SPI flash VBT read code paths (Ville)
- Use the common gen3+ irq code for gen2 (Ville)
- Display include cleanups (Jani)
- Conversions from drm_i915_private to struct intel_display (Jani, Ville, Suraj)
- Convert wakeref_t underlying type to struct ref_tracker * (Jani)
- Hide VLV/CHV/BXT/GLK specific PPS handling better (Jani)
- Split out DP test request handling to a separate file (Jani)
- Add display snapshot abstraction for error state (Jani)
- Register macro cleanups (Jani)
- Add irq IMR/IER/IIR register triplet abstraction (Jani)
- Remove IS_LP() (Jani)
- Remove xe compat raw reg read/write support (Jani)
- Remove unused macro parameter (He Lugang)
- Fix typos and spelling (Yan Zhen, Shen Lichuan, Colin Ian King)
- Minor code fixes (Yuesong Li, Chen Ni)
- Minor modeset refactoring (Ville)

Fixes:
- Fix a number of DP 2.1 Panel Replay issues (Jouni)
- Fix drm/xe display lockdep issues on runtime suspend/resume (Suraj)
- Fix MTL C20 PHY PLL values for UHBR20 (Dnyaneshwar)
- Fix DP FEC enabling for UHBR rates (Chaitanya)
- Fix BMG supported UHBR rates (10 and 13.5) (Arun)
- Fix BMG CCS modifiers (Juha-Pekka)
- Fix AUX IO power enabling for eDP PSR (Imre)
- Add PSR workarounds (Jouni)
- Check for too low DSC BPC (Suraj)
- Improve HDCP wakeup robustness after suspend/resume (Suraj)
- Reduce ICP+ hotplug filter to 250 us to match DP spec (Suraj)
- Fix PSR sink enable sequence (Ville)
- Fix DP colorimetry detection (Ville)
- Apply i915gm/i945gm irq C-state workaround to CRC interrupts (Ville)

Merges:
- Backmerge to fix cross-tree conflicts (Jani)
- Backmerge to get v6.12-rc1 (Jani)

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/878quu6go9.fsf@intel.com
1  2 
drivers/gpu/drm/i915/display/intel_dsb.c
drivers/gpu/drm/i915/gem/i915_gem_ttm.c
drivers/gpu/drm/xe/Makefile
drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
drivers/gpu/drm/xe/display/xe_display.c

Simple merge
index ee3469d4ae730caab5b0825b1a05541bc4da54c4,97afa13ad4ce2dd80d3a2533a4efe458d3b478d5..0382beb4035b4ce3dc0b8ea4072e1611fbb09a16
@@@ -152,33 -152,9 +152,9 @@@ static inline void intel_uncore_write_n
  {
        struct xe_reg reg = XE_REG(i915_mmio_reg_offset(i915_reg));
  
 -      xe_mmio_write32(__compat_uncore_to_gt(uncore), reg, val);
 +      xe_mmio_write32(__compat_uncore_to_mmio(uncore), reg, val);
  }
  
- static inline void __iomem *intel_uncore_regs(struct intel_uncore *uncore)
- {
-       struct xe_device *xe = container_of(uncore, struct xe_device, uncore);
-       return xe_device_get_root_tile(xe)->mmio.regs;
- }
- /*
-  * The raw_reg_{read,write} macros are intended as a micro-optimization for
-  * interrupt handlers so that the pointer indirection on uncore->regs can
-  * be computed once (and presumably cached in a register) instead of generating
-  * extra load instructions for each MMIO access.
-  *
-  * Given that these macros are only intended for non-GSI interrupt registers
-  * (and the goal is to avoid extra instructions generated by the compiler),
-  * these macros do not account for uncore->gsi_offset.  Any caller that needs
-  * to use these macros on a GSI register is responsible for adding the
-  * appropriate GSI offset to the 'base' parameter.
-  */
- #define raw_reg_read(base, reg) \
-       readl(base + i915_mmio_reg_offset(reg))
- #define raw_reg_write(base, reg, value) \
-       writel(value, base + i915_mmio_reg_offset(reg))
  #define intel_uncore_forcewake_get(x, y) do { } while (0)
  #define intel_uncore_forcewake_put(x, y) do { } while (0)
  
index 26b2cae11d46de98c98107d1c0249d3a929aaf7e,b1730b58165612dfd037498f3b25fb1e78dba45d..ca00a365080fb239661541e8439373ab8aa4df62
@@@ -340,55 -356,9 +344,55 @@@ static void __xe_display_pm_suspend(str
  
        intel_opregion_suspend(display, s2idle ? PCI_D1 : PCI_D3cold);
  
-       intel_dmc_suspend(xe);
+       intel_dmc_suspend(display);
  }
  
-       intel_dmc_suspend(xe);
 +void xe_display_pm_suspend(struct xe_device *xe)
 +{
 +      __xe_display_pm_suspend(xe, false);
 +}
 +
 +void xe_display_pm_shutdown(struct xe_device *xe)
 +{
 +      struct intel_display *display = &xe->display;
 +
 +      if (!xe->info.probe_display)
 +              return;
 +
 +      intel_power_domains_disable(xe);
 +      intel_fbdev_set_suspend(&xe->drm, FBINFO_STATE_SUSPENDED, true);
 +      if (has_display(xe)) {
 +              drm_kms_helper_poll_disable(&xe->drm);
 +              intel_display_driver_disable_user_access(xe);
 +              intel_display_driver_suspend(xe);
 +      }
 +
 +      xe_display_flush_cleanup_work(xe);
 +      intel_dp_mst_suspend(xe);
 +      intel_hpd_cancel_work(xe);
 +
 +      if (has_display(xe))
 +              intel_display_driver_suspend_access(xe);
 +
 +      intel_encoder_suspend_all(display);
 +      intel_encoder_shutdown_all(display);
 +
 +      intel_opregion_suspend(display, PCI_D3cold);
 +
++      intel_dmc_suspend(display);
 +}
 +
 +void xe_display_pm_runtime_suspend(struct xe_device *xe)
 +{
 +      if (!xe->info.probe_display)
 +              return;
 +
 +      if (xe->d3cold.allowed)
 +              __xe_display_pm_suspend(xe, true);
 +
 +      intel_hpd_poll_enable(xe);
 +}
 +
  void xe_display_pm_suspend_late(struct xe_device *xe)
  {
        bool s2idle = suspend_to_idle();