All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] ICL DSI PLL enable
@ 2018-11-27  9:39 Vandita Kulkarni
  2018-11-27  9:39 ` [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI Vandita Kulkarni
                   ` (7 more replies)
  0 siblings, 8 replies; 16+ messages in thread
From: Vandita Kulkarni @ 2018-11-27  9:39 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala

ICL DSI uses DPLL.
As per the discussion with hw team, the same
sequence can be used for enabling DPLL for mipi dsi
as well. Hence reusing the dpll functions from icl pll manager.
In addition to that we need to program
the esc clock register before enabling dsi.

This has been tested on git://people.freedesktop.org/~jani/drm
and the patches are rebased on this.

Madhav Chauhan (3):
  drm/i915/icl: Calculate DPLL params for DSI
  drm/i915/icl: Gate clocks for DSI
  drm/i915/icl: Ungate DSI clocks

Vandita Kulkarni (3):
  drm/i915/icl: Use the same pll functions for dsi
  drm/i915/icl: Get port clock from pll.
  drm/i915/icl: Update port clock in compute config

 drivers/gpu/drm/i915/icl_dsi.c        | 62 ++++++++++++++++++++++++++++++++---
 drivers/gpu/drm/i915/intel_ddi.c      |  2 +-
 drivers/gpu/drm/i915/intel_display.c  |  4 ++-
 drivers/gpu/drm/i915/intel_dpll_mgr.c |  6 ++--
 drivers/gpu/drm/i915/intel_dsi.h      |  4 +++
 5 files changed, 68 insertions(+), 10 deletions(-)

-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
@ 2018-11-27  9:39 ` Vandita Kulkarni
  2018-11-27 10:14   ` Jani Nikula
  2018-11-27 10:43   ` Chauhan, Madhav
  2018-11-27  9:39 ` [PATCH 2/6] drm/i915/icl: Use the same pll functions for dsi Vandita Kulkarni
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 16+ messages in thread
From: Vandita Kulkarni @ 2018-11-27  9:39 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala

From: Madhav Chauhan <madhav.chauhan@intel.com>

This patch calculates various DPLL dividers and
parameters for DSI encoder and adjust AFE clock
for DSI. For DSI, 8x clock is AFE clock.

v2: Extend haswell_crtc_compute_clock() for Gen11 DSI

v3: Rebase

v4: use port clock instead of bitrate.

v5: Reabse and remove divide by 5

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c  | 4 +++-
 drivers/gpu/drm/i915/intel_dpll_mgr.c | 6 +++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 27bdf91..1318faf 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9303,10 +9303,12 @@ void hsw_disable_pc8(struct drm_i915_private *dev_priv)
 static int haswell_crtc_compute_clock(struct intel_crtc *crtc,
 				      struct intel_crtc_state *crtc_state)
 {
+	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
 	struct intel_atomic_state *state =
 		to_intel_atomic_state(crtc_state->base.state);
 
-	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI)) {
+	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI) ||
+	     IS_ICELAKE(dev_priv)) {
 		struct intel_encoder *encoder =
 			intel_get_crtc_new_encoder(state, crtc_state);
 
diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c
index 901e150..e3cb0db 100644
--- a/drivers/gpu/drm/i915/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c
@@ -2523,10 +2523,10 @@ static bool icl_calc_dpll_state(struct intel_crtc_state *crtc_state,
 
 	if (intel_port_is_tc(dev_priv, encoder->port))
 		ret = icl_calc_tbt_pll(dev_priv, clock, &pll_params);
-	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
-		ret = cnl_ddi_calculate_wrpll(clock, dev_priv, &pll_params);
-	else
+	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP))
 		ret = icl_calc_dp_combo_pll(dev_priv, clock, &pll_params);
+	else
+		ret = cnl_ddi_calculate_wrpll(clock, dev_priv, &pll_params);
 
 	if (!ret)
 		return false;
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/6] drm/i915/icl: Use the same pll functions for dsi
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
  2018-11-27  9:39 ` [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI Vandita Kulkarni
@ 2018-11-27  9:39 ` Vandita Kulkarni
  2018-11-27 10:48   ` Chauhan, Madhav
  2018-11-27  9:39 ` [PATCH 3/6] drm/i915/icl: Get port clock from pll Vandita Kulkarni
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Vandita Kulkarni @ 2018-11-27  9:39 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala

The same pll manager functions can be used to enable
dpll for mipi. Hence enabling the IO power and
esc clock as part of pre pll enable call.

Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 89ede31..8590825 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -924,17 +924,22 @@ static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
 	wait_for_cmds_dispatched_to_panel(encoder);
 }
 
