View Single Post
Staro 01.07.2006., 14:45   #216
Emissary
ČLAN FKTa
Moj komp
 
Emissary's Avatar
 
Datum registracije: Jul 2004
Lokacija: Split
Postovi: 2,264
A evo i jednostavnog pojašnjenja:

Q: There are a lot of rumors
about
GeForceFX software voldmods on the net. I've seen some online BIOS voltmodding
tutorials and even volmodded BIOSes available for download. Can you comment
it?

A: Yes, GPU core voltage is really software
controllable on GeForce FX graphics processors. Unfortunately, all online BIOS
voltmodding guides I've seen seem to be written using blind comparison of different
BIOS binaries without actual understanding of software voltage control internals.
So they contain some logical errors. The same applies to some voltmodded BIOSes
available for download on some websites.


To understand internals of software voltage control, let's start from the very
beginning. NVIDIA boards have some GPU controllable GPIO (General Purpose Input
Output) pins, which are used for different purposes. Up to three of these pins
can be used to control core voltage on GeForce FX based boards. The states of
this pins form binary word (up to three bits width), which uniquely identify
target core voltage. This word is called VID, or voltage identifier. So to program
desired core voltage driver simply sets each pin to the corresponding state
via the corresponding GPIO register. But VID interpretation entirely depends
on the PCB's core voltage generation logic, for example most of NV35/38 boards
control core voltage via ISL6569 IC, where its' VID0 and VID1 input pins are
hardwired to 0 / 1, and VID2 - VID4 pins are programmable by GPU. So core voltage
on these boards can be adjusted in 0.8 - 1.5V range with 0.1V granularity and
all three GPIO pins are used. Other boards may have (and do have) simpler voltage
control logic (e.g. simplest 1-bit VID selecting one of 2 predefined voltages).
As I've said before, VID interpretation may differ depending on the PCB design,
and driver knows nothing about it. To allow hardware vendors to alter voltage
control logic safely, NVIDIA introduced so called voltage tables in BIOS with
BMP structure version 5.25 and newer. For older BIOSes driver uses its' own
GPU-specific internal voltage table. Voltage table begins from the header, containing
total amount of voltage entries, size of each entry and valid VID bitmask. The
last field is the most important, because it 'tells' the driver which pins actually
control the voltage. For example, nobody prevents hardware vendor from using
2-bit VID defined by pin 0 and pin 2. In this case VID bitmask will contain
101b. Take a note, that the driver will never program masked pins. Array of
voltage table entries follows by the header. Each voltage table entry contains
target voltage identifier (target voltage (in Volts) * 100) and VID defining
this voltage. The first element of each entry (i.e. target voltage identifier)
is used just to allow the driver to pick the corresponding VID from the table
(because the driver knows nothing about VID, it knows just the target voltage
picked from the corresponding performance level entry in the performance table).
So when programming the voltage, the driver simply picks required voltage entry
from the table by scanning all voltage table entries, comparing target voltage
identifier with voltage identifier of each entry and selecting the closest entry.
When the entry is selected, the driver disassembles VID on separate bits, and
programs each non-masked bit via the corresponding GPIO register.

If you've read all this info carefully, you may already see logical errors and
potential problems in currently walking voltmodded BIOS yourself:

First, it's plain wrong to voltmod BIOS by copying 1.5V VID from NV38's voltage
table to all other BIOSes without seeing the PCB and its' voltage control logic
as it is advised in BIOS voltmod tutorials. VIDs do not have to be the same
on all boards.

Second, it's wrong to ignore VID bitmask and to edit voltage table entry's VID
only. As an example, let's take a board with the following 2-bit VID:

00 -> 1.1V, 01 -> 1.2V, 02 -> 1.3V and 03 -> 1.4V. Attempt to boost
voltage by increasing VID to 4 will actually lower voltage and result in setting
1.1V (4 & 3 = 0). Attempt to boost voltage by copying NV38's 1.5V VID (7)
will simply do nothing (7 & 3 = 3). The same attempt on the board with different
2-bit VID interpretation (e.g. 01 -> 1.4V, 02 -> 1.3V, 03 -> 1.2V)
will also lower voltage and set it to 1.2V. So if you can actually see the PCB
and are sure that there are more than 2 bits in VID - you've to change VID mask
too. Otherwise, you simply shouldn't touch it.


To help you to see if your voltmodded BIOS really affects VIDs, RivaTuner gives
you an ability to monitor state of voltage related GPIO pins in realtime, so
you may see which VID is currently programmed by the driver. Using RivaTuner's
VID interpretation feature you may also see both raw VID data and target voltage
corresponding to this VID (to select VID interpretation mode right-click VID
graph in the hardware monitoring window, select Setup from the context menu
and press More button). Furthermore, RivaTuner's diagnostic report module allows
you to see internals of voltage table stored in VGA BIOS and warns you if there
are some entries with invalid VIDs, which don't conform to VID bitmask.


Q: If it is possible to program VID
pins, will RivaTuner provide us an ability to adjust GPU core voltage on-the-fly
for GeForceFX display adapters?

A: No, sorry. I'll never add software
voltage adjustment to RivaTuner as well as I'll never provide info about the
GPU registers controlling GPIO VID pins to third party tools creators. I don't
want to be related to development of the tool responsible for burning someone's
system, and direct voltage control via Windows utility is one on the things
that can help beginners to fry their GPUs.

Emissary je offline   Reply With Quote