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>
This commit is contained in:
Родитель
6011497751
Коммит
495162dfef
|
@ -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:
|
||||||
|
|
||||||
#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:
|
||||||
/* 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 */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче