aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/mm/testmmiotrace.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/arch/x86/mm/testmmiotrace.c b/arch/x86/mm/testmmiotrace.c
index ab50a8d7402c..4b29f3b0ee01 100644
--- a/arch/x86/mm/testmmiotrace.c
+++ b/arch/x86/mm/testmmiotrace.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Written by Pekka Paalanen, 2008 <pq@iki.fi> 2 * Written by Pekka Paalanen, 2008-2009 <pq@iki.fi>
3 */ 3 */
4#include <linux/module.h> 4#include <linux/module.h>
5#include <linux/io.h> 5#include <linux/io.h>
@@ -11,28 +11,51 @@ static unsigned long mmio_address;
11module_param(mmio_address, ulong, 0); 11module_param(mmio_address, ulong, 0);
12MODULE_PARM_DESC(mmio_address, "Start address of the mapping of 16 kB."); 12MODULE_PARM_DESC(mmio_address, "Start address of the mapping of 16 kB.");
13 13
14static unsigned v16(unsigned i)
15{
16 return i * 12 + 7;
17}
18
19static unsigned v32(unsigned i)
20{
21 return i * 212371 + 13;
22}
23
14static void do_write_test(void __iomem *p) 24static void do_write_test(void __iomem *p)
15{ 25{
16 unsigned int i; 26 unsigned int i;
17 mmiotrace_printk("Write test.\n"); 27 mmiotrace_printk("Write test.\n");
28
18 for (i = 0; i < 256; i++) 29 for (i = 0; i < 256; i++)
19 iowrite8(i, p + i); 30 iowrite8(i, p + i);
31
20 for (i = 1024; i < (5 * 1024); i += 2) 32 for (i = 1024; i < (5 * 1024); i += 2)
21 iowrite16(i * 12 + 7, p + i); 33 iowrite16(v16(i), p + i);
34
22 for (i = (5 * 1024); i < (16 * 1024); i += 4) 35 for (i = (5 * 1024); i < (16 * 1024); i += 4)
23 iowrite32(i * 212371 + 13, p + i); 36 iowrite32(v32(i), p + i);
24} 37}
25 38
26static void do_read_test(void __iomem *p) 39static void do_read_test(void __iomem *p)
27{ 40{
28 unsigned int i; 41 unsigned int i;
42 unsigned errs[3] = { 0 };
29 mmiotrace_printk("Read test.\n"); 43 mmiotrace_printk("Read test.\n");
44
30 for (i = 0; i < 256; i++) 45 for (i = 0; i < 256; i++)
31 ioread8(p + i); 46 if (ioread8(p + i) != i)
47 ++errs[0];
48
32 for (i = 1024; i < (5 * 1024); i += 2) 49 for (i = 1024; i < (5 * 1024); i += 2)
33 ioread16(p + i); 50 if (ioread16(p + i) != v16(i))
51 ++errs[1];
52
34 for (i = (5 * 1024); i < (16 * 1024); i += 4) 53 for (i = (5 * 1024); i < (16 * 1024); i += 4)
35 ioread32(p + i); 54 if (ioread32(p + i) != v32(i))
55 ++errs[2];
56
57 mmiotrace_printk("Read errors: 8-bit %d, 16-bit %d, 32-bit %d.\n",
58 errs[0], errs[1], errs[2]);
36} 59}
37 60
38static void do_test(void) 61static void do_test(void)