This is an automated email from Gerrit.

"Tomas Vanek <[email protected]>" just uploaded a new patch set to Gerrit, which 
you can find at https://review.openocd.org/c/openocd/+/9062

-- gerrit

commit 811551ecf124de8e8e859630cc26a694dfa84f9a
Author: Tomas Vanek <[email protected]>
Date:   Wed Jul 9 09:38:37 2025 +0200

    tcl/target/stm32u3x: fix voltage scale before flashing from gdb
    
    The config files of Cortex-M33 based devices (L5, U5, U3) intentionally
    dropped 'reset init' from the 'gdb-flash-erase-start' event to allow
    programming of unsecure part of flash in 0.5 RDP level.
    
    STM32U3 needs to set voltage range 1 before flash programming,
    which was issued in the 'reset-init' event only before this patch.
    
    If the application ran in voltage range 2 and gdb command 'load'
    was issued, the flash operation failed due to voltage range 2.
    
    Refactor 'gdb-flash-erase-start' event to use Tcl proc
    'stm32x5x_gdb_flash_erase_start'
    Add voltage range 1 setting (call 'config_voltage_range') to
    'gdb-flash-erase-start' event of STM32U3
    
    Change-Id: Ie910fef11d6737e34158cbb616721a1add72acd1
    Signed-off-by: Tomas Vanek <[email protected]>

diff --git a/tcl/target/stm32u3x.cfg b/tcl/target/stm32u3x.cfg
index 449c04217b..47c68935ec 100644
--- a/tcl/target/stm32u3x.cfg
+++ b/tcl/target/stm32u3x.cfg
@@ -43,3 +43,8 @@ proc config_voltage_range {} {
 $_TARGETNAME configure -event reset-init {
        config_voltage_range
 }
+
+$_TARGETNAME configure -event gdb-flash-erase-start {
+       stm32x5x_gdb_flash_erase_start
+       config_voltage_range
+}
diff --git a/tcl/target/stm32x5x_common.cfg b/tcl/target/stm32x5x_common.cfg
index b6370e4936..61ef35d6dc 100644
--- a/tcl/target/stm32x5x_common.cfg
+++ b/tcl/target/stm32x5x_common.cfg
@@ -88,6 +88,38 @@ proc stm32x5x_ahb_ap_secure_access {} {
        }
 }
 
+proc stm32x5x_gdb_flash_erase_start {} {
+       set use_secure_workarea 0
+       # check if FLASH_OPTR.TZEN is enabled
+       set FLASH_OPTR [mrw 0x40022040]
+       if {[expr {$FLASH_OPTR & 0x80000000}] == 0} {
+               echo "TZEN option bit disabled"
+               stm32x5x_ahb_ap_non_secure_access
+       } else {
+               stm32x5x_ahb_ap_secure_access
+               echo "TZEN option bit enabled"
+
+               # check if FLASH_OPTR.RDP is not Level 0.5
+               if {[expr {$FLASH_OPTR & 0xFF}] != 0x55} {
+                       set use_secure_workarea 1
+               }
+       }
+
+       set _TARGETNAME [target current]
+       set workarea_addr [$_TARGETNAME cget -work-area-phys]
+       echo "workarea_addr $workarea_addr"
+
+       if {$use_secure_workarea} {
+               set workarea_addr [expr {$workarea_addr | 0x10000000}]
+       } else {
+               set workarea_addr [expr {$workarea_addr & ~0x10000000}]
+       }
+
+       $_TARGETNAME configure -work-area-phys $workarea_addr
+}
+
+$_TARGETNAME configure -event gdb-flash-erase-start 
stm32x5x_gdb_flash_erase_start
+
 $_TARGETNAME configure -event reset-start {
        # Reset clock is MSI (4 MHz)
        adapter speed 480
@@ -124,36 +156,6 @@ $_TARGETNAME configure -event halted {
        }
 }
 
-$_TARGETNAME configure -event gdb-flash-erase-start {
-       set use_secure_workarea 0
-       # check if FLASH_OPTR.TZEN is enabled
-       set FLASH_OPTR [mrw 0x40022040]
-       if {[expr {$FLASH_OPTR & 0x80000000}] == 0} {
-               echo "TZEN option bit disabled"
-               stm32x5x_ahb_ap_non_secure_access
-       } else {
-               stm32x5x_ahb_ap_secure_access
-               echo "TZEN option bit enabled"
-
-               # check if FLASH_OPTR.RDP is not Level 0.5
-               if {[expr {$FLASH_OPTR & 0xFF}] != 0x55} {
-                       set use_secure_workarea 1
-               }
-       }
-
-       set _TARGETNAME [target current]
-       set workarea_addr [$_TARGETNAME cget -work-area-phys]
-       echo "workarea_addr $workarea_addr"
-
-       if {$use_secure_workarea} {
-               set workarea_addr [expr {$workarea_addr | 0x10000000}]
-       } else {
-               set workarea_addr [expr {$workarea_addr & ~0x10000000}]
-       }
-
-       $_TARGETNAME configure -work-area-phys $workarea_addr
-}
-
 tpiu create $_CHIPNAME.tpiu -dap $_CHIPNAME.dap -ap-num 0 -baseaddr 0xE0040000
 
 lappend _telnet_autocomplete_skip _proc_pre_enable_$_CHIPNAME.tpiu

-- 

Reply via email to