From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Anitha Chrisanthus <anitha.chrisanthus@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: moved edid read from _force() to _get_modes()
Date: Thu, 22 Dec 2016 14:27:22 +0200 [thread overview]
Message-ID: <20161222122722.GK31595@intel.com> (raw)
In-Reply-To: <1482360550-7909-1-git-send-email-anitha.chrisanthus@intel.com>
On Wed, Dec 21, 2016 at 02:49:10PM -0800, Anitha Chrisanthus wrote:
> From: "Chrisanthus, Anitha" <anitha.chrisanthus@intel.com>
>
> When the connector is forced ON and firmware EDID is provided,
> driver still tries to read the EDID from the sink device, this can increase
> the driver's start up time by ~25ms per attempt.
> This change is to fix this problem.
> By moving the point where we attempt to read EDID from the hdmi and dp
> _force functions to the corresponding _get_modes() functions we only
> attempt to read EDID if EDID firmware is not provided or if there is no
> valid EDID.
> This change should have no effect on the general case where the EDID is
> normally read during the hdmi or dp _detect() call.
Someone should just move the EDID override stuff to happen at a
lower level so that _all_ EDID parsing will see the override EDID.
>
> Signed-off-by: Chrisanthus, Anitha <anitha.chrisanthus@intel.com>
> ---
> drivers/gpu/drm/i915/intel_dp.c | 31 +++++++++++++++++++++----------
> drivers/gpu/drm/i915/intel_hdmi.c | 14 ++++++++------
> 2 files changed, 29 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 66b5bc8..0fcecc9 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -4563,23 +4563,13 @@ intel_dp_force(struct drm_connector *connector)
> {
> struct intel_dp *intel_dp = intel_attached_dp(connector);
> struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
> - struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
> - enum intel_display_power_domain power_domain;
>
> DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
> connector->base.id, connector->name);
> - intel_dp_unset_edid(intel_dp);
>
> if (connector->status != connector_status_connected)
> return;
>
> - power_domain = intel_display_port_aux_power_domain(intel_encoder);
> - intel_display_power_get(dev_priv, power_domain);
> -
> - intel_dp_set_edid(intel_dp);
> -
> - intel_display_power_put(dev_priv, power_domain);
> -
> if (intel_encoder->type != INTEL_OUTPUT_EDP)
> intel_encoder->type = INTEL_OUTPUT_DP;
> }
> @@ -4588,8 +4578,29 @@ static int intel_dp_get_modes(struct drm_connector *connector)
> {
> struct intel_connector *intel_connector = to_intel_connector(connector);
> struct edid *edid;
> + struct intel_dp *intel_dp = intel_attached_dp(connector);
> + struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
> + struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
> + enum intel_display_power_domain power_domain;
>
> edid = intel_connector->detect_edid;
> + if ((edid == NULL) &&
> + (connector->status == connector_status_connected)) {
> +
> + intel_dp_unset_edid(intel_dp);
> +
> + power_domain =
> + intel_display_port_aux_power_domain(intel_encoder);
> + intel_display_power_get(dev_priv, power_domain);
> +
> + intel_dp_detect_dpcd(intel_dp);
> +
> + intel_dp_set_edid(intel_dp);
> +
> + intel_display_power_put(dev_priv, power_domain);
> +
> + edid = intel_connector->detect_edid;
> + }
> if (edid) {
> int ret = intel_connector_update_modes(connector, edid);
> if (ret)
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 0bcfead..e2f8bde 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -1520,12 +1520,9 @@ intel_hdmi_force(struct drm_connector *connector)
> DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
> connector->base.id, connector->name);
>
> - intel_hdmi_unset_edid(connector);
> -
> if (connector->status != connector_status_connected)
> return;
>
> - intel_hdmi_set_edid(connector);
> hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
> }
>
> @@ -1534,9 +1531,14 @@ static int intel_hdmi_get_modes(struct drm_connector *connector)
> struct edid *edid;
>
> edid = to_intel_connector(connector)->detect_edid;
> - if (edid == NULL)
> - return 0;
> -
> + if ((edid == NULL) &&
> + (connector->status == connector_status_connected)) {
> + intel_hdmi_unset_edid(connector);
> + intel_hdmi_set_edid(connector);
> + edid = to_intel_connector(connector)->detect_edid;
> + if (edid == NULL)
> + return 0;
> + }
> return intel_connector_update_modes(connector, edid);
> }
>
> --
> 2.5.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
prev parent reply other threads:[~2016-12-22 12:27 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-21 22:49 [PATCH] drm/i915: moved edid read from _force() to _get_modes() Anitha Chrisanthus
2016-12-21 23:16 ` ✓ Fi.CI.BAT: success for " Patchwork
2016-12-22 12:27 ` 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=20161222122722.GK31595@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=anitha.chrisanthus@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/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.