All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 00/23] drm/i915/icl: dsi enabling
@ 2018-10-15 14:27 Jani Nikula
  2018-10-15 14:27 ` [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional Jani Nikula
                   ` (32 more replies)
  0 siblings, 33 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

The v7 is a bit misleading, but it's essentially the next version of
[1], embedding my review into the commits directly. This is the first
batch from me, and there's more to come.

The new patches that I've added naturally need review.

The patches I've changed need approval from Madhav. I think two sets of
eyballs should be enough, and an additional independent review is
redundant (though of course appreciated).

The patches I've not changed I think can be pushed as-is, as long as the
dependencies have been merged appropriately.

BR,
Jani.


[1] http://mid.mail-archive.com/1537095223-5184-1-git-send-email-madhav.chauhan@intel.com


Jani Nikula (4):
  drm/i915: make encoder enable and disable hooks optional
  drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
  drm/i915/dsi: abstract dphy parameter init
  drm/i915/dsi: abstract intel_dsi_tlpx_ns()

Madhav Chauhan (19):
  drm/i915/icl: Make common DSI functions available
  drm/i915/icl: Program DSI clock and data lane timing params
  drm/i915/icl: Program TA_TIMING_PARAM registers
  drm/i915/icl: Get DSI transcoder for a given port
  drm/i915/icl: Add macros for MMIO of DSI transcoder registers
  drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
  drm/i915/icl: Configure DSI transcoders
  drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
  drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
  drm/i915/icl: Define DSI transcoder timing registers
  drm/i915/icl: Configure DSI transcoder timings
  drm/i915/icl: Define TRANS_CONF register for DSI
  drm/i915/icl: Enable DSI transcoders
  drm/i915/icl: Define DSI panel programming registers
  drm/i915/icl: Set max return packet size for DSI panel
  drm/i915/icl: Power on DSI panel
  drm/i915/icl: Wait for header/payload credits release
  drm/i915/icl: Ensure all cmd/data disptached to panel
  drm/i915/icl: Turn ON panel backlight

 drivers/gpu/drm/i915/Makefile        |   1 +
 drivers/gpu/drm/i915/i915_pci.c      |   6 +
 drivers/gpu/drm/i915/i915_reg.h      | 126 ++++++++++
 drivers/gpu/drm/i915/icl_dsi.c       | 443 ++++++++++++++++++++++++++++++++++-
 drivers/gpu/drm/i915/intel_display.c |   6 +-
 drivers/gpu/drm/i915/intel_display.h |   6 +-
 drivers/gpu/drm/i915/intel_dsi.c     |  30 +++
 drivers/gpu/drm/i915/intel_dsi.h     |  21 ++
 drivers/gpu/drm/i915/intel_dsi_vbt.c | 279 +++++++++++++++-------
 drivers/gpu/drm/i915/vlv_dsi.c       |  37 +--
 10 files changed, 830 insertions(+), 125 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/intel_dsi.c

-- 
2.11.0

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

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

* [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-16  6:36   ` Madhav Chauhan
  2018-10-16 12:41   ` [PATCH] " Jani Nikula
  2018-10-15 14:27 ` [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init() Jani Nikula
                   ` (31 subsequent siblings)
  32 siblings, 2 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

Encoders are not alike, make enable and disable hooks optional like
other hooks. Utilize this in DSI code, and remove the silly nop hook.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c |  6 ++++--
 drivers/gpu/drm/i915/vlv_dsi.c       | 16 ++++------------
 2 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 41abd03ce6a6..32ea71bac663 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5461,7 +5461,8 @@ static void intel_encoders_enable(struct drm_crtc *crtc,
 		if (conn_state->crtc != crtc)
 			continue;
 
-		encoder->enable(encoder, crtc_state, conn_state);
+		if (encoder->enable)
+			encoder->enable(encoder, crtc_state, conn_state);
 		intel_opregion_notify_encoder(encoder, true);
 	}
 }
@@ -5482,7 +5483,8 @@ static void intel_encoders_disable(struct drm_crtc *crtc,
 			continue;
 
 		intel_opregion_notify_encoder(encoder, false);
-		encoder->disable(encoder, old_crtc_state, old_conn_state);
+		if (encoder->disable)
+			encoder->disable(encoder, old_crtc_state, old_conn_state);
 	}
 }
 
diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
index bafeb2a19b90..dbca30460a6b 100644
--- a/drivers/gpu/drm/i915/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/vlv_dsi.c
@@ -794,6 +794,10 @@ static void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
  * - wait t4                                           - wait t4
  */
 
+/*
+ * DSI port enable has to be done before pipe and plane enable, so we do it in
+ * the pre_enable hook instead of the enable hook.
+ */
 static void intel_dsi_pre_enable(struct intel_encoder *encoder,
 				 const struct intel_crtc_state *pipe_config,
 				 const struct drm_connector_state *conn_state)
@@ -896,17 +900,6 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder,
 }
 
 /*
- * DSI port enable has to be done before pipe and plane enable, so we do it in
- * the pre_enable hook.
- */
-static void intel_dsi_enable_nop(struct intel_encoder *encoder,
-				 const struct intel_crtc_state *pipe_config,
-				 const struct drm_connector_state *conn_state)
-{
-	DRM_DEBUG_KMS("\n");
-}
-
-/*
  * DSI port disable has to be done after pipe and plane disable, so we do it in
  * the post_disable hook.
  */
@@ -1764,7 +1757,6 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
 
 	intel_encoder->compute_config = intel_dsi_compute_config;
 	intel_encoder->pre_enable = intel_dsi_pre_enable;
-	intel_encoder->enable = intel_dsi_enable_nop;
 	intel_encoder->disable = intel_dsi_disable;
 	intel_encoder->post_disable = intel_dsi_post_disable;
 	intel_encoder->get_hw_state = intel_dsi_get_hw_state;
-- 
2.11.0

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

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

* [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
  2018-10-15 14:27 ` [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-16  7:53   ` Madhav Chauhan
  2018-10-15 14:27 ` [PATCH v7 03/23] drm/i915/dsi: abstract dphy parameter init Jani Nikula
                   ` (30 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

Abstract bitrate calculation to a newly resurrected intel_dsi.c file
that will contain common code for VLV and ICL DSI.

No functional changes.

Cc: Madhav Chauhan <madhav.chauhan@intel.com>
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/Makefile        |  1 +
 drivers/gpu/drm/i915/intel_dsi.c     | 17 +++++++++++++++++
 drivers/gpu/drm/i915/intel_dsi.h     |  3 +++
 drivers/gpu/drm/i915/intel_dsi_vbt.c | 28 ++++++++++------------------
 4 files changed, 31 insertions(+), 18 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/intel_dsi.c

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 48cae0eae3f9..22cbf9c3bb0c 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -143,6 +143,7 @@ i915-y += dvo_ch7017.o \
 	  intel_dp_link_training.o \
 	  intel_dp_mst.o \
 	  intel_dp.o \
+	  intel_dsi.o \
 	  intel_dsi_dcs_backlight.o \
 	  intel_dsi_vbt.o \
 	  intel_dvo.o \
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
new file mode 100644
index 000000000000..4daa1da94047
--- /dev/null
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2018 Intel Corporation
+ */
+
+#include <drm/drm_mipi_dsi.h>
+#include "intel_dsi.h"
+
+int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
+{
+	int bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
+
+	if (WARN_ON(bpp < 0))
+		bpp = 16;
+
+	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
+}
diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
index ad7c1cb32983..68f14d8f1e18 100644
--- a/drivers/gpu/drm/i915/intel_dsi.h
+++ b/drivers/gpu/drm/i915/intel_dsi.h
@@ -129,6 +129,9 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
 	return container_of(encoder, struct intel_dsi, base.base);
 }
 
+/* intel_dsi.c */
+int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
+
 /* vlv_dsi.c */
 void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
 enum mipi_dsi_pixel_format pixel_format_from_register_bits(u32 fmt);
diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
index ac83d6b89ae0..6c4cc92f5947 100644
--- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
@@ -506,14 +506,12 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
 	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
 	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
-	u32 bpp;
-	u32 tlpx_ns, extra_byte_count, bitrate, tlpx_ui;
+	u32 tlpx_ns, extra_byte_count, tlpx_ui;
 	u32 ui_num, ui_den;
 	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
 	u32 ths_prepare_ns, tclk_trail_ns;
 	u32 tclk_prepare_clkzero, ths_prepare_hszero;
 	u32 lp_to_hs_switch, hs_to_lp_switch;
-	u32 pclk, computed_ddr;
 	u32 mul;
 	u16 burst_mode_ratio;
 	enum port port;
@@ -526,7 +524,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 	intel_dsi->pixel_format =
 			pixel_format_from_register_bits(
 				mipi_config->videomode_color_format << 7);
-	bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
 
 	intel_dsi->dual_link = mipi_config->dual_link;
 	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
@@ -541,19 +538,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 	intel_dsi->video_frmt_cfg_bits =
 		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
 
-	pclk = mode->clock;
+	/* Starting point, adjusted depending on dual link and burst mode */
+	intel_dsi->pclk = mode->clock;
 
 	/* In dual link mode each port needs half of pixel clock */
 	if (intel_dsi->dual_link) {
-		pclk = pclk / 2;
+		intel_dsi->pclk /= 2;
 
 		/* we can enable pixel_overlap if needed by panel. In this
 		 * case we need to increase the pixelclock for extra pixels
 		 */
 		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
-			pclk += DIV_ROUND_UP(mode->vtotal *
-						intel_dsi->pixel_overlap *
-						60, 1000);
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
 		}
 	}
 
