; --------------------------------------------------------------------------------
; @Title: Linux Demo for TRACE32 OS Awareness for the DIMM-MX53 Board
; @Description:
;   This script is supposed to attach to a running Linux on DIMM-MX53 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, i.mx53
; @Board: DIMM-MX53
; @Chip: IMX53?
; @Copyright: (C) 1989-2019 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: mx53_linux_attach.cmm 16133 2020-06-01 11:09:18Z mcharfi $


; Starting Linux example with TRACE32:
; - Connect NULL modem cable to UART (J14)
;   - 115200 baud, 8/N/1, no(!) handshake
; - Start TRACE32
; - Switch on the board
; - TRACE32: "do mx53_linux_attach"


LOCAL &ka_path &awareness

 SCREEN.ALways      ; permanent update for internal terminal window
 ; screen.on        ; if you use external terminal


; Debugger Reset

  WinPAGE.RESet
  AREA.RESet
  WinPOS 0. 21. 70. 9. 0. 0. W000
  AREA.view
  
  PRINT "resetting..."
 
  RESet

 
; Open serial terminal window on COM1
 
  DO ~~/demo/etc/terminal/serial/term.cmm COM1 115200.
 

; Initializing Debugger

  PRINT "initializing..."
  SYStem.CPU iMX53
  SYStem.JtagClock 20.MHz

  SYStem.Option DACR ON          ; give Debugger global write permissions
  TrOnchip.Set DABORT OFF        ; used by Linux for page miss!
  TrOnchip.Set PABORT OFF        ; used by Linux for page miss!
  TrOnchip.Set UNDEF OFF         ; my be used by Linux for FPU detection
  SYStem.Option MMUSPACES ON     ; enable space ids to virtual addresses
 
  IF ETM()
    ETM.OFF                      ; do not touch ETM registers
   
  SYStem.Attach
  Break.direct
  WAIT !STATE.RUN()
  
  SETUP.IMASKASM ON              ; lock interrupts while single stepping
 
; Open a Code Window -- we like to see something

  WinPOS 0. 0. 75. 20.
  List.auto
  SCREEN.display

; Load the Linux kernel symbols into the debugger

 PRINT "loading Linux kernel symbols..."
 Data.LOAD.Elf vmlinux /NoCODE
 
; 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 0x80000000--0x99ffffff 0x70000000
  TRANSlation.COMMON 0x7f000000--0xffffffff              ; common area for kernel and processes
  TRANSlation.TableWalk ON   ; debugger uses a table walk to decode virtual addresses
  TRANSlation.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
  
  Go.direct

  Mode.Hll

  ENDDO