nV News Forums


nV News Forums (http://www.nvnews.net/vbulletin/index.php)
-   NVIDIA Linux (http://www.nvnews.net/vbulletin/forumdisplay.php?f=14)
-   -   default fan speed at 100% on 9600GT (http://www.nvnews.net/vbulletin/showthread.php?t=130767)

lancelot2 03-28-09 06:45 AM

default fan speed at 100% on 9600GT

I have a 9600GT PCX nvidia graphics card and I'm using the proprietary drivers version 180.29 on a Debian linux desktop.

The problem I have is the following:

Whenever X is not started on my server, the GPU fan speed is at 100%. The reason is that
1) nvidia driver starts adjustung GPU fan speed only when X starts. When X stops, the driver stops adjusting the fan speed.
2) When not adjusted by the driver, default fan speed of the GPU is 100% (I assume it's the defaut from the GPU BIOS)

The noise is terrible and might be quite unhealthy for the fan. You should hear it (I assume you have :))

So, first, I'm worried about the durability of my fan when it does such a jetplane noise during boot, from power-up to the start of the X server.
Second, the noise is such that it's not practically workable to stop X when I don't need to work in the GUI, even though I would like to.

What are the solutions to this problem?

I guess it comes down to either reduce the default fan speed (preferred), or tell the nvidia driver to keep adjusting the fan speed when X does not run.

Any help appreciated on solving this issue. Thanks by advance.

StringCheesian 03-28-09 12:41 PM

Re: default fan speed at 100% on 9600GT
Same here.

I think a small GPL fan control kernel module, submitted for inclusion in the kernel would be awesome. It could load and do its thing much earlier in the the boot process and would be independent of X.

On getting the default reduced, I wonder if we'd make more progress complaining to nVidia, or to MSI, Asus, Gigabyte, etc. It's probably a firmware thing.

Thunderbird 03-28-09 01:20 PM

Re: default fan speed at 100% on 9600GT
Use nvclock.

StringCheesian 03-28-09 04:06 PM

Re: default fan speed at 100% on 9600GT

Originally Posted by Thunderbird (Post 1970093)
Use nvclock.

No dice.

With Xorg running, I get this:

# nvclock -F 90
While NVClock can adjust the fanspeed of your videocard this features is disabled by default because of safety reasons.!
If you really know what you are doing you can enable it by adding the -f switch to the nvclock command.

Ok, looks like NVClock can adjust my fan speed while Xorg is running.

When Xorg is NOT running, I get this:

~ # nvclock -F 90
Error: adjustment of the fanspeed isn't supported on your type of videocard!

This makes NVClock useless for my purposes. I want my fan quiet even while Xorg isn't loaded, like during boot up.

Thunderbird 03-29-09 02:57 PM

Re: default fan speed at 100% on 9600GT
First of all you need at least 0.8b4 of nvclock and second not all cards are handled well yet but I could use testing if your model doesn't work yet.

lancelot2 03-29-09 03:05 PM

Re: default fan speed at 100% on 9600GT
Same behavior for us both, yes. I did try 0.8b4.
Edit: okay to help you (and myself) with some testing. I'm clever enough to make edits in the source, then recompile and try again, but not much more. I am completely ignorant of hardware.

It's funny though that the --force option works when X is started. As if nvclock was in fact acting through the driver rather than acting directly on the GPU... I even changed the code to bypass all the error checks and go directly to the same routines that are succesful when X is working. In which case nvclock runs but has no effect. The ouput of getclock shows that it does not manage to contact the card.

BTW, thunderbird, it might be worth for you knowing that the registries for my 9600GT PCX are not "inverted" like nv50.c assumes they are.

With X running, nvclock -f --fanspeed 10 first gives a getclock values at 65% (which is really 35%, probably), then setclock sets 10% but you can hear that the fan really goes at 90%, before getclock reports a value of 10.2%. The reason is that the formulas in the code start with "1 -" which is probably not appropriate for this particular chipset. It is remotely dangerous because (probably) the user could stop the GPU fan completely.

Thunderbird 03-30-09 10:35 AM

Re: default fan speed at 100% on 9600GT
But when you let it use this register it works fine for you? The problem is that basically all cards use the register inverted mode (actually all other pwm registers on nvidia are used inverted) likely because the output is fed through an inverter to amplify the current. The lack of the inverted/non-inverted detection is the reason the code isn't in as I have seen both cases and likely I said in general it is inverted.

Could you check the pci vendor and device id of your card? (nvclock -D output contains it)

lancelot2 04-01-09 12:44 AM

Re: default fan speed at 100% on 9600GT
Sorry for the delay, work's been hectic.


But when you let it use this register it works fine for you?
It works using the registers that are coded in the native nv50.c (not the alternative ones that are given in the comments), if and only if X is started.

Below the output of nvclock -D. Since I did not catch much about vendor in what I got, I have also included what I could presumably gather from lspci and udevinfo.


lancelot@sherka:~/system/installs/nvclock0.8b4$ ./src/nvclock -D
--- nVidia Geforce 9600GT GPU registers ---
NV_PMC_BOOT_0 (0x0): 094100a1
NV_PBUS_DEBUG_0 (0x1080): 00000000
NV_PBUS_DEBUG_1 (0x1084): 00041469
NV_PBUS_DEBUG_2 (0x1088): 00000000
NV_PBUS_DEBUG_3 (0x108c): 000000d1
NV_10F0 (0x10f0): 00000000
NV_1540 (0x1540): f30f000f
NV_15B0 (0x15b0): 00000000
NV_15B4 (0x15b4): 00000000
NV_15B8 (0x15b8): 00000000
NV_15F0 (0x15f0): 00000000
NV_15F4 (0x15f4): 00000000
NV_15F8 (0x15f8): 00000000
NV_PBUS_PCI_0 (0x1800): 062210de
NV_PBUS_PCI_0 (0x182c): 040110b0
NV_C010 (0xc010): 00000000
NV_C014 (0xc014): 00000000
NV_C018 (0xc018): 00000000
NV_C01C (0xc01c): 00000000
NV_C020 (0xc020): 00000000
NV_C024 (0xc024): 00000000
NV_C028 (0xc028): 00000000
NV_C02C (0xc02c): 00000000
NV_C040 (0xc040): 2e80dbb3
NV_4000 (0x4000): 00000000
NV_4004 (0x4004): 00000000
NV_4008 (0x4008): 80186400
NV_400C (0x400c): 00001903
NV_4010 (0x4010): 00000000
NV_4014 (0x4014): 00000000
NV_4018 (0x4018): 00001200
NV_401C (0x401c): 00001c03
NV_4020 (0x4020): 80000000
NV_4024 (0x4024): 00001001
NV_4028 (0x4028): 80000000
NV_402C (0x402c): 00001a04
NV_4030 (0x4030): a0090000
NV_4034 (0x4034): 00001202
NV_4038 (0x4038): 00000000
NV_403C (0x403c): 00000000
NV_4040 (0x4040): 00010000
NV_4044 (0x4044): 00010000
NV_4048 (0x4048): 00000000
NV_404C (0x404c): 00000000
NV_4050 (0x4050): 00010000
NV_4054 (0x4054): 00000000
NV_4058 (0x4058): 00000000
NV_405C (0x405c): 00000000
NV_4060 (0x4060): 00010000
NV_E100 (0xe100): 00001b00
NV_E114 (0xe114): 00000001
NV_E118 (0xe118): 00000000
NV_E11C (0xe11c): 0000021d
NV_E120 (0xe120): 030000bd
NV_E300 (0xe300): 00000300
NV_20008 (0x20008): c00836dd
NV_20400 (0x20400): 0000002c
NV_PFB_CFG0 (0x100200): 00001000
NV_PFB_CFG0 (0x100204): 01449000
NV_PFB_CFG0 (0x100208): 00000000
NV_PFB_CFG0 (0x10020c): 20000000
NV_PFB_218  (0x100218): 01000101
NV_PFB_TIMING0 (0x100220): 0d162f23
NV_PFB_TIMING1 (0x100224): 11010a0b
NV_PFB_TIMING2 (0x100228): 0208080c
NV_PFB_474    (0x100474): 00000000
NV_PEXTDEV_BOOT_0 (0x101000): 80408a86
NV_NVPLL_COEFF_A (0x680500): 00000000
NV_MPLL_COEFF_A (0x680504): 00000000
NV_VPLL_COEFF (0x680508): 00000000
NV_PLL_COEFF_SELECT (0x68050c): 00000000
NV_NVPLL_COEFF_B (0x680570: 00000000
NV_MPLL_COEFF_B (0x680574: 00000000


04:00.0 VGA compatible controller: nVidia Corporation G94 [GeForce 9600 GT] (rev a1)


root@sherka:/home/lancelot# udevinfo -a -p /sys/bus/pci/devices/0000:04:00.0

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:01.0/0000:04:00.0':

  looking at parent device '/devices/pci0000:00/0000:00:01.0':

  looking at parent device '/devices/pci0000:00':

lancelot2 06-22-11 06:14 PM

Re: default fan speed at 100% on 9600GT
I found a fix for the fan noise. I am now able to reduce my fan speed to 35% whenever the 9600GT won't do it by itself, that is to say:
- when X is not started, whatever driver I'm using
- when I use nouveau rather than the proprietary nvidia module.

I thought I'd share since google tells me so many people have some kind or the other of excessive fan speed and noise issue with the 9600GT (including windows user...). If you have said issue, you may find what follows useful, however please be warned that whatever your try will be at your own risk.

In order to get a fan speed of 35%, you need to have the following values in your registers:

NV_E100 (0xe100): 00001b00
NV_E11C (0xe11c): 0000021c
NV_E120 (0xe120): 000000bd

Instead, what I normally get when X is not started is the following:

NV_E100 (0xe100): 00001900
NV_E11C (0xe11c): 00000001
NV_E120 (0xe120): 00000000

E11C and E120 are a PWM thingie, this is explained in nvclock's comments. Don't ask me why it's also necessary to have E100 set at 00001b00, I found it by comparing output of nvclock -D in situations when it works and situations when it don't. This value of E100 is the reason why nvclock wouldn't help when I first tried two years ago.

I noticed a glitch that comes with my fix: after rebooting from a system with the fan speed fixed through the above register values, I get ugly color squares and/or lines flashing on my primary screen for approx. 1 second, in-between when the system leaves the BIOS and when it enters GRUB.

You'll find below a patch to nvclock which I used to set the above register values.

diff -rupN nvclock0.8b4/src/backend/nv50.c nvclock0.8b4-patched-20110623//src/backend/nv50.c
--- nvclock0.8b4/src/backend/nv50.c    2009-01-04 11:46:39.000000000 +0100
+++ nvclock0.8b4-patched-20110623//src/backend/nv50.c  2011-06-23 00:57:40.748981389 +0200
@@ -160,6 +160,7 @@ static float g84_get_fanspeed()
 static void g84_set_fanspeed(float speed)
        int value;
+      nv_card->PMC[0xe11c/4] = 0x0000021c;
        int pwm_divider = nv_card->PMC[0xe11c/4] & 0x7fff;
        /* For safety reasons we should never disable the fan by not putting it below 10%; further negative values don't exist ;)  */
@@ -175,6 +176,7 @@ static void g84_set_fanspeed(float speed
        /  value. Apparently 0xe300 acts like a multiplexer?
        value = 0x80000000 | (nv_card->PMC[0xe120/4] & 0x7fff0000) | (((int)(100 - speed) * pwm_divider/100) & 0x7fff);
+      nv_card->PMC[0xe100/4] = 0x00001b00;
        nv_card->PMC[0xe120/4] = value;
diff -rupN nvclock0.8b4/src/nvclock.c nvclock0.8b4-patched-20110623//src/nvclock.c
--- nvclock0.8b4/src/nvclock.c  2009-01-04 11:54:28.000000000 +0100
+++ nvclock0.8b4-patched-20110623//src/nvclock.c        2011-06-23 00:56:59.500981357 +0200
@@ -940,6 +940,7 @@ int main(int argc, char *argv[])
                printf("Adjusted the pci id to 0x%x (%s)\n", nv_card->device_id, nv_card->card_name);
+      nv_card->PMC[0xe11c/4] = 0x0000021c;
        if(fanspeed_opt && force_opt)
                float dutycycle;
@@ -947,7 +948,6 @@ int main(int argc, char *argv[])
                if(!(nv_card->caps & (GPU_FANSPEED_MONITORING | I2C_FANSPEED_MONITORING)))
                        fprintf(stderr, "Error: Your card doesn't support fanspeed adjustments!\n");
-                      return 0;
                if(fanspeed[0] == '+' || fanspeed[0] == '-')

The patch is really dirty, don't use it for anything else than its intended purpose, and don't use it on any card other than the 9600GT. You should be able to reduce your fan speed to 35% by running nvclock twice:

nvclock -f -F 65
nvclock -f -F 65

Same comment as above, there is no warranty. If your card is destroyed, too bad, this is what you get for writing random values you fetched from a forum into your GPU registers.

All times are GMT -5. The time now is 05:48 AM.

Powered by vBulletin® Version 3.7.1
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Copyright 1998 - 2014, nV News.