-static void gen11_dsi_pre_enable(struct intel_encoder *encoder,
+static void gen11_dsi_pre_pll_enable(struct intel_encoder *encoder,
 				 const struct intel_crtc_state *pipe_config,
 				 const struct drm_connector_state *conn_state)
 {
-	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-
 	/* step2: enable IO power */
 	gen11_dsi_enable_io_power(encoder);
 
 	/* step3: enable DSI PLL */
 	gen11_dsi_program_esc_clk_div(encoder);
+}
+
+static void gen11_dsi_pre_enable(struct intel_encoder *encoder,
+				 const struct intel_crtc_state *pipe_config,
+				 const struct drm_connector_state *conn_state)
+{
+	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
 
 	/* step4: enable DSI port and DPHY */
 	gen11_dsi_enable_port_and_phy(encoder, pipe_config);
@@ -1305,6 +1310,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
 			 DRM_MODE_ENCODER_DSI, "DSI %c", port_name(port));
 
 	encoder->pre_enable = gen11_dsi_pre_enable;
+	encoder->pre_pll_enable = gen11_dsi_pre_pll_enable;
 	encoder->disable = gen11_dsi_disable;
 	encoder->port = port;
 	encoder->get_config = gen11_dsi_get_config;
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 3/6] drm/i915/icl: Get port clock from pll.
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
  2018-11-27  9:39 ` [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI Vandita Kulkarni
  2018-11-27  9:39 ` [PATCH 2/6] drm/i915/icl: Use the same pll functions for dsi Vandita Kulkarni
@ 2018-11-27  9:39 ` Vandita Kulkarni
  2018-11-27 11:02   ` Chauhan, Madhav
  2018-11-27  9:39 ` [PATCH 4/6] drm/i915/icl: Gate clocks for DSI Vandita Kulkarni
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Vandita Kulkarni @ 2018-11-27  9:39 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala

Use the same method to get port clock
like other encoders.

Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c   | 10 ++++++++--
 drivers/gpu/drm/i915/intel_ddi.c |  2 +-
 drivers/gpu/drm/i915/intel_dsi.h |  4 ++++
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 8590825..ec22b2e 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -1105,12 +1105,18 @@ static void gen11_dsi_get_config(struct intel_encoder *encoder,
 {
 	struct intel_dsi *intel_dsi = container_of(encoder, struct intel_dsi,
 						   base);
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	int link_clock = 0;
+	uint32_t pll_id;
 	u32 pixel_clk;
 
-	//FIXME: Calculate pixel clock using PLL functions once implemented.
+	pll_id = intel_get_shared_dpll_id(dev_priv, pipe_config->shared_dpll);
+	link_clock = cnl_calc_wrpll_link(dev_priv, pll_id);
+	pipe_config->port_clock = link_clock;
+
 	pixel_clk = intel_dsi->pclk;
 	pipe_config->base.adjusted_mode.crtc_clock = pixel_clk;
-	pipe_config->port_clock = pixel_clk;
+	pipe_config->output_types |= BIT(INTEL_OUTPUT_DSI);
 }
 
 static bool gen11_dsi_compute_config(struct intel_encoder *encoder,
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index ad11540..3783f79 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1363,7 +1363,7 @@ static int skl_calc_wrpll_link(struct drm_i915_private *dev_priv,
 	return dco_freq / (p0 * p1 * p2 * 5);
 }
 
-static int cnl_calc_wrpll_link(struct drm_i915_private *dev_priv,
+int cnl_calc_wrpll_link(struct drm_i915_private *dev_priv,
 			       enum intel_dpll_id pll_id)
 {
 	uint32_t cfgcr0, cfgcr1;
diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
index ee93137..80805bf 100644
--- a/drivers/gpu/drm/i915/intel_dsi.h
+++ b/drivers/gpu/drm/i915/intel_dsi.h
@@ -189,4 +189,8 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
 				 enum mipi_seq seq_id);
 void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec);
 
+/* icl dsi uses combophy pll which can be used by any ddi */
+int cnl_calc_wrpll_link(struct drm_i915_private *dev_priv,
+			enum intel_dpll_id pll_id);
+
 #endif /* _INTEL_DSI_H */
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 4/6] drm/i915/icl: Gate clocks for DSI
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
                   ` (2 preceding siblings ...)
  2018-11-27  9:39 ` [PATCH 3/6] drm/i915/icl: Get port clock from pll Vandita Kulkarni
@ 2018-11-27  9:39 ` Vandita Kulkarni
  2018-11-27 14:06   ` Imre Deak
  2018-11-27  9:39 ` [PATCH 5/6] drm/i915/icl: Ungate DSI clocks Vandita Kulkarni
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Vandita Kulkarni @ 2018-11-27  9:39 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala

From: Madhav Chauhan <madhav.chauhan@intel.com>

As per BSPEC, depending on the DSI transcoder being used,
DDI clock for the associated port should be gated. This
patch does the same.

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index ec22b2e..fe4efc7 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -536,6 +536,23 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
 	}
 }
 
+static void gen11_dsi_gate_clocks(struct intel_encoder *encoder)
+{
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
+	u32 tmp;
+	enum port port;
+
+	mutex_lock(&dev_priv->dpll_lock);
+	tmp = I915_READ(DPCLKA_CFGCR0_ICL);
+	for_each_dsi_port(port, intel_dsi->ports) {
+		tmp |= DPCLKA_CFGCR0_DDI_CLK_OFF(port);
+	}
+
+	I915_WRITE(DPCLKA_CFGCR0_ICL, tmp);
+	mutex_unlock(&dev_priv->dpll_lock);
+}
+
 static void
 gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
 			       const struct intel_crtc_state *pipe_config)
