NetBSD Problem Report #51181

From www@NetBSD.org  Sun May 29 12:40:52 2016
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
	(Client CN "mail.netbsd.org", Issuer "Postmaster NetBSD.org" (verified OK))
	by mollari.NetBSD.org (Postfix) with ESMTPS id A02B37A468
	for <gnats-bugs@gnats.NetBSD.org>; Sun, 29 May 2016 12:40:52 +0000 (UTC)
Message-Id: <20160529124051.76B327AABA@mollari.NetBSD.org>
Date: Sun, 29 May 2016 12:40:51 +0000 (UTC)
From: coypu@sdf.org
Reply-To: coypu@sdf.org
To: gnats-bugs@NetBSD.org
Subject: nouveau can't set monitor resolution
X-Send-Pr-Version: www-1.0

>Number:         51181
>Category:       kern
>Synopsis:       nouveau can't set monitor resolution
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun May 29 12:45:00 +0000 2016
>Closed-Date:    Sun Feb 26 12:26:31 +0000 2017
>Last-Modified:  Sun Feb 26 12:26:31 +0000 2017
>Originator:     coypu
>Release:        NetBSD 7.99.29
>Organization:
>Environment:
NetBSD  7.99.29 NetBSD 7.99.29 (GENERIC) #1: Thu May 26 20:42:53 IDT 2016  fly@net.Home:/usr/obj/sys/arch/amd64/compile/GENERIC amd64
>Description:
attempting to set a different resolution with xrandr fails in the following manner (not recoverable): http://i.imgur.com/HM19J3Q.jpg

somewhat related, I am unable to see the console: http://i.imgur.com/4f6rFVs.jpg - it appears to have incorrect stride:
nouveaufb0: framebuffer at 0xffff80011e632000, size 1440x900, depth 32, stride 5760.

attempting to hard-code a different resolution (possibly incorrect method?) in nouveaufb as follows:

diff --git a/sys/external/bsd/drm2/nouveau/nouveaufb.c b/sys/external/bsd/drm2/nouveau/nouveaufb.c
index 1b0f639..a647adc 100644
--- a/sys/external/bsd/drm2/nouveau/nouveaufb.c
+++ b/sys/external/bsd/drm2/nouveau/nouveaufb.c
@@ -96,6 +96,9 @@ nouveaufb_attach(device_t parent, device_t self, void *aux)

 	aprint_naive("\n");
 	aprint_normal("\n");
+	
+	sc->sc_nfa.nfa_fb_sizes.surface_width = 640;
+	sc->sc_nfa.nfa_fb_sizes.surface_height = 480;

 	nouveau_pci_task_init(&sc->sc_attach_task, &nouveaufb_attach_task);
 	error = nouveau_pci_task_schedule(parent, &sc->sc_attach_task);


only changes the portion of the screen which is displayed, as seen in this picture: http://i.imgur.com/A4ngweK.jpg
it doesn't make the monitor resolution(?) different.
starting X in this situation uses the default 1440x900.
>How-To-Repeat:

>Fix:
yes please

>Release-Note:

>Audit-Trail:
From: coypu@SDF.ORG
To: gnats-bugs@netbsd.org
Cc: 
Subject: Re: kern/51181: nouveau can't set monitor resolution
Date: Wed, 22 Jun 2016 17:37:40 +0000

 If I use HDMI output, it works flawlessly.
 Previously, I was using analog output of DP port (with VGA adapter...)

 This is not a fix, bug still exists.
 Stride seems like it is a factor of 3 from what it should be.

From: coypu@SDF.ORG
To: gnats-bugs@netbsd.org
Cc: 
Subject: Re: kern/51181: nouveau can't set monitor resolution
Date: Wed, 22 Jun 2016 18:59:00 +0000

 Still can't set monitor resolution without everything breaking though.
 -- 

