693 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			693 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
/* SPDX-License-Identifier: GPL-2.0+ */
 | 
						|
/*
 | 
						|
 * Low-level board setup code for TI DaVinci SoC based boards.
 | 
						|
 *
 | 
						|
 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
 | 
						|
 *
 | 
						|
 * Partially based on TI sources, original copyrights follow:
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Board specific setup info
 | 
						|
 *
 | 
						|
 * (C) Copyright 2003
 | 
						|
 * Texas Instruments, <www.ti.com>
 | 
						|
 * Kshitij Gupta <Kshitij@ti.com>
 | 
						|
 *
 | 
						|
 * Modified for OMAP 1610 H2 board by Nishant Kamat, Jan 2004
 | 
						|
 *
 | 
						|
 * Modified for OMAP 5912 OSK board by Rishi Bhattacharya, Apr 2004
 | 
						|
 *
 | 
						|
 * Modified for DV-EVM board by Rishi Bhattacharya, Apr 2005
 | 
						|
 *
 | 
						|
 * Modified for DV-EVM board by Swaminathan S, Nov 2005
 | 
						|
 */
 | 
						|
 | 
						|
#include <config.h>
 | 
						|
 | 
						|
#define MDSTAT_STATE	0x3f
 | 
						|
 | 
						|
.globl	lowlevel_init
 | 
						|
lowlevel_init:
 | 
						|
#ifdef CONFIG_SOC_DM644X
 | 
						|
 | 
						|
	/*-------------------------------------------------------*
 | 
						|
	 * Mask all IRQs by setting all bits in the EINT default *
 | 
						|
	 *-------------------------------------------------------*/
 | 
						|
	mov	r1, $0
 | 
						|
	ldr	r0, =EINT_ENABLE0
 | 
						|
	str	r1, [r0]
 | 
						|
	ldr	r0, =EINT_ENABLE1
 | 
						|
	str	r1, [r0]
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * Put the GEM in reset					*
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
 | 
						|
	/* Put the GEM in reset */
 | 
						|
	ldr	r8, PSC_GEM_FLAG_CLEAR
 | 
						|
	ldr	r6, MDCTL_GEM
 | 
						|
	ldr	r7, [r6]
 | 
						|
	and	r7, r7, r8
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Enable the Power Domain Transition Command */
 | 
						|
	ldr	r6, PTCMD
 | 
						|
	ldr	r7, [r6]
 | 
						|
	orr	r7, r7, $0x02
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Check for Transition Complete(PTSTAT) */
 | 
						|
checkStatClkStopGem:
 | 
						|
	ldr	r6, PTSTAT
 | 
						|
	ldr	r7, [r6]
 | 
						|
	ands	r7, r7, $0x02
 | 
						|
	bne	checkStatClkStopGem
 | 
						|
 | 
						|
	/* Check for GEM Reset Completion */
 | 
						|
checkGemStatClkStop:
 | 
						|
	ldr	r6, MDSTAT_GEM
 | 
						|
	ldr	r7, [r6]
 | 
						|
	ands	r7, r7, $0x100
 | 
						|
	bne	checkGemStatClkStop
 | 
						|
 | 
						|
	/* Do this for enabling a WDT initiated reset this is a workaround
 | 
						|
	   for a chip bug.  Not required under normal situations */
 | 
						|
	ldr	r6, P1394
 | 
						|
	mov	r10, $0
 | 
						|
	str	r10, [r6]
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * Enable L1 & L2 Memories in Fast mode                 *
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
	ldr	r6, DFT_ENABLE
 | 
						|
	mov	r10, $0x01
 | 
						|
	str	r10, [r6]
 | 
						|
 | 
						|
	ldr	r6, MMARG_BRF0
 | 
						|
	ldr	r10, MMARG_BRF0_VAL
 | 
						|
	str	r10, [r6]
 | 
						|
 | 
						|
	ldr	r6, DFT_ENABLE
 | 
						|
	mov	r10, $0
 | 
						|
	str	r10, [r6]
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * DDR2 PLL Initialization				*
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
 | 
						|
	/* Select the Clock Mode Depending on the Value written in the Boot Table by the run script */
 | 
						|
	mov	r10, $0
 | 
						|
	ldr	r6, PLL2_CTL
 | 
						|
	ldr	r7, PLL_CLKSRC_MASK
 | 
						|
	ldr	r8, [r6]
 | 
						|
	and	r8, r8, r7
 | 
						|
	mov	r9, r10, lsl $8
 | 
						|
	orr	r8, r8, r9
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Select the PLLEN source */
 | 
						|
	ldr	r7, PLL_ENSRC_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Bypass the PLL */
 | 
						|
	ldr	r7, PLL_BYPASS_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Wait for few cycles to allow PLLEN Mux switch properly to bypass Clock */
 | 
						|
	mov	r10, $0x20
 | 
						|
