mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	SDRAM seems to be working on delta board, though u-boot doesn't start yet.
This commit is contained in:
		
							parent
							
								
									4f7a0e3671
								
							
						
					
					
						commit
						48b6242aa1
					
				@ -49,6 +49,20 @@ DRAM_SIZE:  .long   CFG_DRAM_SIZE
 | 
			
		||||
	bls             0b
 | 
			
		||||
.endm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SDRAM_CMD_NOP	0x40000000
 | 
			
		||||
 | 
			
		||||
.macro do_nop_cmd num
 | 
			
		||||
	ldr		r2, =MDMRS
 | 
			
		||||
	ldr		r3, =SDRAM_CMD_NOP
 | 
			
		||||
	ldr		r4, =0x0
 | 
			
		||||
loop:	
 | 
			
		||||
	str		r3, [r2]
 | 
			
		||||
	add		r4, r4, #1
 | 
			
		||||
	cmp		r4, \num
 | 
			
		||||
	bls		loop
 | 
			
		||||
.endm
 | 
			
		||||
	
 | 
			
		||||
/*
 | 
			
		||||
 * 	Memory setup
 | 
			
		||||
 */
 | 
			
		||||
@ -58,38 +72,14 @@ lowlevel_init:
 | 
			
		||||
	/* Set up GPIO pins first ----------------------------------------- */
 | 
			
		||||
	mov      r10, lr
 | 
			
		||||
	
 | 
			
		||||
        /*  Configure GPIO Pins 41 - 48 as UART1 / altern. Fkt. 2 */
 | 
			
		||||
	ldr             r0, =0x40E10438 @ GPIO41 FFRXD
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
        /*  Configure GPIO  Pins 97, 98 UART1 / altern. Fkt. 1 */
 | 
			
		||||
	ldr		r0, =GPIO97
 | 
			
		||||
	ldr		r1, =0x801
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
 | 
			
		||||
	ldr             r0, =0x40E1043C @ GPIO42 FFTXD
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
 | 
			
		||||
	ldr             r0, =0x40E10440 @ GPIO43 FFCTS
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
 | 
			
		||||
	ldr             r0, =0x40E10444 @ GPIO 44 FFDCD
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
 | 
			
		||||
	ldr             r0, =0x40E10448 @ GPIO 45 FFDSR
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
 | 
			
		||||
	ldr             r0, =0x40E1044C @ GPIO 46 FFRI
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
 | 
			
		||||
	ldr             r0, =0x40E10450 @ GPIO 47 FFDTR
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
 | 
			
		||||
	ldr             r0, =0x40E10454 @ GPIO 48
 | 
			
		||||
	ldr             r1, =0x802
 | 
			
		||||
	str             r1, [r0]
 | 
			
		||||
	ldr		r0, =GPIO98
 | 
			
		||||
	ldr		r1, =0x801
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
		
 | 
			
		||||
        /* tebrandt - ASCR, clear the RDH bit */
 | 
			
		||||
	ldr             r0, =ASCR	
 | 
			
		||||
@ -99,10 +89,6 @@ lowlevel_init:
 | 
			
		||||
	
 | 
			
		||||
	/* ---------------------------------------------------------------- */
 | 
			
		||||
	/* Enable memory interface                                          */
 | 
			
		||||
	/*                                                                  */
 | 
			
		||||
	/* The sequence below is based on the recommended init steps        */
 | 
			
		||||
	/* detailed in the Intel PXA250 Operating Systems Developers Guide, */
 | 
			
		||||
	/* Chapter 10.                                                      */
 | 
			
		||||
	/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
	/* ---------------------------------------------------------------- */
 | 
			
		||||
@ -110,21 +96,67 @@ lowlevel_init:
 | 
			
		||||
	/*         clocks to settle. Only necessary after hard reset...     */
 | 
			
		||||
	/*         FIXME: can be optimized later                            */
 | 
			
		||||
	/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
	/* mk:	 replaced with wait macro */
 | 
			
		||||
/* 	ldr r3, =OSCR			/\* reset the OS Timer Count to zero *\/ */
 | 
			
		||||
/* 	mov r2, #0 */
 | 
			
		||||
/* 	str r2, [r3] */
 | 
			
		||||
/* 	ldr r4, =0x300			/\* really 0x2E1 is about 200usec,   *\/ */
 | 
			
		||||
/* 					/\* so 0x300 should be plenty        *\/ */
 | 
			
		||||
/* 1: */
 | 
			
		||||
/* 	ldr r2, [r3] */
 | 
			
		||||
/* 	cmp r4, r2 */
 | 
			
		||||
/* 	bgt 1b */
 | 
			
		||||
	wait #300
 | 
			
		||||
	
 | 
			
		||||
mem_init:
 | 
			
		||||
 | 
			
		||||
#define NEW_SDRAM_INIT 1
 | 
			
		||||
