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 /drivers/gpu | |
| 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
Diffstat (limited to 'drivers/gpu')
| -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 |
