2010-02-21 17:46:23 -08:00
# include < l i n u x / l i n k a g e . h >
# include < l i n u x / i n i t . h >
2012-08-16 17:31:50 +08:00
# include " s l e e p . h "
2012-02-10 01:47:45 +02:00
2010-02-21 17:46:23 -08:00
.section " .text .head " , " ax"
2013-01-04 17:32:22 +08:00
2010-02-21 17:46:23 -08:00
/ *
* Tegra s p e c i f i c 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 .
* The s e c o n d a r y k e r n e l i n i t c a l l s v7 _ f l u s h _ d c a c h e _ a l l b e f o r e i t e n a b l e s
* the L 1 ; however, the L1 comes out of reset in an undefined state, so
* the c l e a n + i n v a l i d a t e p e r f o r m e d b y v7 _ f l u s h _ d c a c h e _ a l l c a u s e s a b u n c h
* of c a c h e l i n e s w i t h u n i n i t i a l i z e d d a t a a n d u n i n i t i a l i z e d t a g s t o g e t
* written o u t t o m e m o r y , w h i c h d o e s r e a l l y u n p l e a s a n t t h i n g s t o t h e m a i n
* processor. W e f i x t h i s b y p e r f o r m i n g a n i n v a l i d a t e , r a t h e r t h a n a
* clean + i n v a l i d a t e , b e f o r e j u m p i n g i n t o t h e k e r n e l .
* /
ENTRY( v7 _ i n v a l i d a t e _ l 1 )
mov r0 , #0
mcr p15 , 2 , r0 , c0 , c0 , 0
mrc p15 , 1 , r0 , c0 , c0 , 0
ldr r1 , =0x7fff
and r2 , r1 , r0 , l s r #13
ldr r1 , =0x3ff
and r3 , r1 , r0 , l s r #3 @ NumWays - 1
add r2 , r2 , #1 @ NumSets
and r0 , r0 , #0x7
add r0 , r0 , #4 @ SetShift
clz r1 , r3 @ WayShift
add r4 , r3 , #1 @ NumWays
1 : sub r2 , r2 , #1 @ NumSets--
mov r3 , r4 @ Temp = NumWays
2 : subs r3 , r3 , #1 @ Temp--
mov r5 , r3 , l s l r1
mov r6 , r2 , l s l r0
orr r5 , r5 , r6 @ Reg = (Temp<<WayShift)|(NumSets<<SetShift)
mcr p15 , 0 , r5 , c7 , c6 , 2
bgt 2 b
cmp r2 , #0
bgt 1 b
dsb
isb
mov p c , l r
ENDPROC( v7 _ i n v a l i d a t e _ l 1 )
ENTRY( t e g r a _ s e c o n d a r y _ s t a r t u p )
bl v7 _ i n v a l i d a t e _ l 1
2012-02-10 01:47:45 +02:00
/* Enable coresight */
mov3 2 r0 , 0 x C 5 A C C E 5 5
mcr p14 , 0 , r0 , c7 , c12 , 6
2010-02-21 17:46:23 -08:00
b s e c o n d a r y _ s t a r t u p
ENDPROC( t e g r a _ s e c o n d a r y _ s t a r t u p )