Intel-GFX Archive on lore.kernel.org
 help / color / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 6/6] drm/i915: Attach a fb to the load-detect pipe
Date: Wed, 20 Apr 2011 10:22:22 +0100
Message-ID: <1303291342-27668-7-git-send-email-chris@chris-wilson.co.uk> (raw)
In-Reply-To: <1303291342-27668-1-git-send-email-chris@chris-wilson.co.uk>

We need to ensure that we feed valid memory into the display plane
attached to the pipe when switching the pipe on. Otherwise, the display
engine may read through an invalid PTE and so throw an PGTBL_ER
exception.

For bonus amusement value, we perform the first load detect before even
establishing our fbdev.

Reported-by: Knut Petersen <Knut_Petersen@t-online.de>
References: https://bugs.freedesktop.org/show_bug.cgi?id=36246
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/intel_display.c |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 9b1a3e1..e68dd08 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5549,6 +5549,8 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
 	struct drm_encoder *encoder = &intel_encoder->base;
 	struct drm_crtc *crtc = NULL;
 	struct drm_device *dev = encoder->dev;
+	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct drm_framebuffer *old_fb;
 	int i = -1;
 
 	/*
@@ -5613,8 +5615,22 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
 	if (!mode)
 		mode = &load_detect_mode;
 
-	if (!drm_crtc_helper_set_mode(crtc, mode, 0, 0, crtc->fb)) {
+	/* Ensure we bind a framebuffer to supply the plane.
+	 * As we may be called during intel_framebuffer_init,
+	 * we need to be careful that we have actually initialised
+	 * the fbcon before using it.
+	 */
+	if (dev_priv->fbdev == NULL || dev_priv->fbdev->ifb.obj == NULL) {
+		DRM_DEBUG("no fb to bind for load-detect pipe\n");
+		return false;
+	}
+
+	old_fb = crtc->fb;
+	crtc->fb = &dev_priv->fbdev->ifb.base;
+
+	if (!drm_crtc_helper_set_mode(crtc, mode, 0, 0, old_fb)) {
 		DRM_DEBUG_KMS("failed to set mode on load-detect pipe\n");
+		crtc->fb = old_fb;
 		return false;
 	}
 
-- 
1.7.4.1

  parent reply index

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-20  9:22 Remove dead code from intel_get_load_detect_pipe Chris Wilson
2011-04-20  9:22 ` [PATCH 1/6] drm/i915: Simplify return value " Chris Wilson
2011-04-20 18:10   ` Keith Packard
2011-04-20 18:26     ` [PATCH 1/2] " Chris Wilson
2011-04-20 18:26       ` [PATCH 2/2] drm/i915: Propagate failure to set mode for load-detect pipe Chris Wilson
2011-04-20  9:22 ` [PATCH 2/6] drm/i915: Don't store temporary load-detect variables in the generic encoder Chris Wilson
2011-04-20 18:12   ` Keith Packard
2011-04-20  9:22 ` [PATCH 3/6] drm/i915: Remove unused supported_crtc from intel_load_detect_pipe Chris Wilson
2011-04-20 18:12   ` Keith Packard
2011-04-20  9:22 ` [PATCH 4/6] drm/i915: Pass the saved adjusted_mode when adding to the load-detect crtc Chris Wilson
2011-04-20 18:23   ` Keith Packard
2011-04-20 19:38     ` Chris Wilson
2011-04-20 21:00       ` Keith Packard
2011-04-20  9:22 ` [PATCH 5/6] drm/i915: Remove dead code from intel_get_load_detect_pipe() Chris Wilson
2011-04-20 18:26   ` Keith Packard
2011-04-20  9:22 ` Chris Wilson [this message]
2011-04-20 18:43   ` [PATCH 6/6] drm/i915: Attach a fb to the load-detect pipe Keith Packard
2011-04-20 18:55     ` Chris Wilson
2011-04-20 21:03       ` Keith Packard
2011-04-20 21:43         ` [PATCH] " Chris Wilson
2011-04-21  8:45           ` When in doubt, use a temporary fb Chris Wilson
2011-04-21  8:45             ` [PATCH 1/3] drm/i915: Remove dead code from intel_release_load_detect_pipe() Chris Wilson
2011-04-21  8:45             ` [PATCH 2/3] drm/i915: Attach a fb to the load-detect pipe Chris Wilson
2011-04-21  8:45             ` [PATCH 3/3] drm/i915: Move the tracking of dpms_mode down into crtc enable/disable Chris Wilson
2011-04-20 20:16     ` [PATCH] drm/i915: Attach a fb to the load-detect pipe Chris Wilson

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=1303291342-27668-7-git-send-email-chris@chris-wilson.co.uk \
    --to=chris@chris-wilson.co.uk \
    --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

Intel-GFX Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/intel-gfx/0 intel-gfx/git/0.git
	git clone --mirror https://lore.kernel.org/intel-gfx/1 intel-gfx/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 intel-gfx intel-gfx/ https://lore.kernel.org/intel-gfx \
		intel-gfx@lists.freedesktop.org
	public-inbox-index intel-gfx

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.freedesktop.lists.intel-gfx


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git