@@ -563,19 +559,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 	 */
 	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
 		if (mipi_config->target_burst_mode_freq) {
-			computed_ddr = (pclk * bpp) / intel_dsi->lane_count;
+			u32 bitrate = intel_dsi_bitrate(intel_dsi);
 
-			if (mipi_config->target_burst_mode_freq <
-								computed_ddr) {
+			if (mipi_config->target_burst_mode_freq < bitrate) {
 				DRM_ERROR("Burst mode freq is less than computed\n");
 				return false;
 			}
 
 			burst_mode_ratio = DIV_ROUND_UP(
 				mipi_config->target_burst_mode_freq * 100,
-				computed_ddr);
+				bitrate);
 
-			pclk = DIV_ROUND_UP(pclk * burst_mode_ratio, 100);
+			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
 		} else {
 			DRM_ERROR("Burst mode target is not set\n");
 			return false;
@@ -584,9 +579,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 		burst_mode_ratio = 100;
 
 	intel_dsi->burst_mode_ratio = burst_mode_ratio;
-	intel_dsi->pclk = pclk;
-
-	bitrate = (pclk * bpp) / intel_dsi->lane_count;
 
 	switch (intel_dsi->escape_clk_div) {
 	case 0:
@@ -620,7 +612,7 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 
 	/* in Kbps */
 	ui_num = NS_KHZ_RATIO;
-	ui_den = bitrate;
+	ui_den = intel_dsi_bitrate(intel_dsi);
 
 	tclk_prepare_clkzero = mipi_config->tclk_prepare_clkzero;
 	ths_prepare_hszero = mipi_config->ths_prepare_hszero;
-- 
2.11.0

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

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

* [PATCH v7 03/23] drm/i915/dsi: abstract dphy parameter init
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
  2018-10-15 14:27 ` [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional Jani Nikula
  2018-10-15 14:27 ` [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init() Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-16  8:29   ` Madhav Chauhan
  2018-10-15 14:27 ` [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns() Jani Nikula
                   ` (29 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

intel_dsi_vbt_init() has grown too unwieldy, and it's about to be
modified due to ICL DSI. Abstract out the VLV specific dphy param
init. No functional changes. Intentionally no stylistic changes during
code movement.

Cc: Madhav Chauhan <madhav.chauhan@intel.com>
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_dsi_vbt.c | 147 +++++++++++++++++++----------------
 1 file changed, 78 insertions(+), 69 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
index 6c4cc92f5947..fdeba8386d53 100644
--- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
@@ -499,13 +499,11 @@ int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
 	return 1;
 }
 
-bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
+static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
 {
 	struct drm_device *dev = intel_dsi->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
-	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
-	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
 	u32 tlpx_ns, extra_byte_count, tlpx_ui;
 	u32 ui_num, ui_den;
 	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
@@ -513,72 +511,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 	u32 tclk_prepare_clkzero, ths_prepare_hszero;
 	u32 lp_to_hs_switch, hs_to_lp_switch;
 	u32 mul;
-	u16 burst_mode_ratio;
-	enum port port;
-
-	DRM_DEBUG_KMS("\n");
-
-	intel_dsi->eotp_pkt = mipi_config->eot_pkt_disabled ? 0 : 1;
-	intel_dsi->clock_stop = mipi_config->enable_clk_stop ? 1 : 0;
-	intel_dsi->lane_count = mipi_config->lane_cnt + 1;
-	intel_dsi->pixel_format =
-			pixel_format_from_register_bits(
-				mipi_config->videomode_color_format << 7);
-
-	intel_dsi->dual_link = mipi_config->dual_link;
-	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
-	intel_dsi->operation_mode = mipi_config->is_cmd_mode;
-	intel_dsi->video_mode_format = mipi_config->video_transfer_mode;
-	intel_dsi->escape_clk_div = mipi_config->byte_clk_sel;
-	intel_dsi->lp_rx_timeout = mipi_config->lp_rx_timeout;
-	intel_dsi->turn_arnd_val = mipi_config->turn_around_timeout;
-	intel_dsi->rst_timer_val = mipi_config->device_reset_timer;
-	intel_dsi->init_count = mipi_config->master_init_timer;
-	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
-	intel_dsi->video_frmt_cfg_bits =
-		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
-
-	/* Starting point, adjusted depending on dual link and burst mode */
-	intel_dsi->pclk = mode->clock;
-
-	/* In dual link mode each port needs half of pixel clock */
-	if (intel_dsi->dual_link) {
-		intel_dsi->pclk /= 2;
-
-		/* we can enable pixel_overlap if needed by panel. In this
-		 * case we need to increase the pixelclock for extra pixels
-		 */
-		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
-			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
-		}
-	}
-
-	/* Burst Mode Ratio
-	 * Target ddr frequency from VBT / non burst ddr freq
-	 * multiply by 100 to preserve remainder
-	 */
-	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
-		if (mipi_config->target_burst_mode_freq) {
-			u32 bitrate = intel_dsi_bitrate(intel_dsi);
-
-			if (mipi_config->target_burst_mode_freq < bitrate) {
-				DRM_ERROR("Burst mode freq is less than computed\n");
-				return false;
-			}
-
-			burst_mode_ratio = DIV_ROUND_UP(
-				mipi_config->target_burst_mode_freq * 100,
-				bitrate);
-
-			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
-		} else {
-			DRM_ERROR("Burst mode target is not set\n");
-			return false;
-		}
-	} else
-		burst_mode_ratio = 100;
-
-	intel_dsi->burst_mode_ratio = burst_mode_ratio;
 
 	switch (intel_dsi->escape_clk_div) {
 	case 0:
@@ -738,6 +670,83 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 		DIV_ROUND_UP(2 * tlpx_ui + trail_cnt * 2 + 8,
 			8);
 	intel_dsi->clk_hs_to_lp_count += extra_byte_count;
+}
+
+bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
+{
+	struct drm_device *dev = intel_dsi->base.base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
+	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
+	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
+	u16 burst_mode_ratio;
+	enum port port;
+
+	DRM_DEBUG_KMS("\n");
+
+	intel_dsi->eotp_pkt = mipi_config->eot_pkt_disabled ? 0 : 1;
+	intel_dsi->clock_stop = mipi_config->enable_clk_stop ? 1 : 0;
+	intel_dsi->lane_count = mipi_config->lane_cnt + 1;
+	intel_dsi->pixel_format =
+			pixel_format_from_register_bits(
+				mipi_config->videomode_color_format << 7);
+
+	intel_dsi->dual_link = mipi_config->dual_link;
+	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
+	intel_dsi->operation_mode = mipi_config->is_cmd_mode;
+	intel_dsi->video_mode_format = mipi_config->video_transfer_mode;
+	intel_dsi->escape_clk_div = mipi_config->byte_clk_sel;
+	intel_dsi->lp_rx_timeout = mipi_config->lp_rx_timeout;
+	intel_dsi->turn_arnd_val = mipi_config->turn_around_timeout;
+	intel_dsi->rst_timer_val = mipi_config->device_reset_timer;
+	intel_dsi->init_count = mipi_config->master_init_timer;
+	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
+	intel_dsi->video_frmt_cfg_bits =
+		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
+
+	/* Starting point, adjusted depending on dual link and burst mode */
+	intel_dsi->pclk = mode->clock;
+
+	/* In dual link mode each port needs half of pixel clock */
+	if (intel_dsi->dual_link) {
+		intel_dsi->pclk /= 2;
+
+		/* we can enable pixel_overlap if needed by panel. In this
+		 * case we need to increase the pixelclock for extra pixels
+		 */
+		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
+		}
+	}
+
+	/* Burst Mode Ratio
+	 * Target ddr frequency from VBT / non burst ddr freq
+	 * multiply by 100 to preserve remainder
+	 */
+	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
+		if (mipi_config->target_burst_mode_freq) {
+			u32 bitrate = intel_dsi_bitrate(intel_dsi);
+
+			if (mipi_config->target_burst_mode_freq < bitrate) {
+				DRM_ERROR("Burst mode freq is less than computed\n");
+				return false;
+			}
+
+			burst_mode_ratio = DIV_ROUND_UP(
+				mipi_config->target_burst_mode_freq * 100,
+				bitrate);
+
+			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
+		} else {
+			DRM_ERROR("Burst mode target is not set\n");
+			return false;
+		}
+	} else
+		burst_mode_ratio = 100;
+
+	intel_dsi->burst_mode_ratio = burst_mode_ratio;
+
+	vlv_dphy_param_init(intel_dsi);
 
 	DRM_DEBUG_KMS("Pclk %d\n", intel_dsi->pclk);
 	DRM_DEBUG_KMS("Pixel overlap %d\n", intel_dsi->pixel_overlap);
-- 
2.11.0

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

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

* [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns()
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (2 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 03/23] drm/i915/dsi: abstract dphy parameter init Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-16  8:39   ` Madhav Chauhan
  2018-10-15 14:27 ` [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available Jani Nikula
                   ` (28 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

Will be needed in the future. No functional changes.

Cc: Madhav Chauhan <madhav.chauhan@intel.com>
Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_dsi.c     | 13 +++++++++++++
 drivers/gpu/drm/i915/intel_dsi.h     |  1 +
 drivers/gpu/drm/i915/intel_dsi_vbt.c | 16 +---------------
 3 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 4daa1da94047..a32cc1f4b384 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -15,3 +15,16 @@ int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
 
 	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
 }
+
+int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi)
+{
+	switch (intel_dsi->escape_clk_div) {
+	default:
+	case 0:
+		return 50;
+	case 1:
+		return 100;
+	case 2:
+		return 200;
+	}
+}
diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
index 68f14d8f1e18..0d911a4adfaa 100644
--- a/drivers/gpu/drm/i915/intel_dsi.h
+++ b/drivers/gpu/drm/i915/intel_dsi.h
@@ -131,6 +131,7 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
 
 /* intel_dsi.c */
 int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
+int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
 
 /* vlv_dsi.c */
 void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
index fdeba8386d53..b0d8548f0462 100644
--- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
@@ -512,21 +512,7 @@ static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
 	u32 lp_to_hs_switch, hs_to_lp_switch;
 	u32 mul;
 
-	switch (intel_dsi->escape_clk_div) {
-	case 0:
-		tlpx_ns = 50;
-		break;
-	case 1:
-		tlpx_ns = 100;
-		break;
-
-	case 2:
-		tlpx_ns = 200;
-		break;
-	default:
-		tlpx_ns = 50;
-		break;
-	}
+	tlpx_ns = intel_dsi_tlpx_ns(intel_dsi);
 
 	switch (intel_dsi->lane_count) {
 	case 1:
-- 
2.11.0

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

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

* [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (3 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns() Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-16  9:04   ` Madhav Chauhan
  2018-10-15 14:27 ` [PATCH v7 06/23] drm/i915/icl: Program DSI clock and data lane timing params Jani Nikula
                   ` (27 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch moves couple of legacy DSI functions to header and common DSI
files so that they can be re-used by Gen11 DSI. No functional change.

v2 by Jani:
 - Move intel_dsi_msleep() to intel_dsi_vbt.c

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_dsi.h     | 11 +++++++++++
 drivers/gpu/drm/i915/intel_dsi_vbt.c | 11 +++++++++++
 drivers/gpu/drm/i915/vlv_dsi.c       | 21 ---------------------
 3 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
index 0d911a4adfaa..d7c0c599b52d 100644
--- a/drivers/gpu/drm/i915/intel_dsi.h
+++ b/drivers/gpu/drm/i915/intel_dsi.h
@@ -129,6 +129,16 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
 	return container_of(encoder, struct intel_dsi, base.base);
 }
 
+static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
+{
+	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
+}
+
+static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
+{
+	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
+}
+
 /* intel_dsi.c */
 int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
 int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
@@ -162,5 +172,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id);
 int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi);
 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);
 
 #endif /* _INTEL_DSI_H */
diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
index b0d8548f0462..5e16b4c5f531 100644
--- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
@@ -481,6 +481,17 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
 	}
 }
 
+void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
+{
+	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
+
+	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
+	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
+		return;
+
+	msleep(msec);
+}
+
 int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
 {
 	struct intel_connector *connector = intel_dsi->attached_connector;
diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
index dbca30460a6b..ee0cd5d0bf91 100644
--- a/drivers/gpu/drm/i915/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/vlv_dsi.c
@@ -290,16 +290,6 @@ static void band_gap_reset(struct drm_i915_private *dev_priv)
 	mutex_unlock(&dev_priv->sb_lock);
 }
 
-static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
-{
-	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
-}
-
-static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
-{
-	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
-}
-
 static bool intel_dsi_compute_config(struct intel_encoder *encoder,
 				     struct intel_crtc_state *pipe_config,
 				     struct drm_connector_state *conn_state)
@@ -746,17 +736,6 @@ static void intel_dsi_prepare(struct intel_encoder *intel_encoder,
 			      const struct intel_crtc_state *pipe_config);
 static void intel_dsi_unprepare(struct intel_encoder *encoder);
 
-static void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
-{
-	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
-
-	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
-	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
-		return;
-
-	msleep(msec);
-}
-
 /*
  * Panel enable/disable sequences from the VBT spec.
  *
-- 
2.11.0

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

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

* [PATCH v7 06/23] drm/i915/icl: Program DSI clock and data lane timing params
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (4 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-20 10:57   ` Madhav Chauhan
  2018-10-15 14:27 ` [PATCH v7 07/23] drm/i915/icl: Program TA_TIMING_PARAM registers Jani Nikula
                   ` (26 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch programs D-PHY timing parameters for the
clock and data lane (in escape clocks) of DSI
controller (DSI port 0 and 1).
These programmed timings would be used by DSI Controller
to calculate link transition latencies of the data and
clock lanes.

v2: Use newly defined bitfields for data and clock lane

v3 by Jani:
 - Rebase on dphy abstraction
 - Reduce local variables
 - Remove unrelated comment changes (Ville)
 - Use the same style for range checks as VLV (Ville)
 - Assign, don't OR dphy_reg contents

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c       |  18 ++++++
 drivers/gpu/drm/i915/intel_dsi.h     |   3 +
 drivers/gpu/drm/i915/intel_dsi_vbt.c | 110 ++++++++++++++++++++++++++++++++++-
 3 files changed, 130 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index ff5b285ca495..9602b6532028 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -291,6 +291,24 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
 		tmp |= intel_dsi->init_count;
 		I915_WRITE(ICL_DSI_T_INIT_MASTER(port), tmp);
 	}
+
+	/* Program DPHY clock lanes timings */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		I915_WRITE(DPHY_CLK_TIMING_PARAM(port), intel_dsi->dphy_reg);
+
+		/* shadow register inside display core */
+		I915_WRITE(DSI_CLK_TIMING_PARAM(port), intel_dsi->dphy_reg);
+	}
+
+	/* Program DPHY data lanes timings */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		I915_WRITE(DPHY_DATA_TIMING_PARAM(port),
+			   intel_dsi->dphy_data_lane_reg);
+
+		/* shadow register inside display core */
+		I915_WRITE(DSI_DATA_TIMING_PARAM(port),
+			   intel_dsi->dphy_data_lane_reg);
+	}
 }
 
 static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
index d7c0c599b52d..12b758ebefce 100644
--- a/drivers/gpu/drm/i915/intel_dsi.h
+++ b/drivers/gpu/drm/i915/intel_dsi.h
@@ -85,6 +85,9 @@ struct intel_dsi {
 	u32 port_bits;
 	u32 bw_timer;
 	u32 dphy_reg;
+
+	/* data lanes dphy timing */
+	u32 dphy_data_lane_reg;
 	u32 video_frmt_cfg_bits;
 	u16 lp_byte_clk;
 
diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
index 5e16b4c5f531..3035422aa0d6 100644
--- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
@@ -510,6 +510,111 @@ int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
 	return 1;
 }
 
+#define ICL_PREPARE_CNT_MAX	0x7
+#define ICL_CLK_ZERO_CNT_MAX	0xf
+#define ICL_TRAIL_CNT_MAX	0x7
+#define ICL_TCLK_PRE_CNT_MAX	0x3
+#define ICL_TCLK_POST_CNT_MAX	0x7
+#define ICL_HS_ZERO_CNT_MAX	0xf
+#define ICL_EXIT_ZERO_CNT_MAX	0x7
+
+static void icl_dphy_param_init(struct intel_dsi *intel_dsi)
+{
+	struct drm_device *dev = intel_dsi->base.base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
+	u32 tlpx_ns;
+	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
+	u32 ths_prepare_ns, tclk_trail_ns;
+	u32 hs_zero_cnt;
+	u32 tclk_pre_cnt, tclk_post_cnt;
+
+	tlpx_ns = intel_dsi_tlpx_ns(intel_dsi);
+
+	tclk_trail_ns = max(mipi_config->tclk_trail, mipi_config->ths_trail);
+	ths_prepare_ns = max(mipi_config->ths_prepare,
+			     mipi_config->tclk_prepare);
+
+	/*
+	 * prepare cnt in escape clocks
+	 * this field represents a hexadecimal value with a precision
+	 * of 1.2 – i.e. the most significant bit is the integer
+	 * and the least significant 2 bits are fraction bits.
+	 * so, the field can represent a range of 0.25 to 1.75
+	 */
+	prepare_cnt = DIV_ROUND_UP(ths_prepare_ns * 4, tlpx_ns);
+	if (prepare_cnt > ICL_PREPARE_CNT_MAX) {
+		DRM_DEBUG_KMS("prepare_cnt out of range (%d)\n", prepare_cnt);
+		prepare_cnt = ICL_PREPARE_CNT_MAX;
+	}
+
+	/* clk zero count in escape clocks */
+	clk_zero_cnt = DIV_ROUND_UP(mipi_config->tclk_prepare_clkzero -
+				    ths_prepare_ns, tlpx_ns);
+	if (clk_zero_cnt > ICL_CLK_ZERO_CNT_MAX) {
+		DRM_DEBUG_KMS("clk_zero_cnt out of range (%d)\n", clk_zero_cnt);
+		clk_zero_cnt = ICL_CLK_ZERO_CNT_MAX;
+	}
+
+	/* trail cnt in escape clocks*/
+	trail_cnt = DIV_ROUND_UP(tclk_trail_ns, tlpx_ns);
+	if (trail_cnt > ICL_TRAIL_CNT_MAX) {
+		DRM_DEBUG_KMS("trail_cnt out of range (%d)\n", trail_cnt);
+		trail_cnt = ICL_TRAIL_CNT_MAX;
+	}
+
+	/* tclk pre count in escape clocks */
+	tclk_pre_cnt = DIV_ROUND_UP(mipi_config->tclk_pre, tlpx_ns);
+	if (tclk_pre_cnt > ICL_TCLK_PRE_CNT_MAX) {
+		DRM_DEBUG_KMS("tclk_pre_cnt out of range (%d)\n", tclk_pre_cnt);
+		tclk_pre_cnt = ICL_TCLK_PRE_CNT_MAX;
+	}
+
+	/* tclk post count in escape clocks */
+	tclk_post_cnt = DIV_ROUND_UP(mipi_config->tclk_post, tlpx_ns);
+	if (tclk_post_cnt > ICL_TCLK_POST_CNT_MAX) {
+		DRM_DEBUG_KMS("tclk_post_cnt out of range (%d)\n", tclk_post_cnt);
+		tclk_post_cnt = ICL_TCLK_POST_CNT_MAX;
+	}
+
+	/* hs zero cnt in escape clocks */
+	hs_zero_cnt = DIV_ROUND_UP(mipi_config->ths_prepare_hszero -
+				   ths_prepare_ns, tlpx_ns);
+	if (hs_zero_cnt > ICL_HS_ZERO_CNT_MAX) {
+		DRM_DEBUG_KMS("hs_zero_cnt out of range (%d)\n", hs_zero_cnt);
+		hs_zero_cnt = ICL_HS_ZERO_CNT_MAX;
+	}
+
+	/* hs exit zero cnt in escape clocks */
+	exit_zero_cnt = DIV_ROUND_UP(mipi_config->ths_exit, tlpx_ns);
+	if (exit_zero_cnt > ICL_EXIT_ZERO_CNT_MAX) {
+		DRM_DEBUG_KMS("exit_zero_cnt out of range (%d)\n", exit_zero_cnt);
+		exit_zero_cnt = ICL_EXIT_ZERO_CNT_MAX;
+	}
+
+	/* clock lane dphy timings */
+	intel_dsi->dphy_reg = (CLK_PREPARE_OVERRIDE |
+			       CLK_PREPARE(prepare_cnt) |
+			       CLK_ZERO_OVERRIDE |
+			       CLK_ZERO(clk_zero_cnt) |
+			       CLK_PRE_OVERRIDE |
+			       CLK_PRE(tclk_pre_cnt) |
+			       CLK_POST_OVERRIDE |
+			       CLK_POST(tclk_post_cnt) |
+			       CLK_TRAIL_OVERRIDE |
+			       CLK_TRAIL(trail_cnt));
+
+	/* data lanes dphy timings */
+	intel_dsi->dphy_data_lane_reg = (HS_PREPARE_OVERRIDE |
+					 HS_PREPARE(prepare_cnt) |
+					 HS_ZERO_OVERRIDE |
+					 HS_ZERO(hs_zero_cnt) |
+					 HS_TRAIL_OVERRIDE |
+					 HS_TRAIL(trail_cnt) |
+					 HS_EXIT_OVERRIDE |
+					 HS_EXIT(exit_zero_cnt));
+}
+
 static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
 {
 	struct drm_device *dev = intel_dsi->base.base.dev;
@@ -743,7 +848,10 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 
 	intel_dsi->burst_mode_ratio = burst_mode_ratio;
 
-	vlv_dphy_param_init(intel_dsi);
+	if (IS_ICELAKE(dev_priv))
+		icl_dphy_param_init(intel_dsi);
+	else
+		vlv_dphy_param_init(intel_dsi);
 
 	DRM_DEBUG_KMS("Pclk %d\n", intel_dsi->pclk);
 	DRM_DEBUG_KMS("Pixel overlap %d\n", intel_dsi->pixel_overlap);
-- 
2.11.0

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

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

* [PATCH v7 07/23] drm/i915/icl: Program TA_TIMING_PARAM registers
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (5 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 06/23] drm/i915/icl: Program DSI clock and data lane timing params Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-20 10:59   ` Madhav Chauhan
  2018-10-15 14:27 ` [PATCH v7 08/23] drm/i915/icl: Get DSI transcoder for a given port Jani Nikula
                   ` (25 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch programs D-PHY timing parameters for the
bus turn around flow(in escape clocks) only if dsi link
frequency <=800 MHz using DPHY_TA_TIMING_PARAM and its
identical register DSI_TA_TIMING_PARAM (inside DSI
Controller within the Display Core).

v2: Changes
    - Don't use KHz() macro (Ville/Jani N)
    - Use newly defined bitfields

v3 by Jani:
 - Use intel_dsi_bitrate() in favor of a new field
 - Remove redundant parens

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 9602b6532028..f9df3a7fa66b 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -309,6 +309,27 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
 		I915_WRITE(DSI_DATA_TIMING_PARAM(port),
 			   intel_dsi->dphy_data_lane_reg);
 	}
+
+	/*
+	 * If DSI link operating at or below an 800 MHz,
+	 * TA_SURE should be override and programmed to
+	 * a value '0' inside TA_PARAM_REGISTERS otherwise
+	 * leave all fields at HW default values.
+	 */
+	if (intel_dsi_bitrate(intel_dsi) <= 800000) {
+		for_each_dsi_port(port, intel_dsi->ports) {
+			tmp = I915_READ(DPHY_TA_TIMING_PARAM(port));
+			tmp &= ~TA_SURE_MASK;
+			tmp |= TA_SURE_OVERRIDE | TA_SURE(0);
+			I915_WRITE(DPHY_TA_TIMING_PARAM(port), tmp);
+
+			/* shadow register inside display core */
+			tmp = I915_READ(DSI_TA_TIMING_PARAM(port));
+			tmp &= ~TA_SURE_MASK;
+			tmp |= TA_SURE_OVERRIDE | TA_SURE(0);
+			I915_WRITE(DSI_TA_TIMING_PARAM(port), tmp);
+		}
+	}
 }
 
 static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
-- 
2.11.0

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

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

* [PATCH v7 08/23] drm/i915/icl: Get DSI transcoder for a given port
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (6 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 07/23] drm/i915/icl: Program TA_TIMING_PARAM registers Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-15 14:27 ` [PATCH v7 09/23] drm/i915/icl: Add macros for MMIO of DSI transcoder registers Jani Nikula
                   ` (24 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch adds a helper function to retrieve DSI
transcoder for a given DSI port using newly defined
enum names for DSI transcoders.

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c       | 8 ++++++++
 drivers/gpu/drm/i915/intel_display.h | 6 ++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index f9df3a7fa66b..407c3065d08d 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -27,6 +27,14 @@
 
 #include "intel_dsi.h"
 
+static enum transcoder __attribute__((unused)) dsi_port_to_transcoder(enum port port)
+{
+	if (port == PORT_A)
+		return TRANSCODER_DSI_0;
+	else
+		return TRANSCODER_DSI_1;
+}
+
 static void dsi_program_swing_and_deemphasis(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
diff --git a/drivers/gpu/drm/i915/intel_display.h b/drivers/gpu/drm/i915/intel_display.h
index 9fac67e31205..54087130f67e 100644
--- a/drivers/gpu/drm/i915/intel_display.h
+++ b/drivers/gpu/drm/i915/intel_display.h
@@ -61,8 +61,10 @@ enum transcoder {
 	TRANSCODER_B,
 	TRANSCODER_C,
 	TRANSCODER_EDP,
-	TRANSCODER_DSI_A,
-	TRANSCODER_DSI_C,
+	TRANSCODER_DSI_0,
+	TRANSCODER_DSI_1,
+	TRANSCODER_DSI_A = TRANSCODER_DSI_0,	/* legacy DSI */
+	TRANSCODER_DSI_C = TRANSCODER_DSI_1,	/* legacy DSI */
 
 	I915_MAX_TRANSCODERS
 };
-- 
2.11.0

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

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

* [PATCH v7 09/23] drm/i915/icl: Add macros for MMIO of DSI transcoder registers
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (7 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 08/23] drm/i915/icl: Get DSI transcoder for a given port Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-15 14:27 ` [PATCH v7 10/23] drm/i915/icl: Define TRANS_DSI_FUNC_CONF register Jani Nikula
                   ` (23 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch adds _MMIO_DSI macros for accessing DSI
transcoder registers.

v2: Use _MMIO_TRANS() (Ville)

Credits-to: Jani N

Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_reg.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 1e13e51fee47..436ff68b6b18 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -9795,6 +9795,10 @@ enum skl_power_gate {
 #define _MIPI_PORT(port, a, c)	(((port) == PORT_A) ? a : c)	/* ports A and C only */
 #define _MMIO_MIPI(port, a, c)	_MMIO(_MIPI_PORT(port, a, c))
 
+/* Gen11 DSI */
+#define _MMIO_DSI(tc, dsi0, dsi1)	_MMIO_TRANS((tc) - TRANSCODER_DSI_0, \
+						    dsi0, dsi1)
+
 #define MIPIO_TXESC_CLK_DIV1			_MMIO(0x160004)
 #define  GLK_TX_ESC_CLK_DIV1_MASK			0x3FF
 #define MIPIO_TXESC_CLK_DIV2			_MMIO(0x160008)
-- 
2.11.0

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

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

* [PATCH v7 10/23] drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (8 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 09/23] drm/i915/icl: Add macros for MMIO of DSI transcoder registers Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-20 11:08   ` Madhav Chauhan
  2018-10-15 14:27 ` [PATCH v7 11/23] drm/i915/icl: Configure DSI transcoders Jani Nikula
                   ` (22 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch defines transcoder function configuration
registers and its bitfields for both DSI ports.
Used while programming/enabling DSI transcoder.

v2: Changes (Jani N)
    - Define _SHIFT and _MASK for bitfields
    - Define values for fields already shifted in place

v3 by Jani:
 - Fix _SHIFT fields copy-pasted from _MASK
 - Indentation fixes
 - Reduce S3D orientation to single macro
 - Wrap a macro parameter in parens

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_reg.h | 45 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 436ff68b6b18..b065e4ca0b45 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -10379,6 +10379,51 @@ enum skl_power_gate {
 #define  TA_GET_MASK			(0xf << 0)
 #define  TA_GET_SHIFT			0
 
+/* DSI transcoder configuration */
+#define _DSI_TRANS_FUNC_CONF_0		0x6b030
+#define _DSI_TRANS_FUNC_CONF_1		0x6b830
+#define DSI_TRANS_FUNC_CONF(tc)		_MMIO_DSI(tc,	\
+						  _DSI_TRANS_FUNC_CONF_0,\
+						  _DSI_TRANS_FUNC_CONF_1)
+#define  OP_MODE_MASK			(0x3 << 28)
+#define  OP_MODE_SHIFT			28
+#define  CMD_MODE_NO_GATE		(0x0 << 28)
+#define  CMD_MODE_TE_GATE		(0x1 << 28)
+#define  VIDEO_MODE_SYNC_EVENT		(0x2 << 28)
+#define  VIDEO_MODE_SYNC_PULSE		(0x3 << 28)
+#define  LINK_READY			(1 << 20)
+#define  PIX_FMT_MASK			(0x3 << 16)
+#define  PIX_FMT_SHIFT			16
+#define  PIX_FMT_RGB565			(0x0 << 16)
+#define  PIX_FMT_RGB666_PACKED		(0x1 << 16)
+#define  PIX_FMT_RGB666_LOOSE		(0x2 << 16)
+#define  PIX_FMT_RGB888			(0x3 << 16)
+#define  PIX_FMT_RGB101010		(0x4 << 16)
+#define  PIX_FMT_RGB121212		(0x5 << 16)
+#define  PIX_FMT_COMPRESSED		(0x6 << 16)
+#define  BGR_TRANSMISSION		(1 << 15)
+#define  PIX_VIRT_CHAN(x)		((x) << 12)
+#define  PIX_VIRT_CHAN_MASK		(0x3 << 12)
+#define  PIX_VIRT_CHAN_SHIFT		12
+#define  PIX_BUF_THRESHOLD_MASK		(0x3 << 10)
+#define  PIX_BUF_THRESHOLD_SHIFT	10
+#define  PIX_BUF_THRESHOLD_1_4		(0x0 << 10)
+#define  PIX_BUF_THRESHOLD_1_2		(0x1 << 10)
+#define  PIX_BUF_THRESHOLD_3_4		(0x2 << 10)
+#define  PIX_BUF_THRESHOLD_FULL		(0x3 << 10)
+#define  CONTINUOUS_CLK_MASK		(0x3 << 8)
+#define  CONTINUOUS_CLK_SHIFT		8
+#define  CLK_ENTER_LP_AFTER_DATA	(0x0 << 8)
+#define  CLK_HS_OR_LP			(0x2 << 8)
+#define  CLK_HS_CONTINUOUS		(0x3 << 8)
+#define  LINK_CALIBRATION_MASK		(0x3 << 4)
+#define  LINK_CALIBRATION_SHIFT		4
+#define  CALIBRATION_DISABLED		(0x0 << 4)
+#define  CALIBRATION_ENABLED_INITIAL_ONLY	(0x2 << 4)
+#define  CALIBRATION_ENABLED_INITIAL_PERIODIC	(0x3 << 4)
+#define  S3D_ORIENTATION_LANDSCAPE	(1 << 1)
+#define  EOTP_DISABLED			(1 << 0)
+
 /* bits 31:0 */
 #define _MIPIA_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb084)
 #define _MIPIC_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb884)
-- 
2.11.0

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

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

* [PATCH v7 11/23] drm/i915/icl: Configure DSI transcoders
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (9 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 10/23] drm/i915/icl: Define TRANS_DSI_FUNC_CONF register Jani Nikula
@ 2018-10-15 14:27 ` Jani Nikula
  2018-10-20 11:16   ` Madhav Chauhan
  2018-10-15 14:28 ` [PATCH v7 12/23] drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers Jani Nikula
                   ` (21 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:27 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch programs DSI operation mode, pixel format,
BGR info, link calibration etc for the DSI transcoder.
This patch also extract BGR info of the DSI panel from
VBT and save it inside struct intel_dsi which used for
configuring DSI transcoder.

v2: Rebase
v3: Use newly defined bitfields.

v4 by Jani:
 - Use intel_dsi_bitrate()
 - Make bgr_enabled bool
 - Use 0 instead of 0x0
 - Replace DRM_ERROR() with MISSING_CASE() on pixel format and video mode
 - Use is_vid_mode()

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c       | 87 +++++++++++++++++++++++++++++++++++-
 drivers/gpu/drm/i915/intel_dsi.h     |  3 ++
 drivers/gpu/drm/i915/intel_dsi_vbt.c |  1 +
 3 files changed, 90 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 407c3065d08d..756c75d0c86c 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -27,7 +27,7 @@
 
 #include "intel_dsi.h"
 
-static enum transcoder __attribute__((unused)) dsi_port_to_transcoder(enum port port)
+static enum transcoder dsi_port_to_transcoder(enum port port)
 {
 	if (port == PORT_A)
 		return TRANSCODER_DSI_0;
@@ -340,6 +340,88 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
 	}
 }
 
+static void gen11_dsi_configure_transcoder(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;
+	enum transcoder dsi_trans;
+
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		tmp = I915_READ(DSI_TRANS_FUNC_CONF(dsi_trans));
+
+		if (intel_dsi->eotp_pkt)
+			tmp &= ~EOTP_DISABLED;
+		else
+			tmp |= EOTP_DISABLED;
+
+		/* enable link calibration if freq > 1.5Gbps */
+		if (intel_dsi_bitrate(intel_dsi) >= 1500 * 1000) {
+			tmp &= ~LINK_CALIBRATION_MASK;
+			tmp |= CALIBRATION_ENABLED_INITIAL_ONLY;
+		}
+
+		/* configure continuous clock */
+		tmp &= ~CONTINUOUS_CLK_MASK;
+		if (intel_dsi->clock_stop)
+			tmp |= CLK_ENTER_LP_AFTER_DATA;
+		else
+			tmp |= CLK_HS_CONTINUOUS;
+
+		/* configure buffer threshold limit to minimum */
+		tmp &= ~PIX_BUF_THRESHOLD_MASK;
+		tmp |= PIX_BUF_THRESHOLD_1_4;
+
+		/* set virtual channel to '0' */
+		tmp &= ~PIX_VIRT_CHAN_MASK;
+		tmp |= PIX_VIRT_CHAN(0);
+
+		/* program BGR transmission */
+		if (intel_dsi->bgr_enabled)
+			tmp |= BGR_TRANSMISSION;
+
+		/* select pixel format */
+		tmp &= ~PIX_FMT_MASK;
+		switch (intel_dsi->pixel_format) {
+		default:
+			MISSING_CASE(intel_dsi->pixel_format);
+			/* fallthrough */
+		case MIPI_DSI_FMT_RGB565:
+			tmp |= PIX_FMT_RGB565;
+			break;
+		case MIPI_DSI_FMT_RGB666_PACKED:
+			tmp |= PIX_FMT_RGB666_PACKED;
+			break;
+		case MIPI_DSI_FMT_RGB666:
+			tmp |= PIX_FMT_RGB666_LOOSE;
+			break;
+		case MIPI_DSI_FMT_RGB888:
+			tmp |= PIX_FMT_RGB888;
+			break;
+		}
+
+		/* program DSI operation mode */
+		if (is_vid_mode(intel_dsi)) {
+			tmp &= ~OP_MODE_MASK;
+			switch (intel_dsi->video_mode_format) {
+			default:
+				MISSING_CASE(intel_dsi->video_mode_format);
+				/* fallthrough */
+			case VIDEO_MODE_NON_BURST_WITH_SYNC_EVENTS:
+				tmp |= VIDEO_MODE_SYNC_EVENT;
+				break;
+			case VIDEO_MODE_NON_BURST_WITH_SYNC_PULSE:
+				tmp |= VIDEO_MODE_SYNC_PULSE;
+				break;
+			}
+		}
+
+		I915_WRITE(DSI_TRANS_FUNC_CONF(dsi_trans), tmp);
+	}
+}
+
 static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
 {
 	/* step 4a: power up all lanes of the DDI used by DSI */
@@ -356,6 +438,9 @@ static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
 
 	/* setup D-PHY timings */
 	gen11_dsi_setup_dphy_timings(encoder);
+
+	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
+	gen11_dsi_configure_transcoder(encoder);
 }
 
 static void __attribute__((unused))
diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
index 12b758ebefce..14567929de9a 100644
--- a/drivers/gpu/drm/i915/intel_dsi.h
+++ b/drivers/gpu/drm/i915/intel_dsi.h
@@ -81,6 +81,9 @@ struct intel_dsi {
 	u16 dcs_backlight_ports;
 	u16 dcs_cabc_ports;
 
+	/* RGB or BGR */
+	bool bgr_enabled;
+
 	u8 pixel_overlap;
 	u32 port_bits;
 	u32 bw_timer;
diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
index 3035422aa0d6..cca071406c25 100644
--- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
+++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
@@ -805,6 +805,7 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
 	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
 	intel_dsi->video_frmt_cfg_bits =
 		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
+	intel_dsi->bgr_enabled = mipi_config->rgb_flip;
 
 	/* Starting point, adjusted depending on dual link and burst mode */
 	intel_dsi->pclk = mode->clock;
-- 
2.11.0

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

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

* [PATCH v7 12/23] drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (10 preceding siblings ...)
  2018-10-15 14:27 ` [PATCH v7 11/23] drm/i915/icl: Configure DSI transcoders Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-22 11:01   ` Madhav Chauhan
  2018-10-15 14:28 ` [PATCH v7 13/23] drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers Jani Nikula
                   ` (20 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch defines TRANS_DDI_FUNC_CTL and TRANS_DDI_FUNC_CTL2
registers and their bitfields for DSI. These registers are used
for enabling port sync mode, input pipe select, data lane width
configuration etc.

v2: Changes:
    - Remove redundant extra line
    - Correct some of bitfield definition

v3 by Jani:
 - Move DSI transcoder offsets to GEN11_FEATURES

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_pci.c |  3 +++
 drivers/gpu/drm/i915/i915_reg.h | 17 +++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 0a05cc7ace14..b86b735a8634 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -595,6 +595,9 @@ static const struct intel_device_info intel_cannonlake_info = {
 
 #define GEN11_FEATURES \
 	GEN10_FEATURES, \
+	.trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
+			   TRANSCODER_C_OFFSET, TRANSCODER_EDP_OFFSET, \
+			   TRANSCODER_DSI0_OFFSET, TRANSCODER_DSI1_OFFSET}, \
 	GEN(11), \
 	.ddb_size = 2048, \
 	.has_logical_ring_elsq = 1
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index b065e4ca0b45..79e633c1e9ad 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -4066,6 +4066,8 @@ enum {
 #define TRANSCODER_C_OFFSET 0x62000
 #define CHV_TRANSCODER_C_OFFSET 0x63000
 #define TRANSCODER_EDP_OFFSET 0x6f000
+#define TRANSCODER_DSI0_OFFSET	0x6b000
+#define TRANSCODER_DSI1_OFFSET	0x6b800
 
 #define _MMIO_TRANS2(pipe, reg) _MMIO(dev_priv->info.trans_offsets[(pipe)] - \
 	dev_priv->info.trans_offsets[TRANSCODER_A] + (reg) + \
@@ -9021,6 +9023,8 @@ enum skl_power_gate {
 #define _TRANS_DDI_FUNC_CTL_B		0x61400
 #define _TRANS_DDI_FUNC_CTL_C		0x62400
 #define _TRANS_DDI_FUNC_CTL_EDP		0x6F400
+#define _TRANS_DDI_FUNC_CTL_DSI0	0x6b400
+#define _TRANS_DDI_FUNC_CTL_DSI1	0x6bc00
 #define TRANS_DDI_FUNC_CTL(tran) _MMIO_TRANS2(tran, _TRANS_DDI_FUNC_CTL_A)
 
 #define  TRANS_DDI_FUNC_ENABLE		(1 << 31)
@@ -9058,6 +9062,19 @@ enum skl_power_gate {
 					| TRANS_DDI_HDMI_SCRAMBLER_RESET_FREQ \
 					| TRANS_DDI_HDMI_SCRAMBLING)
 
+#define _TRANS_DDI_FUNC_CTL2_A		0x60404
+#define _TRANS_DDI_FUNC_CTL2_B		0x61404
+#define _TRANS_DDI_FUNC_CTL2_C		0x62404
+#define _TRANS_DDI_FUNC_CTL2_EDP	0x6f404
+#define _TRANS_DDI_FUNC_CTL2_DSI0	0x6b404
+#define _TRANS_DDI_FUNC_CTL2_DSI1	0x6bc04
+#define TRANS_DDI_FUNC_CTL2(tran)	_MMIO_TRANS2(tran, \
+						     _TRANS_DDI_FUNC_CTL2_A)
+#define  PORT_SYNC_MODE_ENABLE			(1 << 4)
+#define  PORT_SYNC_MODE_MASTER_SELECT(x)	((x) < 0)
+#define  PORT_SYNC_MODE_MASTER_SELECT_MASK	(0x7 << 0)
+#define  PORT_SYNC_MODE_MASTER_SELECT_SHIFT	0
+
 /* DisplayPort Transport Control */
 #define _DP_TP_CTL_A			0x64040
 #define _DP_TP_CTL_B			0x64140
-- 
2.11.0

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

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

* [PATCH v7 13/23] drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (11 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 12/23] drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-22 11:05   ` Madhav Chauhan
  2018-10-15 14:28 ` [PATCH v7 14/23] drm/i915/icl: Define DSI transcoder timing registers Jani Nikula
                   ` (19 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch select input PIPE for DSI, data lanes width,
enable port sync mode and wait for DSI link to become ready.

v2 by Jani:
 - Use MISSING_CASE with fallthrough instead of DRM_ERROR
 - minor stylistic changes

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 64 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 60 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 756c75d0c86c..87d5e6435791 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -340,10 +340,14 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
 	}
 }
 
-static void gen11_dsi_configure_transcoder(struct intel_encoder *encoder)
+static void
+gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
+			       const struct intel_crtc_state *pipe_config)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
+	struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->base.crtc);
+	enum pipe pipe = intel_crtc->pipe;
 	u32 tmp;
 	enum port port;
 	enum transcoder dsi_trans;
@@ -420,9 +424,61 @@ static void gen11_dsi_configure_transcoder(struct intel_encoder *encoder)
 
 		I915_WRITE(DSI_TRANS_FUNC_CONF(dsi_trans), tmp);
 	}
+
+	/* enable port sync mode if dual link */
+	if (intel_dsi->dual_link) {
+		for_each_dsi_port(port, intel_dsi->ports) {
+			dsi_trans = dsi_port_to_transcoder(port);
+			tmp = I915_READ(TRANS_DDI_FUNC_CTL2(dsi_trans));
+			tmp |= PORT_SYNC_MODE_ENABLE;
+			I915_WRITE(TRANS_DDI_FUNC_CTL2(dsi_trans), tmp);
+		}
+
+		//TODO: configure DSS_CTL1
+	}
+
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+
+		/* select data lane width */
+		tmp = I915_READ(TRANS_DDI_FUNC_CTL(dsi_trans));
+		tmp &= ~DDI_PORT_WIDTH_MASK;
+		tmp |= DDI_PORT_WIDTH(intel_dsi->lane_count);
+
+		/* select input pipe */
+		tmp &= ~TRANS_DDI_EDP_INPUT_MASK;
+		switch (pipe) {
+		default:
+			MISSING_CASE(pipe);
+			/* fallthrough */
+		case PIPE_A:
+			tmp |= TRANS_DDI_EDP_INPUT_A_ON;
+			break;
+		case PIPE_B:
+			tmp |= TRANS_DDI_EDP_INPUT_B_ONOFF;
+			break;
+		case PIPE_C:
+			tmp |= TRANS_DDI_EDP_INPUT_C_ONOFF;
+			break;
+		}
+
+		/* enable DDI buffer */
+		tmp |= TRANS_DDI_FUNC_ENABLE;
+		I915_WRITE(TRANS_DDI_FUNC_CTL(dsi_trans), tmp);
+	}
+
+	/* wait for link ready */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		if (wait_for_us((I915_READ(DSI_TRANS_FUNC_CONF(dsi_trans)) &
+				LINK_READY), 2500))
+			DRM_ERROR("DSI link not ready\n");
+	}
 }
 
-static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
+static void
+gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder,
+			      const struct intel_crtc_state *pipe_config)
 {
 	/* step 4a: power up all lanes of the DDI used by DSI */
 	gen11_dsi_power_up_lanes(encoder);
@@ -440,7 +496,7 @@ static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
 	gen11_dsi_setup_dphy_timings(encoder);
 
 	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
-	gen11_dsi_configure_transcoder(encoder);
+	gen11_dsi_configure_transcoder(encoder, pipe_config);
 }
 
 static void __attribute__((unused))
@@ -455,5 +511,5 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
 	gen11_dsi_program_esc_clk_div(encoder);
 
 	/* step4: enable DSI port and DPHY */
-	gen11_dsi_enable_port_and_phy(encoder);
+	gen11_dsi_enable_port_and_phy(encoder, pipe_config);
 }
-- 
2.11.0

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

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

* [PATCH v7 14/23] drm/i915/icl: Define DSI transcoder timing registers
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (12 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 13/23] drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-22 11:10   ` Madhav Chauhan
  2018-10-15 14:28 ` [PATCH v7 15/23] drm/i915/icl: Configure DSI transcoder timings Jani Nikula
                   ` (18 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch defines registers and bitfields used for
programming DSI transcoder's horizontal and vertical
timings.

v2: Remove TRANS_TIMING_SHIFT definition

v3 by Jani:
 - Group macros by transcoder

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_reg.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 79e633c1e9ad..c4270ca26a11 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -4061,6 +4061,20 @@ enum {
 #define _VSYNCSHIFT_B	0x61028
 #define _PIPE_MULT_B	0x6102c
 
+/* DSI 0 timing regs */
+#define _HTOTAL_DSI0		0x6b000
+#define _HSYNC_DSI0		0x6b008
+#define _VTOTAL_DSI0		0x6b00c
+#define _VSYNC_DSI0		0x6b014
+#define _VSYNCSHIFT_DSI0	0x6b028
+
+/* DSI 1 timing regs */
+#define _HTOTAL_DSI1		0x6b800
+#define _HSYNC_DSI1		0x6b808
+#define _VTOTAL_DSI1		0x6b80c
+#define _VSYNC_DSI1		0x6b814
+#define _VSYNCSHIFT_DSI1	0x6b828
+
 #define TRANSCODER_A_OFFSET 0x60000
 #define TRANSCODER_B_OFFSET 0x61000
 #define TRANSCODER_C_OFFSET 0x62000
-- 
2.11.0

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

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

* [PATCH v7 15/23] drm/i915/icl: Configure DSI transcoder timings
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (13 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 14/23] drm/i915/icl: Define DSI transcoder timing registers Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-22 11:15   ` Madhav Chauhan
  2018-10-15 14:28 ` [PATCH v7 16/23] drm/i915/icl: Define TRANS_CONF register for DSI Jani Nikula
                   ` (17 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

As part of DSI enable sequence, transcoder timings
(horizontal & vertical) need to be set so that transcoder
will generate the stream output as per those timings.
This patch set required transcoder timings as per BSPEC.

v2: Remove TRANS_TIMING_SHIFT usage

v3 by Jani:
 - Rebase
 - Reduce temp variable use
 - Checkpatch fix

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 118 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 118 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 87d5e6435791..f6ed57b28676 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -477,6 +477,121 @@ gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
 }
 
 static void
+gen11_dsi_set_transcoder_timings(struct intel_encoder *encoder,
+				 const struct intel_crtc_state *pipe_config)
+{
+	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
+	const struct drm_display_mode *adjusted_mode =
+					&pipe_config->base.adjusted_mode;
+	enum port port;
+	enum transcoder dsi_trans;
+	/* horizontal timings */
+	u16 htotal, hactive, hsync_start, hsync_end, hsync_size;
+	u16 hfront_porch, hback_porch;
+	/* vertical timings */
+	u16 vtotal, vactive, vsync_start, vsync_end, vsync_shift;
+
+	hactive = adjusted_mode->crtc_hdisplay;
+	htotal = adjusted_mode->crtc_htotal;
+	hsync_start = adjusted_mode->crtc_hsync_start;
+	hsync_end = adjusted_mode->crtc_hsync_end;
+	hsync_size  = hsync_end - hsync_start;
+	hfront_porch = (adjusted_mode->crtc_hsync_start -
+			adjusted_mode->crtc_hdisplay);
+	hback_porch = (adjusted_mode->crtc_htotal -
+		       adjusted_mode->crtc_hsync_end);
+	vactive = adjusted_mode->crtc_vdisplay;
+	vtotal = adjusted_mode->crtc_vtotal;
+	vsync_start = adjusted_mode->crtc_vsync_start;
+	vsync_end = adjusted_mode->crtc_vsync_end;
+	vsync_shift = hsync_start - htotal / 2;
+
+	if (intel_dsi->dual_link) {
+		hactive /= 2;
+		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK)
+			hactive += intel_dsi->pixel_overlap;
+		htotal /= 2;
+	}
+
+	/* minimum hactive as per bspec: 256 pixels */
+	if (adjusted_mode->crtc_hdisplay < 256)
+		DRM_ERROR("hactive is less then 256 pixels\n");
+
+	/* if RGB666 format, then hactive must be multiple of 4 pixels */
+	if (intel_dsi->pixel_format == MIPI_DSI_FMT_RGB666 && hactive % 4 != 0)
+		DRM_ERROR("hactive pixels are not multiple of 4\n");
+
+	/* program TRANS_HTOTAL register */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		I915_WRITE(HTOTAL(dsi_trans),
+			   (hactive - 1) | ((htotal - 1) << 16));
+	}
+
+	/* TRANS_HSYNC register to be programmed only for video mode */
+	if (intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE) {
+		if (intel_dsi->video_mode_format ==
+		    VIDEO_MODE_NON_BURST_WITH_SYNC_PULSE) {
+			/* BSPEC: hsync size should be atleast 16 pixels */
+			if (hsync_size < 16)
+				DRM_ERROR("hsync size < 16 pixels\n");
+		}
+
+		if (hback_porch < 16)
+			DRM_ERROR("hback porch < 16 pixels\n");
+
+		if (intel_dsi->dual_link) {
+			hsync_start /= 2;
+			hsync_end /= 2;
+		}
+
+		for_each_dsi_port(port, intel_dsi->ports) {
+			dsi_trans = dsi_port_to_transcoder(port);
+			I915_WRITE(HSYNC(dsi_trans),
+				   (hsync_start - 1) | ((hsync_end - 1) << 16));
+		}
+	}
+
+	/* program TRANS_VTOTAL register */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		/*
+		 * FIXME: Programing this by assuming progressive mode, since
+		 * non-interlaced info from VBT is not saved inside
+		 * struct drm_display_mode.
+		 * For interlace mode: program required pixel minus 2
+		 */
+		I915_WRITE(VTOTAL(dsi_trans),
+			   (vactive - 1) | ((vtotal - 1) << 16));
+	}
+
+	if (vsync_end < vsync_start || vsync_end > vtotal)
+		DRM_ERROR("Invalid vsync_end value\n");
+
+	if (vsync_start < vactive)
+		DRM_ERROR("vsync_start less than vactive\n");
+
+	/* program TRANS_VSYNC register */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		I915_WRITE(VSYNC(dsi_trans),
+			   (vsync_start - 1) | ((vsync_end - 1) << 16));
+	}
+
+	/*
+	 * FIXME: It has to be programmed only for interlaced
+	 * modes. Put the check condition here once interlaced
+	 * info available as described above.
+	 * program TRANS_VSYNCSHIFT register
+	 */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		I915_WRITE(VSYNCSHIFT(dsi_trans), vsync_shift);
+	}
+}
+
+static void
 gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder,
 			      const struct intel_crtc_state *pipe_config)
 {
@@ -512,4 +627,7 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
 
 	/* step4: enable DSI port and DPHY */
 	gen11_dsi_enable_port_and_phy(encoder, pipe_config);
+
+	/* step6c: configure transcoder timings */
+	gen11_dsi_set_transcoder_timings(encoder, pipe_config);
 }
-- 
2.11.0

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

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

* [PATCH v7 16/23] drm/i915/icl: Define TRANS_CONF register for DSI
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (14 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 15/23] drm/i915/icl: Configure DSI transcoder timings Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-22 11:25   ` Madhav Chauhan
  2018-10-15 14:28 ` [PATCH v7 17/23] drm/i915/icl: Enable DSI transcoders Jani Nikula
                   ` (16 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch defines TRANS_CONF registers for DSI ports
0 and 1. Bitfields of these registers used for enabling
and reading the current state of transcoder.

v2: Add blank line before comment

v3 by Jani:
 - Move DSI specific .pipe_offsets to GEN11_FEATURES
 - Macro placement and comment juggling

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_pci.c | 3 +++
 drivers/gpu/drm/i915/i915_reg.h | 8 ++++++++
 2 files changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index b86b735a8634..44e745921ac1 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -595,6 +595,9 @@ static const struct intel_device_info intel_cannonlake_info = {
 
 #define GEN11_FEATURES \
 	GEN10_FEATURES, \
+	.pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
+			  PIPE_C_OFFSET, PIPE_EDP_OFFSET, \
+			  PIPE_DSI0_OFFSET, PIPE_DSI1_OFFSET }, \
 	.trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
 			   TRANSCODER_C_OFFSET, TRANSCODER_EDP_OFFSET, \
 			   TRANSCODER_DSI0_OFFSET, TRANSCODER_DSI1_OFFSET}, \
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index c4270ca26a11..839e681bd3a4 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5652,6 +5652,10 @@ enum {
  */
 #define PIPE_EDP_OFFSET	0x7f000
 
+/* ICL DSI 0 and 1 */
+#define PIPE_DSI0_OFFSET	0x7b000
+#define PIPE_DSI1_OFFSET	0x7b800
+
 #define _MMIO_PIPE2(pipe, reg) _MMIO(dev_priv->info.pipe_offsets[pipe] - \
 	dev_priv->info.pipe_offsets[PIPE_A] + (reg) + \
 	dev_priv->info.display_mmio_offset)
@@ -6240,6 +6244,10 @@ enum {
 #define _DSPBOFFSET		(dev_priv->info.display_mmio_offset + 0x711A4)
 #define _DSPBSURFLIVE		(dev_priv->info.display_mmio_offset + 0x711AC)
 
+/* ICL DSI 0 and 1 */
+#define _PIPEDSI0CONF		0x7b008
+#define _PIPEDSI1CONF		0x7b808
+
 /* Sprite A control */
 #define _DVSACNTR		0x72180
 #define   DVS_ENABLE		(1 << 31)
-- 
2.11.0

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

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

* [PATCH v7 17/23] drm/i915/icl: Enable DSI transcoders
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (15 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 16/23] drm/i915/icl: Define TRANS_CONF register for DSI Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-22 11:27   ` Madhav Chauhan
  2018-10-15 14:28 ` [PATCH v7 18/23] drm/i915/icl: Define DSI panel programming registers Jani Nikula
                   ` (15 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch enables DSI transcoders by writing to
TRANS_CONF registers and wait for its state to be enabled.

v2 by Jani:
 - Rebase

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index f6ed57b28676..216a1753d246 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -591,6 +591,28 @@ gen11_dsi_set_transcoder_timings(struct intel_encoder *encoder,
 	}
 }
 
+static void gen11_dsi_enable_transcoder(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);
+	enum port port;
+	enum transcoder dsi_trans;
+	u32 tmp;
+
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		tmp = I915_READ(PIPECONF(dsi_trans));
+		tmp |= PIPECONF_ENABLE;
+		I915_WRITE(PIPECONF(dsi_trans), tmp);
+
+		/* wait for transcoder to be enabled */
+		if (intel_wait_for_register(dev_priv, PIPECONF(dsi_trans),
+					    I965_PIPECONF_ACTIVE,
+					    I965_PIPECONF_ACTIVE, 10))
+			DRM_ERROR("DSI transcoder not enabled\n");
+	}
+}
+
 static void
 gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder,
 			      const struct intel_crtc_state *pipe_config)
@@ -630,4 +652,7 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
 
 	/* step6c: configure transcoder timings */
 	gen11_dsi_set_transcoder_timings(encoder, pipe_config);
+
+	/* step6d: enable dsi transcoder */
+	gen11_dsi_enable_transcoder(encoder);
 }
-- 
2.11.0

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

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

* [PATCH v7 18/23] drm/i915/icl: Define DSI panel programming registers
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (16 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 17/23] drm/i915/icl: Enable DSI transcoders Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-22 12:33   ` Jani Nikula
  2018-10-15 14:28 ` [PATCH v7 19/23] drm/i915/icl: Set max return packet size for DSI panel Jani Nikula
                   ` (14 subsequent siblings)
  32 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch defines DSI_CMD_RXCTL, DSI_CMD_TXCTL registers,
bitfields, masks and macros used for configuring DSI panel.

v2: Define remaining bitfields

v3 by Jani:
 - Alignment fix

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_reg.h | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 839e681bd3a4..fe6b42037ded 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -10463,6 +10463,44 @@ enum skl_power_gate {
 #define  S3D_ORIENTATION_LANDSCAPE	(1 << 1)
 #define  EOTP_DISABLED			(1 << 0)
 
+#define _DSI_CMD_RXCTL_0		0x6b0d4
+#define _DSI_CMD_RXCTL_1		0x6b8d4
+#define DSI_CMD_RXCTL(tc)		_MMIO_DSI(tc,	\
+						  _DSI_CMD_RXCTL_0,\
+						  _DSI_CMD_RXCTL_1)
+#define  READ_UNLOADS_DW		(1 << 16)
+#define  RECEIVED_UNASSIGNED_TRIGGER	(1 << 15)
+#define  RECEIVED_ACKNOWLEDGE_TRIGGER	(1 << 14)
+#define  RECEIVED_TEAR_EFFECT_TRIGGER	(1 << 13)
+#define  RECEIVED_RESET_TRIGGER		(1 << 12)
+#define  RECEIVED_PAYLOAD_WAS_LOST	(1 << 11)
+#define  RECEIVED_CRC_WAS_LOST		(1 << 10)
+#define  NUMBER_RX_PLOAD_DW_MASK	(0xff << 0)
+#define  NUMBER_RX_PLOAD_DW_SHIFT	0
+
+#define _DSI_CMD_TXCTL_0		0x6b0d0
+#define _DSI_CMD_TXCTL_1		0x6b8d0
+#define DSI_CMD_TXCTL(tc)		_MMIO_DSI(tc,	\
+						  _DSI_CMD_TXCTL_0,\
+						  _DSI_CMD_TXCTL_1)
+#define  KEEP_LINK_IN_HS		(1 << 24)
+#define  FREE_HEADER_CREDIT_MASK	(0x1f << 8)
+#define  FREE_HEADER_CREDIT_SHIFT	0x8
+#define  FREE_PLOAD_CREDIT_MASK		(0xff << 0)
+#define  FREE_PLOAD_CREDIT_SHIFT	0
+#define  MAX_HEADER_CREDIT		0x10
+#define  MAX_PLOAD_CREDIT		0x40
+
+#define _DSI_LP_MSG_0			0x6b0d8
+#define _DSI_LP_MSG_1			0x6b8d8
+#define DSI_LP_MSG(tc)			_MMIO_DSI(tc,	\
+						  _DSI_LP_MSG_0,\
+						  _DSI_LP_MSG_1)
+#define  LPTX_IN_PROGRESS		(1 << 17)
+#define  LINK_IN_ULPS			(1 << 16)
+#define  LINK_ULPS_TYPE_LP11		(1 << 8)
+#define  LINK_ENTER_ULPS		(1 << 0)
+
 /* bits 31:0 */
 #define _MIPIA_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb084)
 #define _MIPIC_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb884)
-- 
2.11.0

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

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

* [PATCH v7 19/23] drm/i915/icl: Set max return packet size for DSI panel
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (17 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 18/23] drm/i915/icl: Define DSI panel programming registers Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-15 14:28 ` [PATCH v7 20/23] drm/i915/icl: Power on " Jani Nikula
                   ` (13 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch programs maximum size of the payload transmitted
from peripheral back to the host processor using short packet
as a part of panel programming.

v2: Rebase

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

---

FIXME: Looks like this is storing sw state in registers.
---
 drivers/gpu/drm/i915/icl_dsi.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 216a1753d246..5ede055b263e 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -25,6 +25,7 @@
  *   Jani Nikula <jani.nikula@intel.com>
  */
 
+#include <drm/drm_mipi_dsi.h>
 #include "intel_dsi.h"
 
 static enum transcoder dsi_port_to_transcoder(enum port port)
@@ -636,6 +637,30 @@ gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder,
 	gen11_dsi_configure_transcoder(encoder, pipe_config);
 }
 
+static void gen11_dsi_powerup_panel(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);
+	struct mipi_dsi_device *dsi;
+	enum port port;
+	enum transcoder dsi_trans;
+	u32 tmp;
+	int ret;
+
+	/* set maximum return packet size */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		tmp = I915_READ(DSI_CMD_RXCTL(dsi_trans));
+		tmp &= NUMBER_RX_PLOAD_DW_MASK;
+		/* multiply "Number Rx Payload DW" by 4 to get max value */
+		tmp = tmp * 4;
+		dsi = intel_dsi->dsi_hosts[port]->device;
+		ret = mipi_dsi_set_maximum_return_packet_size(dsi, tmp);
+		if (ret < 0)
+			DRM_ERROR("error setting max return pkt size%d\n", tmp);
+	}
+}
+
 static void __attribute__((unused))
 gen11_dsi_pre_enable(struct intel_encoder *encoder,
 		     const struct intel_crtc_state *pipe_config,
@@ -650,6 +675,9 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
 	/* step4: enable DSI port and DPHY */
 	gen11_dsi_enable_port_and_phy(encoder, pipe_config);
 
+	/* step5: program and powerup panel */
+	gen11_dsi_powerup_panel(encoder);
+
 	/* step6c: configure transcoder timings */
 	gen11_dsi_set_transcoder_timings(encoder, pipe_config);
 
-- 
2.11.0

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

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

* [PATCH v7 20/23] drm/i915/icl: Power on DSI panel
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (18 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 19/23] drm/i915/icl: Set max return packet size for DSI panel Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-15 14:28 ` [PATCH v7 21/23] drm/i915/icl: Wait for header/payload credits release Jani Nikula
                   ` (12 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch execute poweron, deassert reset, display on
VBT sequences and send TURN_ON DSI command to panel for
powering it up.

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 5ede055b263e..0393fed98a6f 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -659,6 +659,13 @@ static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
 		if (ret < 0)
 			DRM_ERROR("error setting max return pkt size%d\n", tmp);
 	}
+
+	/* panel power on related mipi dsi vbt sequences */
+	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
+	intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
+	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
+	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_INIT_OTP);
+	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
 }
 
 static void __attribute__((unused))
-- 
2.11.0

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

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

* [PATCH v7 21/23] drm/i915/icl: Wait for header/payload credits release
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (19 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 20/23] drm/i915/icl: Power on " Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-15 14:28 ` [PATCH v7 22/23] drm/i915/icl: Ensure all cmd/data disptached to panel Jani Nikula
                   ` (11 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

Driver needs payload/header credits for sending any command
and data over DSI link. These credits are released once command
or data sent to link. This patch adds functions to wait for releasing
of payload and header credits.

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 0393fed98a6f..5fe024dfbdb0 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -28,6 +28,30 @@
 #include <drm/drm_mipi_dsi.h>
 #include "intel_dsi.h"
 
+static void __attribute__((unused)) wait_for_dsi_hdr_credit_release(
+						struct intel_dsi *intel_dsi,
+						enum transcoder dsi_trans)
+{
+	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
+
+	if (wait_for_us(((I915_READ(DSI_CMD_TXCTL(dsi_trans)) &
+			  FREE_HEADER_CREDIT_MASK) >> FREE_HEADER_CREDIT_SHIFT)
+			  == MAX_HEADER_CREDIT, 100))
+		DRM_ERROR("DSI header credits not released\n");
+}
+
+static void __attribute__((unused)) wait_for_dsi_payload_credit_release(
+						struct intel_dsi *intel_dsi,
+						enum transcoder dsi_trans)
+{
+	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
+
+	if (wait_for_us((I915_READ(DSI_CMD_TXCTL(dsi_trans)) &
+			FREE_PLOAD_CREDIT_MASK) == MAX_PLOAD_CREDIT,
+			100))
+		DRM_ERROR("DSI payload credits not released\n");
+}
+
 static enum transcoder dsi_port_to_transcoder(enum port port)
 {
 	if (port == PORT_A)
-- 
2.11.0

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

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

* [PATCH v7 22/23] drm/i915/icl: Ensure all cmd/data disptached to panel
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (20 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 21/23] drm/i915/icl: Wait for header/payload credits release Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-15 14:28 ` [PATCH v7 23/23] drm/i915/icl: Turn ON panel backlight Jani Nikula
                   ` (10 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

As per BSPEC, driver needs to ensure that all of commands/data
has been dispatched to panel before the transcoder is enabled.
This patch implement those steps i.e. sending NOP DCS command,
wait for header/payload credit to be released etc.

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 53 ++++++++++++++++++++++++++++++++++++++----
 1 file changed, 48 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 5fe024dfbdb0..90188ba8a4dc 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -28,9 +28,8 @@
 #include <drm/drm_mipi_dsi.h>
 #include "intel_dsi.h"
 
-static void __attribute__((unused)) wait_for_dsi_hdr_credit_release(
-						struct intel_dsi *intel_dsi,
-						enum transcoder dsi_trans)
+static void wait_for_dsi_hdr_credit_release(struct intel_dsi *intel_dsi,
+					    enum transcoder dsi_trans)
 {
 	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
 
@@ -40,8 +39,7 @@ static void __attribute__((unused)) wait_for_dsi_hdr_credit_release(
 		DRM_ERROR("DSI header credits not released\n");
 }
 
-static void __attribute__((unused)) wait_for_dsi_payload_credit_release(
-						struct intel_dsi *intel_dsi,
+static void wait_for_dsi_payload_credit_release(struct intel_dsi *intel_dsi,
 						enum transcoder dsi_trans)
 {
 	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
@@ -60,6 +58,48 @@ static enum transcoder dsi_port_to_transcoder(enum port port)
 		return TRANSCODER_DSI_1;
 }
 
+static void wait_for_cmds_dispatched_to_panel(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);
+	struct mipi_dsi_device *dsi;
+	enum port port;
+	enum transcoder dsi_trans;
+	int ret;
+
+	/* wait for header/payload credits to be released */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		wait_for_dsi_hdr_credit_release(intel_dsi, dsi_trans);
+		wait_for_dsi_payload_credit_release(intel_dsi, dsi_trans);
+	}
+
+	/* send nop DCS command */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi = intel_dsi->dsi_hosts[port]->device;
+		dsi->mode_flags |= MIPI_DSI_MODE_LPM;
+		dsi->channel = 0;
+		ret = mipi_dsi_dcs_nop(dsi);
+		if (ret < 0)
+			DRM_ERROR("error sending DCS NOP command\n");
+	}
+
+	/* wait for header credits to be released */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		wait_for_dsi_hdr_credit_release(intel_dsi, dsi_trans);
+	}
+
+	/* wait for LP TX in progress bit to be cleared */
+	for_each_dsi_port(port, intel_dsi->ports) {
+		dsi_trans = dsi_port_to_transcoder(port);
+		if (wait_for_us(!(I915_READ(DSI_LP_MSG(dsi_trans)) &
+				  LPTX_IN_PROGRESS),
+				  20))
+			DRM_ERROR("LPTX bit not cleared\n");
+	}
+}
+
 static void dsi_program_swing_and_deemphasis(struct intel_encoder *encoder)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
@@ -690,6 +730,9 @@ static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_INIT_OTP);
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
+
+	/* ensure all panel commands dispatched before enabling transcoder */
+	wait_for_cmds_dispatched_to_panel(encoder);
 }
 
 static void __attribute__((unused))
-- 
2.11.0

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

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

* [PATCH v7 23/23] drm/i915/icl: Turn ON panel backlight
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (21 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 22/23] drm/i915/icl: Ensure all cmd/data disptached to panel Jani Nikula
@ 2018-10-15 14:28 ` Jani Nikula
  2018-10-15 14:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling Patchwork
                   ` (9 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-15 14:28 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

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

This patch enables backlight of DSI panel by using VBT
BACKLIGHT_ON sequence and panel specific functions.

Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/icl_dsi.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
index 90188ba8a4dc..7ea6741e37ac 100644
--- a/drivers/gpu/drm/i915/icl_dsi.c
+++ b/drivers/gpu/drm/i915/icl_dsi.c
@@ -740,6 +740,8 @@ 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);
+
 	/* step2: enable IO power */
 	gen11_dsi_enable_io_power(encoder);
 
@@ -757,4 +759,8 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
 
 	/* step6d: enable dsi transcoder */
 	gen11_dsi_enable_transcoder(encoder);
+
+	/* step7: enable backlight */
+	intel_panel_enable_backlight(pipe_config, conn_state);
+	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_BACKLIGHT_ON);
 }
-- 
2.11.0

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

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

* ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (22 preceding siblings ...)
  2018-10-15 14:28 ` [PATCH v7 23/23] drm/i915/icl: Turn ON panel backlight Jani Nikula
@ 2018-10-15 14:44 ` Patchwork
  2018-10-15 14:51 ` ✗ Fi.CI.SPARSE: " Patchwork
                   ` (8 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-15 14:44 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling
URL   : https://patchwork.freedesktop.org/series/51011/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
b12abf6e31c4 drm/i915: make encoder enable and disable hooks optional
1a879a6d5120 drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
-:29: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#29: 
new file mode 100644

-:113: WARNING:LONG_LINE: line over 100 characters
#113: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:552:
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);

total: 0 errors, 2 warnings, 0 checks, 118 lines checked
b14852354e52 drm/i915/dsi: abstract dphy parameter init
-:129: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#129: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:691:
+			pixel_format_from_register_bits(

-:155: WARNING:BRACES: braces {} are not necessary for single statement blocks
#155: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:717:
+		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
+		}

-:156: WARNING:LONG_LINE: line over 100 characters
#156: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:718:
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);

-:164: CHECK:BRACES: braces {} should be used on all arms of this statement
#164: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:726:
+	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
[...]
+	} else
[...]

-:173: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#173: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:735:
+			burst_mode_ratio = DIV_ROUND_UP(

-:182: CHECK:BRACES: Unbalanced braces around else statement
#182: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:744:
+	} else

total: 0 errors, 2 warnings, 4 checks, 169 lines checked
f747b1606322 drm/i915/dsi: abstract intel_dsi_tlpx_ns()
f5d8752673e3 drm/i915/icl: Make common DSI functions available
1766764bfdc9 drm/i915/icl: Program DSI clock and data lane timing params
51bb6f5afbd6 drm/i915/icl: Program TA_TIMING_PARAM registers
0e2b629b050f drm/i915/icl: Get DSI transcoder for a given port
f214bf74072b drm/i915/icl: Add macros for MMIO of DSI transcoder registers
5dcfc9bcf556 drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
8fedd977c309 drm/i915/icl: Configure DSI transcoders
-:146: CHECK:BOOL_MEMBER: Avoid using bool structure members because of possible alignment issues - see: https://lkml.org/lkml/2017/11/21/384
#146: FILE: drivers/gpu/drm/i915/intel_dsi.h:85:
+	bool bgr_enabled;

total: 0 errors, 0 warnings, 1 checks, 121 lines checked
fa60d3c6232b drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
c4b1dbebffe2 drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
16b3a933fd57 drm/i915/icl: Define DSI transcoder timing registers
f40776f438c5 drm/i915/icl: Configure DSI transcoder timings
2798285cb709 drm/i915/icl: Define TRANS_CONF register for DSI
45434712c8ed drm/i915/icl: Enable DSI transcoders
b4e25fc83b04 drm/i915/icl: Define DSI panel programming registers
8fbeffd78efd drm/i915/icl: Set max return packet size for DSI panel
b4f147d6e59a drm/i915/icl: Power on DSI panel
2ded53515fac drm/i915/icl: Wait for header/payload credits release
-:22: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#22: FILE: drivers/gpu/drm/i915/icl_dsi.c:31:
+static void __attribute__((unused)) wait_for_dsi_hdr_credit_release(

-:34: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#34: FILE: drivers/gpu/drm/i915/icl_dsi.c:43:
+static void __attribute__((unused)) wait_for_dsi_payload_credit_release(

total: 0 errors, 0 warnings, 2 checks, 30 lines checked
f24121c2b8aa drm/i915/icl: Ensure all cmd/data disptached to panel
40cd071d495a drm/i915/icl: Turn ON panel backlight

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

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

* ✗ Fi.CI.SPARSE: warning for drm/i915/icl: dsi enabling
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (23 preceding siblings ...)
  2018-10-15 14:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling Patchwork
@ 2018-10-15 14:51 ` Patchwork
  2018-10-15 15:09 ` ✗ Fi.CI.BAT: failure " Patchwork
                   ` (7 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-15 14:51 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling
URL   : https://patchwork.freedesktop.org/series/51011/
State : warning

== Summary ==

$ dim sparse origin/drm-tip
Sparse version: v0.5.2
Commit: drm/i915: make encoder enable and disable hooks optional
Okay!

Commit: drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
+./include/uapi/linux/perf_event.h:147:56: warning: cast truncates bits from constant value (8000000000000000 becomes 0)

Commit: drm/i915/dsi: abstract dphy parameter init
Okay!

Commit: drm/i915/dsi: abstract intel_dsi_tlpx_ns()
Okay!

Commit: drm/i915/icl: Make common DSI functions available
Okay!

Commit: drm/i915/icl: Program DSI clock and data lane timing params
+drivers/gpu/drm/i915/intel_dsi_vbt.c:534:25: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/intel_dsi_vbt.c:534:25: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/intel_dsi_vbt.c:535:26: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/intel_dsi_vbt.c:535:26: warning: expression using sizeof(void)

Commit: drm/i915/icl: Program TA_TIMING_PARAM registers
Okay!

Commit: drm/i915/icl: Get DSI transcoder for a given port
Okay!

Commit: drm/i915/icl: Add macros for MMIO of DSI transcoder registers
Okay!

Commit: drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
Okay!

Commit: drm/i915/icl: Configure DSI transcoders
Okay!

Commit: drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
Okay!

Commit: drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
Okay!

Commit: drm/i915/icl: Define DSI transcoder timing registers
Okay!

Commit: drm/i915/icl: Configure DSI transcoder timings
Okay!

Commit: drm/i915/icl: Define TRANS_CONF register for DSI
Okay!

Commit: drm/i915/icl: Enable DSI transcoders
Okay!

Commit: drm/i915/icl: Define DSI panel programming registers
Okay!

Commit: drm/i915/icl: Set max return packet size for DSI panel
Okay!

Commit: drm/i915/icl: Power on DSI panel
Okay!

Commit: drm/i915/icl: Wait for header/payload credits release
Okay!

Commit: drm/i915/icl: Ensure all cmd/data disptached to panel
Okay!

Commit: drm/i915/icl: Turn ON panel backlight
Okay!

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

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

* ✗ Fi.CI.BAT: failure for drm/i915/icl: dsi enabling
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (24 preceding siblings ...)
  2018-10-15 14:51 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2018-10-15 15:09 ` Patchwork
  2018-10-16 13:36 ` [PATCH v7 00/23] " Jani Nikula
                   ` (6 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-15 15:09 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling
URL   : https://patchwork.freedesktop.org/series/51011/
State : failure

== Summary ==

= CI Bug Log - changes from CI_DRM_4981 -> Patchwork_10459 =

== Summary - FAILURE ==

  Serious unknown changes coming with Patchwork_10459 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_10459, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51011/revisions/1/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in Patchwork_10459:

  === IGT changes ===

    ==== Possible regressions ====

    igt@kms_busy@basic-flip-a:
      fi-icl-u2:          PASS -> DMESG-WARN

    
== Known issues ==

  Here are the changes found in Patchwork_10459 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@kms_flip@basic-flip-vs-dpms:
      fi-skl-6700hq:      PASS -> DMESG-WARN (fdo#105998)

    igt@kms_pipe_crc_basic@hang-read-crc-pipe-a:
      fi-ilk-650:         PASS -> DMESG-WARN (fdo#106387) +1

    
    ==== Possible fixes ====

    igt@gem_exec_suspend@basic-s3:
      fi-icl-u:           INCOMPLETE (fdo#107713) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-blb-e6850:       INCOMPLETE (fdo#107718) -> PASS

    igt@pm_rpm@module-reload:
      {fi-apl-guc}:       DMESG-WARN (fdo#106685) -> PASS
      fi-skl-6600u:       INCOMPLETE (fdo#107807) -> PASS

    
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
  fdo#106387 https://bugs.freedesktop.org/show_bug.cgi?id=106387
  fdo#106685 https://bugs.freedesktop.org/show_bug.cgi?id=106685
  fdo#107713 https://bugs.freedesktop.org/show_bug.cgi?id=107713
  fdo#107718 https://bugs.freedesktop.org/show_bug.cgi?id=107718
  fdo#107807 https://bugs.freedesktop.org/show_bug.cgi?id=107807


== Participating hosts (54 -> 48) ==

  Missing    (6): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-snb-2520m fi-ctg-p8600 


== Build changes ==

    * Linux: CI_DRM_4981 -> Patchwork_10459

  CI_DRM_4981: 79887268bfe4128788d7cfcf38b62308346fd7f1 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4677: 68ff28a022dbaa26a20c8a3c0212011a006614b0 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10459: 40cd071d495aebb20871cb992c8b7163d6bd89f8 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

40cd071d495a drm/i915/icl: Turn ON panel backlight
f24121c2b8aa drm/i915/icl: Ensure all cmd/data disptached to panel
2ded53515fac drm/i915/icl: Wait for header/payload credits release
b4f147d6e59a drm/i915/icl: Power on DSI panel
8fbeffd78efd drm/i915/icl: Set max return packet size for DSI panel
b4e25fc83b04 drm/i915/icl: Define DSI panel programming registers
45434712c8ed drm/i915/icl: Enable DSI transcoders
2798285cb709 drm/i915/icl: Define TRANS_CONF register for DSI
f40776f438c5 drm/i915/icl: Configure DSI transcoder timings
16b3a933fd57 drm/i915/icl: Define DSI transcoder timing registers
c4b1dbebffe2 drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
fa60d3c6232b drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
8fedd977c309 drm/i915/icl: Configure DSI transcoders
5dcfc9bcf556 drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
f214bf74072b drm/i915/icl: Add macros for MMIO of DSI transcoder registers
0e2b629b050f drm/i915/icl: Get DSI transcoder for a given port
51bb6f5afbd6 drm/i915/icl: Program TA_TIMING_PARAM registers
1766764bfdc9 drm/i915/icl: Program DSI clock and data lane timing params
f5d8752673e3 drm/i915/icl: Make common DSI functions available
f747b1606322 drm/i915/dsi: abstract intel_dsi_tlpx_ns()
b14852354e52 drm/i915/dsi: abstract dphy parameter init
1a879a6d5120 drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
b12abf6e31c4 drm/i915: make encoder enable and disable hooks optional

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10459/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional
  2018-10-15 14:27 ` [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional Jani Nikula
@ 2018-10-16  6:36   ` Madhav Chauhan
  2018-10-16 12:41   ` [PATCH] " Jani Nikula
  1 sibling, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-16  6:36 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> Encoders are not alike, make enable and disable hooks optional like
> other hooks. Utilize this in DSI code, and remove the silly nop hook.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/intel_display.c |  6 ++++--
>   drivers/gpu/drm/i915/vlv_dsi.c       | 16 ++++------------
>   2 files changed, 8 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 41abd03ce6a6..32ea71bac663 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -5461,7 +5461,8 @@ static void intel_encoders_enable(struct drm_crtc *crtc,
>   		if (conn_state->crtc != crtc)
>   			continue;
>   
> -		encoder->enable(encoder, crtc_state, conn_state);
> +		if (encoder->enable)
> +			encoder->enable(encoder, crtc_state, conn_state);
>   		intel_opregion_notify_encoder(encoder, true);
>   	}
>   }
> @@ -5482,7 +5483,8 @@ static void intel_encoders_disable(struct drm_crtc *crtc,
>   			continue;
>   
>   		intel_opregion_notify_encoder(encoder, false);
> -		encoder->disable(encoder, old_crtc_state, old_conn_state);
> +		if (encoder->disable)
> +			encoder->disable(encoder, old_crtc_state, old_conn_state);
>   	}

encoder->disable() gets called directly inside intel_sanitize_encoder() 
without

intel_encoders_disable().I think, we need to put the check there as well.


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

Regards,
Madhav

>   }
>   
> diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
> index bafeb2a19b90..dbca30460a6b 100644
> --- a/drivers/gpu/drm/i915/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/vlv_dsi.c
> @@ -794,6 +794,10 @@ static void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
>    * - wait t4                                           - wait t4
>    */
>   
> +/*
> + * DSI port enable has to be done before pipe and plane enable, so we do it in
> + * the pre_enable hook instead of the enable hook.
> + */
>   static void intel_dsi_pre_enable(struct intel_encoder *encoder,
>   				 const struct intel_crtc_state *pipe_config,
>   				 const struct drm_connector_state *conn_state)
> @@ -896,17 +900,6 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder,
>   }
>   
>   /*
> - * DSI port enable has to be done before pipe and plane enable, so we do it in
> - * the pre_enable hook.
> - */
> -static void intel_dsi_enable_nop(struct intel_encoder *encoder,
> -				 const struct intel_crtc_state *pipe_config,
> -				 const struct drm_connector_state *conn_state)
> -{
> -	DRM_DEBUG_KMS("\n");
> -}
> -
> -/*
>    * DSI port disable has to be done after pipe and plane disable, so we do it in
>    * the post_disable hook.
>    */
> @@ -1764,7 +1757,6 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
>   
>   	intel_encoder->compute_config = intel_dsi_compute_config;
>   	intel_encoder->pre_enable = intel_dsi_pre_enable;
> -	intel_encoder->enable = intel_dsi_enable_nop;
>   	intel_encoder->disable = intel_dsi_disable;
>   	intel_encoder->post_disable = intel_dsi_post_disable;
>   	intel_encoder->get_hw_state = intel_dsi_get_hw_state;

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

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

* Re: [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
  2018-10-15 14:27 ` [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init() Jani Nikula
@ 2018-10-16  7:53   ` Madhav Chauhan
  2018-10-16 12:44     ` Jani Nikula
  0 siblings, 1 reply; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-16  7:53 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> Abstract bitrate calculation to a newly resurrected intel_dsi.c file
> that will contain common code for VLV and ICL DSI.
>
> No functional changes.
>
> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/Makefile        |  1 +
>   drivers/gpu/drm/i915/intel_dsi.c     | 17 +++++++++++++++++
>   drivers/gpu/drm/i915/intel_dsi.h     |  3 +++
>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 28 ++++++++++------------------
>   4 files changed, 31 insertions(+), 18 deletions(-)
>   create mode 100644 drivers/gpu/drm/i915/intel_dsi.c
>
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index 48cae0eae3f9..22cbf9c3bb0c 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -143,6 +143,7 @@ i915-y += dvo_ch7017.o \
>   	  intel_dp_link_training.o \
>   	  intel_dp_mst.o \
>   	  intel_dp.o \
> +	  intel_dsi.o \
>   	  intel_dsi_dcs_backlight.o \
>   	  intel_dsi_vbt.o \
>   	  intel_dvo.o \
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> new file mode 100644
> index 000000000000..4daa1da94047
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -0,0 +1,17 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2018 Intel Corporation
> + */
> +
> +#include <drm/drm_mipi_dsi.h>
> +#include "intel_dsi.h"
> +
> +int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
> +{
> +	int bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
> +
> +	if (WARN_ON(bpp < 0))
> +		bpp = 16;

Shouldn't we keep the default bpp to 24 here as in most of the cases bpp 
is 24 for DSI or why 16??

Regards,
Madhav

> +
> +	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
> +}
> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
> index ad7c1cb32983..68f14d8f1e18 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.h
> +++ b/drivers/gpu/drm/i915/intel_dsi.h
> @@ -129,6 +129,9 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>   	return container_of(encoder, struct intel_dsi, base.base);
>   }
>   
> +/* intel_dsi.c */
> +int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
> +
>   /* vlv_dsi.c */
>   void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
>   enum mipi_dsi_pixel_format pixel_format_from_register_bits(u32 fmt);
> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> index ac83d6b89ae0..6c4cc92f5947 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> @@ -506,14 +506,12 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
>   	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
>   	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
> -	u32 bpp;
> -	u32 tlpx_ns, extra_byte_count, bitrate, tlpx_ui;
> +	u32 tlpx_ns, extra_byte_count, tlpx_ui;
>   	u32 ui_num, ui_den;
>   	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
>   	u32 ths_prepare_ns, tclk_trail_ns;
>   	u32 tclk_prepare_clkzero, ths_prepare_hszero;
>   	u32 lp_to_hs_switch, hs_to_lp_switch;
> -	u32 pclk, computed_ddr;
>   	u32 mul;
>   	u16 burst_mode_ratio;
>   	enum port port;
> @@ -526,7 +524,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   	intel_dsi->pixel_format =
>   			pixel_format_from_register_bits(
>   				mipi_config->videomode_color_format << 7);
> -	bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
>   
>   	intel_dsi->dual_link = mipi_config->dual_link;
>   	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
> @@ -541,19 +538,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   	intel_dsi->video_frmt_cfg_bits =
>   		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
>   
> -	pclk = mode->clock;
> +	/* Starting point, adjusted depending on dual link and burst mode */
> +	intel_dsi->pclk = mode->clock;
>   
>   	/* In dual link mode each port needs half of pixel clock */
>   	if (intel_dsi->dual_link) {
> -		pclk = pclk / 2;
> +		intel_dsi->pclk /= 2;
>   
>   		/* we can enable pixel_overlap if needed by panel. In this
>   		 * case we need to increase the pixelclock for extra pixels
>   		 */
>   		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
> -			pclk += DIV_ROUND_UP(mode->vtotal *
> -						intel_dsi->pixel_overlap *
> -						60, 1000);
> +			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
>   		}
>   	}
>   
> @@ -563,19 +559,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   	 */
>   	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
>   		if (mipi_config->target_burst_mode_freq) {
> -			computed_ddr = (pclk * bpp) / intel_dsi->lane_count;
> +			u32 bitrate = intel_dsi_bitrate(intel_dsi);
>   
> -			if (mipi_config->target_burst_mode_freq <
> -								computed_ddr) {
> +			if (mipi_config->target_burst_mode_freq < bitrate) {
>   				DRM_ERROR("Burst mode freq is less than computed\n");
>   				return false;
>   			}
>   
>   			burst_mode_ratio = DIV_ROUND_UP(
>   				mipi_config->target_burst_mode_freq * 100,
> -				computed_ddr);
> +				bitrate);
>   
> -			pclk = DIV_ROUND_UP(pclk * burst_mode_ratio, 100);
> +			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
>   		} else {
>   			DRM_ERROR("Burst mode target is not set\n");
>   			return false;
> @@ -584,9 +579,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   		burst_mode_ratio = 100;
>   
>   	intel_dsi->burst_mode_ratio = burst_mode_ratio;
> -	intel_dsi->pclk = pclk;
> -
> -	bitrate = (pclk * bpp) / intel_dsi->lane_count;
>   
>   	switch (intel_dsi->escape_clk_div) {
>   	case 0:
> @@ -620,7 +612,7 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   
>   	/* in Kbps */
>   	ui_num = NS_KHZ_RATIO;
> -	ui_den = bitrate;
> +	ui_den = intel_dsi_bitrate(intel_dsi);
>   
>   	tclk_prepare_clkzero = mipi_config->tclk_prepare_clkzero;
>   	ths_prepare_hszero = mipi_config->ths_prepare_hszero;

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

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

* Re: [PATCH v7 03/23] drm/i915/dsi: abstract dphy parameter init
  2018-10-15 14:27 ` [PATCH v7 03/23] drm/i915/dsi: abstract dphy parameter init Jani Nikula
@ 2018-10-16  8:29   ` Madhav Chauhan
  2018-10-18 12:20     ` Jani Nikula
  0 siblings, 1 reply; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-16  8:29 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> intel_dsi_vbt_init() has grown too unwieldy, and it's about to be
> modified due to ICL DSI. Abstract out the VLV specific dphy param
> init. No functional changes. Intentionally no stylistic changes during
> code movement.
>
> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Looks ok to me,
Reviewed-by: Madhav Chauhan <madhav.chauhan@intel.com>

Regards,
Madhav

> ---
>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 147 +++++++++++++++++++----------------
>   1 file changed, 78 insertions(+), 69 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> index 6c4cc92f5947..fdeba8386d53 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> @@ -499,13 +499,11 @@ int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
>   	return 1;
>   }
>   
> -bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
> +static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
>   {
>   	struct drm_device *dev = intel_dsi->base.base.dev;
>   	struct drm_i915_private *dev_priv = to_i915(dev);
>   	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
> -	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
> -	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
>   	u32 tlpx_ns, extra_byte_count, tlpx_ui;
>   	u32 ui_num, ui_den;
>   	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
> @@ -513,72 +511,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   	u32 tclk_prepare_clkzero, ths_prepare_hszero;
>   	u32 lp_to_hs_switch, hs_to_lp_switch;
>   	u32 mul;
> -	u16 burst_mode_ratio;
> -	enum port port;
> -
> -	DRM_DEBUG_KMS("\n");
> -
> -	intel_dsi->eotp_pkt = mipi_config->eot_pkt_disabled ? 0 : 1;
> -	intel_dsi->clock_stop = mipi_config->enable_clk_stop ? 1 : 0;
> -	intel_dsi->lane_count = mipi_config->lane_cnt + 1;
> -	intel_dsi->pixel_format =
> -			pixel_format_from_register_bits(
> -				mipi_config->videomode_color_format << 7);
> -
> -	intel_dsi->dual_link = mipi_config->dual_link;
> -	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
> -	intel_dsi->operation_mode = mipi_config->is_cmd_mode;
> -	intel_dsi->video_mode_format = mipi_config->video_transfer_mode;
> -	intel_dsi->escape_clk_div = mipi_config->byte_clk_sel;
> -	intel_dsi->lp_rx_timeout = mipi_config->lp_rx_timeout;
> -	intel_dsi->turn_arnd_val = mipi_config->turn_around_timeout;
> -	intel_dsi->rst_timer_val = mipi_config->device_reset_timer;
> -	intel_dsi->init_count = mipi_config->master_init_timer;
> -	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
> -	intel_dsi->video_frmt_cfg_bits =
> -		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
> -
> -	/* Starting point, adjusted depending on dual link and burst mode */
> -	intel_dsi->pclk = mode->clock;
> -
> -	/* In dual link mode each port needs half of pixel clock */
> -	if (intel_dsi->dual_link) {
> -		intel_dsi->pclk /= 2;
> -
> -		/* we can enable pixel_overlap if needed by panel. In this
> -		 * case we need to increase the pixelclock for extra pixels
> -		 */
> -		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
> -			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
> -		}
> -	}
> -
> -	/* Burst Mode Ratio
> -	 * Target ddr frequency from VBT / non burst ddr freq
> -	 * multiply by 100 to preserve remainder
> -	 */
> -	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
> -		if (mipi_config->target_burst_mode_freq) {
> -			u32 bitrate = intel_dsi_bitrate(intel_dsi);
> -
> -			if (mipi_config->target_burst_mode_freq < bitrate) {
> -				DRM_ERROR("Burst mode freq is less than computed\n");
> -				return false;
> -			}
> -
> -			burst_mode_ratio = DIV_ROUND_UP(
> -				mipi_config->target_burst_mode_freq * 100,
> -				bitrate);
> -
> -			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
> -		} else {
> -			DRM_ERROR("Burst mode target is not set\n");
> -			return false;
> -		}
> -	} else
> -		burst_mode_ratio = 100;
> -
> -	intel_dsi->burst_mode_ratio = burst_mode_ratio;
>   
>   	switch (intel_dsi->escape_clk_div) {
>   	case 0:
> @@ -738,6 +670,83 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   		DIV_ROUND_UP(2 * tlpx_ui + trail_cnt * 2 + 8,
>   			8);
>   	intel_dsi->clk_hs_to_lp_count += extra_byte_count;
> +}
> +
> +bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
> +{
> +	struct drm_device *dev = intel_dsi->base.base.dev;
> +	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
> +	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
> +	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
> +	u16 burst_mode_ratio;
> +	enum port port;
> +
> +	DRM_DEBUG_KMS("\n");
> +
> +	intel_dsi->eotp_pkt = mipi_config->eot_pkt_disabled ? 0 : 1;
> +	intel_dsi->clock_stop = mipi_config->enable_clk_stop ? 1 : 0;
> +	intel_dsi->lane_count = mipi_config->lane_cnt + 1;
> +	intel_dsi->pixel_format =
> +			pixel_format_from_register_bits(
> +				mipi_config->videomode_color_format << 7);
> +
> +	intel_dsi->dual_link = mipi_config->dual_link;
> +	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
> +	intel_dsi->operation_mode = mipi_config->is_cmd_mode;
> +	intel_dsi->video_mode_format = mipi_config->video_transfer_mode;
> +	intel_dsi->escape_clk_div = mipi_config->byte_clk_sel;
> +	intel_dsi->lp_rx_timeout = mipi_config->lp_rx_timeout;
> +	intel_dsi->turn_arnd_val = mipi_config->turn_around_timeout;
> +	intel_dsi->rst_timer_val = mipi_config->device_reset_timer;
> +	intel_dsi->init_count = mipi_config->master_init_timer;
> +	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
> +	intel_dsi->video_frmt_cfg_bits =
> +		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
> +
> +	/* Starting point, adjusted depending on dual link and burst mode */
> +	intel_dsi->pclk = mode->clock;
> +
> +	/* In dual link mode each port needs half of pixel clock */
> +	if (intel_dsi->dual_link) {
> +		intel_dsi->pclk /= 2;
> +
> +		/* we can enable pixel_overlap if needed by panel. In this
> +		 * case we need to increase the pixelclock for extra pixels
> +		 */
> +		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
> +			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
> +		}
> +	}
> +
> +	/* Burst Mode Ratio
> +	 * Target ddr frequency from VBT / non burst ddr freq
> +	 * multiply by 100 to preserve remainder
> +	 */
> +	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
> +		if (mipi_config->target_burst_mode_freq) {
> +			u32 bitrate = intel_dsi_bitrate(intel_dsi);
> +
> +			if (mipi_config->target_burst_mode_freq < bitrate) {
> +				DRM_ERROR("Burst mode freq is less than computed\n");
> +				return false;
> +			}
> +
> +			burst_mode_ratio = DIV_ROUND_UP(
> +				mipi_config->target_burst_mode_freq * 100,
> +				bitrate);
> +
> +			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
> +		} else {
> +			DRM_ERROR("Burst mode target is not set\n");
> +			return false;
> +		}
> +	} else
> +		burst_mode_ratio = 100;
> +
> +	intel_dsi->burst_mode_ratio = burst_mode_ratio;
> +
> +	vlv_dphy_param_init(intel_dsi);
>   
>   	DRM_DEBUG_KMS("Pclk %d\n", intel_dsi->pclk);
>   	DRM_DEBUG_KMS("Pixel overlap %d\n", intel_dsi->pixel_overlap);

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

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

* Re: [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns()
  2018-10-15 14:27 ` [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns() Jani Nikula
@ 2018-10-16  8:39   ` Madhav Chauhan
  2018-10-16 13:06     ` Jani Nikula
  0 siblings, 1 reply; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-16  8:39 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> Will be needed in the future. No functional changes.

Agree, will be needing this while setting up DSI protocol timeouts for ICL.

>
> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/intel_dsi.c     | 13 +++++++++++++
>   drivers/gpu/drm/i915/intel_dsi.h     |  1 +
>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 16 +---------------
>   3 files changed, 15 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> index 4daa1da94047..a32cc1f4b384 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -15,3 +15,16 @@ int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
>   
>   	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
>   }
> +
> +int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi)
> +{
> +	switch (intel_dsi->escape_clk_div) {
> +	default:
> +	case 0:
> +		return 50;
> +	case 1:
> +		return 100;
> +	case 2:
> +		return 200;
> +	}
> +}

Can we change the return of this function to unsigned int, there is no way
that this function can return < 0  as per current implementation??

Regards,
Madhav

> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
> index 68f14d8f1e18..0d911a4adfaa 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.h
> +++ b/drivers/gpu/drm/i915/intel_dsi.h
> @@ -131,6 +131,7 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>   
>   /* intel_dsi.c */
>   int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
> +int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
>   
>   /* vlv_dsi.c */
>   void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> index fdeba8386d53..b0d8548f0462 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> @@ -512,21 +512,7 @@ static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
>   	u32 lp_to_hs_switch, hs_to_lp_switch;
>   	u32 mul;
>   
> -	switch (intel_dsi->escape_clk_div) {
> -	case 0:
> -		tlpx_ns = 50;
> -		break;
> -	case 1:
> -		tlpx_ns = 100;
> -		break;
> -
> -	case 2:
> -		tlpx_ns = 200;
> -		break;
> -	default:
> -		tlpx_ns = 50;
> -		break;
> -	}
> +	tlpx_ns = intel_dsi_tlpx_ns(intel_dsi);
>   
>   	switch (intel_dsi->lane_count) {
>   	case 1:

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

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

* Re: [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available
  2018-10-15 14:27 ` [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available Jani Nikula
@ 2018-10-16  9:04   ` Madhav Chauhan
  2018-10-16 12:39     ` Jani Nikula
  0 siblings, 1 reply; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-16  9:04 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch moves couple of legacy DSI functions to header and common DSI
> files so that they can be re-used by Gen11 DSI. No functional change.
>
> v2 by Jani:
>   - Move intel_dsi_msleep() to intel_dsi_vbt.c

This will be used by icl dsi as well and and delay is directly passed
Shouldn't we have this inside intel_dsi.c??
Or
Because seq version from VBT is getting checked inside this function,
so that is taking the precedence??

Regards,
Madhav

> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/intel_dsi.h     | 11 +++++++++++
>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 11 +++++++++++
>   drivers/gpu/drm/i915/vlv_dsi.c       | 21 ---------------------
>   3 files changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
> index 0d911a4adfaa..d7c0c599b52d 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.h
> +++ b/drivers/gpu/drm/i915/intel_dsi.h
> @@ -129,6 +129,16 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>   	return container_of(encoder, struct intel_dsi, base.base);
>   }
>   
> +static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
> +{
> +	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
> +}
> +
> +static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
> +{
> +	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
> +}
> +
>   /* intel_dsi.c */
>   int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
>   int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
> @@ -162,5 +172,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id);
>   int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi);
>   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);
>   
>   #endif /* _INTEL_DSI_H */
> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> index b0d8548f0462..5e16b4c5f531 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> @@ -481,6 +481,17 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
>   	}
>   }
>   
> +void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
> +
> +	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
> +	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
> +		return;
> +
> +	msleep(msec);
> +}
> +
>   int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
>   {
>   	struct intel_connector *connector = intel_dsi->attached_connector;
> diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
> index dbca30460a6b..ee0cd5d0bf91 100644
> --- a/drivers/gpu/drm/i915/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/vlv_dsi.c
> @@ -290,16 +290,6 @@ static void band_gap_reset(struct drm_i915_private *dev_priv)
>   	mutex_unlock(&dev_priv->sb_lock);
>   }
>   
> -static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
> -{
> -	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
> -}
> -
> -static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
> -{
> -	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
> -}
> -
>   static bool intel_dsi_compute_config(struct intel_encoder *encoder,
>   				     struct intel_crtc_state *pipe_config,
>   				     struct drm_connector_state *conn_state)
> @@ -746,17 +736,6 @@ static void intel_dsi_prepare(struct intel_encoder *intel_encoder,
>   			      const struct intel_crtc_state *pipe_config);
>   static void intel_dsi_unprepare(struct intel_encoder *encoder);
>   
> -static void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
> -{
> -	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
> -
> -	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
> -	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
> -		return;
> -
> -	msleep(msec);
> -}
> -
>   /*
>    * Panel enable/disable sequences from the VBT spec.
>    *

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

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

* Re: [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available
  2018-10-16  9:04   ` Madhav Chauhan
@ 2018-10-16 12:39     ` Jani Nikula
  2018-10-16 12:56       ` Madhav Chauhan
  0 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-16 12:39 UTC (permalink / raw)
  To: Madhav Chauhan, intel-gfx

On Tue, 16 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>> From: Madhav Chauhan <madhav.chauhan@intel.com>
>>
>> This patch moves couple of legacy DSI functions to header and common DSI
>> files so that they can be re-used by Gen11 DSI. No functional change.
>>
>> v2 by Jani:
>>   - Move intel_dsi_msleep() to intel_dsi_vbt.c
>
> This will be used by icl dsi as well and and delay is directly passed
> Shouldn't we have this inside intel_dsi.c??
> Or
> Because seq version from VBT is getting checked inside this function,
> so that is taking the precedence??

I had it in intel_dsi.c at first, but decided on intel_dsi_vbt.c instead
because it does have a dependency on the VBT. And I presume on ICL this
will be a NOP due to v3+ sequence.

BR,
Jani.




>
> Regards,
> Madhav
>
>> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>   drivers/gpu/drm/i915/intel_dsi.h     | 11 +++++++++++
>>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 11 +++++++++++
>>   drivers/gpu/drm/i915/vlv_dsi.c       | 21 ---------------------
>>   3 files changed, 22 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>> index 0d911a4adfaa..d7c0c599b52d 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>> @@ -129,6 +129,16 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>>   	return container_of(encoder, struct intel_dsi, base.base);
>>   }
>>   
>> +static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
>> +{
>> +	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
>> +}
>> +
>> +static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
>> +{
>> +	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
>> +}
>> +
>>   /* intel_dsi.c */
>>   int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
>>   int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
>> @@ -162,5 +172,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id);
>>   int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi);
>>   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);
>>   
>>   #endif /* _INTEL_DSI_H */
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> index b0d8548f0462..5e16b4c5f531 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> @@ -481,6 +481,17 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
>>   	}
>>   }
>>   
>> +void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
>> +{
>> +	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
>> +
>> +	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
>> +	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
>> +		return;
>> +
>> +	msleep(msec);
>> +}
>> +
>>   int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
>>   {
>>   	struct intel_connector *connector = intel_dsi->attached_connector;
>> diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
>> index dbca30460a6b..ee0cd5d0bf91 100644
>> --- a/drivers/gpu/drm/i915/vlv_dsi.c
>> +++ b/drivers/gpu/drm/i915/vlv_dsi.c
>> @@ -290,16 +290,6 @@ static void band_gap_reset(struct drm_i915_private *dev_priv)
>>   	mutex_unlock(&dev_priv->sb_lock);
>>   }
>>   
>> -static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
>> -{
>> -	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
>> -}
>> -
>> -static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
>> -{
>> -	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
>> -}
>> -
>>   static bool intel_dsi_compute_config(struct intel_encoder *encoder,
>>   				     struct intel_crtc_state *pipe_config,
>>   				     struct drm_connector_state *conn_state)
>> @@ -746,17 +736,6 @@ static void intel_dsi_prepare(struct intel_encoder *intel_encoder,
>>   			      const struct intel_crtc_state *pipe_config);
>>   static void intel_dsi_unprepare(struct intel_encoder *encoder);
>>   
>> -static void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
>> -{
>> -	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
>> -
>> -	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
>> -	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
>> -		return;
>> -
>> -	msleep(msec);
>> -}
>> -
>>   /*
>>    * Panel enable/disable sequences from the VBT spec.
>>    *
>

-- 
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] 59+ messages in thread

* [PATCH] drm/i915: make encoder enable and disable hooks optional
  2018-10-15 14:27 ` [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional Jani Nikula
  2018-10-16  6:36   ` Madhav Chauhan
@ 2018-10-16 12:41   ` Jani Nikula
  1 sibling, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-16 12:41 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

Encoders are not alike, make enable and disable hooks optional like
other hooks. Utilize this in DSI code, and remove the silly nop hook.

v2: Add the check also to intel_sanitize_encoder() (Madhav)

Reviewed-by: Madhav Chauhan <madhav.chauhan@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c |  9 ++++++---
 drivers/gpu/drm/i915/vlv_dsi.c       | 16 ++++------------
 2 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 41abd03ce6a6..de6b4e734292 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5461,7 +5461,8 @@ static void intel_encoders_enable(struct drm_crtc *crtc,
 		if (conn_state->crtc != crtc)
 			continue;
 
-		encoder->enable(encoder, crtc_state, conn_state);
+		if (encoder->enable)
+			encoder->enable(encoder, crtc_state, conn_state);
 		intel_opregion_notify_encoder(encoder, true);
 	}
 }
@@ -5482,7 +5483,8 @@ static void intel_encoders_disable(struct drm_crtc *crtc,
 			continue;
 
 		intel_opregion_notify_encoder(encoder, false);
-		encoder->disable(encoder, old_crtc_state, old_conn_state);
+		if (encoder->disable)
+			encoder->disable(encoder, old_crtc_state, old_conn_state);
 	}
 }
 
@@ -15442,7 +15444,8 @@ static void intel_sanitize_encoder(struct intel_encoder *encoder)
 			DRM_DEBUG_KMS("[ENCODER:%d:%s] manually disabled\n",
 				      encoder->base.base.id,
 				      encoder->base.name);
-			encoder->disable(encoder, to_intel_crtc_state(crtc_state), connector->base.state);
+			if (encoder->disable)
+				encoder->disable(encoder, to_intel_crtc_state(crtc_state), connector->base.state);
 			if (encoder->post_disable)
 				encoder->post_disable(encoder, to_intel_crtc_state(crtc_state), connector->base.state);
 		}
diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
index bafeb2a19b90..dbca30460a6b 100644
--- a/drivers/gpu/drm/i915/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/vlv_dsi.c
@@ -794,6 +794,10 @@ static void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
  * - wait t4                                           - wait t4
  */
 
