drm/i915/xe2lpd: Add DC state support
authorMatt Roper <matthew.d.roper@intel.com>
Tue, 19 Sep 2023 19:21:27 +0000 (12:21 -0700)
committerLucas De Marchi <lucas.demarchi@intel.com>
Thu, 21 Sep 2023 15:18:07 +0000 (08:18 -0700)
Xe2_LPD supports DC5, DC6, and DC9 (DC3CO no longer exists).  The
overall programming and requirements to enter DC states are similar to
those of Xe_LPD+ although AUX transactions do not require DC5/DC6 exit
as they did previously.

Bspec: 68851, 68857, 68886, 69115
Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Anusha Srivatsa <anusha.srivatsa@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230919192128.2045154-21-lucas.demarchi@intel.com
drivers/gpu/drm/i915/display/intel_display_power.c
drivers/gpu/drm/i915/display/intel_display_power_map.c

index 889bb26009a2e370dabd60273beeda7d9b1c6ef5..e25785ae1c20cef1784b02f78b6fde92c9118c14 100644 (file)
@@ -943,7 +943,9 @@ static u32 get_allowed_dc_mask(const struct drm_i915_private *dev_priv,
        if (!HAS_DISPLAY(dev_priv))
                return 0;
 
-       if (IS_DG2(dev_priv))
+       if (DISPLAY_VER(dev_priv) >= 20)
+               max_dc = 2;
+       else if (IS_DG2(dev_priv))
                max_dc = 1;
        else if (IS_DG1(dev_priv))
                max_dc = 3;
index 31c11586ede54fb0481b89ee58d44c8fda116c17..10948b3964ee4c3fa18e0e8d23099eb492a25524 100644 (file)
@@ -1561,9 +1561,27 @@ static const struct i915_power_well_desc xe2lpd_power_wells_pica[] = {
        },
 };
 
+I915_DECL_PW_DOMAINS(xe2lpd_pwdoms_dc_off,
+       POWER_DOMAIN_DC_OFF,
+       XELPD_PW_C_POWER_DOMAINS,
+       XELPD_PW_D_POWER_DOMAINS,
+       POWER_DOMAIN_AUDIO_MMIO,
+       POWER_DOMAIN_INIT);
+
+static const struct i915_power_well_desc xe2lpd_power_wells_dcoff[] = {
+       {
+               .instances = &I915_PW_INSTANCES(
+                       I915_PW("DC_off", &xe2lpd_pwdoms_dc_off,
+                               .id = SKL_DISP_DC_OFF),
+               ),
+               .ops = &gen9_dc_off_power_well_ops,
+       },
+};
+
 static const struct i915_power_well_desc_list xe2lpd_power_wells[] = {
        I915_PW_DESCRIPTORS(i9xx_power_wells_always_on),
        I915_PW_DESCRIPTORS(icl_power_wells_pw_1),
+       I915_PW_DESCRIPTORS(xe2lpd_power_wells_dcoff),
        I915_PW_DESCRIPTORS(xelpdp_power_wells_main),
        I915_PW_DESCRIPTORS(xe2lpd_power_wells_pica),
 };