|
| 1 | +; ------------------------------------------------------------------------------ |
| 2 | +; @Title: NXP T2080 wolfBoot Debug Script |
| 3 | +; @Description: |
| 4 | +; Brings up the T2080, loads wolfBoot ELF symbols, and sets breakpoints |
| 5 | +; for source-level debugging of wolfBoot running from NOR flash (XIP). |
| 6 | +; @Chip: T2080 |
| 7 | +; Based on demo scripts from Lauterbach |
| 8 | +; ------------------------------------------------------------------------------ |
| 9 | +; |
| 10 | +; Prerequisites: |
| 11 | +; - wolfBoot must already be flashed to NOR (use t2080_flash.cmm) |
| 12 | +; - wolfboot.elf must be built with debug symbols (DEBUG=1 recommended) |
| 13 | +; ------------------------------------------------------------------------------ |
| 14 | + |
| 15 | +; Base directory for wolfBoot build output (adjust to match your build path) |
| 16 | +&basedir="." |
| 17 | + |
| 18 | +PRINT "========================================" |
| 19 | +PRINT "T2080 wolfBoot Debug Session" |
| 20 | +PRINT "========================================" |
| 21 | +PRINT "" |
| 22 | + |
| 23 | +; Reset everything |
| 24 | +RESet |
| 25 | +SYStem.RESet |
| 26 | + |
| 27 | +SYStem.BdmClock 15.MHz |
| 28 | +SYStem.CPU T2080 |
| 29 | +SYStem.DETECT CPU |
| 30 | +CORE.ASSIGN 1. |
| 31 | +SYStem.Option.FREEZE ON |
| 32 | +SYStem.Option.IMASKASM ON |
| 33 | + |
| 34 | +; Use RCW override to bring up the system in a controlled state. |
| 35 | +; This halts the CPU before any flash code executes. |
| 36 | +PRINT "Bringing up system with RCW override..." |
| 37 | +SYStem.Mode.Prepare |
| 38 | + |
| 39 | +SYStem.Option.HRCWOVerRide ON |
| 40 | + |
| 41 | +; RCW values (matching the flash RCW) |
| 42 | +Data.Set DBG:0x01000000 0x0c050012 |
| 43 | +Data.Set DBG:0x01000001 0x0e000000 |
| 44 | +Data.Set DBG:0x01000002 0x00000000 |
| 45 | +Data.Set DBG:0x01000003 0x00000000 |
| 46 | +Data.Set DBG:0x01000004 0xd8150002 |
| 47 | +Data.Set DBG:0x01000005 0x00800000 |
| 48 | +Data.Set DBG:0x01000006 0xfc027000 |
| 49 | +Data.Set DBG:0x01000007 0xa1000000 |
| 50 | +Data.Set DBG:0x01000008 0x00000000 |
| 51 | +Data.Set DBG:0x01000009 0x00000000 |
| 52 | +Data.Set DBG:0x0100000A 0x00000000 |
| 53 | +Data.Set DBG:0x0100000B 0x0002b000 |
| 54 | +Data.Set DBG:0x0100000C 0x00000200 |
| 55 | +Data.Set DBG:0x0100000D 0x0080000d |
| 56 | +Data.Set DBG:0x0100000E 0x00000000 |
| 57 | +Data.Set DBG:0x0100000F 0x00000004 |
| 58 | + |
| 59 | +SYStem.Up |
| 60 | + |
| 61 | +SYStem.Option.HRCWOVerRide OFF |
| 62 | + |
| 63 | +PRINT "System up (CPU halted)" |
| 64 | + |
| 65 | +; Allow non-intrusive run-time memory access |
| 66 | +SYStem.MemAccess CPU |
| 67 | + |
| 68 | +; NOTE: Keep CCSRBAR at default 0xFE000000 to match wolfBoot. |
| 69 | +; wolfBoot uses CCSRBAR_DEF = 0xFE000000 in hal/nxp_ppc.h. |
| 70 | +; Do NOT relocate CCSRBAR here. |
| 71 | + |
| 72 | +; Set up LAW0 for CCSR at 0xFE000000 (16 MB) |
| 73 | +; LAWAR = ENABLE(0x80000000) | TRGT_CORENET(0x1E<<20) | SIZE_16MB(0x17) |
| 74 | +PRINT "Setting up LAW for CCSR access..." |
| 75 | +Data.Set ANC:IOBASE()+0x00C00 %Long %BE 0x00000000 ; LAWBARH0 = 0 |
| 76 | +Data.Set ANC:IOBASE()+0x00C04 %Long %BE 0xFE000000 ; LAWBARL0 = 0xFE000000 |
| 77 | +Data.Set ANC:IOBASE()+0x00C08 %Long %BE 0x81E00017 ; LAWAR0 = enable|CORENET|16 MB |
| 78 | + |
| 79 | +; Set up LAW1 for IFC NOR Flash at 0xE8000000 (128 MB) |
| 80 | +; LAWAR = ENABLE(0x80000000) | TRGT_IFC(0x1F<<20) | SIZE_128MB(0x1A) |
| 81 | +PRINT "Setting up LAW for flash access..." |
| 82 | +Data.Set ANC:IOBASE()+0x00C10 %Long %BE 0x00000000 ; LAWBARH1 = 0 |
| 83 | +Data.Set ANC:IOBASE()+0x00C14 %Long %BE 0xE8000000 ; LAWBARL1 = 0xE8000000 |
| 84 | +Data.Set ANC:IOBASE()+0x00C18 %Long %BE 0x81F0001A ; LAWAR1 = enable|IFC|128 MB |
| 85 | + |
| 86 | +; TLB for CCSR: Entry 1, 0xFE000000, 16 MB |
| 87 | +; MAS1: V=1(0x80000000), IPROT=1(0x40000000), TSIZE=14 (16 MB) <<7 = 0x700 |
| 88 | +; MAS2: EPN=0xFE000000, I|G=0x0A |
| 89 | +; MAS3: RPN=0xFE000000, SX|SW|SR=0x15 |
| 90 | +MMU.TLB1.Set 1. 0xC0000700 0xFE00000A 0xFE000015 0x00000000 0x0 |
| 91 | + |
| 92 | +; TLB for Flash: Entry 2, 0xE8000000, 128 MB |
| 93 | +; MAS1: V=1, IPROT=1, TSIZE=17 (128 MB) <<7 = 0x880 |
| 94 | +; MAS2: EPN=0xE8000000, I|G=0x0A |
| 95 | +; MAS3: RPN=0xE8000000, SX|SW|SR=0x15 |
| 96 | +MMU.TLB1.Set 2. 0xC0000880 0xE800000A 0xE8000015 0x00000000 0x0 |
| 97 | + |
| 98 | +PRINT "CCSR (0xFE000000) and Flash (0xE8000000) configured" |
| 99 | + |
| 100 | +; Verify flash is accessible - check for RCW preamble |
| 101 | +&rcw_preamble=Data.Long(D:0xE8000000) |
| 102 | +PRINT "RCW preamble at 0xE8000000: &rcw_preamble" |
| 103 | +IF &rcw_preamble!=0xAA55AA55 |
| 104 | +( |
| 105 | + PRINT %WARNING "WARNING: Expected RCW preamble 0xAA55AA55, got &rcw_preamble" |
| 106 | + PRINT " Flash may not be properly programmed" |
| 107 | +) |
| 108 | +ELSE |
| 109 | +( |
| 110 | + PRINT " RCW preamble OK" |
| 111 | +) |
| 112 | + |
| 113 | +; Verify wolfBoot code is present at expected location |
| 114 | +&wb_first=Data.Long(D:0xEFFE0000) |
| 115 | +PRINT "wolfBoot first word at 0xEFFE0000: &wb_first" |
| 116 | +IF &wb_first==0xFFFFFFFF |
| 117 | +( |
| 118 | + PRINT %ERROR "ERROR: wolfBoot region appears erased (0xFFFFFFFF)" |
| 119 | + PRINT " Run t2080_flash.cmm first" |
| 120 | + STOP |
| 121 | +) |
| 122 | + |
| 123 | +PRINT "" |
| 124 | +PRINT "Loading wolfBoot symbols..." |
| 125 | + |
| 126 | +; Load ELF symbols (debug info only - code is already in flash, XIP) |
| 127 | +Data.LOAD.Elf &basedir/wolfboot.elf /NoCODE |
| 128 | +Data.LOAD.Elf &basedir/test-app/image.elf /NoCODE /NoClear |
| 129 | +sYmbol.SourcePATH.Set &basedir &basedir/src &basedir/hal &basedir/lib/wolfssl &basedir/test-app |
| 130 | + |
| 131 | +PRINT " Symbols loaded from wolfboot.elf" |
| 132 | +PRINT " Symbols loaded from test-app/image.elf" |
| 133 | + |
| 134 | +; Set breakpoints at key wolfBoot entry points |
| 135 | +PRINT "" |
| 136 | +PRINT "Setting breakpoints..." |
| 137 | + |
| 138 | +Break.Delete /ALL |
| 139 | + |
| 140 | +; Entry point - reset vector |
| 141 | +Break.Set _reset /Program /Onchip |
| 142 | +PRINT " BP: _reset (0xEFFFF000) - reset vector" |
| 143 | + |
| 144 | +; main wolfBoot entry |
| 145 | +IF sYmbol.EXIST(main) |
| 146 | +( |
| 147 | + Break.Set main /Program /Onchip |
| 148 | + PRINT " BP: main" |
| 149 | +) |
| 150 | + |
| 151 | +; hal_init |
| 152 | +IF sYmbol.EXIST(hal_init) |
| 153 | +( |
| 154 | + Break.Set hal_init /Program /Onchip |
| 155 | + PRINT " BP: hal_init" |
| 156 | +) |
| 157 | + |
| 158 | +PRINT "" |
| 159 | + |
| 160 | +; Set PC to wolfBoot reset vector |
| 161 | +Register.Set PC 0xEFFFF000 |
| 162 | + |
| 163 | +PRINT "PC set to _reset (0xEFFFF000)" |
| 164 | +PRINT "" |
| 165 | + |
| 166 | +PRINT "========================================" |
| 167 | +PRINT "wolfBoot Debug Ready" |
| 168 | +PRINT "========================================" |
| 169 | +PRINT "" |
| 170 | +PRINT "Key symbols:" |
| 171 | +PRINT " _reset: 0xEFFFF000 (entry)" |
| 172 | +PRINT " _start_vector: 0xEFFE0000" |
| 173 | +PRINT " hal_init: (see symbol table)" |
| 174 | +PRINT "" |
| 175 | +PRINT "Commands:" |
| 176 | +PRINT " Go - Run to next breakpoint" |
| 177 | +PRINT " Step / Step.Over - Single step" |
| 178 | +PRINT " Var.View <var> - Inspect variable" |
| 179 | +PRINT " Data.dump <addr> - Memory dump" |
| 180 | +PRINT "" |
| 181 | +PRINT "Ready - press Go to start execution" |
| 182 | +PRINT "" |
| 183 | + |
| 184 | +ENDDO |
0 commit comments