diff options
Diffstat (limited to 'arch/microblaze')
-rw-r--r-- | arch/microblaze/Makefile | 2 | ||||
-rw-r--r-- | arch/microblaze/include/asm/io.h | 2 | ||||
-rw-r--r-- | arch/microblaze/include/asm/pci-bridge.h | 2 | ||||
-rw-r--r-- | arch/microblaze/include/asm/pci.h | 2 | ||||
-rw-r--r-- | arch/microblaze/include/asm/unistd.h | 6 | ||||
-rw-r--r-- | arch/microblaze/kernel/Makefile | 1 | ||||
-rw-r--r-- | arch/microblaze/kernel/cpu/cache.c | 2 | ||||
-rw-r--r-- | arch/microblaze/kernel/ftrace.c | 10 | ||||
-rw-r--r-- | arch/microblaze/kernel/intc.c | 4 | ||||
-rw-r--r-- | arch/microblaze/kernel/syscall_table.S | 4 | ||||
-rw-r--r-- | arch/microblaze/lib/Makefile | 6 | ||||
-rw-r--r-- | arch/microblaze/lib/memcpy.c | 8 | ||||
-rw-r--r-- | arch/microblaze/lib/memmove.c | 6 | ||||
-rw-r--r-- | arch/microblaze/lib/memset.c | 2 | ||||
-rw-r--r-- | arch/microblaze/pci/indirect_pci.c | 2 | ||||
-rw-r--r-- | arch/microblaze/platform/generic/Kconfig.auto | 2 |
16 files changed, 39 insertions, 22 deletions
diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile index 6f432e6df9af..b23c40eb7a52 100644 --- a/arch/microblaze/Makefile +++ b/arch/microblaze/Makefile | |||
@@ -18,7 +18,7 @@ export CPU_VER CPU_MAJOR CPU_MINOR CPU_REV | |||
18 | # rather than bools y/n | 18 | # rather than bools y/n |
19 | 19 | ||
20 | # Work out HW multipler support. This is tricky. | 20 | # Work out HW multipler support. This is tricky. |
21 | # 1. Spartan2 has no HW multiplers. | 21 | # 1. Spartan2 has no HW multipliers. |
22 | # 2. MicroBlaze v3.x always uses them, except in Spartan 2 | 22 | # 2. MicroBlaze v3.x always uses them, except in Spartan 2 |
23 | # 3. All other FPGa/CPU ver combos, we can trust the CONFIG_ settings | 23 | # 3. All other FPGa/CPU ver combos, we can trust the CONFIG_ settings |
24 | ifeq (,$(findstring spartan2,$(CONFIG_XILINX_MICROBLAZE0_FAMILY))) | 24 | ifeq (,$(findstring spartan2,$(CONFIG_XILINX_MICROBLAZE0_FAMILY))) |
diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h index eae32220f447..8cdac14b55b0 100644 --- a/arch/microblaze/include/asm/io.h +++ b/arch/microblaze/include/asm/io.h | |||
@@ -70,7 +70,7 @@ static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr) | |||
70 | 70 | ||
71 | /* | 71 | /* |
72 | * read (readb, readw, readl, readq) and write (writeb, writew, | 72 | * read (readb, readw, readl, readq) and write (writeb, writew, |
73 | * writel, writeq) accessors are for PCI and thus littel endian. | 73 | * writel, writeq) accessors are for PCI and thus little endian. |
74 | * Linux 2.4 for Microblaze had this wrong. | 74 | * Linux 2.4 for Microblaze had this wrong. |
75 | */ | 75 | */ |
76 | static inline unsigned char readb(const volatile void __iomem *addr) | 76 | static inline unsigned char readb(const volatile void __iomem *addr) |
diff --git a/arch/microblaze/include/asm/pci-bridge.h b/arch/microblaze/include/asm/pci-bridge.h index 10717669e0c2..746df91e5796 100644 --- a/arch/microblaze/include/asm/pci-bridge.h +++ b/arch/microblaze/include/asm/pci-bridge.h | |||
@@ -76,7 +76,7 @@ struct pci_controller { | |||
76 | * Used for variants of PCI indirect handling and possible quirks: | 76 | * Used for variants of PCI indirect handling and possible quirks: |
77 | * SET_CFG_TYPE - used on 4xx or any PHB that does explicit type0/1 | 77 | * SET_CFG_TYPE - used on 4xx or any PHB that does explicit type0/1 |
78 | * EXT_REG - provides access to PCI-e extended registers | 78 | * EXT_REG - provides access to PCI-e extended registers |
79 | * SURPRESS_PRIMARY_BUS - we surpress the setting of PCI_PRIMARY_BUS | 79 | * SURPRESS_PRIMARY_BUS - we suppress the setting of PCI_PRIMARY_BUS |
80 | * on Freescale PCI-e controllers since they used the PCI_PRIMARY_BUS | 80 | * on Freescale PCI-e controllers since they used the PCI_PRIMARY_BUS |
81 | * to determine which bus number to match on when generating type0 | 81 | * to determine which bus number to match on when generating type0 |
82 | * config cycles | 82 | * config cycles |
diff --git a/arch/microblaze/include/asm/pci.h b/arch/microblaze/include/asm/pci.h index 2232ff942ba9..ba65cf472544 100644 --- a/arch/microblaze/include/asm/pci.h +++ b/arch/microblaze/include/asm/pci.h | |||
@@ -158,7 +158,7 @@ extern void pci_resource_to_user(const struct pci_dev *dev, int bar, | |||
158 | extern void pcibios_setup_bus_devices(struct pci_bus *bus); | 158 | extern void pcibios_setup_bus_devices(struct pci_bus *bus); |
159 | extern void pcibios_setup_bus_self(struct pci_bus *bus); | 159 | extern void pcibios_setup_bus_self(struct pci_bus *bus); |
160 | 160 | ||
161 | /* This part of code was originaly in xilinx-pci.h */ | 161 | /* This part of code was originally in xilinx-pci.h */ |
162 | #ifdef CONFIG_PCI_XILINX | 162 | #ifdef CONFIG_PCI_XILINX |
163 | extern void __init xilinx_pci_init(void); | 163 | extern void __init xilinx_pci_init(void); |
164 | #else | 164 | #else |
diff --git a/arch/microblaze/include/asm/unistd.h b/arch/microblaze/include/asm/unistd.h index d770b00ec6b1..30edd61a6b8f 100644 --- a/arch/microblaze/include/asm/unistd.h +++ b/arch/microblaze/include/asm/unistd.h | |||
@@ -386,8 +386,12 @@ | |||
386 | #define __NR_fanotify_init 368 | 386 | #define __NR_fanotify_init 368 |
387 | #define __NR_fanotify_mark 369 | 387 | #define __NR_fanotify_mark 369 |
388 | #define __NR_prlimit64 370 | 388 | #define __NR_prlimit64 370 |
389 | #define __NR_name_to_handle_at 371 | ||
390 | #define __NR_open_by_handle_at 372 | ||
391 | #define __NR_clock_adjtime 373 | ||
392 | #define __NR_syncfs 374 | ||
389 | 393 | ||
390 | #define __NR_syscalls 371 | 394 | #define __NR_syscalls 375 |
391 | 395 | ||
392 | #ifdef __KERNEL__ | 396 | #ifdef __KERNEL__ |
393 | #ifndef __ASSEMBLY__ | 397 | #ifndef __ASSEMBLY__ |
diff --git a/arch/microblaze/kernel/Makefile b/arch/microblaze/kernel/Makefile index f0cb5c26c81c..494b63b72dd7 100644 --- a/arch/microblaze/kernel/Makefile +++ b/arch/microblaze/kernel/Makefile | |||
@@ -10,6 +10,7 @@ CFLAGS_REMOVE_early_printk.o = -pg | |||
10 | CFLAGS_REMOVE_selfmod.o = -pg | 10 | CFLAGS_REMOVE_selfmod.o = -pg |
11 | CFLAGS_REMOVE_heartbeat.o = -pg | 11 | CFLAGS_REMOVE_heartbeat.o = -pg |
12 | CFLAGS_REMOVE_ftrace.o = -pg | 12 | CFLAGS_REMOVE_ftrace.o = -pg |
13 | CFLAGS_REMOVE_process.o = -pg | ||
13 | endif | 14 | endif |
14 | 15 | ||
15 | extra-y := head.o vmlinux.lds | 16 | extra-y := head.o vmlinux.lds |
diff --git a/arch/microblaze/kernel/cpu/cache.c b/arch/microblaze/kernel/cpu/cache.c index cf0afd90a2c0..4b7d8a3f4aef 100644 --- a/arch/microblaze/kernel/cpu/cache.c +++ b/arch/microblaze/kernel/cpu/cache.c | |||
@@ -129,7 +129,7 @@ do { \ | |||
129 | * to use for simple wdc or wic. | 129 | * to use for simple wdc or wic. |
130 | * | 130 | * |
131 | * start address is cache aligned | 131 | * start address is cache aligned |
132 | * end address is not aligned, if end is aligned then I have to substract | 132 | * end address is not aligned, if end is aligned then I have to subtract |
133 | * cacheline length because I can't flush/invalidate the next cacheline. | 133 | * cacheline length because I can't flush/invalidate the next cacheline. |
134 | * If is not, I align it because I will flush/invalidate whole line. | 134 | * If is not, I align it because I will flush/invalidate whole line. |
135 | */ | 135 | */ |
diff --git a/arch/microblaze/kernel/ftrace.c b/arch/microblaze/kernel/ftrace.c index 515feb404555..357d56abe24a 100644 --- a/arch/microblaze/kernel/ftrace.c +++ b/arch/microblaze/kernel/ftrace.c | |||
@@ -51,6 +51,9 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) | |||
51 | : "r" (parent), "r" (return_hooker) | 51 | : "r" (parent), "r" (return_hooker) |
52 | ); | 52 | ); |
53 | 53 | ||
54 | flush_dcache_range((u32)parent, (u32)parent + 4); | ||
55 | flush_icache_range((u32)parent, (u32)parent + 4); | ||
56 | |||
54 | if (unlikely(faulted)) { | 57 | if (unlikely(faulted)) { |
55 | ftrace_graph_stop(); | 58 | ftrace_graph_stop(); |
56 | WARN_ON(1); | 59 | WARN_ON(1); |
@@ -95,6 +98,9 @@ static int ftrace_modify_code(unsigned long addr, unsigned int value) | |||
95 | if (unlikely(faulted)) | 98 | if (unlikely(faulted)) |
96 | return -EFAULT; | 99 | return -EFAULT; |
97 | 100 | ||
101 | flush_dcache_range(addr, addr + 4); | ||
102 | flush_icache_range(addr, addr + 4); | ||
103 | |||
98 | return 0; | 104 | return 0; |
99 | } | 105 | } |
100 | 106 | ||
@@ -195,8 +201,6 @@ int ftrace_update_ftrace_func(ftrace_func_t func) | |||
195 | ret += ftrace_modify_code((unsigned long)&ftrace_caller, | 201 | ret += ftrace_modify_code((unsigned long)&ftrace_caller, |
196 | MICROBLAZE_NOP); | 202 | MICROBLAZE_NOP); |
197 | 203 | ||
198 | /* All changes are done - lets do caches consistent */ | ||
199 | flush_icache(); | ||
200 | return ret; | 204 | return ret; |
201 | } | 205 | } |
202 | 206 | ||
@@ -210,7 +214,6 @@ int ftrace_enable_ftrace_graph_caller(void) | |||
210 | 214 | ||
211 | old_jump = *(unsigned int *)ip; /* save jump over instruction */ | 215 | old_jump = *(unsigned int *)ip; /* save jump over instruction */ |
212 | ret = ftrace_modify_code(ip, MICROBLAZE_NOP); | 216 | ret = ftrace_modify_code(ip, MICROBLAZE_NOP); |
213 | flush_icache(); | ||
214 | 217 | ||
215 | pr_debug("%s: Replace instruction: 0x%x\n", __func__, old_jump); | 218 | pr_debug("%s: Replace instruction: 0x%x\n", __func__, old_jump); |
216 | return ret; | 219 | return ret; |
@@ -222,7 +225,6 @@ int ftrace_disable_ftrace_graph_caller(void) | |||
222 | unsigned long ip = (unsigned long)(&ftrace_call_graph); | 225 | unsigned long ip = (unsigned long)(&ftrace_call_graph); |
223 | 226 | ||
224 | ret = ftrace_modify_code(ip, old_jump); | 227 | ret = ftrace_modify_code(ip, old_jump); |
225 | flush_icache(); | ||
226 | 228 | ||
227 | pr_debug("%s\n", __func__); | 229 | pr_debug("%s\n", __func__); |
228 | return ret; | 230 | return ret; |
diff --git a/arch/microblaze/kernel/intc.c b/arch/microblaze/kernel/intc.c index 5ba7e162833b..c88f066f41bd 100644 --- a/arch/microblaze/kernel/intc.c +++ b/arch/microblaze/kernel/intc.c | |||
@@ -158,11 +158,11 @@ void __init init_IRQ(void) | |||
158 | for (i = 0; i < nr_irq; ++i) { | 158 | for (i = 0; i < nr_irq; ++i) { |
159 | if (intr_type & (0x00000001 << i)) { | 159 | if (intr_type & (0x00000001 << i)) { |
160 | irq_set_chip_and_handler_name(i, &intc_dev, | 160 | irq_set_chip_and_handler_name(i, &intc_dev, |
161 | handle_edge_irq, intc_dev.name); | 161 | handle_edge_irq, "edge"); |
162 | irq_clear_status_flags(i, IRQ_LEVEL); | 162 | irq_clear_status_flags(i, IRQ_LEVEL); |
163 | } else { | 163 | } else { |
164 | irq_set_chip_and_handler_name(i, &intc_dev, | 164 | irq_set_chip_and_handler_name(i, &intc_dev, |
165 | handle_level_irq, intc_dev.name); | 165 | handle_level_irq, "level"); |
166 | irq_set_status_flags(i, IRQ_LEVEL); | 166 | irq_set_status_flags(i, IRQ_LEVEL); |
167 | } | 167 | } |
168 | } | 168 | } |
diff --git a/arch/microblaze/kernel/syscall_table.S b/arch/microblaze/kernel/syscall_table.S index e88a930fd1e3..85cea81d1ca1 100644 --- a/arch/microblaze/kernel/syscall_table.S +++ b/arch/microblaze/kernel/syscall_table.S | |||
@@ -375,3 +375,7 @@ ENTRY(sys_call_table) | |||
375 | .long sys_fanotify_init | 375 | .long sys_fanotify_init |
376 | .long sys_fanotify_mark | 376 | .long sys_fanotify_mark |
377 | .long sys_prlimit64 /* 370 */ | 377 | .long sys_prlimit64 /* 370 */ |
378 | .long sys_name_to_handle_at | ||
379 | .long sys_open_by_handle_at | ||
380 | .long sys_clock_adjtime | ||
381 | .long sys_syncfs | ||
diff --git a/arch/microblaze/lib/Makefile b/arch/microblaze/lib/Makefile index f1fcbff3da25..10c320aa908b 100644 --- a/arch/microblaze/lib/Makefile +++ b/arch/microblaze/lib/Makefile | |||
@@ -2,6 +2,12 @@ | |||
2 | # Makefile | 2 | # Makefile |
3 | # | 3 | # |
4 | 4 | ||
5 | ifdef CONFIG_FUNCTION_TRACER | ||
6 | CFLAGS_REMOVE_ashldi3.o = -pg | ||
7 | CFLAGS_REMOVE_ashrdi3.o = -pg | ||
8 | CFLAGS_REMOVE_lshrdi3.o = -pg | ||
9 | endif | ||
10 | |||
5 | lib-y := memset.o | 11 | lib-y := memset.o |
6 | 12 | ||
7 | ifeq ($(CONFIG_OPT_LIB_ASM),y) | 13 | ifeq ($(CONFIG_OPT_LIB_ASM),y) |
diff --git a/arch/microblaze/lib/memcpy.c b/arch/microblaze/lib/memcpy.c index cc495d7d99cc..52746e718dfa 100644 --- a/arch/microblaze/lib/memcpy.c +++ b/arch/microblaze/lib/memcpy.c | |||
@@ -63,8 +63,8 @@ void *memcpy(void *v_dst, const void *v_src, __kernel_size_t c) | |||
63 | if (likely(c >= 4)) { | 63 | if (likely(c >= 4)) { |
64 | unsigned value, buf_hold; | 64 | unsigned value, buf_hold; |
65 | 65 | ||
66 | /* Align the dstination to a word boundry. */ | 66 | /* Align the destination to a word boundary. */ |
67 | /* This is done in an endian independant manner. */ | 67 | /* This is done in an endian independent manner. */ |
68 | switch ((unsigned long)dst & 3) { | 68 | switch ((unsigned long)dst & 3) { |
69 | case 1: | 69 | case 1: |
70 | *dst++ = *src++; | 70 | *dst++ = *src++; |
@@ -80,7 +80,7 @@ void *memcpy(void *v_dst, const void *v_src, __kernel_size_t c) | |||
80 | i_dst = (void *)dst; | 80 | i_dst = (void *)dst; |
81 | 81 | ||
82 | /* Choose a copy scheme based on the source */ | 82 | /* Choose a copy scheme based on the source */ |
83 | /* alignment relative to dstination. */ | 83 | /* alignment relative to destination. */ |
84 | switch ((unsigned long)src & 3) { | 84 | switch ((unsigned long)src & 3) { |
85 | case 0x0: /* Both byte offsets are aligned */ | 85 | case 0x0: /* Both byte offsets are aligned */ |
86 | i_src = (const void *)src; | 86 | i_src = (const void *)src; |
@@ -173,7 +173,7 @@ void *memcpy(void *v_dst, const void *v_src, __kernel_size_t c) | |||
173 | } | 173 | } |
174 | 174 | ||
175 | /* Finish off any remaining bytes */ | 175 | /* Finish off any remaining bytes */ |
176 | /* simple fast copy, ... unless a cache boundry is crossed */ | 176 | /* simple fast copy, ... unless a cache boundary is crossed */ |
177 | switch (c) { | 177 | switch (c) { |
178 | case 3: | 178 | case 3: |
179 | *dst++ = *src++; | 179 | *dst++ = *src++; |
diff --git a/arch/microblaze/lib/memmove.c b/arch/microblaze/lib/memmove.c index 810fd68775e3..2146c3752a80 100644 --- a/arch/microblaze/lib/memmove.c +++ b/arch/microblaze/lib/memmove.c | |||
@@ -83,8 +83,8 @@ void *memmove(void *v_dst, const void *v_src, __kernel_size_t c) | |||
83 | if (c >= 4) { | 83 | if (c >= 4) { |
84 | unsigned value, buf_hold; | 84 | unsigned value, buf_hold; |
85 | 85 | ||
86 | /* Align the destination to a word boundry. */ | 86 | /* Align the destination to a word boundary. */ |
87 | /* This is done in an endian independant manner. */ | 87 | /* This is done in an endian independent manner. */ |
88 | 88 | ||
89 | switch ((unsigned long)dst & 3) { | 89 | switch ((unsigned long)dst & 3) { |
90 | case 3: | 90 | case 3: |
@@ -193,7 +193,7 @@ void *memmove(void *v_dst, const void *v_src, __kernel_size_t c) | |||
193 | dst = (void *)i_dst; | 193 | dst = (void *)i_dst; |
194 | } | 194 | } |
195 | 195 | ||
196 | /* simple fast copy, ... unless a cache boundry is crossed */ | 196 | /* simple fast copy, ... unless a cache boundary is crossed */ |
197 | /* Finish off any remaining bytes */ | 197 | /* Finish off any remaining bytes */ |
198 | switch (c) { | 198 | switch (c) { |
199 | case 4: | 199 | case 4: |
diff --git a/arch/microblaze/lib/memset.c b/arch/microblaze/lib/memset.c index 834565d1607e..ddf67939576d 100644 --- a/arch/microblaze/lib/memset.c +++ b/arch/microblaze/lib/memset.c | |||
@@ -64,7 +64,7 @@ void *memset(void *v_src, int c, __kernel_size_t n) | |||
64 | 64 | ||
65 | if (likely(n >= 4)) { | 65 | if (likely(n >= 4)) { |
66 | /* Align the destination to a word boundary */ | 66 | /* Align the destination to a word boundary */ |
67 | /* This is done in an endian independant manner */ | 67 | /* This is done in an endian independent manner */ |
68 | switch ((unsigned) src & 3) { | 68 | switch ((unsigned) src & 3) { |
69 | case 1: | 69 | case 1: |
70 | *src++ = c; | 70 | *src++ = c; |
diff --git a/arch/microblaze/pci/indirect_pci.c b/arch/microblaze/pci/indirect_pci.c index 25f18f017f21..4196eb6bd764 100644 --- a/arch/microblaze/pci/indirect_pci.c +++ b/arch/microblaze/pci/indirect_pci.c | |||
@@ -108,7 +108,7 @@ indirect_write_config(struct pci_bus *bus, unsigned int devfn, int offset, | |||
108 | out_le32(hose->cfg_addr, (0x80000000 | (bus_no << 16) | | 108 | out_le32(hose->cfg_addr, (0x80000000 | (bus_no << 16) | |
109 | (devfn << 8) | reg | cfg_type)); | 109 | (devfn << 8) | reg | cfg_type)); |
110 | 110 | ||
111 | /* surpress setting of PCI_PRIMARY_BUS */ | 111 | /* suppress setting of PCI_PRIMARY_BUS */ |
112 | if (hose->indirect_type & INDIRECT_TYPE_SURPRESS_PRIMARY_BUS) | 112 | if (hose->indirect_type & INDIRECT_TYPE_SURPRESS_PRIMARY_BUS) |
113 | if ((offset == PCI_PRIMARY_BUS) && | 113 | if ((offset == PCI_PRIMARY_BUS) && |
114 | (bus->number == hose->first_busno)) | 114 | (bus->number == hose->first_busno)) |
diff --git a/arch/microblaze/platform/generic/Kconfig.auto b/arch/microblaze/platform/generic/Kconfig.auto index 5d86fc19029d..25a6f019e94d 100644 --- a/arch/microblaze/platform/generic/Kconfig.auto +++ b/arch/microblaze/platform/generic/Kconfig.auto | |||
@@ -29,7 +29,7 @@ config KERNEL_BASE_ADDR | |||
29 | BASE Address for kernel | 29 | BASE Address for kernel |
30 | 30 | ||
31 | config XILINX_MICROBLAZE0_FAMILY | 31 | config XILINX_MICROBLAZE0_FAMILY |
32 | string "Targetted FPGA family" | 32 | string "Targeted FPGA family" |
33 | default "virtex5" | 33 | default "virtex5" |
34 | 34 | ||
35 | config XILINX_MICROBLAZE0_USE_MSR_INSTR | 35 | config XILINX_MICROBLAZE0_USE_MSR_INSTR |