; --------------------------------------------------------------------------------
; @Title: Flash programming script for Freescale MPC8349EA-MDS
; @Description: (processor revision 3.x) evaluation board
; @Keywords: PQIIPro
; @Author: REI
; @Board: MPC8349EA-MDS
; @Chip: MPC8349
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: flash.cmm 12680 2018-06-04 10:57:35Z rweiss $


SYStem.RESet

DIALOG.YESNO "Locate FLASH at address 0x00000000? Click NO to locate flash at 0xFF800000"
ENTRY &flashatzero

SYStem.CPU MPC8349

IF &flashatzero
  SYStem.Option.HRCWOVR 0xB060A00004040000
ELSE
  SYStem.Option.HRCWOVR 0xB460A00004040000

SYStem.BdmClock 30.MHz
SYStem.Up
SYStem.Option.HRCWOVR 

DO ~~~~/init.cmm

; Local Access Windows 
Data.Set ANC:IOBASE()+0x0020 %Long ANC:IOBASE()+0x0000

; 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 

; 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()+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()+0x0114 %Long 0x80000000 ; SICRL
Data.Set ANC:IOBASE()+0x0118 %Long 0x00000002 ; SICRH

;unlock flash in BCSR
 Data.Set 0xf8000001 %Byte 0x0C

IF &flashatzero
(
  ;modify registers for flash at address 0x00000000
  Data.Set ANC:IOBASE()+0x0028 %Long 0x00000000 ; LBLAWBAR1
  Data.Set ANC:IOBASE()+0x5000 %Long 0x00001001 ; BR0
  Data.Set ANC:IOBASE()+0x5004 %Long 0xf0006ff7 ; OR0
  
  Data.Set ANC:IOBASE()+0x00A0 %Long 0x10000000 ;DDRLAWBAR0
  Data.Set ANC:IOBASE()+0x2010 %Long 0x0010001F ;DDR_CS2_BNDS
)

FLASH.RESet

IF &flashatzero
  FLASH.CFI A:0x00000000 Word /TARGET A:0x10002000 A:0x10004000 0x1000
ELSE
  FLASH.CFI A:0xFF800000 Word /TARGET A:0x00002000 A:0x00004000 0x1000


  DIALOG.YESNO "FLASH programming prepared. Program now?"
  ENTRY &progflash
  
  IF &progflash
  (
    FLASH.ReProgram ALL
    IF &flashatzero
      Data.LOAD.auto * 0--0x007FFFFF
    ELSE  
      Data.LOAD.auto * 0xFF800000--0xFFFFFFFF
    FLASH.ReProgram.off 
  )
  ELSE
  (
    FLASH.List
  )

ENDDO

