@@ -4933,7 +4933,7 @@ static u32 gen6_rps_pm_mask(struct drm_i915_private *dev_priv, u8 val)
49334933/* gen6_set_rps is called to update the frequency request, but should also be
49344934 * called when the range (min_delay and max_delay) is modified so that we can
49354935 * update the GEN6_RP_INTERRUPT_LIMITS register accordingly. */
4936- static void gen6_set_rps (struct drm_i915_private * dev_priv , u8 val )
4936+ static int gen6_set_rps (struct drm_i915_private * dev_priv , u8 val )
49374937{
49384938 WARN_ON (!mutex_is_locked (& dev_priv -> rps .hw_lock ));
49394939 WARN_ON (val > dev_priv -> rps .max_freq );
@@ -4968,10 +4968,14 @@ static void gen6_set_rps(struct drm_i915_private *dev_priv, u8 val)
49684968
49694969 dev_priv -> rps .cur_freq = val ;
49704970 trace_intel_gpu_freq_change (intel_gpu_freq (dev_priv , val ));
4971+
4972+ return 0 ;
49714973}
49724974
4973- static void valleyview_set_rps (struct drm_i915_private * dev_priv , u8 val )
4975+ static int valleyview_set_rps (struct drm_i915_private * dev_priv , u8 val )
49744976{
4977+ int err ;
4978+
49754979 WARN_ON (!mutex_is_locked (& dev_priv -> rps .hw_lock ));
49764980 WARN_ON (val > dev_priv -> rps .max_freq );
49774981 WARN_ON (val < dev_priv -> rps .min_freq );
@@ -4983,13 +4987,18 @@ static void valleyview_set_rps(struct drm_i915_private *dev_priv, u8 val)
49834987 I915_WRITE (GEN6_PMINTRMSK , gen6_rps_pm_mask (dev_priv , val ));
49844988
49854989 if (val != dev_priv -> rps .cur_freq ) {
4986- vlv_punit_write (dev_priv , PUNIT_REG_GPU_FREQ_REQ , val );
4990+ err = vlv_punit_write (dev_priv , PUNIT_REG_GPU_FREQ_REQ , val );
4991+ if (err )
4992+ return err ;
4993+
49874994 if (!IS_CHERRYVIEW (dev_priv ))
49884995 gen6_set_rps_thresholds (dev_priv , val );
49894996 }
49904997
49914998 dev_priv -> rps .cur_freq = val ;
49924999 trace_intel_gpu_freq_change (intel_gpu_freq (dev_priv , val ));
5000+
5001+ return 0 ;
49935002}
49945003
49955004/* vlv_set_rps_idle: Set the frequency to idle, if Gfx clocks are down
@@ -5002,6 +5011,7 @@ static void valleyview_set_rps(struct drm_i915_private *dev_priv, u8 val)
50025011static void vlv_set_rps_idle (struct drm_i915_private * dev_priv )
50035012{
50045013 u32 val = dev_priv -> rps .idle_freq ;
5014+ int err ;
50055015
50065016 if (dev_priv -> rps .cur_freq <= val )
50075017 return ;
@@ -5019,8 +5029,11 @@ static void vlv_set_rps_idle(struct drm_i915_private *dev_priv)
50195029 * power than the render powerwell.
50205030 */
50215031 intel_uncore_forcewake_get (dev_priv , FORCEWAKE_MEDIA );
5022- valleyview_set_rps (dev_priv , val );
5032+ err = valleyview_set_rps (dev_priv , val );
50235033 intel_uncore_forcewake_put (dev_priv , FORCEWAKE_MEDIA );
5034+
5035+ if (err )
5036+ DRM_ERROR ("Failed to set RPS for idle\n" );
50245037}
50255038
50265039void gen6_rps_busy (struct drm_i915_private * dev_priv )
@@ -5035,10 +5048,11 @@ void gen6_rps_busy(struct drm_i915_private *dev_priv)
50355048 gen6_enable_rps_interrupts (dev_priv );
50365049
50375050 /* Ensure we start at the user's desired frequency */
5038- intel_set_rps (dev_priv ,
5039- clamp (dev_priv -> rps .cur_freq ,
5040- dev_priv -> rps .min_freq_softlimit ,
5041- dev_priv -> rps .max_freq_softlimit ));
5051+ if (intel_set_rps (dev_priv ,
5052+ clamp (dev_priv -> rps .cur_freq ,
5053+ dev_priv -> rps .min_freq_softlimit ,
5054+ dev_priv -> rps .max_freq_softlimit )))
5055+ DRM_DEBUG_DRIVER ("Failed to set idle frequency\n" );
50425056 }
50435057 mutex_unlock (& dev_priv -> rps .hw_lock );
50445058}
@@ -5106,12 +5120,16 @@ void gen6_rps_boost(struct drm_i915_private *dev_priv,
51065120 spin_unlock (& dev_priv -> rps .client_lock );
51075121}
51085122
5109- void intel_set_rps (struct drm_i915_private * dev_priv , u8 val )
5123+ int intel_set_rps (struct drm_i915_private * dev_priv , u8 val )
51105124{
5125+ int err ;
5126+
51115127 if (IS_VALLEYVIEW (dev_priv ) || IS_CHERRYVIEW (dev_priv ))
5112- valleyview_set_rps (dev_priv , val );
5128+ err = valleyview_set_rps (dev_priv , val );
51135129 else
5114- gen6_set_rps (dev_priv , val );
5130+ err = gen6_set_rps (dev_priv , val );
5131+
5132+ return err ;
51155133}
51165134
51175135static void gen9_disable_rc6 (struct drm_i915_private * dev_priv )
@@ -5315,15 +5333,16 @@ static void gen6_init_rps_frequencies(struct drm_i915_private *dev_priv)
53155333}
53165334
53175335static void reset_rps (struct drm_i915_private * dev_priv ,
5318- void (* set )(struct drm_i915_private * , u8 ))
5336+ int (* set )(struct drm_i915_private * , u8 ))
53195337{
53205338 u8 freq = dev_priv -> rps .cur_freq ;
53215339
53225340 /* force a reset */
53235341 dev_priv -> rps .power = -1 ;
53245342 dev_priv -> rps .cur_freq = -1 ;
53255343
5326- set (dev_priv , freq );
5344+ if (set (dev_priv , freq ))
5345+ DRM_ERROR ("Failed to reset RPS to initial values\n" );
53275346}
53285347
53295348/* See the Gen9_GT_PM_Programming_Guide doc for the below */
0 commit comments