Skip to contentSkip to conversation

drm/i915: clean up dsi sequences

PATCH In review Jani Nikula 3 participants 11 messages Sep 19, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

v2 cover drm/i915: clean up dsi sequences

v2 of an old series, addressing issues pointed out by Ville.

BR,
Jani.

Jani Nikula (7):
drm/i915/dsi: don't debug log "missing" sequences drm/i915/dsi: add debug logging to element execution drm/i915/dsi: add skip functions for spi and pmic elements drm/i915/dsi: update reset and power sequences in panel
prepare/unprepare hooks
drm/i915/dsi: run backlight on/off sequences in panel enable/disable
hooks
drm/i915/bios: log about presence of DSI sequences we do not run drm/i915/dsi: double check element parsing against size if present

 drivers/gpu/drm/i915/intel_bios.c          |  4 +++
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 48 +++++++++++++++++++++++++-----
 2 files changed, 45 insertions(+), 7 deletions(-)
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#1 lore raw

PATCH v2 1/7 drm/i915/dsi: don't debug log "missing" sequences

This is not interesting. They are not "missing", they are just not part of the VBT sequences for the panel.

---
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c +1 -4
index cd154ce6b6c1..a537c71cdcc6 100644
@@ -385,11 +385,8 @@ static void generic_exec_sequence(struct drm_panel *panel, enum mipi_seq seq_id)
 		return;
 
 	data = dev_priv->vbt.dsi.sequence[seq_id];
-	if (!data) {
-		DRM_DEBUG_KMS("MIPI sequence %d - %s not available\n",
-			      seq_id, sequence_name(seq_id));
+	if (!data)
 		return;
-	}
 
 	WARN_ON(*data != seq_id);
 
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#2 lore raw

PATCH v2 2/7 drm/i915/dsi: add debug logging to element execution

In reply to Jani Nikula

Just simple breadcrumbs for now. While at it, rename the i2c skip function.

