summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2012-02-15 16:04:00 -0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-02-16 00:01:30 +0100
commitecad594e0254648a3bf2d995569afd18dbb75ec2 (patch)
tree27398a3859c565930c6f6e386f6e80e31acb4d86
parentad87b06fd6a5af4836562c1d318ca06a918d5466 (diff)
reg_dumper: change and fix behavior when using dump files
Before this patch, handling dump files was wrong: - when HAS_PCH_SPLIT was specified, intel_reg_dumper segfaulted inside intel_check_pch() - the "devid" variable was used but not set - there was no way to specify the device id of the machine used to generate the dump file This patch fixes this behavior with the following changes: - the HAS_PCH_SPLIT variable is gone - there is now a '-d' argument that can be used to specify the device id used to interpret the results - when a dump file is used but the '-d' argument is not provided, an Ironlake machine is assumed Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--man/intel_reg_dumper.man23
-rw-r--r--tools/intel_reg_dumper.c55
2 files changed, 64 insertions, 14 deletions
diff --git a/man/intel_reg_dumper.man b/man/intel_reg_dumper.man
index 63f3dcdc..89f6b9f9 100644
--- a/man/intel_reg_dumper.man
+++ b/man/intel_reg_dumper.man
@@ -4,7 +4,7 @@
.SH NAME
intel_reg_dumper \- Decode a bunch of Intel GPU registers for debugging
.SH SYNOPSIS
-.B intel_reg_dumper [ file ]
+.B intel_reg_dumper [ options ] [ file ]
.SH DESCRIPTION
.B intel_reg_dumper
is a tool to read and decode the values of many Intel GPU registers. It is
@@ -14,11 +14,20 @@ 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.
+
+When the
+.B file
+argument is present and the
+.B -d
+argument is not present,
+.B intel_reg_dumper
+will assume the file was generated on an Ironlake machine.
+.SH OPTIONS
+.TP
+.B -d id
+when a dump file is used, use 'id' as device id (in hex)
+.TP
+.B -h
+prints a help message
.SH SEE ALSO
.BR intel_reg_snapshot(1)
diff --git a/tools/intel_reg_dumper.c b/tools/intel_reg_dumper.c
index 66470c41..346fa2c3 100644
--- a/tools/intel_reg_dumper.c
+++ b/tools/intel_reg_dumper.c
@@ -30,9 +30,10 @@
#include <stdio.h>
#include <string.h>
#include <err.h>
+#include <unistd.h>
#include "intel_gpu_tools.h"
-static uint32_t devid;
+static uint32_t devid = 0;
#define DEBUGSTRING(func) static void func(char *result, int len, int reg, uint32_t val)
@@ -2072,21 +2073,61 @@ intel_dump_regs(void)
}
}
+static void print_usage(void)
+{
+ printf("Usage: intel_reg_dumper [options] [file]\n"
+ "Options:\n"
+ " -d id when a dump file is used, use 'id' as device id (in "
+ "hex)\n"
+ " -h prints this help\n");
+}
+
int main(int argc, char** argv)
{
struct pci_device *pci_dev;
+ int opt;
+ char *file = NULL;
- if (argc == 2)
- intel_map_file(argv[1]);
- else {
+ while ((opt = getopt(argc, argv, "d:h")) != -1) {
+ switch (opt) {
+ case 'd':
+ devid = strtol(optarg, NULL, 16);
+ break;
+ case 'h':
+ print_usage();
+ return 0;
+ default:
+ print_usage();
+ return 1;
+ }
+ }
+ if (optind < argc)
+ file = argv[optind];
+
+ if (file) {
+ intel_map_file(file);
+ if (devid) {
+ if (IS_GEN5(devid))
+ pch = PCH_IBX;
+ else
+ pch = PCH_CPT;
+ } else {
+ printf("Dumping from file without -d argument. "
+ "Assuming Ironlake machine.\n");
+ devid = 0x0042;
+ pch = PCH_IBX;
+ }
+ } else {
pci_dev = intel_get_pci_device();
- devid = pci_dev->device_id; /* XXX not true when mapping! */
+ devid = pci_dev->device_id;
intel_get_mmio(pci_dev);
+
+ if (HAS_PCH_SPLIT(devid))
+ intel_check_pch();
}
- if (HAS_PCH_SPLIT(devid) || getenv("HAS_PCH_SPLIT")) {
- intel_check_pch();
+ if (HAS_PCH_SPLIT(devid)) {
ironlake_dump_regs();
}
else if (IS_945GM(devid)) {