2018-12-28 00:31:46 -08:00
/ * SPDX- L i c e n s e - I d e n t i f i e r : G P L - 2 . 0
*
2009-10-29 10:52:23 +00:00
* MS7 7 2 4 S E s d r a m s e l f / a u t o - r e f r e s h s e t u p c o d e
*
* Copyright ( C ) 2 0 0 9 M a g n u s D a m m
* /
# include < l i n u x / s y s . h >
# include < l i n u x / e r r n o . h >
# include < l i n u x / l i n k a g e . h >
# include < a s m / a s m - o f f s e t s . h >
# include < a s m / s u s p e n d . h >
# include < a s m / r o m i m a g e - m a c r o s . h >
/ * code t o e n t e r a n d l e a v e s e l f - r e f r e s h . m u s t b e s e l f - c o n t a i n e d .
* this c o d e w i l l b e c o p i e d t o o n - c h i p m e m o r y a n d e x e c u t e d f r o m t h e r e .
* /
.balign 4
ENTRY( m s77 2 4 s e _ s d r a m _ e n t e r _ s t a r t )
/* DBSC: put memory in self-refresh mode */
ED 0 x F D 0 0 0 0 1 0 , 0 x00 0 0 0 0 0 0 / * D B E N * /
ED 0 x F D 0 0 0 0 4 0 , 0 x00 0 0 0 0 0 0 / * D B R F P D N 0 * /
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 2 / * D B C M D C N T ( P A L L ) * /
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 4 / * D B C M D C N T ( R E F ) * /
ED 0 x F D 0 0 0 0 4 0 , 0 x00 0 0 0 0 0 1 / * D B R F P D N 0 * /
rts
nop
ENTRY( m s77 2 4 s e _ s d r a m _ e n t e r _ e n d )
.balign 4
ENTRY( m s77 2 4 s e _ s d r a m _ l e a v e _ s t a r t )
/* DBSC: put memory in auto-refresh mode */
2010-02-25 11:06:02 +00:00
mov. l @(SH_SLEEP_MODE, r5), r0
tst #S U S P _ S H _ R S T A N D B Y , r 0
bf r e s u m e _ r s t a n d b y
2009-10-29 10:52:23 +00:00
ED 0 x F D 0 0 0 0 4 0 , 0 x00 0 0 0 0 0 0 / * D B R F P D N 0 * /
WAIT 1
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 2 / * D B C M D C N T ( P A L L ) * /
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 4 / * D B C M D C N T ( R E F ) * /
ED 0 x F D 0 0 0 0 1 0 , 0 x00 0 0 0 0 0 1 / * D B E N * /
ED 0 x F D 0 0 0 0 4 0 , 0 x00 0 1 0 0 0 0 / * D B R F P D N 0 * /
rts
nop
2010-02-25 11:06:02 +00:00
resume_rstandby :
/* CPG: setup clocks before restarting external memory */
ED 0 x A 4 1 5 0 0 2 4 , 0 x00 0 0 4 0 0 0 / * P L L C R * /
mov. l F R Q C R A ,r0
mov. l @r0,r3
mov. l K I C K ,r1
or r1 , r3
mov. l r3 , @r0
mov. l L S T A T S ,r0
mov #1 ,r1
WAIT_LSTATS :
mov. l @r0,r3
tst r1 ,r3
bf W A I T _ L S T A T S
/* DBSC: re-initialize and put in auto-refresh */
ED 0 x F D 0 0 0 1 0 8 , 0 x00 0 0 0 1 8 1 / * D B P D C N T 0 * /
ED 0 x F D 0 0 0 0 2 0 , 0 x01 5 B 0 0 0 2 / * D B C O N F * /
ED 0 x F D 0 0 0 0 3 0 , 0 x03 0 7 1 5 0 2 / * D B T R 0 * /
ED 0 x F D 0 0 0 0 3 4 , 0 x02 0 2 0 1 0 2 / * D B T R 1 * /
ED 0 x F D 0 0 0 0 3 8 , 0 x01 0 9 0 4 0 5 / * D B T R 2 * /
ED 0 x F D 0 0 0 0 3 C , 0 x00 0 0 0 0 0 2 / * D B T R 3 * /
ED 0 x F D 0 0 0 0 0 8 , 0 x00 0 0 0 0 0 5 / * D B K I N D * /
ED 0 x F D 0 0 0 0 4 0 , 0 x00 0 0 0 0 0 1 / * D B R F P D N 0 * /
ED 0 x F D 0 0 0 0 4 0 , 0 x00 0 0 0 0 0 0 / * D B R F P D N 0 * /
ED 0 x F D 0 0 0 0 1 8 , 0 x00 0 0 0 0 0 1 / * D B C K E C N T * /
mov #100 ,r0
WAIT_400NS :
dt r0
bf W A I T _ 4 0 0 N S
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 2 / * D B C M D C N T ( P A L L ) * /
ED 0 x F D 0 0 0 0 6 0 , 0 x00 0 2 0 0 0 0 / * D B M R C N T ( E M R 2 ) * /
ED 0 x F D 0 0 0 0 6 0 , 0 x00 0 3 0 0 0 0 / * D B M R C N T ( E M R 3 ) * /
ED 0 x F D 0 0 0 0 6 0 , 0 x00 0 1 0 0 0 4 / * D B M R C N T ( E M R ) * /
ED 0 x F D 0 0 0 0 6 0 , 0 x00 0 0 0 5 3 2 / * D B M R C N T ( M R S ) * /
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 2 / * D B C M D C N T ( P A L L ) * /
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 4 / * D B C M D C N T ( R E F ) * /
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 4 / * D B C M D C N T ( R E F ) * /
ED 0 x F D 0 0 0 0 6 0 , 0 x00 0 0 0 4 3 2 / * D B M R C N T ( M R S ) * /
ED 0 x F D 0 0 0 0 6 0 , 0 x00 0 1 0 3 c0 / * D B M R C N T ( E M R ) * /
ED 0 x F D 0 0 0 0 6 0 , 0 x00 0 1 0 0 4 0 / * D B M R C N T ( E M R ) * /
mov #100 ,r0
WAIT_400NS_2 :
dt r0
bf W A I T _ 4 0 0 N S _ 2
ED 0 x F D 0 0 0 0 1 0 , 0 x00 0 0 0 0 0 1 / * D B E N * /
ED 0 x F D 0 0 0 0 4 4 , 0 x00 0 0 0 5 0 f / * D B R F P D N 1 * /
ED 0 x F D 0 0 0 0 4 8 , 0 x23 6 8 0 0 e 6 / * D B R F P D N 2 * /
mov. l D U M M Y ,r0
mov. l @r0, r1 /* force single dummy read */
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 2 / * D B C M D C N T ( P A L L ) * /
ED 0 x F D 0 0 0 0 1 4 , 0 x00 0 0 0 0 0 4 / * D B C M D C N T ( R E F ) * /
ED 0 x F D 0 0 0 1 0 8 , 0 x00 0 0 0 0 8 0 / * D B P D C N T 0 * /
ED 0 x F D 0 0 0 0 4 0 , 0 x00 0 1 0 0 0 0 / * D B R F P D N 0 * /
rts
nop
.balign 4
DUMMY : .long 0xac400000
FRQCRA : .long 0xa4150000
KICK : .long 0x80000000
LSTATS : .long 0xa4150060
2009-10-29 10:52:23 +00:00
ENTRY( m s77 2 4 s e _ s d r a m _ l e a v e _ e n d )