/*
 * Memory Setup stuff - taken from blob memsetup.S
 *
 * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
 *		       Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
 * 2004 (c) MontaVista Software, Inc.
 *
 * 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 "version.h"


/*-----------------------------------------------------------------------
 * Board defines:
 */

#define MDCNFG		0x00
#define MDCAS00		0x04
#define MDCAS01		0x08
#define MDCAS02		0x0C
#define MSC0		0x10
#define MSC1		0x14
#define MECR		0x18
#define MDREFR		0x1C
#define MDCAS20		0x20
#define MDCAS21		0x24
#define MDCAS22		0x28
#define MSC2		0x2C
#define SMCNFG		0x30

#define GPDR	0x04
#define GPSR	0x08
#define GPCR	0x0C
#define GAFR	0x1C

#define PPDR	0x00
#define PPSR	0x04
#define PPAR	0x08

#define MDREFR_TRASR(n_) (n_ & (0x0000000f))
#define MDREFR_DRI(n_)   ((n_ & (0x00000fff)) << 4)
#define MDREFR_K0DB2 (1 << 18)
#define MDREFR_K1DB2 (1 << 22)
#define MDREFR_K2DB2 (1 << 26)

#define MDREFR_K0RUN (1 << 17)
#define MDREFR_K1RUN (1 << 21)
#define MDREFR_K2RUN (1 << 25)

#define MDREFR_SLFRSH (1 << 31)
#define MDREFR_E1PIN  (1 << 20)

#define PSSR    0x04
#define PSSR_DH 0x00000008
#define POSR    0x08
#define RCSR    0x04

/*-----------------------------------------------------------------------
 * Setup parameters for the board:
 */
MEM_BASE:	.long	0xa0000000
MEM_START:	.long	0xc0000000
PWR_BASE:	.word	0x90020000
RST_BASE:	.long	0x90030000
PPC_BASE:	.long	0x90060000
GPIO_BASE:	.long	0x90040000
IC_BASE:	.word	0x90050000

cpuspeed:	.word	0xa0
/* calculated from old blob bootloader */
mdcnfg:	.long	0x00037267	/* mdcnfg  0x00037267 */
mdcas00:	.long	0x5555557f	/* mdcas00 0x5555557f */
mdcas01:	.long	0x55555555	/* mdcas01 0x55555555 */
mdcas02:	.long	0x55555555	/* mdcas02 0x55555555 */
msc0:	.long	0xfff04f78		/* msc0    0xfff04f78 */
msc1:	.long	0xfff8fff0		/* msc1    0xfff8fff0 */
mecr:	.long	0x98c698c6	/* mecr    0x98c698c6 */
mdrefr:	.long	0x067600c7	/* mdrefr  0x04340327 */
mdcas20:	.long	0xd1284142	/* mdcas20 0xd1284142 */
mdcas21:	.long	0x72249529	/* mdcas21 0x72249529 */
mdcas22:	.long	0x78414351	/* mdcas22 0x78414351 */
msc2:	.long	0x201d2959		/* msc2    0x201d2959 */
smcnfg:	.long	0x00000000	/* smcnfg  0x00000000 */

pin_set_out:	.long	0x37ff70
pin_set_dir:	.long	0x11480

gpdr_set:	.long	0x0B3A0900
gpsr_set:	.long	0x02100800
gpcr_set:	.long	0x092A0100
gafr_set:	.long	0x08600000

.globl lowlevel_init
lowlevel_init:


	/* this is required for flashing */
	ldr	r0, PPC_BASE
	ldr	r1, pin_set_out
	str	r1, [r0, #PPSR]
	ldr	r1, pin_set_dir
	str	r1, [r0, #PPDR]

	/* Setting up the memory and stuff */
	/***********************************/

	ldr	r0, MEM_BASE

	ldr	r1, mdcnfg
	str	r1, [r0, #MDCNFG]
	ldr	r1, mdcas00
	str	r1, [r0, #MDCAS00]
	ldr	r1, mdcas01
	str	r1, [r0, #MDCAS01]
	ldr	r1, mdcas02
	str	r1, [r0, #MDCAS02]
	ldr	r1, mdcas20
	str	r1, [r0, #MDCAS20]
	ldr	r1, mdcas21
	str	r1, [r0, #MDCAS21]
	ldr	r1, mdcas22
	str	r1, [r0, #MDCAS22]

	/* clear kxDB2 */
	ldr	r2, [r0, #MDREFR]
	bic	r2, r2, #MDREFR_K0DB2
	bic	r2, r2, #MDREFR_K1DB2
	bic	r2, r2, #MDREFR_K2DB2
	str	r2, [r0, #MDREFR]

	ldr	r2, [r0, #MDREFR]
	orr r2, r2, #MDREFR_TRASR(7)

	mov r4, #0x2000
	spin:	subs	r4, r4, #1
	bne	spin

	ldr	r1, PWR_BASE
	mov	r2, #PSSR_DH
	str	r2, [r1, #PSSR]

	ldr	r2, [r0, #MDREFR]
	bic	r2, r2, #MDREFR_K0DB2
	bic	r2, r2, #MDREFR_K1DB2
	bic	r2, r2, #MDREFR_K2DB2
	str	r2, [r0, #MDREFR]

	ldr	r2, [r0, #MDREFR]
	orr	r2, r2, #MDREFR_TRASR(7)
	orr	r2, r2, #MDREFR_DRI(12)
	orr	r2, r2, #MDREFR_K0DB2
	orr	r2, r2, #MDREFR_K1DB2
	orr	r2, r2, #MDREFR_K2DB2
	str	r2, [r0, #MDREFR]

	ldr	r2, [r0, #MDREFR]
	orr	r2, r2, #MDREFR_K0RUN
	orr	r2, r2, #MDREFR_K1RUN
	orr	r2, r2, #MDREFR_K2RUN
	str	r2, [r0, #MDREFR]

	ldr	r2, [r0, #MDREFR]
	bic	r2, r2, #MDREFR_SLFRSH
	str	r2, [r0, #MDREFR]

	ldr	r2, [r0, #MDREFR]
	orr	r2, r2, #MDREFR_E1PIN
	str	r2, [r0, #MDREFR]

	ldr	r2, MEM_START
.rept	8
	ldr	r3, [r2]
.endr

	ldr	r2, [r0, #MDCNFG]
	orr	r2, r2, #0x00000003
	orr	r2, r2, #0x00030000
	str	r2, [r0, #MDCNFG]

	ldr	r1, msc0
	str	r1, [r0, #MSC0]
	ldr	r1, msc1
	str	r1, [r0, #MSC1]
	ldr	r1, msc2
	str	r1, [r0, #MSC2]
	ldr	r1, smcnfg
	str	r1, [r0, #SMCNFG]
	ldr	r1, mecr
	str	r1, [r0, #MECR]

	mov	pc, lr
