2010-05-28 23:09:12 -04:00
/ *
* Copyright 2 0 1 0 T i l e r a C o r p o r a t i o n . A l l R i g h t s R e s e r v e d .
*
* This p r o g r a m i s f r e e s o f t w a r e ; you can redistribute it and/or
* modify i t u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e
* as p u b l i s h e d b y t h e F r e e S o f t w a r e F o u n d a t i o n , v e r s i o n 2 .
*
* This p r o g r a m i s d i s t r i b u t e d i n t h e h o p e t h a t i t w i l l b e u s e f u l , b u t
* WITHOUT A N Y W A R R A N T Y ; without even the implied warranty of
* MERCHANTABILITY O R F I T N E S S F O R A P A R T I C U L A R P U R P O S E , G O O D T I T L E o r
* NON I N F R I N G E M E N T . S e e t h e G N U G e n e r a l P u b l i c L i c e n s e f o r
* more d e t a i l s .
* /
# include < l i n u x / l i n k a g e . h >
2010-06-25 17:04:17 -04:00
# include < l i n u x / u n i s t d . h >
2010-05-28 23:09:12 -04:00
# include < a s m / i r q f l a g s . h >
2010-10-14 16:23:03 -04:00
# include < a s m / p r o c e s s o r . h >
2010-06-25 17:04:17 -04:00
# include < a r c h / a b i . h >
2010-10-14 16:23:03 -04:00
# include < a r c h / s p r _ d e f . h >
2010-05-28 23:09:12 -04:00
# ifdef _ _ t i l e g x _ _
# define b n z t b n e z t
# endif
STD_ E N T R Y ( c u r r e n t _ t e x t _ a d d r )
{ move r0 , l r ; jrp lr }
STD_ E N D P R O C ( c u r r e n t _ t e x t _ a d d r )
STD_ E N T R Y ( K B a c k t r a c e I t e r a t o r _ i n i t _ c u r r e n t )
{ move r2 , l r ; lnk r1 }
{ move r4 , r52 ; addli r1, r1, KBacktraceIterator_init_current - . }
{ move r3 , s p ; j _KBacktraceIterator_init_current }
jrp l r / * k e e p b a c k t r a c e r h a p p y * /
STD_ E N D P R O C ( K B a c k t r a c e I t e r a t o r _ i n i t _ c u r r e n t )
/* Loop forever on a nap during SMP boot. */
STD_ E N T R Y ( s m p _ n a p )
nap
2012-03-29 15:57:18 -04:00
nop / * a v o i d p r o v o k i n g t h e i c a c h e p r e f e t c h w i t h a j u m p * /
2010-05-28 23:09:12 -04:00
j s m p _ n a p / * w e a r e n o t a r c h i t e c t u r a l l y g u a r a n t e e d n o t t o e x i t n a p * /
jrp l r / * c l u e i n t h e b a c k t r a c e r * /
STD_ E N D P R O C ( s m p _ n a p )
/ *
* Enable i n t e r r u p t s r a c e l e s s l y a n d t h e n n a p u n t i l i n t e r r u p t e d .
2011-02-28 15:22:40 -05:00
* Architecturally, w e a r e g u a r a n t e e d t h a t e n a b l i n g i n t e r r u p t s v i a
* mtspr t o I N T E R R U P T _ C R I T I C A L _ S E C T I O N o n l y i n t e r r u p t s a t t h e n e x t P C .
2010-05-28 23:09:12 -04:00
* This f u n c t i o n ' s _ c p u _ i d l e _ n a p a d d r e s s i s s p e c i a l ; see intvec.S.
* When i n t e r r u p t e d a t _ c p u _ i d l e _ n a p , w e b u m p t h e P C f o r w a r d 8 , a n d
* as a r e s u l t r e t u r n t o t h e f u n c t i o n t h a t c a l l e d _ c p u _ i d l e ( ) .
* /
STD_ E N T R Y ( _ c p u _ i d l e )
2011-02-28 15:22:40 -05:00
movei r1 , 1
2012-03-27 15:40:20 -04:00
IRQ_ E N A B L E _ L O A D ( r2 , r3 )
2011-02-28 15:22:40 -05:00
mtspr I N T E R R U P T _ C R I T I C A L _ S E C T I O N , r1
2012-03-27 15:40:20 -04:00
IRQ_ E N A B L E _ A P P L Y ( r2 , r3 ) / * u n m a s k , b u t s t i l l w i t h I C S s e t * /
2011-02-28 15:22:40 -05:00
mtspr I N T E R R U P T _ C R I T I C A L _ S E C T I O N , z e r o
2010-05-28 23:09:12 -04:00
.global _cpu_idle_nap
_cpu_idle_nap :
nap
2012-03-29 15:57:18 -04:00
nop / * a v o i d p r o v o k i n g t h e i c a c h e p r e f e t c h w i t h a j u m p * /
2010-05-28 23:09:12 -04:00
jrp l r
STD_ E N D P R O C ( _ c p u _ i d l e )