diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 19:13:44 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 19:13:44 -0400 |
| commit | b1c907f3b2675ecb01e340948fc62d6535ff5ac3 (patch) | |
| tree | 978e7ba356ff57c4febe55f3ee0d0955ea721f14 | |
| parent | 91e67a996c60a347ad7b918a74efb0f6b3b274c3 (diff) | |
| parent | 84ac218f0257a0cfd7689d9a44f53118dbf307b3 (diff) | |
Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze
* 'next' of git://git.monstr.eu/linux-2.6-microblaze:
microblaze: Remove __ARCH_WANT_INTERRUPTS_ON_CTXSW usage
microblaze: Use delay slot in __strnlen_user, __strncpy_user
microblaze: Remove NET_IP_ALIGN from system.h
microblaze: Add __ucmpdi2() helper function
microblaze: Raise SIGFPE/FPE_INTDIV for div by zero
microblaze: Switch ELF_ARCH code to 189
microblaze: Added DMA sync operations
microblaze: Moved __dma_sync() to dma-mapping.h
microblaze: Add PVR for Microblaze v8.20.a
microblaze: Fix access_ok macro
microblaze: Add loop unrolling for PAGE in copy_tofrom_user
microblaze: Simplify logic for unaligned byte copying
microblaze: Change label names - copy_tofrom_user
microblaze: Separate fixup section definition
microblaze: Change label name in copy_tofrom_user
microblaze: Clear top bit from cnt32_to_63
| -rw-r--r-- | arch/microblaze/include/asm/dma-mapping.h | 20 | ||||
| -rw-r--r-- | arch/microblaze/include/asm/elf.h | 8 | ||||
| -rw-r--r-- | arch/microblaze/include/asm/system.h | 9 | ||||
| -rw-r--r-- | arch/microblaze/include/asm/uaccess.h | 2 | ||||
| -rw-r--r-- | arch/microblaze/kernel/cpu/cpuinfo.c | 1 | ||||
| -rw-r--r-- | arch/microblaze/kernel/dma.c | 82 | ||||
| -rw-r--r-- | arch/microblaze/kernel/exceptions.c | 2 | ||||
| -rw-r--r-- | arch/microblaze/kernel/process.c | 1 | ||||
| -rw-r--r-- | arch/microblaze/kernel/ptrace.c | 2 | ||||
| -rw-r--r-- | arch/microblaze/kernel/timer.c | 3 | ||||
| -rw-r--r-- | arch/microblaze/lib/Makefile | 1 | ||||
| -rw-r--r-- | arch/microblaze/lib/uaccess_old.S | 123 | ||||
| -rw-r--r-- | arch/microblaze/lib/ucmpdi2.c | 20 |
13 files changed, 220 insertions, 54 deletions
diff --git a/arch/microblaze/include/asm/dma-mapping.h b/arch/microblaze/include/asm/dma-mapping.h index a569514cf19f..3a3e5b886854 100644 --- a/arch/microblaze/include/asm/dma-mapping.h +++ b/arch/microblaze/include/asm/dma-mapping.h | |||
| @@ -28,12 +28,12 @@ | |||
| 28 | #include <linux/dma-attrs.h> | 28 | #include <linux/dma-attrs.h> |
| 29 | #include <asm/io.h> | 29 | #include <asm/io.h> |
| 30 | #include <asm-generic/dma-coherent.h> | 30 | #include <asm-generic/dma-coherent.h> |
| 31 | #include <asm/cacheflush.h> | ||
| 31 | 32 | ||
| 32 | #define DMA_ERROR_CODE (~(dma_addr_t)0x0) | 33 | #define DMA_ERROR_CODE (~(dma_addr_t)0x0) |
| 33 | 34 | ||
| 34 | #define __dma_alloc_coherent(dev, gfp, size, handle) NULL | 35 | #define __dma_alloc_coherent(dev, gfp, size, handle) NULL |
| 35 | #define __dma_free_coherent(size, addr) ((void)0) | 36 | #define __dma_free_coherent(size, addr) ((void)0) |
| 36 | #define __dma_sync(addr, size, rw) ((void)0) | ||
| 37 | 37 | ||
| 38 | static inline unsigned long device_to_mask(struct device *dev) | 38 | static inline unsigned long device_to_mask(struct device *dev) |
| 39 | { | 39 | { |
| @@ -95,6 +95,22 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask) | |||
| 95 | 95 | ||
| 96 | #include <asm-generic/dma-mapping-common.h> | 96 | #include <asm-generic/dma-mapping-common.h> |
| 97 | 97 | ||
| 98 | static inline void __dma_sync(unsigned long paddr, | ||
| 99 | size_t size, enum dma_data_direction direction) | ||
| 100 | { | ||
| 101 | switch (direction) { | ||
| 102 | case DMA_TO_DEVICE: | ||
| 103 | case DMA_BIDIRECTIONAL: | ||
| 104 | flush_dcache_range(paddr, paddr + size); | ||
| 105 | break; | ||
| 106 | case DMA_FROM_DEVICE: | ||
| 107 | invalidate_dcache_range(paddr, paddr + size); | ||
| 108 | break; | ||
| 109 | default: | ||
| 110 | BUG(); | ||
| 111 | } | ||
| 112 | } | ||
| 113 | |||
| 98 | static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | 114 | static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) |
| 99 | { | 115 | { |
| 100 | struct dma_map_ops *ops = get_dma_ops(dev); | 116 | struct dma_map_ops *ops = get_dma_ops(dev); |
| @@ -135,7 +151,7 @@ static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, | |||
| 135 | enum dma_data_direction direction) | 151 | enum dma_data_direction direction) |
| 136 | { | 152 | { |
| 137 | BUG_ON(direction == DMA_NONE); | 153 | BUG_ON(direction == DMA_NONE); |
| 138 | __dma_sync(vaddr, size, (int)direction); | 154 | __dma_sync(virt_to_phys(vaddr), size, (int)direction); |
| 139 | } | 155 | } |
| 140 | 156 | ||
| 141 | #endif /* _ASM_MICROBLAZE_DMA_MAPPING_H */ | 157 | #endif /* _ASM_MICROBLAZE_DMA_MAPPING_H */ |
diff --git a/arch/microblaze/include/asm/elf.h b/arch/microblaze/include/asm/elf.h index 098dfdde4b06..834849f59ae8 100644 --- a/arch/microblaze/include/asm/elf.h +++ b/arch/microblaze/include/asm/elf.h | |||
| @@ -16,13 +16,15 @@ | |||
| 16 | * I've snaffled the value from the microblaze binutils source code | 16 | * I've snaffled the value from the microblaze binutils source code |
| 17 | * /binutils/microblaze/include/elf/microblaze.h | 17 | * /binutils/microblaze/include/elf/microblaze.h |
| 18 | */ | 18 | */ |
| 19 | #define EM_XILINX_MICROBLAZE 0xbaab | 19 | #define EM_MICROBLAZE 189 |
| 20 | #define ELF_ARCH EM_XILINX_MICROBLAZE | 20 | #define EM_MICROBLAZE_OLD 0xbaab |
| 21 | #define ELF_ARCH EM_MICROBLAZE | ||
| 21 | 22 | ||
| 22 | /* | 23 | /* |
| 23 | * This is used to ensure we don't load something for the wrong architecture. | 24 | * This is used to ensure we don't load something for the wrong architecture. |
| 24 | */ | 25 | */ |
| 25 | #define elf_check_arch(x) ((x)->e_machine == EM_XILINX_MICROBLAZE) | 26 | #define elf_check_arch(x) ((x)->e_machine == EM_MICROBLAZE \ |
| 27 | || (x)->e_machine == EM_MICROBLAZE_OLD) | ||
| 26 | 28 | ||
| 27 | /* | 29 | /* |
| 28 | * These are used to set parameters in the core dumps. | 30 | * These are used to set parameters in the core dumps. |
diff --git a/arch/microblaze/include/asm/system.h b/arch/microblaze/include/asm/system.h index e6a2284571dc..5a433cbaafb3 100644 --- a/arch/microblaze/include/asm/system.h +++ b/arch/microblaze/include/asm/system.h | |||
| @@ -17,8 +17,6 @@ | |||
| 17 | #include <asm-generic/cmpxchg.h> | 17 | #include <asm-generic/cmpxchg.h> |
| 18 | #include <asm-generic/cmpxchg-local.h> | 18 | #include <asm-generic/cmpxchg-local.h> |
| 19 | 19 | ||
| 20 | #define __ARCH_WANT_INTERRUPTS_ON_CTXSW | ||
| 21 | |||
| 22 | struct task_struct; | 20 | struct task_struct; |
| 23 | struct thread_info; | 21 | struct thread_info; |
| 24 | 22 | ||
| @@ -96,11 +94,4 @@ extern struct dentry *of_debugfs_root; | |||
| 96 | 94 | ||
| 97 | #define arch_align_stack(x) (x) | 95 | #define arch_align_stack(x) (x) |
| 98 | 96 | ||
| 99 | /* | ||
| 100 | * MicroBlaze doesn't handle unaligned accesses in hardware. | ||
| 101 | * | ||
| 102 | * Based on this we force the IP header alignment in network drivers. | ||
| 103 | */ | ||
| 104 | #define NET_IP_ALIGN 2 | ||
| 105 | |||
| 106 | #endif /* _ASM_MICROBLAZE_SYSTEM_H */ | 97 | #endif /* _ASM_MICROBLAZE_SYSTEM_H */ |
diff --git a/arch/microblaze/include/asm/uaccess.h b/arch/microblaze/include/asm/uaccess.h index 5bb95a11880d..072b0077abf9 100644 --- a/arch/microblaze/include/asm/uaccess.h +++ b/arch/microblaze/include/asm/uaccess.h | |||
| @@ -95,7 +95,7 @@ static inline int ___range_ok(unsigned long addr, unsigned long size) | |||
| 95 | * - "addr", "addr + size" and "size" are all below the limit | 95 | * - "addr", "addr + size" and "size" are all below the limit |
| 96 | */ | 96 | */ |
| 97 | #define access_ok(type, addr, size) \ | 97 | #define access_ok(type, addr, size) \ |
| 98 | (get_fs().seg > (((unsigned long)(addr)) | \ | 98 | (get_fs().seg >= (((unsigned long)(addr)) | \ |
| 99 | (size) | ((unsigned long)(addr) + (size)))) | 99 | (size) | ((unsigned long)(addr) + (size)))) |
| 100 | 100 | ||
| 101 | /* || printk("access_ok failed for %s at 0x%08lx (size %d), seg 0x%08x\n", | 101 | /* || printk("access_ok failed for %s at 0x%08lx (size %d), seg 0x%08x\n", |
diff --git a/arch/microblaze/kernel/cpu/cpuinfo.c b/arch/microblaze/kernel/cpu/cpuinfo.c index 44394d80a683..54194b28574a 100644 --- a/arch/microblaze/kernel/cpu/cpuinfo.c +++ b/arch/microblaze/kernel/cpu/cpuinfo.c | |||
| @@ -34,6 +34,7 @@ const struct cpu_ver_key cpu_ver_lookup[] = { | |||
| 34 | {"8.00.a", 0x12}, | 34 | {"8.00.a", 0x12}, |
| 35 | {"8.00.b", 0x13}, | 35 | {"8.00.b", 0x13}, |
| 36 | {"8.10.a", 0x14}, | 36 | {"8.10.a", 0x14}, |
| 37 | {"8.20.a", 0x15}, | ||
| 37 | {NULL, 0}, | 38 | {NULL, 0}, |
| 38 | }; | 39 | }; |
| 39 | 40 | ||
diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c index 393e6b2db688..dc6416d265d6 100644 --- a/arch/microblaze/kernel/dma.c +++ b/arch/microblaze/kernel/dma.c | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | #include <linux/gfp.h> | 11 | #include <linux/gfp.h> |
| 12 | #include <linux/dma-debug.h> | 12 | #include <linux/dma-debug.h> |
| 13 | #include <asm/bug.h> | 13 | #include <asm/bug.h> |
| 14 | #include <asm/cacheflush.h> | ||
| 15 | 14 | ||
| 16 | /* | 15 | /* |
| 17 | * Generic direct DMA implementation | 16 | * Generic direct DMA implementation |
| @@ -21,21 +20,6 @@ | |||
| 21 | * can set archdata.dma_data to an unsigned long holding the offset. By | 20 | * can set archdata.dma_data to an unsigned long holding the offset. By |
| 22 | * default the offset is PCI_DRAM_OFFSET. | 21 | * default the offset is PCI_DRAM_OFFSET. |
| 23 | */ | 22 | */ |
| 24 | static inline void __dma_sync_page(unsigned long paddr, unsigned long offset, | ||
| 25 | size_t size, enum dma_data_direction direction) | ||
| 26 | { | ||
| 27 | switch (direction) { | ||
| 28 | case DMA_TO_DEVICE: | ||
| 29 | case DMA_BIDIRECTIONAL: | ||
| 30 | flush_dcache_range(paddr + offset, paddr + offset + size); | ||
| 31 | break; | ||
| 32 | case DMA_FROM_DEVICE: | ||
| 33 | invalidate_dcache_range(paddr + offset, paddr + offset + size); | ||
| 34 | break; | ||
| 35 | default: | ||
| 36 | BUG(); | ||
| 37 | } | ||