@@ -883,6 +900,9 @@ static void gen11_dsi_setup_timeouts(struct intel_encoder *encoder)
 
 	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
 	gen11_dsi_configure_transcoder(encoder, pipe_config);
+
+	/* Step 4l: Gate DDI clocks */
+	gen11_dsi_gate_clocks(encoder);
 }
 
 static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 5/6] drm/i915/icl: Ungate DSI clocks
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
                   ` (3 preceding siblings ...)
  2018-11-27  9:39 ` [PATCH 4/6] drm/i915/icl: Gate clocks for DSI Vandita Kulkarni
@ 2018-11-27  9:39 ` Vandita Kulkarni
  2018-11-27  9:39 ` [PATCH 6/6] drm/i915/icl: Update port clock in compute config Vandita Kulkarni
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 16+ messages in thread
From: Vandita Kulkarni @ 2018-11-27  9:39 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala

From: Madhav Chauhan <madhav.chauhan@intel.com>

Ungate the clocks on the selected port.

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index fe4efc7..80382fb 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -553,6 +553,23 @@ static void gen11_dsi_gate_clocks(struct intel_encoder *encoder)
 	mutex_unlock(&dev_priv->dpll_lock);
 }
 
+static void gen11_dsi_ungate_clocks(struct intel_encoder *encoder)
+{
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
+	u32 tmp;
+	enum port port;
+
+	mutex_lock(&dev_priv->dpll_lock);
+	tmp = I915_READ(DPCLKA_CFGCR0_ICL);
+	for_each_dsi_port(port, intel_dsi->ports) {
+		tmp &= ~DPCLKA_CFGCR0_DDI_CLK_OFF(port);
+	}
+
+	I915_WRITE(DPCLKA_CFGCR0_ICL, tmp);
+	mutex_unlock(&dev_priv->dpll_lock);
+}
+
 static void
 gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
 			       const struct intel_crtc_state *pipe_config)
@@ -1061,6 +1078,7 @@ static void gen11_dsi_disable_port(struct intel_encoder *encoder)
 	u32 tmp;
 	enum port port;
 
+	gen11_dsi_ungate_clocks(encoder);
 	for_each_dsi_port(port, intel_dsi->ports) {
 		tmp = I915_READ(DDI_BUF_CTL(port));
 		tmp &= ~DDI_BUF_CTL_ENABLE;
@@ -1072,6 +1090,7 @@ static void gen11_dsi_disable_port(struct intel_encoder *encoder)
 			DRM_ERROR("DDI port:%c buffer not idle\n",
 				  port_name(port));
 	}
+	gen11_dsi_ungate_clocks(encoder);
 }
 
 static void gen11_dsi_disable_io_power(struct intel_encoder *encoder)
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 6/6] drm/i915/icl: Update port clock in compute config
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
                   ` (4 preceding siblings ...)
  2018-11-27  9:39 ` [PATCH 5/6] drm/i915/icl: Ungate DSI clocks Vandita Kulkarni
@ 2018-11-27  9:39 ` Vandita Kulkarni
  2018-11-27 11:20   ` Chauhan, Madhav
  2018-11-27 10:08 ` ✗ Fi.CI.BAT: failure for ICL DSI PLL enable (rev2) Patchwork
  2018-11-27 11:27 ` [PATCH 0/6] ICL DSI PLL enable Chauhan, Madhav
  7 siblings, 1 reply; 16+ messages in thread
From: Vandita Kulkarni @ 2018-11-27  9:39 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala

For DSI 8X clock is AFE clock which is
is 5 times port clock.

Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 80382fb..2812129 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -1183,6 +1183,7 @@ static bool gen11_dsi_compute_config(struct intel_encoder *encoder,
 		pipe_config->cpu_transcoder = TRANSCODER_DSI_0;
 
 	pipe_config->clock_set = true;
+	pipe_config->port_clock = intel_dsi_bitrate(intel_dsi)/5;
 
 	//TODO: Add check if DSI PLL calculation is done
 
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* ✗ Fi.CI.BAT: failure for ICL DSI PLL enable (rev2)
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
                   ` (5 preceding siblings ...)
  2018-11-27  9:39 ` [PATCH 6/6] drm/i915/icl: Update port clock in compute config Vandita Kulkarni
@ 2018-11-27 10:08 ` Patchwork
  2018-11-27 11:27 ` [PATCH 0/6] ICL DSI PLL enable Chauhan, Madhav
  7 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2018-11-27 10:08 UTC (permalink / raw)
  To: Vandita Kulkarni; +Cc: intel-gfx

== Series Details ==

Series: ICL DSI PLL enable (rev2)
URL   : https://patchwork.freedesktop.org/series/51373/
State : failure

== Summary ==

Applying: drm/i915/icl: Calculate DPLL params for DSI
Applying: drm/i915/icl: Use the same pll functions for dsi
error: sha1 information is lacking or useless (drivers/gpu/drm/i915/icl_dsi.c).
error: could not build fake ancestor
Patch failed at 0002 drm/i915/icl: Use the same pll functions for dsi
Use 'git am --show-current-patch' to see the failed patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI
  2018-11-27  9:39 ` [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI Vandita Kulkarni
@ 2018-11-27 10:14   ` Jani Nikula
  2018-11-27 10:43   ` Chauhan, Madhav
  1 sibling, 0 replies; 16+ messages in thread
From: Jani Nikula @ 2018-11-27 10:14 UTC (permalink / raw)
  To: Vandita Kulkarni, intel-gfx; +Cc: ville.syrjala

On Tue, 27 Nov 2018, Vandita Kulkarni <vandita.kulkarni@intel.com> wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch calculates various DPLL dividers and
> parameters for DSI encoder and adjust AFE clock
> for DSI. For DSI, 8x clock is AFE clock.
>
> v2: Extend haswell_crtc_compute_clock() for Gen11 DSI
>
> v3: Rebase
>
> v4: use port clock instead of bitrate.
>
> v5: Reabse and remove divide by 5
>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c  | 4 +++-
>  drivers/gpu/drm/i915/intel_dpll_mgr.c | 6 +++---
>  2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 27bdf91..1318faf 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9303,10 +9303,12 @@ void hsw_disable_pc8(struct drm_i915_private *dev_priv)
>  static int haswell_crtc_compute_clock(struct intel_crtc *crtc,
>  				      struct intel_crtc_state *crtc_state)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>  	struct intel_atomic_state *state =
>  		to_intel_atomic_state(crtc_state->base.state);
>  
> -	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI)) {
> +	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI) ||
> +	     IS_ICELAKE(dev_priv)) {
>  		struct intel_encoder *encoder =
>  			intel_get_crtc_new_encoder(state, crtc_state);
>  
> diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c
> index 901e150..e3cb0db 100644
> --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c
> @@ -2523,10 +2523,10 @@ static bool icl_calc_dpll_state(struct intel_crtc_state *crtc_state,
>  
>  	if (intel_port_is_tc(dev_priv, encoder->port))
>  		ret = icl_calc_tbt_pll(dev_priv, clock, &pll_params);
> -	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
> -		ret = cnl_ddi_calculate_wrpll(clock, dev_priv, &pll_params);
> -	else
> +	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP))

I think this breaks EDP and DP MST. Probably just safest to add

	|| intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI)

alongside the HDMI branch.

BR,
Jani.

>  		ret = icl_calc_dp_combo_pll(dev_priv, clock, &pll_params);
> +	else
> +		ret = cnl_ddi_calculate_wrpll(clock, dev_priv, &pll_params);
>  
>  	if (!ret)
>  		return false;

-- 
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI
  2018-11-27  9:39 ` [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI Vandita Kulkarni
  2018-11-27 10:14   ` Jani Nikula
@ 2018-11-27 10:43   ` Chauhan, Madhav
  1 sibling, 0 replies; 16+ messages in thread
From: Chauhan, Madhav @ 2018-11-27 10:43 UTC (permalink / raw)
  To: Kulkarni, Vandita, intel-gfx; +Cc: Nikula, Jani, Syrjala, Ville

> -----Original Message-----
> From: Kulkarni, Vandita
> Sent: Tuesday, November 27, 2018 3:09 PM
> To: intel-gfx@lists.freedesktop.org
> Cc: Chauhan, Madhav <madhav.chauhan@intel.com>; Nikula, Jani
> <jani.nikula@intel.com>; Syrjala, Ville <ville.syrjala@intel.com>; Kulkarni,
> Vandita <vandita.kulkarni@intel.com>
> Subject: [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI
> 
> From: Madhav Chauhan <madhav.chauhan@intel.com>
> 
> This patch calculates various DPLL dividers and parameters for DSI encoder
> and adjust AFE clock for DSI. For DSI, 8x clock is AFE clock.
> 
> v2: Extend haswell_crtc_compute_clock() for Gen11 DSI
> 
> v3: Rebase
> 
> v4: use port clock instead of bitrate.
> 
> v5: Reabse and remove divide by 5
> 
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c  | 4 +++-
> drivers/gpu/drm/i915/intel_dpll_mgr.c | 6 +++---
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index 27bdf91..1318faf 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9303,10 +9303,12 @@ void hsw_disable_pc8(struct drm_i915_private
> *dev_priv)  static int haswell_crtc_compute_clock(struct intel_crtc *crtc,
>  				      struct intel_crtc_state *crtc_state)  {
> +	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>  	struct intel_atomic_state *state =
>  		to_intel_atomic_state(crtc_state->base.state);
> 
> -	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI)) {
> +	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI) ||
> +	     IS_ICELAKE(dev_priv)) {

Please align IS_ICELAKE(dev_priv) to "(".

Regards,
Madhav

>  		struct intel_encoder *encoder =
>  			intel_get_crtc_new_encoder(state, crtc_state);
> 
> diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/intel_dpll_mgr.c
> index 901e150..e3cb0db 100644
> --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c
> @@ -2523,10 +2523,10 @@ static bool icl_calc_dpll_state(struct
> intel_crtc_state *crtc_state,
> 
>  	if (intel_port_is_tc(dev_priv, encoder->port))
>  		ret = icl_calc_tbt_pll(dev_priv, clock, &pll_params);
> -	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
> -		ret = cnl_ddi_calculate_wrpll(clock, dev_priv, &pll_params);
> -	else
> +	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP))
>  		ret = icl_calc_dp_combo_pll(dev_priv, clock, &pll_params);
> +	else
> +		ret = cnl_ddi_calculate_wrpll(clock, dev_priv, &pll_params);
> 
>  	if (!ret)
>  		return false;
> --
> 1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/6] drm/i915/icl: Use the same pll functions for dsi
  2018-11-27  9:39 ` [PATCH 2/6] drm/i915/icl: Use the same pll functions for dsi Vandita Kulkarni
@ 2018-11-27 10:48   ` Chauhan, Madhav
  0 siblings, 0 replies; 16+ messages in thread
From: Chauhan, Madhav @ 2018-11-27 10:48 UTC (permalink / raw)
  To: Kulkarni, Vandita, intel-gfx; +Cc: Nikula, Jani, Syrjala, Ville

> -----Original Message-----
> From: Kulkarni, Vandita
> Sent: Tuesday, November 27, 2018 3:09 PM
> To: intel-gfx@lists.freedesktop.org
> Cc: Chauhan, Madhav <madhav.chauhan@intel.com>; Nikula, Jani
> <jani.nikula@intel.com>; Syrjala, Ville <ville.syrjala@intel.com>; Kulkarni,
> Vandita <vandita.kulkarni@intel.com>
> Subject: [PATCH 2/6] drm/i915/icl: Use the same pll functions for dsi
> 
> The same pll manager functions can be used to enable dpll for mipi. Hence
> enabling the IO power and esc clock as part of pre pll enable call.
> 
> Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
> ---
>  drivers/gpu/drm/i915/icl_dsi.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 89ede31..8590825 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -924,17 +924,22 @@ static void gen11_dsi_powerup_panel(struct
> intel_encoder *encoder)
>  	wait_for_cmds_dispatched_to_panel(encoder);
>  }
> 
> -static void gen11_dsi_pre_enable(struct intel_encoder *encoder,
> +static void gen11_dsi_pre_pll_enable(struct intel_encoder *encoder,
>  				 const struct intel_crtc_state *pipe_config,
>  				 const struct drm_connector_state

Correct the alignment of pipe_config and connector_state.
With that fix,
Reviewed-by: Madhav Chauhan <madhav.chauhan@intel.com>

Regards,
Madhav

> *conn_state)  {
> -	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> -
>  	/* step2: enable IO power */
>  	gen11_dsi_enable_io_power(encoder);
> 
>  	/* step3: enable DSI PLL */
>  	gen11_dsi_program_esc_clk_div(encoder);
> +}
> +
> +static void gen11_dsi_pre_enable(struct intel_encoder *encoder,
> +				 const struct intel_crtc_state *pipe_config,
> +				 const struct drm_connector_state
> *conn_state) {
> +	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> 
>  	/* step4: enable DSI port and DPHY */
>  	gen11_dsi_enable_port_and_phy(encoder, pipe_config); @@ -
> 1305,6 +1310,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
>  			 DRM_MODE_ENCODER_DSI, "DSI %c",
> port_name(port));
> 
>  	encoder->pre_enable = gen11_dsi_pre_enable;
> +	encoder->pre_pll_enable = gen11_dsi_pre_pll_enable;
>  	encoder->disable = gen11_dsi_disable;
>  	encoder->port = port;
>  	encoder->get_config = gen11_dsi_get_config;
> --
> 1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 3/6] drm/i915/icl: Get port clock from pll.
  2018-11-27  9:39 ` [PATCH 3/6] drm/i915/icl: Get port clock from pll Vandita Kulkarni
@ 2018-11-27 11:02   ` Chauhan, Madhav
  0 siblings, 0 replies; 16+ messages in thread
From: Chauhan, Madhav @ 2018-11-27 11:02 UTC (permalink / raw)
  To: Kulkarni, Vandita, intel-gfx; +Cc: Nikula, Jani, Syrjala, Ville

