2010-11-04 03:53:28 -05:00
|
|
|
# Generic init scripts for all ST SPEAr3xx family
|
|
|
|
# http://www.st.com/spear
|
|
|
|
#
|
|
|
|
# Date: 2010-09-23
|
|
|
|
# Author: Antonio Borneo <borneo.antonio@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
# Initialize internal clock
|
|
|
|
# Default:
|
|
|
|
# - Crystal = 24 MHz
|
|
|
|
# - PLL1 = 332 MHz
|
|
|
|
# - PLL2 = 332 MHz
|
|
|
|
# - CPU_CLK = 332 MHz
|
|
|
|
# - DDR_CLK = 332 MHz async
|
|
|
|
# - HCLK = 166 MHz
|
|
|
|
# - PCLK = 83 MHz
|
|
|
|
proc sp3xx_clock_default {} {
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca00000 0x00000002 ;# set sysclk slow
|
|
|
|
mww 0xfca00014 0x0ffffff8 ;# set pll timeout to minimum (100us ?!?)
|
2010-11-04 03:53:28 -05:00
|
|
|
|
|
|
|
# DDRCORE disable to change frequency
|
|
|
|
set val [expr ([mrw 0xfca8002c] & ~0x20000000) | 0x40000000]
|
|
|
|
mww 0xfca8002c $val
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca8002c $val ;# Yes, write twice!
|
2010-11-04 03:53:28 -05:00
|
|
|
|
|
|
|
# programming PLL1
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca8000c 0xa600010c ;# M=166 P=1 N=12
|
|
|
|
mww 0xfca80008 0x00001c0a ;# power down
|
|
|
|
mww 0xfca80008 0x00001c0e ;# enable
|
|
|
|
mww 0xfca80008 0x00001c06 ;# strobe
|
2010-11-04 03:53:28 -05:00
|
|
|
mww 0xfca80008 0x00001c0e
|
|
|
|
while { [expr [mrw 0xfca80008] & 0x01] == 0x00 } { sleep 1 }
|
|
|
|
|
|
|
|
# programming PLL2
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca80018 0xa600010c ;# M=166, P=1, N=12
|
|
|
|
mww 0xfca80014 0x00001c0a ;# power down
|
|
|
|
mww 0xfca80014 0x00001c0e ;# enable
|
|
|
|
mww 0xfca80014 0x00001c06 ;# strobe
|
2010-11-04 03:53:28 -05:00
|
|
|
mww 0xfca80014 0x00001c0e
|
|
|
|
while { [expr [mrw 0xfca80014] & 0x01] == 0x00 } { sleep 1 }
|
|
|
|
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca80028 0x00000082 ;# enable plltimeen
|
|
|
|
mww 0xfca80024 0x00000511 ;# set hclkdiv="/2" & pclkdiv="/2"
|
2010-11-04 03:53:28 -05:00
|
|
|
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca00000 0x00000004 ;# setting SYSCTL to NORMAL mode
|
2010-11-04 03:53:28 -05:00
|
|
|
while { [expr [mrw 0xfca00000] & 0x20] != 0x20 } { sleep 1 }
|
|
|
|
|
|
|
|
# Select source of DDR clock
|
|
|
|
#mmw 0xfca80020 0x10000000 0x70000000 ;# PLL1
|
|
|
|
mmw 0xfca80020 0x30000000 0x70000000 ;# PLL2
|
|
|
|
|
|
|
|
# DDRCORE enable after change frequency
|
|
|
|
mmw 0xfca8002c 0x20000000 0x00000000
|
|
|
|
}
|
|
|
|
|
|
|
|
proc sp3xx_common_init {} {
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca8002c 0xfffffff8 ;# enable clock of all peripherals
|
|
|
|
mww 0xfca80038 0x00000000 ;# remove reset of all peripherals
|
2010-11-04 03:53:28 -05:00
|
|
|
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca800e4 0x78000008 ;# COMP1V8_REG
|
|
|
|
mww 0xfca800ec 0x78000008 ;# COMP3V3_REG
|
2010-11-04 03:53:28 -05:00
|
|
|
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfca80050 0x00000001 ;# Enable clk mem port 1
|
2010-11-04 03:53:28 -05:00
|
|
|
|
2010-12-18 11:22:53 -06:00
|
|
|
mww 0xfc000000 0x10000f5f ;# init SMI and set HW mode
|
2010-11-04 03:53:28 -05:00
|
|
|
mww 0xfc000000 0x00000f5f
|
|
|
|
|
|
|
|
# Initialize Bus Interconnection Matrix
|
|
|
|
# All ports Round-Robin and lowest priority
|
|
|
|
mww 0xfca8007c 0x80000007
|
|
|
|
mww 0xfca80080 0x80000007
|
|
|
|
mww 0xfca80084 0x80000007
|
|
|
|
mww 0xfca80088 0x80000007
|
|
|
|
mww 0xfca8008c 0x80000007
|
|
|
|
mww 0xfca80090 0x80000007
|
|
|
|
mww 0xfca80094 0x80000007
|
|
|
|
mww 0xfca80098 0x80000007
|
|
|
|
mww 0xfca8009c 0x80000007
|
|
|
|
}
|