All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel.vetter@ffwll.ch>
To: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Cc: Jani Nikula <jani.nikula@intel.com>,
	Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: [PATCH] drm/i915: force bpp for eDP panels
Date: Fri, 19 Apr 2013 22:31:11 +0200	[thread overview]
Message-ID: <1366403471-16782-1-git-send-email-daniel.vetter@ffwll.ch> (raw)
In-Reply-To: <1366363487-15926-4-git-send-email-daniel.vetter@ffwll.ch>

We've had our fair share of woes already which showed that we can't
rely on the bpc limits in the EDID for eDP panels without risking
black screens. So now we limit the depth by what the BIOS recommends
in the VBT:

commit 2f4f649a69a9eb51f6e98130e19dd90a260a4145
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Mon Nov 12 14:33:44 2012 +0200

    drm/i915: do not ignore eDP bpc settings from vbt

But that's not enough, since at least the panel on my ASUS Zenbook
Prime here is also unhappy if the bpc is too low. Hence just take the
firmware value and dither to get what flimsy panels want.

Like before we ensure that we don't change the bpp if the firmware
doesn't provide a value, see

commit 9a30a61f3516871c5c638fd7c025fbaa11ddf7fe
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Mon Nov 12 14:33:45 2012 +0200

    drm/i915: do not default to 18 bpp for eDP if missing from VBT

v2: Apparently there are some horribly broken eDP panels around which
only work if the DP link is set up as if we want to driver a 24bpp
mode, but still only work if the data is feed at 18bpp. See

commit 57c219633275c7e7413f8bc7be250dc092887458
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Thu Apr 4 17:19:37 2013 +0200

    drm/i915: revert eDP bpp clamping code changes

for the gory details.

