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

drm/i915/wm: convert intel_wm.h external interfaces to struct intel_display

Going forward, struct intel_display is the main display device data
pointer. Convert the intel_wm.h interface as well as the hooks in struct
intel_wm_funcs to struct intel_display.

Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://lore.kernel.org/r/1085900b4e46bbb514e6918c321639ac380331ce.1744119460.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

+80 -68
+31 -20
drivers/gpu/drm/i915/display/i9xx_wm.c
··· 641 641 return enabled; 642 642 } 643 643 644 - static void pnv_update_wm(struct drm_i915_private *dev_priv) 644 + static void pnv_update_wm(struct intel_display *display) 645 645 { 646 + struct drm_i915_private *dev_priv = to_i915(display->drm); 646 647 struct intel_crtc *crtc; 647 648 const struct cxsr_latency *latency; 648 649 u32 reg; ··· 2124 2123 mutex_unlock(&dev_priv->display.wm.wm_mutex); 2125 2124 } 2126 2125 2127 - static void i965_update_wm(struct drm_i915_private *dev_priv) 2126 + static void i965_update_wm(struct intel_display *display) 2128 2127 { 2128 + struct drm_i915_private *dev_priv = to_i915(display->drm); 2129 2129 struct intel_crtc *crtc; 2130 2130 int srwm = 1; 2131 2131 int cursor_sr = 16; ··· 2218 2216 return NULL; 2219 2217 } 2220 2218 2221 - static void i9xx_update_wm(struct drm_i915_private *dev_priv) 2219 + static void i9xx_update_wm(struct intel_display *display) 2222 2220 { 2221 + struct drm_i915_private *dev_priv = to_i915(display->drm); 2223 2222 const struct intel_watermark_params *wm_info; 2224 2223 u32 fwater_lo; 2225 2224 u32 fwater_hi; ··· 2362 2359 intel_set_memory_cxsr(dev_priv, true); 2363 2360 } 2364 2361 2365 - static void i845_update_wm(struct drm_i915_private *dev_priv) 2362 + static void i845_update_wm(struct intel_display *display) 2366 2363 { 2364 + struct drm_i915_private *dev_priv = to_i915(display->drm); 2367 2365 struct intel_crtc *crtc; 2368 2366 u32 fwater_lo; 2369 2367 int planea_wm; ··· 2817 2813 2818 2814 static void snb_wm_latency_quirk(struct drm_i915_private *dev_priv) 2819 2815 { 2816 + struct intel_display *display = &dev_priv->display; 2820 2817 bool changed; 2821 2818 2822 2819 /* ··· 2833 2828 2834 2829 drm_dbg_kms(&dev_priv->drm, 2835 2830 "WM latency values increased to avoid potential underruns\n"); 2836 - intel_print_wm_latency(dev_priv, "Primary", dev_priv->display.wm.pri_latency); 2837 - intel_print_wm_latency(dev_priv, "Sprite", dev_priv->display.wm.spr_latency); 2838 - intel_print_wm_latency(dev_priv, "Cursor", dev_priv->display.wm.cur_latency); 2831 + intel_print_wm_latency(display, "Primary", dev_priv->display.wm.pri_latency); 2832 + intel_print_wm_latency(display, "Sprite", dev_priv->display.wm.spr_latency); 2833 + intel_print_wm_latency(display, "Cursor", dev_priv->display.wm.cur_latency); 2839 2834 } 2840 2835 2841 2836 static void snb_wm_lp3_irq_quirk(struct drm_i915_private *dev_priv) 2842 2837 { 2838 + struct intel_display *display = &dev_priv->display; 2843 2839 /* 2844 2840 * On some SNB machines (Thinkpad X220 Tablet at least) 2845 2841 * LP3 usage can cause vblank interrupts to be lost. ··· 2863 2857 2864 2858 drm_dbg_kms(&dev_priv->drm, 2865 2859 "LP3 watermarks disabled due to potential for lost interrupts\n"); 2866 - intel_print_wm_latency(dev_priv, "Primary", dev_priv->display.wm.pri_latency); 2867 - intel_print_wm_latency(dev_priv, "Sprite", dev_priv->display.wm.spr_latency); 2868 - intel_print_wm_latency(dev_priv, "Cursor", dev_priv->display.wm.cur_latency); 2860 + intel_print_wm_latency(display, "Primary", dev_priv->display.wm.pri_latency); 2861 + intel_print_wm_latency(display, "Sprite", dev_priv->display.wm.spr_latency); 2862 + intel_print_wm_latency(display, "Cursor", dev_priv->display.wm.cur_latency); 2869 2863 } 2870 2864 2871 2865 static void ilk_setup_wm_latency(struct drm_i915_private *dev_priv) 2872 2866 { 2867 + struct intel_display *display = &dev_priv->display; 2868 + 2873 2869 if (IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) 2874 2870 hsw_read_wm_latency(dev_priv, dev_priv->display.wm.pri_latency); 2875 2871 else if (DISPLAY_VER(dev_priv) >= 6) ··· 2887 2879 intel_fixup_spr_wm_latency(dev_priv, dev_priv->display.wm.spr_latency); 2888 2880 intel_fixup_cur_wm_latency(dev_priv, dev_priv->display.wm.cur_latency); 2889 2881 2890 - intel_print_wm_latency(dev_priv, "Primary", dev_priv->display.wm.pri_latency); 2891 - intel_print_wm_latency(dev_priv, "Sprite", dev_priv->display.wm.spr_latency); 2892 - intel_print_wm_latency(dev_priv, "Cursor", dev_priv->display.wm.cur_latency); 2882 + intel_print_wm_latency(display, "Primary", dev_priv->display.wm.pri_latency); 2883 + intel_print_wm_latency(display, "Sprite", dev_priv->display.wm.spr_latency); 2884 + intel_print_wm_latency(display, "Cursor", dev_priv->display.wm.cur_latency); 2893 2885 2894 2886 if (DISPLAY_VER(dev_priv) == 6) { 2895 2887 snb_wm_latency_quirk(dev_priv); ··· 3767 3759 #undef _FW_WM 3768 3760 #undef _FW_WM_VLV 3769 3761 3770 - static void g4x_wm_get_hw_state(struct drm_i915_private *dev_priv) 3762 + static void g4x_wm_get_hw_state(struct intel_display *display) 3771 3763 { 3764 + struct drm_i915_private *dev_priv = to_i915(display->drm); 3772 3765 struct g4x_wm_values *wm = &dev_priv->display.wm.g4x; 3773 3766 struct intel_crtc *crtc; 3774 3767 ··· 3861 3852 str_yes_no(wm->fbc_en)); 3862 3853 } 3863 3854 3864 - static void g4x_wm_sanitize(struct drm_i915_private *dev_priv) 3855 + static void g4x_wm_sanitize(struct intel_display *display) 3865 3856 { 3866 - struct intel_display *display = &dev_priv->display; 3857 + struct drm_i915_private *dev_priv = to_i915(display->drm); 3867 3858 struct intel_plane *plane; 3868 3859 struct intel_crtc *crtc; 3869 3860 ··· 3911 3902 mutex_unlock(&dev_priv->display.wm.wm_mutex); 3912 3903 } 3913 3904 3914 - static void vlv_wm_get_hw_state(struct drm_i915_private *dev_priv) 3905 + static void vlv_wm_get_hw_state(struct intel_display *display) 3915 3906 { 3907 + struct drm_i915_private *dev_priv = to_i915(display->drm); 3916 3908 struct vlv_wm_values *wm = &dev_priv->display.wm.vlv; 3917 3909 struct intel_crtc *crtc; 3918 3910 u32 val; ··· 4012 4002 wm->sr.plane, wm->sr.cursor, wm->level, wm->cxsr); 4013 4003 } 4014 4004 4015 - static void vlv_wm_sanitize(struct drm_i915_private *dev_priv) 4005 + static void vlv_wm_sanitize(struct intel_display *display) 4016 4006 { 4017 - struct intel_display *display = &dev_priv->display; 4007 + struct drm_i915_private *dev_priv = to_i915(display->drm); 4018 4008 struct intel_plane *plane; 4019 4009 struct intel_crtc *crtc; 4020 4010 ··· 4075 4065 */ 4076 4066 } 4077 4067 4078 - static void ilk_wm_get_hw_state(struct drm_i915_private *dev_priv) 4068 + static void ilk_wm_get_hw_state(struct intel_display *display) 4079 4069 { 4070 + struct drm_i915_private *dev_priv = to_i915(display->drm); 4080 4071 struct ilk_wm_values *hw = &dev_priv->display.wm.hw; 4081 4072 struct intel_crtc *crtc; 4082 4073
+4 -6
drivers/gpu/drm/i915/display/intel_display.c
··· 1054 1054 intel_frontbuffer_flip(dev_priv, new_crtc_state->fb_bits); 1055 1055 1056 1056 if (new_crtc_state->update_wm_post && new_crtc_state->hw.active) 1057 - intel_update_watermarks(dev_priv); 1057 + intel_update_watermarks(display); 1058 1058 1059 1059 intel_fbc_post_update(state, crtc); 1060 1060 ··· 1258 1258 */ 1259 1259 if (!intel_initial_watermarks(state, crtc)) 1260 1260 if (new_crtc_state->update_wm_pre) 1261 - intel_update_watermarks(dev_priv); 1261 + intel_update_watermarks(display); 1262 1262 } 1263 1263 1264 1264 /* ··· 2072 2072 struct intel_display *display = to_intel_display(crtc); 2073 2073 const struct intel_crtc_state *new_crtc_state = 2074 2074 intel_atomic_get_new_crtc_state(state, crtc); 2075 - struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 2076 2075 enum pipe pipe = crtc->pipe; 2077 2076 2078 2077 if (drm_WARN_ON(display->drm, crtc->active)) ··· 2095 2096 intel_color_modeset(new_crtc_state); 2096 2097 2097 2098 if (!intel_initial_watermarks(state, crtc)) 2098 - intel_update_watermarks(dev_priv); 2099 + intel_update_watermarks(display); 2099 2100 intel_enable_transcoder(new_crtc_state); 2100 2101 2101 2102 intel_crtc_vblank_on(new_crtc_state); ··· 2111 2112 struct intel_crtc *crtc) 2112 2113 { 2113 2114 struct intel_display *display = to_intel_display(state); 2114 - struct drm_i915_private *dev_priv = to_i915(display->drm); 2115 2115 struct intel_crtc_state *old_crtc_state = 2116 2116 intel_atomic_get_old_crtc_state(state, crtc); 2117 2117 enum pipe pipe = crtc->pipe; ··· 2147 2149 intel_set_cpu_fifo_underrun_reporting(display, pipe, false); 2148 2150 2149 2151 if (!display->funcs.wm->initial_watermarks) 2150 - intel_update_watermarks(dev_priv); 2152 + intel_update_watermarks(display); 2151 2153 2152 2154 /* clock the pipe down to 640x480@60 to potentially save power */ 2153 2155 if (display->platform.i830)
+3 -3
drivers/gpu/drm/i915/display/intel_display_core.h
··· 80 80 /* functions used for watermark calcs for display. */ 81 81 struct intel_wm_funcs { 82 82 /* update_wm is for legacy wm management */ 83 - void (*update_wm)(struct drm_i915_private *dev_priv); 83 + void (*update_wm)(struct intel_display *display); 84 84 int (*compute_watermarks)(struct intel_atomic_state *state, 85 85 struct intel_crtc *crtc); 86 86 void (*initial_watermarks)(struct intel_atomic_state *state, ··· 90 90 void (*optimize_watermarks)(struct intel_atomic_state *state, 91 91 struct intel_crtc *crtc); 92 92 int (*compute_global_watermarks)(struct intel_atomic_state *state); 93 - void (*get_hw_state)(struct drm_i915_private *i915); 94 - void (*sanitize)(struct drm_i915_private *i915); 93 + void (*get_hw_state)(struct intel_display *display); 94 + void (*sanitize)(struct intel_display *display); 95 95 }; 96 96 97 97 struct intel_audio_state {
+1 -2
drivers/gpu/drm/i915/display/intel_display_debugfs.c
··· 826 826 827 827 void intel_display_debugfs_register(struct intel_display *display) 828 828 { 829 - struct drm_i915_private *i915 = to_i915(display->drm); 830 829 struct drm_minor *minor = display->drm->primary; 831 830 832 831 debugfs_create_file("i915_fifo_underrun_reset", 0644, minor->debugfs_root, ··· 843 844 intel_hpd_debugfs_register(display); 844 845 intel_opregion_debugfs_register(display); 845 846 intel_psr_debugfs_register(display); 846 - intel_wm_debugfs_register(i915); 847 + intel_wm_debugfs_register(display); 847 848 intel_display_debugfs_params(display); 848 849 } 849 850
+1 -1
drivers/gpu/drm/i915/display/intel_display_driver.c
··· 422 422 if (!HAS_DISPLAY(display)) 423 423 return 0; 424 424 425 - intel_wm_init(i915); 425 + intel_wm_init(display); 426 426 427 427 intel_panel_sanitize_ssc(display); 428 428
+5 -6
drivers/gpu/drm/i915/display/intel_modeset_setup.c
··· 155 155 static void intel_crtc_disable_noatomic_complete(struct intel_crtc *crtc) 156 156 { 157 157 struct intel_display *display = to_intel_display(crtc); 158 - struct drm_i915_private *i915 = to_i915(crtc->base.dev); 159 158 struct intel_pmdemand_state *pmdemand_state = 160 - to_intel_pmdemand_state(i915->display.pmdemand.obj.state); 159 + to_intel_pmdemand_state(display->pmdemand.obj.state); 161 160 struct intel_crtc_state *crtc_state = 162 161 to_intel_crtc_state(crtc->base.state); 163 162 enum pipe pipe = crtc->pipe; ··· 168 169 reset_crtc_encoder_state(crtc); 169 170 170 171 intel_fbc_disable(crtc); 171 - intel_update_watermarks(i915); 172 + intel_update_watermarks(display); 172 173 173 174 intel_display_power_put_all_in_set(display, &crtc->enabled_power_domains); 174 175 ··· 873 874 874 875 /* TODO move here (or even earlier?) on all platforms */ 875 876 if (DISPLAY_VER(display) >= 9) 876 - intel_wm_get_hw_state(i915); 877 + intel_wm_get_hw_state(display); 877 878 878 879 intel_bw_update_hw_state(display); 879 880 intel_cdclk_update_hw_state(display); ··· 987 988 988 989 /* TODO move earlier on all platforms */ 989 990 if (DISPLAY_VER(display) < 9) 990 - intel_wm_get_hw_state(i915); 991 - intel_wm_sanitize(i915); 991 + intel_wm_get_hw_state(display); 992 + intel_wm_sanitize(display); 992 993 993 994 for_each_intel_crtc(&i915->drm, crtc) { 994 995 struct intel_crtc_state *crtc_state =
+22 -19
drivers/gpu/drm/i915/display/intel_wm.c
··· 13 13 14 14 /** 15 15 * intel_update_watermarks - update FIFO watermark values based on current modes 16 - * @i915: i915 device 16 + * @display: display device 17 17 * 18 18 * Calculate watermark values for the various WM regs based on current mode 19 19 * and plane configuration. ··· 44 44 * We don't use the sprite, so we can ignore that. And on Crestline we have 45 45 * to set the non-SR watermarks to 8. 46 46 */ 47 - void intel_update_watermarks(struct drm_i915_private *i915) 47 + void intel_update_watermarks(struct intel_display *display) 48 48 { 49 - if (i915->display.funcs.wm->update_wm) 50 - i915->display.funcs.wm->update_wm(i915); 49 + if (display->funcs.wm->update_wm) 50 + display->funcs.wm->update_wm(display); 51 51 } 52 52 53 53 int intel_wm_compute(struct intel_atomic_state *state, ··· 102 102 return 0; 103 103 } 104 104 105 - void intel_wm_get_hw_state(struct drm_i915_private *i915) 105 + void intel_wm_get_hw_state(struct intel_display *display) 106 106 { 107 - if (i915->display.funcs.wm->get_hw_state) 108 - return i915->display.funcs.wm->get_hw_state(i915); 107 + if (display->funcs.wm->get_hw_state) 108 + return display->funcs.wm->get_hw_state(display); 109 109 } 110 110 111 - void intel_wm_sanitize(struct drm_i915_private *i915) 111 + void intel_wm_sanitize(struct intel_display *display) 112 112 { 113 - if (i915->display.funcs.wm->sanitize) 114 - return i915->display.funcs.wm->sanitize(i915); 113 + if (display->funcs.wm->sanitize) 114 + return display->funcs.wm->sanitize(display); 115 115 } 116 116 117 117 bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state, ··· 137 137 return plane_state->uapi.visible; 138 138 } 139 139 140 - void intel_print_wm_latency(struct drm_i915_private *dev_priv, 140 + void intel_print_wm_latency(struct intel_display *display, 141 141 const char *name, const u16 wm[]) 142 142 { 143 143 int level; 144 144 145 - for (level = 0; level < dev_priv->display.wm.num_levels; level++) { 145 + for (level = 0; level < display->wm.num_levels; level++) { 146 146 unsigned int latency = wm[level]; 147 147 148 148 if (latency == 0) { 149 - drm_dbg_kms(&dev_priv->drm, 149 + drm_dbg_kms(display->drm, 150 150 "%s WM%d latency not provided\n", 151 151 name, level); 152 152 continue; ··· 156 156 * - latencies are in us on gen9. 157 157 * - before then, WM1+ latency values are in 0.5us units 158 158 */ 159 - if (DISPLAY_VER(dev_priv) >= 9) 159 + if (DISPLAY_VER(display) >= 9) 160 160 latency *= 10; 161 161 else if (level > 0) 162 162 latency *= 5; 163 163 164 - drm_dbg_kms(&dev_priv->drm, 164 + drm_dbg_kms(display->drm, 165 165 "%s WM%d latency %u (%u.%u usec)\n", name, level, 166 166 wm[level], latency / 10, latency % 10); 167 167 } 168 168 } 169 169 170 - void intel_wm_init(struct drm_i915_private *i915) 170 + void intel_wm_init(struct intel_display *display) 171 171 { 172 - if (DISPLAY_VER(i915) >= 9) 172 + struct drm_i915_private *i915 = to_i915(display->drm); 173 + 174 + if (DISPLAY_VER(display) >= 9) 173 175 skl_wm_init(i915); 174 176 else 175 177 i9xx_wm_init(i915); ··· 387 385 .write = cur_wm_latency_write 388 386 }; 389 387 390 - void intel_wm_debugfs_register(struct drm_i915_private *i915) 388 + void intel_wm_debugfs_register(struct intel_display *display) 391 389 { 392 - struct drm_minor *minor = i915->drm.primary; 390 + struct drm_i915_private *i915 = to_i915(display->drm); 391 + struct drm_minor *minor = display->drm->primary; 393 392 394 393 debugfs_create_file("i915_pri_wm_latency", 0644, minor->debugfs_root, 395 394 i915, &i915_pri_wm_latency_fops);
+7 -7
drivers/gpu/drm/i915/display/intel_wm.h
··· 8 8 9 9 #include <linux/types.h> 10 10 11 - struct drm_i915_private; 12 11 struct intel_atomic_state; 13 12 struct intel_crtc; 14 13 struct intel_crtc_state; 14 + struct intel_display; 15 15 struct intel_plane_state; 16 16 17 - void intel_update_watermarks(struct drm_i915_private *i915); 17 + void intel_update_watermarks(struct intel_display *display); 18 18 int intel_wm_compute(struct intel_atomic_state *state, 19 19 struct intel_crtc *crtc); 20 20 bool intel_initial_watermarks(struct intel_atomic_state *state, ··· 24 24 void intel_optimize_watermarks(struct intel_atomic_state *state, 25 25 struct intel_crtc *crtc); 26 26 int intel_compute_global_watermarks(struct intel_atomic_state *state); 27 - void intel_wm_get_hw_state(struct drm_i915_private *i915); 28 - void intel_wm_sanitize(struct drm_i915_private *i915); 27 + void intel_wm_get_hw_state(struct intel_display *display); 28 + void intel_wm_sanitize(struct intel_display *display); 29 29 bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state, 30 30 const struct intel_plane_state *plane_state); 31 - void intel_print_wm_latency(struct drm_i915_private *i915, 31 + void intel_print_wm_latency(struct intel_display *display, 32 32 const char *name, const u16 wm[]); 33 - void intel_wm_init(struct drm_i915_private *i915); 34 - void intel_wm_debugfs_register(struct drm_i915_private *i915); 33 + void intel_wm_init(struct intel_display *display); 34 + void intel_wm_debugfs_register(struct intel_display *display); 35 35 36 36 #endif /* __INTEL_WM_H__ */
+6 -4
drivers/gpu/drm/i915/display/skl_watermark.c
··· 3106 3106 } 3107 3107 } 3108 3108 3109 - static void skl_wm_get_hw_state(struct drm_i915_private *i915) 3109 + static void skl_wm_get_hw_state(struct intel_display *display) 3110 3110 { 3111 - struct intel_display *display = &i915->display; 3111 + struct drm_i915_private *i915 = to_i915(display->drm); 3112 3112 struct intel_dbuf_state *dbuf_state = 3113 3113 to_intel_dbuf_state(i915->display.dbuf.obj.state); 3114 3114 struct intel_crtc *crtc; ··· 3339 3339 else 3340 3340 skl_read_wm_latency(i915, display->wm.skl_latency); 3341 3341 3342 - intel_print_wm_latency(i915, "Gen9 Plane", display->wm.skl_latency); 3342 + intel_print_wm_latency(display, "Gen9 Plane", display->wm.skl_latency); 3343 3343 } 3344 3344 3345 3345 static struct intel_global_state *intel_dbuf_duplicate_state(struct intel_global_obj *obj) ··· 3800 3800 } 3801 3801 } 3802 3802 3803 - static void skl_wm_sanitize(struct drm_i915_private *i915) 3803 + static void skl_wm_sanitize(struct intel_display *display) 3804 3804 { 3805 + struct drm_i915_private *i915 = to_i915(display->drm); 3806 + 3805 3807 skl_mbus_sanitize(i915); 3806 3808 skl_dbuf_sanitize(i915); 3807 3809 }