---
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c +10 -2
index a537c71cdcc6..89f77a142521 100644
@@ -126,6 +126,8 @@ static const u8 *mipi_exec_send_packet(struct intel_dsi *intel_dsi,
 	u16 len;
 	enum port port;
 
+	DRM_DEBUG_KMS("\n");
+
 	flags = *data++;
 	type = *data++;
 
@@ -199,6 +201,8 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
 {
 	u32 delay = *((const u32 *) data);
 
+	DRM_DEBUG_KMS("\n");
+
 	usleep_range(delay, delay + 10);
 	data += 4;
 
@@ -307,6 +311,8 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
 	u8 gpio_source, gpio_index;
 	bool value;
 
+	DRM_DEBUG_KMS("\n");
+
 	if (dev_priv->vbt.dsi.seq_version >= 3)
 		data++;
 
@@ -331,8 +337,10 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
 	return data;
 }
 
-static const u8 *mipi_exec_i2c_skip(struct intel_dsi *intel_dsi, const u8 *data)
+static const u8 *mipi_exec_i2c(struct intel_dsi *intel_dsi, const u8 *data)
 {
+	DRM_DEBUG_KMS("Skipping I2C element execution\n");
+
 	return data + *(data + 6) + 7;
 }
 
@@ -342,7 +350,7 @@ static const fn_mipi_elem_exec exec_elem[] = {
 	[MIPI_SEQ_ELEM_SEND_PKT] = mipi_exec_send_packet,
 	[MIPI_SEQ_ELEM_DELAY] = mipi_exec_delay,
 	[MIPI_SEQ_ELEM_GPIO] = mipi_exec_gpio,
-	[MIPI_SEQ_ELEM_I2C] = mipi_exec_i2c_skip,
+	[MIPI_SEQ_ELEM_I2C] = mipi_exec_i2c,
 };
 
 /*
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#3 lore raw

PATCH v2 3/7 drm/i915/dsi: add skip functions for spi and pmic elements

In reply to Jani Nikula

In sequence block v3 these are gracefully skipped anyway, but add the functions so we can have some debug breadcrumbs.

v2: the pmic block is 15 bytes (Ville)

---
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c +16 -0
index 89f77a142521..29156995a265 100644
@@ -344,6 +344,20 @@ static const u8 *mipi_exec_i2c(struct intel_dsi *intel_dsi, const u8 *data)
 	return data + *(data + 6) + 7;
 }
 
+static const u8 *mipi_exec_spi(struct intel_dsi *intel_dsi, const u8 *data)
+{
+	DRM_DEBUG_KMS("Skipping SPI element execution\n");
+
+	return data + *(data + 5) + 6;
+}
+
+static const u8 *mipi_exec_pmic(struct intel_dsi *intel_dsi, const u8 *data)
+{
+	DRM_DEBUG_KMS("Skipping PMIC element execution\n");
+
+	return data + 15;
+}
+
 typedef const u8 * (*fn_mipi_elem_exec)(struct intel_dsi *intel_dsi,
 					const u8 *data);
 static const fn_mipi_elem_exec exec_elem[] = {
@@ -351,6 +365,8 @@ static const fn_mipi_elem_exec exec_elem[] = {
 	[MIPI_SEQ_ELEM_DELAY] = mipi_exec_delay,
 	[MIPI_SEQ_ELEM_GPIO] = mipi_exec_gpio,
 	[MIPI_SEQ_ELEM_I2C] = mipi_exec_i2c,
+	[MIPI_SEQ_ELEM_SPI] = mipi_exec_spi,
+	[MIPI_SEQ_ELEM_PMIC] = mipi_exec_pmic,
 };
 
 /*
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#4 lore raw

PATCH v2 4/7 drm/i915/dsi: update reset and power sequences in panel prepare/unprepare hooks

In reply to Jani Nikula

Based on the documentation alone, it's anyone's guess when exactly we should be running these sequences. Add power on/off sequences where they feel logical and update assert/deassert reset. The drm panel hooks don't currently offer us more granularity anyway.

v2: update assert/deassert reset as well (Ville)

---
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c +4 -1
index 29156995a265..2c5d14eb7851 100644
@@ -459,6 +459,8 @@ static void generic_exec_sequence(struct drm_panel *panel, enum mipi_seq seq_id)
 static int vbt_panel_prepare(struct drm_panel *panel)
 {
 	generic_exec_sequence(panel, MIPI_SEQ_ASSERT_RESET);
+	generic_exec_sequence(panel, MIPI_SEQ_POWER_ON);
+	generic_exec_sequence(panel, MIPI_SEQ_DEASSERT_RESET);
 	generic_exec_sequence(panel, MIPI_SEQ_INIT_OTP);
 
 	return 0;
@@ -466,7 +468,8 @@ static int vbt_panel_prepare(struct drm_panel *panel)
 
 static int vbt_panel_unprepare(struct drm_panel *panel)
 {
-	generic_exec_sequence(panel, MIPI_SEQ_DEASSERT_RESET);
+	generic_exec_sequence(panel, MIPI_SEQ_ASSERT_RESET);
+	generic_exec_sequence(panel, MIPI_SEQ_POWER_OFF);
 
 	return 0;
 }
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#5 lore raw

PATCH v2 5/7 drm/i915/dsi: run backlight on/off sequences in panel enable/disable hooks

In reply to Jani Nikula

Based on the documentation alone, it's anyone's guess when exactly we should be running these sequences. Add them where it feels logical. The drm panel hooks don't currently offer us more granularity anyway.

---
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c +2 -0
index 2c5d14eb7851..24953f9f7e1d 100644
@@ -477,12 +477,14 @@ static int vbt_panel_unprepare(struct drm_panel *panel)
 static int vbt_panel_enable(struct drm_panel *panel)
 {
 	generic_exec_sequence(panel, MIPI_SEQ_DISPLAY_ON);
+	generic_exec_sequence(panel, MIPI_SEQ_BACKLIGHT_ON);
 
 	return 0;
 }
 
 static int vbt_panel_disable(struct drm_panel *panel)
 {
+	generic_exec_sequence(panel, MIPI_SEQ_BACKLIGHT_OFF);
 	generic_exec_sequence(panel, MIPI_SEQ_DISPLAY_OFF);
 
 	return 0;
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#6 lore raw

PATCH v2 6/7 drm/i915/bios: log about presence of DSI sequences we do not run

In reply to Jani Nikula

Leave behind some debugging clues in case some panels don't work properly.

---
 drivers/gpu/drm/i915/intel_bios.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/gpu/drm/i915/intel_bios.c +4 -0
index c6e69e4cfa83..83667e8cdd6b 100644
@@ -996,6 +996,10 @@ parse_mipi_sequence(struct drm_i915_private *dev_priv,
 			goto err;
 		}
 
+		/* Log about presence of sequences we won't run. */
+		if (seq_id == MIPI_SEQ_TEAR_ON || seq_id == MIPI_SEQ_TEAR_OFF)
+			DRM_DEBUG_KMS("Unsupported sequence %u\n", seq_id);
+
 		dev_priv->vbt.dsi.sequence[seq_id] = data + index;
 
 		if (sequence->version >= 3)
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#7 lore raw

PATCH v2 7/7 drm/i915/dsi: double check element parsing against size if present

In reply to Jani Nikula

Be a little paranoid in case the specs change or something.

---
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 8 ++++++++
 1 file changed, 8 insertions(+)
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c +8 -0
index 24953f9f7e1d..9f279a3d0f74 100644
@@ -441,7 +441,15 @@ static void generic_exec_sequence(struct drm_panel *panel, enum mipi_seq seq_id)
 			operation_size = *data++;
 
 		if (mipi_elem_exec) {
+			const u8 *next = data + operation_size;
+
 			data = mipi_elem_exec(intel_dsi, data);
+
+			/* Consistency check if we have size. */
+			if (operation_size && data != next) {
+				DRM_ERROR("Inconsistent operation size\n");
+				return;
+			}
 		} else if (operation_size) {
 			/* We have size, skip. */
 			DRM_DEBUG_KMS("Unsupported MIPI operation byte %u\n",
Signature · 6 lines
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#8 lore raw

✗ Fi.CI.BAT: warning for drm/i915: clean up dsi sequences

In reply to Jani Nikula
== Series Details ==

== Series Details ==

Series: drm/i915: clean up dsi sequences
URL : https://patchwork.freedesktop.org/series/12640/
State : warning

== Summary ==

Series 12640v1 drm/i915: clean up dsi sequences
https://patchwork.freedesktop.org/api/1.0/series/12640/revisions/1/mbox/

Test kms_pipe_crc_basic:

        Subgroup hang-read-crc-pipe-a:
                dmesg-warn -> PASS       (fi-skl-6700k)
        Subgroup nonblocking-crc-pipe-b-frame-sequence:
                pass       -> SKIP       (fi-hsw-4770r)
fi-bdw-5557u     total:244  pass:229  dwarn:0   dfail:0   fail:0   skip:15 
fi-bsw-n3050     total:244  pass:202  dwarn:0   dfail:0   fail:0   skip:42 
fi-byt-n2820     total:244  pass:208  dwarn:0   dfail:0   fail:1   skip:35 
fi-hsw-4770k     total:244  pass:226  dwarn:0   dfail:0   fail:0   skip:18 
fi-hsw-4770r     total:244  pass:221  dwarn:0   dfail:0   fail:0   skip:23 
fi-ivb-3520m     total:244  pass:219  dwarn:0   dfail:0   fail:0   skip:25 
fi-ivb-3770      total:244  pass:207  dwarn:0   dfail:0   fail:0   skip:37 
fi-skl-6260u     total:244  pass:230  dwarn:0   dfail:0   fail:0   skip:14 
fi-skl-6700hq    total:244  pass:221  dwarn:0   dfail:0   fail:1   skip:22 
fi-skl-6700k     total:244  pass:219  dwarn:1   dfail:0   fail:0   skip:24 
fi-skl-6770hq    total:244  pass:228  dwarn:1   dfail:0   fail:1   skip:14 
fi-snb-2520m     total:244  pass:208  dwarn:0   dfail:0   fail:0   skip:36 
fi-snb-2600      total:244  pass:207  dwarn:0   dfail:0   fail:0   skip:37 

Results at /archive/results/CI_IGT_test/Patchwork_2554/

0d6fa72a8c18ec6ab4dbabf5202b8d1cad840e04 drm-intel-nightly: 2016y-09m-19d-09h-28m-11s UTC integration manifest 13c9cdf drm/i915/dsi: double check element parsing against size if present
57a905b drm/i915/bios: log about presence of DSI sequences we do not run
c979437 drm/i915/dsi: run backlight on/off sequences in panel enable/disable hooks
248085c drm/i915/dsi: update reset and power sequences in panel prepare/unprepare hooks c34bc49 drm/i915/dsi: add skip functions for spi and pmic elements
c82ca7c2 drm/i915/dsi: add debug logging to element execution
b23a5c0 drm/i915/dsi: don't debug log "missing" sequences

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reviewed-by on the v2 series
#9 lore raw
In reply to Jani Nikula
Quoted 1 line · Jani Nikula

v2 of an old series, addressing issues pointed out by Ville.

Entire series looks reasonable. Spec is vague, so hard to be 100% sure.

Quoted 21 lines

BR,
Jani.

Jani Nikula (7):
drm/i915/dsi: don't debug log "missing" sequences drm/i915/dsi: add debug logging to element execution drm/i915/dsi: add skip functions for spi and pmic elements drm/i915/dsi: update reset and power sequences in panel
prepare/unprepare hooks
drm/i915/dsi: run backlight on/off sequences in panel enable/disable
hooks
drm/i915/bios: log about presence of DSI sequences we do not run drm/i915/dsi: double check element parsing against size if present

 drivers/gpu/drm/i915/intel_bios.c          |  4 +++
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 48 +++++++++++++++++++++++++-----
 2 files changed, 45 insertions(+), 7 deletions(-)
Signature · 1 line
2.1.4
Signature · 6 lines
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
#10 lore raw
Quoted 4 lines · Ville Syrjälä
Quoted 1 line · Jani Nikula

v2 of an old series, addressing issues pointed out by Ville.

Entire series looks reasonable. Spec is vague, so hard to be 100% sure.

We're about to find out, I pushed the lot. Thanks for the review.

BR,
Jani.

Quoted 24 lines
Quoted 21 lines

BR,
Jani.

Jani Nikula (7):
drm/i915/dsi: don't debug log "missing" sequences drm/i915/dsi: add debug logging to element execution drm/i915/dsi: add skip functions for spi and pmic elements drm/i915/dsi: update reset and power sequences in panel
prepare/unprepare hooks
drm/i915/dsi: run backlight on/off sequences in panel enable/disable
hooks
drm/i915/bios: log about presence of DSI sequences we do not run drm/i915/dsi: double check element parsing against size if present

 drivers/gpu/drm/i915/intel_bios.c          |  4 +++
 drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 48 +++++++++++++++++++++++++-----
 2 files changed, 45 insertions(+), 7 deletions(-)
Signature · 1 line
2.1.4
Signature · 5 lines
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx