Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

9800GTX+ fan and temperature support

Help
2009-01-05
2013-05-02
  • Tony Houghton
    Tony Houghton
    2009-01-05

    I recently got a 9800GTX+ and nvclock 0.8b4 doesn't support its fan control at all, and it reads the temperature incorrectly (I tried 0.8b3 from Debian first and that reported the temperature as 13C). Please let me know if I can do anything to help get this supported correctly; I dual boot with Windows XP if that's any help.

    Output of nvclock -i -f:

    -- General info --
    Card:         Unknown Nvidia card
    Architecture:     G92 A2
    PCI id:     0x613
    GPU clock:     300.856 MHz
    Bustype:     PCI-Express

    -- Shader info --
    Clock: 1836.000 MHz
    Stream units: 128 (11111111b)
    ROP units: 16 (1111b)
    -- Memory info --
    Amount:     512 MB
    Type:         256 bit DDR3
    Clock:         1101.600 MHz

    -- PCI-Express info --
    Current Rate:     16X
    Maximum rate:     16X

    -- Sensor info --
    Sensor: GPU Internal Sensor
    GPU temperature: -402C

    -- VideoBios information --
    Version: 62.92.62.00.00
    Signon message: NVIDIA GeForce 9800 GTX+ VGA BIOS
    Performance level 0: gpu 300MHz/shader 600MHz/memory 100MHz/1.00V/100%
    Performance level 1: gpu 745MHz/shader 1848MHz/memory 1100MHz/1.15V/100%
    VID mask: 3
    Voltage level 0: 1.00V, VID: 0
    Voltage level 1: 1.05V, VID: 1
    Voltage level 2: 1.10V, VID: 2
    Voltage level 3: 1.15V, VID: 3

     
    • Correct not all G92 boards are supported right now. They are an exception to the rule because I need some more data. Could you provide a nvclock -D output?

       
      • Tony Houghton
        Tony Houghton
        2009-01-05

        $ nvclock -D -f
        --- Unknown Nvidia card GPU registers ---
        NV_PMC_BOOT_0 (0x0): 092980a2
        NV_PBUS_DEBUG_0 (0x1080): 00002410
        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): f30f00ff
        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): 061310de
        NV_PBUS_PCI_0 (0x182c): 00000000
        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): 2e80dea3
        NV_4000 (0x4000): 00000000
        NV_4004 (0x4004): 00000000
        NV_4008 (0x4008): 1018a200
        NV_400C (0x400c): 00003305
        NV_4010 (0x4010): 00000000
        NV_4014 (0x4014): 00000000
        NV_4018 (0x4018): 00001200
        NV_401C (0x401c): 00001c03
        NV_4020 (0x4020): 00000000
        NV_4024 (0x4024): 00002202
        NV_4028 (0x4028): a0090000
        NV_402C (0x402c): 00002707
        NV_4030 (0x4030): 20120000
        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): 00005910
        NV_E114 (0xe114): 00001047
        NV_E118 (0xe118): 000005b2
        NV_E11C (0xe11c): 00000001
        NV_E120 (0xe120): 00000000
        NV_E300 (0xe300): 00000100
        NV_20008 (0x20008): c00835ed
        NV_20400 (0x20400): 00000023
        NV_PDISPLAY_SOR0_REGS_BRIGHTNESS(c084): 00000000
        NV_PFB_CFG0 (0x100200): 01001800
        NV_PFB_CFG0 (0x100204): 01449000
        NV_PFB_CFG0 (0x100208): 00000000
        NV_PFB_CFG0 (0x10020c): 20000000
        NV_PFB_218  (0x100218): 01000101
        NV_PFB_TIMING0 (0x100220): 02040606
        NV_PFB_TIMING1 (0x100224): 0d010905
        NV_PFB_TIMING2 (0x100228): 02020102
        NV_PFB_474     (0x100474): 00000000
        NV_PEXTDEV_BOOT_0 (0x101000): 9f428e8a
        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

         
    • The tempature on your card was about 45C at that time? (20400 contains the temperature in hex). Try to compare it to nvidia-settings or just use nvclock -T -d. Could you also send me a copy of your video bios by mail?

       
      • Tony Houghton
        Tony Houghton
        2009-01-05

        No, I think the temperature has been consistently lower than that while it's just been idling in Linux. Currently:

        $ nvclock -T -d -f
        Probing I2C busses
        bus: 1 device: a0
        bus: 1 device: 6e
        m1=5 m2=1 n1=51 n2=1 p=0
        m1=7 m2=1 n1=39 n2=1 p=1
        m1=5 m2=1 n1=51 n2=1 p=0
        m1=7 m2=1 n1=39 n2=1 p=1
        Unknown Nvidia card
        NV_20008 (0x20008): c00835e3
        divider=18.700001, offset=-13096.299805
        => GPU temperature: -400C
        => GPU temperature according to NV-CONTROL: 35

        How do I extract the BIOS for you?

         
        • I forgot to mention that the bios is saved to ~/.nvclock/bios0.rom.

           
      • Tony Houghton
        Tony Houghton
        2009-01-05

        Ah, I think you made a typo, I see 20400 contained 0x23, which is 35, not 45, so that would be about right.

         
    • Helmut Neujahr
      Helmut Neujahr
      2009-01-10

      Hi!

      I have the same card, a 9800 gtx+, and from the posts I cannot determine if you got the bios...

      I am not sure how to send it to you, since the form for mail does not allow atatchments.

      Do you still need the bios?

       
      • Tony Houghton
        Tony Houghton
        2009-01-10

        I found the email address in the docs and sent the bios with my usual mailer, but I don't know whether thunderbird received it. There was what looked like an obvious spam trap in the address so I removed it.

         
    • A small update I still don't know how to check which register is used for fanspeed control. The problem is that normally a given architecture (e.g. G80, G86 ..) uses a specific register for all boards but now that is mixed. There must be a place where this is stored but I haven't been able to find it yet. If I just add the code it won't work well :(

       
    • legonxt
      legonxt
      2009-05-09

         
      I have 3 video cards in one system - 9800gx2 (msi), 9800gtx + (gainward) and 9800gtx + (gainward).
      Team nvclock-T check the temperature of GPU. Team nvclock-C2-T - can not get a core temperature of the second card 9800gx2, error "Error: You only used the-c option". Temperature of the second and subsequent GPU can be viewed only using "nvclock-c3-i-f
      .

      Team nvclock-c3-i-f on 9800gtx + issues:
      "-- General info --
      Card:           Unknown Nvidia card
      Architecture:   G92 A2
      PCI id:         0x613
      GPU clock:      740.568 MHz
      Bustype:        PCI-Express

      -- Shader info --
      Clock: 1836.000 MHz
      Stream units: 128 (11111111b)
      ROP units: 16 (1111b)
      -- Memory info --
      Amount:         512 MB
      Type:           256 bit DDR3
      Clock:          1101.600 MHz

      -- PCI-Express info --
      Current Rate:   8X
      Maximum rate:   16X

      -- Sensor info --
      Sensor: GPU Internal Sensor
      GPU temperature: -361C

      -- VideoBios information --
      Version: 62.92.62.00.00
      Signon message: NVIDIA GeForce 9800 GTX+ VGA BIOS
      Performance level 0: gpu 300MHz/shader 600MHz/memory 100MHz/1.00V/100%
      Performance level 1: gpu 745MHz/shader 1848MHz/memory 1100MHz/1.15V/100%
      VID mask: 3
      Voltage level 0: 1.00V, VID: 0
      Voltage level 1: 1.05V, VID: 1
      Voltage level 2: 1.10V, VID: 2
      Voltage level 3: 1.15V, VID: 3"

      - Unrealistic temperatures. :)

      command "nvclock-D" shows the information for only the first GPU video card 9800gx2, "nvclock-c2-D" gives "Error: You only used the-c option"

         
      more info:
      "# nvclock -c3 -T -d -f
      Unknown Nvidia card
      => GPU temperature: -361C
      # nvclock -T -d -f
      nVidia Geforce 9800GX2
      => GPU temperature: 93C
      => Board temperature: 89C"

      I can send cards from videobios 9800gtx +. At what address to send?

      OS: Gentoo x64 on AMD cpu.

       
    • legonxt
      legonxt
      2009-05-09

      I have 3 video cards in one system - 9800gx2 (msi), 9800gtx + (gainward) and 9800gtx + (gainward).
      Use "nvclock -T" check the temperature of GPU. Use nvclock -C2 -T - can not get a core temperature of the second card 9800gx2, error "Error: You only used the -c option".
      Temperature of the second and subsequent GPU can be viewed only using "nvclock -c3 -i -f."

      USe nvclock-c3-i-f on 9800gtx + issues:
      "-- General info --
      Card:           Unknown Nvidia card
      Architecture:   G92 A2
      PCI id:         0x613
      GPU clock:      740.568 MHz
      Bustype:        PCI-Express

      -- Shader info --
      Clock: 1836.000 MHz
      Stream units: 128 (11111111b)
      ROP units: 16 (1111b)
      -- Memory info --
      Amount:         512 MB
      Type:           256 bit DDR3
      Clock:          1101.600 MHz

      -- PCI-Express info --
      Current Rate:   8X
      Maximum rate:   16X

      -- Sensor info --
      Sensor: GPU Internal Sensor
      GPU temperature: -361C

      -- VideoBios information --
      Version: 62.92.62.00.00
      Signon message: NVIDIA GeForce 9800 GTX+ VGA BIOS
      Performance level 0: gpu 300MHz/shader 600MHz/memory 100MHz/1.00V/100%
      Performance level 1: gpu 745MHz/shader 1848MHz/memory 1100MHz/1.15V/100%
      VID mask: 3
      Voltage level 0: 1.00V, VID: 0
      Voltage level 1: 1.05V, VID: 1
      Voltage level 2: 1.10V, VID: 2
      Voltage level 3: 1.15V, VID: 3"

      - Unrealistic temperatures. :)

      command "nvclock -D" shows the information for only the first GPU video card 9800gx2, "nvclock -c2 -D" gives "Error: You only used the -c option"

         
      more info:
      "# nvclock -c3 -T -d -f
      Unknown Nvidia card
      => GPU temperature: -361C
      # nvclock -T -d -f
      nVidia Geforce 9800GX2
      => GPU temperature: 93C
      => Board temperature: 89C"

      I can send cards from videobios 9800gtx +. At what address to send?

      OS: Gentoo x64.

       
    • Peter
      Peter
      2009-05-10

      Not sure if it is entirely useful but i experimented a little with riva tuner at got the following information (for an asus en9800gtx+ dark knight):

      $0200020400 NV_20400 <= temperature (hex=>dec)
      $020000e118 NV_E118 <= target fanspeed (0%=0h; 37%=606h; 43%=700h; 85%=DD6h; 100%=1046h)

      There is another register which changes everytime: $0200020008 NV_20008 - but i don't have a clue what it use might be since there doesnt seem to be any correlation.

      Its easy to obtain this information with riva tuner and its graphic subsystem report function - just in case anybody else can give information.

       
    • Peter
      Peter
      2009-05-12

      Ok for all people who can't wait like me:

      Based on the information in my last post i was able to read and set the fan speed by doing the following modifications in /src/backend/nv50.c

      ============================================================
      static float g84_get_fanspeed()

      {

          int pwm_divider = nv_card->PMC[0xe118/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 0xe118 / 0xe118. 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)((nv_card->PMC[0xe118/4])) * 100.0/0x1046;

          return fanspeed;

      }

      static void g84_set_fanspeed(float speed)

      {

          int value;

          int pwm_divider = nv_card->PMC[0xe118/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[0xe118/4] & 0x7fff0000) | ((int)(speed/100*0x1046));

          nv_card->PMC[0xe118/4] = value;

      }

      ============================================================

      The pwm_divider is probably useless in that version and of course i still have to use the force parameter since i didnt implement new static functions but at least i get the fan quiet now.