This is an automated email from Gerrit.

Spencer Oliver (s...@spen-soft.co.uk) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/905

-- gerrit

commit a3a361d69f1811b20644a7151bd51142e9354898
Author: Spencer Oliver <s...@spen-soft.co.uk>
Date:   Mon Oct 8 10:05:45 2012 +0100

    stlink: fix vector catch not being cleared
    
    Seem after a reset the stlink is not clearing the vector catch 
(VC_CORERESET)
    in the Debug Control Register.
    
    This has the side effect if the user presses an external reset the core will
    halt, this patch fixes that.
    
    Change-Id: Ic3b2c3991b79cacbbd901c02b79613c2e204e71f
    Signed-off-by: Spencer Oliver <s...@spen-soft.co.uk>

diff --git a/src/target/stm32_stlink.c b/src/target/stm32_stlink.c
index aac1eec..e18932c 100644
--- a/src/target/stm32_stlink.c
+++ b/src/target/stm32_stlink.c
@@ -325,6 +325,7 @@ static int stm32_stlink_load_context(struct target *target)
 
 static int stlink_debug_entry(struct target *target)
 {
+       struct stlink_interface_s *stlink_if = target_to_stlink(target);
        struct armv7m_common *armv7m = target_to_armv7m(target);
        struct arm *arm = &armv7m->arm;
        struct reg *r;
@@ -337,6 +338,9 @@ static int stlink_debug_entry(struct target *target)
 
        stm32_stlink_load_context(target);
 
+       /* make sure we clear the vector catch bit */
+       stlink_if->layout->api->write_debug_reg(stlink_if->fd, DCB_DEMCR, 0);
+
        r = armv7m->core_cache->reg_list + ARMV7M_xPSR;
        xPSR = buf_get_u32(r->value, 0, 32);
 
@@ -427,7 +431,12 @@ static int stm32_stlink_assert_reset(struct target *target)
        }
 
        stlink_if->layout->api->write_debug_reg(stlink_if->fd, DCB_DHCSR, 
DBGKEY|C_DEBUGEN);
-       stlink_if->layout->api->write_debug_reg(stlink_if->fd, DCB_DEMCR, 
VC_CORERESET);
+
+       /* only set vector catch id halt is requested */
+       if (target->reset_halt)
+               stlink_if->layout->api->write_debug_reg(stlink_if->fd, 
DCB_DEMCR, VC_CORERESET);
+       else
+               stlink_if->layout->api->write_debug_reg(stlink_if->fd, 
DCB_DEMCR, 0);
 
        if (jtag_reset_config & RESET_HAS_SRST) {
                if (!srst_asserted) {

-- 

------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to