Announcement

Collapse
No announcement yet.

noisy GeForce GTS 250 Dark Knight

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • noisy GeForce GTS 250 Dark Knight

    Hi,

    I have installed a GeForce GTX 250 Dark Knigh under Ubuntu 9.10 and I want to lower the fan speed. I've done some research and the only way to do this is with "nvclock" which doesn't recognize my graphic card.

    I downloaded the latest version nvclock0.8b4, did the
    Code:
     ./configure --disable-nvcontrol
      sudo make
      sudo make install
    process and nvclock doesn't recognize the card.

    I have done nvclock -f -F 40 and I get
    Code:
    Error: Your card doesn't support fanspeed adjustments!
    The driver that I'm using is 195. I got it from below...
    Code:
    $ modinfo nvidia
    filename:       /lib/modules/2.6.31-22-generic/updates/dkms/nvidia.ko
    license:        NVIDIA
    alias:          char-major-[B]195[/B]-*
    alias:          pci:v000010DEd*sv*sd*bc03sc02i00*
    alias:          pci:v000010DEd*sv*sd*bc03sc00i00*
    depends:        agpgart
    vermagic:       2.6.31-22-generic SMP mod_unload modversions 586
    I would be thankful if you could help me or point me in the right direction since I've reached a dead end with this. I need to silent this combine harvester!

    Thanks.

  • #2
    I did get this to work. You need to edit the nv50.c file in the backend directory and recompile.

    Code:
    static float g84_get_fanspeed()
    {
            //int pwm_divider = nv_card->PMC[0xe11c/4] & 0x7fff;
            int pwm_divider = nv_card->PMC[0xe114/4] & 0x7fff;
    
            /* On most Geforce8/9 cards I have seen the fanspeed register is 'inverted', so
            /  a low value corresponds with fullspeed (to be exact the register defines the low
            /  period of a pwm pulse. Though some boards aren't inverted like a 8500GT (G86). I'm
            /  not sure what we should do about this. If it is possible to whitelist some generations
            /  or so we should perhaps do that or perhaps there is some setting in the bios? So right
            /  now 100% would show 0% on a 8500GT.
            /
            /  Further some boards use 0xe114 / 0xe118 instead of 0xe11c / 0xe1220. At least the 9800GTX
            /  seems to do that. When I have a more clear picture of the situation those should receive support too.
            */
            //float fanspeed = (float)(pwm_divider - (nv_card->PMC[0xe120/4] & 0x7fff)) * 100.0/(float)pwm_divider;
            float fanspeed = (float)((nv_card->PMC[0xe118/4])) * 100.0 / (float)pwm_divider;
            return fanspeed;
    }
    
    static void g84_set_fanspeed(float speed)
    {
            int value;
            //int pwm_divider = nv_card->PMC[0xe11c/4] & 0x7fff;
            int pwm_divider = nv_card->PMC[0xe114/4] & 0x7fff;
    
            /* For safety reasons we should never disable the fan by not putting it below 10%; further negative values don't exist ;)  */
            if(speed < 10 || speed > 100)
                    return;
    
            /* Bit31 must be set else the hardware doesn't seem to do anything with the changes
            /  Bit30-16 contain some magical bits on 9500GT and other cards which we should preserve.
            /  On a 9500gt the contents of 0xe120 could be e.g. 0x0300010e with a pwm_divider of 0x21d.
            /
            /  Note Oxe300 is also related to the fanspeed. By default it seems to contain 0x100 on
            /  9600GT and other cards. Setting this value to 0x300 seems to set the fanspeed to a fixed
            /  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[0xe120/4] = value;
            value = 0x80000000 | (nv_card->PMC[0xe118/4] & 0x7fff0000) | ((int)(speed / 100 * pwm_divider));
            nv_card->PMC[0xe118/4] = value;
            usleep(10);
    }
    and
    Code:
            /* Fanspeed adjustment support for several 8600GT 'G84', 9600GT 'G94' and 9600GSO 'G92' boards
            /  For now only support fanspeed adjustment using pwm registers 0xe11c/0xe120. Assume they are
            /  active when 0xe11c (pwm divider) is higher than 1. We need a proper method to distinguish between
            /  the use of 0xe114/0xe118 and 0xe11c/0xe120 and to detect whether the pwm signal needs to be inverted
            /  or not. Likely there is info in the bios for this.
            */
            //if((nv_card->arch & (G84 | G86 | G92 | G94 | G96)) && !(nv_card->caps & I2C_FANSPEED_MONITORING) && (nv_card->PMC[0xe11c/4] > 1))
              if((nv_card->arch & (G84 | G86 | G92 | G94 | G96)) && !(nv_card->caps & I2C_FANSPEED_MONITORING) && (nv_card->PMC[0xe118/4] > 1))
            {
                    nv_card->caps |= GPU_FANSPEED_MONITORING;
                    nv_card->get_fanspeed = g84_get_fanspeed;
                    nv_card->set_fanspeed = g84_set_fanspeed;
            }
    You still need to use the -f option, so to set to 20% use

    nvclock -f -F 20

    Comment


    • #3
      Thank you very much!!! I'll try it this weekend and see how it goes.

      Comment


      • #4
        It works!!!!!!

        I'm sorry, I have waited a long time to try this... I finally did it and works perfectly. Now I don't have to shout when my computer is on.


        Thank you very much Timelord.

        Comment

        Working...
        X