2005-04-17 02:20:36 +04:00
/ *
* linux/ a r c h / a r m / m m / p r o c - x s c a l e . S
*
* Author : Nicolas P i t r e
* Created : November 2 0 0 0
* Copyright : ( C) 2 0 0 0 , 2 0 0 1 M o n t a V i s t a S o f t w a r e I n c .
*
* 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
* it 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 v e r s i o n 2 a s
* published 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 .
*
* MMU f u n c t i o n s f o r t h e I n t e l X S c a l e C P U s
*
* 2 0 0 1 Aug 2 1 :
* some c o n t r i b u t i o n s b y B r e t t G a i n e s < b r e t t . w . g a i n e s @intel.com>
* Copyright 2 0 0 1 b y I n t e l C o r p .
*
* 2 0 0 1 Sep 0 8 :
* Completely r e v i s i t e d , m a n y i m p o r t a n t f i x e s
* Nicolas P i t r e < n i c o @cam.org>
* /
# 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 >
# include < a s m / a s s e m b l e r . h >
# include < a s m / p r o c i n f o . h >
# include < a s m / h a r d w a r e . h >
# include < a s m / p g t a b l e . h >
# include < a s m / p a g e . h >
# include < a s m / p t r a c e . h >
# include " p r o c - m a c r o s . S "
/ *
* This i s t h e m a x i m u m s i z e o f a n a r e a w h i c h w i l l b e f l u s h e d . I f t h e a r e a
* is l a r g e r t h a n t h i s , t h e n w e f l u s h t h e w h o l e c a c h e
* /
# define M A X _ A R E A _ S I Z E 3 2 7 6 8
/ *
* the c a c h e l i n e s i z e o f t h e I a n d D c a c h e
* /
# define C A C H E L I N E S I Z E 3 2
/ *
* the s i z e o f t h e d a t a c a c h e
* /
# define C A C H E S I Z E 3 2 7 6 8
/ *
* Virtual a d d r e s s u s e d t o a l l o c a t e t h e c a c h e w h e n f l u s h e d
*
* This m u s t b e a n a d d r e s s r a n g e w h i c h i s _ n e v e r _ u s e d . I t s h o u l d
* apparently h a v e a m a p p i n g i n t h e c o r r e s p o n d i n g p a g e t a b l e f o r
* compatibility w i t h f u t u r e C P U s t h a t _ c o u l d _ r e q u i r e i t . F o r i n s t a n c e w e
* don' t c a r e .
*
* This m u s t b e a l i g n e d o n a 2 * C A C H E S I Z E b o u n d a r y . T h e c o d e s e l e c t s o n e o f
* the 2 a r e a s i n a l t e r n a n c e e a c h t i m e t h e c l e a n _ d _ c a c h e m a c r o i s u s e d .
* Without t h i s t h e X S c a l e c o r e e x h i b i t s c a c h e e v i c t i o n p r o b l e m s a n d n o o n e
* knows w h y .
*
* Reminder : the v e c t o r t a b l e i s l o c a t e d a t 0 x f f f f00 0 0 - 0 x f f f f0 f f f .
* /
# define C L E A N _ A D D R 0 x f f f e 0 0 0 0
/ *
* This m a c r o i s u s e d t o w a i t f o r a C P 1 5 w r i t e a n d i s n e e d e d
* when w e h a v e t o e n s u r e t h a t t h e l a s t o p e r a t i o n t o t h e c o - p r o
* was c o m p l e t e d b e f o r e c o n t i n u i n g w i t h o p e r a t i o n .
* /
.macro cpwait, r d
mrc p15 , 0 , \ r d , c2 , c0 , 0 @ arbitrary read of cp15
mov \ r d , \ r d @ wait for completion
sub p c , p c , #4 @ flush instruction pipeline
.endm
.macro cpwait_ r e t , l r , r d
mrc p15 , 0 , \ r d , c2 , c0 , 0 @ arbitrary read of cp15
sub p c , \ l r , \ r d , L S R #32 @ wait for completion and
@ flush instruction pipeline
.endm
/ *
* This m a c r o c l e a n s t h e e n t i r e d c a c h e u s i n g l i n e a l l o c a t e .
* The m a i n l o o p h a s b e e n u n r o l l e d t o r e d u c e l o o p o v e r h e a d .
* rd a n d r s a r e t w o s c r a t c h r e g i s t e r s .
* /
.macro clean_ d _ c a c h e , r d , r s
ldr \ r s , =clean_addr
ldr \ r d , [ \ r s ]
eor \ r d , \ r d , #C A C H E S I Z E
str \ r d , [ \ r s ]
add \ r s , \ r d , #C A C H E S I Z E
1 : mcr p15 , 0 , \ r d , c7 , c2 , 5 @ allocate D cache line
add \ r d , \ r d , #C A C H E L I N E S I Z E
mcr p15 , 0 , \ r d , c7 , c2 , 5 @ allocate D cache line
add \ r d , \ r d , #C A C H E L I N E S I Z E
mcr p15 , 0 , \ r d , c7 , c2 , 5 @ allocate D cache line
add \ r d , \ r d , #C A C H E L I N E S I Z E
mcr p15 , 0 , \ r d , c7 , c2 , 5 @ allocate D cache line
add \ r d , \ r d , #C A C H E L I N E S I Z E
teq \ r d , \ r s
bne 1 b
.endm
.data
clean_addr : .word C L E A N _ A D D R
.text
/ *
* cpu_ x s c a l e _ p r o c _ i n i t ( )
*
* Nothing t o o e x c i t i n g a t t h e m o m e n t
* /
ENTRY( c p u _ x s c a l e _ p r o c _ i n i t )
mov p c , l r
/ *
* cpu_ x s c a l e _ p r o c _ f i n ( )
* /
ENTRY( c p u _ x s c a l e _ p r o c _ f i n )
str l r , [ s p , #- 4 ] !
mov r0 , #P S R _ F _ B I T | P S R _ I _ B I T | S V C _ M O D E
msr c p s r _ c , r0
bl x s c a l e _ f l u s h _ k e r n _ c a c h e _ a l l @ clean caches
mrc p15 , 0 , r0 , c1 , c0 , 0 @ ctrl register
bic r0 , r0 , #0x1800 @ ...IZ...........
bic r0 , r0 , #0x0006 @ .............CA.
mcr p15 , 0 , r0 , c1 , c0 , 0 @ disable caches
ldr p c , [ s p ] , #4
/ *
* cpu_ x s c a l e _ r e s e t ( l o c )
*
* Perform a s o f t r e s e t o f t h e s y s t e m . P u t t h e C P U i n t o t h e
* same s t a t e a s i t w o u l d b e i f i t h a d b e e n r e s e t , a n d b r a n c h
* to w h a t w o u l d b e t h e r e s e t v e c t o r .
*
* loc : location t o j u m p t o f o r s o f t r e s e t
* /
.align 5
ENTRY( c p u _ x s c a l e _ r e s e t )
mov r1 , #P S R _ F _ B I T | P S R _ I _ B I T | S V C _ M O D E
msr c p s r _ c , r1 @ reset CPSR
mrc p15 , 0 , r1 , c1 , c0 , 0 @ ctrl register
bic r1 , r1 , #0x0086 @ ........B....CA.
bic r1 , r1 , #0x3900 @ ..VIZ..S........
mcr p15 , 0 , r1 , c1 , c0 , 0 @ ctrl register
mcr p15 , 0 , i p , c7 , c7 , 0 @ invalidate I,D caches & BTB
bic r1 , r1 , #0x0001 @ ...............M
mcr p15 , 0 , r1 , c1 , c0 , 0 @ ctrl register
@ CAUTION: MMU turned off from this point. We count on the pipeline
@ already containing those two last instructions to survive.
mcr p15 , 0 , i p , c8 , c7 , 0 @ invalidate I & D TLBs
mov p c , r0
/ *
* cpu_ x s c a l e _ d o _ i d l e ( )
*
* Cause t h e p r o c e s s o r t o i d l e
*
* For n o w w e d o n o t h i n g b u t g o t o i d l e m o d e f o r e v e r y c a s e
*
* XScale s u p p o r t s c l o c k s w i t c h i n g , b u t u s i n g i d l e m o d e s u p p o r t
* allows e x t e r n a l h a r d w a r e t o r e a c t t o s y s t e m s t a t e c h a n g e s .
* /
.align 5
ENTRY( c p u _ x s c a l e _ d o _ i d l e )
mov r0 , #1
mcr p14 , 0 , r0 , c7 , c0 , 0 @ Go to IDLE
mov p c , l r
/* ================================= CACHE ================================ */
/ *
* flush_ u s e r _ c a c h e _ a l l ( )
*
* Invalidate a l l c a c h e e n t r i e s i n a p a r t i c u l a r a d d r e s s
* space.
* /
ENTRY( x s c a l e _ f l u s h _ u s e r _ c a c h e _ a l l )
/* FALLTHROUGH */
/ *
* flush_ k e r n _ c a c h e _ a l l ( )
*
* Clean a n d i n v a l i d a t e t h e e n t i r e c a c h e .
* /
ENTRY( x s c a l e _ f l u s h _ k e r n _ c a c h e _ a l l )
mov r2 , #V M _ E X E C
mov i p , #0
__flush_whole_cache :
clean_ d _ c a c h e r0 , r1
tst r2 , #V M _ E X E C
mcrne p15 , 0 , i p , c7 , c5 , 0 @ Invalidate I cache & BTB
mcrne p15 , 0 , i p , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
/ *
* flush_ u s e r _ c a c h e _ r a n g e ( s t a r t , e n d , v m _ f l a g s )
*
* Invalidate a r a n g e o f c a c h e e n t r i e s i n t h e s p e c i f i e d
* address s p a c e .
*
* - start - s t a r t a d d r e s s ( m a y n o t b e a l i g n e d )
* - end - e n d a d d r e s s ( e x c l u s i v e , m a y n o t b e a l i g n e d )
* - vma - v m a _ a r e a _ s t r u c t d e s c r i b i n g a d d r e s s s p a c e
* /
.align 5
ENTRY( x s c a l e _ f l u s h _ u s e r _ c a c h e _ r a n g e )
mov i p , #0
sub r3 , r1 , r0 @ calculate total size
cmp r3 , #M A X _ A R E A _ S I Z E
bhs _ _ f l u s h _ w h o l e _ c a c h e
1 : tst r2 , #V M _ E X E C
mcrne p15 , 0 , r0 , c7 , c5 , 1 @ Invalidate I cache line
mcr p15 , 0 , r0 , c7 , c10 , 1 @ Clean D cache line
mcr p15 , 0 , r0 , c7 , c6 , 1 @ Invalidate D cache line
add r0 , r0 , #C A C H E L I N E S I Z E
cmp r0 , r1
blo 1 b
tst r2 , #V M _ E X E C
mcrne p15 , 0 , i p , c7 , c5 , 6 @ Invalidate BTB
mcrne p15 , 0 , i p , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
/ *
* coherent_ k e r n _ r a n g e ( s t a r t , e n d )
*
* Ensure c o h e r e n c y b e t w e e n t h e I c a c h e a n d t h e D c a c h e i n t h e
* region d e s c r i b e d b y s t a r t . I f y o u h a v e n o n - s n o o p i n g
* Harvard c a c h e s , y o u n e e d t o i m p l e m e n t t h i s f u n c t i o n .
*
* - start - v i r t u a l s t a r t a d d r e s s
* - end - v i r t u a l e n d a d d r e s s
*
* Note : single I - c a c h e l i n e i n v a l i d a t i o n i s n ' t u s e d h e r e s i n c e
* it a l s o t r a s h e s t h e m i n i I - c a c h e u s e d b y J T A G d e b u g g e r s .
* /
ENTRY( x s c a l e _ c o h e r e n t _ k e r n _ r a n g e )
/* FALLTHROUGH */
/ *
* coherent_ u s e r _ r a n g e ( s t a r t , e n d )
*
* Ensure c o h e r e n c y b e t w e e n t h e I c a c h e a n d t h e D c a c h e i n t h e
* region d e s c r i b e d b y s t a r t . I f y o u h a v e n o n - s n o o p i n g
* Harvard c a c h e s , y o u n e e d t o i m p l e m e n t t h i s f u n c t i o n .
*
* - start - v i r t u a l s t a r t a d d r e s s
* - end - v i r t u a l e n d a d d r e s s
*
* Note : single I - c a c h e l i n e i n v a l i d a t i o n i s n ' t u s e d h e r e s i n c e
* it a l s o t r a s h e s t h e m i n i I - c a c h e u s e d b y J T A G d e b u g g e r s .
* /
ENTRY( x s c a l e _ c o h e r e n t _ u s e r _ r a n g e )
bic r0 , r0 , #C A C H E L I N E S I Z E - 1
1 : mcr p15 , 0 , r0 , c7 , c10 , 1 @ clean D entry
add r0 , r0 , #C A C H E L I N E S I Z E
cmp r0 , r1
blo 1 b
mov r0 , #0
mcr p15 , 0 , r0 , c7 , c5 , 0 @ Invalidate I cache & BTB
mcr p15 , 0 , r0 , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
/ *
* flush_ k e r n _ d c a c h e _ p a g e ( v o i d * p a g e )
*
* Ensure n o D c a c h e a l i a s i n g o c c u r s , e i t h e r w i t h i t s e l f o r
* the I c a c h e
*
* - addr - p a g e a l i g n e d a d d r e s s
* /
ENTRY( x s c a l e _ f l u s h _ k e r n _ d c a c h e _ p a g e )
add r1 , r0 , #P A G E _ S Z
1 : mcr p15 , 0 , r0 , c7 , c10 , 1 @ clean D entry
mcr p15 , 0 , r0 , c7 , c6 , 1 @ invalidate D entry
add r0 , r0 , #C A C H E L I N E S I Z E
cmp r0 , r1
blo 1 b
mov r0 , #0
mcr p15 , 0 , r0 , c7 , c5 , 0 @ Invalidate I cache & BTB
mcr p15 , 0 , r0 , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
/ *
* dma_ i n v _ r a n g e ( s t a r t , e n d )
*
* Invalidate ( d i s c a r d ) t h e s p e c i f i e d v i r t u a l a d d r e s s r a n g e .
* May n o t w r i t e b a c k a n y e n t r i e s . I f ' s t a r t ' o r ' e n d '
* are n o t c a c h e l i n e a l i g n e d , t h o s e l i n e s m u s t b e w r i t t e n
* back.
*
* - start - v i r t u a l s t a r t a d d r e s s
* - end - v i r t u a l e n d a d d r e s s
* /
ENTRY( x s c a l e _ d m a _ i n v _ r a n g e )
mrc p15 , 0 , r2 , c0 , c0 , 0 @ read ID
eor r2 , r2 , #0x69000000
eor r2 , r2 , #0x00052000
bics r2 , r2 , #1
beq x s c a l e _ d m a _ f l u s h _ r a n g e
tst r0 , #C A C H E L I N E S I Z E - 1
bic r0 , r0 , #C A C H E L I N E S I Z E - 1
mcrne p15 , 0 , r0 , c7 , c10 , 1 @ clean D entry
tst r1 , #C A C H E L I N E S I Z E - 1
mcrne p15 , 0 , r1 , c7 , c10 , 1 @ clean D entry
1 : mcr p15 , 0 , r0 , c7 , c6 , 1 @ invalidate D entry
add r0 , r0 , #C A C H E L I N E S I Z E
cmp r0 , r1
blo 1 b
mcr p15 , 0 , r0 , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
/ *
* dma_ c l e a n _ r a n g e ( s t a r t , e n d )
*
* Clean t h e s p e c i f i e d v i r t u a l a d d r e s s r a n g e .
*
* - start - v i r t u a l s t a r t a d d r e s s
* - end - v i r t u a l e n d a d d r e s s
* /
ENTRY( x s c a l e _ d m a _ c l e a n _ r a n g e )
bic r0 , r0 , #C A C H E L I N E S I Z E - 1
1 : mcr p15 , 0 , r0 , c7 , c10 , 1 @ clean D entry
add r0 , r0 , #C A C H E L I N E S I Z E
cmp r0 , r1
blo 1 b
mcr p15 , 0 , r0 , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
/ *
* dma_ f l u s h _ r a n g e ( s t a r t , e n d )
*
* Clean a n d i n v a l i d a t e t h e s p e c i f i e d v i r t u a l a d d r e s s r a n g e .
*
* - start - v i r t u a l s t a r t a d d r e s s
* - end - v i r t u a l e n d a d d r e s s
* /
ENTRY( x s c a l e _ d m a _ f l u s h _ r a n g e )
bic r0 , r0 , #C A C H E L I N E S I Z E - 1
1 : mcr p15 , 0 , r0 , c7 , c10 , 1 @ clean D entry
mcr p15 , 0 , r0 , c7 , c6 , 1 @ invalidate D entry
add r0 , r0 , #C A C H E L I N E S I Z E
cmp r0 , r1
blo 1 b
mcr p15 , 0 , r0 , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
ENTRY( x s c a l e _ c a c h e _ f n s )
.long xscale_flush_kern_cache_all
.long xscale_flush_user_cache_all
.long xscale_flush_user_cache_range
.long xscale_coherent_kern_range
.long xscale_coherent_user_range
.long xscale_flush_kern_dcache_page
.long xscale_dma_inv_range
.long xscale_dma_clean_range
.long xscale_dma_flush_range
ENTRY( c p u _ x s c a l e _ d c a c h e _ c l e a n _ a r e a )
1 : mcr p15 , 0 , r0 , c7 , c10 , 1 @ clean D entry
add r0 , r0 , #C A C H E L I N E S I Z E
subs r1 , r1 , #C A C H E L I N E S I Z E
bhi 1 b
mov p c , l r
/* =============================== PageTable ============================== */
# define P T E _ C A C H E _ W R I T E _ A L L O C A T E 0
/ *
* cpu_ x s c a l e _ s w i t c h _ m m ( p g d )
*
* Set t h e t r a n s l a t i o n b a s e p o i n t e r t o b e a s d e s c r i b e d b y p g d .
*
* pgd : new p a g e t a b l e s
* /
.align 5
ENTRY( c p u _ x s c a l e _ s w i t c h _ m m )
clean_ d _ c a c h e r1 , r2
mcr p15 , 0 , i p , c7 , c5 , 0 @ Invalidate I cache & BTB
mcr p15 , 0 , i p , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mcr p15 , 0 , r0 , c2 , c0 , 0 @ load page table pointer
mcr p15 , 0 , i p , c8 , c7 , 0 @ invalidate I & D TLBs
cpwait_ r e t l r , i p
/ *
* cpu_ x s c a l e _ s e t _ p t e ( p t e p , p t e )
*
* Set a P T E a n d f l u s h i t o u t
*
* Errata 4 0 : m u s t s e t m e m o r y t o w r i t e - t h r o u g h f o r u s e r r e a d - o n l y p a g e s .
* /
.align 5
ENTRY( c p u _ x s c a l e _ s e t _ p t e )
str r1 , [ r0 ] , #- 2048 @ linux version
bic r2 , r1 , #0xff0
orr r2 , r2 , #P T E _ T Y P E _ E X T @ e x t e n d e d p a g e
eor r3 , r1 , #L _ P T E _ P R E S E N T | L _ P T E _ Y O U N G | L _ P T E _ W R I T E | L _ P T E _ D I R T Y
tst r3 , #L _ P T E _ U S E R @ U s e r ?
orrne r2 , r2 , #P T E _ E X T _ A P _ U R O _ S R W @ y e s - > u s e r r / o , s y s t e m r / w
tst r3 , #L _ P T E _ W R I T E | L _ P T E _ D I R T Y @ W r i t e a n d D i r t y ?
orreq r2 , r2 , #P T E _ E X T _ A P _ U N O _ S R W @ y e s - > u s e r n / a , s y s t e m r / w
@ combined with user -> user r/w
@
@ Handle the X bit. We want to set this bit for the minicache
@ (U = E = B = W = 0, C = 1) or when write allocate is enabled,
@ and we have a writeable, cacheable region. If we ignore the
@ U and E bits, we can allow user space to use the minicache as
@ well.
@
@ X = (C & ~W & ~B) | (C & W & B & write_allocate)
@
eor i p , r1 , #L _ P T E _ C A C H E A B L E
tst i p , #L _ P T E _ C A C H E A B L E | L _ P T E _ W R I T E | L _ P T E _ B U F F E R A B L E
# if P T E _ C A C H E _ W R I T E _ A L L O C A T E
eorne i p , r1 , #L _ P T E _ C A C H E A B L E | L _ P T E _ W R I T E | L _ P T E _ B U F F E R A B L E
tstne i p , #L _ P T E _ C A C H E A B L E | L _ P T E _ W R I T E | L _ P T E _ B U F F E R A B L E
# endif
orreq r2 , r2 , #P T E _ E X T _ T E X ( 1 )
@
@ Erratum 40: The B bit must be cleared for a user read-only
@ cacheable page.
@
@ B = B & ~(U & C & ~W)
@
and i p , r1 , #L _ P T E _ U S E R | L _ P T E _ W R I T E | L _ P T E _ C A C H E A B L E
teq i p , #L _ P T E _ U S E R | L _ P T E _ C A C H E A B L E
biceq r2 , r2 , #P T E _ B U F F E R A B L E
tst r3 , #L _ P T E _ P R E S E N T | L _ P T E _ Y O U N G @ P r e s e n t a n d Y o u n g ?
movne r2 , #0 @ no -> fault
str r2 , [ r0 ] @ hardware version
mov i p , #0
mcr p15 , 0 , r0 , c7 , c10 , 1 @ Clean D cache line
mcr p15 , 0 , i p , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mov p c , l r
.ltorg
.align
_ _ INIT
.type _ _ xscale_ s e t u p , #f u n c t i o n
__xscale_setup :
mcr p15 , 0 , i p , c7 , c7 , 0 @ invalidate I, D caches & BTB
mcr p15 , 0 , i p , c7 , c10 , 4 @ Drain Write (& Fill) Buffer
mcr p15 , 0 , i p , c8 , c7 , 0 @ invalidate I, D TLBs
# ifdef C O N F I G _ I W M M X T
mov r0 , #0 @ initially disallow access to CP0/CP1
# else
mov r0 , #1 @ Allow access to CP0
# endif
orr r0 , r0 , #1 < < 6 @ cp6 for IOP3xx and Bulverde
orr r0 , r0 , #1 < < 1 3 @ Its undefined whether this
mcr p15 , 0 , r0 , c15 , c1 , 0 @ affects USR or SVC modes
mrc p15 , 0 , r0 , c1 , c0 , 0 @ get control register
ldr r5 , x s c a l e _ c r1 _ c l e a r
bic r0 , r0 , r5
ldr r5 , x s c a l e _ c r1 _ s e t
orr r0 , r0 , r5
mov p c , l r
.size _ _ xscale_ s e t u p , . - _ _ x s c a l e _ s e t u p
/ *
* R
* .RVI ZFRS BLDP W C A M
* . .11 1 .01 . . . . .101
*
* /
.type xscale_ c r1 _ c l e a r , #o b j e c t
.type xscale_ c r1 _ s e t , #o b j e c t
xscale_cr1_clear :
.word 0x3b07
xscale_cr1_set :
.word 0x3905
_ _ INITDATA
/ *
* Purpose : F u n c t i o n p o i n t e r s u s e d t o a c c e s s a b o v e f u n c t i o n s - a l l c a l l s
* come t h r o u g h t h e s e
* /
.type xscale_ p r o c e s s o r _ f u n c t i o n s , #o b j e c t
ENTRY( x s c a l e _ p r o c e s s o r _ f u n c t i o n s )
.word v5t_early_abort
.word cpu_xscale_proc_init
.word cpu_xscale_proc_fin
.word cpu_xscale_reset
.word cpu_xscale_do_idle
.word cpu_xscale_dcache_clean_area
.word cpu_xscale_switch_mm
.word cpu_xscale_set_pte
.size xscale_ p r o c e s s o r _ f u n c t i o n s , . - x s c a l e _ p r o c e s s o r _ f u n c t i o n s
.section " .rodata "
.type cpu_ a r c h _ n a m e , #o b j e c t
cpu_arch_name :
.asciz " armv5 t e "
.size cpu_ a r c h _ n a m e , . - c p u _ a r c h _ n a m e
.type cpu_ e l f _ n a m e , #o b j e c t
cpu_elf_name :
.asciz " v5 "
.size cpu_ e l f _ n a m e , . - c p u _ e l f _ n a m e
.type cpu_ 8 0 2 0 0 _ n a m e , #o b j e c t
cpu_80200_name :
.asciz " XScale- 8 0 2 0 0 "
.size cpu_ 8 0 2 0 0 _ n a m e , . - c p u _ 8 0 2 0 0 _ n a m e
.type cpu_ 8 0 3 2 x _ n a m e , #o b j e c t
cpu_8032x_name :
.asciz " XScale- I O P 8 0 3 2 x F a m i l y "
.size cpu_ 8 0 3 2 x _ n a m e , . - c p u _ 8 0 3 2 x _ n a m e
.type cpu_ 8 0 3 3 x _ n a m e , #o b j e c t
cpu_8033x_name :
.asciz " XScale- I O P 8 0 3 3 x F a m i l y "
.size cpu_ 8 0 3 3 x _ n a m e , . - c p u _ 8 0 3 3 x _ n a m e
.type cpu_ p x a25 0 _ n a m e , #o b j e c t
cpu_pxa250_name :
.asciz " XScale- P X A 2 5 0 "
.size cpu_ p x a25 0 _ n a m e , . - c p u _ p x a25 0 _ n a m e
.type cpu_ p x a21 0 _ n a m e , #o b j e c t
cpu_pxa210_name :
.asciz " XScale- P X A 2 1 0 "
.size cpu_ p x a21 0 _ n a m e , . - c p u _ p x a21 0 _ n a m e
.type cpu_ i x p42 x _ n a m e , #o b j e c t
cpu_ixp42x_name :
.asciz " XScale- I X P 4 2 x F a m i l y "
.size cpu_ i x p42 x _ n a m e , . - c p u _ i x p42 x _ n a m e
.type cpu_ i x p46 x _ n a m e , #o b j e c t
cpu_ixp46x_name :
.asciz " XScale- I X P 4 6 x F a m i l y "
.size cpu_ i x p46 x _ n a m e , . - c p u _ i x p46 x _ n a m e
.type cpu_ i x p24 0 0 _ n a m e , #o b j e c t
cpu_ixp2400_name :
.asciz " XScale- I X P 2 4 0 0 "
.size cpu_ i x p24 0 0 _ n a m e , . - c p u _ i x p24 0 0 _ n a m e
.type cpu_ i x p28 0 0 _ n a m e , #o b j e c t
cpu_ixp2800_name :
.asciz " XScale- I X P 2 8 0 0 "
.size cpu_ i x p28 0 0 _ n a m e , . - c p u _ i x p28 0 0 _ n a m e
.type cpu_ p x a25 5 _ n a m e , #o b j e c t
cpu_pxa255_name :
.asciz " XScale- P X A 2 5 5 "
.size cpu_ p x a25 5 _ n a m e , . - c p u _ p x a25 5 _ n a m e
.type cpu_ p x a27 0 _ n a m e , #o b j e c t
cpu_pxa270_name :
.asciz " XScale- P X A 2 7 0 "
.size cpu_ p x a27 0 _ n a m e , . - c p u _ p x a27 0 _ n a m e
.align
2005-09-20 19:35:03 +04:00
.section " .proc .info .init " , # alloc, #e x e c i n s t r
2005-04-17 02:20:36 +04:00
.type _ _ 8 0 2 0 0 _ proc_ i n f o ,#o b j e c t
__80200_proc_info :
.long 0x69052000
.long 0xfffffff0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_80200_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ 8 0 2 0 0 _ proc_ i n f o , . - _ _ 8 0 2 0 0 _ p r o c _ i n f o
.type _ _ 8 0 3 2 x_ p r o c _ i n f o ,#o b j e c t
__8032x_proc_info :
.long 0x69052420
.long 0xfffff5e0 @ mask should accomodate IOP80219 also
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_8032x_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ 8 0 3 2 x_ p r o c _ i n f o , . - _ _ 8 0 3 2 x _ p r o c _ i n f o
.type _ _ 8 0 3 3 x_ p r o c _ i n f o ,#o b j e c t
__8033x_proc_info :
.long 0x69054010
.long 0xffffff30
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_8033x_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ 8 0 3 3 x_ p r o c _ i n f o , . - _ _ 8 0 3 3 x _ p r o c _ i n f o
.type _ _ pxa2 5 0 _ p r o c _ i n f o ,#o b j e c t
__pxa250_proc_info :
.long 0x69052100
.long 0xfffff7f0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_pxa250_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ pxa2 5 0 _ p r o c _ i n f o , . - _ _ p x a25 0 _ p r o c _ i n f o
.type _ _ pxa2 1 0 _ p r o c _ i n f o ,#o b j e c t
__pxa210_proc_info :
.long 0x69052120
.long 0xfffff3f0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_pxa210_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ pxa2 1 0 _ p r o c _ i n f o , . - _ _ p x a21 0 _ p r o c _ i n f o
.type _ _ ixp2 4 0 0 _ p r o c _ i n f o , #o b j e c t
__ixp2400_proc_info :
.long 0x69054190
.long 0xfffffff0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_ixp2400_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ ixp2 4 0 0 _ p r o c _ i n f o , . - _ _ i x p24 0 0 _ p r o c _ i n f o
.type _ _ ixp2 8 0 0 _ p r o c _ i n f o , #o b j e c t
__ixp2800_proc_info :
.long 0x690541a0
.long 0xfffffff0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_ixp2800_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ ixp2 8 0 0 _ p r o c _ i n f o , . - _ _ i x p28 0 0 _ p r o c _ i n f o
.type _ _ ixp4 2 x _ p r o c _ i n f o , #o b j e c t
__ixp42x_proc_info :
.long 0x690541c0
.long 0xffffffc0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_ixp42x_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ ixp4 2 x _ p r o c _ i n f o , . - _ _ i x p42 x _ p r o c _ i n f o
.type _ _ ixp4 6 x _ p r o c _ i n f o , #o b j e c t
__ixp46x_proc_info :
.long 0x69054200
.long 0xffffff00
.long 0x00000c0e
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_ixp46x_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ ixp4 6 x _ p r o c _ i n f o , . - _ _ i x p46 x _ p r o c _ i n f o
.type _ _ pxa2 5 5 _ p r o c _ i n f o ,#o b j e c t
__pxa255_proc_info :
.long 0x69052d00
.long 0xfffffff0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_pxa255_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ pxa2 5 5 _ p r o c _ i n f o , . - _ _ p x a25 5 _ p r o c _ i n f o
.type _ _ pxa2 7 0 _ p r o c _ i n f o ,#o b j e c t
__pxa270_proc_info :
.long 0x69054110
.long 0xfffffff0
.long PMD_TYPE_SECT | \
PMD_ S E C T _ B U F F E R A B L E | \
PMD_ S E C T _ C A C H E A B L E | \
PMD_ S E C T _ A P _ W R I T E | \
PMD_ S E C T _ A P _ R E A D
b _ _ x s c a l e _ s e t u p
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_ S W P | H W C A P _ H A L F | H W C A P _ T H U M B | H W C A P _ F A S T _ M U L T | H W C A P _ E D S P
.long cpu_pxa270_name
.long xscale_processor_functions
.long v4wbi_tlb_fns
.long xscale_mc_user_fns
.long xscale_cache_fns
.size _ _ pxa2 7 0 _ p r o c _ i n f o , . - _ _ p x a27 0 _ p r o c _ i n f o