; --------------------------------------------------------------------------------
; @Title: Internal flash programming script for MPC574xB/C/D/G (Calypso3M/6M).
;
; @Description:
; Script arguments:
;
;   DO mpc574xg [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/mpc574xg PREPAREONLY SKIPCONFIG
;
; @Author: rweiss
; @Chip: MPC5744B MPC5745B MPC5746B
;        MPC5744C MPC5745C MPC5746C
;        MPC5747C MPC5748C MPC5746G MPC5747G MPC5748G
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Rev: 6826 $
; $Id: mpc574xg.cmm 6826 2019-04-05 10:11:32Z 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.DETECT.CPU
  SYStem.CONFIG.CORE 1. 1.
  SYStem.CONFIG.Slave OFF
  SYStem.Option WATCHDOG OFF
  SYStem.Up

  ; Initialize internal SRAM (only partially used)
  Data.Set EA:0x40000000--0x4000ffff %Quad 0
)

; ------------------------------------------------------------------------------
; Flash declaration

FLASH.RESet

; Low address space
FLASH.Create 1. 0x00404000--0x00407FFF NOP    Quad 0x0001 /INFO "BAF (read only)"
FLASH.Create 1. 0x00610000--0x0061FFFF NOP    Quad 0x0007 /INFO "HSM code"
FLASH.Create 1. 0x00620000--0x0062FFFF NOP    Quad 0x0009 /INFO "HSM code"
FLASH.Create 1. 0x00F8C000--0x00F8FFFF NOP    Quad 0x0000 /INFO "Small HSM Code Block"
FLASH.Create 1. 0x00FC0000--0x00FC7FFF TARGET Quad 0x0002
FLASH.Create 1. 0x00FC8000--0x00FCFFFF TARGET Quad 0x0003
FLASH.Create 1. 0x00FD0000--0x00FD7FFF TARGET Quad 0x0004
FLASH.Create 1. 0x00FD8000--0x00FDFFFF TARGET Quad 0x0005
FLASH.Create 1. 0x00FE0000--0x00FEFFFF TARGET Quad 0x0006
FLASH.Create 1. 0x00FF0000--0x00FFFFFF TARGET Quad 0x0008

; Mid address space
FLASH.Create 2. 0x00F90000--0x00F93FFF TARGET Quad 0x0100
FLASH.Create 2. 0x00F94000--0x00F97FFF TARGET Quad 0x0101
FLASH.Create 2. 0x00F98000--0x00F9BFFF TARGET Quad 0x0102
FLASH.Create 2. 0x00F9C000--0x00F9FFFF TARGET Quad 0x0103
FLASH.Create 2. 0x00FA0000--0x00FA3FFF TARGET Quad 0x0104
FLASH.Create 2. 0x00FA4000--0x00FA7FFF TARGET Quad 0x0105
FLASH.Create 2. 0x00FA8000--0x00FABFFF TARGET Quad 0x0106
FLASH.Create 2. 0x00FAC000--0x00FAFFFF TARGET Quad 0x0107

IF CPUIS(MPC5747C)||CPUIS(MPC5748C)||CPUIS(MPC574?G)
(
  FLASH.Create 2. 0x00FB0000--0x00FB7FFF TARGET Quad 0x0108
  FLASH.Create 2. 0x00FB8000--0x00FBFFFF TARGET Quad 0x0109
)

; High address space
FLASH.Create 3. 0x00F80000--0x00F83FFF NOP    Quad 0x0200 /INFO "HSM data"
FLASH.Create 3. 0x00F84000--0x00F87FFF NOP    Quad 0x0201 /INFO "HSM data"

; Large (256k) address space
FLASH.Create 4. 0x01000000--0x0103FFFF TARGET Quad 0x0300
FLASH.Create 4. 0x01040000--0x0107FFFF TARGET Quad 0x0301
FLASH.Create 4. 0x01080000--0x010BFFFF TARGET Quad 0x0302
FLASH.Create 4. 0x010C0000--0x010FFFFF TARGET Quad 0x0303

IF CPUIS(MPC5745?)||CPUIS(MPC5746?)||CPUIS(MPC5747?)||CPUIS(MPC5748?)
(
  FLASH.Create 4. 0x01100000--0x0113FFFF TARGET Quad 0x0304
  FLASH.Create 4. 0x01140000--0x0117FFFF TARGET Quad 0x0305
)

IF CPUIS(MPC5746?)||CPUIS(MPC5747?)||CPUIS(MPC5748?)
(
  FLASH.Create 4. 0x01180000--0x011BFFFF TARGET Quad 0x0306
  FLASH.Create 4. 0x011C0000--0x011FFFFF TARGET Quad 0x0307
  FLASH.Create 4. 0x01200000--0x0123FFFF TARGET Quad 0x0308
  FLASH.Create 4. 0x01240000--0x0127FFFF TARGET Quad 0x0309
)

IF CPUIS(MPC5747?)||CPUIS(MPC5748?)
(
  FLASH.Create 4. 0x01280000--0x012BFFFF TARGET Quad 0x030a
  FLASH.Create 4. 0x012C0000--0x012FFFFF TARGET Quad 0x030b
  FLASH.Create 4. 0x01300000--0x0133FFFF TARGET Quad 0x030c
  FLASH.Create 4. 0x01340000--0x0137FFFF TARGET Quad 0x030d
)

IF CPUIS(MPC5748?)
(
  FLASH.Create 4. 0x01380000--0x013BFFFF TARGET Quad 0x030e
  FLASH.Create 4. 0x013C0000--0x013FFFFF TARGET Quad 0x030f
  FLASH.Create 4. 0x01400000--0x0143FFFF TARGET Quad 0x0310
  FLASH.Create 4. 0x01440000--0x0147FFFF TARGET Quad 0x0311

  FLASH.Create 4. 0x01480000--0x014BFFFF TARGET Quad 0x0312
  FLASH.Create 4. 0x014C0000--0x014FFFFF TARGET Quad 0x0313
  FLASH.Create 4. 0x01500000--0x0153FFFF TARGET Quad 0x0314
  FLASH.Create 4. 0x01540000--0x0157FFFF TARGET Quad 0x0315
)

; UTEST address space
FLASH.Create 6. 0x00400000--0x00403FFF TARGET Quad 0x0500 /OTP /INFO "UTEST (OTP)"

; 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
