Bug 29129 - Cannot set refresh rate on nv50
Cannot set refresh rate on nv50
Status: RESOLVED INVALID
Product: xorg
Classification: Unclassified
Component: Driver/nouveau
unspecified
x86-64 (AMD64) Linux (All)
: medium normal
Assigned To: Nouveau Project
Xorg Project Team
http://marc.info/?l=linux-kernel&m=12...
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2010-07-17 05:39 UTC by Sven Joachim
Modified: 2013-08-18 18:10 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sven Joachim 2010-07-17 05:39:14 UTC
Since Linux 2.6.34, it is no longer possible to set the refresh rate with the "video=...@nn" parameter, e.g. video=1280x1024@75 is ignored.

I bisected this to the following commit:

drm/nv50: enable hpd on any connector we know the gpio line for
    
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 61a89f2..ebcd8bf 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -370,7 +370,9 @@ nv50_display_init(struct drm_device *dev)
 		struct nouveau_connector *conn = nouveau_connector(connector);
 		struct dcb_gpio_entry *gpio;
 
-		if (conn->dcb->gpio_tag == 0xff)
+		if (connector->connector_type != DRM_MODE_CONNECTOR_DVII &&
+		    connector->connector_type != DRM_MODE_CONNECTOR_DVID &&
+		    connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
 			continue;
 
 		gpio = nouveau_bios_gpio_entry(dev, conn->dcb->gpio_tag);

diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index ebcd8bf..61a89f2 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -370,9 +370,7 @@ nv50_display_init(struct drm_device *dev)
 		struct nouveau_connector *conn = nouveau_connector(connector);
 		struct dcb_gpio_entry *gpio;
 
-		if (connector->connector_type != DRM_MODE_CONNECTOR_DVII &&
-		    connector->connector_type != DRM_MODE_CONNECTOR_DVID &&
-		    connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
+		if (conn->dcb->gpio_tag == 0xff)
 			continue;
 
 		gpio = nouveau_bios_gpio_entry(dev, conn->dcb->gpio_tag);


It should be noted that since this commit all the card data appear under /sys/class/drm/card0-DVI-I-1, e.g. /sys/class/drm/card0-DVI-I-1/enabled says "enabled" and /sys/class/drm/card0-VGA-1/enabled says "disabled", despite the monitor being connected via VGA.

I only noticed this in 2.6.35-rc5 because the default refresh rate changed to 60 Hz there, see https://bugzilla.kernel.org/show_bug.cgi?id=16402.
Comment 1 Ben Skeggs 2010-07-17 06:34:57 UTC
I *seriously* doubt this commit is responsible. It has nothing even remotely close to any changes that could cause what you're seeing.

Ben.

Sent from my iPhone

On 17/07/2010, at 22:39, bugzilla-daemon@freedesktop.org wrote:

> https://bugs.freedesktop.org/show_bug.cgi?id=29129
> 
>           Summary: Cannot set refresh rate on nv50
>           Product: xorg
>           Version: unspecified
>          Platform: x86-64 (AMD64)
>               URL: http://marc.info/?l=linux-kernel&m=127913459017236&w=2
>        OS/Version: Linux (All)
>            Status: NEW
>          Severity: normal
>          Priority: medium
>         Component: Driver/nouveau
>        AssignedTo: nouveau@lists.freedesktop.org
>        ReportedBy: svenjoac@gmx.de
>         QAContact: xorg-team@lists.x.org
> 
> 
> Since Linux 2.6.34, it is no longer possible to set the refresh rate with the
> "video=...@nn" parameter, e.g. video=1280x1024@75 is ignored.
> 
> I bisected this to the following commit:
> 
> drm/nv50: enable hpd on any connector we know the gpio line for
> 
> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
> 
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c
> b/drivers/gpu/drm/nouveau/nv50_display.c
> index 61a89f2..ebcd8bf 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -370,7 +370,9 @@ nv50_display_init(struct drm_device *dev)
>         struct nouveau_connector *conn = nouveau_connector(connector);
>         struct dcb_gpio_entry *gpio;
> 
> -        if (conn->dcb->gpio_tag == 0xff)
> +        if (connector->connector_type != DRM_MODE_CONNECTOR_DVII &&
> +            connector->connector_type != DRM_MODE_CONNECTOR_DVID &&
> +            connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
>             continue;
> 
>         gpio = nouveau_bios_gpio_entry(dev, conn->dcb->gpio_tag);
> 
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c
> b/drivers/gpu/drm/nouveau/nv50_display.c
> index ebcd8bf..61a89f2 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -370,9 +370,7 @@ nv50_display_init(struct drm_device *dev)
>         struct nouveau_connector *conn = nouveau_connector(connector);
>         struct dcb_gpio_entry *gpio;
> 
> -        if (connector->connector_type != DRM_MODE_CONNECTOR_DVII &&
> -            connector->connector_type != DRM_MODE_CONNECTOR_DVID &&
> -            connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
> +        if (conn->dcb->gpio_tag == 0xff)
>             continue;
> 
>         gpio = nouveau_bios_gpio_entry(dev, conn->dcb->gpio_tag);
> 
> 
> It should be noted that since this commit all the card data appear under
> /sys/class/drm/card0-DVI-I-1, e.g. /sys/class/drm/card0-DVI-I-1/enabled says
> "enabled" and /sys/class/drm/card0-VGA-1/enabled says "disabled", despite the
> monitor being connected via VGA.
> 
> I only noticed this in 2.6.35-rc5 because the default refresh rate changed to
> 60 Hz there, see https://bugzilla.kernel.org/show_bug.cgi?id=16402.
> 
> -- 
> Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
> ------- You are receiving this mail because: -------
> You are the assignee for the bug.
> _______________________________________________
> Nouveau mailing list
> Nouveau@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/nouveau
Comment 2 Sven Joachim 2010-07-17 10:00:50 UTC
You're of course right, Ben, looks like I screwed up the last bisection step. The actual change that introduced the buggy behavior was the previous one, 7f612d87f8b4b1ddbcee04264a93e5af7b9f21c7:

drm/nouveau: use dcb connector table for creating drm connectors
    
This makes this code common to both the nv04 and nv50 paths.
    
For the moment, we keep the previous behaviour with HDMI/eDP connectors
and report them as DVI-D/DP instead.  This will be fixed once the rest
of the code has been fixed to deal with those types.
    
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>


I refrain from including the 274 lines "git diff" output.

In dmesg I see the following messages:

[    0.896501] [drm] nouveau 0000:01:00.0: Detected a DVI-I connector
[    0.896543] [drm] nouveau 0000:01:00.0: Detected a VGA connector
[    0.896570] [drm] nouveau 0000:01:00.0: Detected a TV connector
Comment 3 Ilia Mirkin 2013-08-18 18:10:10 UTC
It appears that this bug report has laid dormant for quite a while. Sorry we haven't gotten to it. Since we fix bugs all the time, chances are pretty good that your issue has been fixed with the latest software. Please give it a shot. (Linux kernel 3.10.7, xf86-video-nouveau 1.0.9, mesa 9.1.6, or their git versions.) If upgrading to the latest isn't an option for you, your distro's bugzilla is probably the right destination for your bug report.

In an effort to clean up our bug list, we're pre-emptively closing all bugs that haven't seen updates since 2011. If the original issue remains, please make sure to provide fresh info, see http://nouveau.freedesktop.org/wiki/Bugs/ for what we need to see, and re-open this one.

Thanks,

The Nouveau Team