diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2004-07-05 16:49:56 -0400 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2004-07-05 16:49:56 -0400 |
commit | fe3a86e2efff07f858cda6d9ebd0e6ed853429eb (patch) | |
tree | 09e3d1f5a9adf822427079713acda303b5eb5fc7 /util | |
parent | 3512904c744406da909690b1690350a3289bde92 (diff) | |
download | gem5-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')
-rw-r--r-- | util/ccdrv/devtime.c | 38 |
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) { |