; --------------------------------------------------------------------------------
; @Title: P2020DS Target Setup for the Linux Demo 
; @Description: -
; @Keywords: awareness, linux, p1020rdb, RTOS
; @Author: DIE
; @Board: P2020DS
; @Chip: P1020
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: smp-linux-preparetarget.cmm 7020 2014-04-28 10:10:12Z kjmal $


;flash layout:
;
;0xFF000000--0xFF2FFFFF rootfs
;0xFF400000--0xFF6FFFFF kernel
;0xFFE00000--0xFFE1FFFF device tree (dtb)
;0xFFF80000--0xFFFFFFFF u-boot

;QorIQ universal initialization script
;uses L2SRAM for target based FLASH programming
  
  ;FLASH parameters
    &waitstates=6

;PART 1: Debugger/CPU setup
; --------------------------------------------------------------------------------
    RESet
    SYStem.CPU MPC85XX
    SYStem.DETECT.CPU
    CORE.ASSIGN 1             ;selecting only one core allows higher JTAG frequency
    SYStem.BdmClock 50.MHz    ;try lower debug frequencies when problems occur
    SYStem.Option.FREEZE OFF

  ;connect to target
    SYStem.Up
  
  ;Set CCSRBAR to 0x40000000
    Data.Set ANC:IOBASE() %Long 0x0x00040000
    
  ;Set up local access window, 0xC0000000--0xFFFFFFFF
    Data.Set ANC:IOBASE()+0x00C08 %Long %BE 0x000C0000
    Data.Set ANC:IOBASE()+0x00C10 %Long %BE 0x8040001D
    
    ;TLB entry for L2SRAM
    MMU.TLB1.Set 1. 0xC0000400 0x10000008 0x10000015
  ;TLB entry for FLASH 0xC0000000--0xffffffff (1GB)
    MMU.TLB1.Set 0. 0xC0000A00 0xC0000008 0xC0000015
  
  ;enable L2SRAM:
    Data.Set ANC:IOBASE()+0x00020000 %Long 0xE0010000
    Data.Set ANC:IOBASE()+0x00020100 %Long 0x10000000
  
   ;initialize L2SRAM
    Data.Set 0x10000000--0x1001FFFF %Quad 0xAA55AA55AA55AA55
  
  ;workaround needed for MPC85XX breakpoint functionality
    Data.Set SPR:0x3F  %Long 0x10000000
    Data.Set SPR:0x19F %Long 0x00000000
    Data.Assemble 0x10000000 NOP B 0x10000004

;PART 2: FLASH setup (chip select and debugger)
; --------------------------------------------------------------------------------

  ;set initial FLASH base address to 0xff800000
    &flashbase=0xff800000
   
  ;set up initial chip select for FLASH memory
    Data.Set ANC:IOBASE()+0x00005000 %Long (Data.Long(ANC:IOBASE()+0x00005000)&0x00007FFF)|&flashbase
    Data.Set ANC:IOBASE()+0x00005004 %Long (Data.Long(ANC:IOBASE()+0x00005004)&0x00007F0F)|&flashbase|(&waitstates<<4.)
  
  ;get port width
    &portwidth=(Data.Long(ANC:IOBASE()+0x00005000)>>11.)&0x00000003
  
     IF &portwidth==1
      &flashwidth="BYTE"
    ELSE IF &portwidth==2
      &flashwidth="WORD"
    ELSE IF &portwidth==3
      &flashwidth="LONG"
    ELSE
    (
      PRINT %ERROR "ERROR: invalid LBC_CS0 port width"
      STOP
    )
  
  ;get FLASH size
    &flashsize=FLASH.CFI.SIZE(ANC:&flashbase,&flashwidth)
  
    IF (&flashsize==0)
    (
      PRINT %ERROR "ERROR: FLASH module could not be detected"
      STOP
    )
    
  ;calculate real FLASH base address, end of 32-bit address space = end of FLASH address space
    &flashbase=0x0000000100000000-&flashsize
  
  ;set up true chip select for FLASH memory
    Data.Set ANC:IOBASE()+0x00005000 %Long (Data.Long(ANC:IOBASE()+0x00005000)&0x00007FFF)|&flashbase
    Data.Set ANC:IOBASE()+0x00005004 %Long (Data.Long(ANC:IOBASE()+0x00005004)&0x00007F0F)|&flashbase|(&waitstates<<4.)
  
  ;declare FLASH
    FLASH.RESet
    FLASH.CFI &flashbase &flashwidth /TARGET 0x10001000 0x10002000 0x1000

    &sizemb=FORMAT.Decimal(0,&flashsize>>20.)
    PRINT "Configured Flash at address &flashbase, &sizemb MBytes."
 
    &imagepath=OS.PPD()+"\images"
  
  ;program FLASH
    FLASH.ReProgram.ALL
    Data.LOAD.Binary "&imagepath\u-boot-2011.06.bin"   0xFFF80000 // the boot loader
    Data.LOAD.Binary "&imagepath\uImage-2.6.39.4"      0xFF400000 // linux image
    Data.LOAD.Binary "&imagepath\p1020rdb.dtb"         0xFFF00000 // linux device tree
    Data.LOAD.Binary "&imagepath\rootfs.ext2.gz.uboot" 0xFF000000 // ramdisk
    Data.LOAD.Binary "&imagepath\u-boot-ram.env.bin"   0xFFF60000 // preconfigured u-boot environment variables
    FLASH.ReProgram.off

  ;reset debugger back to SMP settings
    SYStem.Down
    CORE.ASSIGN 1 2
    SYStem.BdmClock 25.MHz

ENDDO
