blob: 32b7010e9b38b4f854dcaac4aee046d439eac03f [file] [log] [blame]
From b6f9101aba52de945f7c115cec0e0831eea20f4e Mon Sep 17 00:00:00 2001
From: Alexandre TORGUE <alexandre.torgue@st.com>
Date: Mon, 17 Jul 2017 13:59:16 +0200
Subject: [PATCH 2/2] Add stm32h7x.cfg config file
Change-Id: I2aae2c5acff4f3ff8e1bf232fda5a11a87f71703
Signed-off-by: Alexandre TORGUE <alexandre.torgue@st.com>
---
tcl/target/stm32h7x.cfg | 152 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 152 insertions(+)
create mode 100644 tcl/target/stm32h7x.cfg
diff --git a/tcl/target/stm32h7x.cfg b/tcl/target/stm32h7x.cfg
new file mode 100644
index 00000000..a50d956f
--- /dev/null
+++ b/tcl/target/stm32h7x.cfg
@@ -0,0 +1,152 @@
+# script for stm32h7x family
+
+#
+# stm32h7 devices support both JTAG and SWD transports.
+#
+source [find target/swj-dp.tcl]
+source [find mem_helper.tcl]
+
+if { [info exists CHIPNAME] } {
+ set _CHIPNAME $CHIPNAME
+} else {
+ set _CHIPNAME stm32h7x
+}
+
+set _ENDIAN little
+
+# Work-area is a space in RAM used for flash programming
+# By default use 64kB
+if { [info exists WORKAREASIZE] } {
+ set _WORKAREASIZE $WORKAREASIZE
+} else {
+ set _WORKAREASIZE 0x10000
+}
+
+#jtag scan chain
+if { [info exists CPUTAPID] } {
+ set _CPUTAPID $CPUTAPID
+} else {
+ if { [using_jtag] } {
+ set _CPUTAPID 0x6ba00477
+ } {
+ set _CPUTAPID 0x6ba02477
+ }
+}
+
+swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
+
+if { [info exists BSTAPID] } {
+ set _BSTAPID1 $BSTAPID
+} else {
+ # See STM Document RM0399
+ # Section 40.6.1
+ # STM32H74xxI
+ set _BSTAPID1 0x06450041
+}
+
+if {[using_jtag]} {
+ swj_newdap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1
+}
+
+set _TARGETNAME $_CHIPNAME.cpu
+target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME
+
+$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
+
+set _FLASHNAME $_CHIPNAME.flash
+flash bank $_FLASHNAME stm32h7x 0x08000000 0 0 0 $_TARGETNAME
+
+# check for second flash bank
+if { [regexp -nocase {stm32h74..i..|stm32h75..i..} $_CHIPNAME] } {
+ # STM32H7xxxI 2Mo have a dual bank flash.
+ # Add the second flash bank.
+ set _FLASHNAME $_CHIPNAME.flash1
+ flash bank $_FLASHNAME stm32h7x 0x08100000 0 0 0 $_TARGETNAME
+}
+
+
+# Clock after reset is HSI at 64 MHz, no need of PLL
+if { [info exists CLOCK_FREQ] } {
+ set _CLOCK_FREQ $CLOCK_FREQ
+} else {
+ set _CLOCK_FREQ 1800
+}
+adapter_khz 1800
+
+
+adapter_nsrst_delay 100
+if {[using_jtag]} {
+ jtag_ntrst_delay 100
+}
+
+if {![using_hla]} {
+ # if srst is not fitted use SYSRESETREQ to
+ # perform a soft reset
+ cortex_m reset_config sysresetreq
+}
+
+$_TARGETNAME configure -event trace-config {
+ # Set TRACE_CLKEN; TRACE_MODE is set to async; when using sync
+ # change this value accordingly to configure trace pins
+ # assignment
+ mmw 0x5C001004 0x00100000 0
+}
+
+$_TARGETNAME configure -event reset-init {
+global ENABLE_LOW_POWER
+global STOP_WATCHDOG
+global _CLOCK_FREQ
+
+ # Not done in target examine-end because device can be under reset and we get comm errors
+
+ # Enable D3 and D1 DBG clocks
+ # DBGMCU_CR |= DBG_CKEN_D3 | DBG_CKEN_D1
+ mmw 0x5C001004 0x00600000 0
+
+ if { [expr ($ENABLE_LOW_POWER == 1)] } {
+ # Enable debug during low power modes (uses more power)
+ # DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP in D3, D2 & D1 Domains
+ mmw 0x5C001004 0x000001BF 0
+ }
+ if { [expr ($ENABLE_LOW_POWER == 0)] } {
+ # Disable debug during low power modes
+ # DBGMCU_CR |= ~(DBG_STANDBY | DBG_STOP | DBG_SLEEP)
+ mmw 0x5C001004 0 0x000001BF
+ }
+ if { [expr ($STOP_WATCHDOG == 1)] } {
+ # Stop watchdog counters during halt
+ # DBGMCU_D1APB1_FZ |= DBG_WWDG1_STOP
+ mmw 0x5C001034 0x00000040 0
+ # DBGMCU_D2APB1_FZ |= DBG_WWDG2_STOP
+ mmw 0x5C00103C 0x00000800 0
+ # DBGMCU_D3APB1_FZ |= DBG_WDGLSD2_STOP | DBG_WDGLSD1_STOP
+ mmw 0x5C001054 0x000C0000 0
+ }
+ if { [expr ($STOP_WATCHDOG == 0)] } {
+ # Don't stop watchdog counters during halt
+ # DBGMCU_D1APB1_FZ |= ~DBG_WWDG1_STOP
+ mmw 0x5C001034 0 0x00000040
+ # DBGMCU_D2APB1_FZ |= ~DBG_WWDG2_STOP
+ mmw 0x5C00103C 0 0x00000800
+ # DBGMCU_D3APB1_FZ |= ~(DBG_WDGLSD2_STOP | DBG_WDGLSD1_STOP)
+ mmw 0x5C001054 0 0x000C0000
+ }
+ if { [expr ($ENABLE_LOW_POWER == 0)] && [expr ($STOP_WATCHDOG == 0)] } {
+ # Disable D3 and D1 DBG clocks
+ # DBGMCU_CR |= ~(DBG_CKEN_D3 | DBG_CKEN_D1)
+ mmw 0x5C001004 0 0x00600000
+ }
+
+ # Clock after reset is HSI at 64 MHz, no need of PLL
+ adapter_khz $_CLOCK_FREQ
+}
+
+$_TARGETNAME configure -event gdb-attach {
+global CONNECT_UNDER_RESET
+
+ # Needed to be able to use the connect_assert_srst in reset_config
+ # otherwise, can't read device flash size register
+ if { [expr ($CONNECT_UNDER_RESET == 1)] } {
+ reset init
+ }
+}
--
2.14.1.821.g8fa685d3b7-goog