diff options
author | Tejun Heo <tj@kernel.org> | 2010-01-04 19:17:33 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-01-04 19:17:33 -0500 |
commit | 32032df6c2f6c9c6b2ada2ce42322231824f70c2 (patch) | |
tree | b1ce838a37044bb38dfc128e2116ca35630e629a /arch/microblaze/include | |
parent | 22b737f4c75197372d64afc6ed1bccd58c00e549 (diff) | |
parent | c5974b835a909ff15c3b7e6cf6789b5eb919f419 (diff) |
Merge branch 'master' into percpu
Conflicts:
arch/powerpc/platforms/pseries/hvCall.S
include/linux/percpu.h
Diffstat (limited to 'arch/microblaze/include')
-rw-r--r-- | arch/microblaze/include/asm/asm-offsets.h | 1 | ||||
-rw-r--r-- | arch/microblaze/include/asm/cache.h | 16 | ||||
-rw-r--r-- | arch/microblaze/include/asm/cacheflush.h | 124 | ||||
-rw-r--r-- | arch/microblaze/include/asm/cpuinfo.h | 5 | ||||
-rw-r--r-- | arch/microblaze/include/asm/device.h | 12 | ||||
-rw-r--r-- | arch/microblaze/include/asm/elf.h | 1 | ||||
-rw-r--r-- | arch/microblaze/include/asm/ftrace.h | 25 | ||||
-rw-r--r-- | arch/microblaze/include/asm/futex.h | 127 | ||||
-rw-r--r-- | arch/microblaze/include/asm/irqflags.h | 112 | ||||
-rw-r--r-- | arch/microblaze/include/asm/page.h | 3 | ||||
-rw-r--r-- | arch/microblaze/include/asm/pgalloc.h | 9 | ||||
-rw-r--r-- | arch/microblaze/include/asm/prom.h | 135 | ||||
-rw-r--r-- | arch/microblaze/include/asm/pvr.h | 30 | ||||
-rw-r--r-- | arch/microblaze/include/asm/setup.h | 2 | ||||
-rw-r--r-- | arch/microblaze/include/asm/system.h | 2 | ||||
-rw-r--r-- | arch/microblaze/include/asm/uaccess.h | 12 |
16 files changed, 318 insertions, 298 deletions
diff --git a/arch/microblaze/include/asm/asm-offsets.h b/arch/microblaze/include/asm/asm-offsets.h new file mode 100644 index 000000000000..d370ee36a182 --- /dev/null +++ b/arch/microblaze/include/asm/asm-offsets.h | |||
@@ -0,0 +1 @@ | |||
#include <generated/asm-offsets.h> | |||
diff --git a/arch/microblaze/include/asm/cache.h b/arch/microblaze/include/asm/cache.h index c209c47509d5..e52210891d78 100644 --- a/arch/microblaze/include/asm/cache.h +++ b/arch/microblaze/include/asm/cache.h | |||
@@ -21,20 +21,4 @@ | |||
21 | 21 | ||
22 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | 22 | #define SMP_CACHE_BYTES L1_CACHE_BYTES |
23 | 23 | ||
24 | void _enable_icache(void); | ||
25 | void _disable_icache(void); | ||
26 | void _invalidate_icache(unsigned int addr); | ||
27 | |||
28 | #define __enable_icache() _enable_icache() | ||
29 | #define __disable_icache() _disable_icache() | ||
30 | #define __invalidate_icache(addr) _invalidate_icache(addr) | ||
31 | |||
32 | void _enable_dcache(void); | ||
33 | void _disable_dcache(void); | ||
34 | void _invalidate_dcache(unsigned int addr); | ||
35 | |||
36 | #define __enable_dcache() _enable_dcache() | ||
37 | #define __disable_dcache() _disable_dcache() | ||
38 | #define __invalidate_dcache(addr) _invalidate_dcache(addr) | ||
39 | |||
40 | #endif /* _ASM_MICROBLAZE_CACHE_H */ | 24 | #endif /* _ASM_MICROBLAZE_CACHE_H */ |
diff --git a/arch/microblaze/include/asm/cacheflush.h b/arch/microblaze/include/asm/cacheflush.h index f989d6aad648..a6edd356cd08 100644 --- a/arch/microblaze/include/asm/cacheflush.h +++ b/arch/microblaze/include/asm/cacheflush.h | |||
@@ -18,6 +18,8 @@ | |||
18 | /* Somebody depends on this; sigh... */ | 18 | /* Somebody depends on this; sigh... */ |
19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
20 | 20 | ||
21 | /* Look at Documentation/cachetlb.txt */ | ||
22 | |||
21 | /* | 23 | /* |
22 | * Cache handling functions. | 24 | * Cache handling functions. |
23 | * Microblaze has a write-through data cache, meaning that the data cache | 25 | * Microblaze has a write-through data cache, meaning that the data cache |
@@ -27,77 +29,81 @@ | |||
27 | * instruction cache to make sure we don't fetch old, bad code. | 29 | * instruction cache to make sure we don't fetch old, bad code. |
28 | */ | 30 | */ |
29 | 31 | ||
32 | /* struct cache, d=dcache, i=icache, fl = flush, iv = invalidate, | ||
33 | * suffix r = range */ | ||
34 | struct scache { | ||
35 | /* icache */ | ||
36 | void (*ie)(void); /* enable */ | ||
37 | void (*id)(void); /* disable */ | ||
38 | void (*ifl)(void); /* flush */ | ||
39 | void (*iflr)(unsigned long a, unsigned long b); | ||
40 | void (*iin)(void); /* invalidate */ | ||
41 | void (*iinr)(unsigned long a, unsigned long b); | ||
42 | /* dcache */ | ||
43 | void (*de)(void); /* enable */ | ||
44 | void (*dd)(void); /* disable */ | ||
45 | void (*dfl)(void); /* flush */ | ||
46 | void (*dflr)(unsigned long a, unsigned long b); | ||
47 | void (*din)(void); /* invalidate */ | ||
48 | void (*dinr)(unsigned long a, unsigned long b); | ||
49 | }; | ||
50 | |||
51 | /* microblaze cache */ | ||
52 | extern struct scache *mbc; | ||
53 | |||
54 | void microblaze_cache_init(void); | ||
55 | |||
56 | #define enable_icache() mbc->ie(); | ||
57 | #define disable_icache() mbc->id(); | ||
58 | #define flush_icache() mbc->ifl(); | ||
59 | #define flush_icache_range(start, end) mbc->iflr(start, end); | ||
60 | #define invalidate_icache() mbc->iin(); | ||
61 | #define invalidate_icache_range(start, end) mbc->iinr(start, end); | ||
62 | |||
63 | |||
64 | #define flush_icache_user_range(vma, pg, adr, len) flush_icache(); | ||
65 | #define flush_icache_page(vma, pg) do { } while (0) | ||
66 | |||
67 | #define enable_dcache() mbc->de(); | ||
68 | #define disable_dcache() mbc->dd(); | ||
30 | /* FIXME for LL-temac driver */ | 69 | /* FIXME for LL-temac driver */ |
31 | #define invalidate_dcache_range(start, end) \ | 70 | #define invalidate_dcache() mbc->din(); |
32 | __invalidate_dcache_range(start, end) | 71 | #define invalidate_dcache_range(start, end) mbc->dinr(start, end); |
33 | 72 | #define flush_dcache() mbc->dfl(); | |
34 | #define flush_cache_all() __invalidate_cache_all() | 73 | #define flush_dcache_range(start, end) mbc->dflr(start, end); |
35 | #define flush_cache_mm(mm) do { } while (0) | ||
36 | #define flush_cache_range(vma, start, end) __invalidate_cache_all() | ||
37 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | ||
38 | 74 | ||
39 | #define flush_dcache_range(start, end) __invalidate_dcache_range(start, end) | 75 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 |
76 | /* D-cache aliasing problem can't happen - cache is between MMU and ram */ | ||
40 | #define flush_dcache_page(page) do { } while (0) | 77 | #define flush_dcache_page(page) do { } while (0) |
41 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 78 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
42 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 79 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
43 | 80 | ||
44 | #define flush_icache_range(start, len) __invalidate_icache_range(start, len) | ||
45 | #define flush_icache_page(vma, pg) do { } while (0) | ||
46 | |||
47 | #ifndef CONFIG_MMU | ||
48 | # define flush_icache_user_range(start, len) do { } while (0) | ||
49 | #else | ||
50 | # define flush_icache_user_range(vma, pg, adr, len) __invalidate_icache_all() | ||
51 | |||
52 | # define flush_page_to_ram(page) do { } while (0) | ||
53 | 81 | ||
54 | # define flush_icache() __invalidate_icache_all() | 82 | #define flush_cache_dup_mm(mm) do { } while (0) |
55 | # define flush_cache_sigtramp(vaddr) \ | 83 | #define flush_cache_vmap(start, end) do { } while (0) |
56 | __invalidate_icache_range(vaddr, vaddr + 8) | 84 | #define flush_cache_vunmap(start, end) do { } while (0) |
57 | 85 | #define flush_cache_mm(mm) do { } while (0) | |
58 | # define flush_dcache_mmap_lock(mapping) do { } while (0) | 86 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
59 | # define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
60 | 87 | ||
61 | # define flush_cache_dup_mm(mm) do { } while (0) | 88 | /* MS: kgdb code use this macro, wrong len with FLASH */ |
89 | #if 0 | ||
90 | #define flush_cache_range(vma, start, len) { \ | ||
91 | flush_icache_range((unsigned) (start), (unsigned) (start) + (len)); \ | ||
92 | flush_dcache_range((unsigned) (start), (unsigned) (start) + (len)); \ | ||
93 | } | ||
62 | #endif | 94 | #endif |
63 | 95 | ||
64 | #define flush_cache_vmap(start, end) do { } while (0) | 96 | #define flush_cache_range(vma, start, len) do { } while (0) |
65 | #define flush_cache_vunmap(start, end) do { } while (0) | ||
66 | |||
67 | struct page; | ||
68 | struct mm_struct; | ||
69 | struct vm_area_struct; | ||
70 | |||
71 | /* see arch/microblaze/kernel/cache.c */ | ||
72 | extern void __invalidate_icache_all(void); | ||
73 | extern void __invalidate_icache_range(unsigned long start, unsigned long end); | ||
74 | extern void __invalidate_icache_page(struct vm_area_struct *vma, | ||
75 | struct page *page); | ||
76 | extern void __invalidate_icache_user_range(struct vm_area_struct *vma, | ||
77 | struct page *page, | ||
78 | unsigned long adr, int len); | ||
79 | extern void __invalidate_cache_sigtramp(unsigned long addr); | ||
80 | |||
81 | extern void __invalidate_dcache_all(void); | ||
82 | extern void __invalidate_dcache_range(unsigned long start, unsigned long end); | ||
83 | extern void __invalidate_dcache_page(struct vm_area_struct *vma, | ||
84 | struct page *page); | ||
85 | extern void __invalidate_dcache_user_range(struct vm_area_struct *vma, | ||
86 | struct page *page, | ||
87 | unsigned long adr, int len); | ||
88 | |||
89 | extern inline void __invalidate_cache_all(void) | ||
90 | { | ||
91 | __invalidate_icache_all(); | ||
92 | __invalidate_dcache_all(); | ||
93 | } | ||
94 | 97 | ||
95 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | 98 | #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ |
96 | do { memcpy((dst), (src), (len)); \ | 99 | do { \ |
97 | flush_icache_range((unsigned) (dst), (unsigned) (dst) + (len)); \ | 100 | memcpy((dst), (src), (len)); \ |
101 | flush_icache_range((unsigned) (dst), (unsigned) (dst) + (len)); \ | ||
98 | } while (0) | 102 | } while (0) |
99 | 103 | ||
100 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | 104 | #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ |
101 | memcpy((dst), (src), (len)) | 105 | do { \ |
106 | memcpy((dst), (src), (len)); \ | ||
107 | } while (0) | ||
102 | 108 | ||
103 | #endif /* _ASM_MICROBLAZE_CACHEFLUSH_H */ | 109 | #endif /* _ASM_MICROBLAZE_CACHEFLUSH_H */ |
diff --git a/arch/microblaze/include/asm/cpuinfo.h b/arch/microblaze/include/asm/cpuinfo.h index 52f28f6dc4eb..b4f5ca33aebf 100644 --- a/arch/microblaze/include/asm/cpuinfo.h +++ b/arch/microblaze/include/asm/cpuinfo.h | |||
@@ -43,7 +43,7 @@ struct cpuinfo { | |||
43 | u32 use_icache; | 43 | u32 use_icache; |
44 | u32 icache_tagbits; | 44 | u32 icache_tagbits; |
45 | u32 icache_write; | 45 | u32 icache_write; |
46 | u32 icache_line; | 46 | u32 icache_line_length; |
47 | u32 icache_size; | 47 | u32 icache_size; |
48 | unsigned long icache_base; | 48 | unsigned long icache_base; |
49 | unsigned long icache_high; | 49 | unsigned long icache_high; |
@@ -51,8 +51,9 @@ struct cpuinfo { | |||
51 | u32 use_dcache; | 51 | u32 use_dcache; |
52 | u32 dcache_tagbits; | 52 | u32 dcache_tagbits; |
53 | u32 dcache_write; | 53 | u32 dcache_write; |
54 | u32 dcache_line; | 54 | u32 dcache_line_length; |
55 | u32 dcache_size; | 55 | u32 dcache_size; |
56 | u32 dcache_wb; | ||
56 | unsigned long dcache_base; | 57 | unsigned long dcache_base; |
57 | unsigned long dcache_high; | 58 | unsigned long dcache_high; |
58 | 59 | ||
diff --git a/arch/microblaze/include/asm/device.h b/arch/microblaze/include/asm/device.h index 30286db27c1c..78a038452c0f 100644 --- a/arch/microblaze/include/asm/device.h +++ b/arch/microblaze/include/asm/device.h | |||
@@ -19,6 +19,18 @@ struct dev_archdata { | |||
19 | struct pdev_archdata { | 19 | struct pdev_archdata { |
20 | }; | 20 | }; |
21 | 21 | ||
22 | static inline void dev_archdata_set_node(struct dev_archdata *ad, | ||
23 | struct device_node *np) | ||
24 | { | ||
25 | ad->of_node = np; | ||
26 | } | ||
27 | |||
28 | static inline struct device_node * | ||
29 | dev_archdata_get_node(const struct dev_archdata *ad) | ||
30 | { | ||
31 | return ad->of_node; | ||
32 | } | ||
33 | |||
22 | #endif /* _ASM_MICROBLAZE_DEVICE_H */ | 34 | #endif /* _ASM_MICROBLAZE_DEVICE_H */ |
23 | 35 | ||
24 | 36 | ||
diff --git a/arch/microblaze/include/asm/elf.h b/arch/microblaze/include/asm/elf.h index f92fc0dda006..7d4acf2b278e 100644 --- a/arch/microblaze/include/asm/elf.h +++ b/arch/microblaze/include/asm/elf.h | |||
@@ -77,7 +77,6 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |||
77 | #define ELF_DATA ELFDATA2MSB | 77 | #define ELF_DATA ELFDATA2MSB |
78 | #endif | 78 | #endif |
79 | 79 | ||
80 | #define USE_ELF_CORE_DUMP | ||
81 | #define ELF_EXEC_PAGESIZE 4096 | 80 | #define ELF_EXEC_PAGESIZE 4096 |
82 | 81 | ||
83 | 82 | ||
diff --git a/arch/microblaze/include/asm/ftrace.h b/arch/microblaze/include/asm/ftrace.h index 8b137891791f..fd2fa2eca62f 100644 --- a/arch/microblaze/include/asm/ftrace.h +++ b/arch/microblaze/include/asm/ftrace.h | |||
@@ -1 +1,26 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_FTRACE | ||
2 | #define _ASM_MICROBLAZE_FTRACE | ||
1 | 3 | ||
4 | #ifdef CONFIG_FUNCTION_TRACER | ||
5 | |||
6 | #define MCOUNT_ADDR ((long)(_mcount)) | ||
7 | #define MCOUNT_INSN_SIZE 8 /* sizeof mcount call */ | ||
8 | |||
9 | #ifndef __ASSEMBLY__ | ||
10 | extern void _mcount(void); | ||
11 | extern void ftrace_call_graph(void); | ||
12 | #endif | ||
13 | |||
14 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
15 | /* reloction of mcount call site is the same as the address */ | ||
16 | static inline unsigned long ftrace_call_adjust(unsigned long addr) | ||
17 | { | ||
18 | return addr; | ||
19 | } | ||
20 | |||
21 | struct dyn_arch_ftrace { | ||
22 | }; | ||
23 | #endif /* CONFIG_DYNAMIC_FTRACE */ | ||
24 | |||
25 | #endif /* CONFIG_FUNCTION_TRACER */ | ||
26 | #endif /* _ASM_MICROBLAZE_FTRACE */ | ||
diff --git a/arch/microblaze/include/asm/futex.h b/arch/microblaze/include/asm/futex.h index 0b745828f42b..8dbb6e7a03a2 100644 --- a/arch/microblaze/include/asm/futex.h +++ b/arch/microblaze/include/asm/futex.h | |||
@@ -1 +1,126 @@ | |||
1 | #include <asm-generic/futex.h> | 1 | #ifndef _ASM_MICROBLAZE_FUTEX_H |
2 | #define _ASM_MICROBLAZE_FUTEX_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | #include <linux/futex.h> | ||
7 | #include <linux/uaccess.h> | ||
8 | #include <asm/errno.h> | ||
9 | |||
10 | #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ | ||
11 | ({ \ | ||
12 | __asm__ __volatile__ ( \ | ||
13 | "1: lwx %0, %2, r0; " \ | ||
14 | insn \ | ||
15 | "2: swx %1, %2, r0; \ | ||
16 | addic %1, r0, 0; \ | ||
17 | bnei %1, 1b; \ | ||
18 | 3: \ | ||
19 | .section .fixup,\"ax\"; \ | ||
20 | 4: brid 3b; \ | ||
21 | addik %1, r0, %3; \ | ||
22 | .previous; \ | ||
23 | .section __ex_table,\"a\"; \ | ||
24 | .word 1b,4b,2b,4b; \ | ||
25 | .previous;" \ | ||
26 | : "=&r" (oldval), "=&r" (ret) \ | ||
27 | : "b" (uaddr), "i" (-EFAULT), "r" (oparg) \ | ||
28 | ); \ | ||
29 | }) | ||
30 | |||
31 | static inline int | ||
32 | futex_atomic_op_inuser(int encoded_op, int __user *uaddr) | ||
33 | { | ||
34 | int op = (encoded_op >> 28) & 7; | ||
35 | int cmp = (encoded_op >> 24) & 15; | ||
36 | int oparg = (encoded_op << 8) >> 20; | ||
37 | int cmparg = (encoded_op << 20) >> 20; | ||
38 | int oldval = 0, ret; | ||
39 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
40 | oparg = 1 << oparg; | ||
41 | |||
42 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
43 | return -EFAULT; | ||
44 | |||
45 | pagefault_disable(); | ||
46 | |||
47 | switch (op) { | ||
48 | case FUTEX_OP_SET: | ||
49 | __futex_atomic_op("or %1,%4,%4;", ret, oldval, uaddr, oparg); | ||
50 | break; | ||
51 | case FUTEX_OP_ADD: | ||
52 | __futex_atomic_op("add %1,%0,%4;", ret, oldval, uaddr, oparg); | ||
53 | break; | ||
54 | case FUTEX_OP_OR: | ||
55 | __futex_atomic_op("or %1,%0,%4;", ret, oldval, uaddr, oparg); | ||
56 | break; | ||
57 | case FUTEX_OP_ANDN: | ||
58 | __futex_atomic_op("and %1,%0,%4;", ret, oldval, uaddr, oparg); | ||
59 | break; | ||
60 | case FUTEX_OP_XOR: | ||
61 | __futex_atomic_op("xor %1,%0,%4;", ret, oldval, uaddr, oparg); | ||
62 | break; | ||
63 | default: | ||
64 | ret = -ENOSYS; | ||
65 | } | ||
66 | |||
67 | pagefault_enable(); | ||
68 | |||
69 | if (!ret) { | ||
70 | switch (cmp) { | ||
71 | case FUTEX_OP_CMP_EQ: | ||
72 | ret = (oldval == cmparg); | ||
73 | break; | ||
74 | case FUTEX_OP_CMP_NE: | ||
75 | ret = (oldval != cmparg); | ||
76 | break; | ||
77 | case FUTEX_OP_CMP_LT: | ||
78 | ret = (oldval < cmparg); | ||
79 | break; | ||
80 | case FUTEX_OP_CMP_GE: | ||
81 | ret = (oldval >= cmparg); | ||
82 | break; | ||
83 | case FUTEX_OP_CMP_LE: | ||
84 | ret = (oldval <= cmparg); | ||
85 | break; | ||
86 | case FUTEX_OP_CMP_GT: | ||
87 | ret = (oldval > cmparg); | ||
88 | break; | ||
89 | default: | ||
90 | ret = -ENOSYS; | ||
91 | } | ||
92 | } | ||
93 | return ret; | ||
94 | } | ||
95 | |||
96 | static inline int | ||
97 | futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) | ||
98 | { | ||
99 | int prev, cmp; | ||
100 | |||
101 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
102 | return -EFAULT; | ||
103 | |||
104 | __asm__ __volatile__ ("1: lwx %0, %2, r0; \ | ||
105 | cmp %1, %0, %3; \ | ||
106 | beqi %1, 3f; \ | ||
107 | 2: swx %4, %2, r0; \ | ||
108 | addic %1, r0, 0; \ | ||
109 | bnei %1, 1b; \ | ||
110 | 3: \ | ||
111 | .section .fixup,\"ax\"; \ | ||
112 | 4: brid 3b; \ | ||
113 | addik %0, r0, %5; \ | ||
114 | .previous; \ | ||
115 | .section __ex_table,\"a\"; \ | ||
116 | .word 1b,4b,2b,4b; \ | ||
117 | .previous;" \ | ||
118 | : "=&r" (prev), "=&r"(cmp) \ | ||
119 | : "r" (uaddr), "r" (oldval), "r" (newval), "i" (-EFAULT)); | ||
120 | |||
121 | return prev; | ||
122 | } | ||
123 | |||
124 | #endif /* __KERNEL__ */ | ||
125 | |||
126 | #endif | ||
diff --git a/arch/microblaze/include/asm/irqflags.h b/arch/microblaze/include/asm/irqflags.h index dea65645a4f8..2c38c6d80176 100644 --- a/arch/microblaze/include/asm/irqflags.h +++ b/arch/microblaze/include/asm/irqflags.h | |||
@@ -10,78 +10,73 @@ | |||
10 | #define _ASM_MICROBLAZE_IRQFLAGS_H | 10 | #define _ASM_MICROBLAZE_IRQFLAGS_H |
11 | 11 | ||
12 | #include <linux/irqflags.h> | 12 | #include <linux/irqflags.h> |
13 | #include <asm/registers.h> | ||
13 | 14 | ||
14 | # if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR | 15 | # if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR |
15 | 16 | ||
16 | # define local_irq_save(flags) \ | 17 | # define raw_local_irq_save(flags) \ |
17 | do { \ | 18 | do { \ |
18 | asm volatile ("# local_irq_save \n\t" \ | 19 | asm volatile (" msrclr %0, %1; \ |
19 | "msrclr %0, %1 \n\t" \ | 20 | nop;" \ |
20 | "nop \n\t" \ | ||
21 | : "=r"(flags) \ | 21 | : "=r"(flags) \ |
22 | : "i"(MSR_IE) \ | 22 | : "i"(MSR_IE) \ |
23 | : "memory"); \ | 23 | : "memory"); \ |
24 | } while (0) | 24 | } while (0) |
25 | 25 | ||
26 | # define local_irq_disable() \ | 26 | # define raw_local_irq_disable() \ |
27 | do { \ | 27 | do { \ |
28 | asm volatile ("# local_irq_disable \n\t" \ | 28 | asm volatile (" msrclr r0, %0; \ |
29 | "msrclr r0, %0 \n\t" \ | 29 | nop;" \ |
30 | "nop \n\t" \ | 30 | : \ |
31 | : \ | 31 | : "i"(MSR_IE) \ |
32 | : "i"(MSR_IE) \ | 32 | : "memory"); \ |
33 | : "memory"); \ | ||
34 | } while (0) | 33 | } while (0) |
35 | 34 | ||
36 | # define local_irq_enable() \ | 35 | # define raw_local_irq_enable() \ |
37 | do { \ | 36 | do { \ |
38 | asm volatile ("# local_irq_enable \n\t" \ | 37 | asm volatile (" msrset r0, %0; \ |
39 | "msrset r0, %0 \n\t" \ | 38 | nop;" \ |
40 | "nop \n\t" \ | 39 | : \ |
41 | : \ | 40 | : "i"(MSR_IE) \ |
42 | : "i"(MSR_IE) \ | 41 | : "memory"); \ |
43 | : "memory"); \ | ||
44 | } while (0) | 42 | } while (0) |
45 | 43 | ||
46 | # else /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 0 */ | 44 | # else /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 0 */ |
47 | 45 | ||
48 | # define local_irq_save(flags) \ | 46 | # define raw_local_irq_save(flags) \ |
49 | do { \ | 47 | do { \ |
50 | register unsigned tmp; \ | 48 | register unsigned tmp; \ |
51 | asm volatile ("# local_irq_save \n\t" \ | 49 | asm volatile (" mfs %0, rmsr; \ |
52 | "mfs %0, rmsr \n\t" \ | 50 | nop; \ |
53 | "nop \n\t" \ | 51 | andi %1, %0, %2; \ |
54 | "andi %1, %0, %2 \n\t" \ | 52 | mts rmsr, %1; \ |
55 | "mts rmsr, %1 \n\t" \ | 53 | nop;" \ |
56 | "nop \n\t" \ | ||
57 | : "=r"(flags), "=r" (tmp) \ | 54 | : "=r"(flags), "=r" (tmp) \ |
58 | : "i"(~MSR_IE) \ | 55 | : "i"(~MSR_IE) \ |
59 | : "memory"); \ | 56 | : "memory"); \ |
60 | } while (0) | 57 | } while (0) |
61 | 58 | ||
62 | # define local_irq_disable() \ | 59 | # define raw_local_irq_disable() \ |
63 | do { \ | 60 | do { \ |
64 | register unsigned tmp; \ | 61 | register unsigned tmp; \ |
65 | asm volatile ("# local_irq_disable \n\t" \ | 62 | asm volatile (" mfs %0, rmsr; \ |
66 | "mfs %0, rmsr \n\t" \ | 63 | nop; \ |
67 | "nop \n\t" \ | 64 | andi %0, %0, %1; \ |
68 | "andi %0, %0, %1 \n\t" \ | 65 | mts rmsr, %0; \ |
69 | "mts rmsr, %0 \n\t" \ | 66 | nop;" \ |
70 | "nop \n\t" \ | ||
71 | : "=r"(tmp) \ | 67 | : "=r"(tmp) \ |
72 | : "i"(~MSR_IE) \ | 68 | : "i"(~MSR_IE) \ |
73 | : "memory"); \ | 69 | : "memory"); \ |
74 | } while (0) | 70 | } while (0) |
75 | 71 | ||
76 | # define local_irq_enable() \ | 72 | # define raw_local_irq_enable() \ |
77 | do { \ | 73 | do { \ |
78 | register unsigned tmp; \ | 74 | register unsigned tmp; \ |
79 | asm volatile ("# local_irq_enable \n\t" \ | 75 | asm volatile (" mfs %0, rmsr; \ |
80 | "mfs %0, rmsr \n\t" \ | 76 | nop; \ |
81 | "nop \n\t" \ | 77 | ori %0, %0, %1; \ |
82 | "ori %0, %0, %1 \n\t" \ | 78 | mts rmsr, %0; \ |
83 | "mts rmsr, %0 \n\t" \ | 79 | nop;" \ |
84 | "nop \n\t" \ | ||
85 | : "=r"(tmp) \ | 80 | : "=r"(tmp) \ |
86 | : "i"(MSR_IE) \ | 81 | : "i"(MSR_IE) \ |
87 | : "memory"); \ | 82 | : "memory"); \ |
@@ -89,35 +84,28 @@ | |||
89 | 84 | ||
90 | # endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ | 85 | # endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ |
91 | 86 | ||
92 | #define local_save_flags(flags) \ | 87 | #define raw_local_irq_restore(flags) \ |
93 | do { \ | 88 | do { \ |
94 | asm volatile ("# local_save_flags \n\t" \ | 89 | asm volatile (" mts rmsr, %0; \ |
95 | "mfs %0, rmsr \n\t" \ | 90 | nop;" \ |
96 | "nop \n\t" \ | ||
97 | : "=r"(flags) \ | ||
98 | : \ | 91 | : \ |
92 | : "r"(flags) \ | ||
99 | : "memory"); \ | 93 | : "memory"); \ |
100 | } while (0) | 94 | } while (0) |
101 | 95 | ||
102 | #define local_irq_restore(flags) \ | 96 | static inline unsigned long get_msr(void) |
103 | do { \ | ||
104 | asm volatile ("# local_irq_restore \n\t"\ | ||
105 | "mts rmsr, %0 \n\t" \ | ||
106 | "nop \n\t" \ | ||
107 | : \ | ||
108 | : "r"(flags) \ | ||
109 | : "memory"); \ | ||
110 | } while (0) | ||
111 | |||
112 | static inline int irqs_disabled(void) | ||
113 | { | 97 | { |
114 | unsigned long flags; | 98 | unsigned long flags; |
115 | 99 | asm volatile (" mfs %0, rmsr; \ | |
116 | local_save_flags(flags); | 100 | nop;" \ |
117 | return ((flags & MSR_IE) == 0); | 101 | : "=r"(flags) \ |
102 | : \ | ||
103 | : "memory"); \ | ||
104 | return flags; | ||
118 | } | 105 | } |
119 | 106 | ||
120 | #define raw_irqs_disabled irqs_disabled | 107 | #define raw_local_save_flags(flags) ((flags) = get_msr()) |
121 | #define raw_irqs_disabled_flags(flags) ((flags) == 0) | 108 | #define raw_irqs_disabled() ((get_msr() & MSR_IE) == 0) |
109 | #define raw_irqs_disabled_flags(flags) ((flags & MSR_IE) == 0) | ||
122 | 110 | ||
123 | #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */ | 111 | #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */ |
diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h index 880c988c2237..9b66c0fa9a32 100644 --- a/arch/microblaze/include/asm/page.h +++ b/arch/microblaze/include/asm/page.h | |||
@@ -164,7 +164,8 @@ extern int page_is_ram(unsigned long pfn); | |||
164 | # endif /* CONFIG_MMU */ | 164 | # endif /* CONFIG_MMU */ |
165 | 165 | ||
166 | # ifndef CONFIG_MMU | 166 | # ifndef CONFIG_MMU |
167 | # define pfn_valid(pfn) ((pfn) >= min_low_pfn && (pfn) <= max_mapnr) | 167 | # define pfn_valid(pfn) (((pfn) >= min_low_pfn) && \ |
168 | ((pfn) <= (min_low_pfn + max_mapnr))) | ||
168 | # define ARCH_PFN_OFFSET (PAGE_OFFSET >> PAGE_SHIFT) | 169 | # define ARCH_PFN_OFFSET (PAGE_OFFSET >> PAGE_SHIFT) |
169 | # else /* CONFIG_MMU */ | 170 | # else /* CONFIG_MMU */ |
170 | # define ARCH_PFN_OFFSET (memory_start >> PAGE_SHIFT) | 171 | # define ARCH_PFN_OFFSET (memory_start >> PAGE_SHIFT) |
diff --git a/arch/microblaze/include/asm/pgalloc.h b/arch/microblaze/include/asm/pgalloc.h index b0131da1387b..7547f5064560 100644 --- a/arch/microblaze/include/asm/pgalloc.h +++ b/arch/microblaze/include/asm/pgalloc.h | |||
@@ -106,9 +106,6 @@ extern inline void free_pgd_slow(pgd_t *pgd) | |||
106 | */ | 106 | */ |
107 | #define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); }) | 107 | #define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); }) |
108 | #define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) | 108 | #define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) |
109 | /* FIXME two definition - look below */ | ||
110 | #define pmd_free(mm, x) do { } while (0) | ||
111 | #define pgd_populate(mm, pmd, pte) BUG() | ||
112 | 109 | ||
113 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | 110 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, |
114 | unsigned long address) | 111 | unsigned long address) |
@@ -192,14 +189,14 @@ extern inline void pte_free(struct mm_struct *mm, struct page *ptepage) | |||
192 | * the pgd will always be present.. | 189 | * the pgd will always be present.. |
193 | */ | 190 | */ |
194 | #define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) | 191 | #define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) |
195 | /*#define pmd_free(mm, x) do { } while (0)*/ | 192 | #define pmd_free(mm, x) do { } while (0) |
196 | #define __pmd_free_tlb(tlb, x, addr) do { } while (0) | 193 | #define __pmd_free_tlb(tlb, x, addr) pmd_free((tlb)->mm, x) |
197 | #define pgd_populate(mm, pmd, pte) BUG() | 194 | #define pgd_populate(mm, pmd, pte) BUG() |
198 | 195 | ||
199 | extern int do_check_pgt_cache(int, int); | 196 | extern int do_check_pgt_cache(int, int); |
200 | 197 | ||
201 | #endif /* CONFIG_MMU */ | 198 | #endif /* CONFIG_MMU */ |
202 | 199 | ||
203 | #define check_pgt_cache() do {} while (0) | 200 | #define check_pgt_cache() do { } while (0) |
204 | 201 | ||
205 | #endif /* _ASM_MICROBLAZE_PGALLOC_H */ | 202 | #endif /* _ASM_MICROBLAZE_PGALLOC_H */ |
diff --git a/arch/microblaze/include/asm/prom.h b/arch/microblaze/include/asm/prom.h index 37e6f305a68e..ef3ec1d6ceb3 100644 --- a/arch/microblaze/include/asm/prom.h +++ b/arch/microblaze/include/asm/prom.h | |||
@@ -12,23 +12,15 @@ | |||
12 | * 2 of the License, or (at your option) any later version. | 12 | * 2 of the License, or (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/of.h> /* linux/of.h gets to determine #include ordering */ | ||
16 | |||
15 | #ifndef _ASM_MICROBLAZE_PROM_H | 17 | #ifndef _ASM_MICROBLAZE_PROM_H |
16 | #define _ASM_MICROBLAZE_PROM_H | 18 | #define _ASM_MICROBLAZE_PROM_H |
17 | #ifdef __KERNEL__ | 19 | #ifdef __KERNEL__ |
18 | |||
19 | /* Definitions used by the flattened device tree */ | ||
20 | #define OF_DT_HEADER 0xd00dfeed /* marker */ | ||
21 | #define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */ | ||
22 | #define OF_DT_END_NODE 0x2 /* End node */ | ||
23 | #define OF_DT_PROP 0x3 /* Property: name off, size, content */ | ||
24 | #define OF_DT_NOP 0x4 /* nop */ | ||
25 | #define OF_DT_END 0x9 | ||
26 | |||
27 | #define OF_DT_VERSION 0x10 | ||
28 | |||
29 | #ifndef __ASSEMBLY__ | 20 | #ifndef __ASSEMBLY__ |
30 | 21 | ||
31 | #include <linux/types.h> | 22 | #include <linux/types.h> |
23 | #include <linux/of_fdt.h> | ||
32 | #include <linux/proc_fs.h> | 24 | #include <linux/proc_fs.h> |
33 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
34 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
@@ -41,122 +33,19 @@ | |||
41 | #define of_prop_cmp(s1, s2) strcmp((s1), (s2)) | 33 | #define of_prop_cmp(s1, s2) strcmp((s1), (s2)) |
42 | #define of_node_cmp(s1, s2) strcasecmp((s1), (s2)) | 34 | #define of_node_cmp(s1, s2) strcasecmp((s1), (s2)) |
43 | 35 | ||
44 | /* | ||
45 | * This is what gets passed to the kernel by prom_init or kexec | ||
46 | * | ||
47 | * The dt struct contains the device tree structure, full pathes and | ||
48 | * property contents. The dt strings contain a separate block with just | ||
49 | * the strings for the property names, and is fully page aligned and | ||
50 | * self contained in a page, so that it can be kept around by the kernel, | ||
51 | * each property name appears only once in this page (cheap compression) | ||
52 | * | ||
53 | * the mem_rsvmap contains a map of reserved ranges of physical memory, | ||
54 | * passing it here instead of in the device-tree itself greatly simplifies | ||
55 | * the job of everybody. It's just a list of u64 pairs (base/size) that | ||
56 | * ends when size is 0 | ||
57 | */ | ||
58 | struct boot_param_header { | ||
59 | u32 magic; /* magic word OF_DT_HEADER */ | ||
60 | u32 totalsize; /* total size of DT block */ | ||
61 | u32 off_dt_struct; /* offset to structure */ | ||
62 | u32 off_dt_strings; /* offset to strings */ | ||
63 | u32 off_mem_rsvmap; /* offset to memory reserve map */ | ||
64 | u32 version; /* format version */ | ||
65 | u32 last_comp_version; /* last compatible version */ | ||
66 | /* version 2 fields below */ | ||
67 | u32 boot_cpuid_phys; /* Physical CPU id we're booting on */ | ||
68 | /* version 3 fields below */ | ||
69 | u32 dt_strings_size; /* size of the DT strings block */ | ||
70 | /* version 17 fields below */ | ||
71 | u32 dt_struct_size; /* size of the DT structure block */ | ||
72 | }; | ||
73 | |||
74 | typedef u32 phandle; | ||
75 | typedef u32 ihandle; | ||
76 | |||
77 | struct property { | ||
78 | char *name; | ||
79 | int length; | ||
80 | void *value; | ||
81 | struct property *next; | ||
82 | }; | ||
83 | |||
84 | struct device_node { | ||
85 | const char *name; | ||
86 | const char *type; | ||
87 | phandle node; | ||
88 | phandle linux_phandle; | ||
89 | char *full_name; | ||
90 | |||
91 | struct property *properties; | ||
92 | struct property *deadprops; /* removed properties */ | ||
93 | struct device_node *parent; | ||
94 | struct device_node *child; | ||
95 | struct device_node *sibling; | ||
96 | struct device_node *next; /* next device of same type */ | ||
97 | struct device_node *allnext; /* next in list of all nodes */ | ||
98 | struct proc_dir_entry *pde; /* this node's proc directory */ | ||
99 | struct kref kref; | ||
100 | unsigned long _flags; | ||
101 | void *data; | ||
102 | }; | ||
103 | |||
104 | extern struct device_node *of_chosen; | 36 | extern struct device_node *of_chosen; |
105 | 37 | ||
106 | static inline int of_node_check_flag(struct device_node *n, unsigned long flag) | ||
107 | { | ||
108 | return test_bit(flag, &n->_flags); | ||
109 | } | ||
110 | |||
111 | static inline void of_node_set_flag(struct device_node *n, unsigned long flag) | ||
112 | { | ||
113 | set_bit(flag, &n->_flags); | ||
114 | } | ||
115 | |||
116 | #define HAVE_ARCH_DEVTREE_FIXUPS | 38 | #define HAVE_ARCH_DEVTREE_FIXUPS |
117 | 39 | ||
118 | static inline void set_node_proc_entry(struct device_node *dn, | ||
119 | struct proc_dir_entry *de) | ||
120 | { | ||
121 | dn->pde = de; | ||
122 | } | ||
123 | |||
124 | extern struct device_node *allnodes; /* temporary while merging */ | 40 | extern struct device_node *allnodes; /* temporary while merging */ |
125 | extern rwlock_t devtree_lock; /* temporary while merging */ | 41 | extern rwlock_t devtree_lock; /* temporary while merging */ |
126 | 42 | ||
127 | extern struct device_node *of_find_all_nodes(struct device_node *prev); | ||
128 | extern struct device_node *of_node_get(struct device_node *node); | ||
129 | extern void of_node_put(struct device_node *node); | ||
130 | |||
131 | /* For scanning the flat device-tree at boot time */ | ||
132 | extern int __init of_scan_flat_dt(int (*it)(unsigned long node, | ||
133 | const char *uname, int depth, | ||
134 | void *data), | ||
135 | void *data); | ||
136 | extern void *__init of_get_flat_dt_prop(unsigned long node, const char *name, | ||
137 | unsigned long *size); | ||
138 | extern int __init | ||
139 | of_flat_dt_is_compatible(unsigned long node, const char *name); | ||
140 | extern unsigned long __init of_get_flat_dt_root(void); | ||
141 | |||
142 | /* For updating the device tree at runtime */ | 43 | /* For updating the device tree at runtime */ |
143 | extern void of_attach_node(struct device_node *); | 44 | extern void of_attach_node(struct device_node *); |
144 | extern void of_detach_node(struct device_node *); | 45 | extern void of_detach_node(struct device_node *); |
145 | 46 | ||
146 | /* Other Prototypes */ | 47 | /* Other Prototypes */ |
147 | extern void finish_device_tree(void); | ||
148 | extern void unflatten_device_tree(void); | ||
149 | extern int early_uartlite_console(void); | 48 | extern int early_uartlite_console(void); |
150 | extern void early_init_devtree(void *); | ||
151 | extern int machine_is_compatible(const char *compat); | ||
152 | extern void print_properties(struct device_node *node); | ||
153 | extern int prom_n_intr_cells(struct device_node *np); | ||
154 | extern void prom_get_irq_senses(unsigned char *senses, int off, int max); | ||
155 | extern int prom_add_property(struct device_node *np, struct property *prop); | ||
156 | extern int prom_remove_property(struct device_node *np, struct property *prop); | ||
157 | extern int prom_update_property(struct device_node *np, | ||
158 | struct property *newprop, | ||
159 | struct property *oldprop); | ||
160 | 49 | ||
161 | extern struct resource *request_OF_resource(struct device_node *node, | 50 | extern struct resource *request_OF_resource(struct device_node *node, |
162 | int index, const char *name_postfix); | 51 | int index, const char *name_postfix); |
@@ -166,18 +55,6 @@ extern int release_OF_resource(struct device_node *node, int index); | |||
166 | * OF address retreival & translation | 55 | * OF address retreival & translation |
167 | */ | 56 | */ |
168 | 57 | ||
169 | /* Helper to read a big number; size is in cells (not bytes) */ | ||
170 | static inline u64 of_read_number(const u32 *cell, int size) | ||
171 | { | ||
172 | u64 r = 0; | ||
173 | while (size--) | ||
174 | r = (r << 32) | *(cell++); | ||
175 | return r; | ||
176 | } | ||
177 | |||
178 | /* Like of_read_number, but we want an unsigned long result */ | ||
179 | #define of_read_ulong(cell, size) of_read_number(cell, size) | ||
180 | |||
181 | /* Translate an OF address block into a CPU physical address | 58 | /* Translate an OF address block into a CPU physical address |
182 | */ | 59 | */ |
183 | extern u64 of_translate_address(struct device_node *np, const u32 *addr); | 60 | extern u64 of_translate_address(struct device_node *np, const u32 *addr); |
@@ -305,12 +182,6 @@ extern int of_irq_to_resource(struct device_node *dev, int index, | |||
305 | */ | 182 | */ |
306 | extern void __iomem *of_iomap(struct device_node *device, int index); | 183 | extern void __iomem *of_iomap(struct device_node *device, int index); |
307 | 184 | ||
308 | /* | ||
309 | * NB: This is here while we transition from using asm/prom.h | ||
310 | * to linux/of.h | ||
311 | */ | ||
312 | #include <linux/of.h> | ||
313 | |||
314 | #endif /* __ASSEMBLY__ */ | 185 | #endif /* __ASSEMBLY__ */ |
315 | #endif /* __KERNEL__ */ | 186 | #endif /* __KERNEL__ */ |
316 | #endif /* _ASM_MICROBLAZE_PROM_H */ | 187 | #endif /* _ASM_MICROBLAZE_PROM_H */ |
diff --git a/arch/microblaze/include/asm/pvr.h b/arch/microblaze/include/asm/pvr.h index 66f1b30dd097..e38abc7714b6 100644 --- a/arch/microblaze/include/asm/pvr.h +++ b/arch/microblaze/include/asm/pvr.h | |||
@@ -76,20 +76,23 @@ struct pvr_s { | |||
76 | #define PVR3_FSL_LINKS_MASK 0x00000380 | 76 | #define PVR3_FSL_LINKS_MASK 0x00000380 |
77 | 77 | ||
78 | /* ICache config PVR masks */ | 78 | /* ICache config PVR masks */ |
79 | #define PVR4_USE_ICACHE_MASK 0x80000000 | 79 | #define PVR4_USE_ICACHE_MASK 0x80000000 /* ICU */ |
80 | #define PVR4_ICACHE_ADDR_TAG_BITS_MASK 0x7C000000 | 80 | #define PVR4_ICACHE_ADDR_TAG_BITS_MASK 0x7C000000 /* ICTS */ |
81 | #define PVR4_ICACHE_USE_FSL_MASK 0x02000000 | 81 | #define PVR4_ICACHE_ALLOW_WR_MASK 0x01000000 /* ICW */ |
82 | #define PVR4_ICACHE_ALLOW_WR_MASK 0x01000000 | 82 | #define PVR4_ICACHE_LINE_LEN_MASK 0x00E00000 /* ICLL */ |
83 | #define PVR4_ICACHE_LINE_LEN_MASK 0x00E00000 | 83 | #define PVR4_ICACHE_BYTE_SIZE_MASK 0x001F0000 /* ICBS */ |
84 | #define PVR4_ICACHE_BYTE_SIZE_MASK 0x001F0000 | 84 | #define PVR4_ICACHE_ALWAYS_USED 0x00008000 /* IAU */ |
85 | #define PVR4_ICACHE_INTERFACE 0x00002000 /* ICI */ | ||
85 | 86 | ||
86 | /* DCache config PVR masks */ | 87 | /* DCache config PVR masks */ |
87 | #define PVR5_USE_DCACHE_MASK 0x80000000 | 88 | #define PVR5_USE_DCACHE_MASK 0x80000000 /* DCU */ |
88 | #define PVR5_DCACHE_ADDR_TAG_BITS_MASK 0x7C000000 | 89 | #define PVR5_DCACHE_ADDR_TAG_BITS_MASK 0x7C000000 /* DCTS */ |
89 | #define PVR5_DCACHE_USE_FSL_MASK 0x02000000 | 90 | #define PVR5_DCACHE_ALLOW_WR_MASK 0x01000000 /* DCW */ |
90 | #define PVR5_DCACHE_ALLOW_WR_MASK 0x01000000 | 91 | #define PVR5_DCACHE_LINE_LEN_MASK 0x00E00000 /* DCLL */ |
91 | #define PVR5_DCACHE_LINE_LEN_MASK 0x00E00000 | 92 | #define PVR5_DCACHE_BYTE_SIZE_MASK 0x001F0000 /* DCBS */ |
92 | #define PVR5_DCACHE_BYTE_SIZE_MASK 0x001F0000 | 93 | #define PVR5_DCACHE_ALWAYS_USED 0x00008000 /* DAU */ |
94 | #define PVR5_DCACHE_USE_WRITEBACK 0x00004000 /* DWB */ | ||
95 | #define PVR5_DCACHE_INTERFACE 0x00002000 /* DCI */ | ||
93 | 96 | ||
94 | /* ICache base address PVR mask */ | 97 | /* ICache base address PVR mask */ |
95 | #define PVR6_ICACHE_BASEADDR_MASK 0xFFFFFFFF | 98 | #define PVR6_ICACHE_BASEADDR_MASK 0xFFFFFFFF |
@@ -178,11 +181,14 @@ struct pvr_s { | |||
178 | ((pvr.pvr[5] & PVR5_DCACHE_ADDR_TAG_BITS_MASK) >> 26) | 181 | ((pvr.pvr[5] & PVR5_DCACHE_ADDR_TAG_BITS_MASK) >> 26) |
179 | #define PVR_DCACHE_USE_FSL(pvr) (pvr.pvr[5] & PVR5_DCACHE_USE_FSL_MASK) | 182 | #define PVR_DCACHE_USE_FSL(pvr) (pvr.pvr[5] & PVR5_DCACHE_USE_FSL_MASK) |
180 | #define PVR_DCACHE_ALLOW_WR(pvr) (pvr.pvr[5] & PVR5_DCACHE_ALLOW_WR_MASK) | 183 | #define PVR_DCACHE_ALLOW_WR(pvr) (pvr.pvr[5] & PVR5_DCACHE_ALLOW_WR_MASK) |
184 | /* FIXME two shifts on one line needs any comment */ | ||
181 | #define PVR_DCACHE_LINE_LEN(pvr) \ | 185 | #define PVR_DCACHE_LINE_LEN(pvr) \ |
182 | (1 << ((pvr.pvr[5] & PVR5_DCACHE_LINE_LEN_MASK) >> 21)) | 186 | (1 << ((pvr.pvr[5] & PVR5_DCACHE_LINE_LEN_MASK) >> 21)) |
183 | #define PVR_DCACHE_BYTE_SIZE(pvr) \ | 187 | #define PVR_DCACHE_BYTE_SIZE(pvr) \ |
184 | (1 << ((pvr.pvr[5] & PVR5_DCACHE_BYTE_SIZE_MASK) >> 16)) | 188 | (1 << ((pvr.pvr[5] & PVR5_DCACHE_BYTE_SIZE_MASK) >> 16)) |
185 | 189 | ||
190 | #define PVR_DCACHE_USE_WRITEBACK(pvr) \ | ||
191 | ((pvr.pvr[5] & PVR5_DCACHE_USE_WRITEBACK) >> 14) | ||
186 | 192 | ||
187 | #define PVR_ICACHE_BASEADDR(pvr) (pvr.pvr[6] & PVR6_ICACHE_BASEADDR_MASK) | 193 | #define PVR_ICACHE_BASEADDR(pvr) (pvr.pvr[6] & PVR6_ICACHE_BASEADDR_MASK) |
188 | #define PVR_ICACHE_HIGHADDR(pvr) (pvr.pvr[7] & PVR7_ICACHE_HIGHADDR_MASK) | 194 | #define PVR_ICACHE_HIGHADDR(pvr) (pvr.pvr[7] & PVR7_ICACHE_HIGHADDR_MASK) |
diff --git a/arch/microblaze/include/asm/setup.h b/arch/microblaze/include/asm/setup.h index ed67c9ed15b8..7f31394985e0 100644 --- a/arch/microblaze/include/asm/setup.h +++ b/arch/microblaze/include/asm/setup.h | |||
@@ -35,6 +35,8 @@ extern void mmu_reset(void); | |||
35 | extern void early_console_reg_tlb_alloc(unsigned int addr); | 35 | extern void early_console_reg_tlb_alloc(unsigned int addr); |
36 | # endif /* CONFIG_MMU */ | 36 | # endif /* CONFIG_MMU */ |
37 | 37 | ||
38 | extern void of_platform_reset_gpio_probe(void); | ||
39 | |||
38 | void time_init(void); | 40 | void time_init(void); |
39 | void init_IRQ(void); | 41 | void init_IRQ(void); |
40 | void machine_early_init(const char *cmdline, unsigned int ram, | 42 | void machine_early_init(const char *cmdline, unsigned int ram, |
diff --git a/arch/microblaze/include/asm/system.h b/arch/microblaze/include/asm/system.h index b1ed61590660..157970688b2a 100644 --- a/arch/microblaze/include/asm/system.h +++ b/arch/microblaze/include/asm/system.h | |||
@@ -16,6 +16,8 @@ | |||
16 | #include <asm-generic/cmpxchg.h> | 16 | #include <asm-generic/cmpxchg.h> |
17 | #include <asm-generic/cmpxchg-local.h> | 17 | #include <asm-generic/cmpxchg-local.h> |
18 | 18 | ||
19 | #define __ARCH_WANT_INTERRUPTS_ON_CTXSW | ||
20 | |||
19 | struct task_struct; | 21 | struct task_struct; |
20 | struct thread_info; | 22 | struct thread_info; |
21 | 23 | ||
diff --git a/arch/microblaze/include/asm/uaccess.h b/arch/microblaze/include/asm/uaccess.h index 5431b4631a7a..371bd6e56d9a 100644 --- a/arch/microblaze/include/asm/uaccess.h +++ b/arch/microblaze/include/asm/uaccess.h | |||
@@ -272,8 +272,9 @@ static inline int clear_user(char *to, int size) | |||
272 | return size; | 272 | return size; |
273 | } | 273 | } |
274 | 274 | ||
275 | extern unsigned long __copy_tofrom_user(void __user *to, | 275 | #define __copy_from_user(to, from, n) copy_from_user((to), (from), (n)) |
276 | const void __user *from, unsigned long size); | 276 | #define __copy_from_user_inatomic(to, from, n) \ |
277 | copy_from_user((to), (from), (n)) | ||
277 | 278 | ||
278 | #define copy_to_user(to, from, n) \ | 279 | #define copy_to_user(to, from, n) \ |
279 | (access_ok(VERIFY_WRITE, (to), (n)) ? \ | 280 | (access_ok(VERIFY_WRITE, (to), (n)) ? \ |
@@ -290,10 +291,6 @@ extern unsigned long __copy_tofrom_user(void __user *to, | |||
290 | (void __user *)(from), (n)) \ | 291 | (void __user *)(from), (n)) \ |
291 | : -EFAULT) | 292 | : -EFAULT) |
292 | 293 | ||
293 | #define __copy_from_user(to, from, n) copy_from_user((to), (from), (n)) | ||
294 | #define __copy_from_user_inatomic(to, from, n) \ | ||
295 | copy_from_user((to), (from), (n)) | ||
296 | |||
297 | extern int __strncpy_user(char *to, const char __user *from, int len); | 294 | extern int __strncpy_user(char *to, const char __user *from, int len); |
298 | extern int __strnlen_user(const char __user *sstr, int len); | 295 | extern int __strnlen_user(const char __user *sstr, int len); |
299 | 296 | ||
@@ -305,6 +302,9 @@ extern int __strnlen_user(const char __user *sstr, int len); | |||
305 | 302 | ||
306 | #endif /* CONFIG_MMU */ | 303 | #endif /* CONFIG_MMU */ |
307 | 304 | ||
305 | extern unsigned long __copy_tofrom_user(void __user *to, | ||
306 | const void __user *from, unsigned long size); | ||
307 | |||
308 | /* | 308 | /* |
309 | * The exception table consists of pairs of addresses: the first is the | 309 | * The exception table consists of pairs of addresses: the first is the |
310 | * address of an instruction that is allowed to fault, and the second is | 310 | * address of an instruction that is allowed to fault, and the second is |