> -----Original Message-----
> From: Kulkarni, Vandita
> Sent: Tuesday, November 27, 2018 3:09 PM
> To: intel-gfx@lists.freedesktop.org
> Cc: Chauhan, Madhav <madhav.chauhan@intel.com>; Nikula, Jani
> <jani.nikula@intel.com>; Syrjala, Ville <ville.syrjala@intel.com>; Kulkarni,
> Vandita <vandita.kulkarni@intel.com>
> Subject: [PATCH 3/6] drm/i915/icl: Get port clock from pll.
> 
> Use the same method to get port clock
> like other encoders.
> 
> Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
> ---
>  drivers/gpu/drm/i915/icl_dsi.c   | 10 ++++++++--
>  drivers/gpu/drm/i915/intel_ddi.c |  2 +-  drivers/gpu/drm/i915/intel_dsi.h |
> 4 ++++
>  3 files changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 8590825..ec22b2e 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -1105,12 +1105,18 @@ static void gen11_dsi_get_config(struct
> intel_encoder *encoder,  {
>  	struct intel_dsi *intel_dsi = container_of(encoder, struct intel_dsi,
>  						   base);
> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> +	int link_clock = 0;

We are directly overwriting this field without reading first.
We might not need initialization.

> +	uint32_t pll_id;
>  	u32 pixel_clk;
> 
> -	//FIXME: Calculate pixel clock using PLL functions once implemented.
> +	pll_id = intel_get_shared_dpll_id(dev_priv, pipe_config-
> >shared_dpll);
> +	link_clock = cnl_calc_wrpll_link(dev_priv, pll_id);
> +	pipe_config->port_clock = link_clock;
> +
Remove extra blank line.

>  	pixel_clk = intel_dsi->pclk;

We can directly use intel_dsi->pclk without using local variable.

>  	pipe_config->base.adjusted_mode.crtc_clock = pixel_clk;
> -	pipe_config->port_clock = pixel_clk;
> +	pipe_config->output_types |= BIT(INTEL_OUTPUT_DSI);
>  }
> 
>  static bool gen11_dsi_compute_config(struct intel_encoder *encoder, diff --
> git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index ad11540..3783f79 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -1363,7 +1363,7 @@ static int skl_calc_wrpll_link(struct
> drm_i915_private *dev_priv,
>  	return dco_freq / (p0 * p1 * p2 * 5);
>  }
> 
> -static int cnl_calc_wrpll_link(struct drm_i915_private *dev_priv,
> +int cnl_calc_wrpll_link(struct drm_i915_private *dev_priv,
>  			       enum intel_dpll_id pll_id)
>  {
>  	uint32_t cfgcr0, cfgcr1;
> diff --git a/drivers/gpu/drm/i915/intel_dsi.h
> b/drivers/gpu/drm/i915/intel_dsi.h
> index ee93137..80805bf 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.h
> +++ b/drivers/gpu/drm/i915/intel_dsi.h
> @@ -189,4 +189,8 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi
> *intel_dsi,
>  				 enum mipi_seq seq_id);
>  void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec);
> 
> +/* icl dsi uses combophy pll which can be used by any ddi */ int
> +cnl_calc_wrpll_link(struct drm_i915_private *dev_priv,
> +			enum intel_dpll_id pll_id);
> +

All other intel_ddi.c functions has prototype added inside intel_drv.h,
why here for cnl_calc_wrpll_link??

Regards,
Madhav

>  #endif /* _INTEL_DSI_H */
> --
> 1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 6/6] drm/i915/icl: Update port clock in compute config
  2018-11-27  9:39 ` [PATCH 6/6] drm/i915/icl: Update port clock in compute config Vandita Kulkarni
@ 2018-11-27 11:20   ` Chauhan, Madhav
  0 siblings, 0 replies; 16+ messages in thread
From: Chauhan, Madhav @ 2018-11-27 11:20 UTC (permalink / raw)
  To: Kulkarni, Vandita, intel-gfx; +Cc: Nikula, Jani, Syrjala, Ville

> -----Original Message-----
> From: Kulkarni, Vandita
> Sent: Tuesday, November 27, 2018 3:09 PM
> To: intel-gfx@lists.freedesktop.org
> Cc: Chauhan, Madhav <madhav.chauhan@intel.com>; Nikula, Jani
> <jani.nikula@intel.com>; Syrjala, Ville <ville.syrjala@intel.com>; Kulkarni,
> Vandita <vandita.kulkarni@intel.com>
> Subject: [PATCH 6/6] drm/i915/icl: Update port clock in compute config
> 
> For DSI 8X clock is AFE clock which is
> is 5 times port clock.

This description need to be rewritten atleast removal of "is" duplication.

> 
> Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
> ---
>  drivers/gpu/drm/i915/icl_dsi.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 80382fb..2812129 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -1183,6 +1183,7 @@ static bool gen11_dsi_compute_config(struct
> intel_encoder *encoder,
>  		pipe_config->cpu_transcoder = TRANSCODER_DSI_0;
> 
>  	pipe_config->clock_set = true;
> +	pipe_config->port_clock = intel_dsi_bitrate(intel_dsi)/5;
> 
>  	//TODO: Add check if DSI PLL calculation is done

We won't need this "TODO" now.

With these fixes,
Reviewed-by: Madhav Chauhan <madhav.chauhan@intel.com>

Regards,
Madhav

> 
> --
> 1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 0/6] ICL DSI PLL enable
  2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
                   ` (6 preceding siblings ...)
  2018-11-27 10:08 ` ✗ Fi.CI.BAT: failure for ICL DSI PLL enable (rev2) Patchwork
@ 2018-11-27 11:27 ` Chauhan, Madhav
  7 siblings, 0 replies; 16+ messages in thread
From: Chauhan, Madhav @ 2018-11-27 11:27 UTC (permalink / raw)
  To: Kulkarni, Vandita, intel-gfx; +Cc: Nikula, Jani, Syrjala, Ville

Vandita,
As we discussed earlier, we need to select clock for PORT_B as well 
in dual link video scenario even though we are going to use same DPLL for both the
Ports. This will be done by DPCLKA_CFGCR0_DDI_CLK_SEL.
icl_map_plls_to_ports inside haswell_crtc_enable() doesn't take care of that
as its DSI specific requirement.

Regards,
Madhav

> -----Original Message-----
> From: Kulkarni, Vandita
> Sent: Tuesday, November 27, 2018 3:09 PM
> To: intel-gfx@lists.freedesktop.org
> Cc: Chauhan, Madhav <madhav.chauhan@intel.com>; Nikula, Jani
> <jani.nikula@intel.com>; Syrjala, Ville <ville.syrjala@intel.com>; Kulkarni,
> Vandita <vandita.kulkarni@intel.com>
> Subject: [PATCH 0/6] ICL DSI PLL enable
> 
> ICL DSI uses DPLL.
> As per the discussion with hw team, the same sequence can be used for
> enabling DPLL for mipi dsi as well. Hence reusing the dpll functions from icl
> pll manager.
> In addition to that we need to program
> the esc clock register before enabling dsi.
> 
> This has been tested on git://people.freedesktop.org/~jani/drm
> and the patches are rebased on this.
> 
> Madhav Chauhan (3):
>   drm/i915/icl: Calculate DPLL params for DSI
>   drm/i915/icl: Gate clocks for DSI
>   drm/i915/icl: Ungate DSI clocks
> 
> Vandita Kulkarni (3):
>   drm/i915/icl: Use the same pll functions for dsi
>   drm/i915/icl: Get port clock from pll.
>   drm/i915/icl: Update port clock in compute config
> 
>  drivers/gpu/drm/i915/icl_dsi.c        | 62
> ++++++++++++++++++++++++++++++++---
>  drivers/gpu/drm/i915/intel_ddi.c      |  2 +-
>  drivers/gpu/drm/i915/intel_display.c  |  4 ++-
> drivers/gpu/drm/i915/intel_dpll_mgr.c |  6 ++--
>  drivers/gpu/drm/i915/intel_dsi.h      |  4 +++
>  5 files changed, 68 insertions(+), 10 deletions(-)
> 
> --
> 1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 4/6] drm/i915/icl: Gate clocks for DSI
  2018-11-27  9:39 ` [PATCH 4/6] drm/i915/icl: Gate clocks for DSI Vandita Kulkarni
@ 2018-11-27 14:06   ` Imre Deak
  2018-11-27 14:49     ` Imre Deak
  0 siblings, 1 reply; 16+ messages in thread
From: Imre Deak @ 2018-11-27 14:06 UTC (permalink / raw)
  To: Vandita Kulkarni; +Cc: jani.nikula, intel-gfx, ville.syrjala

On Tue, Nov 27, 2018 at 03:09:06PM +0530, Vandita Kulkarni wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
> 
> As per BSPEC, depending on the DSI transcoder being used,
> DDI clock for the associated port should be gated. This
> patch does the same.
> 
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
> ---
>  drivers/gpu/drm/i915/icl_dsi.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index ec22b2e..fe4efc7 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -536,6 +536,23 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
>  	}
>  }
>  
> +static void gen11_dsi_gate_clocks(struct intel_encoder *encoder)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> +	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> +	u32 tmp;
> +	enum port port;
> +
> +	mutex_lock(&dev_priv->dpll_lock);
> +	tmp = I915_READ(DPCLKA_CFGCR0_ICL);
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		tmp |= DPCLKA_CFGCR0_DDI_CLK_OFF(port);
> +	}
> +
> +	I915_WRITE(DPCLKA_CFGCR0_ICL, tmp);
> +	mutex_unlock(&dev_priv->dpll_lock);
> +}
> +
>  static void
>  gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
>  			       const struct intel_crtc_state *pipe_config)
> @@ -883,6 +900,9 @@ static void gen11_dsi_setup_timeouts(struct intel_encoder *encoder)
>  
>  	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
>  	gen11_dsi_configure_transcoder(encoder, pipe_config);
> +
> +	/* Step 4l: Gate DDI clocks */
> +	gen11_dsi_gate_clocks(encoder);

