diff mbox

drm/i915: VGA needs to be on pipe A on i830M

Message ID 1350854789-10535-1-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Vetter Oct. 21, 2012, 9:26 p.m. UTC
The bit doesn't stick, and the output is always cloned from pipe A,
even when it's supposed to scan out from pipe B.

Shuts up annoying warnings from the modeset-rework, too.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51265
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/i915/intel_crt.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Daniel Vetter Oct. 22, 2012, 1:07 p.m. UTC | #1
On Sun, Oct 21, 2012 at 11:26:29PM +0200, Daniel Vetter wrote:
> The bit doesn't stick, and the output is always cloned from pipe A,
> even when it's supposed to scan out from pipe B.
> 
> Shuts up annoying warnings from the modeset-rework, too.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51265
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Note that this also fixes spurious VGA detection, since load-detect tried
to use pipe B (since pipe A was already occupied by the lvds output), but
in reality used pipe A and so wrongfully concluded that something is
connected to the VGA port.

Now we simply get an unknown state since we can't find any load detect
pipe. But if we manually move the LVDS to pipe B it works correctly.
-Daniel

> ---
>  drivers/gpu/drm/i915/intel_crt.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
> index c42b980..b3e20aa 100644
> --- a/drivers/gpu/drm/i915/intel_crt.c
> +++ b/drivers/gpu/drm/i915/intel_crt.c
> @@ -743,7 +743,7 @@ void intel_crt_init(struct drm_device *dev)
>  
>  	crt->base.type = INTEL_OUTPUT_ANALOG;
>  	crt->base.cloneable = true;
> -	if (IS_HASWELL(dev))
> +	if (IS_HASWELL(dev) || IS_I830(dev))
>  		crt->base.crtc_mask = (1 << 0);
>  	else
>  		crt->base.crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
> -- 
> 1.7.11.4
>
Chris Wilson Oct. 23, 2012, 9:49 a.m. UTC | #2
On Sun, 21 Oct 2012 23:26:29 +0200, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> The bit doesn't stick, and the output is always cloned from pipe A,
> even when it's supposed to scan out from pipe B.
> 
> Shuts up annoying warnings from the modeset-rework, too.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51265
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Tbh this doesn't surprise me that much, it wasn't until 855gm that
attaching a second display and using an extended desktop became a
selling point. I haven't spotted any such limitations form the docs yet,
but xxtensive error reporting ftw,

Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
-Chris
Daniel Vetter Oct. 23, 2012, 11:04 a.m. UTC | #3
On Tue, Oct 23, 2012 at 10:49:23AM +0100, Chris Wilson wrote:
> On Sun, 21 Oct 2012 23:26:29 +0200, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > The bit doesn't stick, and the output is always cloned from pipe A,
> > even when it's supposed to scan out from pipe B.
> > 
> > Shuts up annoying warnings from the modeset-rework, too.
> > 
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=51265
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> 
> Tbh this doesn't surprise me that much, it wasn't until 855gm that
> attaching a second display and using an extended desktop became a
> selling point. I haven't spotted any such limitations form the docs yet,
> but xxtensive error reporting ftw,
> 
> Acked-by: Chris Wilson <chris@chris-wilson.co.uk>

I've noticed that with this patch we know get and unknown connection state
since the code can't find a suitable pipe for load detection. But that
beats the previous state of affairs, where it tried to use pipe B,
actually used pipe A and concluded that something is connected (although
it's the LVDS on pipe A and nothing on the VGA connector on pipe B).

I've tried to make load detect work by remapping the pipe->planes stuff,
so that crtc 0 will use pipe B and hence we still have something left for
load-detect on pipe A. But alas, that upset the hw a bit.

So there's still some things to figure out, but this here will at least
paper over some of the problems.

I'll add these more recent observations to the commit.
-Daniel
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index c42b980..b3e20aa 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -743,7 +743,7 @@  void intel_crt_init(struct drm_device *dev)
 
 	crt->base.type = INTEL_OUTPUT_ANALOG;
 	crt->base.cloneable = true;
-	if (IS_HASWELL(dev))
+	if (IS_HASWELL(dev) || IS_I830(dev))
 		crt->base.crtc_mask = (1 << 0);
 	else
 		crt->base.crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);