intel_reg_dumper: Add support for reading register dumps from files

Also add intel_reg_snapshot for creating such snapshots, and relevant
documentation.

Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2010-03-31 17:25:23 -04:00
parent 2187ec2112
commit cd64e19329
7 changed files with 109 additions and 5 deletions

View File

@ -25,12 +25,17 @@
* *
*/ */
#include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <errno.h>
#include <err.h> #include <err.h>
#include <assert.h> #include <assert.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include "intel_gpu_tools.h" #include "intel_gpu_tools.h"
#include "i915_drm.h" #include "i915_drm.h"
#include "intel_batchbuffer.h" #include "intel_batchbuffer.h"
@ -82,6 +87,28 @@ intel_get_pci_device(void)
devid = pci_dev->device_id; devid = pci_dev->device_id;
} }
void
intel_map_file(char *file)
{
int fd;
struct stat st;
fd = open(file, O_RDWR);
if (fd == -1) {
fprintf(stderr, "Couldn't open %s: %s\n", file,
strerror(errno));
exit(1);
}
fstat(fd, &st);
mmio = mmap(NULL, st.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
if (mmio == MAP_FAILED) {
fprintf(stderr, "Couldn't mmap %s: %s\n", file,
strerror(errno));
exit(1);
}
close(fd);
}
void void
intel_get_mmio(void) intel_get_mmio(void)
{ {

View File

@ -56,3 +56,4 @@ void intel_get_drm_devid(int fd);
void intel_copy_bo(struct intel_batchbuffer *batch, void intel_copy_bo(struct intel_batchbuffer *batch,
drm_intel_bo *dst_bo, drm_intel_bo *src_bo, drm_intel_bo *dst_bo, drm_intel_bo *src_bo,
int width, int height); int width, int height);
void intel_map_file(char *);

View File

@ -4,8 +4,21 @@
.SH NAME .SH NAME
intel_reg_dumper \- Decode a bunch of Intel GPU registers for debugging intel_reg_dumper \- Decode a bunch of Intel GPU registers for debugging
.SH SYNOPSIS .SH SYNOPSIS
.B intel_reg_dumper .B intel_reg_dumper [ file ]
.SH DESCRIPTION .SH DESCRIPTION
.B intel_reg_write .B intel_reg_dumper
is a tool to read and decode the values of many Intel GPU registers. It is is a tool to read and decode the values of many Intel GPU registers. It is
commonly used in debugging video mode setting issues. commonly used in debugging video mode setting issues. If the
.B file
argument is present, the registers will be decoded from the given file
instead of the current registers. Use the
.B intel_reg_snapshot
tool to generate such files.
.SH ENVIRONMENT
.BR HAS_PCH_SPLIT
.PP
If set, decode as though the GPU has a PCH split. This is only necessary for
Intel HD (Ironlake) and later register dumps in files; live decodes get this
correct automatically.
.SH SEE ALSO
.BR intel_reg_snapshot(1)

15
man/intel_reg_snapshot.1 Normal file
View File

@ -0,0 +1,15 @@
.\" shorthand for double quote that works everywhere.
.ds q \N'34'
.TH intel_reg_snapshot 1 "intel_reg_snapshot 1.0"
.SH NAME
intel_reg_snapshot \- Take a GPU register snapshot
.SH SYNOPSIS
.B intel_reg_snapshot
.SH DESCRIPTION
.B intel_reg_snapshot
takes a snapshot of the registers of an Intel GPU, and writes it to standard
output. These files can be inspected later with the
.B intel_reg_dumper
tool.
.SH SEE ALSO
.BR intel_reg_dumper(1)

View File

@ -10,6 +10,7 @@ bin_PROGRAMS = \
intel_lid \ intel_lid \
intel_stepping \ intel_stepping \
intel_reg_dumper \ intel_reg_dumper \
intel_reg_snapshot \
intel_reg_write \ intel_reg_write \
intel_reg_read intel_reg_read

View File

@ -1658,9 +1658,12 @@ intel_dump_regs(void)
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
intel_get_mmio(); if (argc == 2)
intel_map_file(argv[1]);
else
intel_get_mmio();
if (HAS_PCH_SPLIT(devid)) if (HAS_PCH_SPLIT(devid) || getenv("HAS_PCH_SPLIT"))
ironlake_dump_regs(); ironlake_dump_regs();
else else
intel_dump_regs(); intel_dump_regs();

View File

@ -0,0 +1,44 @@
/*
* Copyright © 2010 Red Hat, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Authors:
* Adam Jackson <ajax@redhat.com>
*/
#include <unistd.h>
#include "intel_gpu_tools.h"
int main(int argc, char** argv)
{
int mmio_bar;
intel_get_mmio();
if (IS_9XX(devid))
mmio_bar = 0;
else
mmio_bar = 1;
write(1, mmio, pci_dev->regions[mmio_bar].size);
return 0;
}