/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates

********************************************************************************
Marvell GPL License Option

If you received this File from Marvell, you may opt to use, redistribute and/or 
modify this File in accordance with the terms and conditions of the General 
Public License Version 2, June 1991 (the "GPL License"), a copy of which is 
available along with the File in the license.txt file or by writing to the Free 
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or 
on the worldwide web at http://www.gnu.org/licenses/gpl.txt. 

THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED 
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY 
DISCLAIMED.  The GPL License provides additional details about this warranty 
disclaimer.

*******************************************************************************/

#define MV_ASMLANGUAGE
#include "mvOsAsm.h"
#include <config.h>
#include <version.h>
#include "mvBoardEnvSpec.h"
#include "mvCtrlEnvSpec.h"
#include "mvCpuIfRegs.h"
#include "ddr2/mvDramIfRegs.h"
#include "mvCtrlEnvAsm.h"
#if defined(MV_INC_BOARD_SPI_FLASH)
#include "spi/mvSpiSpec.h"
#endif


/*
  get_board_id - get board id from twsi eeprom
  input : r5 - board id data start offset in the eeprom
        
*/
.globl lowlevel_init

/************************************************/
/*              lowlevel_init                   *
/************************************************/

lowlevel_init:

	/* change reg base to 0xf1000000 */
	ldr     r4, =MV_REGS
	MV_DV_REG_WRITE_ASM(r4, r1, 0x200F0)

	/* save Link Registers */
	mov	r2, lr

	/* Check if L2 exists in Sample-At-Reset register */
	MV_REG_READ_ASM(r4, r1, 0x18230)
	and     r1, r1, #0x40000000
	cmp     r1, #0x0

	/* invalidate L2 cache */
	mov	r0, #0
	mcr	p15, 1, r0, c15, c11, 0

/*
	ldr     r4, =0x1b1b1b9b
	MV_REG_WRITE_ASM(r4, r1, 0x100e0)
	ldr     r4, =0xbbbbbbbb
	MV_REG_WRITE_ASM(r4, r1, 0x20134)
	ldr     r4, =0x00bbbbbb
	MV_REG_WRITE_ASM(r4, r1, 0x20138)
*/
l2_not_exist:
	bl      _i2cInit

	/* Initialize BUS-L to DDR configuration parameters     */
	/* Must be done prior to DDR operation                  */
#if !defined(MV_BOOTROM)
	bl      _mvCpuIfPreInit
#endif

#if defined(MV_INC_BOARD_SPI_FLASH)
	/* configure the Prescale of SPI clk Tclk = 166MHz */
	MV_REG_READ_ASM (r6, r1, MV_SPI_IF_CONFIG_REG(0))
	and	r6, r6, #~MV_SPI_CLK_PRESCALE_MASK
	orr	r6, r6, #0x14
	MV_REG_WRITE_ASM (r6, r1, MV_SPI_IF_CONFIG_REG(0))
#endif

#if !defined(MV_INC_BOARD_DDIM)
#if !defined(MV_BOOTROM)
        /* Call DRAM static initialization */
	bl	_mvDramIfStaticInit
#else
	b	done
#endif
#else /* #if !defined(MV_INC_BOARD_DDIM) */

        /* Call DRAM basic initialization to allow C runtime stack */
	bl	_mvDramIfBasicInit 

	b	done
#endif /* #if !defined(MV_INC_BOARD_DDIM) */
done:
	mov	lr, r2	
	mov pc, lr
