2007-08-10 18:26:18 +00:00
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
* See file CREDITS for list of people who contributed to this
|
|
|
|
* project.
|
|
|
|
*
|
|
|
|
* Modified for DV-EVM board by Rishi Bhattacharya, Apr 2005
|
|
|
|
* See file CREDITS for list of people who contributed to this
|
|
|
|
* project.
|
|
|
|
*
|
|
|
|
* Modified for DV-EVM board by Swaminathan S, Nov 2005
|
|
|
|
* 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>
|
|
|
|
|
|
|
|
.globl lowlevel_init
|
|
|
|
lowlevel_init:
|
|
|
|
|
|
|
|
/*-------------------------------------------------------*
|
|
|
|
* 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]
|
|
|
|
|
|
|
|
/*------------------------------------------------------*
|
2008-05-20 14:00:29 +00:00
|
|
|
* DDR2 PLL Initialization *
|
2007-08-10 18:26:18 +00:00
|
|
|
*------------------------------------------------------*/
|
|
|
|
|
|
|
|
/* 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
|
2008-04-11 13:11:26 +00:00
|
|
|
mov r2, $0x17 /* 162 MHz */
|
2007-08-10 18:26:18 +00:00
|
|
|
str r2, [r6]
|
|
|
|
|
|
|
|
/* Program the PLL2 Divisor Value */
|
|
|
|
ldr r6, PLL2_DIV2
|
2008-04-11 13:11:26 +00:00
|
|
|
mov r3, $0x01
|
2007-08-10 18:26:18 +00:00
|
|
|
str r3, [r6]
|
|
|
|
|
|
|
|
/* Program the PLL2 Divisor Value */
|
|
|
|
ldr r6, PLL2_DIV1
|
2008-04-11 13:11:26 +00:00
|
|
|
mov r4, $0x0b /* 54 MHz */
|
2007-08-10 18:26:18 +00:00
|
|
|
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, $0x1f
|
|
|
|
cmp r7, $0x03
|
|
|
|
bne checkDDRStatClkStop
|
|
|
|
|
|
|
|
/*------------------------------------------------------*
|
2008-04-11 13:11:26 +00:00
|
|
|
* Program DDR2 MMRs for 162MHz Setting *
|
2007-08-10 18:26:18 +00:00
|
|
|
*------------------------------------------------------*/
|
|
|
|
|
|
|
|
/* 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
|
2008-04-11 13:11:26 +00:00
|
|
|
ldr r7, SDTIM0_VAL_162MHz
|
2007-08-10 18:26:18 +00:00
|
|
|
str r7, [r6]
|
|
|
|
|
|
|
|
/* Program SDRAM TIM-1 Config Register */
|
|
|
|
ldr r6, SDTIM1
|
2008-04-11 13:11:26 +00:00
|
|
|
ldr r7, SDTIM1_VAL_162MHz
|
2007-08-10 18:26:18 +00:00
|
|
|
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, $0x1f
|
|
|
|
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, $0x1f
|
|
|
|
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
|
2008-04-11 13:11:26 +00:00
|
|
|
mov r3, $0x15 /* For 594MHz */
|
2007-08-10 18:26:18 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
/*------------------------------------------------------*
|
2008-04-11 13:11:26 +00:00
|
|
|
* AEMIF configuration for NOR Flash (double check) *
|
2007-08-10 18:26:18 +00:00
|
|
|
*------------------------------------------------------*/
|
|
|
|
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]
|
|
|
|
and r7, r7, $0x1f
|
|
|
|
and r8, r7, $0x3e0
|
|
|
|
orr r8, r7, r8
|
|
|
|
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]
|
|
|
|
|
2007-08-10 18:34:58 +00:00
|
|
|
/*
|
2007-08-10 18:26:18 +00:00
|
|
|
* Call board-specific lowlevel init.
|
2008-05-20 14:00:29 +00:00
|
|
|
* That MUST be present and THAT returns
|
2007-08-10 18:26:18 +00:00
|
|
|
* 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:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0x00000c1f
|
2007-08-10 18:26:18 +00:00
|
|
|
|
|
|
|
WAITCFG:
|
|
|
|
.word 0x01e00004
|
|
|
|
WAITCFG_VAL:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0
|
2007-08-10 18:26:18 +00:00
|
|
|
ACFG3:
|
|
|
|
.word 0x01e00014
|
|
|
|
ACFG3_VAL:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0x3ffffffd
|
2007-08-10 18:26:18 +00:00
|
|
|
ACFG4:
|
|
|
|
.word 0x01e00018
|
|
|
|
ACFG4_VAL:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0x3ffffffd
|
2007-08-10 18:26:18 +00:00
|
|
|
ACFG5:
|
|
|
|
.word 0x01e0001c
|
|
|
|
ACFG5_VAL:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0x3ffffffd
|
2007-08-10 18:26:18 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2008-04-11 13:11:26 +00:00
|
|
|
/* DDR2 MMR & CONFIGURATION VALUES, 162 MHZ clock */
|
2007-08-10 18:26:18 +00:00
|
|
|
DDRCTL:
|
|
|
|
.word 0x200000e4
|
|
|
|
DDRCTL_VAL:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0x50006405
|
2007-08-10 18:26:18 +00:00
|
|
|
SDREF:
|
|
|
|
.word 0x2000000c
|
|
|
|
SDREF_VAL:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0x000005c3
|
2007-08-10 18:26:18 +00:00
|
|
|
SDCFG:
|
|
|
|
.word 0x20000008
|
|
|
|
SDCFG_VAL:
|
2008-04-11 13:11:26 +00:00
|
|
|
#ifdef DDR_4BANKS
|
|
|
|
.word 0x00178622
|
|
|
|
#elif defined DDR_8BANKS
|
|
|
|
.word 0x00178632
|
|
|
|
#else
|
|
|
|
#error "Unknown DDR configuration!!!"
|
|
|
|
#endif
|
2007-08-10 18:26:18 +00:00
|
|
|
SDTIM0:
|
|
|
|
.word 0x20000010
|
2008-04-11 13:11:26 +00:00
|
|
|
SDTIM0_VAL_162MHz:
|
|
|
|
.word 0x28923211
|
2007-08-10 18:26:18 +00:00
|
|
|
SDTIM1:
|
|
|
|
.word 0x20000014
|
2008-04-11 13:11:26 +00:00
|
|
|
SDTIM1_VAL_162MHz:
|
|
|
|
.word 0x0016c722
|
2007-08-10 18:26:18 +00:00
|
|
|
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 0x40000
|
|
|
|
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:
|
2008-04-11 13:11:26 +00:00
|
|
|
.word 0x00444400
|
2007-08-10 18:26:18 +00:00
|
|
|
|
|
|
|
DDR2_START_ADDR:
|
|
|
|
.word 0x80000000
|
|
|
|
DUMMY_VAL:
|
|
|
|
.word 0xa55aa55a
|