I think the default case should be that DDI clocks are gated and here we
shouldn't do anything.

The DDI clocks will get then ungated only when enabling a DDI encoder in
icl_map_plls_to_ports(). There we should also make sure we don't ungate
the clock for a DSI encoder.

I also have a patch to sanity check the clock gating wrt. DSI too during
HW readout, will send that today.

>  }
>  
>  static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 4/6] drm/i915/icl: Gate clocks for DSI
  2018-11-27 14:06   ` Imre Deak
@ 2018-11-27 14:49     ` Imre Deak
  0 siblings, 0 replies; 16+ messages in thread
From: Imre Deak @ 2018-11-27 14:49 UTC (permalink / raw)
  To: Vandita Kulkarni; +Cc: jani.nikula, intel-gfx, ville.syrjala

On Tue, Nov 27, 2018 at 04:06:43PM +0200, Imre Deak wrote:
> On Tue, Nov 27, 2018 at 03:09:06PM +0530, Vandita Kulkarni wrote:
> > From: Madhav Chauhan <madhav.chauhan@intel.com>
> > 
> > As per BSPEC, depending on the DSI transcoder being used,
> > DDI clock for the associated port should be gated. This
> > patch does the same.
> > 
> > Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> > Signed-off-by: Vandita Kulkarni <vandita.kulkarni@intel.com>
> > ---
> >  drivers/gpu/drm/i915/icl_dsi.c | 20 ++++++++++++++++++++
> >  1 file changed, 20 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> > index ec22b2e..fe4efc7 100644
> > --- a/drivers/gpu/drm/i915/icl_dsi.c
> > +++ b/drivers/gpu/drm/i915/icl_dsi.c
> > @@ -536,6 +536,23 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
> >  	}
> >  }
> >  
> > +static void gen11_dsi_gate_clocks(struct intel_encoder *encoder)
> > +{
> > +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> > +	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> > +	u32 tmp;
> > +	enum port port;
> > +
> > +	mutex_lock(&dev_priv->dpll_lock);
> > +	tmp = I915_READ(DPCLKA_CFGCR0_ICL);
> > +	for_each_dsi_port(port, intel_dsi->ports) {
> > +		tmp |= DPCLKA_CFGCR0_DDI_CLK_OFF(port);
> > +	}
> > +
> > +	I915_WRITE(DPCLKA_CFGCR0_ICL, tmp);
> > +	mutex_unlock(&dev_priv->dpll_lock);
> > +}
> > +
> >  static void
> >  gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
> >  			       const struct intel_crtc_state *pipe_config)
> > @@ -883,6 +900,9 @@ static void gen11_dsi_setup_timeouts(struct intel_encoder *encoder)
> >  
> >  	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
> >  	gen11_dsi_configure_transcoder(encoder, pipe_config);
> > +
> > +	/* Step 4l: Gate DDI clocks */
> > +	gen11_dsi_gate_clocks(encoder);
> 
> I think the default case should be that DDI clocks are gated and here we
> shouldn't do anything.
> 
> The DDI clocks will get then ungated only when enabling a DDI encoder in
> icl_map_plls_to_ports().