WaitPPL2Loop:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	WaitPPL2Loop
 | 
						|
 | 
						|
	/* Reset the PLL */
 | 
						|
	ldr	r7, PLL_RESET_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Power up the PLL */
 | 
						|
	ldr	r7, PLL_PWRUP_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Enable the PLL from Disable Mode */
 | 
						|
	ldr	r7, PLL_DISABLE_ENABLE_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Program the PLL Multiplier */
 | 
						|
	ldr	r6, PLL2_PLLM
 | 
						|
	mov	r2, $0x17	/* 162 MHz */
 | 
						|
	str	r2, [r6]
 | 
						|
 | 
						|
	/* Program the PLL2 Divisor Value */
 | 
						|
	ldr	r6, PLL2_DIV2
 | 
						|
	mov	r3, $0x01
 | 
						|
	str	r3, [r6]
 | 
						|
 | 
						|
	/* Program the PLL2 Divisor Value */
 | 
						|
	ldr	r6, PLL2_DIV1
 | 
						|
	mov	r4, $0x0b	/* 54 MHz */
 | 
						|
	str	r4, [r6]
 | 
						|
 | 
						|
	/* PLL2 DIV2 MMR */
 | 
						|
	ldr	r8, PLL2_DIV_MASK
 | 
						|
	ldr	r6, PLL2_DIV2
 | 
						|
	ldr	r9, [r6]
 | 
						|
	and	r8, r8, r9
 | 
						|
	mov	r9, $0x01
 | 
						|
	mov	r9, r9, lsl $15
 | 
						|
	orr	r8, r8, r9
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Program the GOSET bit to take new divider values */
 | 
						|
	ldr	r6, PLL2_PLLCMD
 | 
						|
	ldr	r7, [r6]
 | 
						|
	orr	r7, r7, $0x01
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Wait for Done */
 | 
						|
	ldr	r6, PLL2_PLLSTAT
 | 
						|
doneLoop_0:
 | 
						|
	ldr	r7, [r6]
 | 
						|
	ands	r7, r7, $0x01
 | 
						|
	bne	doneLoop_0
 | 
						|
 | 
						|
	/* PLL2 DIV1 MMR */
 | 
						|
	ldr	r8, PLL2_DIV_MASK
 | 
						|
	ldr	r6, PLL2_DIV1
 | 
						|
	ldr	r9, [r6]
 | 
						|
	and	r8, r8, r9
 | 
						|
	mov	r9, $0x01
 | 
						|
	mov	r9, r9, lsl $15
 | 
						|
	orr	r8, r8, r9
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Program the GOSET bit to take new divider values */
 | 
						|
	ldr	r6, PLL2_PLLCMD
 | 
						|
	ldr	r7, [r6]
 | 
						|
	orr	r7, r7, $0x01
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Wait for Done */
 | 
						|
	ldr	r6, PLL2_PLLSTAT
 | 
						|
doneLoop:
 | 
						|
	ldr	r7, [r6]
 | 
						|
	ands	r7, r7, $0x01
 | 
						|
	bne	doneLoop
 | 
						|
 | 
						|
	/* Wait for PLL to Reset Properly */
 | 
						|
	mov	r10, $0x218
 | 
						|
