# SPDX-License-Identifier: GPL-2.0-or-later

######################################
# Target:    NXP lpc3131
######################################

if { [info exists CHIPNAME] } {
   set _CHIPNAME $CHIPNAME
} else {
   set _CHIPNAME lpc3131
}

if { [info exists ENDIAN] } {
   set _ENDIAN $ENDIAN
} else {
   set _ENDIAN little
}

# ARM926EJS core
if { [info exists CPUTAPID] } {
   set _CPUTAPID $CPUTAPID
} else {
   set _CPUTAPID 0x07926f0f
}

# Scan Tap
# Wired to separate STDO pin on the lpc3131, externally muxed to TDO on ea3131 module
# JTAGSEL pin must be 0 to activate, which reassigns arm tdo to a pass through.
if { [info exists SJCTAPID] } {
   set _SJCTAPID $SJCTAPID
} else {
   set _SJCTAPID 0x1541E02B
}

jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID

##################################################################
# various symbol definitions, to avoid hard-wiring addresses
##################################################################

global lpc313x
set lpc313x [ dict create ]

# Physical addresses for controllers and memory
dict set lpc313x sram0			0x11028000
dict set lpc313x sram1			0x11040000
dict set lpc313x uart			0x15001000
dict set lpc313x cgu			0x13004000
dict set lpc313x ioconfig		0x13003000
dict set lpc313x sysconfig		0x13002800
dict set lpc313x wdt			0x13002400

##################################################################
# Target configuration
##################################################################

adapter srst delay 1000
jtag_ntrst_delay 0

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm926ejs -endian $_ENDIAN -chain-position $_TARGETNAME

$_TARGETNAME invoke-event halted

$_TARGETNAME configure -work-area-phys [dict get $lpc313x sram0] -work-area-size 0x30000 -work-area-backup 0

$_TARGETNAME configure -event reset-init {
	echo "\nRunning reset init script for LPC3131\n"
	halt
	wait_halt
	reg cpsr 0xa00000d3	;#Supervisor mode
	reg pc 0x11029000
	poll
	sleep 500
}

arm7_9 fast_memory_access enable
arm7_9 dcc_downloads enable
