|
Thomas Zimmermann |
34ce7c |
From c45198b163fb5342290144b770a905f0d83821ad Mon Sep 17 00:00:00 2001
|
|
Thomas Zimmermann |
34ce7c |
From: Imre Deak <imre.deak@intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Date: Tue, 6 Nov 2018 18:06:18 +0200
|
|
Thomas Zimmermann |
34ce7c |
Subject: drm/i915/cnl+: Move the combo PHY init/uninit code to a new file
|
|
Thomas Zimmermann |
34ce7c |
MIME-Version: 1.0
|
|
Thomas Zimmermann |
34ce7c |
Content-Type: text/plain; charset=UTF-8
|
|
Thomas Zimmermann |
34ce7c |
Content-Transfer-Encoding: 8bit
|
|
Thomas Zimmermann |
34ce7c |
Git-commit: c45198b163fb5342290144b770a905f0d83821ad
|
|
Thomas Zimmermann |
34ce7c |
Patch-mainline: v5.0-rc1
|
|
Thomas Zimmermann |
34ce7c |
References: fate#326289
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
Similarly to the GEN9_LP DPIO PHY code keep the CNL+ combo PHY code in a
|
|
Thomas Zimmermann |
34ce7c |
separate file.
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
No functional change.
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
v2:
|
|
Thomas Zimmermann |
34ce7c |
- Use SPDX license tag instead of boilerplate. (Rodrigo)
|
|
Thomas Zimmermann |
34ce7c |
v3:
|
|
Thomas Zimmermann |
34ce7c |
- Use MIT instead of GPL-2.0 license. (Ville)
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Cc: José Roberto de Souza <jose.souza@intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Signed-off-by: Imre Deak <imre.deak@intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
|
|
Thomas Zimmermann |
34ce7c |
Link: https://patchwork.freedesktop.org/patch/msgid/20181106160621.23057-3-imre.deak@intel.com
|
|
Thomas Zimmermann |
34ce7c |
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
|
|
Thomas Zimmermann |
34ce7c |
---
|
|
Thomas Zimmermann |
34ce7c |
drivers/gpu/drm/i915/Makefile | 1
|
|
Thomas Zimmermann |
34ce7c |
drivers/gpu/drm/i915/i915_drv.h | 6 +
|
|
Thomas Zimmermann |
34ce7c |
drivers/gpu/drm/i915/intel_combo_phy.c | 141 ++++++++++++++++++++++++++++++++
|
|
Thomas Zimmermann |
34ce7c |
drivers/gpu/drm/i915/intel_runtime_pm.c | 125 +---------------------------
|
|
Thomas Zimmermann |
34ce7c |
4 files changed, 156 insertions(+), 117 deletions(-)
|
|
Thomas Zimmermann |
34ce7c |
create mode 100644 drivers/gpu/drm/i915/intel_combo_phy.c
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
--- a/drivers/gpu/drm/i915/Makefile
|
|
Thomas Zimmermann |
34ce7c |
+++ b/drivers/gpu/drm/i915/Makefile
|
|
Thomas Zimmermann |
34ce7c |
@@ -111,6 +111,7 @@ i915-y += intel_audio.o \
|
|
Thomas Zimmermann |
34ce7c |
intel_bios.o \
|
|
Thomas Zimmermann |
34ce7c |
intel_cdclk.o \
|
|
Thomas Zimmermann |
34ce7c |
intel_color.o \
|
|
Thomas Zimmermann |
34ce7c |
+ intel_combo_phy.o \
|
|
Thomas Zimmermann |
34ce7c |
intel_display.o \
|
|
Thomas Zimmermann |
34ce7c |
intel_dpio_phy.o \
|
|
Thomas Zimmermann |
34ce7c |
intel_dpll_mgr.o \
|
|
Thomas Zimmermann |
34ce7c |
--- a/drivers/gpu/drm/i915/i915_drv.h
|
|
Thomas Zimmermann |
34ce7c |
+++ b/drivers/gpu/drm/i915/i915_drv.h
|
|
Thomas Zimmermann |
34ce7c |
@@ -3551,6 +3551,12 @@ void vlv_phy_pre_encoder_enable(struct i
|
|
Thomas Zimmermann |
34ce7c |
void vlv_phy_reset_lanes(struct intel_encoder *encoder,
|
|
Thomas Zimmermann |
34ce7c |
const struct intel_crtc_state *old_crtc_state);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
+/* intel_combo_phy.c */
|
|
Thomas Zimmermann |
34ce7c |
+void icl_combo_phys_init(struct drm_i915_private *dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
+void icl_combo_phys_uninit(struct drm_i915_private *dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
+void cnl_combo_phys_init(struct drm_i915_private *dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
+void cnl_combo_phys_uninit(struct drm_i915_private *dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
int intel_gpu_freq(struct drm_i915_private *dev_priv, int val);
|
|
Thomas Zimmermann |
34ce7c |
int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
|
|
Thomas Zimmermann |
34ce7c |
u64 intel_rc6_residency_ns(struct drm_i915_private *dev_priv,
|
|
Thomas Zimmermann |
34ce7c |
--- /dev/null
|
|
Thomas Zimmermann |
34ce7c |
+++ b/drivers/gpu/drm/i915/intel_combo_phy.c
|
|
Thomas Zimmermann |
34ce7c |
@@ -0,0 +1,141 @@
|
|
Thomas Zimmermann |
34ce7c |
+// SPDX-License-Identifier: MIT
|
|
Thomas Zimmermann |
34ce7c |
+/*
|
|
Thomas Zimmermann |
34ce7c |
+ * Copyright © 2018 Intel Corporation
|
|
Thomas Zimmermann |
34ce7c |
+ */
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+#include "intel_drv.h"
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+enum {
|
|
Thomas Zimmermann |
34ce7c |
+ PROCMON_0_85V_DOT_0,
|
|
Thomas Zimmermann |
34ce7c |
+ PROCMON_0_95V_DOT_0,
|
|
Thomas Zimmermann |
34ce7c |
+ PROCMON_0_95V_DOT_1,
|
|
Thomas Zimmermann |
34ce7c |
+ PROCMON_1_05V_DOT_0,
|
|
Thomas Zimmermann |
34ce7c |
+ PROCMON_1_05V_DOT_1,
|
|
Thomas Zimmermann |
34ce7c |
+};
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+static const struct cnl_procmon {
|
|
Thomas Zimmermann |
34ce7c |
+ u32 dw1, dw9, dw10;
|
|
Thomas Zimmermann |
34ce7c |
+} cnl_procmon_values[] = {
|
|
Thomas Zimmermann |
34ce7c |
+ [PROCMON_0_85V_DOT_0] =
|
|
Thomas Zimmermann |
34ce7c |
+ { .dw1 = 0x00000000, .dw9 = 0x62AB67BB, .dw10 = 0x51914F96, },
|
|
Thomas Zimmermann |
34ce7c |
+ [PROCMON_0_95V_DOT_0] =
|
|
Thomas Zimmermann |
34ce7c |
+ { .dw1 = 0x00000000, .dw9 = 0x86E172C7, .dw10 = 0x77CA5EAB, },
|
|
Thomas Zimmermann |
34ce7c |
+ [PROCMON_0_95V_DOT_1] =
|
|
Thomas Zimmermann |
34ce7c |
+ { .dw1 = 0x00000000, .dw9 = 0x93F87FE1, .dw10 = 0x8AE871C5, },
|
|
Thomas Zimmermann |
34ce7c |
+ [PROCMON_1_05V_DOT_0] =
|
|
Thomas Zimmermann |
34ce7c |
+ { .dw1 = 0x00000000, .dw9 = 0x98FA82DD, .dw10 = 0x89E46DC1, },
|
|
Thomas Zimmermann |
34ce7c |
+ [PROCMON_1_05V_DOT_1] =
|
|
Thomas Zimmermann |
34ce7c |
+ { .dw1 = 0x00440000, .dw9 = 0x9A00AB25, .dw10 = 0x8AE38FF1, },
|
|
Thomas Zimmermann |
34ce7c |
+};
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+/*
|
|
Thomas Zimmermann |
34ce7c |
+ * CNL has just one set of registers, while ICL has two sets: one for port A and
|
|
Thomas Zimmermann |
34ce7c |
+ * the other for port B. The CNL registers are equivalent to the ICL port A
|
|
Thomas Zimmermann |
34ce7c |
+ * registers, that's why we call the ICL macros even though the function has CNL
|
|
Thomas Zimmermann |
34ce7c |
+ * on its name.
|
|
Thomas Zimmermann |
34ce7c |
+ */
|
|
Thomas Zimmermann |
34ce7c |
+static void cnl_set_procmon_ref_values(struct drm_i915_private *dev_priv,
|
|
Thomas Zimmermann |
34ce7c |
+ enum port port)
|
|
Thomas Zimmermann |
34ce7c |
+{
|
|
Thomas Zimmermann |
34ce7c |
+ const struct cnl_procmon *procmon;
|
|
Thomas Zimmermann |
34ce7c |
+ u32 val;
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(ICL_PORT_COMP_DW3(port));
|
|
Thomas Zimmermann |
34ce7c |
+ switch (val & (PROCESS_INFO_MASK | VOLTAGE_INFO_MASK)) {
|
|
Thomas Zimmermann |
34ce7c |
+ default:
|
|
Thomas Zimmermann |
34ce7c |
+ MISSING_CASE(val);
|
|
Thomas Zimmermann |
34ce7c |
+ /* fall through */
|
|
Thomas Zimmermann |
34ce7c |
+ case VOLTAGE_INFO_0_85V | PROCESS_INFO_DOT_0:
|
|
Thomas Zimmermann |
34ce7c |
+ procmon = &cnl_procmon_values[PROCMON_0_85V_DOT_0];
|
|
Thomas Zimmermann |
34ce7c |
+ break;
|
|
Thomas Zimmermann |
34ce7c |
+ case VOLTAGE_INFO_0_95V | PROCESS_INFO_DOT_0:
|
|
Thomas Zimmermann |
34ce7c |
+ procmon = &cnl_procmon_values[PROCMON_0_95V_DOT_0];
|
|
Thomas Zimmermann |
34ce7c |
+ break;
|
|
Thomas Zimmermann |
34ce7c |
+ case VOLTAGE_INFO_0_95V | PROCESS_INFO_DOT_1:
|
|
Thomas Zimmermann |
34ce7c |
+ procmon = &cnl_procmon_values[PROCMON_0_95V_DOT_1];
|
|
Thomas Zimmermann |
34ce7c |
+ break;
|
|
Thomas Zimmermann |
34ce7c |
+ case VOLTAGE_INFO_1_05V | PROCESS_INFO_DOT_0:
|
|
Thomas Zimmermann |
34ce7c |
+ procmon = &cnl_procmon_values[PROCMON_1_05V_DOT_0];
|
|
Thomas Zimmermann |
34ce7c |
+ break;
|
|
Thomas Zimmermann |
34ce7c |
+ case VOLTAGE_INFO_1_05V | PROCESS_INFO_DOT_1:
|
|
Thomas Zimmermann |
34ce7c |
+ procmon = &cnl_procmon_values[PROCMON_1_05V_DOT_1];
|
|
Thomas Zimmermann |
34ce7c |
+ break;
|
|
Thomas Zimmermann |
34ce7c |
+ }
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(ICL_PORT_COMP_DW1(port));
|
|
Thomas Zimmermann |
34ce7c |
+ val &= ~((0xff << 16) | 0xff);
|
|
Thomas Zimmermann |
34ce7c |
+ val |= procmon->dw1;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PORT_COMP_DW1(port), val);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PORT_COMP_DW9(port), procmon->dw9);
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PORT_COMP_DW10(port), procmon->dw10);
|
|
Thomas Zimmermann |
34ce7c |
+}
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+void cnl_combo_phys_init(struct drm_i915_private *dev_priv)
|
|
Thomas Zimmermann |
34ce7c |
+{
|
|
Thomas Zimmermann |
34ce7c |
+ u32 val;
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(CHICKEN_MISC_2);
|
|
Thomas Zimmermann |
34ce7c |
+ val &= ~CNL_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(CHICKEN_MISC_2, val);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ /* Dummy PORT_A to get the correct CNL register from the ICL macro */
|
|
Thomas Zimmermann |
34ce7c |
+ cnl_set_procmon_ref_values(dev_priv, PORT_A);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(CNL_PORT_COMP_DW0);
|
|
Thomas Zimmermann |
34ce7c |
+ val |= COMP_INIT;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(CNL_PORT_COMP_DW0, val);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(CNL_PORT_CL1CM_DW5);
|
|
Thomas Zimmermann |
34ce7c |
+ val |= CL_POWER_DOWN_ENABLE;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(CNL_PORT_CL1CM_DW5, val);
|
|
Thomas Zimmermann |
34ce7c |
+}
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+void cnl_combo_phys_uninit(struct drm_i915_private *dev_priv)
|
|
Thomas Zimmermann |
34ce7c |
+{
|
|
Thomas Zimmermann |
34ce7c |
+ u32 val;
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(CHICKEN_MISC_2);
|
|
Thomas Zimmermann |
34ce7c |
+ val |= CNL_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(CHICKEN_MISC_2, val);
|
|
Thomas Zimmermann |
34ce7c |
+}
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+void icl_combo_phys_init(struct drm_i915_private *dev_priv)
|
|
Thomas Zimmermann |
34ce7c |
+{
|
|
Thomas Zimmermann |
34ce7c |
+ enum port port;
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ for (port = PORT_A; port <= PORT_B; port++) {
|
|
Thomas Zimmermann |
34ce7c |
+ u32 val;
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(ICL_PHY_MISC(port));
|
|
Thomas Zimmermann |
34ce7c |
+ val &= ~ICL_PHY_MISC_DE_IO_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PHY_MISC(port), val);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ cnl_set_procmon_ref_values(dev_priv, port);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(ICL_PORT_COMP_DW0(port));
|
|
Thomas Zimmermann |
34ce7c |
+ val |= COMP_INIT;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PORT_COMP_DW0(port), val);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(ICL_PORT_CL_DW5(port));
|
|
Thomas Zimmermann |
34ce7c |
+ val |= CL_POWER_DOWN_ENABLE;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PORT_CL_DW5(port), val);
|
|
Thomas Zimmermann |
34ce7c |
+ }
|
|
Thomas Zimmermann |
34ce7c |
+}
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+void icl_combo_phys_uninit(struct drm_i915_private *dev_priv)
|
|
Thomas Zimmermann |
34ce7c |
+{
|
|
Thomas Zimmermann |
34ce7c |
+ enum port port;
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ for (port = PORT_A; port <= PORT_B; port++) {
|
|
Thomas Zimmermann |
34ce7c |
+ u32 val;
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(ICL_PHY_MISC(port));
|
|
Thomas Zimmermann |
34ce7c |
+ val |= ICL_PHY_MISC_DE_IO_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PHY_MISC(port), val);
|
|
Thomas Zimmermann |
34ce7c |
+
|
|
Thomas Zimmermann |
34ce7c |
+ val = I915_READ(ICL_PORT_COMP_DW0(port));
|
|
Thomas Zimmermann |
34ce7c |
+ val &= ~COMP_INIT;
|
|
Thomas Zimmermann |
34ce7c |
+ I915_WRITE(ICL_PORT_COMP_DW0(port), val);
|
|
Thomas Zimmermann |
34ce7c |
+ }
|
|
Thomas Zimmermann |
34ce7c |
+}
|
|
Thomas Zimmermann |
34ce7c |
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
|
|
Thomas Zimmermann |
34ce7c |
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
|
|
Thomas Zimmermann |
34ce7c |
@@ -3464,72 +3464,6 @@ void bxt_display_core_uninit(struct drm_
|
|
Thomas Zimmermann |
34ce7c |
usleep_range(10, 30); /* 10 us delay per Bspec */
|
|
Thomas Zimmermann |
34ce7c |
}
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
-enum {
|
|
Thomas Zimmermann |
34ce7c |
- PROCMON_0_85V_DOT_0,
|
|
Thomas Zimmermann |
34ce7c |
- PROCMON_0_95V_DOT_0,
|
|
Thomas Zimmermann |
34ce7c |
- PROCMON_0_95V_DOT_1,
|
|
Thomas Zimmermann |
34ce7c |
- PROCMON_1_05V_DOT_0,
|
|
Thomas Zimmermann |
34ce7c |
- PROCMON_1_05V_DOT_1,
|
|
Thomas Zimmermann |
34ce7c |
-};
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
-static const struct cnl_procmon {
|
|
Thomas Zimmermann |
34ce7c |
- u32 dw1, dw9, dw10;
|
|
Thomas Zimmermann |
34ce7c |
-} cnl_procmon_values[] = {
|
|
Thomas Zimmermann |
34ce7c |
- [PROCMON_0_85V_DOT_0] =
|
|
Thomas Zimmermann |
34ce7c |
- { .dw1 = 0x00000000, .dw9 = 0x62AB67BB, .dw10 = 0x51914F96, },
|
|
Thomas Zimmermann |
34ce7c |
- [PROCMON_0_95V_DOT_0] =
|
|
Thomas Zimmermann |
34ce7c |
- { .dw1 = 0x00000000, .dw9 = 0x86E172C7, .dw10 = 0x77CA5EAB, },
|
|
Thomas Zimmermann |
34ce7c |
- [PROCMON_0_95V_DOT_1] =
|
|
Thomas Zimmermann |
34ce7c |
- { .dw1 = 0x00000000, .dw9 = 0x93F87FE1, .dw10 = 0x8AE871C5, },
|
|
Thomas Zimmermann |
34ce7c |
- [PROCMON_1_05V_DOT_0] =
|
|
Thomas Zimmermann |
34ce7c |
- { .dw1 = 0x00000000, .dw9 = 0x98FA82DD, .dw10 = 0x89E46DC1, },
|
|
Thomas Zimmermann |
34ce7c |
- [PROCMON_1_05V_DOT_1] =
|
|
Thomas Zimmermann |
34ce7c |
- { .dw1 = 0x00440000, .dw9 = 0x9A00AB25, .dw10 = 0x8AE38FF1, },
|
|
Thomas Zimmermann |
34ce7c |
-};
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
-/*
|
|
Thomas Zimmermann |
34ce7c |
- * CNL has just one set of registers, while ICL has two sets: one for port A and
|
|
Thomas Zimmermann |
34ce7c |
- * the other for port B. The CNL registers are equivalent to the ICL port A
|
|
Thomas Zimmermann |
34ce7c |
- * registers, that's why we call the ICL macros even though the function has CNL
|
|
Thomas Zimmermann |
34ce7c |
- * on its name.
|
|
Thomas Zimmermann |
34ce7c |
- */
|
|
Thomas Zimmermann |
34ce7c |
-static void cnl_set_procmon_ref_values(struct drm_i915_private *dev_priv,
|
|
Thomas Zimmermann |
34ce7c |
- enum port port)
|
|
Thomas Zimmermann |
34ce7c |
-{
|
|
Thomas Zimmermann |
34ce7c |
- const struct cnl_procmon *procmon;
|
|
Thomas Zimmermann |
34ce7c |
- u32 val;
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(ICL_PORT_COMP_DW3(port));
|
|
Thomas Zimmermann |
34ce7c |
- switch (val & (PROCESS_INFO_MASK | VOLTAGE_INFO_MASK)) {
|
|
Thomas Zimmermann |
34ce7c |
- default:
|
|
Thomas Zimmermann |
34ce7c |
- MISSING_CASE(val);
|
|
Thomas Zimmermann |
34ce7c |
- /* fall through */
|
|
Thomas Zimmermann |
34ce7c |
- case VOLTAGE_INFO_0_85V | PROCESS_INFO_DOT_0:
|
|
Thomas Zimmermann |
34ce7c |
- procmon = &cnl_procmon_values[PROCMON_0_85V_DOT_0];
|
|
Thomas Zimmermann |
34ce7c |
- break;
|
|
Thomas Zimmermann |
34ce7c |
- case VOLTAGE_INFO_0_95V | PROCESS_INFO_DOT_0:
|
|
Thomas Zimmermann |
34ce7c |
- procmon = &cnl_procmon_values[PROCMON_0_95V_DOT_0];
|
|
Thomas Zimmermann |
34ce7c |
- break;
|
|
Thomas Zimmermann |
34ce7c |
- case VOLTAGE_INFO_0_95V | PROCESS_INFO_DOT_1:
|
|
Thomas Zimmermann |
34ce7c |
- procmon = &cnl_procmon_values[PROCMON_0_95V_DOT_1];
|
|
Thomas Zimmermann |
34ce7c |
- break;
|
|
Thomas Zimmermann |
34ce7c |
- case VOLTAGE_INFO_1_05V | PROCESS_INFO_DOT_0:
|
|
Thomas Zimmermann |
34ce7c |
- procmon = &cnl_procmon_values[PROCMON_1_05V_DOT_0];
|
|
Thomas Zimmermann |
34ce7c |
- break;
|
|
Thomas Zimmermann |
34ce7c |
- case VOLTAGE_INFO_1_05V | PROCESS_INFO_DOT_1:
|
|
Thomas Zimmermann |
34ce7c |
- procmon = &cnl_procmon_values[PROCMON_1_05V_DOT_1];
|
|
Thomas Zimmermann |
34ce7c |
- break;
|
|
Thomas Zimmermann |
34ce7c |
- }
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(ICL_PORT_COMP_DW1(port));
|
|
Thomas Zimmermann |
34ce7c |
- val &= ~((0xff << 16) | 0xff);
|
|
Thomas Zimmermann |
34ce7c |
- val |= procmon->dw1;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PORT_COMP_DW1(port), val);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PORT_COMP_DW9(port), procmon->dw9);
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PORT_COMP_DW10(port), procmon->dw10);
|
|
Thomas Zimmermann |
34ce7c |
-}
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
static void cnl_display_core_init(struct drm_i915_private *dev_priv, bool resume)
|
|
Thomas Zimmermann |
34ce7c |
{
|
|
Thomas Zimmermann |
34ce7c |
struct i915_power_domains *power_domains = &dev_priv->power_domains;
|
|
Thomas Zimmermann |
34ce7c |
@@ -3543,22 +3477,8 @@ static void cnl_display_core_init(struct
|
|
Thomas Zimmermann |
34ce7c |
val |= RESET_PCH_HANDSHAKE_ENABLE;
|
|
Thomas Zimmermann |
34ce7c |
I915_WRITE(HSW_NDE_RSTWRN_OPT, val);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
- /* 2. Enable Comp */
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(CHICKEN_MISC_2);
|
|
Thomas Zimmermann |
34ce7c |
- val &= ~CNL_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(CHICKEN_MISC_2, val);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- /* Dummy PORT_A to get the correct CNL register from the ICL macro */
|
|
Thomas Zimmermann |
34ce7c |
- cnl_set_procmon_ref_values(dev_priv, PORT_A);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(CNL_PORT_COMP_DW0);
|
|
Thomas Zimmermann |
34ce7c |
- val |= COMP_INIT;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(CNL_PORT_COMP_DW0, val);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- /* 3. */
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(CNL_PORT_CL1CM_DW5);
|
|
Thomas Zimmermann |
34ce7c |
- val |= CL_POWER_DOWN_ENABLE;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(CNL_PORT_CL1CM_DW5, val);
|
|
Thomas Zimmermann |
34ce7c |
+ /* 2-3. */
|
|
Thomas Zimmermann |
34ce7c |
+ cnl_combo_phys_init(dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
/*
|
|
Thomas Zimmermann |
34ce7c |
* 4. Enable Power Well 1 (PG1).
|
|
Thomas Zimmermann |
34ce7c |
@@ -3583,7 +3503,6 @@ static void cnl_display_core_uninit(stru
|
|
Thomas Zimmermann |
34ce7c |
{
|
|
Thomas Zimmermann |
34ce7c |
struct i915_power_domains *power_domains = &dev_priv->power_domains;
|
|
Thomas Zimmermann |
34ce7c |
struct i915_power_well *well;
|
|
Thomas Zimmermann |
34ce7c |
- u32 val;
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
@@ -3607,10 +3526,8 @@ static void cnl_display_core_uninit(stru
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
usleep_range(10, 30); /* 10 us delay per Bspec */
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
- /* 5. Disable Comp */
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(CHICKEN_MISC_2);
|
|
Thomas Zimmermann |
34ce7c |
- val |= CNL_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(CHICKEN_MISC_2, val);
|
|
Thomas Zimmermann |
34ce7c |
+ /* 5. */
|
|
Thomas Zimmermann |
34ce7c |
+ cnl_combo_phys_uninit(dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
}
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
void icl_display_core_init(struct drm_i915_private *dev_priv,
|
|
Thomas Zimmermann |
34ce7c |
@@ -3618,7 +3535,6 @@ void icl_display_core_init(struct drm_i9
|
|
Thomas Zimmermann |
34ce7c |
{
|
|
Thomas Zimmermann |
34ce7c |
struct i915_power_domains *power_domains = &dev_priv->power_domains;
|
|
Thomas Zimmermann |
34ce7c |
struct i915_power_well *well;
|
|
Thomas Zimmermann |
34ce7c |
- enum port port;
|
|
Thomas Zimmermann |
34ce7c |
u32 val;
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
|
Thomas Zimmermann |
34ce7c |
@@ -3628,23 +3544,8 @@ void icl_display_core_init(struct drm_i9
|
|
Thomas Zimmermann |
34ce7c |
val |= RESET_PCH_HANDSHAKE_ENABLE;
|
|
Thomas Zimmermann |
34ce7c |
I915_WRITE(HSW_NDE_RSTWRN_OPT, val);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
- for (port = PORT_A; port <= PORT_B; port++) {
|
|
Thomas Zimmermann |
34ce7c |
- /* 2. Enable DDI combo PHY comp. */
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(ICL_PHY_MISC(port));
|
|
Thomas Zimmermann |
34ce7c |
- val &= ~ICL_PHY_MISC_DE_IO_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PHY_MISC(port), val);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- cnl_set_procmon_ref_values(dev_priv, port);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(ICL_PORT_COMP_DW0(port));
|
|
Thomas Zimmermann |
34ce7c |
- val |= COMP_INIT;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PORT_COMP_DW0(port), val);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- /* 3. Set power down enable. */
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(ICL_PORT_CL_DW5(port));
|
|
Thomas Zimmermann |
34ce7c |
- val |= CL_POWER_DOWN_ENABLE;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PORT_CL_DW5(port), val);
|
|
Thomas Zimmermann |
34ce7c |
- }
|
|
Thomas Zimmermann |
34ce7c |
+ /* 2-3. */
|
|
Thomas Zimmermann |
34ce7c |
+ icl_combo_phys_init(dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
/*
|
|
Thomas Zimmermann |
34ce7c |
* 4. Enable Power Well 1 (PG1).
|
|
Thomas Zimmermann |
34ce7c |
@@ -3672,8 +3573,6 @@ void icl_display_core_uninit(struct drm_
|
|
Thomas Zimmermann |
34ce7c |
{
|
|
Thomas Zimmermann |
34ce7c |
struct i915_power_domains *power_domains = &dev_priv->power_domains;
|
|
Thomas Zimmermann |
34ce7c |
struct i915_power_well *well;
|
|
Thomas Zimmermann |
34ce7c |
- enum port port;
|
|
Thomas Zimmermann |
34ce7c |
- u32 val;
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
@@ -3695,16 +3594,8 @@ void icl_display_core_uninit(struct drm_
|
|
Thomas Zimmermann |
34ce7c |
intel_power_well_disable(dev_priv, well);
|
|
Thomas Zimmermann |
34ce7c |
mutex_unlock(&power_domains->lock);
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
- /* 5. Disable Comp */
|
|
Thomas Zimmermann |
34ce7c |
- for (port = PORT_A; port <= PORT_B; port++) {
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(ICL_PHY_MISC(port));
|
|
Thomas Zimmermann |
34ce7c |
- val |= ICL_PHY_MISC_DE_IO_COMP_PWR_DOWN;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PHY_MISC(port), val);
|
|
Thomas Zimmermann |
34ce7c |
-
|
|
Thomas Zimmermann |
34ce7c |
- val = I915_READ(ICL_PORT_COMP_DW0(port));
|
|
Thomas Zimmermann |
34ce7c |
- val &= ~COMP_INIT;
|
|
Thomas Zimmermann |
34ce7c |
- I915_WRITE(ICL_PORT_COMP_DW0(port), val);
|
|
Thomas Zimmermann |
34ce7c |
- }
|
|
Thomas Zimmermann |
34ce7c |
+ /* 5. */
|
|
Thomas Zimmermann |
34ce7c |
+ icl_combo_phys_uninit(dev_priv);
|
|
Thomas Zimmermann |
34ce7c |
}
|
|
Thomas Zimmermann |
34ce7c |
|
|
Thomas Zimmermann |
34ce7c |
static void chv_phy_control_init(struct drm_i915_private *dev_priv)
|