ResetPPL2Loop:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	ResetPPL2Loop
 | 
						|
 | 
						|
	/* Bring PLL out of Reset */
 | 
						|
	ldr	r6, PLL2_CTL
 | 
						|
	ldr	r8, [r6]
 | 
						|
	orr	r8, r8, $0x08
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Wait for PLL to Lock */
 | 
						|
	ldr	r10, PLL_LOCK_COUNT
 | 
						|
PLL2Lock:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	PLL2Lock
 | 
						|
 | 
						|
	/* Enable the PLL */
 | 
						|
	ldr	r6, PLL2_CTL
 | 
						|
	ldr	r8, [r6]
 | 
						|
	orr	r8, r8, $0x01
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * Issue Soft Reset to DDR Module			*
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
 | 
						|
	/* Shut down the DDR2 LPSC Module */
 | 
						|
	ldr	r8, PSC_FLAG_CLEAR
 | 
						|
	ldr	r6, MDCTL_DDR2
 | 
						|
	ldr	r7, [r6]
 | 
						|
	and	r7, r7, r8
 | 
						|
	orr	r7, r7, $0x03
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Enable the Power Domain Transition Command */
 | 
						|
	ldr	r6, PTCMD
 | 
						|
	ldr	r7, [r6]
 | 
						|
	orr	r7, r7, $0x01
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Check for Transition Complete(PTSTAT) */
 | 
						|
checkStatClkStop:
 | 
						|
	ldr	r6, PTSTAT
 | 
						|
	ldr	r7, [r6]
 | 
						|
	ands	r7, r7, $0x01
 | 
						|
	bne	checkStatClkStop
 | 
						|
 | 
						|
	/* Check for DDR2 Controller Enable Completion */
 | 
						|
checkDDRStatClkStop:
 | 
						|
	ldr	r6, MDSTAT_DDR2
 | 
						|
	ldr	r7, [r6]
 | 
						|
	and	r7, r7, $MDSTAT_STATE
 | 
						|
	cmp	r7, $0x03
 | 
						|
	bne	checkDDRStatClkStop
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * Program DDR2 MMRs for 162MHz Setting			*
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
 | 
						|
	/* Program PHY Control Register */
 | 
						|
	ldr	r6, DDRCTL
 | 
						|
	ldr	r7, DDRCTL_VAL
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Program SDRAM Bank Config Register */
 | 
						|
	ldr	r6, SDCFG
 | 
						|
	ldr	r7, SDCFG_VAL
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Program SDRAM TIM-0 Config Register */
 | 
						|
	ldr	r6, SDTIM0
 | 
						|
	ldr	r7, SDTIM0_VAL_162MHz
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Program SDRAM TIM-1 Config Register */
 | 
						|
	ldr	r6, SDTIM1
 | 
						|
	ldr	r7, SDTIM1_VAL_162MHz
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Program the SDRAM Bank Config Control Register */
 | 
						|
	ldr	r10, MASK_VAL
 | 
						|
	ldr	r8, SDCFG
 | 
						|
	ldr	r9, SDCFG_VAL
 | 
						|
	and	r9, r9, r10
 | 
						|
	str	r9, [r8]
 | 
						|
 | 
						|
	/* Program SDRAM SDREF Config Register */
 | 
						|
	ldr	r6, SDREF
 | 
						|
	ldr	r7, SDREF_VAL
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * Issue Soft Reset to DDR Module			*
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
 | 
						|
	/* Issue a Dummy DDR2 read/write */
 | 
						|
	ldr	r8, DDR2_START_ADDR
 | 
						|
	ldr	r7, DUMMY_VAL
 | 
						|
	str	r7, [r8]
 | 
						|
	ldr	r7, [r8]
 | 
						|
 | 
						|
	/* Shut down the DDR2 LPSC Module */
 | 
						|
	ldr	r8, PSC_FLAG_CLEAR
 | 
						|
	ldr	r6, MDCTL_DDR2
 | 
						|
	ldr	r7, [r6]
 | 
						|
	and	r7, r7, r8
 | 
						|
	orr	r7, r7, $0x01
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Enable the Power Domain Transition Command */
 | 
						|
	ldr	r6, PTCMD
 | 
						|
	ldr	r7, [r6]
 | 
						|
	orr	r7, r7, $0x01
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Check for Transition Complete(PTSTAT) */
 | 
						|
