📄 startup.s
字号:
;++
; Copyright (c) David Vescovi. All rights reserved.
; Part of Project DrumStix
; Windows Embedded Developers Interest Group (WE-DIG) community project.
; http://www.we-dig.org
; Copyright (c) Microsoft Corporation. All rights reserved.
;
; Abstract:
;
; Board-level initialization for OEM-specific code.
; Kernel flavor.
;
;--
OPT 2 ; disable listing
INCLUDE kxarm.h
OPT 1 ; reenable listing
IMPORT KernelStart
TEXTAREA
;------------------------------------------------------------------------
; Included within the text section in order that a relative offset can be
; computed in the code below.
;
OPT 2 ; disable listing
INCLUDE oemaddrtab_cfg.inc
OPT 1 ; reenable listing
;-------------------------------------------------------------------------------
;
; OALStartUp: OEM kernel OAL startup code.
;
; Inputs: None.
;
; On return: N/A.
;
; Register used: r0
;
;-------------------------------------------------------------------------------
;
ALIGN
LEAF_ENTRY OALStartUp
; Compute the OEMAddressTable's physical address and
; load it into r0. KernelStart expects r0 to contain
; the physical address of this table. The MMU isn't
; turned on until well into KernelStart.
;
add r0, pc, #g_oalAddressTable - (. + 8)
mov r11, r0
b KernelStart
nop
nop
nop
nop
nop
nop
STALL
b STALL ; Spin forever.
;-------------------------------------------------------------------------------
LTORG
;-------------------------------------------------------------------------------
;
; TurnOnBTB - Enables the Branch Target Buffer
; Turn on the BTB via cp15.1[11] - Uses r0
;
LEAF_ENTRY TurnOnBTB
mcr p15, 0, r0, c7, c5, 0 ; flush the icache & BTB
mrc p15,0,r0,c1,c0,0
orr r0, r0, #0x800
mcr p15,0,r0,c1,c0,0
mov pc, lr ; return
;------------------------------------------------------------------------------
LTORG
;-------------------------------------------------------------------------------
;
; FreqChange - Do a Frequency Change Sequence
;
; Uses
; r0 - arg1 - Value for Turbo Mode
; 0 = no turbo
; 1 = turbo
;
LEAF_ENTRY FreqChange
stmfd sp!, {r1-r3}
cmp r0, #1
bgt FreqRet
orr r0, r0, #2 ; set FCS=1
mcr p14, 0, r0, c6, c0, 0 ; do Freq Change
FreqRet
ldmfd sp!, {r1-r3}
mov pc, lr ; return
;------------------------------------------------------------------------------
LTORG
;-------------------------------------------------------------------------------
;
; OALCPUIdle - system idle
;
; This routine is called by OEMIdle in order to enter IDLE mode
;
; Entry Interrupts disabled
; Exit none
; Uses r0
;
LEAF_ENTRY OALCPUIdle
ldr r0, =0x01 ; 1 = Idle Mode
mcr p14, 0, r0, c7, c0, 0 ; Enter Idle mode
mov pc, lr ; return
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -