- any single setup NVIDIA videocard of the following generations - nv50, nv8x, nv9x.
Note: Any additional cards (nv3x, nv4x, nvAx) are currently out of the scope of
the project If you are willing to add them please be my guest. If you do not
know the generation of your card take a look here 
- a working binary driver version 190.42 or above, including the -dev package
provided by your distribution
- linux kernel with CONFIG_MMIOTRACE built-in
- the normal build-essentials, such as gcc, make etc.
- xorg-dev packages provided by your distribution
- compressing programs like - xz-utils, tar and gzip
- git-core - used to get the source
- timeout - a small program that kills a program after a specified amount of time
1. Download the relevant files
$ git clone git://nouveau.git.sourceforge.net/gitroot/nouveau/nouveau nouveau
2. Compile the program
$ cd nouveau/nouveau-pm
3. Disable all of the fancy window effects that comes with "eye candy" window
managers, like compiz, KWin etc. and make sure that they will not start again
upon the next X session
4. Exit to a virtual terminal and kill X
5. Run the following script as root
$ sudo ./init-trace.sh
6. Startup X
7. Once everything is up and running fire up you favorite terminal emulator
and the following script as root
$ sudo ./run-trace.sh
Retain yourself from running anything else as it may alter the clocks and/or
increase the dump size.
Within two-three minutes you should see the message "Dumping done. Stopping
tracer" but the script will continue running (compressing the data and
collecting other information).
If the above message does not appear, stop the script manually and do NOT send the dump.
This means that the driver did not decrease the clocks to
NV_CTRL_GPU_DEFAULT_2D_CLOCK_FREQS, which can be caused by several reasons :
A. You are using a videocard without "dedicated video memory", i.e. the card is
using the system memory / the card is a integrated within the motherboard
B. The test is being run while something is connected to the HDMI/DP output
(please send me a email if it happens with other outputs)
Possible workarounds :
A. Use gdb to find the lowest frequency the "integrated" videocard reaches in a stable 2D state.
Within 3-4 minutes look at the value returned by NV_CTRL_GPU_CURRENT_CLOCK_FREQS.
Set def_2d to the same value and repeat the procedure from step 3 onwards.
Example of monitor_downclocking.c (around line 170)
+ def_2d = 0x008b0078; // example of 139MHz core, and 120MHz mem
// Where def_2d is a packed integer. The upper 16bits are the core freq and the mem
// freq is the lower 16bits. All the values are in MHz
XNVCTRLQueryTargetAttribute (dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, 0,
B. Use alternative output such as VGA/DVI
8. In the end there should be a file created in your current directory called
Where nvXX is the generation of the card (see  for a list), and YYYYYYYY is
the BOOT_0 and ZZZZ is the PCI_ID/DEVICE_ID
9. Please send the file, your vbios , along with some additional information that you believe
to be relevant to mmio dot dumps at gmail dot com.
NOTE: When sending a dump it will be uploaded to XXX so that other people and devs can take a look
and assist. Your EMAIL WILL BE PUBLICLY MADE available. If you wish it may excluded just state in your email.