checkStatClkStop2:
 | 
						|
	ldr	r6, PTSTAT
 | 
						|
	ldr	r7, [r6]
 | 
						|
	ands	r7, r7, $0x01
 | 
						|
	bne	checkStatClkStop2
 | 
						|
 | 
						|
	/* Check for DDR2 Controller Enable Completion */
 | 
						|
checkDDRStatClkStop2:
 | 
						|
	ldr	r6, MDSTAT_DDR2
 | 
						|
	ldr	r7, [r6]
 | 
						|
	and	r7, r7, $MDSTAT_STATE
 | 
						|
	cmp	r7, $0x01
 | 
						|
	bne	checkDDRStatClkStop2
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * Turn DDR2 Controller Clocks On			*
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
 | 
						|
	/* Enable the DDR2 LPSC Module */
 | 
						|
	ldr	r6, MDCTL_DDR2
 | 
						|
	ldr	r7, [r6]
 | 
						|
	orr	r7, r7, $0x03
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Enable the Power Domain Transition Command */
 | 
						|
	ldr	r6, PTCMD
 | 
						|
	ldr	r7, [r6]
 | 
						|
	orr	r7, r7, $0x01
 | 
						|
	str	r7, [r6]
 | 
						|
 | 
						|
	/* Check for Transition Complete(PTSTAT) */
 | 
						|
checkStatClkEn2:
 | 
						|
	ldr	r6, PTSTAT
 | 
						|
	ldr	r7, [r6]
 | 
						|
	ands	r7, r7, $0x01
 | 
						|
	bne	checkStatClkEn2
 | 
						|
 | 
						|
	/* Check for DDR2 Controller Enable Completion */
 | 
						|
checkDDRStatClkEn2:
 | 
						|
	ldr	r6, MDSTAT_DDR2
 | 
						|
	ldr	r7, [r6]
 | 
						|
	and	r7, r7, $MDSTAT_STATE
 | 
						|
	cmp	r7, $0x03
 | 
						|
	bne	checkDDRStatClkEn2
 | 
						|
 | 
						|
	/*  DDR Writes and Reads */
 | 
						|
	ldr	r6, CFGTEST
 | 
						|
	mov	r3, $0x01
 | 
						|
	str	r3, [r6]
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * System PLL Initialization				*
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
 | 
						|
	/* Select the Clock Mode Depending on the Value written in the Boot Table by the run script */
 | 
						|
	mov	r2, $0
 | 
						|
	ldr	r6, PLL1_CTL
 | 
						|
	ldr	r7, PLL_CLKSRC_MASK
 | 
						|
	ldr	r8, [r6]
 | 
						|
	and	r8, r8, r7
 | 
						|
	mov	r9, r2, lsl $8
 | 
						|
	orr	r8, r8, r9
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Select the PLLEN source */
 | 
						|
	ldr	r7, PLL_ENSRC_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Bypass the PLL */
 | 
						|
	ldr	r7, PLL_BYPASS_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Wait for few cycles to allow PLLEN Mux switch properly to bypass Clock */
 | 
						|
	mov	r10, $0x20
 | 
						|
 | 
						|
WaitLoop:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	WaitLoop
 | 
						|
 | 
						|
	/* Reset the PLL */
 | 
						|
	ldr	r7, PLL_RESET_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Disable the PLL */
 | 
						|
	orr	r8, r8, $0x10
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Power up the PLL */
 | 
						|
	ldr	r7, PLL_PWRUP_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Enable the PLL from Disable Mode */
 | 
						|
	ldr	r7, PLL_DISABLE_ENABLE_MASK
 | 
						|
	and	r8, r8, r7
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Program the PLL Multiplier */
 | 
						|
	ldr	r6, PLL1_PLLM
 | 
						|
	mov	r3, $0x15	/* For 594MHz */
 | 
						|
	str	r3, [r6]
 | 
						|
 | 
						|
	/* Wait for PLL to Reset Properly */
 | 
						|
	mov	r10, $0xff
 | 
						|
 | 
						|
