; --------------------------------------------------------------------------------
; @Title: Initialization script for Freescale MPC8349E-MDS
; @Description: (processor revision 1.x) board (big endian)
; @Keywords: PQIIPro
; @Author: REI
; @Board: MPC8349E-MDS
; @Chip: MPC8349
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: init.cmm 7495 2014-07-29 14:24:45Z rweiss $


;

SYStem.RESet
SYStem.CPU MPC8349
SYStem.Option.SLOWRESET OFF
SYStem.Up

; set IMMR base to 0xE0000000
Data.Set ANC:IOBASE() %Long SD:0xE0000000

; Local Access Windows 
; WINDOW 0 - configuration space - Initially mapped by RCWHR[BMS], relocated to 0xE0000000
Data.Set ANC:IOBASE()+0x0020 %Long ANC:IOBASE()+0x0000 ; LBLAWBAR0  - begining at 0xE0000000

; WINDOW 1 - FLASH
Data.Set ANC:IOBASE()+0x0028 %Long 0xFF800000 ; LBLAWBAR1  - begining at 0xff800000
Data.Set ANC:IOBASE()+0x002C %Long 0x80000016 ; LBLAWAR1   - enable, size = 8MB 

; WINDOW 2 - board BCSRs
Data.Set ANC:IOBASE()+0x0030 %Long 0xF8000000 ; LBLAWBAR2  - begining at 0xf8000000
Data.Set ANC:IOBASE()+0x0034 %Long 0x8000000E ; LBLAWAR2   - enable, size = 32KB 

; WINDOW 3 - local bus SDRAM
Data.Set ANC:IOBASE()+0x0038 %Long 0xF0000000 ; LBLAWBAR3  - begining at 0xf0000000
Data.Set ANC:IOBASE()+0x003C %Long 0x80000019 ; LBLAWAR3   - enable, size = 64MB


; PCI Local Access Windows
; WINDOW 0
Data.Set ANC:IOBASE()+0x0060 %Long 0x80000000 ; PCILAWBAR0 - begining at 0x80000000
Data.Set ANC:IOBASE()+0x0064 %Long 0x8000001C ; PCILAWAR0  - enable, size = 512MB

; WINDOW 1
Data.Set ANC:IOBASE()+0x0068 %Long 0xA0000000 ; PCILAWBAR1 - begining at 0xa0000000
Data.Set ANC:IOBASE()+0x006C %Long 0x8000001C ; PCILAWAR1  - enable, size = 512MB

; DDR Local Access Windows
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; WINDOW 0 - 1st DDR SODIMM
Data.Set ANC:IOBASE()+0x00A0 %Long 0x00000000 ; DDRLAWBAR0 - begining at 0x00000000
Data.Set ANC:IOBASE()+0x00A4 %Long 0x8000001B ; DDRLAWAR0  - enable, size = 256MB

; WINDOW 1 - 2nd DDR SODIMM
Data.Set ANC:IOBASE()+0x00A8 %Long 0x10000000 ; DDRLAWBAR1 - begining at 0x10000000
Data.Set ANC:IOBASE()+0x00AC %Long 0x8000001B ; DDRLAWAR1  - enable, size = 256MB

; DDR Controller
Data.Set ANC:IOBASE()+0x2000 %Long 0x00100017 ; CS0_BNDS: 0x10000000 - 0x17FFFFFF
Data.Set ANC:IOBASE()+0x2080 %Long 0x80000101 ; CS0_CONFIG
Data.Set ANC:IOBASE()+0x2008 %Long 0x0018001F ; CS1_BNDS: 0x18000000 - 0x1FFFFFFF
Data.Set ANC:IOBASE()+0x2084 %Long 0x80000101 ; CS1_CONFIG
Data.Set ANC:IOBASE()+0x2010 %Long 0x00000007 ; CS2_BNDS: 0x00000000 - 0x07FFFFFF
Data.Set ANC:IOBASE()+0x2088 %Long 0x80000101 ; CS2_CONFIG
Data.Set ANC:IOBASE()+0x2018 %Long 0x0008000F ; CS3_BNDS: 0x08000000 - 0x09FFFFFF
Data.Set ANC:IOBASE()+0x208C %Long 0x80000101 ; CS3_CONFIG

Data.Set ANC:IOBASE()+0x2108 %Long 0x37343321 ; TIMING_CONFIG_1
Data.Set ANC:IOBASE()+0x210C %Long 0x00000800 ; TIMING_CONFIG_2 
Data.Set ANC:IOBASE()+0x2110 %Long 0x42000000 ; DDR_SDRAM_CFG
Data.Set ANC:IOBASE()+0x2118 %Long 0x20000162 ; DDR_SDRAM_MODE
Data.Set ANC:IOBASE()+0x2124 %Long 0x045B0100 ; DDR_SDRAM_INTERVAL
WAIT 300.ms

; enable DDR memory controller
Data.Set ANC:IOBASE()+0x2110 %Long 0xC2000000 ; DDR_SDRAM_CFG

; Local Bus Interface 
Data.Set ANC:IOBASE()+0x5000 %Long 0xFF801001 ; BR0: 0xFF800000, 16 bit, GPCM
Data.Set ANC:IOBASE()+0x5004 %Long 0xFF806FF7 ; OR0
Data.Set ANC:IOBASE()+0x5008 %Long 0xF8000801 ; BR1: 0xF8000000, 8 bit, GPCM
Data.Set ANC:IOBASE()+0x500C %Long 0xFFFFE9F7 ; OR1
Data.Set ANC:IOBASE()+0x5010 %Long 0xF0001861 ; BR2: 0xF0000000, 32 bit, SDRAM
Data.Set ANC:IOBASE()+0x5014 %Long 0xFC006901 ; OR2

Data.Set ANC:IOBASE()+0x50D0 %Long 0x00000000 ; LBCR
Data.Set ANC:IOBASE()+0x50D4 %Long 0x00030004 ; LCRR
Data.Set ANC:IOBASE()+0x50A4 %Long 0x3F000000 ; LSRT
Data.Set ANC:IOBASE()+0x5084 %Long 0x20000000 ; MRTPR

Data.Set ANC:IOBASE()+0x5094 %Long 0x0063B723 
Data.Set ANC:IOBASE()+0x5094 %Long 0x2863B723
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:IOBASE()+0x5094 %Long 0x0863B723
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:0xF0000000 %Long 0x000000FF 
Data.Set ANC:IOBASE()+0x5094 %Long 0x1863B723
Data.Set ANC:0xF00000cc %Long 0x000000FF 
Data.Set ANC:IOBASE()+0x5094 %Long 0x4063B723


Data.Set ANC:IOBASE()+0x0114 %Long 0x80000000 ; SICRL
Data.Set ANC:IOBASE()+0x0118 %Long 0x00000002 ; SICRH

Data.Set ANC:IOBASE()+0x0800 %Long 0x00000000 ; ACR

;workarounds
Data.Assemble ANC:0x000006FC NOP B $

ENDDO
