From: Damien Lespiau <damien.lespiau@intel.com>
To: Imre Deak <imre.deak@intel.com>
Cc: intel-gfx@lists.freedesktop.org, paulo.r.zanoni@intel.com
Subject: Re: [PATCH v2 2/2] drm/i915: fix intel_prepare_ddi
Date: Mon, 27 Apr 2015 18:29:50 +0100 [thread overview]
Message-ID: <20150427172950.GC3503@strange.ger.corp.intel.com> (raw)
In-Reply-To: <1429288282-7162-2-git-send-email-imre.deak@intel.com>
On Fri, Apr 17, 2015 at 07:31:22PM +0300, Imre Deak wrote:
> At the moment intel_prepare_ddi buffer will iterate through both MST and
> CRT encoders, which is incorrect. Neither of these encoder types have an
> embedding intel_digital_port object, so for these encoder types we will
> use random data when dereferencing the corresponding
> intel_digital_port->port field.
>
> Introduced in
> commit b403745c84592b26a0713e6944c2b109f6df5c82
> Author: Damien Lespiau <damien.lespiau@intel.com>
> Date: Mon Aug 4 22:01:33 2014 +0100
>
> drm/i915: Iterate through the initialized DDIs to prepare their buffers
>
> v2:
> - fix getting at the port for MST encoders too
> - make sure that intel_prepare_ddi_buffers() gets called for port E too
> (Paulo)
>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
--
Damien
> ---
> drivers/gpu/drm/i915/i915_drv.h | 5 -----
> drivers/gpu/drm/i915/intel_ddi.c | 28 ++++++++++++++++++----------
> 2 files changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 40ef672..c461b56 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -251,11 +251,6 @@ enum hpd_pin {
> &dev->mode_config.connector_list, \
> base.head)
>
> -#define for_each_digital_port(dev, digital_port) \
> - list_for_each_entry(digital_port, \
> - &dev->mode_config.encoder_list, \
> - base.base.head)
> -
> #define for_each_encoder_on_crtc(dev, __crtc, intel_encoder) \
> list_for_each_entry((intel_encoder), &(dev)->mode_config.encoder_list, base.head) \
> if ((intel_encoder)->base.crtc == (__crtc))
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 903d395..9c1e74a 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -256,12 +256,11 @@ intel_dig_port_supports_hdmi(const struct intel_digital_port *intel_dig_port)
> * in either FDI or DP modes only, as HDMI connections will work with both
> * of those
> */
> -static void intel_prepare_ddi_buffers(struct drm_device *dev,
> - struct intel_digital_port *intel_dig_port)
> +static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
> + bool supports_hdmi)
> {
> struct drm_i915_private *dev_priv = dev->dev_private;
> u32 reg;
> - int port = intel_dig_port->port;
> int i, n_hdmi_entries, n_dp_entries, n_edp_entries, hdmi_default_entry,
> size;
> int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
> @@ -272,7 +271,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev,
> const struct ddi_buf_trans *ddi_translations;
>
> if (IS_BROXTON(dev)) {
> - if (!intel_dig_port_supports_hdmi(intel_dig_port))
> + if (!supports_hdmi)
> return;
>
> /* Vswing programming for HDMI */
> @@ -360,7 +359,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev,
> reg += 4;
> }
>
> - if (!intel_dig_port_supports_hdmi(intel_dig_port))
> + if (!supports_hdmi)
> return;
>
> /* Choose a good default if VBT is badly populated */
> @@ -380,18 +379,27 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev,
> */
> void intel_prepare_ddi(struct drm_device *dev)
> {
> - struct intel_digital_port *intel_dig_port;
> + struct intel_encoder *intel_encoder;
> bool visited[I915_MAX_PORTS] = { 0, };
>
> if (!HAS_DDI(dev))
> return;
>
> - for_each_digital_port(dev, intel_dig_port) {
> - if (visited[intel_dig_port->port])
> + for_each_intel_encoder(dev, intel_encoder) {
> + struct intel_digital_port *intel_dig_port;
> + enum port port;
> + bool supports_hdmi;
> +
> + ddi_get_encoder_port(intel_encoder, &intel_dig_port, &port);
> +
> + if (visited[port])
> continue;
>
> - intel_prepare_ddi_buffers(dev, intel_dig_port);
> - visited[intel_dig_port->port] = true;
> + supports_hdmi = intel_dig_port &&
> + intel_dig_port_supports_hdmi(intel_dig_port);
> +
> + intel_prepare_ddi_buffers(dev, port, supports_hdmi);
> + visited[port] = true;
> }
> }
>
> --
> 2.1.0
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-04-27 17:29 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-17 11:58 [PATCH] drm/i915: fix for_each_digital_port Imre Deak
2015-04-17 12:27 ` Imre Deak
2015-04-17 12:36 ` Paulo Zanoni
2015-04-17 16:29 ` Imre Deak
2015-04-17 16:31 ` [PATCH v2 1/2] drm/i915: factor out ddi_get_encoder_port Imre Deak
2015-04-27 17:24 ` Damien Lespiau
2015-04-17 16:31 ` [PATCH v2 2/2] drm/i915: fix intel_prepare_ddi Imre Deak
2015-04-23 21:37 ` shuang.he
2015-04-27 17:29 ` Damien Lespiau [this message]
2015-04-30 9:37 ` Jani Nikula
2015-04-23 21:39 ` [PATCH] drm/i915: fix for_each_digital_port shuang.he
2015-04-27 17:05 ` Damien Lespiau
2015-04-27 17:15 ` Damien Lespiau
2015-04-27 17:18 ` Damien Lespiau
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=20150427172950.GC3503@strange.ger.corp.intel.com \
--to=damien.lespiau@intel.com \
--cc=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=paulo.r.zanoni@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.