ResetLoop:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	ResetLoop
 | 
						|
 | 
						|
	/* Bring PLL out of Reset */
 | 
						|
	ldr	r6, PLL1_CTL
 | 
						|
	orr	r8, r8, $0x08
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	/* Wait for PLL to Lock */
 | 
						|
	ldr	r10, PLL_LOCK_COUNT
 | 
						|
 | 
						|
PLL1Lock:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	PLL1Lock
 | 
						|
 | 
						|
	/* Enable the PLL */
 | 
						|
	orr	r8, r8, $0x01
 | 
						|
	str	r8, [r6]
 | 
						|
 | 
						|
	nop
 | 
						|
	nop
 | 
						|
	nop
 | 
						|
	nop
 | 
						|
 | 
						|
	/*------------------------------------------------------*
 | 
						|
	 * AEMIF configuration for NOR Flash (double check)     *
 | 
						|
	 *------------------------------------------------------*/
 | 
						|
	ldr	r0, _PINMUX0
 | 
						|
	ldr	r1, _DEV_SETTING
 | 
						|
	str	r1, [r0]
 | 
						|
 | 
						|
	ldr	r0, WAITCFG
 | 
						|
	ldr	r1, WAITCFG_VAL
 | 
						|
	ldr	r2, [r0]
 | 
						|
	orr	r2, r2, r1
 | 
						|
	str	r2, [r0]
 | 
						|
 | 
						|
	ldr	r0, ACFG3
 | 
						|
	ldr	r1, ACFG3_VAL
 | 
						|
	ldr	r2, [r0]
 | 
						|
	and	r1, r2, r1
 | 
						|
	str	r1, [r0]
 | 
						|
 | 
						|
	ldr	r0, ACFG4
 | 
						|
	ldr	r1, ACFG4_VAL
 | 
						|
	ldr	r2, [r0]
 | 
						|
	and	r1, r2, r1
 | 
						|
	str	r1, [r0]
 | 
						|
 | 
						|
	ldr	r0, ACFG5
 | 
						|
	ldr	r1, ACFG5_VAL
 | 
						|
	ldr	r2, [r0]
 | 
						|
	and	r1, r2, r1
 | 
						|
	str	r1, [r0]
 | 
						|
 | 
						|
	/*--------------------------------------*
 | 
						|
	 * VTP manual Calibration               *
 | 
						|
	 *--------------------------------------*/
 | 
						|
	ldr	r0, VTPIOCR
 | 
						|
	ldr	r1, VTP_MMR0
 | 
						|
	str	r1, [r0]
 | 
						|
 | 
						|
	ldr	r0, VTPIOCR
 | 
						|
	ldr	r1, VTP_MMR1
 | 
						|
	str	r1, [r0]
 | 
						|
 | 
						|
	/* Wait for 33 VTP CLK cycles.  VRP operates at 27 MHz */
 | 
						|
	ldr	r10, VTP_LOCK_COUNT
 | 
						|
VTPLock:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	VTPLock
 | 
						|
 | 
						|
	ldr	r6, DFT_ENABLE
 | 
						|
	mov	r10, $0x01
 | 
						|
	str	r10, [r6]
 | 
						|
 | 
						|
	ldr	r6, DDRVTPR
 | 
						|
	ldr	r7, [r6]
 | 
						|
	mov	r8, r7, LSL #32-10
 | 
						|
	mov	r8, r8, LSR #32-10        /* grab low 10 bits  */
 | 
						|
	ldr	r7, VTP_RECAL
 | 
						|
	orr	r8, r7, r8
 | 
						|
	ldr	r7, VTP_EN
 | 
						|
	orr	r8, r7, r8
 | 
						|
	str	r8, [r0]
 | 
						|
 | 
						|
 | 
						|
	/* Wait for 33 VTP CLK cycles.  VRP operates at 27 MHz */
 | 
						|
	ldr	r10, VTP_LOCK_COUNT
 | 
						|
