提交 495162df 编写于 作者: M Michal Simek

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: NMichal Simek <monstr@monstr.eu>
上级 60114977
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#include <asm/mmu.h> #include <asm/mmu.h>
#include <asm/processor.h> #include <asm/processor.h>
.data .section .data
.global empty_zero_page .global empty_zero_page
.align 12 .align 12
empty_zero_page: empty_zero_page:
...@@ -50,6 +50,11 @@ swapper_pg_dir: ...@@ -50,6 +50,11 @@ swapper_pg_dir:
#endif /* CONFIG_MMU */ #endif /* CONFIG_MMU */
.section .rodata
.align 4
endian_check:
.word 1
__HEAD __HEAD
ENTRY(_start) ENTRY(_start)
#if CONFIG_KERNEL_BASE_ADDR == 0 #if CONFIG_KERNEL_BASE_ADDR == 0
...@@ -79,10 +84,7 @@ real_start: ...@@ -79,10 +84,7 @@ real_start:
/* Does r7 point to a valid FDT? Load HEADER magic number */ /* Does r7 point to a valid FDT? Load HEADER magic number */
/* Run time Big/Little endian platform */ /* Run time Big/Little endian platform */
/* Save 1 as word and load byte - 0 - BIG, 1 - LITTLE */ /* Save 1 as word and load byte - 0 - BIG, 1 - LITTLE */
addik r11, r0, 0x1 /* BIG/LITTLE checking value */ lbui r11, r0, TOPHYS(endian_check)
/* __bss_start will be zeroed later - it is just temp location */
swi r11, r0, TOPHYS(__bss_start)
lbui r11, r0, TOPHYS(__bss_start)
beqid r11, big_endian /* DO NOT break delay stop dependency */ beqid r11, big_endian /* DO NOT break delay stop dependency */
lw r11, r0, r7 /* Big endian load in delay slot */ lw r11, r0, r7 /* Big endian load in delay slot */
lwr r11, r0, r7 /* Little endian load */ lwr r11, r0, r7 /* Little endian load */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册