From: coypu@SDF.ORG
To: gnats-bugs@netbsd.org
Cc: 
Subject: Re: kern/51181: nouveau can't set monitor resolution
Date: Thu, 24 Nov 2016 02:20:45 +0000

 Thanks to a lot of help I found out that nvidia hardware requires 256byte
 alignment, not 64byte like radeon.

 Rounding up stride to 256 bytes works!

 As a crude diff I've used:
             roundup2((sizes->surface_width * howmany(sizes->surface_bpp, 8)),
 -               64));
 +               256));

 in drmfb_attach (sys/external/bsd/drm2/drm/drmfb.c).

 Presumably something similar is needed in Xorg ... somewhere.
 And that patch might not be too great for intel/radeon... but it works!

From: "Maya Rashish" <maya@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/51181 CVS commit: src/sys/external/bsd/drm2
Date: Mon, 12 Dec 2016 19:45:56 +0000

 Module Name:	src
 Committed By:	maya
 Date:		Mon Dec 12 19:45:56 UTC 2016

 Modified Files:
 	src/sys/external/bsd/drm2/drm: drmfb.c
 	src/sys/external/bsd/drm2/i915drm: intelfb.c
 	src/sys/external/bsd/drm2/include/drm: drmfb.h
 	src/sys/external/bsd/drm2/nouveau: nouveaufb.c

 Log Message:
 add da_fb_linebytes to drmfb_attach_args and use it to pass linebytes
 from nouveau code to drmfb. keep the same linebytes logic for i915.

 nvidia hardware needs 256 byte alignment, so aligning to just 64 was
 not enough.

 fixes broken console with a width of 1440px (PR kern/51181)
 ok riastradh


 To generate a diff of this commit:
 cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/drm/drmfb.c
 cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/drm2/i915drm/intelfb.c
 cvs rdiff -u -r1.1 -r1.2 src/sys/external/bsd/drm2/include/drm/drmfb.h
 cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/nouveau/nouveaufb.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: "Soren Jacobsen" <snj@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/51181 CVS commit: [netbsd-7] src/sys/external/bsd/drm2
Date: Wed, 14 Dec 2016 19:13:24 +0000

 Module Name:	src
 Committed By:	snj
 Date:		Wed Dec 14 19:13:24 UTC 2016

 Modified Files:
 	src/sys/external/bsd/drm2/drm [netbsd-7]: drmfb.c
 	src/sys/external/bsd/drm2/i915drm [netbsd-7]: intelfb.c
 	src/sys/external/bsd/drm2/include/drm [netbsd-7]: drmfb.h
 	src/sys/external/bsd/drm2/nouveau [netbsd-7]: nouveaufb.c

 Log Message:
 Pull up following revision(s) (requested by riastradh in ticket #1322):
 	sys/external/bsd/drm2/drm/drmfb.c: revision 1.3
 	sys/external/bsd/drm2/i915drm/intelfb.c: revision 1.14
 	sys/external/bsd/drm2/include/drm/drmfb.h: revision 1.2
 	sys/external/bsd/drm2/nouveau/nouveaufb.c: revision 1.4
 add da_fb_linebytes to drmfb_attach_args and use it to pass linebytes
 from nouveau code to drmfb. keep the same linebytes logic for i915.
 nvidia hardware needs 256 byte alignment, so aligning to just 64 was
 not enough.
 fixes broken console with a width of 1440px (PR kern/51181)
 ok riastradh


 To generate a diff of this commit:
 cvs rdiff -u -r1.1.2.3 -r1.1.2.4 src/sys/external/bsd/drm2/drm/drmfb.c
 cvs rdiff -u -r1.9.4.3 -r1.9.4.4 src/sys/external/bsd/drm2/i915drm/intelfb.c
 cvs rdiff -u -r1.1.2.2 -r1.1.2.3 \
     src/sys/external/bsd/drm2/include/drm/drmfb.h
 cvs rdiff -u -r1.1.2.4 -r1.1.2.5 \
     src/sys/external/bsd/drm2/nouveau/nouveaufb.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: open->closed
State-Changed-By: maya@NetBSD.org
State-Changed-When: Sun, 26 Feb 2017 12:26:31 +0000
State-Changed-Why:


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2014 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.