2005-04-16 15:20:36 -07:00
/ * head- u c - f r45 1 . S : F R 4 5 1 u c - l i n u x s p e c i f i c b i t s o f i n i t i a l i s a t i o n
*
* Copyright ( C ) 2 0 0 4 R e d H a t , I n c . A l l R i g h t s R e s e r v e d .
* Written b y D a v i d H o w e l l s ( d h o w e l l s @redhat.com)
*
* 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 ; either version
* 2 of t h e L i c e n s e , o r ( a t y o u r o p t i o n ) a n y l a t e r v e r s i o n .
* /
2009-04-28 00:37:58 +01:00
# include < l i n u x / i n i t . h >
2005-04-16 15:20:36 -07:00
# include < l i n u x / t h r e a d s . h >
# include < l i n u x / l i n k a g e . h >
# include < a s m / p t r a c e . h >
# include < a s m / p a g e . h >
# include < a s m / s p r - r e g s . h >
# include < a s m / m b86 9 4 3 a . h >
# include " h e a d . i n c "
# define _ _ 4 0 0 _ D B R 0 0 x f e 0 0 0 e 0 0
# define _ _ 4 0 0 _ D B R 1 0 x f e 0 0 0 e 0 8
# define _ _ 4 0 0 _ D B R 2 0 x f e 0 0 0 e 1 0
# define _ _ 4 0 0 _ D B R 3 0 x f e 0 0 0 e 1 8
# define _ _ 4 0 0 _ D A M 0 0 x f e 0 0 0 f00
# define _ _ 4 0 0 _ D A M 1 0 x f e 0 0 0 f08
# define _ _ 4 0 0 _ D A M 2 0 x f e 0 0 0 f10
# define _ _ 4 0 0 _ D A M 3 0 x f e 0 0 0 f18
# define _ _ 4 0 0 _ L G C R 0 x f e 0 0 0 0 1 0
# define _ _ 4 0 0 _ L C R 0 x f e 0 0 0 1 0 0
# define _ _ 4 0 0 _ L S B R 0 x f e 0 0 0 c00
2009-04-28 00:37:58 +01:00
_ _ INIT
2005-04-16 15:20:36 -07:00
.balign 4
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# set t h e p r o t e c t i o n m a p w i t h t h e I / D A M P R r e g i s t e r s
#
# ENTRY : EXIT :
# GR2 5 S D R A M s i z e [ s a v e d ]
# GR2 6 & _ _ h e a d _ r e f e r e n c e [ s a v e d ]
# GR3 0 L E D a d d r e s s [ s a v e d ]
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
.globl __head_fr451_set_protection
__head_fr451_set_protection :
movsg l r ,g r27
movgs g r0 ,d a m p r10
movgs g r0 ,d a m l r10
movgs g r0 ,d a m p r9
movgs g r0 ,d a m l r9
movgs g r0 ,d a m p r8
movgs g r0 ,d a m l r8
# set t h e I / O r e g i o n p r o t e c t i o n r e g i s t e r s f o r F R 4 0 1 / 3 / 5
sethi. p % h i ( _ _ r e g i o n _ I O ) ,g r5
setlo % l o ( _ _ r e g i o n _ I O ) ,g r5
sethi. p % h i ( 0 x1 f f f f f f f ) ,g r7
setlo % l o ( 0 x1 f f f f f f f ) ,g r7
ori g r5 ,#x A M P R x _ S S _ 512 M b | x A M P R x _ S _ K E R N E L | x A M P R x _ C | x A M P R x _ V ,g r5
movgs g r5 ,d a m p r11 ; General I/O tile
movgs g r7 ,d a m l r11
# need t o t i l e t h e r e m a i n i n g I A M P R / D A M P R r e g i s t e r s t o c o v e r a s m u c h o f t h e R A M a s p o s s i b l e
# - start w i t h t h e h i g h e s t n u m b e r e d r e g i s t e r s
sethi. p % h i ( _ _ k e r n e l _ i m a g e _ e n d ) ,g r8
setlo % l o ( _ _ k e r n e l _ i m a g e _ e n d ) ,g r8
sethi. p % h i ( 3 2 7 6 8 ) ,g r4 ; allow for a maximal allocator bitmap
setlo % l o ( 3 2 7 6 8 ) ,g r4
add g r8 ,g r4 ,g r8
sethi. p % h i ( 1 0 2 4 * 2 0 4 8 - 1 ) ,g r4 ; round up to nearest 2MiB
setlo % l o ( 1 0 2 4 * 2 0 4 8 - 1 ) ,g r4
add. p g r8 ,g r4 ,g r8
not g r4 ,g r4
and g r8 ,g r4 ,g r8
sethi. p % h i ( _ _ p a g e _ o f f s e t ) ,g r9
setlo % l o ( _ _ p a g e _ o f f s e t ) ,g r9
add g r9 ,g r25 ,g r9
sethi. p % h i ( 0 x f f f f c00 0 ) ,g r11
setlo % l o ( 0 x f f f f c00 0 ) ,g r11
# GR8 = b a s e o f u n c o v e r e d R A M
# GR9 = t o p o f u n c o v e r e d R A M
# GR1 1 = x A M L R m a s k
LEDS 0 x33 1 7
call _ _ h e a d _ s p l i t _ r e g i o n
movgs g r4 ,i a m p r7
movgs g r6 ,i a m l r7
movgs g r5 ,d a m p r7
movgs g r7 ,d a m l r7
LEDS 0 x33 1 6
call _ _ h e a d _ s p l i t _ r e g i o n
movgs g r4 ,i a m p r6
movgs g r6 ,i a m l r6
movgs g r5 ,d a m p r6
movgs g r7 ,d a m l r6
LEDS 0 x33 1 5
call _ _ h e a d _ s p l i t _ r e g i o n
movgs g r4 ,i a m p r5
movgs g r6 ,i a m l r5
movgs g r5 ,d a m p r5
movgs g r7 ,d a m l r5
LEDS 0 x33 1 4
call _ _ h e a d _ s p l i t _ r e g i o n
movgs g r4 ,i a m p r4
movgs g r6 ,i a m l r4
movgs g r5 ,d a m p r4
movgs g r7 ,d a m l r4
LEDS 0 x33 1 3
call _ _ h e a d _ s p l i t _ r e g i o n
movgs g r4 ,i a m p r3
movgs g r6 ,i a m l r3
movgs g r5 ,d a m p r3
movgs g r7 ,d a m l r3
LEDS 0 x33 1 2
call _ _ h e a d _ s p l i t _ r e g i o n
movgs g r4 ,i a m p r2
movgs g r6 ,i a m l r2
movgs g r5 ,d a m p r2
movgs g r7 ,d a m l r2
LEDS 0 x33 1 1
call _ _ h e a d _ s p l i t _ r e g i o n
movgs g r4 ,i a m p r1
movgs g r6 ,i a m l r1
movgs g r5 ,d a m p r1
movgs g r7 ,d a m l r1
# cover k e r n e l c o r e i m a g e w i t h k e r n e l - o n l y s e g m e n t
LEDS 0 x33 1 0
sethi. p % h i ( _ _ p a g e _ o f f s e t ) ,g r8
setlo % l o ( _ _ p a g e _ o f f s e t ) ,g r8
call _ _ h e a d _ s p l i t _ r e g i o n
# ifdef C O N F I G _ P R O T E C T _ K E R N E L
ori. p g r4 ,#x A M P R x _ S _ K E R N E L , g r 4
ori g r5 ,#x A M P R x _ S _ K E R N E L , g r 5
# endif
movgs g r4 ,i a m p r0
movgs g r6 ,i a m l r0
movgs g r5 ,d a m p r0
movgs g r7 ,d a m l r0
# start i n T L B c o n t e x t 0 w i t h n o p a g e t a b l e s
movgs g r0 ,c x n r
movgs g r0 ,t t b r
# the F R 4 5 1 a l s o h a s a n e x t r a t r a p b a s e r e g i s t e r
movsg t b r ,g r4
movgs g r4 ,b t b r
# turn o n t h e t i m e r s a s a p p r o p r i a t e
movgs g r0 ,t i m e r h
movgs g r0 ,t i m e r l
movgs g r0 ,t i m e r d
movsg h s r0 ,g r4
sethi. p % h i ( H S R 0 _ E T M I ) ,g r5
setlo % l o ( H S R 0 _ E T M I ) ,g r5
or g r4 ,g r5 ,g r4
movgs g r4 ,h s r0
LEDS 0 x33 0 0
jmpl @(gr27,gr0)