@ -63,12 +63,56 @@ ENTRY(stext)
movs r10 , r5 @ invalid processor (r5=0)?
beq _ _ e r r o r _ p @ yes, error 'p'
adr l r , B S Y M ( _ _ a f t e r _ p r o c _ i n i t ) @ return (PIC) address
ldr r13 , =__mmap_switched @ address to jump to after
@ initialising sctlr
adr l r , B S Y M ( 1 f ) @ return (PIC) address
ARM( a d d p c , r10 , #P R O C I N F O _ I N I T F U N C )
THUMB( a d d r12 , r10 , #P R O C I N F O _ I N I T F U N C )
THUMB( m o v p c , r12 )
1 : b _ _ a f t e r _ p r o c _ i n i t
ENDPROC( s t e x t )
# ifdef C O N F I G _ S M P
_ _ CPUINIT
ENTRY( s e c o n d a r y _ s t a r t u p )
/ *
* Common e n t r y p o i n t f o r s e c o n d a r y C P U s .
*
* Ensure t h a t w e ' r e i n S V C m o d e , a n d I R Q s a r e d i s a b l e d . L o o k u p
* the p r o c e s s o r t y p e - t h e r e i s n o n e e d t o c h e c k t h e m a c h i n e t y p e
* as i t h a s a l r e a d y b e e n v a l i d a t e d b y t h e p r i m a r y p r o c e s s o r .
* /
setmode P S R _ F _ B I T | P S R _ I _ B I T | S V C _ M O D E , r9
# ifndef C O N F I G _ C P U _ C P 1 5
ldr r9 , =CONFIG_PROCESSOR_ID
# else
mrc p15 , 0 , r9 , c0 , c0 @ get processor id
# endif
bl _ _ l o o k u p _ p r o c e s s o r _ t y p e @ r5=procinfo r9=cpuid
movs r10 , r5 @ invalid processor?
beq _ _ e r r o r _ p @ yes, error 'p'
adr r4 , _ _ s e c o n d a r y _ d a t a
ldmia r4 , { r7 , r12 }
adr l r , B S Y M ( _ _ a f t e r _ p r o c _ i n i t ) @ return address
mov r13 , r12 @ __secondary_switched address
ARM( a d d p c , r10 , #P R O C I N F O _ I N I T F U N C )
THUMB( a d d r12 , r10 , #P R O C I N F O _ I N I T F U N C )
THUMB( m o v p c , r12 )
ENDPROC( s e c o n d a r y _ s t a r t u p )
ENTRY( _ _ s e c o n d a r y _ s w i t c h e d )
ldr s p , [ r7 , #8 ] @ set up the stack pointer
mov f p , #0
b s e c o n d a r y _ s t a r t _ k e r n e l
ENDPROC( _ _ s e c o n d a r y _ s w i t c h e d )
.type _ _ secondary_ d a t a , % o b j e c t
__secondary_data :
.long secondary_data
.long __secondary_switched
# endif / * C O N F I G _ S M P * /
/ *
* Set t h e C o n t r o l R e g i s t e r a n d R e a d t h e p r o c e s s I D .
* /
@ -99,9 +143,7 @@ __after_proc_init:
# endif
mcr p15 , 0 , r0 , c1 , c0 , 0 @ write control reg
# endif / * C O N F I G _ C P U _ C P 1 5 * /
b _ _ m m a p _ s w i t c h e d @ clear the BSS and jump
@ to start_kernel
mov p c , r13
ENDPROC( _ _ a f t e r _ p r o c _ i n i t )
.ltorg