diff options
author | Michal Simek <monstr@monstr.eu> | 2011-01-31 08:57:26 -0500 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2011-03-09 02:09:53 -0500 |
commit | 495162dfefe3f6e3a8e908aa2f0a964a572d3e87 (patch) | |
tree | ad617d05d68d674bccf7820c1d2def4433e82693 /arch/microblaze/kernel | |
parent | 601149775158ea825326734c2db5d90190249bd7 (diff) |
microblaze: Optimize BE/LE bootup detecting
Save 0x1 word to rodata section and remove online value
loading if DTB is passed from bootloader. It saves two
asm instructions in bootup.
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze/kernel')
-rw-r--r-- | arch/microblaze/kernel/head.S | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S index 778a5ce2e4fc..d8dc085a9456 100644 --- a/arch/microblaze/kernel/head.S +++ b/arch/microblaze/kernel/head.S | |||
@@ -39,7 +39,7 @@ | |||
39 | #include <asm/mmu.h> | 39 | #include <asm/mmu.h> |
40 | #include <asm/processor.h> | 40 | #include <asm/processor.h> |
41 | 41 | ||
42 | .data | 42 | .section .data |
43 | .global empty_zero_page | 43 | .global empty_zero_page |
44 | .align 12 | 44 | .align 12 |
45 | empty_zero_page: | 45 | empty_zero_page: |
@@ -50,6 +50,11 @@ swapper_pg_dir: | |||
50 | 50 | ||
51 | #endif /* CONFIG_MMU */ | 51 | #endif /* CONFIG_MMU */ |
52 | 52 | ||
53 | .section .rodata | ||
54 | .align 4 | ||
55 | endian_check: | ||
56 | .word 1 | ||
57 | |||
53 | __HEAD | 58 | __HEAD |
54 | ENTRY(_start) | 59 | ENTRY(_start) |
55 | #if CONFIG_KERNEL_BASE_ADDR == 0 | 60 | #if CONFIG_KERNEL_BASE_ADDR == 0 |
@@ -79,10 +84,7 @@ real_start: | |||
79 | /* Does r7 point to a valid FDT? Load HEADER magic number */ | 84 | /* Does r7 point to a valid FDT? Load HEADER magic number */ |
80 | /* Run time Big/Little endian platform */ | 85 | /* Run time Big/Little endian platform */ |
81 | /* Save 1 as word and load byte - 0 - BIG, 1 - LITTLE */ | 86 | /* Save 1 as word and load byte - 0 - BIG, 1 - LITTLE */ |
82 | addik r11, r0, 0x1 /* BIG/LITTLE checking value */ | 87 | lbui r11, r0, TOPHYS(endian_check) |
83 | /* __bss_start will be zeroed later - it is just temp location */ | ||
84 | swi r11, r0, TOPHYS(__bss_start) | ||
85 | lbui r11, r0, TOPHYS(__bss_start) | ||
86 | beqid r11, big_endian /* DO NOT break delay stop dependency */ | 88 | beqid r11, big_endian /* DO NOT break delay stop dependency */ |
87 | lw r11, r0, r7 /* Big endian load in delay slot */ | 89 | lw r11, r0, r7 /* Big endian load in delay slot */ |
88 | lwr r11, r0, r7 /* Little endian load */ | 90 | lwr r11, r0, r7 /* Little endian load */ |