; --------------------------------------------------------------------------------
; @Title: Linux Demo for TRACE32 RTOS Debugger for the DBPXA250 Board
; @Description:  
;   This script is supposed to attach to a running Linux on Intel DBPXA250 board. 
;   The Task Awareness + Debugger Address Translation are prepared as for the 
;   GSRD. After execution of this script the debugger is ready for Process, 
;   Kernel, optional Module and optional Library debugging.
;   It will NOT run on any other board, but may be used as a template
;   for others. 
; @Keywords: awareness, RTOS
; @Author: ABO
; @Board: DBPXA250
; @Chip: PXA250
; @Copyright: (C) 1989-2015 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: dbpxa250_linux_attach.cmm 8552 2015-07-23 13:29:19Z abouassida $


; Starting Linux example with TRACE32:
; - Connect a keyboard to the DBPXA250 board
; - Set S15 to no dot position
; - Start TRACE32
; - (T32) Start this script


LOCAL &ka_path &awareness

  SCREEN.ON


; Debugger Reset

  WinCLEAR
  AREA.CLEAR
  Break.RESet
  TRANSlation.RESet
  sYmbol.RESet
  MAP.RESet

  WinPOS 0. 0. 80. 20. 0. 0. W000
  AREA.view

; Initializing Debugger
 
  PRINT "initializing..."
  SYStem.CPU PXA250
  SYStem.Option DACR ON          ; give Debugger global write permissions
  SYStem.Option DynVector ON     ; Linux reprograms vector table
  TrOnchip.Set DABORT OFF        ; used by Linux for page miss!
  TrOnchip.Set PABORT OFF        ; used by Linux for page miss!
  TrOnchip.Set UNDEF OFF         ; used by Linux for (non-)FPU detection!
  SYStem.Option MMUSPACES ON     ; enable space ids to virtual addresses
  SYStem.JtagClock 10.0MHz       ; 25.0MHz may cause troubles
  SETUP.IMASKASM ON          ; lock interrupts while single stepping

  SYStem.Attach
  Break.direct
  WAIT !STATE.RUN()


; Load the Linux kernel symbols into the debugger
 ; use /strippart and /path to map source paths, if necessary
 
  PRINT "loading Linux kernel symbols..."
  Data.LOAD.Elf vmlinux /gnu /NoCODE
 

; Open a Code Window -- we like to see something

  WinPOS 0. 0. 75. 20.
  List.auto
  SCREEN.display
 

; Declare the MMU format to the debugger
 ; - table format is "LINUX"
 ; - table base address is at label "swapper_pg_dir"
 ; - kernel address translation
 ; Map the virtual kernel symbols to physical addresses to give 
 ; the debugger access to it before CPU MMU is initialized

 PRINT "initializing debugger MMU..."
 MMU.FORMAT LINUX swapper_pg_dir 0xc0000000--0xc3ffffff 0xa0000000
 TRNASlation.COMMON 0xc0000000--0xffffffff            ; common area for kernel and processes
 TRNASlation.TableWalk ON   ; debugger uses a table walk to decode virtual addresses
 TRNASlation.ON             ; switch on debugger(!) address translation 

; Initialize Linux Awareness

 ; Note that the Linux awareness needs the kernel symbols to work
 
  PRINT "initializing RTOS support..."
  ; Choose the correct Linux major version below
  ;TASK.CONFIG ~~/demo/arm/kernel/linux/linux-2.x/linux.t32     ; loads Linux awareness for linux-2.x
  ;MENU.ReProgram ~~/demo/arm/kernel/linux/linux-2.x/linux.men  ; loads Linux menu  for linux-2.x
  TASK.CONFIG ~~/demo/arm/kernel/linux/linux-3.x/linux3.t32     ; loads Linux awareness for linux-3.x
  MENU.ReProgram ~~/demo/arm/kernel/linux/linux-3.x/linux.men  ; loads Linux menu  for linux-3.x
  
; Group kernel area to be displayed with red bar
  GROUP.Create "kernel" 0xc0000000--0xffffffff /RED
 
  Go.direct
 
  ENDDO
 
