summaryrefslogtreecommitdiff
path: root/util/ccdrv
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2004-07-05 16:49:56 -0400
committerAli Saidi <saidi@eecs.umich.edu>2004-07-05 16:49:56 -0400
commitfe3a86e2efff07f858cda6d9ebd0e6ed853429eb (patch)
tree09e3d1f5a9adf822427079713acda303b5eb5fc7 /util/ccdrv
parent3512904c744406da909690b1690350a3289bde92 (diff)
downloadgem5-fe3a86e2efff07f858cda6d9ebd0e6ed853429eb.tar.xz
updated to work on all platforms (actually map sure that the physical
address we are trying to access is mapped before accessing it.) --HG-- extra : convert_revision : 104341334a3d2bb812a6b0b6277ab353f8f9b39e
Diffstat (limited to 'util/ccdrv')
-rw-r--r--util/ccdrv/devtime.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/util/ccdrv/devtime.c b/util/ccdrv/devtime.c
index e637116a4..5c17bf5ef 100644
--- a/util/ccdrv/devtime.c
+++ b/util/ccdrv/devtime.c
@@ -34,6 +34,7 @@
#include <asm/uaccess.h>
#include <linux/kernel.h>
#include <asm/io.h>
+#include <asm/page.h>
#include <linux/netdevice.h>
#ifdef __i386__
@@ -70,18 +71,34 @@ static int __init devtime_start(void)
devSum = 0;
devCnt = count;
- printk("Preparing to read %#llx %d times.\n", addr, count);
-
- t1 = cycleCounter(trash);
- for (x=0; x < count; x++)
+ addr = ioremap(addr, PAGE_SIZE);
+ /**
+ * Make sure that the remapping actually worked. On alpha we have
+ * linear addressing, so its not a problem. But it can fail in x86
+ * if physical memory is mapped to this address.
+ */
+ if (addr)
{
- trash = readl(addr);
- t2 = cycleCounter(trash);
- devSum += t2 - t1;
- t1 = t2;
+ printk("Preparing to read %#llx %d times.\n", addr, count);
+
+ t1 = cycleCounter(trash);
+ for (x=0; x < count; x++)
+ {
+ trash = readl(addr);
+ t2 = cycleCounter(trash);
+ devSum += t2 - t1;
+ t1 = t2;
+ }
+
+ /**
+ * Unmap the address.
+ */
+ iounmap(addr);
+
+ printk("Read Address %#llx %ld times. Average latency %ld.\n", addr, devCnt, devSum/devCnt);
}
-
- printk("Read Address %#llx %ld times. Average latency %ld.\n", addr, devCnt, devSum/devCnt);
+ else
+ printk("Unable to remap address. Please try again later.\n");
} else {
dev = dev_get_by_name("eth0");
if (dev)
@@ -90,6 +107,7 @@ static int __init devtime_start(void)
dev->mem_end, dev->base_addr);
dev_put(dev);
}
+ dev = 0;
dev = dev_get_by_name("eth1");
if (dev)
{