/*
 * (C) Copyright 2007-2008
 * Stefan Roese, DENX Software Engineering, sr@denx.de.
 *
 * Based on code provided from Senao and AMCC
 *
 * 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 <ppc4xx.h>

#include <ppc_asm.tmpl>
#include <ppc_defs.h>

#define mtsdram_as(reg, value)	 	\
	addi    r4,0,reg	;     	\
	mtdcr   memcfga,r4	;	\
	addis   r4,0,value@h 	;	\
	ori     r4,r4,value@l	;	\
	mtdcr   memcfgd,r4	;

	.globl  ext_bus_cntlr_init
ext_bus_cntlr_init:

	/*
	 * DDR2 setup
	 */

	/* Following the DDR Core Manual, here is the initialization */

	/* Step 1 */

	/* Step 2 */

	/* Step 3 */

	/* base=00000000, size=128MByte (5), mode=2 (n*10*4) */
	mtsdram_as(SDRAM_MB0CF, 0x00005201);

	/* base=08000000, size=128MByte (5), mode=2 (n*10*4) */
	mtsdram_as(SDRAM_MB1CF, (0x08000000 >> 3) | 0x5201);

	/* SDRAM_CLKTR: Adv Addr clock by 180 deg */
	mtsdram_as(SDRAM_CLKTR,0x80000000);

	/* Refresh Time register (0x30) Refresh every 7.8125uS */
	mtsdram_as(SDRAM_RTR, 0x06180000);

	/* SDRAM_SDTR1 */
	mtsdram_as(SDRAM_SDTR1, 0x80201000);

	/* SDRAM_SDTR2	*/
	mtsdram_as(SDRAM_SDTR2, 0x32204232);

	/* SDRAM_SDTR3	*/
	mtsdram_as(SDRAM_SDTR3, 0x080b0d1a);

	mtsdram_as(SDRAM_MMODE, 0x00000442);
	mtsdram_as(SDRAM_MEMODE, 0x00000404);

	/* SDRAM0_MCOPT1 (0X20) No ECC Gen */
	mtsdram_as(SDRAM_MCOPT1, 0x04322000);

	/* NOP */
	mtsdram_as(SDRAM_INITPLR0, 0xa8380000);
	/* precharge 3 DDR clock cycle */
	mtsdram_as(SDRAM_INITPLR1, 0x81900400);
	/* EMR2 twr = 2tck */
	mtsdram_as(SDRAM_INITPLR2, 0x81020000);
	/* EMR3  twr = 2tck */
	mtsdram_as(SDRAM_INITPLR3, 0x81030000);
	/* EMR DLL ENABLE twr = 2tck */
	mtsdram_as(SDRAM_INITPLR4, 0x81010404);
	/* MR w/ DLL reset
	 * Note: 5 is CL.  May need to be changed
	 */
	mtsdram_as(SDRAM_INITPLR5, 0x81000542);
	/* precharge 3 DDR clock cycle */
	mtsdram_as(SDRAM_INITPLR6, 0x81900400);
	/* Auto-refresh trfc = 26tck */
	mtsdram_as(SDRAM_INITPLR7, 0x8D080000);
	/* Auto-refresh trfc = 26tck */
	mtsdram_as(SDRAM_INITPLR8, 0x8D080000);
	/* Auto-refresh */
	mtsdram_as(SDRAM_INITPLR9, 0x8D080000);
	/* Auto-refresh */
	mtsdram_as(SDRAM_INITPLR10, 0x8D080000);
	/* MRS - normal operation; wait 2 cycle (set wait to tMRD) */
	mtsdram_as(SDRAM_INITPLR11, 0x81000442);
	mtsdram_as(SDRAM_INITPLR12, 0x81010780);
	mtsdram_as(SDRAM_INITPLR13, 0x81010400);
	mtsdram_as(SDRAM_INITPLR14, 0x00000000);
	mtsdram_as(SDRAM_INITPLR15, 0x00000000);

	/* SET MCIF0_CODT   Die Termination On */
	mtsdram_as(SDRAM_CODT, 0x0080f837);
	mtsdram_as(SDRAM_MODT0, 0x01800000);
#if 0 /* test-only: not sure if 0 is ok when 2nd bank is used */
	mtsdram_as(SDRAM_MODT1, 0x00000000);
#endif

	mtsdram_as(SDRAM_WRDTR, 0x00000000);

	/* SDRAM0_MCOPT2 (0X21) Start initialization */
	mtsdram_as(SDRAM_MCOPT2, 0x20000000);

	/* Step 5 */
	lis     r3,0x1	/* 400000 =  wait 100ms */
	mtctr   r3

pll_wait:
	bdnz	pll_wait

	/* Step 6 */

	/* SDRAM_DLCR */
	mtsdram_as(SDRAM_DLCR, 0x030000a5);

	/* SDRAM_RDCC */
	mtsdram_as(SDRAM_RDCC, 0x40000000);

	/* SDRAM_RQDC */
	mtsdram_as(SDRAM_RQDC, 0x80000038);

	/* SDRAM_RFDC */
	mtsdram_as(SDRAM_RFDC, 0x00000209);

	/* Enable memory controller */
	mtsdram_as(SDRAM_MCOPT2, 0x28000000);

	blr