VTP1Lock:
 | 
						|
	subs	r10, r10, $1
 | 
						|
	bne	VTP1Lock
 | 
						|
 | 
						|
	ldr	r1, [r0]
 | 
						|
	ldr	r2, VTP_MASK
 | 
						|
	and	r2, r1, r2
 | 
						|
	str	r2, [r0]
 | 
						|
 | 
						|
	ldr	r6, DFT_ENABLE
 | 
						|
	mov	r10, $0
 | 
						|
	str	r10, [r6]
 | 
						|
 | 
						|
	/*
 | 
						|
	 * Call board-specific lowlevel init.
 | 
						|
	 * That MUST be present and THAT returns
 | 
						|
	 * back to arch calling code with "mov pc, lr."
 | 
						|
	 */
 | 
						|
	b	dv_board_init
 | 
						|
 | 
						|
.ltorg
 | 
						|
 | 
						|
_PINMUX0:
 | 
						|
	.word	0x01c40000		/* Device Configuration Registers */
 | 
						|
_PINMUX1:
 | 
						|
	.word	0x01c40004		/* Device Configuration Registers */
 | 
						|
 | 
						|
_DEV_SETTING:
 | 
						|
	.word	0x00000c1f
 | 
						|
 | 
						|
WAITCFG:
 | 
						|
	.word	0x01e00004
 | 
						|
WAITCFG_VAL:
 | 
						|
	.word	0
 | 
						|
ACFG3:
 | 
						|
	.word	0x01e00014
 | 
						|
ACFG3_VAL:
 | 
						|
	.word	0x3ffffffd
 | 
						|
ACFG4:
 | 
						|
	.word	0x01e00018
 | 
						|
ACFG4_VAL:
 | 
						|
	.word	0x3ffffffd
 | 
						|
ACFG5:
 | 
						|
	.word	0x01e0001c
 | 
						|
ACFG5_VAL:
 | 
						|
	.word	0x3ffffffd
 | 
						|
 | 
						|
MDCTL_DDR2:
 | 
						|
	.word	0x01c41a34
 | 
						|
MDSTAT_DDR2:
 | 
						|
	.word	0x01c41834
 | 
						|
 | 
						|
PTCMD:
 | 
						|
	.word	0x01c41120
 | 
						|
PTSTAT:
 | 
						|
	.word	0x01c41128
 | 
						|
 | 
						|
EINT_ENABLE0:
 | 
						|
	.word	0x01c48018
 | 
						|
EINT_ENABLE1:
 | 
						|
	.word	0x01c4801c
 | 
						|
 | 
						|
PSC_FLAG_CLEAR:
 | 
						|
	.word	0xffffffe0
 | 
						|
PSC_GEM_FLAG_CLEAR:
 | 
						|
	.word	0xfffffeff
 | 
						|
 | 
						|
/* DDR2 MMR & CONFIGURATION VALUES, 162 MHZ clock */
 | 
						|
DDRCTL:
 | 
						|
	.word	0x200000e4
 | 
						|
DDRCTL_VAL:
 | 
						|
	.word	0x50006405
 | 
						|
SDREF:
 | 
						|
	.word	0x2000000c
 | 
						|
SDREF_VAL:
 | 
						|
	.word	0x000005c3
 | 
						|
SDCFG:
 | 
						|
	.word	0x20000008
 | 
						|
SDCFG_VAL:
 | 
						|
#ifdef	DDR_4BANKS
 | 
						|
	.word	0x00178622
 | 
						|
#elif defined DDR_8BANKS
 | 
						|
	.word	0x00178632
 | 
						|
#else
 | 
						|
#error "Unknown DDR configuration!!!"
 | 
						|
#endif
 | 
						|
SDTIM0:
 | 
						|
	.word	0x20000010
 | 
						|
SDTIM0_VAL_162MHz:
 | 
						|
	.word	0x28923211
 | 
						|
SDTIM1:
 | 
						|
	.word	0x20000014
 | 
						|
SDTIM1_VAL_162MHz:
 | 
						|
	.word	0x0016c722
 | 
						|
