aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_runtime_pm.c
diff options
context:
space:
mode:
authorRodrigo Vivi <rodrigo.vivi@intel.com>2018-01-29 18:22:15 -0500
committerRodrigo Vivi <rodrigo.vivi@intel.com>2018-01-30 13:24:14 -0500
commita324fcaca314cafccda77a68ef1f7f6a1355de2c (patch)
tree05a998521e9138e36ff84ac0505da5108c9133e0 /drivers/gpu/drm/i915/intel_runtime_pm.c
parent3f43031b169361fefe032c13ebf644d17f3d76d6 (diff)
drm/i915/cnl: Add AUX-F support
On some Cannonlake SKUs we have a dedicated Aux for port F, that is only the full split between port A and port E. There is still no Aux E for Port E, as in previous platforms, because port_E still means shared lanes with port A. v2: Rebase. v3: Add couple missed PORT_F cases on intel_dp. v4: Rebase and fix commit message. v5: Squash Imre's "drm/i915: Add missing AUX_F power well string" v6: Rebase on top of display headers rework. v7: s/IS_CANNONLAKE/IS_CNL_WITH_PORT_F (DK) v8: Fix Aux bits for Port F (DK) v9: Fix VBT definition of Port F (DK). v10: Squash power well addition to this patch to avoid warns as pointed by DK. v11: Clean up squashed commit message. (David) v12: Remove unnecessary handling for older platforms (DK) Adding AUX_F to PG2 following other existent ones. (DK) Cc: David Weinehall <david.weinehall@linux.intel.com> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> Cc: Lucas De Marchi <lucas.demarchi@intel.com> Cc: Imre Deak <imre.deak@intel.com> Cc: Manasi Navare <manasi.d.navare@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: David Weinehall <david.weinehall@linux.intel.com> Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180129232223.766-2-rodrigo.vivi@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/intel_runtime_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_runtime_pm.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 5b1aa4b9c72c..a274e930f045 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -124,6 +124,8 @@ intel_display_power_domain_str(enum intel_display_power_domain domain)
124 return "AUX_C"; 124 return "AUX_C";
125 case POWER_DOMAIN_AUX_D: 125 case POWER_DOMAIN_AUX_D:
126 return "AUX_D"; 126 return "AUX_D";
127 case POWER_DOMAIN_AUX_F:
128 return "AUX_F";
127 case POWER_DOMAIN_GMBUS: 129 case POWER_DOMAIN_GMBUS:
128 return "GMBUS"; 130 return "GMBUS";
129 case POWER_DOMAIN_INIT: 131 case POWER_DOMAIN_INIT:
@@ -1828,6 +1830,7 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
1828 BIT_ULL(POWER_DOMAIN_AUX_B) | \ 1830 BIT_ULL(POWER_DOMAIN_AUX_B) | \
1829 BIT_ULL(POWER_DOMAIN_AUX_C) | \ 1831 BIT_ULL(POWER_DOMAIN_AUX_C) | \
1830 BIT_ULL(POWER_DOMAIN_AUX_D) | \ 1832 BIT_ULL(POWER_DOMAIN_AUX_D) | \
1833 BIT_ULL(POWER_DOMAIN_AUX_F) | \
1831 BIT_ULL(POWER_DOMAIN_AUDIO) | \ 1834 BIT_ULL(POWER_DOMAIN_AUDIO) | \
1832 BIT_ULL(POWER_DOMAIN_VGA) | \ 1835 BIT_ULL(POWER_DOMAIN_VGA) | \
1833 BIT_ULL(POWER_DOMAIN_INIT)) 1836 BIT_ULL(POWER_DOMAIN_INIT))
@@ -1855,6 +1858,9 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
1855#define CNL_DISPLAY_AUX_D_POWER_DOMAINS ( \ 1858#define CNL_DISPLAY_AUX_D_POWER_DOMAINS ( \
1856 BIT_ULL(POWER_DOMAIN_AUX_D) | \ 1859 BIT_ULL(POWER_DOMAIN_AUX_D) | \
1857 BIT_ULL(POWER_DOMAIN_INIT)) 1860 BIT_ULL(POWER_DOMAIN_INIT))
1861#define CNL_DISPLAY_AUX_F_POWER_DOMAINS ( \
1862 BIT_ULL(POWER_DOMAIN_AUX_F) | \
1863 BIT_ULL(POWER_DOMAIN_INIT))
1858#define CNL_DISPLAY_DC_OFF_POWER_DOMAINS ( \ 1864#define CNL_DISPLAY_DC_OFF_POWER_DOMAINS ( \
1859 CNL_DISPLAY_POWERWELL_2_POWER_DOMAINS | \ 1865 CNL_DISPLAY_POWERWELL_2_POWER_DOMAINS | \
1860 BIT_ULL(POWER_DOMAIN_GT_IRQ) | \ 1866 BIT_ULL(POWER_DOMAIN_GT_IRQ) | \
@@ -2405,6 +2411,12 @@ static struct i915_power_well cnl_power_wells[] = {
2405 .ops = &hsw_power_well_ops, 2411 .ops = &hsw_power_well_ops,
2406 .id = SKL_DISP_PW_DDI_D, 2412 .id = SKL_DISP_PW_DDI_D,
2407 }, 2413 },
2414 {
2415 .name = "AUX F",
2416 .domains = CNL_DISPLAY_AUX_F_POWER_DOMAINS,
2417 .ops = &hsw_power_well_ops,
2418 .id = CNL_DISP_PW_AUX_F,
2419 },
2408}; 2420};
2409 2421
2410static int 2422static int
@@ -2520,6 +2532,16 @@ int intel_power_domains_init(struct drm_i915_private *dev_priv)
2520 set_power_wells(power_domains, skl_power_wells); 2532 set_power_wells(power_domains, skl_power_wells);
2521 } else if (IS_CANNONLAKE(dev_priv)) { 2533 } else if (IS_CANNONLAKE(dev_priv)) {
2522 set_power_wells(power_domains, cnl_power_wells); 2534 set_power_wells(power_domains, cnl_power_wells);
2535
2536 /*
2537 * Aux IO is getting enabled for all ports
2538 * regardless the presence or use. So, in order to avoid
2539 * timeouts, lets remove it from the list
2540 * for the SKUs without port F.
2541 */
2542 if (!IS_CNL_WITH_PORT_F(dev_priv))
2543 power_domains->power_well_count -= 1;
2544
2523 } else if (IS_BROXTON(dev_priv)) { 2545 } else if (IS_BROXTON(dev_priv)) {
2524 set_power_wells(power_domains, bxt_power_wells); 2546 set_power_wells(power_domains, bxt_power_wells);
2525 } else if (IS_GEMINILAKE(dev_priv)) { 2547 } else if (IS_GEMINILAKE(dev_priv)) {