@ -24,6 +24,8 @@
# include < g e n e r a t e d / a s m - o f f s e t s . h >
# include < l i n u x / l i n k a g e . h >
.section " .text .init " , " x"
/ *
* L2 C C C a c h e s e t u p / i n v a l i d a t i o n / d i s a b l e
* /
@ -34,15 +36,14 @@
mcr 1 5 , 0 , r0 , c1 , c0 , 1
/* reconfigure L2 cache aux control reg */
mov r0 , #0xC0 / * t a g R A M * /
add r0 , r0 , #0x4 / * d a t a R A M * /
orr r0 , r0 , # 1 < < 2 4 / * d i s a b l e w r i t e a l l o c a t e d e l a y * /
orr r0 , r0 , # 1 < < 2 3 / * d i s a b l e w r i t e a l l o c a t e c o m b i n e * /
orr r0 , r0 , # 1 < < 2 2 / * d i s a b l e w r i t e a l l o c a t e * /
ldr r0 , =0xC0 | / * t a g R A M * / \
0 x4 | / * d a t a R A M * / \
1 < < 2 4 | /* disable write allocate delay */ \
1 < < 2 3 | /* disable write allocate combine */ \
1 < < 2 2 /* disable write allocate * /
# if d e f i n e d ( C O N F I G _ M X 5 1 )
ldr r1 , =0x0
ldr r3 , [ r1 , #R O M _ S I _ R E V ]
ldr r3 , [ r4 , #R O M _ S I _ R E V ]
cmp r3 , #0x10
/* disable write combine for TO 2 and lower revs */
@ -84,8 +85,7 @@
ldr r1 , =0x00000203
str r1 , [ r0 , #0x40 ]
ldr r1 , =0x0
str r1 , [ r0 , #0x44 ]
str r4 , [ r0 , #0x44 ]
ldr r1 , =0x00120125
str r1 , [ r0 , #0x9C ]
@ -98,20 +98,29 @@
.macro setup_pll pll, f r e q
ldr r0 , = \ p l l
adr r2 , W _ D P _ \ f r e q
bl s e t u p _ p l l _ f u n c
.endm
# define W _ D P _ O P 0
# define W _ D P _ M F D 4
# define W _ D P _ M F N 8
setup_pll_func :
ldr r1 , =0x00001232
str r1 , [ r0 , #P L L _ D P _ C T L ] / * S e t D P L L O N ( s e t U P E N b i t ) : B R M O = 1 * /
mov r1 , #0x2
str r1 , [ r0 , #P L L _ D P _ C O N F I G ] / * E n a b l e a u t o - r e s t a r t A R E N b i t * /
ldr r1 , W _ D P _ O P _ \ f r e q
ldr r1 , [ r2 , #W _ D P _ O P ]
str r1 , [ r0 , #P L L _ D P _ O P ]
str r1 , [ r0 , #P L L _ D P _ H F S _ O P ]
ldr r1 , W _ D P _ M F D _ \ f r e q
ldr r1 , [ r2 , # W _ D P _ M F D ]
str r1 , [ r0 , #P L L _ D P _ M F D ]
str r1 , [ r0 , #P L L _ D P _ H F S _ M F D ]
ldr r1 , W _ D P _ M F N _ \ f r e q
ldr r1 , [ r2 , #W _ D P _ M F N ]
str r1 , [ r0 , #P L L _ D P _ M F N ]
str r1 , [ r0 , #P L L _ D P _ H F S _ M F N ]
@ -120,12 +129,13 @@
1 : ldr r1 , [ r0 , #P L L _ D P _ C T L ]
ands r1 , r1 , #0x1
beq 1 b
.endm
/* r10 saved upper lr */
mov p c , l r
.macro setup_pll_errata pll, f r e q
ldr r2 , = \ p l l
mov r1 , #0x0
str r1 , [ r2 , #P L L _ D P _ C O N F I G ] / * D i s a b l e a u t o - r e s t a r t A R E N b i t * /
str r4 , [ r2 , #P L L _ D P _ C O N F I G ] / * D i s a b l e a u t o - r e s t a r t A R E N b i t * /
ldr r1 , =0x00001236
str r1 , [ r2 , #P L L _ D P _ C T L ] / * R e s t a r t P L L w i t h P L M = 1 * /
1 : ldr r1 , [ r2 , #P L L _ D P _ C T L ] / * W a i t f o r l o c k * /
@ -158,10 +168,9 @@
/* Gate of clocks to the peripherals first */
ldr r1 , =0x3FFFFFFF
str r1 , [ r0 , #C L K C T L _ C C G R 0 ]
ldr r1 , =0x0
str r1 , [ r0 , #C L K C T L _ C C G R 1 ]
str r1 , [ r0 , #C L K C T L _ C C G R 2 ]
str r1 , [ r0 , #C L K C T L _ C C G R 3 ]
str r4 , [ r0 , #C L K C T L _ C C G R 1 ]
str r4 , [ r0 , #C L K C T L _ C C G R 2 ]
str r4 , [ r0 , #C L K C T L _ C C G R 3 ]
ldr r1 , =0x00030000
str r1 , [ r0 , #C L K C T L _ C C G R 4 ]
@ -184,11 +193,10 @@
# else
ldr r1 , =0x3FFFFFFF
str r1 , [ r0 , #C L K C T L _ C C G R 0 ]
ldr r1 , =0x0
str r1 , [ r0 , #C L K C T L _ C C G R 1 ]
str r1 , [ r0 , #C L K C T L _ C C G R 2 ]
str r1 , [ r0 , #C L K C T L _ C C G R 3 ]
str r1 , [ r0 , #C L K C T L _ C C G R 7 ]
str r4 , [ r0 , #C L K C T L _ C C G R 1 ]
str r4 , [ r0 , #C L K C T L _ C C G R 2 ]
str r4 , [ r0 , #C L K C T L _ C C G R 3 ]
str r4 , [ r0 , #C L K C T L _ C C G R 7 ]
ldr r1 , =0x00030000
str r1 , [ r0 , #C L K C T L _ C C G R 4 ]
@ -214,8 +222,7 @@
/* Switch peripheral to PLL 3 */
ldr r0 , =CCM_BASE_ADDR
ldr r1 , =0x000010C0
orr r1 ,r1 ,#C O N F I G _ S Y S _ D D R _ C L K S E L
ldr r1 , =0x000010C0 | C O N F I G _ S Y S _ D D R _ C L K S E L
str r1 , [ r0 , #C L K C T L _ C B C M R ]
ldr r1 , =0x13239145
str r1 , [ r0 , #C L K C T L _ C B C D R ]
@ -225,8 +232,7 @@
ldr r0 , =CCM_BASE_ADDR
ldr r1 , =0x19239145
str r1 , [ r0 , #C L K C T L _ C B C D R ]
ldr r1 , =0x000020C0
orr r1 ,r1 ,#C O N F I G _ S Y S _ D D R _ C L K S E L
ldr r1 , =0x000020C0 | C O N F I G _ S Y S _ D D R _ C L K S E L
str r1 , [ r0 , #C L K C T L _ C B C M R ]
# endif
setup_ p l l P L L 3 _ B A S E _ A D D R , 2 1 6
@ -240,8 +246,7 @@
# if d e f i n e d ( C O N F I G _ M X 5 1 )
/* Run 3.0 at Full speed, for other TO's wait till we increase VDDGP */
ldr r1 , =0x0
ldr r3 , [ r1 , #R O M _ S I _ R E V ]
ldr r3 , [ r4 , #R O M _ S I _ R E V ]
cmp r3 , #0x10
movls r1 , #0x1
movhi r1 , #0
@ -251,14 +256,12 @@
str r1 , [ r0 , #C L K C T L _ C A C R R ]
/* Switch ARM back to PLL 1 */
mov r1 , #0
str r1 , [ r0 , #C L K C T L _ C C S R ]
str r4 , [ r0 , #C L K C T L _ C C S R ]
# if d e f i n e d ( C O N F I G _ M X 5 1 )
/* setup the rest */
/* Use lp_apm (24MHz) source for perclk */
ldr r1 , =0x000020C2
orr r1 ,r1 ,#C O N F I G _ S Y S _ D D R _ C L K S E L
ldr r1 , =0x000020C2 | C O N F I G _ S Y S _ D D R _ C L K S E L
str r1 , [ r0 , #C L K C T L _ C B C M R ]
/* ddr clock from PLL 1, all perclk dividers are 1 since using 24MHz */
ldr r1 , =CONFIG_SYS_CLKTL_CBCDR
@ -289,7 +292,6 @@
ldr r0 , =CCM_BASE_ADDR
ldr r1 , =0x00808145
orr r1 , r1 , #2 < < 1 0
orr r1 , r1 , #0 < < 1 6
orr r1 , r1 , #1 < < 1 9
str r1 , [ r0 , #C L K C T L _ C B C D R ]
@ -310,8 +312,7 @@
cmp r1 , #0x0
bne 1 b
mov r1 , #0x0
str r1 , [ r0 , #C L K C T L _ C C D R ]
str r4 , [ r0 , #C L K C T L _ C C D R ]
/* for cko - for ARM div by 8 */
mov r1 , #0x000A0000
@ -325,9 +326,10 @@
strh r1 , [ r0 ]
.endm
.section " .text .init " , " x"
ENTRY( l o w l e v e l _ i n i t )
mov r10 , l r
mov r4 , #0 / * F i x R 4 t o 0 * /
# if d e f i n e d ( C O N F I G _ M X 5 1 )
ldr r0 , =GPIO1_BASE_ADDR
ldr r1 , [ r0 , #0x0 ]
@ -346,21 +348,25 @@ ENTRY(lowlevel_init)
init_ c l o c k
/* r12 saved upper lr*/
mov p c ,l r
mov p c , r10
ENDPROC( l o w l e v e l _ i n i t )
/* Board level setting value */
W_DP_OP_864 : .word D P _ O P _ 864
W_DP_MFD_864 : .word D P _ M F D _ 864
W_DP_MFN_864 : .word D P _ M F N _ 864
# if d e f i n e d ( C O N F I G _ M X 5 1 _ P L L _ E R R A T A )
W_DP_864 : .word D P _ O P _ 864
.word DP_MFD_864
.word DP_MFN_864
W_DP_MFN_800_DIT : .word D P _ M F N _ 800 _ DIT
W_DP_OP_800 : .word D P _ O P _ 800
W_DP_MFD_800 : .word D P _ M F D _ 800
W_DP_MFN_800 : .word D P _ M F N _ 800
W_DP_OP_665 : .word D P _ O P _ 665
W_DP_MFD_665 : .word D P _ M F D _ 665
W_DP_MFN_665 : .word D P _ M F N _ 665
W_DP_OP_216 : .word D P _ O P _ 216
W_DP_MFD_216 : .word D P _ M F D _ 216
W_DP_MFN_216 : .word D P _ M F N _ 216
# else
W_DP_800 : .word D P _ O P _ 800
.word DP_MFD_800
.word DP_MFN_800
# endif
# if d e f i n e d ( C O N F I G _ M X 5 1 )
W_DP_665 : .word D P _ O P _ 665
.word DP_MFD_665
.word DP_MFN_665
# endif
W_DP_216 : .word D P _ O P _ 216
.word DP_MFD_216
.word DP_MFN_216