diff options
author | Lucas De Marchi <lucas.demarchi@intel.com> | 2018-10-12 17:57:58 -0400 |
---|---|---|
committer | Rodrigo Vivi <rodrigo.vivi@intel.com> | 2018-10-16 11:45:31 -0400 |
commit | ffd7e32d95db99f1b4546661dc1864b4555c307c (patch) | |
tree | 10684a7040e73df3a2bef3f4db5c0d018fa8b771 | |
parent | b0b62d845e44e5432505ba0f74da41efc1b122d3 (diff) |
drm/i915/icl: apply Display WA #1178 to fix type C dongles
Display WA #1178 is meant to fix Aux channel voltage swing too low with
some type C dongles. It applies to external ports on combo phy. On
Icelake this is port A and B when those are not eDP.
v2: follow the spec to the letter: include Aux A and just check if it's
not eDP instead of checking only for Aux B.
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181012215758.25342-1-lucas.demarchi@intel.com
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_runtime_pm.c | 9 |
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 1e13e51fee47..f8f5c85098b7 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -8934,6 +8934,15 @@ enum skl_power_gate { | |||
8934 | #define CNL_AUX_ANAOVRD1_ENABLE (1 << 16) | 8934 | #define CNL_AUX_ANAOVRD1_ENABLE (1 << 16) |
8935 | #define CNL_AUX_ANAOVRD1_LDO_BYPASS (1 << 23) | 8935 | #define CNL_AUX_ANAOVRD1_LDO_BYPASS (1 << 23) |
8936 | 8936 | ||
8937 | #define _ICL_AUX_REG_IDX(pw_idx) ((pw_idx) - ICL_PW_CTL_IDX_AUX_A) | ||
8938 | #define _ICL_AUX_ANAOVRD1_A 0x162398 | ||
8939 | #define _ICL_AUX_ANAOVRD1_B 0x6C398 | ||
8940 | #define ICL_AUX_ANAOVRD1(pw_idx) _MMIO(_PICK(_ICL_AUX_REG_IDX(pw_idx), \ | ||
8941 | _ICL_AUX_ANAOVRD1_A, \ | ||
8942 | _ICL_AUX_ANAOVRD1_B)) | ||
8943 | #define ICL_AUX_ANAOVRD1_LDO_BYPASS (1 << 7) | ||
8944 | #define ICL_AUX_ANAOVRD1_ENABLE (1 << 0) | ||
8945 | |||
8937 | /* HDCP Key Registers */ | 8946 | /* HDCP Key Registers */ |
8938 | #define HDCP_KEY_CONF _MMIO(0x66c00) | 8947 | #define HDCP_KEY_CONF _MMIO(0x66c00) |
8939 | #define HDCP_AKSV_SEND_TRIGGER BIT(31) | 8948 | #define HDCP_AKSV_SEND_TRIGGER BIT(31) |
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c index 3cf8533e0834..31a49bdcf193 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c | |||
@@ -436,6 +436,15 @@ icl_combo_phy_aux_power_well_enable(struct drm_i915_private *dev_priv, | |||
436 | I915_WRITE(ICL_PORT_CL_DW12(port), val | ICL_LANE_ENABLE_AUX); | 436 | I915_WRITE(ICL_PORT_CL_DW12(port), val | ICL_LANE_ENABLE_AUX); |
437 | 437 | ||
438 | hsw_wait_for_power_well_enable(dev_priv, power_well); | 438 | hsw_wait_for_power_well_enable(dev_priv, power_well); |
439 | |||
440 | /* Display WA #1178: icl */ | ||
441 | if (IS_ICELAKE(dev_priv) && | ||
442 | pw_idx >= ICL_PW_CTL_IDX_AUX_A && pw_idx <= ICL_PW_CTL_IDX_AUX_B && | ||
443 | !intel_bios_is_port_edp(dev_priv, port)) { | ||
444 | val = I915_READ(ICL_AUX_ANAOVRD1(pw_idx)); | ||
445 | val |= ICL_AUX_ANAOVRD1_ENABLE | ICL_AUX_ANAOVRD1_LDO_BYPASS; | ||
446 | I915_WRITE(ICL_AUX_ANAOVRD1(pw_idx), val); | ||
447 | } | ||
439 | } | 448 | } |
440 | 449 | ||
441 | static void | 450 | static void |