+/*
+ * DSI port enable has to be done before pipe and plane enable, so we do it in
+ * the pre_enable hook instead of the enable hook.
+ */
 static void intel_dsi_pre_enable(struct intel_encoder *encoder,
 				 const struct intel_crtc_state *pipe_config,
 				 const struct drm_connector_state *conn_state)
@@ -896,17 +900,6 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder,
 }
 
 /*
- * DSI port enable has to be done before pipe and plane enable, so we do it in
- * the pre_enable hook.
- */
-static void intel_dsi_enable_nop(struct intel_encoder *encoder,
-				 const struct intel_crtc_state *pipe_config,
-				 const struct drm_connector_state *conn_state)
-{
-	DRM_DEBUG_KMS("\n");
-}
-
-/*
  * DSI port disable has to be done after pipe and plane disable, so we do it in
  * the post_disable hook.
  */
@@ -1764,7 +1757,6 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
 
 	intel_encoder->compute_config = intel_dsi_compute_config;
 	intel_encoder->pre_enable = intel_dsi_pre_enable;
-	intel_encoder->enable = intel_dsi_enable_nop;
 	intel_encoder->disable = intel_dsi_disable;
 	intel_encoder->post_disable = intel_dsi_post_disable;
 	intel_encoder->get_hw_state = intel_dsi_get_hw_state;
