; --------------------------------------------------------------------------------
; @Title: Example script for programming of MPC574xP (Panther) internal flash.
;
; @Description:
; Script arguments:
;
;   DO mpc574xp [PREPAREONLY] [SKIPCONFIG]
;
;     PREPAREONLY only declares flash but does not execute flash programming
;     SKIPCONFIG  skip configuration part to allow script external configuration
;
; Example:
;
;   DO ~~/demo/powerpc/flash/mpc574xp PREPAREONLY SKIPCONFIG
;
; @Author: rweiss
; @Chip: MPC5741P MPC5742P MPC5743P MPC5744P
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Rev: 6528 $
; $Id: mpc574xp.cmm 6528 2019-01-17 18:59:35Z rweiss $
;

LOCAL &parameters &param_prepareonly &param_skipconfig
ENTRY %LINE &parameters
&param_prepareonly=(STRing.SCAN(STRing.UPpeR("&parameters"),"PREPAREONLY",0)!=-1)
&param_skipconfig=(STRing.SCAN(STRing.UPpeR("&parameters"),"SKIPCONFIG",0)!=-1)

LOCAL &DualPort
IF VERSION.BUILD.BASE()>=45520.
  &DualPort="/DualPort"

; ------------------------------------------------------------------------------
; CPU setup

IF !&param_skipconfig
(
  SYStem.RESet
  SYStem.BdmClock 4.0MHz
  SYStem.CPU MPC55XX
  SYStem.DETECT.CPU
  SYStem.Option.WATCHDOG OFF
  SYStem.Up

  ; Initialize internal SRAM (only partially used)
  Data.Set EA:0x40000000--0x4000ffff %Quad 0
)

; ------------------------------------------------------------------------------
; Flash declaration
FLASH.RESet

IF (Data.Long(DBG:0x601)&0x0FFFFFFF)==0x0834401D
(
  ;Revision 1.x (see ERR005076)
  ; Low address space
  FLASH.Create 1. 0x00800000--0x00803FFF TARGET Quad 0x0000  ; Data Flash - Low Flash Block 0
  FLASH.Create 1. 0x00F98000--0x00F9BFFF TARGET Quad 0x0002  ; Code Flash - Low Flash Block 2
  FLASH.Create 1. 0x00F9C000--0x00F9FFFF TARGET Quad 0x0003  ; Code Flash - Low Flash Block 3
  ; Mid address space
  FLASH.Create 2. 0x00804000--0x0080BFFF TARGET Quad 0x0100  ; Data Flash - Mid Flash Block 0
  FLASH.Create 2. 0x0080C000--0x00813FFF TARGET Quad 0x0101  ; Data Flash - Mid Flash Block 1
)
ELSE
(
  ;Revision 2 and newer
  ; Low address space
  FLASH.Create 1. 0x00800000--0x00803FFF TARGET Quad 0x0000  ; Data Flash - Low Flash Block 0
  FLASH.Create 1. 0x00804000--0x00807FFF TARGET Quad 0x0001  ; Data Flash - Low Flash Block 1
  FLASH.Create 1. 0x00F98000--0x00F9BFFF TARGET Quad 0x0002  ; Code Flash - Low Flash Block 2
  FLASH.Create 1. 0x00F9C000--0x00F9FFFF TARGET Quad 0x0003  ; Code Flash - Low Flash Block 3
  ; Mid address space
  FLASH.Create 2. 0x00808000--0x0080FFFF TARGET Quad 0x0100  ; Data Flash - Mid Flash Block 0
  FLASH.Create 2. 0x00810000--0x00817FFF TARGET Quad 0x0101  ; Data Flash - Mid Flash Block 1
)

; High address space
FLASH.Create 3. 0x00FA0000--0x00FAFFFF TARGET Quad 0x0200    ; Code Flash - High Flash Block 0
FLASH.Create 3. 0x00FB0000--0x00FBFFFF TARGET Quad 0x0201    ; Code Flash - High Flash Block 1
FLASH.Create 3. 0x00FC0000--0x00FCFFFF TARGET Quad 0x0202    ; Code Flash - High Flash Block 2
FLASH.Create 3. 0x00FD0000--0x00FDFFFF TARGET Quad 0x0203    ; Code Flash - High Flash Block 3
FLASH.Create 3. 0x00FE0000--0x00FEFFFF TARGET Quad 0x0204    ; Code Flash - High Flash Block 4
FLASH.Create 3. 0x00FF0000--0x00FFFFFF TARGET Quad 0x0205    ; Code Flash - High Flash Block 5

; 256k address space
FLASH.Create 4. 0x01000000--0x0103FFFF TARGET Quad 0x0300    ; 256 KB Flash Block 0
FLASH.Create 4. 0x01040000--0x0107FFFF TARGET Quad 0x0301    ; 256 KB Flash Block 1
IF CPUIS(MPC5742P)||CPUIS(MPC5743P)||CPUIS(MPC5744P)
(
  FLASH.Create 4. 0x01080000--0x010BFFFF TARGET Quad 0x0302    ; 256 KB Flash Block 2
  FLASH.Create 4. 0x010C0000--0x010FFFFF TARGET Quad 0x0303    ; 256 KB Flash Block 3
)
IF CPUIS(MPC5743P)||CPUIS(MPC5744P)
(
  FLASH.Create 4. 0x01100000--0x0113FFFF TARGET Quad 0x0304    ; 256 KB Flash Block 4
  FLASH.Create 4. 0x01140000--0x0117FFFF TARGET Quad 0x0305    ; 256 KB Flash Block 5
)
IF CPUIS(MPC5744P)
(
  FLASH.Create 4. 0x01180000--0x011BFFFF TARGET Quad 0x0306    ; 256 KB Flash Block 6
  FLASH.Create 4. 0x011C0000--0x011FFFFF TARGET Quad 0x0307    ; 256 KB Flash Block 7
)
; UTEST address space
FLASH.Create 6. 0x00400000--0x00403FFF TARGET Quad 0x0500 /OTP /INFO "UTEST"

; Overlay enabled mapping
FLASH.CreateALIAS 0x08A00000--0x08FFFFFF 0x00A00000   ; Small & medium flash blocks
FLASH.CreateALIAS 0x09000000--0x09FFFFFF 0x01000000   ; Large flash blocks

FLASH.TARGET E:0x40000000 E:0x40002000 0x1000 ~~/demo/powerpc/flash/quad/c55fm5746m.bin /STACKSIZE 0x0200 &DualPort


;flash script ends here if called with parameter PREPAREONLY
IF &param_prepareonly
  ENDDO

; ------------------------------------------------------------------------------
; Flash programming

DIALOG.YESNO "Flash programming prepared. Program flash memory now?"
LOCAL &progflash
ENTRY &progflash

IF &progflash
(
  FLASH.ReProgram ALL /Erase
  Data.LOAD.auto *
  FLASH.ReProgram.off
)
ELSE
(
  FLASH.List
)

ENDDO
