diff options
Diffstat (limited to 'arch/mips/lib')
-rw-r--r-- | arch/mips/lib/Makefile | 4 | ||||
-rw-r--r-- | arch/mips/lib/delay.c | 56 | ||||
-rw-r--r-- | arch/mips/lib/dump_tlb.c | 9 |
3 files changed, 67 insertions, 2 deletions
diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile index c13c7ad2cdae..2adead5a8a37 100644 --- a/arch/mips/lib/Makefile +++ b/arch/mips/lib/Makefile | |||
@@ -2,8 +2,8 @@ | |||
2 | # Makefile for MIPS-specific library files.. | 2 | # Makefile for MIPS-specific library files.. |
3 | # | 3 | # |
4 | 4 | ||
5 | lib-y += csum_partial.o memcpy.o memcpy-inatomic.o memset.o strlen_user.o \ | 5 | lib-y += csum_partial.o delay.o memcpy.o memcpy-inatomic.o memset.o \ |
6 | strncpy_user.o strnlen_user.o uncached.o | 6 | strlen_user.o strncpy_user.o strnlen_user.o uncached.o |
7 | 7 | ||
8 | obj-y += iomap.o | 8 | obj-y += iomap.o |
9 | obj-$(CONFIG_PCI) += iomap-pci.o | 9 | obj-$(CONFIG_PCI) += iomap-pci.o |
diff --git a/arch/mips/lib/delay.c b/arch/mips/lib/delay.c new file mode 100644 index 000000000000..f69c6b569eb3 --- /dev/null +++ b/arch/mips/lib/delay.c | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright (C) 1994 by Waldorf Electronics | ||
7 | * Copyright (C) 1995 - 2000, 01, 03 by Ralf Baechle | ||
8 | * Copyright (C) 1999, 2000 Silicon Graphics, Inc. | ||
9 | * Copyright (C) 2007 Maciej W. Rozycki | ||
10 | */ | ||
11 | #include <linux/module.h> | ||
12 | #include <linux/param.h> | ||
13 | #include <linux/smp.h> | ||
14 | |||
15 | #include <asm/compiler.h> | ||
16 | #include <asm/war.h> | ||
17 | |||
18 | inline void __delay(unsigned int loops) | ||
19 | { | ||
20 | __asm__ __volatile__ ( | ||
21 | " .set noreorder \n" | ||
22 | " .align 3 \n" | ||
23 | "1: bnez %0, 1b \n" | ||
24 | " subu %0, 1 \n" | ||
25 | " .set reorder \n" | ||
26 | : "=r" (loops) | ||
27 | : "0" (loops)); | ||
28 | } | ||
29 | EXPORT_SYMBOL(__delay); | ||
30 | |||
31 | /* | ||
32 | * Division by multiplication: you don't have to worry about | ||
33 | * loss of precision. | ||
34 | * | ||
35 | * Use only for very small delays ( < 1 msec). Should probably use a | ||
36 | * lookup table, really, as the multiplications take much too long with | ||
37 | * short delays. This is a "reasonable" implementation, though (and the | ||
38 | * first constant multiplications gets optimized away if the delay is | ||
39 | * a constant) | ||
40 | */ | ||
41 | |||
42 | void __udelay(unsigned long us) | ||
43 | { | ||
44 | unsigned int lpj = current_cpu_data.udelay_val; | ||
45 | |||
46 | __delay((us * 0x000010c7 * HZ * lpj) >> 32); | ||
47 | } | ||
48 | EXPORT_SYMBOL(__udelay); | ||
49 | |||
50 | void __ndelay(unsigned long ns) | ||
51 | { | ||
52 | unsigned int lpj = current_cpu_data.udelay_val; | ||
53 | |||
54 | __delay((us * 0x00000005 * HZ * lpj) >> 32); | ||
55 | } | ||
56 | EXPORT_SYMBOL(__ndelay); | ||
diff --git a/arch/mips/lib/dump_tlb.c b/arch/mips/lib/dump_tlb.c index 779821cd54ab..3f69725556af 100644 --- a/arch/mips/lib/dump_tlb.c +++ b/arch/mips/lib/dump_tlb.c | |||
@@ -19,6 +19,15 @@ static inline const char *msk2str(unsigned int mask) | |||
19 | case PM_16K: return "16kb"; | 19 | case PM_16K: return "16kb"; |
20 | case PM_64K: return "64kb"; | 20 | case PM_64K: return "64kb"; |
21 | case PM_256K: return "256kb"; | 21 | case PM_256K: return "256kb"; |
22 | #ifdef CONFIG_CPU_CAVIUM_OCTEON | ||
23 | case PM_8K: return "8kb"; | ||
24 | case PM_32K: return "32kb"; | ||
25 | case PM_128K: return "128kb"; | ||
26 | case PM_512K: return "512kb"; | ||
27 | case PM_2M: return "2Mb"; | ||
28 | case PM_8M: return "8Mb"; | ||
29 | case PM_32M: return "32Mb"; | ||
30 | #endif | ||
22 | #ifndef CONFIG_CPU_VR41XX | 31 | #ifndef CONFIG_CPU_VR41XX |
23 | case PM_1M: return "1Mb"; | 32 | case PM_1M: return "1Mb"; |
24 | case PM_4M: return "4Mb"; | 33 | case PM_4M: return "4Mb"; |