scb9328: Move all not critical register initializations
like chipselect setups from assembler to C.
This commit is contained in:
parent
7f72d26be9
commit
a3408cfe75
|
@ -21,47 +21,21 @@
|
|||
#include <config.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
|
||||
#define CFG_GPR_A_VAL 0x00800000
|
||||
#define CFG_GIUS_A_VAL 0x0043fffe
|
||||
#define writel(val, reg) \
|
||||
ldr r0, =reg; \
|
||||
ldr r1, =val; \
|
||||
str r1, [r0];
|
||||
|
||||
#define CFG_CS0U_VAL 0x000F2000
|
||||
#define CFG_CS0L_VAL 0x11110d01
|
||||
#define CFG_CS1U_VAL 0x000F0a00
|
||||
#define CFG_CS1L_VAL 0x11110601
|
||||
#define CFG_CS2U_VAL 0x0
|
||||
#define CFG_CS2L_VAL 0x0
|
||||
#define CFG_CS3U_VAL 0x000FFFFF
|
||||
#define CFG_CS3L_VAL 0x00000303
|
||||
#define CFG_CS4U_VAL 0x000F0a00
|
||||
#define CFG_CS4L_VAL 0x11110301
|
||||
#define CFG_CS5U_VAL 0x00008400
|
||||
#define CFG_CS5L_VAL 0x00000D03
|
||||
|
||||
/* SDRAM Setup Values
|
||||
* 0x910a8300 Precharge Command CAS 3
|
||||
* 0x910a8200 Precharge Command CAS 2
|
||||
*
|
||||
* 0xa10a8300 AutoRefresh Command CAS 3
|
||||
* 0xa10a8200 Set AutoRefresh Command CAS 2
|
||||
*/
|
||||
#define PRECHARGE_CMD 0x910a8200
|
||||
#define AUTOREFRESH_CMD 0xa10a8200
|
||||
|
||||
.globl lowlevel_init
|
||||
lowlevel_init:
|
||||
.globl board_init_lowlevel
|
||||
board_init_lowlevel:
|
||||
|
||||
mov r10, lr
|
||||
|
||||
/* Change PERCLK1DIV to 14 ie 14+1 */
|
||||
ldr r0, =PCDR
|
||||
ldr r1, =CFG_PCDR_VAL
|
||||
str r1, [r0]
|
||||
writel(CFG_PCDR_VAL, PCDR)
|
||||
|
||||
/* set MCU PLL Control Register 0 */
|
||||
|
||||
ldr r0, =MPCTL0
|
||||
ldr r1, =CFG_MPCTL0_VAL
|
||||
str r1, [r0]
|
||||
writel(CFG_MPCTL0_VAL, MPCTL0)
|
||||
|
||||
/* set mpll restart bit */
|
||||
ldr r0, =CSCR
|
||||
|
@ -80,10 +54,7 @@ lowlevel_init:
|
|||
bne 1b
|
||||
|
||||
/* set System PLL Control Register 0 */
|
||||
|
||||
ldr r0, =SPCTL0
|
||||
ldr r1, =CFG_SPCTL0_VAL
|
||||
str r1, [r0]
|
||||
writel(CFG_SPCTL0_VAL, SPCTL0)
|
||||
|
||||
/* set spll restart bit */
|
||||
ldr r0, =CSCR
|
||||
|
@ -101,9 +72,7 @@ lowlevel_init:
|
|||
subs r2,r2,#1
|
||||
bne 1b
|
||||
|
||||
ldr r0, =CSCR
|
||||
ldr r1, =CFG_CSCR_VAL
|
||||
str r1, [r0]
|
||||
writel(CFG_CSCR_VAL, CSCR)
|
||||
|
||||
/* I have now read the ARM920 DataSheet back-to-Back, and have stumbled upon
|
||||
*this.....
|
||||
|
@ -126,81 +95,21 @@ lowlevel_init:
|
|||
ORR r0,r0,#0xC0000000
|
||||
MCR p15,0,r0,c1,c0,0
|
||||
|
||||
ldr r0, =GPR(0)
|
||||
ldr r1, =CFG_GPR_A_VAL
|
||||
str r1, [r0]
|
||||
/* Skip SDRAM initialization if we run from RAM */
|
||||
cmp pc, #0x08000000
|
||||
bls 1f
|
||||
cmp pc, #0x09000000
|
||||
bhi 1f
|
||||
|
||||
ldr r0, =GIUS(0)
|
||||
ldr r1, =CFG_GIUS_A_VAL
|
||||
str r1, [r0]
|
||||
mov pc,r10
|
||||
|
||||
/* CS3 becomes CS3 by clearing reset default bit 1 in FMCR */
|
||||
|
||||
ldr r0, =FMCR
|
||||
ldr r1, =CFG_FMCR_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS0U
|
||||
ldr r1, =CFG_CS0U_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS0L
|
||||
ldr r1, =CFG_CS0L_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS1U
|
||||
ldr r1, =CFG_CS1U_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS1L
|
||||
ldr r1, =CFG_CS1L_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS2U
|
||||
ldr r1, =CFG_CS2U_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS2L
|
||||
ldr r1, =CFG_CS2L_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS3U
|
||||
ldr r1, =CFG_CS3U_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS3L
|
||||
ldr r1, =CFG_CS3L_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS4U
|
||||
ldr r1, =CFG_CS4U_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS4L
|
||||
ldr r1, =CFG_CS4L_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS5U
|
||||
ldr r1, =CFG_CS5U_VAL
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =CS5L
|
||||
ldr r1, =CFG_CS5L_VAL
|
||||
str r1, [r0]
|
||||
1:
|
||||
|
||||
/* SDRAM Setup */
|
||||
|
||||
ldr r0, =SDCTL0
|
||||
ldr r1, =PRECHARGE_CMD
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =0x08200000
|
||||
ldr r1, =0x0 /* Issue Precharge all Command */
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =SDCTL0
|
||||
ldr r1, =AUTOREFRESH_CMD
|
||||
str r1, [r0]
|
||||
writel(0x910a8200, SDCTL0) /* Precharge cmd, CAS = 2 */
|
||||
writel(0x0, 0x08200000) /* Issue Precharge all Command */
|
||||
writel(0xa10a8200, SDCTL0) /* Autorefresh cmd, CAS = 2 */
|
||||
|
||||
ldr r0, =0x08000000
|
||||
ldr r1, =0x0 /* Issue AutoRefresh Command */
|
||||
|
@ -213,16 +122,8 @@ lowlevel_init:
|
|||
str r1, [r0]
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =SDCTL0
|
||||
ldr r1, =0xb10a8300
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =0x08223000 /* CAS Latency 2 */
|
||||
ldr r1, =0x0 /* Issue Mode Register Command, Burst Length = 8 */
|
||||
str r1, [r0]
|
||||
|
||||
ldr r0, =SDCTL0
|
||||
ldr r1, =0x810a8200 /* Set to Normal Mode CAS 2 */
|
||||
str r1, [r0]
|
||||
writel(0xb10a8300, SDCTL0)
|
||||
writel(0x0, 0x08223000) /* CAS Latency 2, issue Mode Register Command, Burst Length = 8 */
|
||||
writel(0x810a8200, SDCTL0) /* Set to Normal Mode CAS 2 */
|
||||
|
||||
mov pc,r10
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <environment.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/io.h>
|
||||
#include <partition.h>
|
||||
#include <fs.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -55,6 +56,28 @@ static struct device_d dm9000_dev = {
|
|||
};
|
||||
|
||||
static int scb9328_devices_init(void) {
|
||||
|
||||
/* adjust chipselects */
|
||||
GPR(0) = 0x00800000;
|
||||
GIUS(0) = 0x0043fffe;
|
||||
|
||||
/* CS3 becomes CS3 by clearing reset default bit 1 in FMCR */
|
||||
FMCR = 0x1;
|
||||
|
||||
CS0U = 0x000F2000;
|
||||
CS0L = 0x11110d01;
|
||||
|
||||
CS1U = 0x000F0a00;
|
||||
CS1L = 0x11110601;
|
||||
CS2U = 0x0;
|
||||
CS2L = 0x0;
|
||||
CS3U = 0x000FFFFF;
|
||||
CS3L = 0x00000303;
|
||||
CS4U = 0x000F0a00;
|
||||
CS4L = 0x11110301;
|
||||
CS5U = 0x00008400;
|
||||
CS5L = 0x00000D03;
|
||||
|
||||
register_device(&cfi_dev);
|
||||
register_device(&sdram_dev);
|
||||
register_device(&dm9000_dev);
|
||||
|
|
Loading…
Reference in New Issue