drm/i915/dsi: sequence execution tweaks
Subsystems (2)
cover drm/i915/dsi: sequence execution tweaks
Run the power/backlight on/off sequences, log about not running tear on/off sequences, add a consistency check, and improve the debug logging.
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: run power on/off 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 | 45 ++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 6 deletions(-)
Signature · 6 lines
2.1.4 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
PATCH 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
@@ -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
PATCH 2/7 drm/i915/dsi: add debug logging to element execution
In reply to Jani NikulaJust 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
@@ -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
PATCH 3/7 drm/i915/dsi: add skip functions for spi and pmic elements
In reply to Jani NikulaIn sequence block v3 these are gracefully skipped anyway, but add the functions so we can have some debug breadcrumbs.
--- 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
@@ -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 +14 ; +} +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
PATCH 4/7 drm/i915/dsi: run power on/off sequences in panel prepare/unprepare hooks
In reply to Jani NikulaBased 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
@@ -459,6 +459,7 @@ 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_INIT_OTP );return 0 ;
@@ -466,6 +467,7 @@ static int vbt_panel_prepare(struct drm_panel *panel)static int vbt_panel_unprepare (struct drm_panel *panel) { +generic_exec_sequence (panel,MIPI_SEQ_POWER_OFF );generic_exec_sequence (panel,MIPI_SEQ_DEASSERT_RESET );return 0 ;
Signature · 6 lines
2.1.4 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
PATCH 5/7 drm/i915/dsi: run backlight on/off sequences in panel enable/disable hooks
In reply to Jani NikulaBased 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
@@ -476,12 +476,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
PATCH 6/7 drm/i915/bios: log about presence of DSI sequences we do not run
In reply to Jani NikulaLeave 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
@@ -991,6 +991,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
PATCH 7/7 drm/i915/dsi: double check element parsing against size if present
In reply to Jani NikulaBe 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
@@ -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
Patchwork
CI✗ Ro.CI.BAT: failure for drm/i915/dsi: sequence execution tweaks
In reply to Jani Nikula== Series Details ==
== Series Details ==
Series: drm/i915/dsi: sequence execution tweaks
URL : https://patchwork.freedesktop.org/series/7234/
State : failure
== Summary ==
Series 7234v1 drm/i915/dsi: sequence execution tweaks
http://patchwork.freedesktop.org/api/1.0/series/7234/revisions/1/mbox
Test kms_flip:
Subgroup basic-flip-vs-wf_vblank:
pass -> FAIL (ro-ivb2-i7-3770)
pass -> FAIL (ro-byt-n2820)
fail -> PASS (ro-hsw-i3-4010u)ro-bdw-i5-5250u total:219 pass:181 dwarn:0 dfail:0 fail:0 skip:38 ro-bdw-i7-5557U total:219 pass:206 dwarn:0 dfail:0 fail:0 skip:13 ro-bdw-i7-5600u total:219 pass:187 dwarn:0 dfail:0 fail:0 skip:32 ro-bsw-n3050 total:219 pass:175 dwarn:0 dfail:0 fail:2 skip:42 ro-byt-n2820 total:218 pass:173 dwarn:0 dfail:0 fail:4 skip:41 ro-hsw-i3-4010u total:218 pass:193 dwarn:0 dfail:0 fail:0 skip:25 ro-hsw-i7-4770r total:219 pass:194 dwarn:0 dfail:0 fail:0 skip:25 ro-ilk-i7-620lm total:219 pass:151 dwarn:0 dfail:0 fail:1 skip:67 ro-ilk1-i5-650 total:214 pass:151 dwarn:0 dfail:0 fail:2 skip:61 ro-ivb-i7-3770 total:219 pass:183 dwarn:0 dfail:0 fail:0 skip:36 ro-ivb2-i7-3770 total:219 pass:186 dwarn:0 dfail:0 fail:1 skip:32 ro-skl-i7-6700hq total:214 pass:189 dwarn:0 dfail:0 fail:0 skip:25 ro-snb-i7-2620M total:219 pass:177 dwarn:0 dfail:0 fail:1 skip:41
Results at /archive/results/CI_IGT_test/RO_Patchwork_909/
d381724 drm-intel-nightly: 2016y-05m-16d-12h-14m-04s UTC integration manifest 2075953 drm/i915/dsi: double check element parsing against size if present a158996 drm/i915/bios: log about presence of DSI sequences we do not run f5ee3b8 drm/i915/dsi: run backlight on/off sequences in panel enable/disable hooks 5e59831 drm/i915/dsi: run power on/off sequences in panel prepare/unprepare hooks 408b6d6 drm/i915/dsi: add skip functions for spi and pmic elements ff3e4b9 drm/i915/dsi: add debug logging to element execution
39c0e84 drm/i915/dsi: don't debug log "missing" sequences
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx