nva
Folders and files
Name | Name | Last commit date | ||
---|---|---|---|---|
parent directory.. | ||||
This directory contains tools used to manually poke or query the card registers. WARNING: these tools *can* and *will* hang your machine if you don't know what you're doing. Hardware destruction is likely also possible, although no incidents are known to have happened yet. In most cases it's also not recommended to use these tools while a driver is active for a given card. All programs except nvalist take an optional -c <card number> parameter. The valid card numbers are 0 .. (card count in system - 1). If -c is not specified, it defaults to 0. A list of cards with their numbers is given by the nvalist program. == General tools == nvalist Prints a list of cards nvatiming [-p <print_filter>]* [-e <execlude_filter>]* Attempts to measure what frequency various units of the card are running at by using misc tricks. <print_filter> and <execlude_filter> can be any of [crystal, ptimer, pgraph_clk_dispatch, pwm, pcounter, disp_clk, fuc]. == MMIO registers == [-ibt <regspace_opt>] Some tools on MMIO registers may have these options, which can choose a register space to operate on. -i: the index of register space (for VGA-related register spaces.) -b: operation size in bytes. Any of [1, 2, 4, 8]. -t: register type. Any of [bar0, mmio, bar1, fb, bar2, bar3, ramin, iobar, rawmem, rawio, pdac, eeprom, cr, sr, gr, ar, cr, vst, pipe, vcomp_code, vcomp_reg, macro_code, xt]. cr/sr/gr/ar/cr/vst are registers for VGA. bar0 and mmio are for BAR0 register space, bar1 and fb are for BAR1, and bar2/bar3/radmin are for BAR2. nvapeek [-ibt <regspace_opt>] <address> [<byte count>] Reads 32-bit MMIO register at <address>. If byte count is also given, reads all registers in range [<address>, <address> + <byte count>). nvapoke [-ibt <regspace_opt>] <address> <value> Writes a 32-bit <value> to the MMIO register at <address>. nvapeekstat <address> [<count>=10000] Shows the frequency of the values for the 32 bit MMIO register at <address> over <count> times of reads. nvafuzz <address> [<byte count>] Writes random values to a register or a register range in an infinite loop. Needs to be manually aborted. nvahammer <address> <value> Like nvapoke, but repeats the write in an infinite loop. Needs to be manually aborted. nvascan [-as] [-ibt <regspace_opt>] <address> [<byte count>] For each register in a range: read it, write 0xffffffff, read it, write 0, read it, write back the original value. Helpful to see the valid values for registers. If -s option is passed, does a slow scan - waits and reads PMC.ID register between scans to recover from errors caused by invalid register accesses. If -a option is passed, does a cross-test on all registers in the range to detect aliased addresses [not particularly reliable]. nvafill <address> [<length>] [value] Fills the MMIO registers at [<address>:<address+length>) with the 32 bit number <value> nvawatch [-t] <address> Reads MMIO register at <address> in a loop, prints the value every time it changes. If -t is specified, prints a timestamp and diff from the previous timestamp before the value. Never quits, needs to be manually aborted. nvammiotracereplay <trace_file> [-l <mmio_start>] [-h <mmio_end>] [-b <start>] [-s <steps>] Replays the MMIO register writes in <trace_file>. If <mmio_start> and <mmio_end> are used, it limits the range of valid registers to be written. If <start> is specified, it starts the replay at the <start>th line of <trace_file>. If <steps> is given, it pauses after the replay of every <steps> lines. <trace_file> can be a compressed file with gzip/bz/xz. == VBIOS == nvagetbios [-s <extraction method>] Extracts the card's VBIOS using the method given as parameter and writes it to stdout. Method can be PROM or PRAMIN. If method is not given, defaults to something sensible. nvafakebios [-eEwWlL <offset:val>]* <vbiosfile> Reads the vbios data from <vbiosfile>, edits the bios according to the given parameters, and then uploads the vbios. -e/-E option is for a byte, -w/-W is for a word (16 bits), and -l/-L is for a double word (32 bits). <offset> is in hex, and "val" can be expressed either in decimal numbers (-E/-W/-L) or in hex numbers (-e/-w/-l). Multiple edit commands can be supplied to edit multiple places. == VRAM == nvadownload <mem_addr> <length> [<filename>] Reads the VRAM physical address at [<mem_addr>:<mem_addr>+<length>). If <filename> is specified, writes to the file; otherwise writes to the standard output. Only works on G80 or later. nvaupload <mem_addr> [<filename>] Writes to the VRAM physical address at <mem_addr> using the file specified. Only works on G80 or later. == Command channel == nvaevo <channel> <method> <data> Submit a display command. Only works on G80 or later. == I2C == nvaspyi2c [-a <CPU affinity>] [-v] <i2c_port> Monitors the activity of the given I2C port. == Falcon == nvafucstart [-bvpsou] <payload_file> Uploads the microcode in <payload_file> to the Falcon microprocessor, and executes it. -b is for PVLD, -v for PVDEC, -p for PPPP, -s for PSEC, -o for PCOPY, and -u for PVCOMP. == vµc == nvavucstart [-bvu] <payload_file> Uploads the microcode in <payload_file> to vµc. -b is for PBSP, -v for PVP. -u specifies the upload only (without starting the program.) File format: 4 bytes per word, 2 words per opcode. First word: low 32 bit, second word: high 8 bit, both system-endian. == Xtensa == NOTE: For most Xtensa commands, you need to run the daemon program (geist.xt) using nvaxtstart first before running the commands. nvaxtstart [-bv] <payload_file> Uploads the microcode in <payload_file> to the xtensa microprocessor, and executes the microcode. -b is for PBSP, -v is for PVP2. nvaxtpeek <address> [<length>=4] Reads xtensa memory at [<address>:<address>+<length>). * Prerequisite: a short "daemon" program (e.g. geist.xt) should be uploaded and executed, typically using nvaxtstart. nvaxtpoke <address> <value> Writes 32 bit <value> to the xtensa memory at <address>. * Prerequisite: a short "daemon" program (e.g. geist.xt) should be uploaded and executed, typically using nvaxtstart. nvaxtinsn <insn> [<parm>=0] Executes a single instruction on xtensa processor. The instruction has to be of the 3-byte kind, and is specified as a 24-bit hex word. The parameter is stuffed to $a3 register on the xtensa CPU, and the output of the command is $a3 value after the instruction executed (or xtensa exception code). * Prerequisite: a short "daemon" program (e.g. geist.xt) should be uploaded and executed, typically using nvaxtstart. nvaxtrsr <address> [<length>=1] Reads xtensa special registers at [<address>:<address>+<length>). * Prerequisite: a short "daemon" program (e.g. geist.xt) should be uploaded and executed, typically using nvaxtstart. nvaxtssr <address> [<length>=1] Reads a xtensa special register at <address>, and show what happens with writes to the <address> with the values 0xffffffff and 0x0. After writes, it writes to the register with the original value. * Prerequisite: a short "daemon" program (e.g. geist.xt) should be uploaded and executed, typically using nvaxtstart. nvaxttime Measures PBSP clock frequency == PGRAPH/PCOUNTER/PDAEMON == nvacounter Tries to find PCOUNTER signals, supported GPUs are NV10:GF100. * Should not be used with nouveau or nvidia. nvagetpmu Downloads the PMU microcode (in PDAEMON) from a running machine. * Prerequisite: the nvidia driver has to be up and running. nvastrscan Scans PGRAPH context strands, for [G80:GF100] GPUs. (Complicated.) nvaforcetemp <temp> Forces the reported temperature to be a user-supplied value. Useful for reverse-engineering clocking policies related to the temperature. If <temp> is zero, it resets the temperature reporting. For G94 or later.