summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Bennett <stuart@freedesktop.org>2009-04-04 02:23:17 +0100
committerStuart Bennett <stuart@freedesktop.org>2009-04-04 17:25:34 +0100
commit272b6783b189171e4f3f8a87eb2f8ba92c1a6e83 (patch)
tree65b7f20aa41c3c3da2ee234f2730d78c7dff9f4d
parent8f6fb577184c6824b22542f555194049d6c67f2b (diff)
Add 8 bit register read/set methods
-rw-r--r--radeontool.c38
1 files changed, 29 insertions, 9 deletions
diff --git a/radeontool.c b/radeontool.c
index b7bf515..7d87ce9 100644
--- a/radeontool.c
+++ b/radeontool.c
@@ -126,6 +126,8 @@ static void usage(void)
printf(" --skip=1 - use the second radeon card\n");
printf("\n");
printf(" regs - show a listing of some random registers\n");
+ printf(" 8regmatch <pattern> - show 8 bit registers matching wildcard pattern\n");
+ printf(" 8regset <pattern> <value> - set 8 bit registers matching wildcard pattern\n");
printf(" regmatch <pattern> - show registers matching wildcard pattern\n");
printf(" regset <pattern> <value> - set registers matching wildcard pattern\n");
printf("\n");
@@ -376,7 +378,7 @@ static struct {
} reg_list[] = {
};
-void radeon_reg_match(const char *pattern)
+void radeon_reg_match(const char *pattern, int byte)
{
int i;
unsigned long address;
@@ -384,8 +386,13 @@ void radeon_reg_match(const char *pattern)
if (pattern[0] == '0' && pattern[1] == 'x') {
address = strtol(&(pattern[2]), NULL, 16);
- value = radeon_get32(address, pattern);
- printf("%s\t0x%08x (%d)\n", pattern, value, value);
+ if (byte) {
+ value = radeon_get8(address, pattern);
+ printf("%s\t0x%02x (%d)\n", pattern, value, value);
+ } else {
+ value = radeon_get32(address, pattern);
+ printf("%s\t0x%08x (%d)\n", pattern, value, value);
+ }
return;
}
@@ -405,16 +412,21 @@ void radeon_reg_match(const char *pattern)
}
}
-void radeon_reg_set(const char *name, unsigned value)
+void radeon_reg_set(const char *name, unsigned value, int byte)
{
int i;
unsigned long address;
if (name[0]=='0' && name[1]=='x') {
address = strtoul(&(name[2]), NULL, 16);
- printf("OLD: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name));
- radeon_set32(address, name, value);
- printf("NEW: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name));
+ if (byte) {
+ radeon_set8(address, name, value);
+ printf("Wrote: %s (%02lx)\t0x%02x\n", name, address, value);
+ } else {
+ printf("OLD: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name));
+ radeon_set32(address, name, value);
+ printf("NEW: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name));
+ }
return;
}
if (name[0] == 'C' && name[2] == ':') {
@@ -592,7 +604,11 @@ int main(int argc,char *argv[])
};
} else if(argc == 3) {
if(strcmp(argv[1],"regmatch") == 0) {
- radeon_reg_match(argv[2]);
+ radeon_reg_match(argv[2], 0);
+ return 0;
+ };
+ if(strcmp(argv[1],"8regmatch") == 0) {
+ radeon_reg_match(argv[2], 1);
return 0;
};
if(strcmp(argv[1],"owner") == 0) {
@@ -601,7 +617,11 @@ int main(int argc,char *argv[])
};
} else if(argc == 4) {
if(strcmp(argv[1],"regset") == 0) {
- radeon_reg_set(argv[2], strtoul(argv[3], NULL, 0));
+ radeon_reg_set(argv[2], strtoul(argv[3], NULL, 0), 0);
+ return 0;
+ }
+ if(strcmp(argv[1],"8regset") == 0) {
+ radeon_reg_set(argv[2], strtoul(argv[3], NULL, 0), 1);
return 0;
}
}