diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-02-01 18:23:58 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-02-01 18:23:58 -0500 |
| commit | afe8a887550f7cc24eb16449670b93f6b43c32d8 (patch) | |
| tree | ab6df9ea8b05eda3001cd41377295485a9e075bb | |
| parent | 405b864d3fd579d3e8a1002f7452343fbb6dbe99 (diff) | |
| parent | de93c3c119382cb888ca8a94b642dbcf8035525e (diff) | |
Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze
* 'next' of git://git.monstr.eu/linux-2.6-microblaze:
microblaze: Fix ASM optimized code for LE
microblaze: Fix unaligned issue on MMU system with BS=0 DIV=1
microblaze: Fix DTB passing from bootloader
| -rw-r--r-- | arch/microblaze/kernel/head.S | 14 | ||||
| -rw-r--r-- | arch/microblaze/kernel/hw_exception_handler.S | 4 | ||||
| -rw-r--r-- | arch/microblaze/lib/fastcopy.S | 4 |
3 files changed, 16 insertions, 6 deletions
diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S index 42434008209..0db20b5abb5 100644 --- a/arch/microblaze/kernel/head.S +++ b/arch/microblaze/kernel/head.S | |||
| @@ -77,8 +77,18 @@ real_start: | |||
| 77 | We ensure r7 points to a valid FDT, just in case the bootloader | 77 | We ensure r7 points to a valid FDT, just in case the bootloader |
| 78 | is broken or non-existent */ | 78 | is broken or non-existent */ |
| 79 | beqi r7, no_fdt_arg /* NULL pointer? don't copy */ | 79 | beqi r7, no_fdt_arg /* NULL pointer? don't copy */ |
| 80 | lw r11, r0, r7 /* Does r7 point to a */ | 80 | /* Does r7 point to a valid FDT? Load HEADER magic number */ |
| 81 | rsubi r11, r11, OF_DT_HEADER /* valid FDT? */ | 81 | /* Run time Big/Little endian platform */ |
| 82 | /* Save 1 as word and load byte - 0 - BIG, 1 - LITTLE */ | ||
| 83 | addik r11, r0, 0x1 /* BIG/LITTLE checking value */ | ||
| 84 | /* __bss_start will be zeroed later - it is just temp location */ | ||
| 85 | swi r11, r0, TOPHYS(__bss_start) | ||
| 86 | lbui r11, r0, TOPHYS(__bss_start) | ||
| 87 | beqid r11, big_endian /* DO NOT break delay stop dependency */ | ||
| 88 | lw r11, r0, r7 /* Big endian load in delay slot */ | ||
| 89 | lwr r11, r0, r7 /* Little endian load */ | ||
| 90 | big_endian: | ||
| 91 | rsubi r11, r11, OF_DT_HEADER /* Check FDT header */ | ||
| 82 | beqi r11, _prepare_copy_fdt | 92 | beqi r11, _prepare_copy_fdt |
| 83 | or r7, r0, r0 /* clear R7 when not valid DTB */ | 93 | or r7, r0, r0 /* clear R7 when not valid DTB */ |
| 84 | bnei r11, no_fdt_arg /* No - get out of here */ | 94 | bnei r11, no_fdt_arg /* No - get out of here */ |
diff --git a/arch/microblaze/kernel/hw_exception_handler.S b/arch/microblaze/kernel/hw_exception_handler.S index 25f6e07d8de..782680de312 100644 --- a/arch/microblaze/kernel/hw_exception_handler.S +++ b/arch/microblaze/kernel/hw_exception_handler.S | |||
| @@ -147,10 +147,6 @@ | |||
| 147 | #if CONFIG_XILINX_MICROBLAZE0_USE_BARREL > 0 | 147 | #if CONFIG_XILINX_MICROBLAZE0_USE_BARREL > 0 |
| 148 | #define BSRLI(rD, rA, imm) \ | 148 | #define BSRLI(rD, rA, imm) \ |
| 149 | bsrli rD, rA, imm | 149 | bsrli rD, rA, imm |
| 150 | #elif CONFIG_XILINX_MICROBLAZE0_USE_DIV > 0 | ||
| 151 | #define BSRLI(rD, rA, imm) \ | ||
| 152 | ori rD, r0, (1 << imm); \ | ||
| 153 | idivu rD, rD, rA | ||
| 154 | #else | 150 | #else |
| 155 | #define BSRLI(rD, rA, imm) BSRLI ## imm (rD, rA) | 151 | #define BSRLI(rD, rA, imm) BSRLI ## imm (rD, rA) |
| 156 | /* Only the used shift constants defined here - add more if needed */ | 152 | /* Only the used shift constants defined here - add more if needed */ |
diff --git a/arch/microblaze/lib/fastcopy.S b/arch/microblaze/lib/fastcopy.S index fdc48bb065d..62021d7e249 100644 --- a/arch/microblaze/lib/fastcopy.S +++ b/arch/microblaze/lib/fastcopy.S | |||
| @@ -29,6 +29,10 @@ | |||
| 29 | * between mem locations with size of xfer spec'd in bytes | 29 | * between mem locations with size of xfer spec'd in bytes |
| 30 | */ | 30 | */ |
| 31 | 31 | ||
| 32 | #ifdef __MICROBLAZEEL__ | ||
| 33 | #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM. | ||
| 34 | #endif | ||
| 35 | |||
| 32 | #include <linux/linkage.h> | 36 | #include <linux/linkage.h> |
| 33 | .text | 37 | .text |
| 34 | .globl memcpy | 38 | .globl memcpy |
