/*
 * Copyright (C) 2007,2008 Nobuhiro Iwamatsu
 *
 * u-boot/board/r7780mp/lowlevel_init.S
 *
 * 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/processor.h>

/*
 * Board specific low level init code, called _very_ early in the
 * startup sequence. Relocation to SDRAM has not happened yet, no
 * stack is available, bss section has not been initialised, etc.
 *
 * (Note: As no stack is available, no subroutines can be called...).
 */

	.global	lowlevel_init

	.text
	.align	2

lowlevel_init:

	mov.l	CCR_A, r1	/* Address of Cache Control Register */
	mov.l	CCR_D, r0	/* Instruction Cache Invalidate */
	mov.l	r0, @r1

	mov.l	FRQCR_A, r1	/* Frequency control register */
	mov.l	FRQCR_D, r0
	mov.l	r0, @r1

	/* pin_multi_setting */
	mov.l	BBG_PMMR_A, r1
	mov.l	BBG_PMMR_D_PMSR1, r0
	mov.l	r0, @r1

	mov.l	BBG_PMSR1_A, r1
	mov.l	BBG_PMSR1_D, r0
	mov.l	r0, @r1

	mov.l	BBG_PMMR_A, r1
	mov.l	BBG_PMMR_D_PMSR2, r0
	mov.l	r0, @r1

	mov.l	BBG_PMSR2_A, r1
	mov.l	BBG_PMSR2_D, r0
	mov.l	r0, @r1

	mov.l	BBG_PMMR_A, r1
	mov.l	BBG_PMMR_D_PMSR3, r0
	mov.l	r0, @r1

	mov.l	BBG_PMSR3_A, r1
	mov.l	BBG_PMSR3_D, r0
	mov.l	r0, @r1

	mov.l	BBG_PMMR_A, r1
	mov.l	BBG_PMMR_D_PMSR4, r0
	mov.l	r0, @r1

	mov.l	BBG_PMSR4_A, r1
	mov.l	BBG_PMSR4_D, r0
	mov.l	r0, @r1

	mov.l	BBG_PMMR_A, r1
	mov.l	BBG_PMMR_D_PMSRG, r0
	mov.l	r0, @r1

	mov.l	BBG_PMSRG_A, r1
	mov.l	BBG_PMSRG_D, r0
	mov.l	r0, @r1

	/* cpg_setting */
	mov.l	FRQCR_A, r1
	mov.l	FRQCR_D, r0
	mov.l	r0, @r1

	mov.l	DLLCSR_A, r1
	mov.l	DLLCSR_D, r0
	mov.l	r0, @r1

	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop

	/* wait 200us */
	mov.l	REPEAT0_R3, r3
	mov	#0, r2
repeat0:
	add	#1, r2
	cmp/hs	r3, r2
	bf	repeat0
	nop

	/* bsc_setting */
	mov.l	MMSELR_A, r1
	mov.l	MMSELR_D, r0
	mov.l	r0, @r1

	mov.l	BCR_A, r1
	mov.l	BCR_D, r0
	mov.l	r0, @r1

	mov.l	CS0BCR_A, r1
	mov.l	CS0BCR_D, r0
	mov.l	r0, @r1

	mov.l	CS1BCR_A, r1
	mov.l	CS1BCR_D, r0
	mov.l	r0, @r1

	mov.l	CS2BCR_A, r1
	mov.l	CS2BCR_D, r0
	mov.l	r0, @r1

	mov.l	CS4BCR_A, r1
	mov.l	CS4BCR_D, r0
	mov.l	r0, @r1

	mov.l	CS5BCR_A, r1
	mov.l	CS5BCR_D, r0
	mov.l	r0, @r1

	mov.l	CS6BCR_A, r1
	mov.l	CS6BCR_D, r0
	mov.l	r0, @r1

	mov.l	CS0WCR_A, r1
	mov.l	CS0WCR_D, r0
	mov.l	r0, @r1

	mov.l	CS1WCR_A, r1
	mov.l	CS1WCR_D, r0
	mov.l	r0, @r1

	mov.l	CS2WCR_A, r1
	mov.l	CS2WCR_D, r0
	mov.l	r0, @r1

	mov.l	CS4WCR_A, r1
	mov.l	CS4WCR_D, r0
	mov.l	r0, @r1

	mov.l	CS5WCR_A, r1
	mov.l	CS5WCR_D, r0
	mov.l	r0, @r1

	mov.l	CS6WCR_A, r1
	mov.l	CS6WCR_D, r0
	mov.l	r0, @r1

	mov.l	CS5PCR_A, r1
	mov.l	CS5PCR_D, r0
	mov.l	r0, @r1

	mov.l	CS6PCR_A, r1
	mov.l	CS6PCR_D, r0
	mov.l	r0, @r1

	/* ddr_setting */
	/* wait 200us */
	mov.l	REPEAT0_R3, r3
	mov	#0, r2