-- 
2.11.0

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

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

* Re: [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
  2018-10-16  7:53   ` Madhav Chauhan
@ 2018-10-16 12:44     ` Jani Nikula
  2018-10-16 12:53       ` Madhav Chauhan
  0 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-16 12:44 UTC (permalink / raw)
  To: Madhav Chauhan, intel-gfx

On Tue, 16 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>> Abstract bitrate calculation to a newly resurrected intel_dsi.c file
>> that will contain common code for VLV and ICL DSI.
>>
>> No functional changes.
>>
>> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
>> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>   drivers/gpu/drm/i915/Makefile        |  1 +
>>   drivers/gpu/drm/i915/intel_dsi.c     | 17 +++++++++++++++++
>>   drivers/gpu/drm/i915/intel_dsi.h     |  3 +++
>>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 28 ++++++++++------------------
>>   4 files changed, 31 insertions(+), 18 deletions(-)
>>   create mode 100644 drivers/gpu/drm/i915/intel_dsi.c
>>
>> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
>> index 48cae0eae3f9..22cbf9c3bb0c 100644
>> --- a/drivers/gpu/drm/i915/Makefile
>> +++ b/drivers/gpu/drm/i915/Makefile
>> @@ -143,6 +143,7 @@ i915-y += dvo_ch7017.o \
>>   	  intel_dp_link_training.o \
>>   	  intel_dp_mst.o \
>>   	  intel_dp.o \
>> +	  intel_dsi.o \
>>   	  intel_dsi_dcs_backlight.o \
>>   	  intel_dsi_vbt.o \
>>   	  intel_dvo.o \
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
>> new file mode 100644
>> index 000000000000..4daa1da94047
>> --- /dev/null
>> +++ b/drivers/gpu/drm/i915/intel_dsi.c
>> @@ -0,0 +1,17 @@
>> +// SPDX-License-Identifier: MIT
>> +/*
>> + * Copyright © 2018 Intel Corporation
>> + */
>> +
>> +#include <drm/drm_mipi_dsi.h>
>> +#include "intel_dsi.h"
>> +
>> +int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
>> +{
>> +	int bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
>> +
>> +	if (WARN_ON(bpp < 0))
>> +		bpp = 16;
>
> Shouldn't we keep the default bpp to 24 here as in most of the cases bpp 
> is 24 for DSI or why 16??

*shrug*

Not sure it matters all that much really. We set the pixel format in
intel_dsi_vbt.c, and if that gives us something bogus, not much of a
chance any of it will work. More than anything I just wanted to avoid a
negative return from this function.

BR,
Jani.

>
> Regards,
> Madhav
>
>> +
>> +	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
>> +}
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>> index ad7c1cb32983..68f14d8f1e18 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>> @@ -129,6 +129,9 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>>   	return container_of(encoder, struct intel_dsi, base.base);
>>   }
>>   
>> +/* intel_dsi.c */
>> +int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
>> +
>>   /* vlv_dsi.c */
>>   void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
>>   enum mipi_dsi_pixel_format pixel_format_from_register_bits(u32 fmt);
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> index ac83d6b89ae0..6c4cc92f5947 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> @@ -506,14 +506,12 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
>>   	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
>>   	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
>> -	u32 bpp;
>> -	u32 tlpx_ns, extra_byte_count, bitrate, tlpx_ui;
>> +	u32 tlpx_ns, extra_byte_count, tlpx_ui;
>>   	u32 ui_num, ui_den;
>>   	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
>>   	u32 ths_prepare_ns, tclk_trail_ns;
>>   	u32 tclk_prepare_clkzero, ths_prepare_hszero;
>>   	u32 lp_to_hs_switch, hs_to_lp_switch;
>> -	u32 pclk, computed_ddr;
>>   	u32 mul;
>>   	u16 burst_mode_ratio;
>>   	enum port port;
>> @@ -526,7 +524,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   	intel_dsi->pixel_format =
>>   			pixel_format_from_register_bits(
>>   				mipi_config->videomode_color_format << 7);
>> -	bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
>>   
>>   	intel_dsi->dual_link = mipi_config->dual_link;
>>   	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
>> @@ -541,19 +538,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   	intel_dsi->video_frmt_cfg_bits =
>>   		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
>>   
>> -	pclk = mode->clock;
>> +	/* Starting point, adjusted depending on dual link and burst mode */
>> +	intel_dsi->pclk = mode->clock;
>>   
>>   	/* In dual link mode each port needs half of pixel clock */
>>   	if (intel_dsi->dual_link) {
>> -		pclk = pclk / 2;
>> +		intel_dsi->pclk /= 2;
>>   
>>   		/* we can enable pixel_overlap if needed by panel. In this
>>   		 * case we need to increase the pixelclock for extra pixels
>>   		 */
>>   		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
>> -			pclk += DIV_ROUND_UP(mode->vtotal *
>> -						intel_dsi->pixel_overlap *
>> -						60, 1000);
>> +			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
>>   		}
>>   	}
>>   
>> @@ -563,19 +559,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   	 */
>>   	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
>>   		if (mipi_config->target_burst_mode_freq) {
>> -			computed_ddr = (pclk * bpp) / intel_dsi->lane_count;
>> +			u32 bitrate = intel_dsi_bitrate(intel_dsi);
>>   
>> -			if (mipi_config->target_burst_mode_freq <
>> -								computed_ddr) {
>> +			if (mipi_config->target_burst_mode_freq < bitrate) {
>>   				DRM_ERROR("Burst mode freq is less than computed\n");
>>   				return false;
>>   			}
>>   
>>   			burst_mode_ratio = DIV_ROUND_UP(
>>   				mipi_config->target_burst_mode_freq * 100,
>> -				computed_ddr);
>> +				bitrate);
>>   
>> -			pclk = DIV_ROUND_UP(pclk * burst_mode_ratio, 100);
>> +			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
>>   		} else {
>>   			DRM_ERROR("Burst mode target is not set\n");
>>   			return false;
>> @@ -584,9 +579,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   		burst_mode_ratio = 100;
>>   
>>   	intel_dsi->burst_mode_ratio = burst_mode_ratio;
>> -	intel_dsi->pclk = pclk;
>> -
>> -	bitrate = (pclk * bpp) / intel_dsi->lane_count;
>>   
>>   	switch (intel_dsi->escape_clk_div) {
>>   	case 0:
>> @@ -620,7 +612,7 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   
>>   	/* in Kbps */
>>   	ui_num = NS_KHZ_RATIO;
>> -	ui_den = bitrate;
>> +	ui_den = intel_dsi_bitrate(intel_dsi);
>>   
>>   	tclk_prepare_clkzero = mipi_config->tclk_prepare_clkzero;
>>   	ths_prepare_hszero = mipi_config->ths_prepare_hszero;
>

-- 
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] 59+ messages in thread

* Re: [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
  2018-10-16 12:44     ` Jani Nikula
@ 2018-10-16 12:53       ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-16 12:53 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/16/2018 6:14 PM, Jani Nikula wrote:
> On Tue, 16 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
>> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>>> Abstract bitrate calculation to a newly resurrected intel_dsi.c file
>>> that will contain common code for VLV and ICL DSI.
>>>
>>> No functional changes.
>>>
>>> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
>>> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>> ---
>>>    drivers/gpu/drm/i915/Makefile        |  1 +
>>>    drivers/gpu/drm/i915/intel_dsi.c     | 17 +++++++++++++++++
>>>    drivers/gpu/drm/i915/intel_dsi.h     |  3 +++
>>>    drivers/gpu/drm/i915/intel_dsi_vbt.c | 28 ++++++++++------------------
>>>    4 files changed, 31 insertions(+), 18 deletions(-)
>>>    create mode 100644 drivers/gpu/drm/i915/intel_dsi.c
>>>
>>> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
>>> index 48cae0eae3f9..22cbf9c3bb0c 100644
>>> --- a/drivers/gpu/drm/i915/Makefile
>>> +++ b/drivers/gpu/drm/i915/Makefile
>>> @@ -143,6 +143,7 @@ i915-y += dvo_ch7017.o \
>>>    	  intel_dp_link_training.o \
>>>    	  intel_dp_mst.o \
>>>    	  intel_dp.o \
>>> +	  intel_dsi.o \
>>>    	  intel_dsi_dcs_backlight.o \
>>>    	  intel_dsi_vbt.o \
>>>    	  intel_dvo.o \
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
>>> new file mode 100644
>>> index 000000000000..4daa1da94047
>>> --- /dev/null
>>> +++ b/drivers/gpu/drm/i915/intel_dsi.c
>>> @@ -0,0 +1,17 @@
>>> +// SPDX-License-Identifier: MIT
>>> +/*
>>> + * Copyright © 2018 Intel Corporation
>>> + */
>>> +
>>> +#include <drm/drm_mipi_dsi.h>
>>> +#include "intel_dsi.h"
>>> +
>>> +int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
>>> +{
>>> +	int bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
>>> +
>>> +	if (WARN_ON(bpp < 0))
>>> +		bpp = 16;
>> Shouldn't we keep the default bpp to 24 here as in most of the cases bpp
>> is 24 for DSI or why 16??
> *shrug*
>
> Not sure it matters all that much really. We set the pixel format in
> intel_dsi_vbt.c, and if that gives us something bogus, not much of a
> chance any of it will work. More than anything I just wanted to avoid a
> negative return from this function.

Agree,
Reviewed-by: Madhav Chauhan <madhav.chauhan@intel.com>

Regards,
Madhav

>
> BR,
> Jani.
>
>> Regards,
>> Madhav
>>
>>> +
>>> +	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
>>> +}
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>>> index ad7c1cb32983..68f14d8f1e18 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>>> @@ -129,6 +129,9 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>>>    	return container_of(encoder, struct intel_dsi, base.base);
>>>    }
>>>    
>>> +/* intel_dsi.c */
>>> +int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
>>> +
>>>    /* vlv_dsi.c */
>>>    void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
>>>    enum mipi_dsi_pixel_format pixel_format_from_register_bits(u32 fmt);
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> index ac83d6b89ae0..6c4cc92f5947 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> @@ -506,14 +506,12 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>>    	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
>>>    	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
>>>    	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
>>> -	u32 bpp;
>>> -	u32 tlpx_ns, extra_byte_count, bitrate, tlpx_ui;
>>> +	u32 tlpx_ns, extra_byte_count, tlpx_ui;
>>>    	u32 ui_num, ui_den;
>>>    	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
>>>    	u32 ths_prepare_ns, tclk_trail_ns;
>>>    	u32 tclk_prepare_clkzero, ths_prepare_hszero;
>>>    	u32 lp_to_hs_switch, hs_to_lp_switch;
>>> -	u32 pclk, computed_ddr;
>>>    	u32 mul;
>>>    	u16 burst_mode_ratio;
>>>    	enum port port;
>>> @@ -526,7 +524,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>>    	intel_dsi->pixel_format =
>>>    			pixel_format_from_register_bits(
>>>    				mipi_config->videomode_color_format << 7);
>>> -	bpp = mipi_dsi_pixel_format_to_bpp(intel_dsi->pixel_format);
>>>    
>>>    	intel_dsi->dual_link = mipi_config->dual_link;
>>>    	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
>>> @@ -541,19 +538,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>>    	intel_dsi->video_frmt_cfg_bits =
>>>    		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
>>>    
>>> -	pclk = mode->clock;
>>> +	/* Starting point, adjusted depending on dual link and burst mode */
>>> +	intel_dsi->pclk = mode->clock;
>>>    
>>>    	/* In dual link mode each port needs half of pixel clock */
>>>    	if (intel_dsi->dual_link) {
>>> -		pclk = pclk / 2;
>>> +		intel_dsi->pclk /= 2;
>>>    
>>>    		/* we can enable pixel_overlap if needed by panel. In this
>>>    		 * case we need to increase the pixelclock for extra pixels
>>>    		 */
>>>    		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
>>> -			pclk += DIV_ROUND_UP(mode->vtotal *
>>> -						intel_dsi->pixel_overlap *
>>> -						60, 1000);
>>> +			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
>>>    		}
>>>    	}
>>>    
>>> @@ -563,19 +559,18 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>>    	 */
>>>    	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
>>>    		if (mipi_config->target_burst_mode_freq) {
>>> -			computed_ddr = (pclk * bpp) / intel_dsi->lane_count;
>>> +			u32 bitrate = intel_dsi_bitrate(intel_dsi);
>>>    
>>> -			if (mipi_config->target_burst_mode_freq <
>>> -								computed_ddr) {
>>> +			if (mipi_config->target_burst_mode_freq < bitrate) {
>>>    				DRM_ERROR("Burst mode freq is less than computed\n");
>>>    				return false;
>>>    			}
>>>    
>>>    			burst_mode_ratio = DIV_ROUND_UP(
>>>    				mipi_config->target_burst_mode_freq * 100,
>>> -				computed_ddr);
>>> +				bitrate);
>>>    
>>> -			pclk = DIV_ROUND_UP(pclk * burst_mode_ratio, 100);
>>> +			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
>>>    		} else {
>>>    			DRM_ERROR("Burst mode target is not set\n");
>>>    			return false;
>>> @@ -584,9 +579,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>>    		burst_mode_ratio = 100;
>>>    
>>>    	intel_dsi->burst_mode_ratio = burst_mode_ratio;
>>> -	intel_dsi->pclk = pclk;
>>> -
>>> -	bitrate = (pclk * bpp) / intel_dsi->lane_count;
>>>    
>>>    	switch (intel_dsi->escape_clk_div) {
>>>    	case 0:
>>> @@ -620,7 +612,7 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>>    
>>>    	/* in Kbps */
>>>    	ui_num = NS_KHZ_RATIO;
>>> -	ui_den = bitrate;
>>> +	ui_den = intel_dsi_bitrate(intel_dsi);
>>>    
>>>    	tclk_prepare_clkzero = mipi_config->tclk_prepare_clkzero;
>>>    	ths_prepare_hszero = mipi_config->ths_prepare_hszero;

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

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

* Re: [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available
  2018-10-16 12:39     ` Jani Nikula
@ 2018-10-16 12:56       ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-16 12:56 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/16/2018 6:09 PM, Jani Nikula wrote:
> On Tue, 16 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
>> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>>> From: Madhav Chauhan <madhav.chauhan@intel.com>
>>>
>>> This patch moves couple of legacy DSI functions to header and common DSI
>>> files so that they can be re-used by Gen11 DSI. No functional change.
>>>
>>> v2 by Jani:
>>>    - Move intel_dsi_msleep() to intel_dsi_vbt.c
>> This will be used by icl dsi as well and and delay is directly passed
>> Shouldn't we have this inside intel_dsi.c??
>> Or
>> Because seq version from VBT is getting checked inside this function,
>> so that is taking the precedence??
> I had it in intel_dsi.c at first, but decided on intel_dsi_vbt.c instead
> because it does have a dependency on the VBT. And I presume on ICL this
> will be a NOP due to v3+ sequence.

Ok with this change. Thanks!!

Regards,
Madhav

>
> BR,
> Jani.
>
>
>
>
>> Regards,
>> Madhav
>>
>>> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>> ---
>>>    drivers/gpu/drm/i915/intel_dsi.h     | 11 +++++++++++
>>>    drivers/gpu/drm/i915/intel_dsi_vbt.c | 11 +++++++++++
>>>    drivers/gpu/drm/i915/vlv_dsi.c       | 21 ---------------------
>>>    3 files changed, 22 insertions(+), 21 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>>> index 0d911a4adfaa..d7c0c599b52d 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>>> @@ -129,6 +129,16 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>>>    	return container_of(encoder, struct intel_dsi, base.base);
>>>    }
>>>    
>>> +static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
>>> +{
>>> +	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
>>> +}
>>> +
>>> +static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
>>> +{
>>> +	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
>>> +}
>>> +
>>>    /* intel_dsi.c */
>>>    int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
>>>    int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
>>> @@ -162,5 +172,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id);
>>>    int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi);
>>>    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);
>>>    
>>>    #endif /* _INTEL_DSI_H */
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> index b0d8548f0462..5e16b4c5f531 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> @@ -481,6 +481,17 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
>>>    	}
>>>    }
>>>    
>>> +void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
>>> +{
>>> +	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
>>> +
>>> +	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
>>> +	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
>>> +		return;
>>> +
>>> +	msleep(msec);
>>> +}
>>> +
>>>    int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
>>>    {
>>>    	struct intel_connector *connector = intel_dsi->attached_connector;
>>> diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c
>>> index dbca30460a6b..ee0cd5d0bf91 100644
>>> --- a/drivers/gpu/drm/i915/vlv_dsi.c
>>> +++ b/drivers/gpu/drm/i915/vlv_dsi.c
>>> @@ -290,16 +290,6 @@ static void band_gap_reset(struct drm_i915_private *dev_priv)
>>>    	mutex_unlock(&dev_priv->sb_lock);
>>>    }
>>>    
>>> -static inline bool is_vid_mode(struct intel_dsi *intel_dsi)
>>> -{
>>> -	return intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE;
>>> -}
>>> -
>>> -static inline bool is_cmd_mode(struct intel_dsi *intel_dsi)
>>> -{
>>> -	return intel_dsi->operation_mode == INTEL_DSI_COMMAND_MODE;
>>> -}
>>> -
>>>    static bool intel_dsi_compute_config(struct intel_encoder *encoder,
>>>    				     struct intel_crtc_state *pipe_config,
>>>    				     struct drm_connector_state *conn_state)
>>> @@ -746,17 +736,6 @@ static void intel_dsi_prepare(struct intel_encoder *intel_encoder,
>>>    			      const struct intel_crtc_state *pipe_config);
>>>    static void intel_dsi_unprepare(struct intel_encoder *encoder);
>>>    
>>> -static void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
>>> -{
>>> -	struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
>>> -
>>> -	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
>>> -	if (is_vid_mode(intel_dsi) && dev_priv->vbt.dsi.seq_version >= 3)
>>> -		return;
>>> -
>>> -	msleep(msec);
>>> -}
>>> -
>>>    /*
>>>     * Panel enable/disable sequences from the VBT spec.
>>>     *

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

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

* Re: [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns()
  2018-10-16  8:39   ` Madhav Chauhan
@ 2018-10-16 13:06     ` Jani Nikula
  2018-10-20 10:38       ` Madhav Chauhan
  0 siblings, 1 reply; 59+ messages in thread
From: Jani Nikula @ 2018-10-16 13:06 UTC (permalink / raw)
  To: Madhav Chauhan, intel-gfx

On Tue, 16 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>> Will be needed in the future. No functional changes.
>
> Agree, will be needing this while setting up DSI protocol timeouts for ICL.
>
>>
>> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
>> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>   drivers/gpu/drm/i915/intel_dsi.c     | 13 +++++++++++++
>>   drivers/gpu/drm/i915/intel_dsi.h     |  1 +
>>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 16 +---------------
>>   3 files changed, 15 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
>> index 4daa1da94047..a32cc1f4b384 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi.c
>> @@ -15,3 +15,16 @@ int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
>>   
>>   	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
>>   }
>> +
>> +int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi)
>> +{
>> +	switch (intel_dsi->escape_clk_div) {
>> +	default:
>> +	case 0:
>> +		return 50;
>> +	case 1:
>> +		return 100;
>> +	case 2:
>> +		return 200;
>> +	}
>> +}
>
> Can we change the return of this function to unsigned int, there is no way
> that this function can return < 0  as per current implementation??

I'd rather not. I'm sure I should be able to justify this exhaustively
with examples, but I think gratuitous use of unsigned types leads to
issues with integer promotions and signed/unsigned comparisons etc. So
if it's "just a number", used for arithmetics, I'll pretty much choose
int every time.

And because you can silently assign negative numbers to unsigned types,
it's not a good safeguard to ensure positive numbers. Unless you're
happy with large positive numbers...

Unsigned types are best for register contents, bits, masks, etc.


BR,
Jani.


>
> Regards,
> Madhav
>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>> index 68f14d8f1e18..0d911a4adfaa 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>> @@ -131,6 +131,7 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>>   
>>   /* intel_dsi.c */
>>   int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
>> +int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
>>   
>>   /* vlv_dsi.c */
>>   void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> index fdeba8386d53..b0d8548f0462 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> @@ -512,21 +512,7 @@ static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
>>   	u32 lp_to_hs_switch, hs_to_lp_switch;
>>   	u32 mul;
>>   
>> -	switch (intel_dsi->escape_clk_div) {
>> -	case 0:
>> -		tlpx_ns = 50;
>> -		break;
>> -	case 1:
>> -		tlpx_ns = 100;
>> -		break;
>> -
>> -	case 2:
>> -		tlpx_ns = 200;
>> -		break;
>> -	default:
>> -		tlpx_ns = 50;
>> -		break;
>> -	}
>> +	tlpx_ns = intel_dsi_tlpx_ns(intel_dsi);
>>   
>>   	switch (intel_dsi->lane_count) {
>>   	case 1:
>

-- 
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] 59+ messages in thread

* Re: [PATCH v7 00/23] drm/i915/icl: dsi enabling
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (25 preceding siblings ...)
  2018-10-15 15:09 ` ✗ Fi.CI.BAT: failure " Patchwork
@ 2018-10-16 13:36 ` Jani Nikula
  2018-10-16 13:45 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling (rev2) Patchwork
                   ` (5 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-16 13:36 UTC (permalink / raw)
  To: intel-gfx

On Mon, 15 Oct 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> The v7 is a bit misleading, but it's essentially the next version of
> [1], embedding my review into the commits directly. This is the first
> batch from me, and there's more to come.

The full series also at icl-dsi-2018-10-16 branch of
https://cgit.freedesktop.org/~jani/drm/

BR,
Jani.

-- 
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] 59+ messages in thread

* ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling (rev2)
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (26 preceding siblings ...)
  2018-10-16 13:36 ` [PATCH v7 00/23] " Jani Nikula
@ 2018-10-16 13:45 ` Patchwork
  2018-10-16 13:52 ` ✗ Fi.CI.SPARSE: " Patchwork
                   ` (4 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-16 13:45 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling (rev2)
URL   : https://patchwork.freedesktop.org/series/51011/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
c25368a8ec1e drm/i915: make encoder enable and disable hooks optional
-:44: WARNING:LONG_LINE: line over 100 characters
#44: FILE: drivers/gpu/drm/i915/intel_display.c:15448:
+				encoder->disable(encoder, to_intel_crtc_state(crtc_state), connector->base.state);

total: 0 errors, 1 warnings, 0 checks, 61 lines checked
f9a6a6ec351f drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
-:30: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#30: 
new file mode 100644

-:114: WARNING:LONG_LINE: line over 100 characters
#114: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:552:
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);

total: 0 errors, 2 warnings, 0 checks, 118 lines checked
efa9b026e207 drm/i915/dsi: abstract dphy parameter init
-:130: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#130: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:691:
+			pixel_format_from_register_bits(

-:156: WARNING:BRACES: braces {} are not necessary for single statement blocks
#156: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:717:
+		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
+		}

-:157: WARNING:LONG_LINE: line over 100 characters
#157: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:718:
+			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);

-:165: CHECK:BRACES: braces {} should be used on all arms of this statement
#165: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:726:
+	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
[...]
+	} else
[...]

-:174: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#174: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:735:
+			burst_mode_ratio = DIV_ROUND_UP(

-:183: CHECK:BRACES: Unbalanced braces around else statement
#183: FILE: drivers/gpu/drm/i915/intel_dsi_vbt.c:744:
+	} else

total: 0 errors, 2 warnings, 4 checks, 169 lines checked
0b6b3d7d10f9 drm/i915/dsi: abstract intel_dsi_tlpx_ns()
4ea7560e8bf0 drm/i915/icl: Make common DSI functions available
8dd4accf0f08 drm/i915/icl: Program DSI clock and data lane timing params
3887d2f3fc66 drm/i915/icl: Program TA_TIMING_PARAM registers
d45e6957f8bc drm/i915/icl: Get DSI transcoder for a given port
82e9c3ba9891 drm/i915/icl: Add macros for MMIO of DSI transcoder registers
c6be44e9b750 drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
d9fddc1fdb98 drm/i915/icl: Configure DSI transcoders
-:146: CHECK:BOOL_MEMBER: Avoid using bool structure members because of possible alignment issues - see: https://lkml.org/lkml/2017/11/21/384
#146: FILE: drivers/gpu/drm/i915/intel_dsi.h:85:
+	bool bgr_enabled;

total: 0 errors, 0 warnings, 1 checks, 121 lines checked
3b0bc52936dc drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
3a6e7dbce100 drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
c13805c69a43 drm/i915/icl: Define DSI transcoder timing registers
27b32fd273e3 drm/i915/icl: Configure DSI transcoder timings
d52459f4c75c drm/i915/icl: Define TRANS_CONF register for DSI
952873ccf0b2 drm/i915/icl: Enable DSI transcoders
fd4c6e67e010 drm/i915/icl: Define DSI panel programming registers
cdece01f26bf drm/i915/icl: Set max return packet size for DSI panel
894c9626886b drm/i915/icl: Power on DSI panel
b2d70882145b drm/i915/icl: Wait for header/payload credits release
-:22: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#22: FILE: drivers/gpu/drm/i915/icl_dsi.c:31:
+static void __attribute__((unused)) wait_for_dsi_hdr_credit_release(

-:34: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#34: FILE: drivers/gpu/drm/i915/icl_dsi.c:43:
+static void __attribute__((unused)) wait_for_dsi_payload_credit_release(

total: 0 errors, 0 warnings, 2 checks, 30 lines checked
07124f12764f drm/i915/icl: Ensure all cmd/data disptached to panel
8a33c1840e00 drm/i915/icl: Turn ON panel backlight

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

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

* ✗ Fi.CI.SPARSE: warning for drm/i915/icl: dsi enabling (rev2)
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (27 preceding siblings ...)
  2018-10-16 13:45 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling (rev2) Patchwork
@ 2018-10-16 13:52 ` Patchwork
  2018-10-16 14:05 ` ✓ Fi.CI.BAT: success " Patchwork
                   ` (3 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-16 13:52 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling (rev2)
URL   : https://patchwork.freedesktop.org/series/51011/
State : warning

== Summary ==

$ dim sparse origin/drm-tip
Sparse version: v0.5.2
Commit: drm/i915: make encoder enable and disable hooks optional
Okay!

Commit: drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
+./include/uapi/linux/perf_event.h:147:56: warning: cast truncates bits from constant value (8000000000000000 becomes 0)

Commit: drm/i915/dsi: abstract dphy parameter init
Okay!

Commit: drm/i915/dsi: abstract intel_dsi_tlpx_ns()
Okay!

Commit: drm/i915/icl: Make common DSI functions available
Okay!

Commit: drm/i915/icl: Program DSI clock and data lane timing params
+drivers/gpu/drm/i915/intel_dsi_vbt.c:534:25: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/intel_dsi_vbt.c:534:25: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/intel_dsi_vbt.c:535:26: warning: expression using sizeof(void)
+drivers/gpu/drm/i915/intel_dsi_vbt.c:535:26: warning: expression using sizeof(void)

Commit: drm/i915/icl: Program TA_TIMING_PARAM registers
Okay!

Commit: drm/i915/icl: Get DSI transcoder for a given port
Okay!

Commit: drm/i915/icl: Add macros for MMIO of DSI transcoder registers
Okay!

Commit: drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
Okay!

Commit: drm/i915/icl: Configure DSI transcoders
Okay!

Commit: drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
Okay!

Commit: drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
Okay!

Commit: drm/i915/icl: Define DSI transcoder timing registers
Okay!

Commit: drm/i915/icl: Configure DSI transcoder timings
Okay!

Commit: drm/i915/icl: Define TRANS_CONF register for DSI
Okay!

Commit: drm/i915/icl: Enable DSI transcoders
Okay!

Commit: drm/i915/icl: Define DSI panel programming registers
Okay!

Commit: drm/i915/icl: Set max return packet size for DSI panel
Okay!

Commit: drm/i915/icl: Power on DSI panel
Okay!

Commit: drm/i915/icl: Wait for header/payload credits release
Okay!

Commit: drm/i915/icl: Ensure all cmd/data disptached to panel
Okay!

Commit: drm/i915/icl: Turn ON panel backlight
Okay!

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

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

* ✓ Fi.CI.BAT: success for drm/i915/icl: dsi enabling (rev2)
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (28 preceding siblings ...)
  2018-10-16 13:52 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2018-10-16 14:05 ` Patchwork
  2018-10-16 16:12 ` ✗ Fi.CI.IGT: failure " Patchwork
                   ` (2 subsequent siblings)
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-16 14:05 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling (rev2)
URL   : https://patchwork.freedesktop.org/series/51011/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4987 -> Patchwork_10473 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51011/revisions/2/mbox/

== Known issues ==

  Here are the changes found in Patchwork_10473 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@amdgpu/amd_basic@cs-compute:
      fi-kbl-8809g:       NOTRUN -> FAIL (fdo#108094)

    igt@amdgpu/amd_cs_nop@fork-gfx0:
      fi-kbl-8809g:       NOTRUN -> DMESG-WARN (fdo#107762)

    igt@amdgpu/amd_prime@amd-to-i915:
      fi-kbl-8809g:       NOTRUN -> FAIL (fdo#107341)

    igt@gem_exec_suspend@basic-s4-devices:
      fi-kbl-7500u:       PASS -> DMESG-WARN (fdo#107139, fdo#105128)

    igt@kms_frontbuffer_tracking@basic:
      fi-icl-u2:          PASS -> FAIL (fdo#103167)

    
    ==== Possible fixes ====

    igt@drv_module_reload@basic-reload-inject:
      fi-glk-j4005:       DMESG-WARN (fdo#106725, fdo#106248) -> PASS

    igt@kms_flip@basic-flip-vs-dpms:
      fi-glk-j4005:       DMESG-WARN (fdo#106000) -> PASS

    igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
      fi-skl-6700k2:      FAIL (fdo#103191, fdo#107362) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
      fi-cfl-8109u:       INCOMPLETE (fdo#108126, fdo#106070) -> PASS

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#105128 https://bugs.freedesktop.org/show_bug.cgi?id=105128
  fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
  fdo#106070 https://bugs.freedesktop.org/show_bug.cgi?id=106070
  fdo#106248 https://bugs.freedesktop.org/show_bug.cgi?id=106248
  fdo#106725 https://bugs.freedesktop.org/show_bug.cgi?id=106725
  fdo#107139 https://bugs.freedesktop.org/show_bug.cgi?id=107139
  fdo#107341 https://bugs.freedesktop.org/show_bug.cgi?id=107341
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107762 https://bugs.freedesktop.org/show_bug.cgi?id=107762
  fdo#108094 https://bugs.freedesktop.org/show_bug.cgi?id=108094
  fdo#108126 https://bugs.freedesktop.org/show_bug.cgi?id=108126


== Participating hosts (49 -> 44) ==

  Missing    (5): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 


== Build changes ==

    * Linux: CI_DRM_4987 -> Patchwork_10473

  CI_DRM_4987: 6f1fe37189c04cb62e73e7a9e075f012c7fc45ff @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4680: 27fa97d16294af9c9c42fd81b030a73e4aa2e7c3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10473: 8a33c1840e0059c873e427a4b88ae30b09360d3c @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

8a33c1840e00 drm/i915/icl: Turn ON panel backlight
07124f12764f drm/i915/icl: Ensure all cmd/data disptached to panel
b2d70882145b drm/i915/icl: Wait for header/payload credits release
894c9626886b drm/i915/icl: Power on DSI panel
cdece01f26bf drm/i915/icl: Set max return packet size for DSI panel
fd4c6e67e010 drm/i915/icl: Define DSI panel programming registers
952873ccf0b2 drm/i915/icl: Enable DSI transcoders
d52459f4c75c drm/i915/icl: Define TRANS_CONF register for DSI
27b32fd273e3 drm/i915/icl: Configure DSI transcoder timings
c13805c69a43 drm/i915/icl: Define DSI transcoder timing registers
3a6e7dbce100 drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
3b0bc52936dc drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
d9fddc1fdb98 drm/i915/icl: Configure DSI transcoders
c6be44e9b750 drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
82e9c3ba9891 drm/i915/icl: Add macros for MMIO of DSI transcoder registers
d45e6957f8bc drm/i915/icl: Get DSI transcoder for a given port
3887d2f3fc66 drm/i915/icl: Program TA_TIMING_PARAM registers
8dd4accf0f08 drm/i915/icl: Program DSI clock and data lane timing params
4ea7560e8bf0 drm/i915/icl: Make common DSI functions available
0b6b3d7d10f9 drm/i915/dsi: abstract intel_dsi_tlpx_ns()
efa9b026e207 drm/i915/dsi: abstract dphy parameter init
f9a6a6ec351f drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
c25368a8ec1e drm/i915: make encoder enable and disable hooks optional

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10473/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.IGT: failure for drm/i915/icl: dsi enabling (rev2)
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (29 preceding siblings ...)
  2018-10-16 14:05 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2018-10-16 16:12 ` Patchwork
  2018-10-17 10:51 ` ✓ Fi.CI.BAT: success " Patchwork
  2018-10-17 13:29 ` ✓ Fi.CI.IGT: " Patchwork
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-16 16:12 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling (rev2)
URL   : https://patchwork.freedesktop.org/series/51011/
State : failure

== Summary ==

= CI Bug Log - changes from CI_DRM_4987_full -> Patchwork_10473_full =

== Summary - FAILURE ==

  Serious unknown changes coming with Patchwork_10473_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_10473_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

== Possible new issues ==

  Here are the unknown changes that may have been introduced in Patchwork_10473_full:

  === IGT changes ===

    ==== Possible regressions ====

    igt@kms_color@pipe-a-ctm-green-to-red:
      shard-skl:          PASS -> FAIL

    
    ==== Warnings ====

    igt@pm_rc6_residency@rc6-accuracy:
      shard-kbl:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in Patchwork_10473_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@debugfs_test@read_all_entries_display_off:
      shard-skl:          PASS -> INCOMPLETE (fdo#104108)

    igt@kms_busy@extended-modeset-hang-newfb-render-a:
      shard-skl:          NOTRUN -> DMESG-WARN (fdo#107956)

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-b:
      shard-hsw:          NOTRUN -> DMESG-WARN (fdo#107956)

    igt@kms_busy@extended-pageflip-hang-newfb-render-a:
      shard-glk:          NOTRUN -> DMESG-WARN (fdo#107956) +3

    igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-a:
      shard-snb:          NOTRUN -> DMESG-WARN (fdo#107956)

    igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-b:
      shard-kbl:          PASS -> DMESG-WARN (fdo#107956)

    igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
      shard-glk:          NOTRUN -> FAIL (fdo#106509, fdo#105454)

    igt@kms_draw_crc@draw-method-rgb565-mmap-cpu-xtiled:
      shard-skl:          PASS -> FAIL (fdo#103184)

    igt@kms_fbcon_fbt@fbc-suspend:
      shard-apl:          PASS -> INCOMPLETE (fdo#103927) +1

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-render:
      shard-apl:          PASS -> FAIL (fdo#103167) +1

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-gtt:
      shard-glk:          NOTRUN -> FAIL (fdo#103167) +1

    igt@kms_plane@pixel-format-pipe-a-planes:
      shard-glk:          NOTRUN -> FAIL (fdo#103166)

    igt@kms_plane_alpha_blend@pipe-c-alpha-transparant-fb:
      shard-glk:          NOTRUN -> FAIL (fdo#108145) +2

    igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
      shard-apl:          PASS -> FAIL (fdo#103166)

    igt@pm_rpm@debugfs-read:
      shard-skl:          PASS -> INCOMPLETE (fdo#107807)

    
    ==== Possible fixes ====

    igt@kms_chv_cursor_fail@pipe-a-256x256-bottom-edge:
      shard-skl:          FAIL (fdo#104671) -> PASS +1

    igt@kms_cursor_crc@cursor-128x128-suspend:
      shard-apl:          FAIL (fdo#103191, fdo#103232) -> PASS

    igt@kms_cursor_crc@cursor-size-change:
      shard-glk:          FAIL (fdo#103232) -> PASS +1

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-cpu:
      shard-glk:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-render:
      shard-skl:          FAIL (fdo#105682) -> PASS

    igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt:
      shard-skl:          FAIL (fdo#103167) -> PASS +2

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      shard-apl:          DMESG-WARN (fdo#105602, fdo#103558) -> PASS +1

    igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
      shard-apl:          FAIL (fdo#103166) -> PASS

    igt@kms_setmode@basic:
      shard-apl:          FAIL (fdo#99912) -> PASS

    
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103184 https://bugs.freedesktop.org/show_bug.cgi?id=103184
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
  fdo#104108 https://bugs.freedesktop.org/show_bug.cgi?id=104108
  fdo#104671 https://bugs.freedesktop.org/show_bug.cgi?id=104671
  fdo#105454 https://bugs.freedesktop.org/show_bug.cgi?id=105454
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#105682 https://bugs.freedesktop.org/show_bug.cgi?id=105682
  fdo#106509 https://bugs.freedesktop.org/show_bug.cgi?id=106509
  fdo#107807 https://bugs.freedesktop.org/show_bug.cgi?id=107807
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912


== Participating hosts (6 -> 6) ==

  No changes in participating hosts


== Build changes ==

    * Linux: CI_DRM_4987 -> Patchwork_10473

  CI_DRM_4987: 6f1fe37189c04cb62e73e7a9e075f012c7fc45ff @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4680: 27fa97d16294af9c9c42fd81b030a73e4aa2e7c3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10473: 8a33c1840e0059c873e427a4b88ae30b09360d3c @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10473/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.BAT: success for drm/i915/icl: dsi enabling (rev2)
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (30 preceding siblings ...)
  2018-10-16 16:12 ` ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-10-17 10:51 ` Patchwork
  2018-10-17 13:29 ` ✓ Fi.CI.IGT: " Patchwork
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-17 10:51 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling (rev2)
URL   : https://patchwork.freedesktop.org/series/51011/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4995 -> Patchwork_10486 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51011/revisions/2/mbox/

== Known issues ==

  Here are the changes found in Patchwork_10486 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_selftest@live_hangcheck:
      fi-icl-u:           PASS -> INCOMPLETE (fdo#108315)

    igt@kms_frontbuffer_tracking@basic:
      fi-icl-u2:          PASS -> FAIL (fdo#103167)

    igt@kms_pipe_crc_basic@read-crc-pipe-b-frame-sequence:
      fi-byt-clapper:     PASS -> FAIL (fdo#103191, fdo#107362)

    
    ==== Possible fixes ====

    igt@drv_selftest@live_hangcheck:
      fi-kbl-7560u:       INCOMPLETE (fdo#108044) -> PASS

    igt@kms_flip@basic-flip-vs-modeset:
      fi-skl-6700hq:      DMESG-WARN (fdo#105998) -> PASS

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#108044 https://bugs.freedesktop.org/show_bug.cgi?id=108044
  fdo#108315 https://bugs.freedesktop.org/show_bug.cgi?id=108315


== Participating hosts (46 -> 42) ==

  Additional (1): fi-pnv-d510 
  Missing    (5): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan 


== Build changes ==

    * Linux: CI_DRM_4995 -> Patchwork_10486

  CI_DRM_4995: 54f2281117133d77122fe452af3ea0bd5b6161aa @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4683: 7766b1e2348b32cc8ed58a972c6fd53b20279549 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10486: 77756b23dbf159cd95e7379afb52a211d31e41bb @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

77756b23dbf1 drm/i915/icl: Turn ON panel backlight
1c32080b780f drm/i915/icl: Ensure all cmd/data disptached to panel
e127dd920d4c drm/i915/icl: Wait for header/payload credits release
548a139f5f39 drm/i915/icl: Power on DSI panel
de595aced252 drm/i915/icl: Set max return packet size for DSI panel
ceccb56049de drm/i915/icl: Define DSI panel programming registers
84bfd208073a drm/i915/icl: Enable DSI transcoders
db56c3a6111b drm/i915/icl: Define TRANS_CONF register for DSI
71a178875a37 drm/i915/icl: Configure DSI transcoder timings
a3128e344e49 drm/i915/icl: Define DSI transcoder timing registers
563acc8957df drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
4effa0a65f78 drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
cc0a0db6d765 drm/i915/icl: Configure DSI transcoders
190f8e155498 drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
aaddb12846e7 drm/i915/icl: Add macros for MMIO of DSI transcoder registers
3e59c4c21a59 drm/i915/icl: Get DSI transcoder for a given port
914a8a8a1c8f drm/i915/icl: Program TA_TIMING_PARAM registers
f8fa35845dbc drm/i915/icl: Program DSI clock and data lane timing params
64d22dff235d drm/i915/icl: Make common DSI functions available
eb89224c27f6 drm/i915/dsi: abstract intel_dsi_tlpx_ns()
12e0bd55c174 drm/i915/dsi: abstract dphy parameter init
675f0426321d drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init()
f6f1e7f158e5 drm/i915: make encoder enable and disable hooks optional

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10486/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✓ Fi.CI.IGT: success for drm/i915/icl: dsi enabling (rev2)
  2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
                   ` (31 preceding siblings ...)
  2018-10-17 10:51 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2018-10-17 13:29 ` Patchwork
  32 siblings, 0 replies; 59+ messages in thread
From: Patchwork @ 2018-10-17 13:29 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/icl: dsi enabling (rev2)
URL   : https://patchwork.freedesktop.org/series/51011/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_4995_full -> Patchwork_10486_full =

== Summary - WARNING ==

  Minor unknown changes coming with Patchwork_10486_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_10486_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

== Possible new issues ==

  Here are the unknown changes that may have been introduced in Patchwork_10486_full:

  === IGT changes ===

    ==== Warnings ====

    igt@perf_pmu@rc6:
      shard-kbl:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in Patchwork_10486_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_suspend@shrink:
      shard-apl:          PASS -> INCOMPLETE (fdo#103927, fdo#106886)

    igt@gem_exec_schedule@pi-ringfull-blt:
      shard-skl:          NOTRUN -> FAIL (fdo#103158)

    igt@gem_exec_schedule@pi-ringfull-bsd:
      shard-apl:          NOTRUN -> FAIL (fdo#103158)

    igt@kms_color@pipe-a-legacy-gamma:
      shard-apl:          PASS -> FAIL (fdo#104782, fdo#108145)

    igt@kms_cursor_legacy@cursora-vs-flipa-toggle:
      shard-glk:          PASS -> DMESG-WARN (fdo#105763, fdo#106538)

    igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
      shard-apl:          SKIP -> INCOMPLETE (fdo#103927)

    igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-blt:
      shard-snb:          SKIP -> INCOMPLETE (fdo#105411)

    igt@kms_plane@plane-position-covered-pipe-b-planes:
      shard-glk:          PASS -> FAIL (fdo#103166) +3

    igt@testdisplay:
      shard-glk:          PASS -> INCOMPLETE (fdo#103359, k.org#198133)

    
    ==== Possible fixes ====

    igt@kms_atomic_interruptible@legacy-cursor:
      shard-kbl:          DMESG-WARN (fdo#108473) -> PASS

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-c:
      shard-hsw:          DMESG-WARN (fdo#107956) -> PASS

    igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
      shard-glk:          FAIL (fdo#108145) -> PASS

    igt@kms_cursor_crc@cursor-128x42-sliding:
      shard-glk:          FAIL (fdo#103232) -> PASS +1

    igt@kms_flip@flip-vs-modeset-interruptible:
      shard-kbl:          DMESG-WARN (fdo#103313) -> PASS +2

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
      shard-apl:          FAIL (fdo#103167) -> PASS +1

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-glk:          FAIL (fdo#103167) -> PASS +1

    igt@kms_plane@plane-position-covered-pipe-a-planes:
      shard-glk:          FAIL (fdo#103166) -> PASS

    igt@kms_plane_lowres@pipe-b-tiling-none:
      shard-kbl:          DMESG-WARN (fdo#105345, fdo#103313) -> PASS

    igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
      shard-apl:          FAIL (fdo#103166) -> PASS +3

    
  fdo#103158 https://bugs.freedesktop.org/show_bug.cgi?id=103158
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103313 https://bugs.freedesktop.org/show_bug.cgi?id=103313
  fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
  fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
  fdo#104782 https://bugs.freedesktop.org/show_bug.cgi?id=104782
  fdo#105345 https://bugs.freedesktop.org/show_bug.cgi?id=105345
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
  fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
  fdo#106886 https://bugs.freedesktop.org/show_bug.cgi?id=106886
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108473 https://bugs.freedesktop.org/show_bug.cgi?id=108473
  k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133


== Participating hosts (6 -> 6) ==

  No changes in participating hosts


== Build changes ==

    * Linux: CI_DRM_4995 -> Patchwork_10486

  CI_DRM_4995: 54f2281117133d77122fe452af3ea0bd5b6161aa @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_4683: 7766b1e2348b32cc8ed58a972c6fd53b20279549 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_10486: 77756b23dbf159cd95e7379afb52a211d31e41bb @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10486/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH v7 03/23] drm/i915/dsi: abstract dphy parameter init
  2018-10-16  8:29   ` Madhav Chauhan
@ 2018-10-18 12:20     ` Jani Nikula
  0 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-18 12:20 UTC (permalink / raw)
  To: Madhav Chauhan, intel-gfx

On Tue, 16 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>> intel_dsi_vbt_init() has grown too unwieldy, and it's about to be
>> modified due to ICL DSI. Abstract out the VLV specific dphy param
>> init. No functional changes. Intentionally no stylistic changes during
>> code movement.
>>
>> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
>> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> Looks ok to me,
> Reviewed-by: Madhav Chauhan <madhav.chauhan@intel.com>

Thanks for the review, pushed patches 1-3 with Ville's IRC ack on patch
1.

BR,
Jani.


>
> Regards,
> Madhav
>
>> ---
>>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 147 +++++++++++++++++++----------------
>>   1 file changed, 78 insertions(+), 69 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> index 6c4cc92f5947..fdeba8386d53 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> @@ -499,13 +499,11 @@ int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
>>   	return 1;
>>   }
>>   
>> -bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>> +static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
>>   {
>>   	struct drm_device *dev = intel_dsi->base.base.dev;
>>   	struct drm_i915_private *dev_priv = to_i915(dev);
>>   	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
>> -	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
>> -	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
>>   	u32 tlpx_ns, extra_byte_count, tlpx_ui;
>>   	u32 ui_num, ui_den;
>>   	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
>> @@ -513,72 +511,6 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   	u32 tclk_prepare_clkzero, ths_prepare_hszero;
>>   	u32 lp_to_hs_switch, hs_to_lp_switch;
>>   	u32 mul;
>> -	u16 burst_mode_ratio;
>> -	enum port port;
>> -
>> -	DRM_DEBUG_KMS("\n");
>> -
>> -	intel_dsi->eotp_pkt = mipi_config->eot_pkt_disabled ? 0 : 1;
>> -	intel_dsi->clock_stop = mipi_config->enable_clk_stop ? 1 : 0;
>> -	intel_dsi->lane_count = mipi_config->lane_cnt + 1;
>> -	intel_dsi->pixel_format =
>> -			pixel_format_from_register_bits(
>> -				mipi_config->videomode_color_format << 7);
>> -
>> -	intel_dsi->dual_link = mipi_config->dual_link;
>> -	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
>> -	intel_dsi->operation_mode = mipi_config->is_cmd_mode;
>> -	intel_dsi->video_mode_format = mipi_config->video_transfer_mode;
>> -	intel_dsi->escape_clk_div = mipi_config->byte_clk_sel;
>> -	intel_dsi->lp_rx_timeout = mipi_config->lp_rx_timeout;
>> -	intel_dsi->turn_arnd_val = mipi_config->turn_around_timeout;
>> -	intel_dsi->rst_timer_val = mipi_config->device_reset_timer;
>> -	intel_dsi->init_count = mipi_config->master_init_timer;
>> -	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
>> -	intel_dsi->video_frmt_cfg_bits =
>> -		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
>> -
>> -	/* Starting point, adjusted depending on dual link and burst mode */
>> -	intel_dsi->pclk = mode->clock;
>> -
>> -	/* In dual link mode each port needs half of pixel clock */
>> -	if (intel_dsi->dual_link) {
>> -		intel_dsi->pclk /= 2;
>> -
>> -		/* we can enable pixel_overlap if needed by panel. In this
>> -		 * case we need to increase the pixelclock for extra pixels
>> -		 */
>> -		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
>> -			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
>> -		}
>> -	}
>> -
>> -	/* Burst Mode Ratio
>> -	 * Target ddr frequency from VBT / non burst ddr freq
>> -	 * multiply by 100 to preserve remainder
>> -	 */
>> -	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
>> -		if (mipi_config->target_burst_mode_freq) {
>> -			u32 bitrate = intel_dsi_bitrate(intel_dsi);
>> -
>> -			if (mipi_config->target_burst_mode_freq < bitrate) {
>> -				DRM_ERROR("Burst mode freq is less than computed\n");
>> -				return false;
>> -			}
>> -
>> -			burst_mode_ratio = DIV_ROUND_UP(
>> -				mipi_config->target_burst_mode_freq * 100,
>> -				bitrate);
>> -
>> -			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
>> -		} else {
>> -			DRM_ERROR("Burst mode target is not set\n");
>> -			return false;
>> -		}
>> -	} else
>> -		burst_mode_ratio = 100;
>> -
>> -	intel_dsi->burst_mode_ratio = burst_mode_ratio;
>>   
>>   	switch (intel_dsi->escape_clk_div) {
>>   	case 0:
>> @@ -738,6 +670,83 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   		DIV_ROUND_UP(2 * tlpx_ui + trail_cnt * 2 + 8,
>>   			8);
>>   	intel_dsi->clk_hs_to_lp_count += extra_byte_count;
>> +}
>> +
>> +bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>> +{
>> +	struct drm_device *dev = intel_dsi->base.base.dev;
>> +	struct drm_i915_private *dev_priv = to_i915(dev);
>> +	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
>> +	struct mipi_pps_data *pps = dev_priv->vbt.dsi.pps;
>> +	struct drm_display_mode *mode = dev_priv->vbt.lfp_lvds_vbt_mode;
>> +	u16 burst_mode_ratio;
>> +	enum port port;
>> +
>> +	DRM_DEBUG_KMS("\n");
>> +
>> +	intel_dsi->eotp_pkt = mipi_config->eot_pkt_disabled ? 0 : 1;
>> +	intel_dsi->clock_stop = mipi_config->enable_clk_stop ? 1 : 0;
>> +	intel_dsi->lane_count = mipi_config->lane_cnt + 1;
>> +	intel_dsi->pixel_format =
>> +			pixel_format_from_register_bits(
>> +				mipi_config->videomode_color_format << 7);
>> +
>> +	intel_dsi->dual_link = mipi_config->dual_link;
>> +	intel_dsi->pixel_overlap = mipi_config->pixel_overlap;
>> +	intel_dsi->operation_mode = mipi_config->is_cmd_mode;
>> +	intel_dsi->video_mode_format = mipi_config->video_transfer_mode;
>> +	intel_dsi->escape_clk_div = mipi_config->byte_clk_sel;
>> +	intel_dsi->lp_rx_timeout = mipi_config->lp_rx_timeout;
>> +	intel_dsi->turn_arnd_val = mipi_config->turn_around_timeout;
>> +	intel_dsi->rst_timer_val = mipi_config->device_reset_timer;
>> +	intel_dsi->init_count = mipi_config->master_init_timer;
>> +	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
>> +	intel_dsi->video_frmt_cfg_bits =
>> +		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
>> +
>> +	/* Starting point, adjusted depending on dual link and burst mode */
>> +	intel_dsi->pclk = mode->clock;
>> +
>> +	/* In dual link mode each port needs half of pixel clock */
>> +	if (intel_dsi->dual_link) {
>> +		intel_dsi->pclk /= 2;
>> +
>> +		/* we can enable pixel_overlap if needed by panel. In this
>> +		 * case we need to increase the pixelclock for extra pixels
>> +		 */
>> +		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
>> +			intel_dsi->pclk += DIV_ROUND_UP(mode->vtotal * intel_dsi->pixel_overlap * 60, 1000);
>> +		}
>> +	}
>> +
>> +	/* Burst Mode Ratio
>> +	 * Target ddr frequency from VBT / non burst ddr freq
>> +	 * multiply by 100 to preserve remainder
>> +	 */
>> +	if (intel_dsi->video_mode_format == VIDEO_MODE_BURST) {
>> +		if (mipi_config->target_burst_mode_freq) {
>> +			u32 bitrate = intel_dsi_bitrate(intel_dsi);
>> +
>> +			if (mipi_config->target_burst_mode_freq < bitrate) {
>> +				DRM_ERROR("Burst mode freq is less than computed\n");
>> +				return false;
>> +			}
>> +
>> +			burst_mode_ratio = DIV_ROUND_UP(
>> +				mipi_config->target_burst_mode_freq * 100,
>> +				bitrate);
>> +
>> +			intel_dsi->pclk = DIV_ROUND_UP(intel_dsi->pclk * burst_mode_ratio, 100);
>> +		} else {
>> +			DRM_ERROR("Burst mode target is not set\n");
>> +			return false;
>> +		}
>> +	} else
>> +		burst_mode_ratio = 100;
>> +
>> +	intel_dsi->burst_mode_ratio = burst_mode_ratio;
>> +
>> +	vlv_dphy_param_init(intel_dsi);
>>   
>>   	DRM_DEBUG_KMS("Pclk %d\n", intel_dsi->pclk);
>>   	DRM_DEBUG_KMS("Pixel overlap %d\n", intel_dsi->pixel_overlap);
>

-- 
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] 59+ messages in thread

* Re: [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns()
  2018-10-16 13:06     ` Jani Nikula
@ 2018-10-20 10:38       ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-20 10:38 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/16/2018 6:36 PM, Jani Nikula wrote:
> On Tue, 16 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
>> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>>> Will be needed in the future. No functional changes.
>> Agree, will be needing this while setting up DSI protocol timeouts for ICL.
>>
>>> Cc: Madhav Chauhan <madhav.chauhan@intel.com>
>>> Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>> ---
>>>    drivers/gpu/drm/i915/intel_dsi.c     | 13 +++++++++++++
>>>    drivers/gpu/drm/i915/intel_dsi.h     |  1 +
>>>    drivers/gpu/drm/i915/intel_dsi_vbt.c | 16 +---------------
>>>    3 files changed, 15 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
>>> index 4daa1da94047..a32cc1f4b384 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi.c
>>> +++ b/drivers/gpu/drm/i915/intel_dsi.c
>>> @@ -15,3 +15,16 @@ int intel_dsi_bitrate(const struct intel_dsi *intel_dsi)
>>>    
>>>    	return intel_dsi->pclk * bpp / intel_dsi->lane_count;
>>>    }
>>> +
>>> +int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi)
>>> +{
>>> +	switch (intel_dsi->escape_clk_div) {
>>> +	default:
>>> +	case 0:
>>> +		return 50;
>>> +	case 1:
>>> +		return 100;
>>> +	case 2:
>>> +		return 200;
>>> +	}
>>> +}
>> Can we change the return of this function to unsigned int, there is no way
>> that this function can return < 0  as per current implementation??
> I'd rather not. I'm sure I should be able to justify this exhaustively
> with examples, but I think gratuitous use of unsigned types leads to
> issues with integer promotions and signed/unsigned comparisons etc. So
> if it's "just a number", used for arithmetics, I'll pretty much choose
> int every time.
>
> And because you can silently assign negative numbers to unsigned types,
> it's not a good safeguard to ensure positive numbers. Unless you're
> happy with large positive numbers...
>
> Unsigned types are best for register contents, bits, masks, etc.

Agree with issues mentioned, i thought that should be case to case :),
but fine with uniform approach.
Reviewed-by: Madhav Chauhan <madhav.chauhan@intel.com>

Regards,
Madhav

>
>
> BR,
> Jani.
>
>
>> Regards,
>> Madhav
>>
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>>> index 68f14d8f1e18..0d911a4adfaa 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>>> @@ -131,6 +131,7 @@ static inline struct intel_dsi *enc_to_intel_dsi(struct drm_encoder *encoder)
>>>    
>>>    /* intel_dsi.c */
>>>    int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
>>> +int intel_dsi_tlpx_ns(const struct intel_dsi *intel_dsi);
>>>    
>>>    /* vlv_dsi.c */
>>>    void vlv_dsi_wait_for_fifo_empty(struct intel_dsi *intel_dsi, enum port port);
>>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> index fdeba8386d53..b0d8548f0462 100644
>>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>>> @@ -512,21 +512,7 @@ static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
>>>    	u32 lp_to_hs_switch, hs_to_lp_switch;
>>>    	u32 mul;
>>>    
>>> -	switch (intel_dsi->escape_clk_div) {
>>> -	case 0:
>>> -		tlpx_ns = 50;
>>> -		break;
>>> -	case 1:
>>> -		tlpx_ns = 100;
>>> -		break;
>>> -
>>> -	case 2:
>>> -		tlpx_ns = 200;
>>> -		break;
>>> -	default:
>>> -		tlpx_ns = 50;
>>> -		break;
>>> -	}
>>> +	tlpx_ns = intel_dsi_tlpx_ns(intel_dsi);
>>>    
>>>    	switch (intel_dsi->lane_count) {
>>>    	case 1:

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

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

* Re: [PATCH v7 06/23] drm/i915/icl: Program DSI clock and data lane timing params
  2018-10-15 14:27 ` [PATCH v7 06/23] drm/i915/icl: Program DSI clock and data lane timing params Jani Nikula
@ 2018-10-20 10:57   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-20 10:57 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch programs D-PHY timing parameters for the
> clock and data lane (in escape clocks) of DSI
> controller (DSI port 0 and 1).
> These programmed timings would be used by DSI Controller
> to calculate link transition latencies of the data and
> clock lanes.
>
> v2: Use newly defined bitfields for data and clock lane
>
> v3 by Jani:
>   - Rebase on dphy abstraction
>   - Reduce local variables
>   - Remove unrelated comment changes (Ville)
>   - Use the same style for range checks as VLV (Ville)
>   - Assign, don't OR dphy_reg contents

v3 changes looks fine to me.

Regards,
Madhav
>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/icl_dsi.c       |  18 ++++++
>   drivers/gpu/drm/i915/intel_dsi.h     |   3 +
>   drivers/gpu/drm/i915/intel_dsi_vbt.c | 110 ++++++++++++++++++++++++++++++++++-
>   3 files changed, 130 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index ff5b285ca495..9602b6532028 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -291,6 +291,24 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
>   		tmp |= intel_dsi->init_count;
>   		I915_WRITE(ICL_DSI_T_INIT_MASTER(port), tmp);
>   	}
> +
> +	/* Program DPHY clock lanes timings */
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		I915_WRITE(DPHY_CLK_TIMING_PARAM(port), intel_dsi->dphy_reg);
> +
> +		/* shadow register inside display core */
> +		I915_WRITE(DSI_CLK_TIMING_PARAM(port), intel_dsi->dphy_reg);
> +	}
> +
> +	/* Program DPHY data lanes timings */
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		I915_WRITE(DPHY_DATA_TIMING_PARAM(port),
> +			   intel_dsi->dphy_data_lane_reg);
> +
> +		/* shadow register inside display core */
> +		I915_WRITE(DSI_DATA_TIMING_PARAM(port),
> +			   intel_dsi->dphy_data_lane_reg);
> +	}
>   }
>   
>   static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
> index d7c0c599b52d..12b758ebefce 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.h
> +++ b/drivers/gpu/drm/i915/intel_dsi.h
> @@ -85,6 +85,9 @@ struct intel_dsi {
>   	u32 port_bits;
>   	u32 bw_timer;
>   	u32 dphy_reg;
> +
> +	/* data lanes dphy timing */
> +	u32 dphy_data_lane_reg;
>   	u32 video_frmt_cfg_bits;
>   	u16 lp_byte_clk;
>   
> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> index 5e16b4c5f531..3035422aa0d6 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> @@ -510,6 +510,111 @@ int intel_dsi_vbt_get_modes(struct intel_dsi *intel_dsi)
>   	return 1;
>   }
>   
> +#define ICL_PREPARE_CNT_MAX	0x7
> +#define ICL_CLK_ZERO_CNT_MAX	0xf
> +#define ICL_TRAIL_CNT_MAX	0x7
> +#define ICL_TCLK_PRE_CNT_MAX	0x3
> +#define ICL_TCLK_POST_CNT_MAX	0x7
> +#define ICL_HS_ZERO_CNT_MAX	0xf
> +#define ICL_EXIT_ZERO_CNT_MAX	0x7
> +
> +static void icl_dphy_param_init(struct intel_dsi *intel_dsi)
> +{
> +	struct drm_device *dev = intel_dsi->base.base.dev;
> +	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct mipi_config *mipi_config = dev_priv->vbt.dsi.config;
> +	u32 tlpx_ns;
> +	u32 prepare_cnt, exit_zero_cnt, clk_zero_cnt, trail_cnt;
> +	u32 ths_prepare_ns, tclk_trail_ns;
> +	u32 hs_zero_cnt;
> +	u32 tclk_pre_cnt, tclk_post_cnt;
> +
> +	tlpx_ns = intel_dsi_tlpx_ns(intel_dsi);
> +
> +	tclk_trail_ns = max(mipi_config->tclk_trail, mipi_config->ths_trail);
> +	ths_prepare_ns = max(mipi_config->ths_prepare,
> +			     mipi_config->tclk_prepare);
> +
> +	/*
> +	 * prepare cnt in escape clocks
> +	 * this field represents a hexadecimal value with a precision
> +	 * of 1.2 – i.e. the most significant bit is the integer
> +	 * and the least significant 2 bits are fraction bits.
> +	 * so, the field can represent a range of 0.25 to 1.75
> +	 */
> +	prepare_cnt = DIV_ROUND_UP(ths_prepare_ns * 4, tlpx_ns);
> +	if (prepare_cnt > ICL_PREPARE_CNT_MAX) {
> +		DRM_DEBUG_KMS("prepare_cnt out of range (%d)\n", prepare_cnt);
> +		prepare_cnt = ICL_PREPARE_CNT_MAX;
> +	}
> +
> +	/* clk zero count in escape clocks */
> +	clk_zero_cnt = DIV_ROUND_UP(mipi_config->tclk_prepare_clkzero -
> +				    ths_prepare_ns, tlpx_ns);
> +	if (clk_zero_cnt > ICL_CLK_ZERO_CNT_MAX) {
> +		DRM_DEBUG_KMS("clk_zero_cnt out of range (%d)\n", clk_zero_cnt);
> +		clk_zero_cnt = ICL_CLK_ZERO_CNT_MAX;
> +	}
> +
> +	/* trail cnt in escape clocks*/
> +	trail_cnt = DIV_ROUND_UP(tclk_trail_ns, tlpx_ns);
> +	if (trail_cnt > ICL_TRAIL_CNT_MAX) {
> +		DRM_DEBUG_KMS("trail_cnt out of range (%d)\n", trail_cnt);
> +		trail_cnt = ICL_TRAIL_CNT_MAX;
> +	}
> +
> +	/* tclk pre count in escape clocks */
> +	tclk_pre_cnt = DIV_ROUND_UP(mipi_config->tclk_pre, tlpx_ns);
> +	if (tclk_pre_cnt > ICL_TCLK_PRE_CNT_MAX) {
> +		DRM_DEBUG_KMS("tclk_pre_cnt out of range (%d)\n", tclk_pre_cnt);
> +		tclk_pre_cnt = ICL_TCLK_PRE_CNT_MAX;
> +	}
> +
> +	/* tclk post count in escape clocks */
> +	tclk_post_cnt = DIV_ROUND_UP(mipi_config->tclk_post, tlpx_ns);
> +	if (tclk_post_cnt > ICL_TCLK_POST_CNT_MAX) {
> +		DRM_DEBUG_KMS("tclk_post_cnt out of range (%d)\n", tclk_post_cnt);
> +		tclk_post_cnt = ICL_TCLK_POST_CNT_MAX;
> +	}
> +
> +	/* hs zero cnt in escape clocks */
> +	hs_zero_cnt = DIV_ROUND_UP(mipi_config->ths_prepare_hszero -
> +				   ths_prepare_ns, tlpx_ns);
> +	if (hs_zero_cnt > ICL_HS_ZERO_CNT_MAX) {
> +		DRM_DEBUG_KMS("hs_zero_cnt out of range (%d)\n", hs_zero_cnt);
> +		hs_zero_cnt = ICL_HS_ZERO_CNT_MAX;
> +	}
> +
> +	/* hs exit zero cnt in escape clocks */
> +	exit_zero_cnt = DIV_ROUND_UP(mipi_config->ths_exit, tlpx_ns);
> +	if (exit_zero_cnt > ICL_EXIT_ZERO_CNT_MAX) {
> +		DRM_DEBUG_KMS("exit_zero_cnt out of range (%d)\n", exit_zero_cnt);
> +		exit_zero_cnt = ICL_EXIT_ZERO_CNT_MAX;
> +	}
> +
> +	/* clock lane dphy timings */
> +	intel_dsi->dphy_reg = (CLK_PREPARE_OVERRIDE |
> +			       CLK_PREPARE(prepare_cnt) |
> +			       CLK_ZERO_OVERRIDE |
> +			       CLK_ZERO(clk_zero_cnt) |
> +			       CLK_PRE_OVERRIDE |
> +			       CLK_PRE(tclk_pre_cnt) |
> +			       CLK_POST_OVERRIDE |
> +			       CLK_POST(tclk_post_cnt) |
> +			       CLK_TRAIL_OVERRIDE |
> +			       CLK_TRAIL(trail_cnt));
> +
> +	/* data lanes dphy timings */
> +	intel_dsi->dphy_data_lane_reg = (HS_PREPARE_OVERRIDE |
> +					 HS_PREPARE(prepare_cnt) |
> +					 HS_ZERO_OVERRIDE |
> +					 HS_ZERO(hs_zero_cnt) |
> +					 HS_TRAIL_OVERRIDE |
> +					 HS_TRAIL(trail_cnt) |
> +					 HS_EXIT_OVERRIDE |
> +					 HS_EXIT(exit_zero_cnt));
> +}
> +
>   static void vlv_dphy_param_init(struct intel_dsi *intel_dsi)
>   {
>   	struct drm_device *dev = intel_dsi->base.base.dev;
> @@ -743,7 +848,10 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   
>   	intel_dsi->burst_mode_ratio = burst_mode_ratio;
>   
> -	vlv_dphy_param_init(intel_dsi);
> +	if (IS_ICELAKE(dev_priv))
> +		icl_dphy_param_init(intel_dsi);
> +	else
> +		vlv_dphy_param_init(intel_dsi);
>   
>   	DRM_DEBUG_KMS("Pclk %d\n", intel_dsi->pclk);
>   	DRM_DEBUG_KMS("Pixel overlap %d\n", intel_dsi->pixel_overlap);

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

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

* Re: [PATCH v7 07/23] drm/i915/icl: Program TA_TIMING_PARAM registers
  2018-10-15 14:27 ` [PATCH v7 07/23] drm/i915/icl: Program TA_TIMING_PARAM registers Jani Nikula
@ 2018-10-20 10:59   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-20 10:59 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch programs D-PHY timing parameters for the
> bus turn around flow(in escape clocks) only if dsi link
> frequency <=800 MHz using DPHY_TA_TIMING_PARAM and its
> identical register DSI_TA_TIMING_PARAM (inside DSI
> Controller within the Display Core).
>
> v2: Changes
>      - Don't use KHz() macro (Ville/Jani N)
>      - Use newly defined bitfields
>
> v3 by Jani:
>   - Use intel_dsi_bitrate() in favor of a new field
>   - Remove redundant parens

v3 changes looks fine to me.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/icl_dsi.c | 21 +++++++++++++++++++++
>   1 file changed, 21 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 9602b6532028..f9df3a7fa66b 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -309,6 +309,27 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
>   		I915_WRITE(DSI_DATA_TIMING_PARAM(port),
>   			   intel_dsi->dphy_data_lane_reg);
>   	}
> +
> +	/*
> +	 * If DSI link operating at or below an 800 MHz,
> +	 * TA_SURE should be override and programmed to
> +	 * a value '0' inside TA_PARAM_REGISTERS otherwise
> +	 * leave all fields at HW default values.
> +	 */
> +	if (intel_dsi_bitrate(intel_dsi) <= 800000) {
> +		for_each_dsi_port(port, intel_dsi->ports) {
> +			tmp = I915_READ(DPHY_TA_TIMING_PARAM(port));
> +			tmp &= ~TA_SURE_MASK;
> +			tmp |= TA_SURE_OVERRIDE | TA_SURE(0);
> +			I915_WRITE(DPHY_TA_TIMING_PARAM(port), tmp);
> +
> +			/* shadow register inside display core */
> +			tmp = I915_READ(DSI_TA_TIMING_PARAM(port));
> +			tmp &= ~TA_SURE_MASK;
> +			tmp |= TA_SURE_OVERRIDE | TA_SURE(0);
> +			I915_WRITE(DSI_TA_TIMING_PARAM(port), tmp);
> +		}
> +	}
>   }
>   
>   static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)

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

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

* Re: [PATCH v7 10/23] drm/i915/icl: Define TRANS_DSI_FUNC_CONF register
  2018-10-15 14:27 ` [PATCH v7 10/23] drm/i915/icl: Define TRANS_DSI_FUNC_CONF register Jani Nikula
@ 2018-10-20 11:08   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-20 11:08 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch defines transcoder function configuration
> registers and its bitfields for both DSI ports.
> Used while programming/enabling DSI transcoder.
>
> v2: Changes (Jani N)
>      - Define _SHIFT and _MASK for bitfields
>      - Define values for fields already shifted in place
>
> v3 by Jani:
>   - Fix _SHIFT fields copy-pasted from _MASK
>   - Indentation fixes
>   - Reduce S3D orientation to single macro
>   - Wrap a macro parameter in parens

v3 changes looks fine.

Regards,
Madhav

> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_reg.h | 45 +++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 45 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 436ff68b6b18..b065e4ca0b45 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -10379,6 +10379,51 @@ enum skl_power_gate {
>   #define  TA_GET_MASK			(0xf << 0)
>   #define  TA_GET_SHIFT			0
>   
> +/* DSI transcoder configuration */
> +#define _DSI_TRANS_FUNC_CONF_0		0x6b030
> +#define _DSI_TRANS_FUNC_CONF_1		0x6b830
> +#define DSI_TRANS_FUNC_CONF(tc)		_MMIO_DSI(tc,	\
> +						  _DSI_TRANS_FUNC_CONF_0,\
> +						  _DSI_TRANS_FUNC_CONF_1)
> +#define  OP_MODE_MASK			(0x3 << 28)
> +#define  OP_MODE_SHIFT			28
> +#define  CMD_MODE_NO_GATE		(0x0 << 28)
> +#define  CMD_MODE_TE_GATE		(0x1 << 28)
> +#define  VIDEO_MODE_SYNC_EVENT		(0x2 << 28)
> +#define  VIDEO_MODE_SYNC_PULSE		(0x3 << 28)
> +#define  LINK_READY			(1 << 20)
> +#define  PIX_FMT_MASK			(0x3 << 16)
> +#define  PIX_FMT_SHIFT			16
> +#define  PIX_FMT_RGB565			(0x0 << 16)
> +#define  PIX_FMT_RGB666_PACKED		(0x1 << 16)
> +#define  PIX_FMT_RGB666_LOOSE		(0x2 << 16)
> +#define  PIX_FMT_RGB888			(0x3 << 16)
> +#define  PIX_FMT_RGB101010		(0x4 << 16)
> +#define  PIX_FMT_RGB121212		(0x5 << 16)
> +#define  PIX_FMT_COMPRESSED		(0x6 << 16)
> +#define  BGR_TRANSMISSION		(1 << 15)
> +#define  PIX_VIRT_CHAN(x)		((x) << 12)
> +#define  PIX_VIRT_CHAN_MASK		(0x3 << 12)
> +#define  PIX_VIRT_CHAN_SHIFT		12
> +#define  PIX_BUF_THRESHOLD_MASK		(0x3 << 10)
> +#define  PIX_BUF_THRESHOLD_SHIFT	10
> +#define  PIX_BUF_THRESHOLD_1_4		(0x0 << 10)
> +#define  PIX_BUF_THRESHOLD_1_2		(0x1 << 10)
> +#define  PIX_BUF_THRESHOLD_3_4		(0x2 << 10)
> +#define  PIX_BUF_THRESHOLD_FULL		(0x3 << 10)
> +#define  CONTINUOUS_CLK_MASK		(0x3 << 8)
> +#define  CONTINUOUS_CLK_SHIFT		8
> +#define  CLK_ENTER_LP_AFTER_DATA	(0x0 << 8)
> +#define  CLK_HS_OR_LP			(0x2 << 8)
> +#define  CLK_HS_CONTINUOUS		(0x3 << 8)
> +#define  LINK_CALIBRATION_MASK		(0x3 << 4)
> +#define  LINK_CALIBRATION_SHIFT		4
> +#define  CALIBRATION_DISABLED		(0x0 << 4)
> +#define  CALIBRATION_ENABLED_INITIAL_ONLY	(0x2 << 4)
> +#define  CALIBRATION_ENABLED_INITIAL_PERIODIC	(0x3 << 4)
> +#define  S3D_ORIENTATION_LANDSCAPE	(1 << 1)
> +#define  EOTP_DISABLED			(1 << 0)
> +
>   /* bits 31:0 */
>   #define _MIPIA_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb084)
>   #define _MIPIC_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb884)

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

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

* Re: [PATCH v7 11/23] drm/i915/icl: Configure DSI transcoders
  2018-10-15 14:27 ` [PATCH v7 11/23] drm/i915/icl: Configure DSI transcoders Jani Nikula
@ 2018-10-20 11:16   ` Madhav Chauhan
  2018-10-22  6:52     ` Jani Nikula
  0 siblings, 1 reply; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-20 11:16 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:57 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch programs DSI operation mode, pixel format,
> BGR info, link calibration etc for the DSI transcoder.
> This patch also extract BGR info of the DSI panel from
> VBT and save it inside struct intel_dsi which used for
> configuring DSI transcoder.
>
> v2: Rebase
> v3: Use newly defined bitfields.
>
> v4 by Jani:
>   - Use intel_dsi_bitrate()
>   - Make bgr_enabled bool
>   - Use 0 instead of 0x0
>   - Replace DRM_ERROR() with MISSING_CASE() on pixel format and video mode
>   - Use is_vid_mode()

v4 changes are fine.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/icl_dsi.c       | 87 +++++++++++++++++++++++++++++++++++-
>   drivers/gpu/drm/i915/intel_dsi.h     |  3 ++
>   drivers/gpu/drm/i915/intel_dsi_vbt.c |  1 +
>   3 files changed, 90 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 407c3065d08d..756c75d0c86c 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -27,7 +27,7 @@
>   
>   #include "intel_dsi.h"
>   
> -static enum transcoder __attribute__((unused)) dsi_port_to_transcoder(enum port port)
> +static enum transcoder dsi_port_to_transcoder(enum port port)
>   {
>   	if (port == PORT_A)
>   		return TRANSCODER_DSI_0;
> @@ -340,6 +340,88 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
>   	}
>   }
>   
> +static void gen11_dsi_configure_transcoder(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;
> +	enum transcoder dsi_trans;
> +
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +		tmp = I915_READ(DSI_TRANS_FUNC_CONF(dsi_trans));
> +
> +		if (intel_dsi->eotp_pkt)
> +			tmp &= ~EOTP_DISABLED;
> +		else
> +			tmp |= EOTP_DISABLED;
> +
> +		/* enable link calibration if freq > 1.5Gbps */
> +		if (intel_dsi_bitrate(intel_dsi) >= 1500 * 1000) {
> +			tmp &= ~LINK_CALIBRATION_MASK;
> +			tmp |= CALIBRATION_ENABLED_INITIAL_ONLY;
> +		}
> +
> +		/* configure continuous clock */
> +		tmp &= ~CONTINUOUS_CLK_MASK;
> +		if (intel_dsi->clock_stop)
> +			tmp |= CLK_ENTER_LP_AFTER_DATA;
> +		else
> +			tmp |= CLK_HS_CONTINUOUS;
> +
> +		/* configure buffer threshold limit to minimum */
> +		tmp &= ~PIX_BUF_THRESHOLD_MASK;
> +		tmp |= PIX_BUF_THRESHOLD_1_4;
> +
> +		/* set virtual channel to '0' */
> +		tmp &= ~PIX_VIRT_CHAN_MASK;
> +		tmp |= PIX_VIRT_CHAN(0);
> +
> +		/* program BGR transmission */
> +		if (intel_dsi->bgr_enabled)
> +			tmp |= BGR_TRANSMISSION;
> +
> +		/* select pixel format */
> +		tmp &= ~PIX_FMT_MASK;
> +		switch (intel_dsi->pixel_format) {
> +		default:
> +			MISSING_CASE(intel_dsi->pixel_format);
> +			/* fallthrough */
> +		case MIPI_DSI_FMT_RGB565:
> +			tmp |= PIX_FMT_RGB565;
> +			break;
> +		case MIPI_DSI_FMT_RGB666_PACKED:
> +			tmp |= PIX_FMT_RGB666_PACKED;
> +			break;
> +		case MIPI_DSI_FMT_RGB666:
> +			tmp |= PIX_FMT_RGB666_LOOSE;
> +			break;
> +		case MIPI_DSI_FMT_RGB888:
> +			tmp |= PIX_FMT_RGB888;
> +			break;
> +		}
> +
> +		/* program DSI operation mode */
> +		if (is_vid_mode(intel_dsi)) {
> +			tmp &= ~OP_MODE_MASK;
> +			switch (intel_dsi->video_mode_format) {
> +			default:
> +				MISSING_CASE(intel_dsi->video_mode_format);
> +				/* fallthrough */
> +			case VIDEO_MODE_NON_BURST_WITH_SYNC_EVENTS:
> +				tmp |= VIDEO_MODE_SYNC_EVENT;
> +				break;
> +			case VIDEO_MODE_NON_BURST_WITH_SYNC_PULSE:
> +				tmp |= VIDEO_MODE_SYNC_PULSE;
> +				break;
> +			}
> +		}
> +
> +		I915_WRITE(DSI_TRANS_FUNC_CONF(dsi_trans), tmp);
> +	}
> +}
> +
>   static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
>   {
>   	/* step 4a: power up all lanes of the DDI used by DSI */
> @@ -356,6 +438,9 @@ static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
>   
>   	/* setup D-PHY timings */
>   	gen11_dsi_setup_dphy_timings(encoder);
> +
> +	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
> +	gen11_dsi_configure_transcoder(encoder);
>   }
>   
>   static void __attribute__((unused))
> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
> index 12b758ebefce..14567929de9a 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.h
> +++ b/drivers/gpu/drm/i915/intel_dsi.h
> @@ -81,6 +81,9 @@ struct intel_dsi {
>   	u16 dcs_backlight_ports;
>   	u16 dcs_cabc_ports;
>   
> +	/* RGB or BGR */
> +	bool bgr_enabled;
> +
>   	u8 pixel_overlap;
>   	u32 port_bits;
>   	u32 bw_timer;
> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> index 3035422aa0d6..cca071406c25 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
> @@ -805,6 +805,7 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>   	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
>   	intel_dsi->video_frmt_cfg_bits =
>   		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
> +	intel_dsi->bgr_enabled = mipi_config->rgb_flip;
>   
>   	/* Starting point, adjusted depending on dual link and burst mode */
>   	intel_dsi->pclk = mode->clock;

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

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

* Re: [PATCH v7 11/23] drm/i915/icl: Configure DSI transcoders
  2018-10-20 11:16   ` Madhav Chauhan
@ 2018-10-22  6:52     ` Jani Nikula
  0 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-22  6:52 UTC (permalink / raw)
  To: Madhav Chauhan, intel-gfx

On Sat, 20 Oct 2018, Madhav Chauhan <madhav.chauhan@intel.com> wrote:
> On 10/15/2018 7:57 PM, Jani Nikula wrote:
>> From: Madhav Chauhan <madhav.chauhan@intel.com>
>>
>> This patch programs DSI operation mode, pixel format,
>> BGR info, link calibration etc for the DSI transcoder.
>> This patch also extract BGR info of the DSI panel from
>> VBT and save it inside struct intel_dsi which used for
>> configuring DSI transcoder.
>>
>> v2: Rebase
>> v3: Use newly defined bitfields.
>>
>> v4 by Jani:
>>   - Use intel_dsi_bitrate()
>>   - Make bgr_enabled bool
>>   - Use 0 instead of 0x0
>>   - Replace DRM_ERROR() with MISSING_CASE() on pixel format and video mode
>>   - Use is_vid_mode()
>
> v4 changes are fine.

Thanks for double-checking; I think just confirming that is fine. Pushed
up to and including this patch.

BR,
Jani.



>
> Regards,
> Madhav
>
>>
>> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>   drivers/gpu/drm/i915/icl_dsi.c       | 87 +++++++++++++++++++++++++++++++++++-
>>   drivers/gpu/drm/i915/intel_dsi.h     |  3 ++
>>   drivers/gpu/drm/i915/intel_dsi_vbt.c |  1 +
>>   3 files changed, 90 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
>> index 407c3065d08d..756c75d0c86c 100644
>> --- a/drivers/gpu/drm/i915/icl_dsi.c
>> +++ b/drivers/gpu/drm/i915/icl_dsi.c
>> @@ -27,7 +27,7 @@
>>   
>>   #include "intel_dsi.h"
>>   
>> -static enum transcoder __attribute__((unused)) dsi_port_to_transcoder(enum port port)
>> +static enum transcoder dsi_port_to_transcoder(enum port port)
>>   {
>>   	if (port == PORT_A)
>>   		return TRANSCODER_DSI_0;
>> @@ -340,6 +340,88 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
>>   	}
>>   }
>>   
>> +static void gen11_dsi_configure_transcoder(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;
>> +	enum transcoder dsi_trans;
>> +
>> +	for_each_dsi_port(port, intel_dsi->ports) {
>> +		dsi_trans = dsi_port_to_transcoder(port);
>> +		tmp = I915_READ(DSI_TRANS_FUNC_CONF(dsi_trans));
>> +
>> +		if (intel_dsi->eotp_pkt)
>> +			tmp &= ~EOTP_DISABLED;
>> +		else
>> +			tmp |= EOTP_DISABLED;
>> +
>> +		/* enable link calibration if freq > 1.5Gbps */
>> +		if (intel_dsi_bitrate(intel_dsi) >= 1500 * 1000) {
>> +			tmp &= ~LINK_CALIBRATION_MASK;
>> +			tmp |= CALIBRATION_ENABLED_INITIAL_ONLY;
>> +		}
>> +
>> +		/* configure continuous clock */
>> +		tmp &= ~CONTINUOUS_CLK_MASK;
>> +		if (intel_dsi->clock_stop)
>> +			tmp |= CLK_ENTER_LP_AFTER_DATA;
>> +		else
>> +			tmp |= CLK_HS_CONTINUOUS;
>> +
>> +		/* configure buffer threshold limit to minimum */
>> +		tmp &= ~PIX_BUF_THRESHOLD_MASK;
>> +		tmp |= PIX_BUF_THRESHOLD_1_4;
>> +
>> +		/* set virtual channel to '0' */
>> +		tmp &= ~PIX_VIRT_CHAN_MASK;
>> +		tmp |= PIX_VIRT_CHAN(0);
>> +
>> +		/* program BGR transmission */
>> +		if (intel_dsi->bgr_enabled)
>> +			tmp |= BGR_TRANSMISSION;
>> +
>> +		/* select pixel format */
>> +		tmp &= ~PIX_FMT_MASK;
>> +		switch (intel_dsi->pixel_format) {
>> +		default:
>> +			MISSING_CASE(intel_dsi->pixel_format);
>> +			/* fallthrough */
>> +		case MIPI_DSI_FMT_RGB565:
>> +			tmp |= PIX_FMT_RGB565;
>> +			break;
>> +		case MIPI_DSI_FMT_RGB666_PACKED:
>> +			tmp |= PIX_FMT_RGB666_PACKED;
>> +			break;
>> +		case MIPI_DSI_FMT_RGB666:
>> +			tmp |= PIX_FMT_RGB666_LOOSE;
>> +			break;
>> +		case MIPI_DSI_FMT_RGB888:
>> +			tmp |= PIX_FMT_RGB888;
>> +			break;
>> +		}
>> +
>> +		/* program DSI operation mode */
>> +		if (is_vid_mode(intel_dsi)) {
>> +			tmp &= ~OP_MODE_MASK;
>> +			switch (intel_dsi->video_mode_format) {
>> +			default:
>> +				MISSING_CASE(intel_dsi->video_mode_format);
>> +				/* fallthrough */
>> +			case VIDEO_MODE_NON_BURST_WITH_SYNC_EVENTS:
>> +				tmp |= VIDEO_MODE_SYNC_EVENT;
>> +				break;
>> +			case VIDEO_MODE_NON_BURST_WITH_SYNC_PULSE:
>> +				tmp |= VIDEO_MODE_SYNC_PULSE;
>> +				break;
>> +			}
>> +		}
>> +
>> +		I915_WRITE(DSI_TRANS_FUNC_CONF(dsi_trans), tmp);
>> +	}
>> +}
>> +
>>   static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
>>   {
>>   	/* step 4a: power up all lanes of the DDI used by DSI */
>> @@ -356,6 +438,9 @@ static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
>>   
>>   	/* setup D-PHY timings */
>>   	gen11_dsi_setup_dphy_timings(encoder);
>> +
>> +	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
>> +	gen11_dsi_configure_transcoder(encoder);
>>   }
>>   
>>   static void __attribute__((unused))
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>> index 12b758ebefce..14567929de9a 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>> @@ -81,6 +81,9 @@ struct intel_dsi {
>>   	u16 dcs_backlight_ports;
>>   	u16 dcs_cabc_ports;
>>   
>> +	/* RGB or BGR */
>> +	bool bgr_enabled;
>> +
>>   	u8 pixel_overlap;
>>   	u32 port_bits;
>>   	u32 bw_timer;
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_vbt.c b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> index 3035422aa0d6..cca071406c25 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_vbt.c
>> @@ -805,6 +805,7 @@ bool intel_dsi_vbt_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   	intel_dsi->bw_timer = mipi_config->dbi_bw_timer;
>>   	intel_dsi->video_frmt_cfg_bits =
>>   		mipi_config->bta_enabled ? DISABLE_VIDEO_BTA : 0;
>> +	intel_dsi->bgr_enabled = mipi_config->rgb_flip;
>>   
>>   	/* Starting point, adjusted depending on dual link and burst mode */
>>   	intel_dsi->pclk = mode->clock;
>

-- 
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] 59+ messages in thread

* Re: [PATCH v7 12/23] drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers
  2018-10-15 14:28 ` [PATCH v7 12/23] drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers Jani Nikula
@ 2018-10-22 11:01   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-22 11:01 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:58 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch defines TRANS_DDI_FUNC_CTL and TRANS_DDI_FUNC_CTL2
> registers and their bitfields for DSI. These registers are used
> for enabling port sync mode, input pipe select, data lane width
> configuration etc.
>
> v2: Changes:
>      - Remove redundant extra line
>      - Correct some of bitfield definition
>
> v3 by Jani:
>   - Move DSI transcoder offsets to GEN11_FEATURES

v3 changes looks fine.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_pci.c |  3 +++
>   drivers/gpu/drm/i915/i915_reg.h | 17 +++++++++++++++++
>   2 files changed, 20 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
> index 0a05cc7ace14..b86b735a8634 100644
> --- a/drivers/gpu/drm/i915/i915_pci.c
> +++ b/drivers/gpu/drm/i915/i915_pci.c
> @@ -595,6 +595,9 @@ static const struct intel_device_info intel_cannonlake_info = {
>   
>   #define GEN11_FEATURES \
>   	GEN10_FEATURES, \
> +	.trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
> +			   TRANSCODER_C_OFFSET, TRANSCODER_EDP_OFFSET, \
> +			   TRANSCODER_DSI0_OFFSET, TRANSCODER_DSI1_OFFSET}, \
>   	GEN(11), \
>   	.ddb_size = 2048, \
>   	.has_logical_ring_elsq = 1
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index b065e4ca0b45..79e633c1e9ad 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -4066,6 +4066,8 @@ enum {
>   #define TRANSCODER_C_OFFSET 0x62000
>   #define CHV_TRANSCODER_C_OFFSET 0x63000
>   #define TRANSCODER_EDP_OFFSET 0x6f000
> +#define TRANSCODER_DSI0_OFFSET	0x6b000
> +#define TRANSCODER_DSI1_OFFSET	0x6b800
>   
>   #define _MMIO_TRANS2(pipe, reg) _MMIO(dev_priv->info.trans_offsets[(pipe)] - \
>   	dev_priv->info.trans_offsets[TRANSCODER_A] + (reg) + \
> @@ -9021,6 +9023,8 @@ enum skl_power_gate {
>   #define _TRANS_DDI_FUNC_CTL_B		0x61400
>   #define _TRANS_DDI_FUNC_CTL_C		0x62400
>   #define _TRANS_DDI_FUNC_CTL_EDP		0x6F400
> +#define _TRANS_DDI_FUNC_CTL_DSI0	0x6b400
> +#define _TRANS_DDI_FUNC_CTL_DSI1	0x6bc00
>   #define TRANS_DDI_FUNC_CTL(tran) _MMIO_TRANS2(tran, _TRANS_DDI_FUNC_CTL_A)
>   
>   #define  TRANS_DDI_FUNC_ENABLE		(1 << 31)
> @@ -9058,6 +9062,19 @@ enum skl_power_gate {
>   					| TRANS_DDI_HDMI_SCRAMBLER_RESET_FREQ \
>   					| TRANS_DDI_HDMI_SCRAMBLING)
>   
> +#define _TRANS_DDI_FUNC_CTL2_A		0x60404
> +#define _TRANS_DDI_FUNC_CTL2_B		0x61404
> +#define _TRANS_DDI_FUNC_CTL2_C		0x62404
> +#define _TRANS_DDI_FUNC_CTL2_EDP	0x6f404
> +#define _TRANS_DDI_FUNC_CTL2_DSI0	0x6b404
> +#define _TRANS_DDI_FUNC_CTL2_DSI1	0x6bc04
> +#define TRANS_DDI_FUNC_CTL2(tran)	_MMIO_TRANS2(tran, \
> +						     _TRANS_DDI_FUNC_CTL2_A)
> +#define  PORT_SYNC_MODE_ENABLE			(1 << 4)
> +#define  PORT_SYNC_MODE_MASTER_SELECT(x)	((x) < 0)
> +#define  PORT_SYNC_MODE_MASTER_SELECT_MASK	(0x7 << 0)
> +#define  PORT_SYNC_MODE_MASTER_SELECT_SHIFT	0
> +
>   /* DisplayPort Transport Control */
>   #define _DP_TP_CTL_A			0x64040
>   #define _DP_TP_CTL_B			0x64140

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

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

* Re: [PATCH v7 13/23] drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers
  2018-10-15 14:28 ` [PATCH v7 13/23] drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers Jani Nikula
@ 2018-10-22 11:05   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-22 11:05 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:58 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch select input PIPE for DSI, data lanes width,
> enable port sync mode and wait for DSI link to become ready.
>
> v2 by Jani:
>   - Use MISSING_CASE with fallthrough instead of DRM_ERROR
>   - minor stylistic changes

v2 changes are good.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/icl_dsi.c | 64 +++++++++++++++++++++++++++++++++++++++---
>   1 file changed, 60 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 756c75d0c86c..87d5e6435791 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -340,10 +340,14 @@ static void gen11_dsi_setup_dphy_timings(struct intel_encoder *encoder)
>   	}
>   }
>   
> -static void gen11_dsi_configure_transcoder(struct intel_encoder *encoder)
> +static void
> +gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
> +			       const struct intel_crtc_state *pipe_config)
>   {
>   	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>   	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> +	struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->base.crtc);
> +	enum pipe pipe = intel_crtc->pipe;
>   	u32 tmp;
>   	enum port port;
>   	enum transcoder dsi_trans;
> @@ -420,9 +424,61 @@ static void gen11_dsi_configure_transcoder(struct intel_encoder *encoder)
>   
>   		I915_WRITE(DSI_TRANS_FUNC_CONF(dsi_trans), tmp);
>   	}
> +
> +	/* enable port sync mode if dual link */
> +	if (intel_dsi->dual_link) {
> +		for_each_dsi_port(port, intel_dsi->ports) {
> +			dsi_trans = dsi_port_to_transcoder(port);
> +			tmp = I915_READ(TRANS_DDI_FUNC_CTL2(dsi_trans));
> +			tmp |= PORT_SYNC_MODE_ENABLE;
> +			I915_WRITE(TRANS_DDI_FUNC_CTL2(dsi_trans), tmp);
> +		}
> +
> +		//TODO: configure DSS_CTL1
> +	}
> +
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +
> +		/* select data lane width */
> +		tmp = I915_READ(TRANS_DDI_FUNC_CTL(dsi_trans));
> +		tmp &= ~DDI_PORT_WIDTH_MASK;
> +		tmp |= DDI_PORT_WIDTH(intel_dsi->lane_count);
> +
> +		/* select input pipe */
> +		tmp &= ~TRANS_DDI_EDP_INPUT_MASK;
> +		switch (pipe) {
> +		default:
> +			MISSING_CASE(pipe);
> +			/* fallthrough */
> +		case PIPE_A:
> +			tmp |= TRANS_DDI_EDP_INPUT_A_ON;
> +			break;
> +		case PIPE_B:
> +			tmp |= TRANS_DDI_EDP_INPUT_B_ONOFF;
> +			break;
> +		case PIPE_C:
> +			tmp |= TRANS_DDI_EDP_INPUT_C_ONOFF;
> +			break;
> +		}
> +
> +		/* enable DDI buffer */
> +		tmp |= TRANS_DDI_FUNC_ENABLE;
> +		I915_WRITE(TRANS_DDI_FUNC_CTL(dsi_trans), tmp);
> +	}
> +
> +	/* wait for link ready */
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +		if (wait_for_us((I915_READ(DSI_TRANS_FUNC_CONF(dsi_trans)) &
> +				LINK_READY), 2500))
> +			DRM_ERROR("DSI link not ready\n");
> +	}
>   }
>   
> -static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
> +static void
> +gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder,
> +			      const struct intel_crtc_state *pipe_config)
>   {
>   	/* step 4a: power up all lanes of the DDI used by DSI */
>   	gen11_dsi_power_up_lanes(encoder);
> @@ -440,7 +496,7 @@ static void gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder)
>   	gen11_dsi_setup_dphy_timings(encoder);
>   
>   	/* Step (4h, 4i, 4j, 4k): Configure transcoder */
> -	gen11_dsi_configure_transcoder(encoder);
> +	gen11_dsi_configure_transcoder(encoder, pipe_config);
>   }
>   
>   static void __attribute__((unused))
> @@ -455,5 +511,5 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
>   	gen11_dsi_program_esc_clk_div(encoder);
>   
>   	/* step4: enable DSI port and DPHY */
> -	gen11_dsi_enable_port_and_phy(encoder);
> +	gen11_dsi_enable_port_and_phy(encoder, pipe_config);
>   }

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

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

* Re: [PATCH v7 14/23] drm/i915/icl: Define DSI transcoder timing registers
  2018-10-15 14:28 ` [PATCH v7 14/23] drm/i915/icl: Define DSI transcoder timing registers Jani Nikula
@ 2018-10-22 11:10   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-22 11:10 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:58 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch defines registers and bitfields used for
> programming DSI transcoder's horizontal and vertical
> timings.
>
> v2: Remove TRANS_TIMING_SHIFT definition
>
> v3 by Jani:
>   - Group macros by transcoder

Separation of DSI0 and DSI 1 specific registers are fine.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_reg.h | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 79e633c1e9ad..c4270ca26a11 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -4061,6 +4061,20 @@ enum {
>   #define _VSYNCSHIFT_B	0x61028
>   #define _PIPE_MULT_B	0x6102c
>   
> +/* DSI 0 timing regs */
> +#define _HTOTAL_DSI0		0x6b000
> +#define _HSYNC_DSI0		0x6b008
> +#define _VTOTAL_DSI0		0x6b00c
> +#define _VSYNC_DSI0		0x6b014
> +#define _VSYNCSHIFT_DSI0	0x6b028
> +
> +/* DSI 1 timing regs */
> +#define _HTOTAL_DSI1		0x6b800
> +#define _HSYNC_DSI1		0x6b808
> +#define _VTOTAL_DSI1		0x6b80c
> +#define _VSYNC_DSI1		0x6b814
> +#define _VSYNCSHIFT_DSI1	0x6b828
> +
>   #define TRANSCODER_A_OFFSET 0x60000
>   #define TRANSCODER_B_OFFSET 0x61000
>   #define TRANSCODER_C_OFFSET 0x62000

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

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

* Re: [PATCH v7 15/23] drm/i915/icl: Configure DSI transcoder timings
  2018-10-15 14:28 ` [PATCH v7 15/23] drm/i915/icl: Configure DSI transcoder timings Jani Nikula
@ 2018-10-22 11:15   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-22 11:15 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:58 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> As part of DSI enable sequence, transcoder timings
> (horizontal & vertical) need to be set so that transcoder
> will generate the stream output as per those timings.
> This patch set required transcoder timings as per BSPEC.
>
> v2: Remove TRANS_TIMING_SHIFT usage
>
> v3 by Jani:
>   - Rebase
>   - Reduce temp variable use
>   - Checkpatch fix

v3 changes are fine.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/icl_dsi.c | 118 +++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 118 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index 87d5e6435791..f6ed57b28676 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -477,6 +477,121 @@ gen11_dsi_configure_transcoder(struct intel_encoder *encoder,
>   }
>   
>   static void
> +gen11_dsi_set_transcoder_timings(struct intel_encoder *encoder,
> +				 const struct intel_crtc_state *pipe_config)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> +	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> +	const struct drm_display_mode *adjusted_mode =
> +					&pipe_config->base.adjusted_mode;
> +	enum port port;
> +	enum transcoder dsi_trans;
> +	/* horizontal timings */
> +	u16 htotal, hactive, hsync_start, hsync_end, hsync_size;
> +	u16 hfront_porch, hback_porch;
> +	/* vertical timings */
> +	u16 vtotal, vactive, vsync_start, vsync_end, vsync_shift;
> +
> +	hactive = adjusted_mode->crtc_hdisplay;
> +	htotal = adjusted_mode->crtc_htotal;
> +	hsync_start = adjusted_mode->crtc_hsync_start;
> +	hsync_end = adjusted_mode->crtc_hsync_end;
> +	hsync_size  = hsync_end - hsync_start;
> +	hfront_porch = (adjusted_mode->crtc_hsync_start -
> +			adjusted_mode->crtc_hdisplay);
> +	hback_porch = (adjusted_mode->crtc_htotal -
> +		       adjusted_mode->crtc_hsync_end);
> +	vactive = adjusted_mode->crtc_vdisplay;
> +	vtotal = adjusted_mode->crtc_vtotal;
> +	vsync_start = adjusted_mode->crtc_vsync_start;
> +	vsync_end = adjusted_mode->crtc_vsync_end;
> +	vsync_shift = hsync_start - htotal / 2;
> +
> +	if (intel_dsi->dual_link) {
> +		hactive /= 2;
> +		if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK)
> +			hactive += intel_dsi->pixel_overlap;
> +		htotal /= 2;
> +	}
> +
> +	/* minimum hactive as per bspec: 256 pixels */
> +	if (adjusted_mode->crtc_hdisplay < 256)
> +		DRM_ERROR("hactive is less then 256 pixels\n");
> +
> +	/* if RGB666 format, then hactive must be multiple of 4 pixels */
> +	if (intel_dsi->pixel_format == MIPI_DSI_FMT_RGB666 && hactive % 4 != 0)
> +		DRM_ERROR("hactive pixels are not multiple of 4\n");
> +
> +	/* program TRANS_HTOTAL register */
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +		I915_WRITE(HTOTAL(dsi_trans),
> +			   (hactive - 1) | ((htotal - 1) << 16));
> +	}
> +
> +	/* TRANS_HSYNC register to be programmed only for video mode */
> +	if (intel_dsi->operation_mode == INTEL_DSI_VIDEO_MODE) {
> +		if (intel_dsi->video_mode_format ==
> +		    VIDEO_MODE_NON_BURST_WITH_SYNC_PULSE) {
> +			/* BSPEC: hsync size should be atleast 16 pixels */
> +			if (hsync_size < 16)
> +				DRM_ERROR("hsync size < 16 pixels\n");
> +		}
> +
> +		if (hback_porch < 16)
> +			DRM_ERROR("hback porch < 16 pixels\n");
> +
> +		if (intel_dsi->dual_link) {
> +			hsync_start /= 2;
> +			hsync_end /= 2;
> +		}
> +
> +		for_each_dsi_port(port, intel_dsi->ports) {
> +			dsi_trans = dsi_port_to_transcoder(port);
> +			I915_WRITE(HSYNC(dsi_trans),
> +				   (hsync_start - 1) | ((hsync_end - 1) << 16));
> +		}
> +	}
> +
> +	/* program TRANS_VTOTAL register */
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +		/*
> +		 * FIXME: Programing this by assuming progressive mode, since
> +		 * non-interlaced info from VBT is not saved inside
> +		 * struct drm_display_mode.
> +		 * For interlace mode: program required pixel minus 2
> +		 */
> +		I915_WRITE(VTOTAL(dsi_trans),
> +			   (vactive - 1) | ((vtotal - 1) << 16));
> +	}
> +
> +	if (vsync_end < vsync_start || vsync_end > vtotal)
> +		DRM_ERROR("Invalid vsync_end value\n");
> +
> +	if (vsync_start < vactive)
> +		DRM_ERROR("vsync_start less than vactive\n");
> +
> +	/* program TRANS_VSYNC register */
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +		I915_WRITE(VSYNC(dsi_trans),
> +			   (vsync_start - 1) | ((vsync_end - 1) << 16));
> +	}
> +
> +	/*
> +	 * FIXME: It has to be programmed only for interlaced
> +	 * modes. Put the check condition here once interlaced
> +	 * info available as described above.
> +	 * program TRANS_VSYNCSHIFT register
> +	 */
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +		I915_WRITE(VSYNCSHIFT(dsi_trans), vsync_shift);
> +	}
> +}
> +
> +static void
>   gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder,
>   			      const struct intel_crtc_state *pipe_config)
>   {
> @@ -512,4 +627,7 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
>   
>   	/* step4: enable DSI port and DPHY */
>   	gen11_dsi_enable_port_and_phy(encoder, pipe_config);
> +
> +	/* step6c: configure transcoder timings */
> +	gen11_dsi_set_transcoder_timings(encoder, pipe_config);
>   }

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

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

* Re: [PATCH v7 16/23] drm/i915/icl: Define TRANS_CONF register for DSI
  2018-10-15 14:28 ` [PATCH v7 16/23] drm/i915/icl: Define TRANS_CONF register for DSI Jani Nikula
@ 2018-10-22 11:25   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-22 11:25 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:58 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch defines TRANS_CONF registers for DSI ports
> 0 and 1. Bitfields of these registers used for enabling
> and reading the current state of transcoder.
>
> v2: Add blank line before comment
>
> v3 by Jani:
>   - Move DSI specific .pipe_offsets to GEN11_FEATURES
>   - Macro placement and comment juggling

Changes looks ok.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_pci.c | 3 +++
>   drivers/gpu/drm/i915/i915_reg.h | 8 ++++++++
>   2 files changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
> index b86b735a8634..44e745921ac1 100644
> --- a/drivers/gpu/drm/i915/i915_pci.c
> +++ b/drivers/gpu/drm/i915/i915_pci.c
> @@ -595,6 +595,9 @@ static const struct intel_device_info intel_cannonlake_info = {
>   
>   #define GEN11_FEATURES \
>   	GEN10_FEATURES, \
> +	.pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
> +			  PIPE_C_OFFSET, PIPE_EDP_OFFSET, \
> +			  PIPE_DSI0_OFFSET, PIPE_DSI1_OFFSET }, \
>   	.trans_offsets = { TRANSCODER_A_OFFSET, TRANSCODER_B_OFFSET, \
>   			   TRANSCODER_C_OFFSET, TRANSCODER_EDP_OFFSET, \
>   			   TRANSCODER_DSI0_OFFSET, TRANSCODER_DSI1_OFFSET}, \
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index c4270ca26a11..839e681bd3a4 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -5652,6 +5652,10 @@ enum {
>    */
>   #define PIPE_EDP_OFFSET	0x7f000
>   
> +/* ICL DSI 0 and 1 */
> +#define PIPE_DSI0_OFFSET	0x7b000
> +#define PIPE_DSI1_OFFSET	0x7b800
> +
>   #define _MMIO_PIPE2(pipe, reg) _MMIO(dev_priv->info.pipe_offsets[pipe] - \
>   	dev_priv->info.pipe_offsets[PIPE_A] + (reg) + \
>   	dev_priv->info.display_mmio_offset)
> @@ -6240,6 +6244,10 @@ enum {
>   #define _DSPBOFFSET		(dev_priv->info.display_mmio_offset + 0x711A4)
>   #define _DSPBSURFLIVE		(dev_priv->info.display_mmio_offset + 0x711AC)
>   
> +/* ICL DSI 0 and 1 */
> +#define _PIPEDSI0CONF		0x7b008
> +#define _PIPEDSI1CONF		0x7b808
> +
>   /* Sprite A control */
>   #define _DVSACNTR		0x72180
>   #define   DVS_ENABLE		(1 << 31)

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

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

* Re: [PATCH v7 17/23] drm/i915/icl: Enable DSI transcoders
  2018-10-15 14:28 ` [PATCH v7 17/23] drm/i915/icl: Enable DSI transcoders Jani Nikula
@ 2018-10-22 11:27   ` Madhav Chauhan
  0 siblings, 0 replies; 59+ messages in thread
From: Madhav Chauhan @ 2018-10-22 11:27 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx

On 10/15/2018 7:58 PM, Jani Nikula wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch enables DSI transcoders by writing to
> TRANS_CONF registers and wait for its state to be enabled.
>
> v2 by Jani:
>   - Rebase

Patch *17-23* changes like rebase, alignment, comments style changes looks
good to me.

Regards,
Madhav

>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/i915/icl_dsi.c | 25 +++++++++++++++++++++++++
>   1 file changed, 25 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c
> index f6ed57b28676..216a1753d246 100644
> --- a/drivers/gpu/drm/i915/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/icl_dsi.c
> @@ -591,6 +591,28 @@ gen11_dsi_set_transcoder_timings(struct intel_encoder *encoder,
>   	}
>   }
>   
> +static void gen11_dsi_enable_transcoder(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);
> +	enum port port;
> +	enum transcoder dsi_trans;
> +	u32 tmp;
> +
> +	for_each_dsi_port(port, intel_dsi->ports) {
> +		dsi_trans = dsi_port_to_transcoder(port);
> +		tmp = I915_READ(PIPECONF(dsi_trans));
> +		tmp |= PIPECONF_ENABLE;
> +		I915_WRITE(PIPECONF(dsi_trans), tmp);
> +
> +		/* wait for transcoder to be enabled */
> +		if (intel_wait_for_register(dev_priv, PIPECONF(dsi_trans),
> +					    I965_PIPECONF_ACTIVE,
> +					    I965_PIPECONF_ACTIVE, 10))
> +			DRM_ERROR("DSI transcoder not enabled\n");
> +	}
> +}
> +
>   static void
>   gen11_dsi_enable_port_and_phy(struct intel_encoder *encoder,
>   			      const struct intel_crtc_state *pipe_config)
> @@ -630,4 +652,7 @@ gen11_dsi_pre_enable(struct intel_encoder *encoder,
>   
>   	/* step6c: configure transcoder timings */
>   	gen11_dsi_set_transcoder_timings(encoder, pipe_config);
> +
> +	/* step6d: enable dsi transcoder */
> +	gen11_dsi_enable_transcoder(encoder);
>   }

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

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

* Re: [PATCH v7 18/23] drm/i915/icl: Define DSI panel programming registers
  2018-10-15 14:28 ` [PATCH v7 18/23] drm/i915/icl: Define DSI panel programming registers Jani Nikula
@ 2018-10-22 12:33   ` Jani Nikula
  0 siblings, 0 replies; 59+ messages in thread
From: Jani Nikula @ 2018-10-22 12:33 UTC (permalink / raw)
  To: intel-gfx

On Mon, 15 Oct 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> From: Madhav Chauhan <madhav.chauhan@intel.com>
>
> This patch defines DSI_CMD_RXCTL, DSI_CMD_TXCTL registers,
> bitfields, masks and macros used for configuring DSI panel.
>
> v2: Define remaining bitfields
>
> v3 by Jani:
>  - Alignment fix
>
> Signed-off-by: Madhav Chauhan <madhav.chauhan@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Pushed up to and including this patch.

BR,
Jani.

> ---
>  drivers/gpu/drm/i915/i915_reg.h | 38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 839e681bd3a4..fe6b42037ded 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -10463,6 +10463,44 @@ enum skl_power_gate {
>  #define  S3D_ORIENTATION_LANDSCAPE	(1 << 1)
>  #define  EOTP_DISABLED			(1 << 0)
>  
> +#define _DSI_CMD_RXCTL_0		0x6b0d4
> +#define _DSI_CMD_RXCTL_1		0x6b8d4
> +#define DSI_CMD_RXCTL(tc)		_MMIO_DSI(tc,	\
> +						  _DSI_CMD_RXCTL_0,\
> +						  _DSI_CMD_RXCTL_1)
> +#define  READ_UNLOADS_DW		(1 << 16)
> +#define  RECEIVED_UNASSIGNED_TRIGGER	(1 << 15)
> +#define  RECEIVED_ACKNOWLEDGE_TRIGGER	(1 << 14)
> +#define  RECEIVED_TEAR_EFFECT_TRIGGER	(1 << 13)
> +#define  RECEIVED_RESET_TRIGGER		(1 << 12)
> +#define  RECEIVED_PAYLOAD_WAS_LOST	(1 << 11)
> +#define  RECEIVED_CRC_WAS_LOST		(1 << 10)
> +#define  NUMBER_RX_PLOAD_DW_MASK	(0xff << 0)
> +#define  NUMBER_RX_PLOAD_DW_SHIFT	0
> +
> +#define _DSI_CMD_TXCTL_0		0x6b0d0
> +#define _DSI_CMD_TXCTL_1		0x6b8d0
> +#define DSI_CMD_TXCTL(tc)		_MMIO_DSI(tc,	\
> +						  _DSI_CMD_TXCTL_0,\
> +						  _DSI_CMD_TXCTL_1)
> +#define  KEEP_LINK_IN_HS		(1 << 24)
> +#define  FREE_HEADER_CREDIT_MASK	(0x1f << 8)
> +#define  FREE_HEADER_CREDIT_SHIFT	0x8
> +#define  FREE_PLOAD_CREDIT_MASK		(0xff << 0)
> +#define  FREE_PLOAD_CREDIT_SHIFT	0
> +#define  MAX_HEADER_CREDIT		0x10
> +#define  MAX_PLOAD_CREDIT		0x40
> +
> +#define _DSI_LP_MSG_0			0x6b0d8
> +#define _DSI_LP_MSG_1			0x6b8d8
> +#define DSI_LP_MSG(tc)			_MMIO_DSI(tc,	\
> +						  _DSI_LP_MSG_0,\
> +						  _DSI_LP_MSG_1)
> +#define  LPTX_IN_PROGRESS		(1 << 17)
> +#define  LINK_IN_ULPS			(1 << 16)
> +#define  LINK_ULPS_TYPE_LP11		(1 << 8)
> +#define  LINK_ENTER_ULPS		(1 << 0)
> +
>  /* bits 31:0 */
>  #define _MIPIA_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb084)
>  #define _MIPIC_DBI_BW_CTRL		(dev_priv->mipi_mmio_base + 0xb884)

-- 
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] 59+ messages in thread

end of thread, other threads:[~2018-10-22 12:33 UTC | newest]

Thread overview: 59+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-15 14:27 [PATCH v7 00/23] drm/i915/icl: dsi enabling Jani Nikula
2018-10-15 14:27 ` [PATCH v7 01/23] drm/i915: make encoder enable and disable hooks optional Jani Nikula
2018-10-16  6:36   ` Madhav Chauhan
2018-10-16 12:41   ` [PATCH] " Jani Nikula
2018-10-15 14:27 ` [PATCH v7 02/23] drm/i915/dsi: refactor bitrate calculations in intel_dsi_vbt_init() Jani Nikula
2018-10-16  7:53   ` Madhav Chauhan
2018-10-16 12:44     ` Jani Nikula
2018-10-16 12:53       ` Madhav Chauhan
2018-10-15 14:27 ` [PATCH v7 03/23] drm/i915/dsi: abstract dphy parameter init Jani Nikula
2018-10-16  8:29   ` Madhav Chauhan
2018-10-18 12:20     ` Jani Nikula
2018-10-15 14:27 ` [PATCH v7 04/23] drm/i915/dsi: abstract intel_dsi_tlpx_ns() Jani Nikula
2018-10-16  8:39   ` Madhav Chauhan
2018-10-16 13:06     ` Jani Nikula
2018-10-20 10:38       ` Madhav Chauhan
2018-10-15 14:27 ` [PATCH v7 05/23] drm/i915/icl: Make common DSI functions available Jani Nikula
2018-10-16  9:04   ` Madhav Chauhan
2018-10-16 12:39     ` Jani Nikula
2018-10-16 12:56       ` Madhav Chauhan
2018-10-15 14:27 ` [PATCH v7 06/23] drm/i915/icl: Program DSI clock and data lane timing params Jani Nikula
2018-10-20 10:57   ` Madhav Chauhan
2018-10-15 14:27 ` [PATCH v7 07/23] drm/i915/icl: Program TA_TIMING_PARAM registers Jani Nikula
2018-10-20 10:59   ` Madhav Chauhan
2018-10-15 14:27 ` [PATCH v7 08/23] drm/i915/icl: Get DSI transcoder for a given port Jani Nikula
2018-10-15 14:27 ` [PATCH v7 09/23] drm/i915/icl: Add macros for MMIO of DSI transcoder registers Jani Nikula
2018-10-15 14:27 ` [PATCH v7 10/23] drm/i915/icl: Define TRANS_DSI_FUNC_CONF register Jani Nikula
2018-10-20 11:08   ` Madhav Chauhan
2018-10-15 14:27 ` [PATCH v7 11/23] drm/i915/icl: Configure DSI transcoders Jani Nikula
2018-10-20 11:16   ` Madhav Chauhan
2018-10-22  6:52     ` Jani Nikula
2018-10-15 14:28 ` [PATCH v7 12/23] drm/i915/icl: Define TRANS_DDI_FUNC_CTL DSI registers Jani Nikula
2018-10-22 11:01   ` Madhav Chauhan
2018-10-15 14:28 ` [PATCH v7 13/23] drm/i915/icl: Program TRANS_DDI_FUNC_CTL registers Jani Nikula
2018-10-22 11:05   ` Madhav Chauhan
2018-10-15 14:28 ` [PATCH v7 14/23] drm/i915/icl: Define DSI transcoder timing registers Jani Nikula
2018-10-22 11:10   ` Madhav Chauhan
2018-10-15 14:28 ` [PATCH v7 15/23] drm/i915/icl: Configure DSI transcoder timings Jani Nikula
2018-10-22 11:15   ` Madhav Chauhan
2018-10-15 14:28 ` [PATCH v7 16/23] drm/i915/icl: Define TRANS_CONF register for DSI Jani Nikula
2018-10-22 11:25   ` Madhav Chauhan
2018-10-15 14:28 ` [PATCH v7 17/23] drm/i915/icl: Enable DSI transcoders Jani Nikula
2018-10-22 11:27   ` Madhav Chauhan
2018-10-15 14:28 ` [PATCH v7 18/23] drm/i915/icl: Define DSI panel programming registers Jani Nikula
2018-10-22 12:33   ` Jani Nikula
2018-10-15 14:28 ` [PATCH v7 19/23] drm/i915/icl: Set max return packet size for DSI panel Jani Nikula
2018-10-15 14:28 ` [PATCH v7 20/23] drm/i915/icl: Power on " Jani Nikula
2018-10-15 14:28 ` [PATCH v7 21/23] drm/i915/icl: Wait for header/payload credits release Jani Nikula
2018-10-15 14:28 ` [PATCH v7 22/23] drm/i915/icl: Ensure all cmd/data disptached to panel Jani Nikula
2018-10-15 14:28 ` [PATCH v7 23/23] drm/i915/icl: Turn ON panel backlight Jani Nikula
2018-10-15 14:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling Patchwork
2018-10-15 14:51 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-10-15 15:09 ` ✗ Fi.CI.BAT: failure " Patchwork
2018-10-16 13:36 ` [PATCH v7 00/23] " Jani Nikula
2018-10-16 13:45 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/icl: dsi enabling (rev2) Patchwork
2018-10-16 13:52 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-10-16 14:05 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-16 16:12 ` ✗ Fi.CI.IGT: failure " Patchwork
2018-10-17 10:51 ` ✓ Fi.CI.BAT: success " Patchwork
2018-10-17 13:29 ` ✓ Fi.CI.IGT: " Patchwork

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.