#ifdef NEW_SDRAM_INIT
 | 
			
		||||
 | 
			
		||||
	/* Configure ACCR Register - enable DMEMC Clock at 260 / 2 MHz */
 | 
			
		||||
	ldr		r0, =ACCR
 | 
			
		||||
	ldr		r1, [r0]
 | 
			
		||||
	orr		r1, r1, #0x3000
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
	ldr		r1, [r0]
 | 
			
		||||
 | 
			
		||||
	/* 2. Programm MDCNFG, leaving DMCEN de-asserted */
 | 
			
		||||
	ldr		r0, =MDCNFG
 | 
			
		||||
	ldr		r1, =(MDCNFG_DMAP | MDCNFG_DTYPE | MDCNFG_DTC_2 | MDCNFG_DCSE0 | MDCNFG_DRAC_13)
 | 
			
		||||
	/* 	ldr		r1, =0x80000403 */
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
	ldr		r1, [r0]	/* delay until written */
 | 
			
		||||
 | 
			
		||||
	/* 3. wait nop power up waiting period (200ms) 
 | 
			
		||||
	 * optimization: Steps 4+6 can be done during this
 | 
			
		||||
	 */
 | 
			
		||||
	wait #300
 | 
			
		||||
 | 
			
		||||
	/* 4. Perform an initial Rcomp-calibration cycle */
 | 
			
		||||
	ldr		r0, =RCOMP
 | 
			
		||||
	ldr		r1, =0x80000000
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
	ldr		r1, [r0]	/* delay until written */
 | 
			
		||||
	/* missing: program for automatic rcomp evaluation cycles */
 | 
			
		||||
 | 
			
		||||
	/* 5. DDR DRAM strobe delay calibration */
 | 
			
		||||
	ldr		r0, =DDR_HCAL
 | 
			
		||||
	ldr		r1, =0x88000007
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
	wait		#5
 | 
			
		||||
	ldr		r1, [r0]	/* delay until written */
 | 
			
		||||
 | 
			
		||||
	/* Set MDMRS */
 | 
			
		||||
	ldr		r0, =MDMRS
 | 
			
		||||
	ldr		r1, =0x60000023
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
	wait	#300
 | 
			
		||||
	
 | 
			
		||||
	/* Configure MDREFR */
 | 
			
		||||
	ldr		r0, =MDREFR
 | 
			
		||||
	ldr		r1, =0x00000006
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
	ldr		r1, [r0]
 | 
			
		||||
 | 
			
		||||
	/* Enable the dynamic memory controller */
 | 
			
		||||
	ldr		r0, =MDCNFG
 | 
			
		||||
	ldr		r1, [r0]
 | 
			
		||||
	orr		r1, r1, #MDCNFG_DMCEN
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#else /* NEW_SDRAM_INIT */
 | 
			
		||||
	
 | 
			
		||||
	/* configure the MEMCLKCFG register */
 | 
			
		||||
        ldr             r1, =MEMCLKCFG
 | 
			
		||||
        ldr             r2, =0x00010001
 | 
			
		||||
@ -235,6 +267,8 @@ mem_init:
 | 
			
		||||
	orr		r1, r1, #0x40000000	@ enable SDRAM for Normal Access
 | 
			
		||||
	str		r1, [r0]
 | 
			
		||||
 | 
			
		||||
#endif /* NEW_SDRAM_INIT */
 | 
			
		||||
	
 | 
			
		||||
	/* scrub/init SDRAM if enabled/present */
 | 
			
		||||
/* 	ldr	r11, =0xa0000000 /\* base address of SDRAM (CFG_DRAM_BASE) *\/ */
 | 
			
		||||
/* 	ldr	r12, =0x04000000 /\* size of memory to scrub (CFG_DRAM_SIZE) *\/ */
 | 
			
		||||
@ -270,18 +304,9 @@ mem_init:
 | 
			
		||||
	mov	r0,#0x80000000
 | 
			
		||||
	mcr	p14,0,r0,c10,c0,0  // dcsr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	/* We are finished with Intel's memory controller initialisation    */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/* ---------------------------------------------------------------- */
 | 
			
		||||
	/* End lowlevel_init                                                     */
 | 
			
		||||
	/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
endlowlevel_init:
 | 
			
		||||
 | 
			
		||||
    mov     pc, lr
 | 
			
		||||
	mov     pc, lr
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
@ -1994,6 +1994,31 @@ typedef void		(*ExcpHndlr) (void) ;
 | 
			
		||||
#define PAD_SCLK        __REG_2(0x4810012C)
 | 
			
		||||
#define TAI		__REG_2(0x48100F00) /* TAI Tavor Address Isolation Register */
 | 
			
		||||
 | 
			
		||||
/* Some frequently used bits */
 | 
			
		||||
#define MDCNFG_DMAP	0x80000000	/* SDRAM 1GB Memory Map Enable */
 | 
			
		||||
#define MDCNFG_DMCEN	0x40000000	/* Enable Dynamic Memory Controller */
 | 
			
		||||
#define MDCNFG_HWFREQ	0x20000000	/* Hardware Frequency Change Calibration */
 | 
			
		||||
#define MDCNFG_DTYPE	0x400		/* SDRAM Type: 1=DDR SDRAM */
 | 
			
		||||
 | 
			
		||||
#define MDCNFG_DTC_0	0x0		/* Timing Category of SDRAM */
 | 
			
		||||
#define MDCNFG_DTC_1	0x100
 | 
			
		||||
#define MDCNFG_DTC_2	0x200
 | 
			
		||||
#define MDCNFG_DTC_3	0x300
 | 
			
		||||
 | 
			
		||||
#define MDCNFG_DRAC_12	0x0		/* Number of Row Access Bits */
 | 
			
		||||
#define MDCNFG_DRAC_13	0x20
 | 
			
		||||
#define MDCNFG_DRAC_14	0x40
 | 
			
		||||
 | 
			
		||||
#define MDCNFG_DCAC_9	0x0		/* Number of Column Acess Bits */
 | 
			
		||||
#define MDCNFG_DCAC_10	0x08
 | 
			
		||||
#define MDCNFG_DCAC_11	0x10
 | 
			
		||||
 | 
			
		||||
#define MDCNFG_DBW_16	0x4		/* SDRAM Data Bus width 16bit */
 | 
			
		||||
#define MDCNFG_DCSE1	0x2		/* SDRAM CS 1 Enable */
 | 
			
		||||
#define MDCNFG_DCSE0	0x1		/* SDRAM CS 0 Enable */
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Data Flash Controller Registers */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user