repeat1:
	add	#1, r2
	cmp/hs	r3, r2
	bf	repeat1
	nop

	mov.l	MIM_U_A, r0
	mov.l	MIM_U_D, r1
	synco
	mov.l	r1, @r0
	synco

	mov.l	MIM_L_A, r0
	mov.l	MIM_L_D0, r1
	synco
	mov.l	r1, @r0
	synco

	mov.l	STR_L_A, r0
	mov.l	STR_L_D, r1
	synco
	mov.l	r1, @r0
	synco

	mov.l	SDR_L_A, r0
	mov.l	SDR_L_D, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop
	nop

	mov.l	SCR_L_A, r0
	mov.l	SCR_L_D0, r1
	synco
	mov.l	r1, @r0
	synco

	mov.l	SCR_L_A, r0
	mov.l	SCR_L_D1, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop

	mov.l	EMRS_A, r0
	mov.l	EMRS_D, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop

	mov.l	MRS1_A, r0
	mov.l	MRS1_D, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop

	mov.l	SCR_L_A, r0
	mov.l	SCR_L_D2, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop

	mov.l	SCR_L_A, r0
	mov.l	SCR_L_D3, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop

	mov.l	SCR_L_A, r0
	mov.l	SCR_L_D4, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop

	mov.l	MRS2_A, r0
	mov.l	MRS2_D, r1
	synco
	mov.l	r1, @r0
	synco

	nop
	nop
	nop

	mov.l	SCR_L_A, r0
	mov.l	SCR_L_D5, r1
	synco
	mov.l	r1, @r0
	synco

	/* wait 200us */
	mov.l	REPEAT0_R1, r3
	mov	#0, r2
repeat2:
	add	#1, r2
	cmp/hs	r3, r2
	bf	repeat2

	synco

	mov.l	MIM_L_A, r0
	mov.l	MIM_L_D1, r1
	synco
	mov.l	r1, @r0
	synco

	rts
	nop
	.align	4

RWTCSR_D_1:		.word	0xA507
RWTCSR_D_2:		.word	0xA507
RWTCNT_D:		.word	0x5A00
	.align	2

BBG_PMMR_A:		.long	0xFF800010
BBG_PMSR1_A:		.long	0xFF800014
BBG_PMSR2_A:		.long	0xFF800018
BBG_PMSR3_A:		.long	0xFF80001C
BBG_PMSR4_A:		.long	0xFF800020
BBG_PMSRG_A:		.long	0xFF800024

BBG_PMMR_D_PMSR1:	.long	0xffffbffd
BBG_PMSR1_D:		.long	0x00004002
BBG_PMMR_D_PMSR2:	.long	0xfc21a7ff
BBG_PMSR2_D:		.long	0x03de5800
BBG_PMMR_D_PMSR3:	.long	0xfffffff8
BBG_PMSR3_D:		.long	0x00000007
BBG_PMMR_D_PMSR4:	.long	0xdffdfff9
BBG_PMSR4_D:		.long	0x20020006
BBG_PMMR_D_PMSRG:	.long	0xffffffff
BBG_PMSRG_D:		.long	0x00000000

FRQCR_A:		.long	FRQCR
DLLCSR_A:		.long	0xffc40010
FRQCR_D:		.long	0x40233035
DLLCSR_D:		.long	0x00000000

/* for DDR-SDRAM */
MIM_U_A:		.long	MIM_1
MIM_L_A:		.long	MIM_2
SCR_U_A:		.long	SCR_1
SCR_L_A:		.long	SCR_2
STR_U_A:		.long	STR_1
STR_L_A:		.long	STR_2
SDR_U_A:		.long	SDR_1
SDR_L_A:		.long	SDR_2

EMRS_A:			.long	0xFEC02000
MRS1_A:			.long	0xFEC00B08
MRS2_A:			.long	0xFEC00308

MIM_U_D:		.long	0x00004000
MIM_L_D0:		.long	0x03e80009
MIM_L_D1:		.long	0x03e80209
SCR_L_D0:		.long	0x3
SCR_L_D1:		.long	0x2
SCR_L_D2:		.long	0x2
SCR_L_D3:		.long	0x4
SCR_L_D4:		.long	0x4
SCR_L_D5:		.long	0x0
STR_L_D:		.long	0x000f0000
SDR_L_D:		.long	0x00000400
EMRS_D:			.long	0x0
MRS1_D:			.long	0x0
MRS2_D:			.long	0x0

/* Cache Controller */
CCR_A:			.long	CCR
MMUCR_A:		.long	MMUCR
RWTCNT_A:		.long	WTCNT

CCR_D:			.long	0x0000090b
CCR_D_2:		.long	0x00000103
MMUCR_D:		.long	0x00000004
MSTPCR0_D:		.long	0x00001001
MSTPCR2_D:		.long	0xffffffff

/* local Bus State Controller */
MMSELR_A:		.long	MMSELR
BCR_A:			.long	BCR
CS0BCR_A:		.long	CS0BCR
CS1BCR_A:		.long	CS1BCR
CS2BCR_A:		.long	CS2BCR
CS4BCR_A:		.long	CS4BCR
CS5BCR_A:		.long	CS5BCR
CS6BCR_A:		.long	CS6BCR
CS0WCR_A:		.long	CS0WCR
CS1WCR_A:		.long	CS1WCR
CS2WCR_A:		.long	CS2WCR
CS4WCR_A:		.long	CS4WCR
CS5WCR_A:		.long	CS5WCR
CS6WCR_A:		.long	CS6WCR
CS5PCR_A:		.long	CS5PCR
CS6PCR_A:		.long	CS6PCR

MMSELR_D:		.long	0xA5A50003
BCR_D:			.long	0x00000000
CS0BCR_D:		.long	0x77777770
CS1BCR_D:		.long	0x77777670
CS2BCR_D:		.long	0x77777770
CS4BCR_D:		.long	0x77777770
CS5BCR_D:		.long	0x77777670
CS6BCR_D:		.long	0x77777770
CS0WCR_D:		.long	0x00020006
CS1WCR_D:		.long	0x00232304
CS2WCR_D:		.long	0x7777770F
CS4WCR_D:		.long	0x7777770F
CS5WCR_D:		.long	0x00101006
CS6WCR_D:		.long	0x77777703
CS5PCR_D:		.long	0x77000000
CS6PCR_D:		.long	0x77000000

REPEAT0_R3:		.long	0x00002000
REPEAT0_R1:		.long	0x0000200
