/*
 * For clock initialization, see chapter 3 of the "MCIMX27 Multimedia
 * Applications Processor Reference Manual, Rev. 0.2".
 *
 * (C) Copyright 2008 Eric Jarrige <eric.jarrige@armadeus.org>
 * (C) Copyright 2009 Ilya Yanok <yanok@emcraft.com>
 *
 * 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 <version.h>
#include <asm/macro.h>
#include <asm/arch/imx-regs.h>
#include <generated/asm-offsets.h>

SOC_ESDCTL_BASE_W:	.word	IMX_ESD_BASE
SOC_SI_ID_REG_W:	.word	IMX_SYSTEM_CTL_BASE
SDRAM_ESDCFG_T1_W:	.word	SDRAM_ESDCFG_REGISTER_VAL(0)
SDRAM_ESDCFG_T2_W:	.word	SDRAM_ESDCFG_REGISTER_VAL(3)
SDRAM_PRECHARGE_CMD_W:	.word	(ESDCTL_SDE | ESDCTL_SMODE_PRECHARGE | \
				 ESDCTL_ROW13 | ESDCTL_COL10)
SDRAM_AUTOREF_CMD_W:	.word	(ESDCTL_SDE | ESDCTL_SMODE_AUTO_REF | \
				 ESDCTL_ROW13 | ESDCTL_COL10)
SDRAM_LOADMODE_CMD_W:	.word	(ESDCTL_SDE | ESDCTL_SMODE_LOAD_MODE | \
				 ESDCTL_ROW13 | ESDCTL_COL10)
SDRAM_NORMAL_CMD_W:	.word	SDRAM_ESDCTL_REGISTER_VAL

.macro init_aipi
	/*
	 * setup AIPI1 and AIPI2
	 */
	write32 AIPI1_PSR0, AIPI1_PSR0_VAL
	write32 AIPI1_PSR1, AIPI1_PSR1_VAL
	write32 AIPI2_PSR0, AIPI2_PSR0_VAL
	write32 AIPI2_PSR1, AIPI2_PSR1_VAL

.endm /* init_aipi */

.macro init_clock
	ldr r0, =CSCR
	/* disable MPLL/SPLL first */
	ldr r1, [r0]
	bic r1, r1, #(CSCR_MPEN|CSCR_SPEN)
	str r1, [r0]

	write32 MPCTL0, MPCTL0_VAL
	write32 SPCTL0, SPCTL0_VAL

	write32 CSCR, CSCR_VAL | CSCR_MPLL_RESTART | CSCR_SPLL_RESTART

	/*
	 * add some delay here
	 */
	wait_timer 0x1000

	/* peripheral clock divider */
	write32 PCDR0, PCDR0_VAL
	write32 PCDR1, PCDR1_VAL

	/* Configure PCCR0 and PCCR1 */
	write32 PCCR0, PCCR0_VAL
	write32 PCCR1, PCCR1_VAL

.endm /* init_clock */

.macro sdram_init
	ldr r0, SOC_ESDCTL_BASE_W
	mov r2, #PHYS_SDRAM_1

	/* Do initial reset */
	mov r1, #ESDMISC_MDDR_DL_RST
	str r1, [r0, #ESDMISC_ROF]

	/* Hold for more than 200ns */
	wait_timer 0x10000

	/* Activate LPDDR iface */
	mov r1, #ESDMISC_MDDREN
	str r1, [r0, #ESDMISC_ROF]

	/* Check The chip version TO1 or TO2 */
	ldr r1, SOC_SI_ID_REG_W
	ldr r1, [r1]
	ands r1, r1, #0xF0000000
	/* add Latency on CAS only for TO2 */
	ldreq r1, SDRAM_ESDCFG_T2_W
	ldrne r1, SDRAM_ESDCFG_T1_W
	str r1, [r0, #ESDCFG0_ROF]

	/* Run initialization sequence */
	ldr r1, SDRAM_PRECHARGE_CMD_W
	str r1, [r0, #ESDCTL0_ROF]
	ldr r1, [r2, #SDRAM_ALL_VAL]

	ldr r1, SDRAM_AUTOREF_CMD_W
	str r1, [r0, #ESDCTL0_ROF]
	ldr r1, [r2, #SDRAM_ALL_VAL]
	ldr r1, [r2, #SDRAM_ALL_VAL]

	ldr r1, SDRAM_LOADMODE_CMD_W
	str r1, [r0, #ESDCTL0_ROF]
	ldrb r1, [r2, #SDRAM_MODE_REGISTER_VAL]
	add r3, r2, #SDRAM_EXT_MODE_REGISTER_VAL
	ldrb r1, [r3]

	ldr r1, SDRAM_NORMAL_CMD_W
	str r1, [r0, #ESDCTL0_ROF]

#if (CONFIG_NR_DRAM_BANKS > 1)
	/* 2nd sdram */
	mov r2, #PHYS_SDRAM_2

	/* Check The chip version TO1 or TO2 */
	ldr r1, SOC_SI_ID_REG_W
	ldr r1, [r1]
	ands r1, r1, #0xF0000000
	/* add Latency on CAS only for TO2 */
	ldreq r1, SDRAM_ESDCFG_T2_W
	ldrne r1, SDRAM_ESDCFG_T1_W
	str r1, [r0, #ESDCFG1_ROF]

	/* Run initialization sequence */
	ldr r1, SDRAM_PRECHARGE_CMD_W
	str r1, [r0, #ESDCTL1_ROF]
	ldr r1, [r2, #SDRAM_ALL_VAL]

	ldr r1, SDRAM_AUTOREF_CMD_W
	str r1, [r0, #ESDCTL1_ROF]
	ldr r1, [r2, #SDRAM_ALL_VAL]
	ldr r1, [r2, #SDRAM_ALL_VAL]

	ldr r1, SDRAM_LOADMODE_CMD_W
	str r1, [r0, #ESDCTL1_ROF]
	ldrb r1, [r2, #SDRAM_MODE_REGISTER_VAL]
	add r3, r2, #SDRAM_EXT_MODE_REGISTER_VAL
	ldrb r1, [r3]

	ldr r1, SDRAM_NORMAL_CMD_W
	str r1, [r0, #ESDCTL1_ROF]
#endif  /* CONFIG_NR_DRAM_BANKS > 1 */

.endm /* sdram_init */

.globl	lowlevel_init
lowlevel_init:

	mov	r10, lr

	init_aipi

	init_clock

	sdram_init

	mov	pc,r10
