forked from Imagelibrary/rtems
bsp/mpc5200: Change SDRAM initialization
Change SDRAM initialization according to application note AN3221.
This commit is contained in:
@@ -146,9 +146,9 @@
|
|||||||
.set ADREN_CS1_EN, (1 << (31 - 14))
|
.set ADREN_CS1_EN, (1 << (31 - 14))
|
||||||
.set ADREN_WSE, (1 << (31 - 31))
|
.set ADREN_WSE, (1 << (31 - 31))
|
||||||
|
|
||||||
.set CTRL_PRECHARGE, (1<<1)
|
.set CTRL_PRECHARGE_ALL, (1 << (31 - 30))
|
||||||
.set CTRL_REFRESH, (1<<2)
|
.set CTRL_REFRESH, (1 << (31 - 29))
|
||||||
.set CTRL_BA1, (1<<31)
|
.set CTRL_MODE_EN, (1 << (31 - 0))
|
||||||
|
|
||||||
.set CSCONF_CE, (1<<12)
|
.set CSCONF_CE, (1<<12)
|
||||||
|
|
||||||
@@ -496,6 +496,8 @@ twiddle:
|
|||||||
|
|
||||||
#if defined(NEED_LOW_LEVEL_INIT)
|
#if defined(NEED_LOW_LEVEL_INIT)
|
||||||
SDRAM_init:
|
SDRAM_init:
|
||||||
|
mflr r12
|
||||||
|
|
||||||
#if defined(MPC5200_BOARD_BRS5L)
|
#if defined(MPC5200_BOARD_BRS5L)
|
||||||
/* set GPIO_WKUP7 pin low for 66MHz buffering */
|
/* set GPIO_WKUP7 pin low for 66MHz buffering */
|
||||||
/* or high for 133MHz registered buffering */
|
/* or high for 133MHz registered buffering */
|
||||||
@@ -526,65 +528,116 @@ SDRAM_init:
|
|||||||
|
|
||||||
#define SDELAY_VAL 0x00000004
|
#define SDELAY_VAL 0x00000004
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Single Read2Read/Write delay=0xC, Single Write2Read/Prec. delay=0x4
|
||||||
|
* Read CAS latency=0x2, Active2Read delay=0x2, Prec.2active delay=0x2
|
||||||
|
*/
|
||||||
|
#define CFG1_VAL 0xC4222600
|
||||||
|
|
||||||
|
/* Refr.2No-Read delay=0x06, Write latency=0x0 */
|
||||||
|
/* Burst2Read Prec.delay=0x8, Burst Write delay=0x8 */
|
||||||
|
/* Burst Read2Write delay=0xB, Burst length=0x7, Read Tap=0x4 */
|
||||||
|
#define CFG2_VAL 0xCCC70004
|
||||||
|
|
||||||
|
#if defined(MPC5200_BOARD_BRS5L)
|
||||||
|
/* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
|
||||||
|
/* Refresh counter=0xFFFF */
|
||||||
|
#define CTRL_VAL 0xD1470000
|
||||||
|
#else
|
||||||
|
/* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
|
||||||
|
/* Refresh counter=0xFFFF */
|
||||||
|
#define CTRL_VAL 0xD04F0000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Op.Mode=0x0, Read CAS latency=0x2, Burst length=0x3, Write strobe puls */
|
||||||
|
#define MODE_VAL 0x008D0000
|
||||||
|
|
||||||
|
/* SDRAM initialization according to application note AN3221 */
|
||||||
|
|
||||||
|
/* SDRAM controller setup */
|
||||||
|
|
||||||
LWI r3, SDELAY_VAL
|
LWI r3, SDELAY_VAL
|
||||||
stw r3, SDELAY(r31)
|
stw r3, SDELAY(r31)
|
||||||
|
|
||||||
LWI r30, 0xC4222600 /* Single Read2Read/Write delay=0xC, Single Write2Read/Prec. delay=0x4 */
|
LWI r3, CFG1_VAL
|
||||||
stw r30, CFG1(r31) /* Read CAS latency=0x2, Active2Read delay=0x2, Prec.2active delay=0x2 */
|
stw r3, CFG1(r31)
|
||||||
/* Refr.2No-Read delay=0x06, Write latency=0x0 */
|
|
||||||
|
|
||||||
LWI r30, 0xCCC70004 /* Burst2Read Prec.delay=0x8, Burst Write delay=0x8 */
|
LWI r3, CFG2_VAL
|
||||||
stw r30, CFG2(r31) /* Burst Read2Write delay=0xB, Burst length=0x7, Read Tap=0x4 */
|
stw r3, CFG2(r31)
|
||||||
|
|
||||||
#ifdef MPC5200_BOARD_BRS5L
|
LWI r11, CTRL_VAL
|
||||||
LWI r30, 0xD1470000 /* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
|
stw r11, CTRL(r31)
|
||||||
stw r30, CTRL(r31) /* Refresh counter=0xFFFF */
|
lwz r3, CTRL(r31)
|
||||||
|
|
||||||
|
/* Perform a PRECHARGE ALL command */
|
||||||
|
ori r3, r11, CTRL_PRECHARGE_ALL
|
||||||
|
stw r3, CTRL(r31)
|
||||||
|
lwz r3, CTRL(r31)
|
||||||
|
|
||||||
#else
|
/* Wait at least tRP time */
|
||||||
LWI r30, 0xD04F0000 /* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
|
li r3, 15
|
||||||
stw r30, CTRL(r31) /* Refresh counter=0xFFFF */
|
bl ndelay
|
||||||
|
|
||||||
|
#if defined(EMODE_VAL)
|
||||||
|
/* Write EMODE register */
|
||||||
|
LWI r3, EMODE_VAL
|
||||||
|
stw r3, MOD(r31)
|
||||||
|
|
||||||
|
/* Wait at least tMRD time */
|
||||||
|
li r3, 10
|
||||||
|
bl ndelay
|
||||||
#endif
|
#endif
|
||||||
lwz r30, CTRL(r31)
|
|
||||||
|
|
||||||
|
/* Write MODE register */
|
||||||
|
LWI r3, MODE_VAL
|
||||||
|
stw r3, MOD(r31)
|
||||||
|
|
||||||
SETBITS r30, r29, CTRL_PRECHARGE /* send two times precharge */
|
/* Wait at least tMRD time */
|
||||||
stw r30, CTRL(r31)
|
li r3, 10
|
||||||
|
bl ndelay
|
||||||
|
|
||||||
|
/* Perform a PRECHARGE ALL command */
|
||||||
|
ori r3, r11, CTRL_PRECHARGE_ALL
|
||||||
|
stw r3, CTRL(r31)
|
||||||
|
lwz r3, CTRL(r31)
|
||||||
|
|
||||||
stw r30, CTRL(r31)
|
/* Wait at least tRP time */
|
||||||
|
li r3, 15
|
||||||
|
bl ndelay
|
||||||
|
|
||||||
|
/* Perform an AUTO REFRESH */
|
||||||
|
ori r3, r11, CTRL_REFRESH
|
||||||
|
stw r3, CTRL(r31)
|
||||||
|
lwz r3, CTRL(r31)
|
||||||
|
|
||||||
|
/* Wait at least tRFC time */
|
||||||
|
li r3, 70
|
||||||
|
bl ndelay
|
||||||
|
|
||||||
lwz r30, CTRL(r31)
|
/* Perform an AUTO REFRESH */
|
||||||
|
ori r3, r11, CTRL_REFRESH
|
||||||
|
stw r3, CTRL(r31)
|
||||||
|
lwz r3, CTRL(r31)
|
||||||
|
|
||||||
|
/* Wait at least tRFC time */
|
||||||
|
li r3, 70
|
||||||
|
bl ndelay
|
||||||
|
|
||||||
SETBITS r30, r29, CTRL_REFRESH /* send two times refresh */
|
#if defined(SECOND_MODE_VAL)
|
||||||
stw r30, CTRL(r31)
|
/* Write MODE register */
|
||||||
|
LWI r3, SECOND_MODE_VAL
|
||||||
|
stw r3, MOD(r31)
|
||||||
stw r30, CTRL(r31)
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LWI r30, 0x008D0000 /* Op.Mode=0x0, Read CAS latency=0x2, Burst length=0x3, Write strobe puls */
|
|
||||||
stw r30, MOD(r31)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
lwz r30, CTRL(r31) /* Clock enabled, Auto refresh enabled, Mem. data drv. Refresh counter=0xFFFF */
|
|
||||||
|
|
||||||
|
|
||||||
CLRBITS r30, r29, CTRL_BA1
|
|
||||||
stw r30, CTRL(r31)
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Disable MODE register access */
|
||||||
|
lis r4, CTRL_MODE_EN@h
|
||||||
|
andc r3, r11, r4
|
||||||
|
stw r3, CTRL(r31)
|
||||||
|
lwz r3, CTRL(r31)
|
||||||
|
|
||||||
|
mtlr r12
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
|
||||||
copy_image:
|
copy_image:
|
||||||
mr r27, r28
|
mr r27, r28
|
||||||
srwi r28, r28, 2
|
srwi r28, r28, 2
|
||||||
@@ -901,3 +954,20 @@ XLB_init:
|
|||||||
stw r30, ARBDATTO(r31) /* Set ARBDATTO */
|
stw r30, ARBDATTO(r31) /* Set ARBDATTO */
|
||||||
|
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
ndelay:
|
||||||
|
/*
|
||||||
|
* The maximum core frequency is 396MHz.
|
||||||
|
* We have (396MHz * 1024) / 10**9 == 405.
|
||||||
|
*/
|
||||||
|
mulli r3, r3, 405
|
||||||
|
srwi. r3, r3, 10
|
||||||
|
|
||||||
|
beqlr
|
||||||
|
|
||||||
|
mtctr r3
|
||||||
|
|
||||||
|
ndelay_loop:
|
||||||
|
bdnz ndelay_loop
|
||||||
|
|
||||||
|
blr
|
||||||
|
|||||||
Reference in New Issue
Block a user