| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- # SPDX-License-Identifier: GPL-2.0-or-later
- # Copyright (C) ST-Ericsson SA 2011
- # Author : michel.jaouen@stericsson.com
- # U8500 target
- proc mmu_off {} {
- set cp [arm mrc 15 0 1 0 0]
- set cp [expr {$cp & ~1}]
- arm mcr 15 0 1 0 0 $cp
- }
- proc mmu_on {} {
- set cp [arm mrc 15 0 1 0 0]
- set cp [expr {$cp | 1}]
- arm mcr 15 0 1 0 0 $cp
- }
- proc ocd_gdb_restart {target_id} {
- global _TARGETNAME_1
- global _SMP
- targets $_TARGETNAME_1
- if { $_SMP == 1 } {
- cortex_a smp off
- }
- rst_run
- halt
- if { $_SMP == 1 } {
- cortex_a smp on
- }
- }
- proc smp_reg {} {
- global _TARGETNAME_1
- global _TARGETNAME_2
- targets $_TARGETNAME_1
- echo "$_TARGETNAME_1"
- set pc1 [reg pc]
- set stck1 [reg sp_svc]
- targets $_TARGETNAME_2
- echo "$_TARGETNAME_1"
- set pc2 [reg pc]
- set stck2 [reg sp_svc]
- }
- proc u8500_tapenable {chip val} {
- echo "JTAG tap enable $chip"
- }
- proc pwrsts { } {
- global _CHIPNAME
- irscan $_CHIPNAME.jrc 0x3a
- drscan $_CHIPNAME.jrc 4 0
- set pwrsts [drscan $_CHIPNAME.jrc 16 0]
- echo "pwrsts ="$pwrsts
- set a9 [expr "0x$pwrsts & 0xc"]
- set ape [expr "0x$pwrsts & 0x3"]
- if {[string equal "0" $ape]} {
- echo "ape off"
- } else {
- echo "ape on"
- }
- echo "$a9"
- switch $a9 {
- 4 {
- echo "A9 in retention"
- }
- 8 {
- echo "A9 100% DVFS"
- }
- c {
- echo "A9 50% DVFS"
- }
- }
- }
- proc poll_pwrsts { } {
- global _CHIPNAME
- set result 1
- set i 0
- irscan $_CHIPNAME.jrc 0x3a
- drscan $_CHIPNAME.jrc 4 0
- set pwrsts [drscan $_CHIPNAME.jrc 16 0]
- set pwrsts [expr "0x$pwrsts & 0xc"]
- while {[string equal "4" $pwrsts] && $i<20} {
- irscan $_CHIPNAME.jrc 0x3a
- drscan $_CHIPNAME.jrc 4 0;
- set pwrsts [drscan $_CHIPNAME.jrc 16 0]
- set pwrsts [expr "0x$pwrsts & 0xc"]
- if {![string equal "4" $pwrsts]} {
- set result 1
- } else {
- set result 0
- sleep 200
- echo "loop $i"
- }
- incr i
- }
- return $result
- }
- proc halt_ { } {
- if {[poll_pwrsts]==1} {
- halt
- } else {
- echo "halt failed : target in retention"
- }
- }
- proc u8500_dapenable {chip} {
- }
- proc u8500_tapdisable {chip val} {
- echo "JTAG tap disable $chip"
- }
- proc enable_apetap {} {
- global _CHIPNAME
- global _TARGETNAME_2
- global _TARGETNAME_1
- poll off
- irscan $_CHIPNAME.jrc 0x3e
- drscan $_CHIPNAME.jrc 8 0xcf
- jtag tapenable $_CHIPNAME.dap
- irscan $_CHIPNAME.jrc 0x6
- drscan $_CHIPNAME.jrc 32 0
- irscan $_CHIPNAME.jrc 0x6
- drscan $_CHIPNAME.jrc 32 0
- set status [$_TARGETNAME_1 curstate]
- if {[string equal "unknown" $status]} {
- $_TARGETNAME_1 arp_examine
- cache_config l2x 0xa0412000 8
- }
- set status [$_TARGETNAME_2 curstate]
- if {[string equal "unknown" $status]} {
- $_TARGETNAME_2 arp_examine
- }
- }
- tcl_port 5555
- telnet_port 4444
- gdb_port 3333
- if { [info exists CHIPNAME] } {
- global _CHIPNAME
- set _CHIPNAME $CHIPNAME
- } else {
- global _CHIPNAME
- set _CHIPNAME u8500
- }
- if { [info exists ENDIAN] } {
- set _ENDIAN $ENDIAN
- } else {
- # this defaults to a bigendian
- set _ENDIAN little
- }
- # Subsidiary TAP: APE with scan chains for ARM Debug, EmbeddedICE-RT,
- if { [info exists CPUTAPID] } {
- set _CPUTAPID $CPUTAPID
- } else {
- set _CPUTAPID 0x4ba00477
- }
- jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0xe -irmask 0xf -expected-id $_CPUTAPID -disable
- jtag configure $_CHIPNAME.cpu -event tap-enable \
- "u8500_dapenable $_CHIPNAME.cpu"
- jtag configure $_CHIPNAME.cpu -event tap-disable \
- "u8500_tapdisable $_CHIPNAME.cpu 0xc0"
- #CLTAPC TAP JRC equivalent
- if { [info exists CLTAPC_ID] } {
- set _CLTAPC_ID $CLTAPC_ID
- } else {
- set _CLTAPC_ID 0x22286041
- }
- jtag newtap $_CHIPNAME jrc -irlen 6 -ircapture 0x6 -irmask 0xf -expected-id $_CLTAPC_ID -ignore-version
- if { ![info exists TARGETNAME_1] } {
- global _TARGETNAME_1
- set _TARGETNAME_1 $_CHIPNAME.cpu1
- } else {
- global _TARGETNAME_1
- set _TARGETNAME_1 $TARGETNAME_1
- }
- if { [info exists DAP_DBG1] } {
- set _DAP_DBG1 $DAP_DBG1
- } else {
- set _DAP_DBG1 0x801A8000
- }
- if { [info exists DAP_DBG2] } {
- set _DAP_DBG2 $DAP_DBG2
- } else {
- set _DAP_DBG2 0x801AA000
- }
- dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
- target create $_TARGETNAME_1 cortex_a -dap $_CHIPNAME.dap -dbgbase $_DAP_DBG1 -coreid 0 -rtos linux
- if { ![info exists TARGETNAME_2] } {
- global _TARGETNAME_2
- set _TARGETNAME_2 $_CHIPNAME.cpu2
- } else {
- global _TARGETNAME_2
- set _TARGETNAME_2 $TARGETNAME_2
- }
- target create $_TARGETNAME_2 cortex_a -dap $_CHIPNAME.dap -dbgbase $_DAP_DBG2 -coreid 1 -rtos linux
- if {![info exists SMP]} {
- global _SMP
- set _SMP 1
- } else {
- global _SMP
- set _SMP $SMP
- }
- global SMP
- if { $_SMP == 1} {
- target smp $_CHIPNAME.cpu2 $_CHIPNAME.cpu1
- }
- proc secsts1 { } {
- global _CHIPNAME
- irscan $_CHIPNAME.jrc 0x3a
- drscan $_CHIPNAME.jrc 4 4
- set secsts1 [drscan $_CHIPNAME.jrc 16 0]
- echo "secsts1 ="$secsts1
- set secsts1 [expr "0x$secsts1 & 0x4"]
- if {![string equal "4" $secsts1]} {
- echo "APE target secured"
- } else {
- echo "APE target not secured"
- }
- }
- proc att { } {
- global _CHIPNAME
- jtag arp_init
- irscan $_CHIPNAME.jrc 0x3a
- drscan $_CHIPNAME.jrc 4 4
- set secsts1 [drscan $_CHIPNAME.jrc 16 0]
- echo "secsts1 ="$secsts1
- set secsts1 [expr "0x$secsts1 & 0x4"]
- if {[string equal "4" $secsts1]} {
- if {[poll_pwrsts]==1} {
- enable_apetap
- } else {
- echo "target in retention"
- }
- } else {
- echo "target secured"
- }
- }
- proc rst_run { } {
- global _CHIPNAME
- global _TARGETNAME_2
- global _TARGETNAME_1
- set status [$_TARGETNAME_1 curstate]
- if {[string equal "halted" $status]} {
- resume
- targets $_TARGETNAME_1
- }
- set status [$_TARGETNAME_2 curstate]
- if {[string equal "halted" $status]} {
- resume
- targets $_TARGETNAME_2
- }
- poll off
- jtag arp_init
- reset
- sleep 20
- irscan $_CHIPNAME.jrc 0x3a
- drscan $_CHIPNAME.jrc 4 4
- set secsts1 [drscan $_CHIPNAME.jrc 16 0]
- echo "secsts1 ="$secsts1
- set secsts1 [expr "0x$secsts1 & 0x4"]
- while {![string equal "4" $secsts1]} {
- irscan u8500.jrc 0x3a
- drscan u8500.jrc 4 4
- set secsts1 [drscan $_CHIPNAME.jrc 16 0]
- echo "secsts1 ="$secsts1
- set secsts1 [expr "0x$secsts1 & 0x4"]
- }
- echo "ape debugable"
- enable_apetap
- poll on
- targets $_TARGETNAME_1
- dap apsel 1
- }
- if {![info exists MAXSPEED]} {
- global _MAXSPEED
- set _MAXSPEED 15000
- } else {
- global _MAXSPEED
- set _MAXSPEED $MAXSPEED
- }
- global _MAXSPEED
- adapter speed $_MAXSPEED
- gdb_breakpoint_override hard
- set mem inaccessible-by-default-off
- jtag_ntrst_delay 100
- reset_config trst_and_srst combined
|