From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: intel-gfx <intel-gfx@lists.freedesktop.org>,
Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: Re: [Intel-gfx] [PATCH v2] drm/i915/dsi: Use unconditional msleep() instead of intel_dsi_msleep()
Date: Fri, 28 Apr 2023 14:13:16 +0300 [thread overview]
Message-ID: <ZEuqTNaEiFGnVwPy@intel.com> (raw)
In-Reply-To: <20230425194441.68086-1-hdegoede@redhat.com>
On Tue, Apr 25, 2023 at 09:44:41PM +0200, Hans de Goede wrote:
> The intel_dsi_msleep() helper skips sleeping if the MIPI-sequences have
> a version of 3 or newer and the panel is in vid-mode.
>
> This is based on the big comment around line 730 which starts with
> "Panel enable/disable sequences from the VBT spec.", where
> the "v3 video mode seq" column does not have any wait t# entries.
>
> Checking the Windows driver shows that it does always honor
> the VBT delays independent of the version of the VBT sequences.
>
> Commit 6fdb335f1c9c ("drm/i915/dsi: Use unconditional msleep for
> the panel_on_delay when there is no reset-deassert MIPI-sequence")
> switched to a direct msleep() instead of intel_dsi_msleep()
> when there is no MIPI_SEQ_DEASSERT_RESET sequence, to fix
> the panel on an Acer Aspire Switch 10 E SW3-016 not turning on.
>
> And now testing on a Nextbook Ares 8A shows that panel_on_delay
> must always be honored otherwise the panel will not turn on.
>
> Instead of only always using regular msleep() for panel_on_delay
> do as Windows does and always use regular msleep() everywhere
> were intel_dsi_msleep() is used and drop the intel_dsi_msleep()
> helper.
>
> Changes in v2:
> - Replace all intel_dsi_msleep() calls instead of just
> the intel_dsi_msleep(panel_on_delay) call
>
> Fixes: 6fdb335f1c9c ("drm/i915/dsi: Use unconditional msleep for the panel_on_delay when there is no reset-deassert MIPI-sequence")
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Thanks. Added cc:stable and pushed to drm-intel-next.
> ---
> drivers/gpu/drm/i915/display/icl_dsi.c | 2 +-
> drivers/gpu/drm/i915/display/intel_dsi_vbt.c | 11 ----------
> drivers/gpu/drm/i915/display/intel_dsi_vbt.h | 1 -
> drivers/gpu/drm/i915/display/vlv_dsi.c | 22 +++++---------------
> 4 files changed, 6 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
> index fc0eaf40dc94..6dd942522021 100644
> --- a/drivers/gpu/drm/i915/display/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/display/icl_dsi.c
> @@ -1211,7 +1211,7 @@ static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
>
> /* 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);
> + msleep(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);
> diff --git a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
> index 2cbc1292ab38..f102c13cb959 100644
> --- a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
> +++ b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c
> @@ -762,17 +762,6 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
> gpiod_set_value_cansleep(intel_dsi->gpio_backlight, 0);
> }
>
> -void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
> -{
> - struct intel_connector *connector = intel_dsi->attached_connector;
> -
> - /* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
> - if (is_vid_mode(intel_dsi) && connector->panel.vbt.dsi.seq_version >= 3)
> - return;
> -
> - msleep(msec);
> -}
> -
> void intel_dsi_log_params(struct intel_dsi *intel_dsi)
> {
> struct drm_i915_private *i915 = to_i915(intel_dsi->base.base.dev);
> diff --git a/drivers/gpu/drm/i915/display/intel_dsi_vbt.h b/drivers/gpu/drm/i915/display/intel_dsi_vbt.h
> index dc642c1fe7ef..468d873fab1a 100644
> --- a/drivers/gpu/drm/i915/display/intel_dsi_vbt.h
> +++ b/drivers/gpu/drm/i915/display/intel_dsi_vbt.h
> @@ -16,7 +16,6 @@ void intel_dsi_vbt_gpio_init(struct intel_dsi *intel_dsi, bool panel_is_on);
> void intel_dsi_vbt_gpio_cleanup(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);
> void intel_dsi_log_params(struct intel_dsi *intel_dsi);
>
> #endif /* __INTEL_DSI_VBT_H__ */
> diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
> index 2289f6b1b4eb..37efeab52581 100644
> --- a/drivers/gpu/drm/i915/display/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
> @@ -783,7 +783,6 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
> {
> struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
> struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
> - struct intel_connector *connector = to_intel_connector(conn_state->connector);
> struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> enum pipe pipe = crtc->pipe;
> enum port port;
> @@ -831,21 +830,10 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
> if (!IS_GEMINILAKE(dev_priv))
> intel_dsi_prepare(encoder, pipe_config);
>
> + /* Give the panel time to power-on and then deassert its reset */
> intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
> -
> - /*
> - * Give the panel time to power-on and then deassert its reset.
> - * Depending on the VBT MIPI sequences version the deassert-seq
> - * may contain the necessary delay, intel_dsi_msleep() will skip
> - * the delay in that case. If there is no deassert-seq, then an
> - * unconditional msleep is used to give the panel time to power-on.
> - */
> - if (connector->panel.vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET]) {
> - intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
> - intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
> - } else {
> - msleep(intel_dsi->panel_on_delay);
> - }
> + msleep(intel_dsi->panel_on_delay);
> + intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
>
> if (IS_GEMINILAKE(dev_priv)) {
> glk_cold_boot = glk_dsi_enable_io(encoder);
> @@ -879,7 +867,7 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
> msleep(20); /* XXX */
> for_each_dsi_port(port, intel_dsi->ports)
> dpi_send_cmd(intel_dsi, TURN_ON, false, port);
> - intel_dsi_msleep(intel_dsi, 100);
> + msleep(100);
>
> intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
>
> @@ -1007,7 +995,7 @@ static void intel_dsi_post_disable(struct intel_atomic_state *state,
> /* Assert reset */
> intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_ASSERT_RESET);
>
> - intel_dsi_msleep(intel_dsi, intel_dsi->panel_off_delay);
> + msleep(intel_dsi->panel_off_delay);
> intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_OFF);
>
> intel_dsi->panel_power_off_time = ktime_get_boottime();
> --
> 2.39.1
--
Ville Syrjälä
Intel
prev parent reply other threads:[~2023-04-28 11:13 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-25 19:44 [Intel-gfx] [PATCH v2] drm/i915/dsi: Use unconditional msleep() instead of intel_dsi_msleep() Hans de Goede
2023-04-26 0:02 ` [Intel-gfx] ✗ Fi.CI.BAT: failure for " Patchwork
2023-04-27 16:51 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/dsi: Use unconditional msleep() instead of intel_dsi_msleep() (rev2) Patchwork
2023-04-27 22:59 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2023-04-28 11:13 ` Ville Syrjälä [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZEuqTNaEiFGnVwPy@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=hdegoede@redhat.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=rodrigo.vivi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.