diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 4baab858e442..a29e6d512771 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -3567,6 +3567,23 @@ bool ilk_disable_lp_wm(struct drm_device *dev) | |||
3567 | return _ilk_disable_lp_wm(dev_priv, WM_DIRTY_LP_ALL); | 3567 | return _ilk_disable_lp_wm(dev_priv, WM_DIRTY_LP_ALL); |
3568 | } | 3568 | } |
3569 | 3569 | ||
3570 | static u8 intel_enabled_dbuf_slices_num(struct drm_i915_private *dev_priv) | ||
3571 | { | ||
3572 | u8 enabled_slices; | ||
3573 | |||
3574 | /* Slice 1 will always be enabled */ | ||
3575 | enabled_slices = 1; | ||
3576 | |||
3577 | /* Gen prior to GEN11 have only one DBuf slice */ | ||
3578 | if (INTEL_GEN(dev_priv) < 11) | ||
3579 | return enabled_slices; | ||
3580 | |||
3581 | if (I915_READ(DBUF_CTL_S2) & DBUF_POWER_STATE) | ||
3582 | enabled_slices++; | ||
3583 | |||
3584 | return enabled_slices; | ||
3585 | } | ||
3586 | |||
3570 | /* | 3587 | /* |
3571 | * FIXME: We still don't have the proper code detect if we need to apply the WA, | 3588 | * FIXME: We still don't have the proper code detect if we need to apply the WA, |
3572 | * so assume we'll always need it in order to avoid underruns. | 3589 | * so assume we'll always need it in order to avoid underruns. |
@@ -3870,6 +3887,8 @@ void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv, | |||
3870 | 3887 | ||
3871 | memset(ddb, 0, sizeof(*ddb)); | 3888 | memset(ddb, 0, sizeof(*ddb)); |
3872 | 3889 | ||
3890 | ddb->enabled_slices = intel_enabled_dbuf_slices_num(dev_priv); | ||
3891 | |||
3873 | for_each_intel_crtc(&dev_priv->drm, crtc) { | 3892 | for_each_intel_crtc(&dev_priv->drm, crtc) { |
3874 | enum intel_display_power_domain power_domain; | 3893 | enum intel_display_power_domain power_domain; |
3875 | enum plane_id plane_id; | 3894 | enum plane_id plane_id; |
@@ -5088,6 +5107,7 @@ skl_copy_ddb_for_pipe(struct skl_ddb_values *dst, | |||
5088 | sizeof(dst->ddb.uv_plane[pipe])); | 5107 | sizeof(dst->ddb.uv_plane[pipe])); |
5089 | memcpy(dst->ddb.plane[pipe], src->ddb.plane[pipe], | 5108 | memcpy(dst->ddb.plane[pipe], src->ddb.plane[pipe], |
5090 | sizeof(dst->ddb.plane[pipe])); | 5109 | sizeof(dst->ddb.plane[pipe])); |
5110 | dst->ddb.enabled_slices = src->ddb.enabled_slices; | ||
5091 | } | 5111 | } |
5092 | 5112 | ||
5093 | static void | 5113 | static void |