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

drm/i915/rps: refactor display rps support

Make the gt rps code and display irq code interact via
intel_display_rps.[ch], instead of direct access. Add no-op static
inline stubs for xe instead of having a separate build unit doing
nothing. All of this clarifies the interfaces between i915 core and
display.

Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Link: https://lore.kernel.org/r/ef2a46dc8f30b72282494f54e98cb5fed7523b58.1746536745.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Jani Nikula 9536d602 7a3bf08a

+56 -39
+2 -3
drivers/gpu/drm/i915/display/intel_display_irq.c
··· 5 5 6 6 #include <drm/drm_vblank.h> 7 7 8 - #include "gt/intel_rps.h" 9 8 #include "i915_drv.h" 10 9 #include "i915_irq.h" 11 10 #include "i915_reg.h" ··· 14 15 #include "intel_de.h" 15 16 #include "intel_display_irq.h" 16 17 #include "intel_display_rpm.h" 18 + #include "intel_display_rps.h" 17 19 #include "intel_display_trace.h" 18 20 #include "intel_display_types.h" 19 21 #include "intel_dmc_wl.h" ··· 876 876 877 877 void ilk_display_irq_handler(struct intel_display *display, u32 de_iir) 878 878 { 879 - struct drm_i915_private __maybe_unused *dev_priv = to_i915(display->drm); 880 879 enum pipe pipe; 881 880 u32 hotplug_trigger = de_iir & DE_DP_A_HOTPLUG; 882 881 ··· 922 923 } 923 924 924 925 if (DISPLAY_VER(display) == 5 && de_iir & DE_PCU_EVENT) 925 - gen5_rps_irq_handler(&to_gt(dev_priv)->rps); 926 + ilk_display_rps_irq_handler(display); 926 927 } 927 928 928 929 void ivb_display_irq_handler(struct intel_display *display, u32 de_iir)
+27
drivers/gpu/drm/i915/display/intel_display_rps.c
··· 8 8 9 9 #include "gt/intel_rps.h" 10 10 #include "i915_drv.h" 11 + #include "i915_reg.h" 12 + #include "intel_display_irq.h" 11 13 #include "intel_display_rps.h" 12 14 #include "intel_display_types.h" 13 15 ··· 82 80 83 81 intel_rps_mark_interactive(&to_gt(i915)->rps, interactive); 84 82 state->rps_interactive = interactive; 83 + } 84 + 85 + void ilk_display_rps_enable(struct intel_display *display) 86 + { 87 + struct drm_i915_private *i915 = to_i915(display->drm); 88 + 89 + spin_lock(&i915->irq_lock); 90 + ilk_enable_display_irq(display, DE_PCU_EVENT); 91 + spin_unlock(&i915->irq_lock); 92 + } 93 + 94 + void ilk_display_rps_disable(struct intel_display *display) 95 + { 96 + struct drm_i915_private *i915 = to_i915(display->drm); 97 + 98 + spin_lock(&i915->irq_lock); 99 + ilk_disable_display_irq(display, DE_PCU_EVENT); 100 + spin_unlock(&i915->irq_lock); 101 + } 102 + 103 + void ilk_display_rps_irq_handler(struct intel_display *display) 104 + { 105 + struct drm_i915_private *i915 = to_i915(display->drm); 106 + 107 + gen5_rps_irq_handler(&to_gt(i915)->rps); 85 108 }
+24
drivers/gpu/drm/i915/display/intel_display_rps.h
··· 13 13 struct intel_atomic_state; 14 14 struct intel_display; 15 15 16 + #ifdef I915 16 17 void intel_display_rps_boost_after_vblank(struct drm_crtc *crtc, 17 18 struct dma_fence *fence); 18 19 void intel_display_rps_mark_interactive(struct intel_display *display, 19 20 struct intel_atomic_state *state, 20 21 bool interactive); 22 + void ilk_display_rps_enable(struct intel_display *display); 23 + void ilk_display_rps_disable(struct intel_display *display); 24 + void ilk_display_rps_irq_handler(struct intel_display *display); 25 + #else 26 + static inline void intel_display_rps_boost_after_vblank(struct drm_crtc *crtc, 27 + struct dma_fence *fence) 28 + { 29 + } 30 + static inline void intel_display_rps_mark_interactive(struct intel_display *display, 31 + struct intel_atomic_state *state, 32 + bool interactive) 33 + { 34 + } 35 + static inline void ilk_display_rps_enable(struct intel_display *display) 36 + { 37 + } 38 + static inline void ilk_display_rps_disable(struct intel_display *display) 39 + { 40 + } 41 + static inline void ilk_display_rps_irq_handler(struct intel_display *display) 42 + { 43 + } 44 + #endif 21 45 22 46 #endif /* __INTEL_DISPLAY_RPS_H__ */
+3 -7
drivers/gpu/drm/i915/gt/intel_rps.c
··· 8 8 #include <drm/intel/i915_drm.h> 9 9 10 10 #include "display/intel_display.h" 11 - #include "display/intel_display_irq.h" 11 + #include "display/intel_display_rps.h" 12 12 #include "i915_drv.h" 13 13 #include "i915_irq.h" 14 14 #include "i915_reg.h" ··· 608 608 rps->ips.last_count2 = intel_uncore_read(uncore, GFXEC); 609 609 rps->ips.last_time2 = ktime_get_raw_ns(); 610 610 611 - spin_lock(&i915->irq_lock); 612 - ilk_enable_display_irq(display, DE_PCU_EVENT); 613 - spin_unlock(&i915->irq_lock); 611 + ilk_display_rps_enable(display); 614 612 615 613 spin_unlock_irq(&mchdev_lock); 616 614 ··· 626 628 627 629 spin_lock_irq(&mchdev_lock); 628 630 629 - spin_lock(&i915->irq_lock); 630 - ilk_disable_display_irq(display, DE_PCU_EVENT); 631 - spin_unlock(&i915->irq_lock); 631 + ilk_display_rps_disable(display); 632 632 633 633 rgvswctl = intel_uncore_read16(uncore, MEMSWCTL); 634 634
-1
drivers/gpu/drm/xe/Makefile
··· 182 182 display/xe_display.o \ 183 183 display/xe_display_misc.o \ 184 184 display/xe_display_rpm.o \ 185 - display/xe_display_rps.o \ 186 185 display/xe_display_wa.o \ 187 186 display/xe_dsb_buffer.o \ 188 187 display/xe_fb_pin.o \
-11
drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
··· 1 - /* SPDX-License-Identifier: MIT */ 2 - /* 3 - * Copyright © 2023 Intel Corporation 4 - */ 5 - 6 - #ifndef __INTEL_RPS_H__ 7 - #define __INTEL_RPS_H__ 8 - 9 - #define gen5_rps_irq_handler(x) ({}) 10 - 11 - #endif /* __INTEL_RPS_H__ */
-17
drivers/gpu/drm/xe/display/xe_display_rps.c
··· 1 - // SPDX-License-Identifier: MIT 2 - /* 3 - * Copyright © 2023 Intel Corporation 4 - */ 5 - 6 - #include "intel_display_rps.h" 7 - 8 - void intel_display_rps_boost_after_vblank(struct drm_crtc *crtc, 9 - struct dma_fence *fence) 10 - { 11 - } 12 - 13 - void intel_display_rps_mark_interactive(struct intel_display *display, 14 - struct intel_atomic_state *state, 15 - bool interactive) 16 - { 17 - }