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

Configure Feed

Select the types of activity you want to include in your feed.

drm/i915/cdclk: Plumb the full atomic state deeper

Various parts of the cdclk code need access the full atomic
state. Currently it's being dug out via the cdclk_state->base.state
pointer, which is not great as that pointer isn't always valid.
Instead plumb the full atomic state from the top so that it's
clear that it is in fact valid.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240528184945.24083-1-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>

+35 -25
+35 -25
drivers/gpu/drm/i915/display/intel_cdclk.c
··· 113 113 void (*set_cdclk)(struct drm_i915_private *i915, 114 114 const struct intel_cdclk_config *cdclk_config, 115 115 enum pipe pipe); 116 - int (*modeset_calc_cdclk)(struct intel_cdclk_state *state); 116 + int (*modeset_calc_cdclk)(struct intel_atomic_state *state); 117 117 u8 (*calc_voltage_level)(int cdclk); 118 118 }; 119 119 ··· 130 130 dev_priv->display.funcs.cdclk->set_cdclk(dev_priv, cdclk_config, pipe); 131 131 } 132 132 133 - static int intel_cdclk_modeset_calc_cdclk(struct drm_i915_private *dev_priv, 134 - struct intel_cdclk_state *cdclk_config) 133 + static int intel_cdclk_modeset_calc_cdclk(struct intel_atomic_state *state) 135 134 { 136 - return dev_priv->display.funcs.cdclk->modeset_calc_cdclk(cdclk_config); 135 + struct drm_i915_private *dev_priv = to_i915(state->base.dev); 136 + 137 + return dev_priv->display.funcs.cdclk->modeset_calc_cdclk(state); 137 138 } 138 139 139 140 static u8 intel_cdclk_calc_voltage_level(struct drm_i915_private *dev_priv, ··· 2835 2834 return min_cdclk; 2836 2835 } 2837 2836 2838 - static int intel_compute_min_cdclk(struct intel_cdclk_state *cdclk_state) 2837 + static int intel_compute_min_cdclk(struct intel_atomic_state *state) 2839 2838 { 2840 - struct intel_atomic_state *state = cdclk_state->base.state; 2841 2839 struct drm_i915_private *dev_priv = to_i915(state->base.dev); 2840 + struct intel_cdclk_state *cdclk_state = 2841 + intel_atomic_get_new_cdclk_state(state); 2842 2842 const struct intel_bw_state *bw_state; 2843 2843 struct intel_crtc *crtc; 2844 2844 struct intel_crtc_state *crtc_state; ··· 2918 2916 * future platforms this code will need to be 2919 2917 * adjusted. 2920 2918 */ 2921 - static int bxt_compute_min_voltage_level(struct intel_cdclk_state *cdclk_state) 2919 + static int bxt_compute_min_voltage_level(struct intel_atomic_state *state) 2922 2920 { 2923 - struct intel_atomic_state *state = cdclk_state->base.state; 2924 2921 struct drm_i915_private *dev_priv = to_i915(state->base.dev); 2922 + struct intel_cdclk_state *cdclk_state = 2923 + intel_atomic_get_new_cdclk_state(state); 2925 2924 struct intel_crtc *crtc; 2926 2925 struct intel_crtc_state *crtc_state; 2927 2926 u8 min_voltage_level; ··· 2955 2952 return min_voltage_level; 2956 2953 } 2957 2954 2958 - static int vlv_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) 2955 + static int vlv_modeset_calc_cdclk(struct intel_atomic_state *state) 2959 2956 { 2960 - struct intel_atomic_state *state = cdclk_state->base.state; 2961 2957 struct drm_i915_private *dev_priv = to_i915(state->base.dev); 2958 + struct intel_cdclk_state *cdclk_state = 2959 + intel_atomic_get_new_cdclk_state(state); 2962 2960 int min_cdclk, cdclk; 2963 2961 2964 - min_cdclk = intel_compute_min_cdclk(cdclk_state); 2962 + min_cdclk = intel_compute_min_cdclk(state); 2965 2963 if (min_cdclk < 0) 2966 2964 return min_cdclk; 2967 2965 ··· 2985 2981 return 0; 2986 2982 } 2987 2983 2988 - static int bdw_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) 2984 + static int bdw_modeset_calc_cdclk(struct intel_atomic_state *state) 2989 2985 { 2986 + struct intel_cdclk_state *cdclk_state = 2987 + intel_atomic_get_new_cdclk_state(state); 2990 2988 int min_cdclk, cdclk; 2991 2989 2992 - min_cdclk = intel_compute_min_cdclk(cdclk_state); 2990 + min_cdclk = intel_compute_min_cdclk(state); 2993 2991 if (min_cdclk < 0) 2994 2992 return min_cdclk; 2995 2993 ··· 3014 3008 return 0; 3015 3009 } 3016 3010 3017 - static int skl_dpll0_vco(struct intel_cdclk_state *cdclk_state) 3011 + static int skl_dpll0_vco(struct intel_atomic_state *state) 3018 3012 { 3019 - struct intel_atomic_state *state = cdclk_state->base.state; 3020 3013 struct drm_i915_private *dev_priv = to_i915(state->base.dev); 3014 + struct intel_cdclk_state *cdclk_state = 3015 + intel_atomic_get_new_cdclk_state(state); 3021 3016 struct intel_crtc *crtc; 3022 3017 struct intel_crtc_state *crtc_state; 3023 3018 int vco, i; ··· 3052 3045 return vco; 3053 3046 } 3054 3047 3055 - static int skl_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) 3048 + static int skl_modeset_calc_cdclk(struct intel_atomic_state *state) 3056 3049 { 3050 + struct intel_cdclk_state *cdclk_state = 3051 + intel_atomic_get_new_cdclk_state(state); 3057 3052 int min_cdclk, cdclk, vco; 3058 3053 3059 - min_cdclk = intel_compute_min_cdclk(cdclk_state); 3054 + min_cdclk = intel_compute_min_cdclk(state); 3060 3055 if (min_cdclk < 0) 3061 3056 return min_cdclk; 3062 3057 3063 - vco = skl_dpll0_vco(cdclk_state); 3058 + vco = skl_dpll0_vco(state); 3064 3059 3065 3060 cdclk = skl_calc_cdclk(min_cdclk, vco); 3066 3061 ··· 3085 3076 return 0; 3086 3077 } 3087 3078 3088 - static int bxt_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) 3079 + static int bxt_modeset_calc_cdclk(struct intel_atomic_state *state) 3089 3080 { 3090 - struct intel_atomic_state *state = cdclk_state->base.state; 3091 3081 struct drm_i915_private *dev_priv = to_i915(state->base.dev); 3082 + struct intel_cdclk_state *cdclk_state = 3083 + intel_atomic_get_new_cdclk_state(state); 3092 3084 int min_cdclk, min_voltage_level, cdclk, vco; 3093 3085 3094 - min_cdclk = intel_compute_min_cdclk(cdclk_state); 3086 + min_cdclk = intel_compute_min_cdclk(state); 3095 3087 if (min_cdclk < 0) 3096 3088 return min_cdclk; 3097 3089 3098 - min_voltage_level = bxt_compute_min_voltage_level(cdclk_state); 3090 + min_voltage_level = bxt_compute_min_voltage_level(state); 3099 3091 if (min_voltage_level < 0) 3100 3092 return min_voltage_level; 3101 3093 ··· 3124 3114 return 0; 3125 3115 } 3126 3116 3127 - static int fixed_modeset_calc_cdclk(struct intel_cdclk_state *cdclk_state) 3117 + static int fixed_modeset_calc_cdclk(struct intel_atomic_state *state) 3128 3118 { 3129 3119 int min_cdclk; 3130 3120 ··· 3133 3123 * check that the required minimum frequency doesn't exceed 3134 3124 * the actual cdclk frequency. 3135 3125 */ 3136 - min_cdclk = intel_compute_min_cdclk(cdclk_state); 3126 + min_cdclk = intel_compute_min_cdclk(state); 3137 3127 if (min_cdclk < 0) 3138 3128 return min_cdclk; 3139 3129 ··· 3273 3263 new_cdclk_state->active_pipes = 3274 3264 intel_calc_active_pipes(state, old_cdclk_state->active_pipes); 3275 3265 3276 - ret = intel_cdclk_modeset_calc_cdclk(dev_priv, new_cdclk_state); 3266 + ret = intel_cdclk_modeset_calc_cdclk(state); 3277 3267 if (ret) 3278 3268 return ret; 3279 3269