97 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0+ */
 | |
| /*
 | |
|  * Board-specific sbf ddr/sdram init.
 | |
|  *
 | |
|  * (C) Copyright 2017 Angelo Dureghello <angelo@sysam.it>
 | |
|  */
 | |
| 
 | |
|  #include <config.h>
 | |
| 
 | |
| .global sbf_dram_init
 | |
| .text
 | |
| 
 | |
| sbf_dram_init:
 | |
| 	/* Dram Initialization a1, a2, and d0 */
 | |
| 	/* mscr sdram */
 | |
| 	move.l	#0xFC0A4074, %a1
 | |
| 	move.b	#(CONFIG_SYS_SDRAM_DRV_STRENGTH), (%a1)
 | |
| 	nop
 | |
| 
 | |
| 	/* SDRAM Chip 0 and 1 */
 | |
| 	move.l	#0xFC0B8110, %a1
 | |
| 	move.l	#0xFC0B8114, %a2
 | |
| 
 | |
| 	/* calculate the size */
 | |
| 	move.l	#0x13, %d1
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_SIZE), %d2
 | |
| #ifdef CONFIG_SYS_SDRAM_BASE1
 | |
| 	lsr.l	#1, %d2
 | |
| #endif
 | |
| 
 | |
| dramsz_loop:
 | |
| 	lsr.l	#1, %d2
 | |
| 	add.l	#1, %d1
 | |
| 	cmp.l	#1, %d2
 | |
| 	bne	dramsz_loop
 | |
| #ifdef CONFIG_SYS_NAND_BOOT
 | |
| 	beq	asm_nand_chk_status
 | |
| #endif
 | |
| 	/* SDRAM Chip 0 and 1 */
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_BASE), (%a1)
 | |
| 	or.l	%d1, (%a1)
 | |
| #ifdef CONFIG_SYS_SDRAM_BASE1
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_BASE1), (%a2)
 | |
| 	or.l	%d1, (%a2)
 | |
| #endif
 | |
| 	nop
 | |
| 
 | |
| 	/* dram cfg1 and cfg2 */
 | |
| 	move.l	#0xFC0B8008, %a1
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_CFG1), (%a1)
 | |
| 	nop
 | |
| 	move.l	#0xFC0B800C, %a2
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_CFG2), (%a2)
 | |
| 	nop
 | |
| 
 | |
| 	move.l	#0xFC0B8000, %a1	/* Mode */
 | |
| 	move.l	#0xFC0B8004, %a2	/* Ctrl */
 | |
| 
 | |
| 	/* Issue PALL */
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_CTRL + 2), (%a2)
 | |
| 	nop
 | |
| 
 | |
| 	move.l	#1000, %d1
 | |
| 	bsr	asm_delay
 | |
| 
 | |
| 	/* Issue PALL */
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_CTRL + 2), (%a2)
 | |
| 	nop
 | |
| 
 | |
| 	/* Perform two refresh cycles */
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_CTRL + 4), %d0
 | |
| 	nop
 | |
| 	move.l	%d0, (%a2)
 | |
| 	move.l	%d0, (%a2)
 | |
| 	nop
 | |
| 
 | |
| 	/* Issue LEMR */
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_MODE), (%a1)
 | |
| 	nop
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_EMOD), (%a1)
 | |
| 
 | |
| 	move.l	#500, %d1
 | |
| 	bsr	asm_delay
 | |
| 
 | |
| 	move.l	#(CONFIG_SYS_SDRAM_CTRL), %d1
 | |
| 	and.l	#0x7FFFFFFF, %d1
 | |
| 
 | |
| 	or.l	#0x10000C00, %d1
 | |
| 
 | |
| 	move.l	%d1, (%a2)
 | |
| 	nop
 | |
| 
 | |
| 	move.l	#2000, %d1
 | |
| 	bsr	asm_delay
 | |
| 
 | |
| 	rts
 | 