Err, scratch the above. Reading the spec again and trying it on a DSI
machine it seems we do have to keep the DDI clock ungated up to this
point. So that's fine, we just have to make sure not to ungate/gate it
also in icl_map_plls_to_ports/icl_unmap_plls_to_ports.

> There we should also make sure we don't ungate the clock for a DSI
> encoder.
> 
> I also have a patch to sanity check the clock gating wrt. DSI too during
> HW readout, will send that today.
> 
> >  }
> >  
> >  static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
> > -- 
> > 1.9.1
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2018-11-27 14:49 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-27  9:39 [PATCH 0/6] ICL DSI PLL enable Vandita Kulkarni
2018-11-27  9:39 ` [PATCH 1/6] drm/i915/icl: Calculate DPLL params for DSI Vandita Kulkarni
2018-11-27 10:14   ` Jani Nikula
2018-11-27 10:43   ` Chauhan, Madhav
2018-11-27  9:39 ` [PATCH 2/6] drm/i915/icl: Use the same pll functions for dsi Vandita Kulkarni
2018-11-27 10:48   ` Chauhan, Madhav
2018-11-27  9:39 ` [PATCH 3/6] drm/i915/icl: Get port clock from pll Vandita Kulkarni
2018-11-27 11:02   ` Chauhan, Madhav
2018-11-27  9:39 ` [PATCH 4/6] drm/i915/icl: Gate clocks for DSI Vandita Kulkarni
2018-11-27 14:06   ` Imre Deak
2018-11-27 14:49     ` Imre Deak
2018-11-27  9:39 ` [PATCH 5/6] drm/i915/icl: Ungate DSI clocks Vandita Kulkarni
2018-11-27  9:39 ` [PATCH 6/6] drm/i915/icl: Update port clock in compute config Vandita Kulkarni
2018-11-27 11:20   ` Chauhan, Madhav
2018-11-27 10:08 ` ✗ Fi.CI.BAT: failure for ICL DSI PLL enable (rev2) Patchwork
2018-11-27 11:27 ` [PATCH 0/6] ICL DSI PLL enable Chauhan, Madhav

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.