This is an automated email from Gerrit.

Uwe Bonnes ([email protected]) just uploaded a new patch 
set to Gerrit, which you can find at http://openocd.zylin.com/2868

-- gerrit

commit 77234ccc36d9d49d046bc0e7072cfc8fc91a713c
Author: Uwe Bonnes <[email protected]>
Date:   Wed Jul 15 12:53:40 2015 +0200

    Cortex-M: Detect Flash Patch Revision and implement Rev. 2 handling.
    
    E.g. STM32F7 implements Rev.2.
    Supercedes abandoned patch 2755 that doesn't evaluate Flash patch revision.
    
    Change-Id: I48756b0451c7359475066969c900978a536bc328
    Signed-off-by: Uwe Bonnes <[email protected]>

diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 2cb83a4..a92bd2e 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -1125,7 +1125,6 @@ int cortex_m_set_breakpoint(struct target *target, struct 
breakpoint *breakpoint
 {
        int retval;
        int fp_num = 0;
-       uint32_t hilo;
        struct cortex_m_common *cortex_m = target_to_cm(target);
        struct cortex_m_fp_comparator *comparator_list = 
cortex_m->fp_comparator_list;
 
@@ -1138,6 +1137,7 @@ int cortex_m_set_breakpoint(struct target *target, struct 
breakpoint *breakpoint
                breakpoint->type = BKPT_TYPE_BY_ADDR(breakpoint->address);
 
        if (breakpoint->type == BKPT_HARD) {
+               uint32_t fpcr_value;
                while (comparator_list[fp_num].used && (fp_num < 
cortex_m->fp_num_code))
                        fp_num++;
                if (fp_num >= cortex_m->fp_num_code) {
@@ -1145,9 +1145,18 @@ int cortex_m_set_breakpoint(struct target *target, 
struct breakpoint *breakpoint
                        return ERROR_FAIL;
                }
                breakpoint->set = fp_num + 1;
-               hilo = (breakpoint->address & 0x2) ? FPCR_REPLACE_BKPT_HIGH : 
FPCR_REPLACE_BKPT_LOW;
+               fpcr_value = breakpoint->address | 1;
+               if ( 0 == cortex_m->fp_rev) {
+                       uint32_t hilo;
+                       hilo = (breakpoint->address & 0x2) ? 
FPCR_REPLACE_BKPT_HIGH : FPCR_REPLACE_BKPT_LOW;
+                       fpcr_value = (fpcr_value & 0x1FFFFFFC) | hilo;
+               }
+               else if ( cortex_m->fp_rev > 1) {
+                       LOG_ERROR("Unhandled Cortex-M Flash Patch Breakpoint 
architecture revision");
+                       return ERROR_FAIL;
+               }
                comparator_list[fp_num].used = 1;
-               comparator_list[fp_num].fpcr_value = (breakpoint->address & 
0x1FFFFFFC) | hilo | 1;
+               comparator_list[fp_num].fpcr_value = fpcr_value;
                target_write_u32(target, comparator_list[fp_num].fpcr_address,
                        comparator_list[fp_num].fpcr_value);
                LOG_DEBUG("fpc_num %i fpcr_value 0x%" PRIx32 "",
@@ -1955,6 +1964,9 @@ int cortex_m_examine(struct target *target)
                cortex_m->fp_num_code = ((fpcr >> 8) & 0x70) | ((fpcr >> 4) & 
0xF);
                cortex_m->fp_num_lit = (fpcr >> 8) & 0xF;
                cortex_m->fp_code_available = cortex_m->fp_num_code;
+               /* Detect flash patch revision, see RM DDI 0403E.b page C1-817.
+                  Revision is zero base, fp_rev == 1 means Rev.2 ! */
+               cortex_m->fp_rev = (fpcr >> 28) & 0xf;
                free(cortex_m->fp_comparator_list);
                cortex_m->fp_comparator_list = calloc(
                                cortex_m->fp_num_code + cortex_m->fp_num_lit,
diff --git a/src/target/cortex_m.h b/src/target/cortex_m.h
index 028b4c8..94a30f1 100644
--- a/src/target/cortex_m.h
+++ b/src/target/cortex_m.h
@@ -175,6 +175,7 @@ struct cortex_m_common {
        int fp_num_lit;
        int fp_num_code;
        int fp_code_available;
+       int fp_rev;
        int fpb_enabled;
        int auto_bp_type;
        struct cortex_m_fp_comparator *fp_comparator_list;

-- 

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to