@@ -5149,6 +5149,7 @@ static void gen6_init_rps_frequencies(struct drm_i915_private *dev_priv)
5149
5149
}
5150
5150
5151
5151
dev_priv -> rps .idle_freq = dev_priv -> rps .min_freq ;
5152
+ dev_priv -> rps .cur_freq = dev_priv -> rps .idle_freq ;
5152
5153
5153
5154
/* Preserve min/max settings in case of re-init */
5154
5155
if (dev_priv -> rps .max_freq_softlimit == 0 )
@@ -5165,6 +5166,18 @@ static void gen6_init_rps_frequencies(struct drm_i915_private *dev_priv)
5165
5166
}
5166
5167
}
5167
5168
5169
+ static void reset_rps (struct drm_i915_private * dev_priv ,
5170
+ void (* set )(struct drm_i915_private * , u8 ))
5171
+ {
5172
+ u8 freq = dev_priv -> rps .cur_freq ;
5173
+
5174
+ /* force a reset */
5175
+ dev_priv -> rps .power = -1 ;
5176
+ dev_priv -> rps .cur_freq = -1 ;
5177
+
5178
+ set (dev_priv , freq );
5179
+ }
5180
+
5168
5181
/* See the Gen9_GT_PM_Programming_Guide doc for the below */
5169
5182
static void gen9_enable_rps (struct drm_i915_private * dev_priv )
5170
5183
{
@@ -5201,8 +5214,7 @@ static void gen9_enable_rps(struct drm_i915_private *dev_priv)
5201
5214
/* Leaning on the below call to gen6_set_rps to program/setup the
5202
5215
* Up/Down EI & threshold registers, as well as the RP_CONTROL,
5203
5216
* RP_INTERRUPT_LIMITS & RPNSWREQ registers */
5204
- dev_priv -> rps .power = HIGH_POWER ; /* force a reset */
5205
- gen6_set_rps (dev_priv , dev_priv -> rps .idle_freq );
5217
+ reset_rps (dev_priv , gen6_set_rps );
5206
5218
5207
5219
intel_uncore_forcewake_put (dev_priv , FORCEWAKE_ALL );
5208
5220
}
@@ -5348,8 +5360,7 @@ static void gen8_enable_rps(struct drm_i915_private *dev_priv)
5348
5360
5349
5361
/* 6: Ring frequency + overclocking (our driver does this later */
5350
5362
5351
- dev_priv -> rps .power = HIGH_POWER ; /* force a reset */
5352
- gen6_set_rps (dev_priv , dev_priv -> rps .idle_freq );
5363
+ reset_rps (dev_priv , gen6_set_rps );
5353
5364
5354
5365
intel_uncore_forcewake_put (dev_priv , FORCEWAKE_ALL );
5355
5366
}
@@ -5442,8 +5453,7 @@ static void gen6_enable_rps(struct drm_i915_private *dev_priv)
5442
5453
dev_priv -> rps .max_freq = pcu_mbox & 0xff ;
5443
5454
}
5444
5455
5445
- dev_priv -> rps .power = HIGH_POWER ; /* force a reset */
5446
- gen6_set_rps (dev_priv , dev_priv -> rps .idle_freq );
5456
+ reset_rps (dev_priv , gen6_set_rps );
5447
5457
5448
5458
rc6vids = 0 ;
5449
5459
ret = sandybridge_pcode_read (dev_priv , GEN6_PCODE_READ_RC6VIDS , & rc6vids );
@@ -5807,6 +5817,7 @@ static void valleyview_init_gt_powersave(struct drm_i915_private *dev_priv)
5807
5817
dev_priv -> rps .min_freq );
5808
5818
5809
5819
dev_priv -> rps .idle_freq = dev_priv -> rps .min_freq ;
5820
+ dev_priv -> rps .cur_freq = dev_priv -> rps .idle_freq ;
5810
5821
5811
5822
/* Preserve min/max settings in case of re-init */
5812
5823
if (dev_priv -> rps .max_freq_softlimit == 0 )
@@ -5871,6 +5882,7 @@ static void cherryview_init_gt_powersave(struct drm_i915_private *dev_priv)
5871
5882
"Odd GPU freq values\n" );
5872
5883
5873
5884
dev_priv -> rps .idle_freq = dev_priv -> rps .min_freq ;
5885
+ dev_priv -> rps .cur_freq = dev_priv -> rps .idle_freq ;
5874
5886
5875
5887
/* Preserve min/max settings in case of re-init */
5876
5888
if (dev_priv -> rps .max_freq_softlimit == 0 )
@@ -5970,16 +5982,7 @@ static void cherryview_enable_rps(struct drm_i915_private *dev_priv)
5970
5982
DRM_DEBUG_DRIVER ("GPLL enabled? %s\n" , yesno (val & GPLLENABLE ));
5971
5983
DRM_DEBUG_DRIVER ("GPU status: 0x%08x\n" , val );
5972
5984
5973
- dev_priv -> rps .cur_freq = (val >> 8 ) & 0xff ;
5974
- DRM_DEBUG_DRIVER ("current GPU freq: %d MHz (%u)\n" ,
5975
- intel_gpu_freq (dev_priv , dev_priv -> rps .cur_freq ),
5976
- dev_priv -> rps .cur_freq );
5977
-
5978
- DRM_DEBUG_DRIVER ("setting GPU freq to %d MHz (%u)\n" ,
5979
- intel_gpu_freq (dev_priv , dev_priv -> rps .idle_freq ),
5980
- dev_priv -> rps .idle_freq );
5981
-
5982
- valleyview_set_rps (dev_priv , dev_priv -> rps .idle_freq );
5985
+ reset_rps (dev_priv , valleyview_set_rps );
5983
5986
5984
5987
intel_uncore_forcewake_put (dev_priv , FORCEWAKE_ALL );
5985
5988
}
@@ -6059,16 +6062,7 @@ static void valleyview_enable_rps(struct drm_i915_private *dev_priv)
6059
6062
DRM_DEBUG_DRIVER ("GPLL enabled? %s\n" , yesno (val & GPLLENABLE ));
6060
6063
DRM_DEBUG_DRIVER ("GPU status: 0x%08x\n" , val );
6061
6064
6062
- dev_priv -> rps .cur_freq = (val >> 8 ) & 0xff ;
6063
- DRM_DEBUG_DRIVER ("current GPU freq: %d MHz (%u)\n" ,
6064
- intel_gpu_freq (dev_priv , dev_priv -> rps .cur_freq ),
6065
- dev_priv -> rps .cur_freq );
6066
-
6067
- DRM_DEBUG_DRIVER ("setting GPU freq to %d MHz (%u)\n" ,
6068
- intel_gpu_freq (dev_priv , dev_priv -> rps .idle_freq ),
6069
- dev_priv -> rps .idle_freq );
6070
-
6071
- valleyview_set_rps (dev_priv , dev_priv -> rps .idle_freq );
6065
+ reset_rps (dev_priv , valleyview_set_rps );
6072
6066
6073
6067
intel_uncore_forcewake_put (dev_priv , FORCEWAKE_ALL );
6074
6068
}
0 commit comments