mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-19 19:28:36 +00:00
ab0689c316
Move machine specific code to smdk6400. Some board use OneNAND instead of NAND. Some register MP0_CS_CFG[5:0] are controled by both h/w and s/w. So it's better to use macro instead of hard-coded value. Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
135 lines
3 KiB
ArmAsm
135 lines
3 KiB
ArmAsm
/*
|
|
* Originates from Samsung's u-boot 1.1.6 port to S3C6400 / SMDK6400
|
|
*
|
|
* Copyright (C) 2008
|
|
* Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
|
|
*
|
|
* See file CREDITS for list of people who contributed to this
|
|
* project.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*/
|
|
|
|
#include <config.h>
|
|
#include <s3c6400.h>
|
|
|
|
.globl mem_ctrl_asm_init
|
|
mem_ctrl_asm_init:
|
|
/* DMC1 base address 0x7e001000 */
|
|
ldr r0, =ELFIN_DMC1_BASE
|
|
|
|
ldr r1, =0x4
|
|
str r1, [r0, #INDEX_DMC_MEMC_CMD]
|
|
|
|
ldr r1, =DMC_DDR_REFRESH_PRD
|
|
str r1, [r0, #INDEX_DMC_REFRESH_PRD]
|
|
|
|
ldr r1, =DMC_DDR_CAS_LATENCY
|
|
str r1, [r0, #INDEX_DMC_CAS_LATENCY]
|
|
|
|
ldr r1, =DMC_DDR_t_DQSS
|
|
str r1, [r0, #INDEX_DMC_T_DQSS]
|
|
|
|
ldr r1, =DMC_DDR_t_MRD
|
|
str r1, [r0, #INDEX_DMC_T_MRD]
|
|
|
|
ldr r1, =DMC_DDR_t_RAS
|
|
str r1, [r0, #INDEX_DMC_T_RAS]
|
|
|
|
ldr r1, =DMC_DDR_t_RC
|
|
str r1, [r0, #INDEX_DMC_T_RC]
|
|
|
|
ldr r1, =DMC_DDR_t_RCD
|
|
ldr r2, =DMC_DDR_schedule_RCD
|
|
orr r1, r1, r2
|
|
str r1, [r0, #INDEX_DMC_T_RCD]
|
|
|
|
ldr r1, =DMC_DDR_t_RFC
|
|
ldr r2, =DMC_DDR_schedule_RFC
|
|
orr r1, r1, r2
|
|
str r1, [r0, #INDEX_DMC_T_RFC]
|
|
|
|
ldr r1, =DMC_DDR_t_RP
|
|
ldr r2, =DMC_DDR_schedule_RP
|
|
orr r1, r1, r2
|
|
str r1, [r0, #INDEX_DMC_T_RP]
|
|
|
|
ldr r1, =DMC_DDR_t_RRD
|
|
str r1, [r0, #INDEX_DMC_T_RRD]
|
|
|
|
ldr r1, =DMC_DDR_t_WR
|
|
str r1, [r0, #INDEX_DMC_T_WR]
|
|
|
|
ldr r1, =DMC_DDR_t_WTR
|
|
str r1, [r0, #INDEX_DMC_T_WTR]
|
|
|
|
ldr r1, =DMC_DDR_t_XP
|
|
str r1, [r0, #INDEX_DMC_T_XP]
|
|
|
|
ldr r1, =DMC_DDR_t_XSR
|
|
str r1, [r0, #INDEX_DMC_T_XSR]
|
|
|
|
ldr r1, =DMC_DDR_t_ESR
|
|
str r1, [r0, #INDEX_DMC_T_ESR]
|
|
|
|
ldr r1, =DMC1_MEM_CFG
|
|
str r1, [r0, #INDEX_DMC_MEMORY_CFG]
|
|
|
|
ldr r1, =DMC1_MEM_CFG2
|
|
str r1, [r0, #INDEX_DMC_MEMORY_CFG2]
|
|
|
|
ldr r1, =DMC1_CHIP0_CFG
|
|
str r1, [r0, #INDEX_DMC_CHIP_0_CFG]
|
|
|
|
ldr r1, =DMC_DDR_32_CFG
|
|
str r1, [r0, #INDEX_DMC_USER_CONFIG]
|
|
|
|
/* DMC0 DDR Chip 0 configuration direct command reg */
|
|
ldr r1, =DMC_NOP0
|
|
str r1, [r0, #INDEX_DMC_DIRECT_CMD]
|
|
|
|
/* Precharge All */
|
|
ldr r1, =DMC_PA0
|
|
str r1, [r0, #INDEX_DMC_DIRECT_CMD]
|
|
|
|
/* Auto Refresh 2 time */
|
|
ldr r1, =DMC_AR0
|
|
str r1, [r0, #INDEX_DMC_DIRECT_CMD]
|
|
str r1, [r0, #INDEX_DMC_DIRECT_CMD]
|
|
|
|
/* MRS */
|
|
ldr r1, =DMC_mDDR_EMR0
|
|
str r1, [r0, #INDEX_DMC_DIRECT_CMD]
|
|
|
|
/* Mode Reg */
|
|
ldr r1, =DMC_mDDR_MR0
|
|
str r1, [r0, #INDEX_DMC_DIRECT_CMD]
|
|
|
|
/* Enable DMC1 */
|
|
mov r1, #0x0
|
|
str r1, [r0, #INDEX_DMC_MEMC_CMD]
|
|
|
|
check_dmc1_ready:
|
|
ldr r1, [r0, #INDEX_DMC_MEMC_STATUS]
|
|
mov r2, #0x3
|
|
and r1, r1, r2
|
|
cmp r1, #0x1
|
|
bne check_dmc1_ready
|
|
nop
|
|
|
|
mov pc, lr
|
|
|
|
.ltorg
|