Adjust the patch accordingly and update all the relevant comments.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Paulo Zanoni <przanoni@gmail.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/i915/intel_dp.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index b1a3a64..d602886 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -745,6 +745,25 @@ intel_dp_compute_config(struct intel_encoder *encoder,
 	/* Walk through all bpp values. Luckily they're all nicely spaced with 2
 	 * bpc in between. */
 	bpp = min_t(int, 8*3, pipe_config->pipe_bpp);
+
+	/*
+	 * eDP panels are really fickle, try to enfore the bpp the firmware
+	 * recomments. This means we'll up-dither 16bpp framebuffers on
+	 * high-depth panels.
+	 */
+	if (is_edp(intel_dp) && dev_priv->edp.bpp) {
+		DRM_DEBUG_KMS("forcing bpp for eDP panel to BIOS-provided %i\n",
+			      dev_priv->edp.bpp);
+		/*
+		 * But for added hilarity some of the 18bpp panels only work if
+		 * we set up the pipe with enough bw for a 24bpp mode, since
+		 * that's what the bios apparently does. So start the bw
+		 * calculation with at least 24 bpp (down-dither is still
+		 * possible).
+		 */
+		bpp = max_t(int, dev_priv->edp.bpp, 24);
+	}
+
 	for (; bpp >= 6*3; bpp -= 2*3) {
 		mode_rate = intel_dp_link_required(target_clock, bpp);
 
@@ -795,11 +814,8 @@ found:
 			       &pipe_config->dp_m_n);
 
 	/*
-	 * XXX: We have a strange regression where using the vbt edp bpp value
-	 * for the link bw computation results in black screens, the panel only
-	 * works when we do the computation at the usual 24bpp (but still
-	 * requires us to use 18bpp). Until that's fully debugged, stay
-	 * bug-for-bug compatible with the old code.
+	 * Since we might have picked a too high bpp for the bw calculation,
+	 * clamp it down again to make even the most fickle eDP panel happy.
 	 */
 	if (is_edp(intel_dp) && dev_priv->edp.bpp) {
 		DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n",
-- 
1.7.11.7

  reply	other threads:[~2013-04-19 20:31 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-19  9:24 [PATCH 00/15] high-bpp fixes and fdi auto dithering Daniel Vetter
2013-04-19  9:24 ` [PATCH 01/15] drm/i915: fixup 12bpc hdmi dotclock handling Daniel Vetter
2013-04-23 15:02   ` Ville Syrjälä
2013-04-23 15:37     ` Daniel Vetter
2013-04-19  9:24 ` [PATCH 02/15] drm/i915: Disable high-bpc on pre-1.4 EDID screens Daniel Vetter
2013-04-23 15:07   ` Ville Syrjälä
2013-04-24 10:54     ` Daniel Vetter
2013-04-19  9:24 ` [PATCH 03/15] drm/i915: force bpp for eDP panels Daniel Vetter
2013-04-19 20:31   ` Daniel Vetter [this message]
2013-04-19  9:24 ` [PATCH 04/15] drm/i915: drop adjusted_mode from *_set_pipeconf functions Daniel Vetter
2013-04-23 15:12   ` Ville Syrjälä
2013-04-19  9:24 ` [PATCH 05/15] drm/i915: implement high-bpc + pipeconf-dither support for g4x/vlv Daniel Vetter
2013-04-19 16:39   ` Jesse Barnes
2013-04-19 18:17     ` [PATCH] " Daniel Vetter
2013-04-19 18:39       ` Jesse Barnes
2013-04-19 19:29         ` Daniel Vetter
2013-04-23 15:27       ` Ville Syrjälä
2013-04-23 20:39         ` Daniel Vetter
2013-04-23 22:27           ` Daniel Vetter
2013-04-24 11:07             ` Ville Syrjälä
2013-04-23 22:30         ` Daniel Vetter
2013-04-24 11:11           ` Ville Syrjälä
2013-04-24 12:57             ` Daniel Vetter
2013-04-24 13:07               ` Ville Syrjälä
2013-04-19  9:24 ` [PATCH 06/15] drm/i915: allow high-bpc modes on DP Daniel Vetter
2013-04-29 10:16   ` Imre Deak
2013-04-19  9:24 ` [PATCH 07/15] drm/i915: Fixup non-24bpp support for VGA screens on Haswell Daniel Vetter
2013-04-24 11:12   ` Ville Syrjälä
2013-04-24 12:50     ` Daniel Vetter
2013-04-19  9:24 ` [PATCH 08/15] drm/i915: move intel_crtc->fdi_lanes to pipe_config Daniel Vetter
2013-04-29 10:17   ` Imre Deak
2013-04-19  9:24 ` [PATCH 09/15] drm/i915: hw state readout support for pipe_config->fdi_lanes Daniel Vetter
2013-04-24 11:23   ` Ville Syrjälä
2013-04-24 12:49     ` Daniel Vetter
2013-04-24 13:30     ` [PATCH] " Daniel Vetter
2013-04-29 10:22       ` Imre Deak
2013-04-29 17:33         ` [PATCH] drm/i915: put the right cpu_transcoder into pipe_config for hw state readout Daniel Vetter
2013-04-29 17:33         ` [PATCH] drm/i915: hw state readout support for pipe_config->fdi_lanes Daniel Vetter
2013-04-19  9:24 ` [PATCH 10/15] drm/i915: split up fdi_set_m_n into computation and hw setup Daniel Vetter
2013-04-24 11:26   ` Ville Syrjälä
2013-04-19  9:24 ` [PATCH 11/15] drm/i915: compute fdi lane config earlier Daniel Vetter
2013-04-29 12:13   ` Imre Deak
2013-04-19  9:24 ` [PATCH 12/15] drm/i915: Split up ironlake_check_fdi_lanes Daniel Vetter
2013-04-29 12:19   ` Imre Deak
2013-04-19  9:24 ` [PATCH 13/15] drm/i915: move fdi lane configuration checks ahead Daniel Vetter
2013-04-22 10:32   ` Ville Syrjälä
2013-04-22 15:13     ` [PATCH] " Daniel Vetter
2013-04-29 12:31       ` Imre Deak
2013-04-29 17:34         ` Daniel Vetter
2013-04-19  9:24 ` [PATCH 14/15] drm/i915: don't count cpu ports for fdi B/C lane sharing Daniel Vetter
2013-04-29 13:00   ` Imre Deak
2013-04-19  9:24 ` [PATCH 15/15] drm/i915: implement fdi auto-dithering Daniel Vetter
2013-04-29 14:02   ` Imre Deak
2013-04-29 14:43     ` Daniel Vetter
2013-04-29 14:59       ` Imre Deak
2013-04-29 19:35         ` Daniel Vetter
2013-04-19 15:05 ` [PATCH 00/15] high-bpp fixes and fdi auto dithering Chris Wilson
2013-04-25 10:28 ` Jani Nikula
2013-04-29 19:51   ` Daniel Vetter
  -- strict thread matches above, loose matches on Subject: below --
2013-02-22  6:50 [PATCH 05/10] drm/i915: force bpp for eDP panels Jani Nikula
2013-02-22 11:10 ` [PATCH] " Daniel Vetter

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=1366403471-16782-1-git-send-email-daniel.vetter@ffwll.ch \
    --to=daniel.vetter@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@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.