aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/gvt/kvmgt.c6
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c26
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h16
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c4
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h3
-rw-r--r--drivers/gpu/drm/i915/intel_display.c20
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
-rw-r--r--drivers/gpu/drm/i915/intel_lpe_audio.c4
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c101
-rw-r--r--drivers/gpu/drm/i915/intel_workarounds.c3
10 files changed, 123 insertions, 62 deletions
diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
index 718ab307a500..4d2f53ae9f0f 100644
--- a/drivers/gpu/drm/i915/gvt/kvmgt.c
+++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
@@ -185,12 +185,6 @@ static int gvt_dma_map_page(struct intel_vgpu *vgpu, unsigned long gfn,
185 if (ret) 185 if (ret)
186 return ret; 186 return ret;
187 187
188 if (!pfn_valid(pfn)) {
189 gvt_vgpu_err("pfn 0x%lx is not mem backed\n", pfn);
190 vfio_unpin_pages(mdev_dev(vgpu->vdev.mdev), &gfn, 1);
191 return -EINVAL;
192 }
193
194 /* Setup DMA mapping. */ 188 /* Setup DMA mapping. */
195 *dma_addr = dma_map_page(dev, page, 0, size, PCI_DMA_BIDIRECTIONAL); 189 *dma_addr = dma_map_page(dev, page, 0, size, PCI_DMA_BIDIRECTIONAL);
196 ret = dma_mapping_error(dev, *dma_addr); 190 ret = dma_mapping_error(dev, *dma_addr);
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index b3aefd623557..f9ce35da4123 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1218,7 +1218,8 @@ static int i915_frequency_info(struct seq_file *m, void *unused)
1218 rpcurup, GT_PM_INTERVAL_TO_US(dev_priv, rpcurup)); 1218 rpcurup, GT_PM_INTERVAL_TO_US(dev_priv, rpcurup));
1219 seq_printf(m, "RP PREV UP: %d (%dus)\n", 1219 seq_printf(m, "RP PREV UP: %d (%dus)\n",
1220 rpprevup, GT_PM_INTERVAL_TO_US(dev_priv, rpprevup)); 1220 rpprevup, GT_PM_INTERVAL_TO_US(dev_priv, rpprevup));
1221 seq_printf(m, "Up threshold: %d%%\n", rps->up_threshold); 1221 seq_printf(m, "Up threshold: %d%%\n",
1222 rps->power.up_threshold);
1222 1223
1223 seq_printf(m, "RP CUR DOWN EI: %d (%dus)\n", 1224 seq_printf(m, "RP CUR DOWN EI: %d (%dus)\n",
1224 rpdownei, GT_PM_INTERVAL_TO_US(dev_priv, rpdownei)); 1225 rpdownei, GT_PM_INTERVAL_TO_US(dev_priv, rpdownei));
@@ -1226,7 +1227,8 @@ static int i915_frequency_info(struct seq_file *m, void *unused)
1226 rpcurdown, GT_PM_INTERVAL_TO_US(dev_priv, rpcurdown)); 1227 rpcurdown, GT_PM_INTERVAL_TO_US(dev_priv, rpcurdown));
1227 seq_printf(m, "RP PREV DOWN: %d (%dus)\n", 1228 seq_printf(m, "RP PREV DOWN: %d (%dus)\n",
1228 rpprevdown, GT_PM_INTERVAL_TO_US(dev_priv, rpprevdown)); 1229 rpprevdown, GT_PM_INTERVAL_TO_US(dev_priv, rpprevdown));
1229 seq_printf(m, "Down threshold: %d%%\n", rps->down_threshold); 1230 seq_printf(m, "Down threshold: %d%%\n",
1231 rps->power.down_threshold);
1230 1232
1231 max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 0 : 1233 max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 0 :
1232 rp_state_cap >> 16) & 0xff; 1234 rp_state_cap >> 16) & 0xff;
@@ -2218,6 +2220,7 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
2218 seq_printf(m, "CPU waiting? %d\n", count_irq_waiters(dev_priv)); 2220 seq_printf(m, "CPU waiting? %d\n", count_irq_waiters(dev_priv));
2219 seq_printf(m, "Boosts outstanding? %d\n", 2221 seq_printf(m, "Boosts outstanding? %d\n",
2220 atomic_read(&rps->num_waiters)); 2222 atomic_read(&rps->num_waiters));
2223 seq_printf(m, "Interactive? %d\n", READ_ONCE(rps->power.interactive));
2221 seq_printf(m, "Frequency requested %d\n", 2224 seq_printf(m, "Frequency requested %d\n",
2222 intel_gpu_freq(dev_priv, rps->cur_freq)); 2225 intel_gpu_freq(dev_priv, rps->cur_freq));
2223 seq_printf(m, " min hard:%d, soft:%d; max soft:%d, hard:%d\n", 2226 seq_printf(m, " min hard:%d, soft:%d; max soft:%d, hard:%d\n",
@@ -2261,13 +2264,13 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
2261 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); 2264 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
2262 2265
2263 seq_printf(m, "\nRPS Autotuning (current \"%s\" window):\n", 2266 seq_printf(m, "\nRPS Autotuning (current \"%s\" window):\n",
2264 rps_power_to_str(rps->power)); 2267 rps_power_to_str(rps->power.mode));
2265 seq_printf(m, " Avg. up: %d%% [above threshold? %d%%]\n", 2268 seq_printf(m, " Avg. up: %d%% [above threshold? %d%%]\n",
2266 rpup && rpupei ? 100 * rpup / rpupei : 0, 2269 rpup && rpupei ? 100 * rpup / rpupei : 0,
2267 rps->up_threshold); 2270 rps->power.up_threshold);
2268 seq_printf(m, " Avg. down: %d%% [below threshold? %d%%]\n", 2271 seq_printf(m, " Avg. down: %d%% [below threshold? %d%%]\n",
2269 rpdown && rpdownei ? 100 * rpdown / rpdownei : 0, 2272 rpdown && rpdownei ? 100 * rpdown / rpdownei : 0,
2270 rps->down_threshold); 2273 rps->power.down_threshold);
2271 } else { 2274 } else {
2272 seq_puts(m, "\nRPS Autotuning inactive\n"); 2275 seq_puts(m, "\nRPS Autotuning inactive\n");
2273 } 2276 }
@@ -2606,13 +2609,22 @@ static int i915_psr_sink_status_show(struct seq_file *m, void *data)
2606 "sink internal error", 2609 "sink internal error",
2607 }; 2610 };
2608 struct drm_connector *connector = m->private; 2611 struct drm_connector *connector = m->private;
2612 struct drm_i915_private *dev_priv = to_i915(connector->dev);
2609 struct intel_dp *intel_dp = 2613 struct intel_dp *intel_dp =
2610 enc_to_intel_dp(&intel_attached_encoder(connector)->base); 2614 enc_to_intel_dp(&intel_attached_encoder(connector)->base);
2615 int ret;
2616
2617 if (!CAN_PSR(dev_priv)) {
2618 seq_puts(m, "PSR Unsupported\n");
2619 return -ENODEV;
2620 }
2611 2621
2612 if (connector->status != connector_status_connected) 2622 if (connector->status != connector_status_connected)
2613 return -ENODEV; 2623 return -ENODEV;
2614 2624
2615 if (drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_STATUS, &val) == 1) { 2625 ret = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_STATUS, &val);
2626
2627 if (ret == 1) {
2616 const char *str = "unknown"; 2628 const char *str = "unknown";
2617 2629
2618 val &= DP_PSR_SINK_STATE_MASK; 2630 val &= DP_PSR_SINK_STATE_MASK;
@@ -2620,7 +2632,7 @@ static int i915_psr_sink_status_show(struct seq_file *m, void *data)
2620 str = sink_status[val]; 2632 str = sink_status[val];
2621 seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val, str); 2633 seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val, str);
2622 } else { 2634 } else {
2623 DRM_ERROR("dpcd read (at %u) failed\n", DP_PSR_STATUS); 2635 return ret;
2624 } 2636 }
2625 2637
2626 return 0; 2638 return 0;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 0f49f9988dfa..4aca5344863d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -779,11 +779,17 @@ struct intel_rps {
779 u8 rp0_freq; /* Non-overclocked max frequency. */ 779 u8 rp0_freq; /* Non-overclocked max frequency. */
780 u16 gpll_ref_freq; /* vlv/chv GPLL reference frequency */ 780 u16 gpll_ref_freq; /* vlv/chv GPLL reference frequency */
781 781
782 u8 up_threshold; /* Current %busy required to uplock */
783 u8 down_threshold; /* Current %busy required to downclock */
784
785 int last_adj; 782 int last_adj;
786 enum { LOW_POWER, BETWEEN, HIGH_POWER } power; 783
784 struct {
785 struct mutex mutex;
786
787 enum { LOW_POWER, BETWEEN, HIGH_POWER } mode;
788 unsigned int interactive;
789
790 u8 up_threshold; /* Current %busy required to uplock */
791 u8 down_threshold; /* Current %busy required to downclock */
792 } power;
787 793
788 bool enabled; 794 bool enabled;
789 atomic_t num_waiters; 795 atomic_t num_waiters;
@@ -3422,6 +3428,8 @@ extern void i915_redisable_vga_power_on(struct drm_i915_private *dev_priv);
3422extern bool ironlake_set_drps(struct drm_i915_private *dev_priv, u8 val); 3428extern bool ironlake_set_drps(struct drm_i915_private *dev_priv, u8 val);
3423extern void intel_init_pch_refclk(struct drm_i915_private *dev_priv); 3429extern void intel_init_pch_refclk(struct drm_i915_private *dev_priv);
3424extern int intel_set_rps(struct drm_i915_private *dev_priv, u8 val); 3430extern int intel_set_rps(struct drm_i915_private *dev_priv, u8 val);
3431extern void intel_rps_mark_interactive(struct drm_i915_private *i915,
3432 bool interactive);
3425extern bool intel_set_memory_cxsr(struct drm_i915_private *dev_priv, 3433extern bool intel_set_memory_cxsr(struct drm_i915_private *dev_priv,
3426 bool enable); 3434 bool enable);
3427 3435
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 5dadefca2ad2..90628a47ae17 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1265,9 +1265,9 @@ static u32 vlv_wa_c0_ei(struct drm_i915_private *dev_priv, u32 pm_iir)
1265 c0 = max(render, media); 1265 c0 = max(render, media);
1266 c0 *= 1000 * 100 << 8; /* to usecs and scale to threshold% */ 1266 c0 *= 1000 * 100 << 8; /* to usecs and scale to threshold% */
1267 1267
1268 if (c0 > time * rps->up_threshold) 1268 if (c0 > time * rps->power.up_threshold)
1269 events = GEN6_PM_RP_UP_THRESHOLD; 1269 events = GEN6_PM_RP_UP_THRESHOLD;
1270 else if (c0 < time * rps->down_threshold) 1270 else if (c0 < time * rps->power.down_threshold)
1271 events = GEN6_PM_RP_DOWN_THRESHOLD; 1271 events = GEN6_PM_RP_DOWN_THRESHOLD;
1272 } 1272 }
1273 1273
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 8af945d8a995..91e7483228e1 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2780,9 +2780,6 @@ enum i915_power_well_id {
2780#define GEN8_4x4_STC_OPTIMIZATION_DISABLE (1 << 6) 2780#define GEN8_4x4_STC_OPTIMIZATION_DISABLE (1 << 6)
2781#define GEN9_PARTIAL_RESOLVE_IN_VC_DISABLE (1 << 1) 2781#define GEN9_PARTIAL_RESOLVE_IN_VC_DISABLE (1 << 1)
2782 2782
2783#define GEN10_CACHE_MODE_SS _MMIO(0xe420)
2784#define FLOAT_BLEND_OPTIMIZATION_ENABLE (1 << 4)
2785
2786#define GEN6_BLITTER_ECOSKPD _MMIO(0x221d0) 2783#define GEN6_BLITTER_ECOSKPD _MMIO(0x221d0)
2787#define GEN6_BLITTER_LOCK_SHIFT 16 2784#define GEN6_BLITTER_LOCK_SHIFT 16
2788#define GEN6_BLITTER_FBC_NOTIFY (1 << 3) 2785#define GEN6_BLITTER_FBC_NOTIFY (1 << 3)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 87e4cfbfd096..ed3fa1c8a983 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13104,6 +13104,19 @@ intel_prepare_plane_fb(struct drm_plane *plane,
13104 add_rps_boost_after_vblank(new_state->crtc, new_state->fence); 13104 add_rps_boost_after_vblank(new_state->crtc, new_state->fence);
13105 } 13105 }
13106 13106
13107 /*
13108 * We declare pageflips to be interactive and so merit a small bias
13109 * towards upclocking to deliver the frame on time. By only changing
13110 * the RPS thresholds to sample more regularly and aim for higher
13111 * clocks we can hopefully deliver low power workloads (like kodi)
13112 * that are not quite steady state without resorting to forcing
13113 * maximum clocks following a vblank miss (see do_rps_boost()).
13114 */
13115 if (!intel_state->rps_interactive) {
13116 intel_rps_mark_interactive(dev_priv, true);
13117 intel_state->rps_interactive = true;
13118 }
13119
13107 return 0; 13120 return 0;
13108} 13121}
13109 13122
@@ -13120,8 +13133,15 @@ void
13120intel_cleanup_plane_fb(struct drm_plane *plane, 13133intel_cleanup_plane_fb(struct drm_plane *plane,
13121 struct drm_plane_state *old_state) 13134 struct drm_plane_state *old_state)
13122{ 13135{
13136 struct intel_atomic_state *intel_state =
13137 to_intel_atomic_state(old_state->state);
13123 struct drm_i915_private *dev_priv = to_i915(plane->dev); 13138 struct drm_i915_private *dev_priv = to_i915(plane->dev);
13124 13139
13140 if (intel_state->rps_interactive) {
13141 intel_rps_mark_interactive(dev_priv, false);
13142 intel_state->rps_interactive = false;
13143 }
13144
13125 /* Should only be called after a successful intel_prepare_plane_fb()! */ 13145 /* Should only be called after a successful intel_prepare_plane_fb()! */
13126 mutex_lock(&dev_priv->drm.struct_mutex); 13146 mutex_lock(&dev_priv->drm.struct_mutex);
13127 intel_plane_unpin_fb(to_intel_plane_state(old_state)); 13147 intel_plane_unpin_fb(to_intel_plane_state(old_state));
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index c275f91244a6..17af06d8a43e 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -484,6 +484,8 @@ struct intel_atomic_state {
484 */ 484 */
485 bool skip_intermediate_wm; 485 bool skip_intermediate_wm;
486 486
487 bool rps_interactive;
488
487 /* Gen9+ only */ 489 /* Gen9+ only */
488 struct skl_ddb_values wm_results; 490 struct skl_ddb_values wm_results;
489 491
diff --git a/drivers/gpu/drm/i915/intel_lpe_audio.c b/drivers/gpu/drm/i915/intel_lpe_audio.c
index 6269750e2b54..430732720e65 100644
--- a/drivers/gpu/drm/i915/intel_lpe_audio.c
+++ b/drivers/gpu/drm/i915/intel_lpe_audio.c
@@ -126,9 +126,7 @@ lpe_audio_platdev_create(struct drm_i915_private *dev_priv)
126 return platdev; 126 return platdev;
127 } 127 }
128 128
129 pm_runtime_forbid(&platdev->dev); 129 pm_runtime_no_callbacks(&platdev->dev);
130 pm_runtime_set_active(&platdev->dev);
131 pm_runtime_enable(&platdev->dev);
132 130
133 return platdev; 131 return platdev;
134} 132}
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 7312ecb73415..43ae9de12ba3 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -6264,42 +6264,15 @@ static u32 intel_rps_limits(struct drm_i915_private *dev_priv, u8 val)
6264 return limits; 6264 return limits;
6265} 6265}
6266 6266
6267static void gen6_set_rps_thresholds(struct drm_i915_private *dev_priv, u8 val) 6267static void rps_set_power(struct drm_i915_private *dev_priv, int new_power)
6268{ 6268{
6269 struct intel_rps *rps = &dev_priv->gt_pm.rps; 6269 struct intel_rps *rps = &dev_priv->gt_pm.rps;
6270 int new_power;
6271 u32 threshold_up = 0, threshold_down = 0; /* in % */ 6270 u32 threshold_up = 0, threshold_down = 0; /* in % */
6272 u32 ei_up = 0, ei_down = 0; 6271 u32 ei_up = 0, ei_down = 0;
6273 6272
6274 new_power = rps->power; 6273 lockdep_assert_held(&rps->power.mutex);
6275 switch (rps->power) {
6276 case LOW_POWER:
6277 if (val > rps->efficient_freq + 1 &&
6278 val > rps->cur_freq)
6279 new_power = BETWEEN;
6280 break;
6281
6282 case BETWEEN:
6283 if (val <= rps->efficient_freq &&
6284 val < rps->cur_freq)
6285 new_power = LOW_POWER;
6286 else if (val >= rps->rp0_freq &&
6287 val > rps->cur_freq)
6288 new_power = HIGH_POWER;
6289 break;
6290 6274
6291 case HIGH_POWER: 6275 if (new_power == rps->power.mode)
6292 if (val < (rps->rp1_freq + rps->rp0_freq) >> 1 &&
6293 val < rps->cur_freq)
6294 new_power = BETWEEN;
6295 break;
6296 }
6297 /* Max/min bins are special */
6298 if (val <= rps->min_freq_softlimit)
6299 new_power = LOW_POWER;
6300 if (val >= rps->max_freq_softlimit)
6301 new_power = HIGH_POWER;
6302 if (new_power == rps->power)
6303 return; 6276 return;
6304 6277
6305 /* Note the units here are not exactly 1us, but 1280ns. */ 6278 /* Note the units here are not exactly 1us, but 1280ns. */
@@ -6362,12 +6335,71 @@ static void gen6_set_rps_thresholds(struct drm_i915_private *dev_priv, u8 val)
6362 GEN6_RP_DOWN_IDLE_AVG); 6335 GEN6_RP_DOWN_IDLE_AVG);
6363 6336
6364skip_hw_write: 6337skip_hw_write:
6365 rps->power = new_power; 6338 rps->power.mode = new_power;
6366 rps->up_threshold = threshold_up; 6339 rps->power.up_threshold = threshold_up;
6367 rps->down_threshold = threshold_down; 6340 rps->power.down_threshold = threshold_down;
6341}
6342
6343static void gen6_set_rps_thresholds(struct drm_i915_private *dev_priv, u8 val)
6344{
6345 struct intel_rps *rps = &dev_priv->gt_pm.rps;
6346 int new_power;
6347
6348 new_power = rps->power.mode;
6349 switch (rps->power.mode) {
6350 case LOW_POWER:
6351 if (val > rps->efficient_freq + 1 &&
6352 val > rps->cur_freq)
6353 new_power = BETWEEN;
6354 break;
6355
6356 case BETWEEN:
6357 if (val <= rps->efficient_freq &&
6358 val < rps->cur_freq)
6359 new_power = LOW_POWER;
6360 else if (val >= rps->rp0_freq &&
6361 val > rps->cur_freq)
6362 new_power = HIGH_POWER;
6363 break;
6364
6365 case HIGH_POWER:
6366 if (val < (rps->rp1_freq + rps->rp0_freq) >> 1 &&
6367 val < rps->cur_freq)
6368 new_power = BETWEEN;
6369 break;
6370 }
6371 /* Max/min bins are special */
6372 if (val <= rps->min_freq_softlimit)
6373 new_power = LOW_POWER;
6374 if (val >= rps->max_freq_softlimit)
6375 new_power = HIGH_POWER;
6376
6377 mutex_lock(&rps->power.mutex);
6378 if (rps->power.interactive)
6379 new_power = HIGH_POWER;
6380 rps_set_power(dev_priv, new_power);
6381 mutex_unlock(&rps->power.mutex);
6368 rps->last_adj = 0; 6382 rps->last_adj = 0;
6369} 6383}
6370 6384
6385void intel_rps_mark_interactive(struct drm_i915_private *i915, bool interactive)
6386{
6387 struct intel_rps *rps = &i915->gt_pm.rps;
6388
6389 if (INTEL_GEN(i915) < 6)
6390 return;
6391
6392 mutex_lock(&rps->power.mutex);
6393 if (interactive) {
6394 if (!rps->power.interactive++ && READ_ONCE(i915->gt.awake))
6395 rps_set_power(i915, HIGH_POWER);
6396 } else {
6397 GEM_BUG_ON(!rps->power.interactive);
6398 rps->power.interactive--;
6399 }
6400 mutex_unlock(&rps->power.mutex);
6401}
6402
6371static u32 gen6_rps_pm_mask(struct drm_i915_private *dev_priv, u8 val) 6403static u32 gen6_rps_pm_mask(struct drm_i915_private *dev_priv, u8 val)
6372{ 6404{
6373 struct intel_rps *rps = &dev_priv->gt_pm.rps; 6405 struct intel_rps *rps = &dev_priv->gt_pm.rps;
@@ -6780,7 +6812,7 @@ static void reset_rps(struct drm_i915_private *dev_priv,
6780 u8 freq = rps->cur_freq; 6812 u8 freq = rps->cur_freq;
6781 6813
6782 /* force a reset */ 6814 /* force a reset */
6783 rps->power = -1; 6815 rps->power.mode = -1;
6784 rps->cur_freq = -1; 6816 rps->cur_freq = -1;
6785 6817
6786 if (set(dev_priv, freq)) 6818 if (set(dev_priv, freq))
@@ -9604,6 +9636,7 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val)
9604void intel_pm_setup(struct drm_i915_private *dev_priv) 9636void intel_pm_setup(struct drm_i915_private *dev_priv)
9605{ 9637{
9606 mutex_init(&dev_priv->pcu_lock); 9638 mutex_init(&dev_priv->pcu_lock);
9639 mutex_init(&dev_priv->gt_pm.rps.power.mutex);
9607 9640
9608 atomic_set(&dev_priv->gt_pm.rps.num_waiters, 0); 9641 atomic_set(&dev_priv->gt_pm.rps.num_waiters, 0);
9609 9642
diff --git a/drivers/gpu/drm/i915/intel_workarounds.c b/drivers/gpu/drm/i915/intel_workarounds.c
index f8bb32e974f6..4bcdeaf8d98f 100644
--- a/drivers/gpu/drm/i915/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/intel_workarounds.c
@@ -508,9 +508,6 @@ static int icl_ctx_workarounds_init(struct drm_i915_private *dev_priv)
508 WA_SET_BIT_MASKED(GEN11_COMMON_SLICE_CHICKEN3, 508 WA_SET_BIT_MASKED(GEN11_COMMON_SLICE_CHICKEN3,
509 GEN11_BLEND_EMB_FIX_DISABLE_IN_RCC); 509 GEN11_BLEND_EMB_FIX_DISABLE_IN_RCC);
510 510
511 /* WaEnableFloatBlendOptimization:icl */
512 WA_SET_BIT_MASKED(GEN10_CACHE_MODE_SS, FLOAT_BLEND_OPTIMIZATION_ENABLE);
513
514 return 0; 511 return 0;
515} 512}
516 513