VTPIOCR:
 | 
						|
	.word	0x200000f0	/* VTP IO Control register */
 | 
						|
DDRVTPR:
 | 
						|
	.word	0x01c42030	/* DDR VPTR MMR */
 | 
						|
VTP_MMR0:
 | 
						|
	.word	0x201f
 | 
						|
VTP_MMR1:
 | 
						|
	.word	0xa01f
 | 
						|
DFT_ENABLE:
 | 
						|
	.word	0x01c4004c
 | 
						|
VTP_LOCK_COUNT:
 | 
						|
	.word	0x5b0
 | 
						|
VTP_MASK:
 | 
						|
	.word	0xffffdfff
 | 
						|
VTP_RECAL:
 | 
						|
	.word	0x08000
 | 
						|
VTP_EN:
 | 
						|
	.word	0x02000
 | 
						|
CFGTEST:
 | 
						|
	.word	0x80010000
 | 
						|
MASK_VAL:
 | 
						|
	.word	0x00000fff
 | 
						|
 | 
						|
/* GEM Power Up & LPSC Control Register */
 | 
						|
MDCTL_GEM:
 | 
						|
	.word	0x01c41a9c
 | 
						|
MDSTAT_GEM:
 | 
						|
	.word	0x01c4189c
 | 
						|
 | 
						|
/* For WDT reset chip bug */
 | 
						|
P1394:
 | 
						|
	.word	0x01c41a20
 | 
						|
 | 
						|
PLL_CLKSRC_MASK:
 | 
						|
	.word	0xfffffeff	/* Mask the Clock Mode bit */
 | 
						|
PLL_ENSRC_MASK:
 | 
						|
	.word	0xffffffdf	/* Select the PLLEN source */
 | 
						|
PLL_BYPASS_MASK:
 | 
						|
	.word	0xfffffffe	/* Put the PLL in BYPASS */
 | 
						|
PLL_RESET_MASK:
 | 
						|
	.word	0xfffffff7	/* Put the PLL in Reset Mode */
 | 
						|
PLL_PWRUP_MASK:
 | 
						|
	.word	0xfffffffd	/* PLL Power up Mask Bit  */
 | 
						|
PLL_DISABLE_ENABLE_MASK:
 | 
						|
	.word	0xffffffef	/* Enable the PLL from Disable */
 | 
						|
PLL_LOCK_COUNT:
 | 
						|
	.word	0x2000
 | 
						|
 | 
						|
/* PLL1-SYSTEM PLL MMRs */
 | 
						|
PLL1_CTL:
 | 
						|
	.word	0x01c40900
 | 
						|
PLL1_PLLM:
 | 
						|
	.word	0x01c40910
 | 
						|
 | 
						|
/* PLL2-SYSTEM PLL MMRs */
 | 
						|
PLL2_CTL:
 | 
						|
	.word	0x01c40d00
 | 
						|
PLL2_PLLM:
 | 
						|
	.word	0x01c40d10
 | 
						|
PLL2_DIV1:
 | 
						|
	.word	0x01c40d18
 | 
						|
PLL2_DIV2:
 | 
						|
	.word	0x01c40d1c
 | 
						|
PLL2_PLLCMD:
 | 
						|
	.word	0x01c40d38
 | 
						|
PLL2_PLLSTAT:
 | 
						|
	.word	0x01c40d3c
 | 
						|
PLL2_DIV_MASK:
 | 
						|
	.word	0xffff7fff
 | 
						|
 | 
						|
MMARG_BRF0:
 | 
						|
	.word	0x01c42010	/* BRF margin mode 0 (R/W)*/
 | 
						|
MMARG_BRF0_VAL:
 | 
						|
	.word	0x00444400
 | 
						|
 | 
						|
DDR2_START_ADDR:
 | 
						|
	.word	0x80000000
 | 
						|
DUMMY_VAL:
 | 
						|
	.word	0xa55aa55a
 | 
						|
#else /* CONFIG_SOC_DM644X */
 | 
						|
	mov pc, lr
 | 
						|
#endif
 |