ARM DPM: tweak initialization
authorDavid Brownell <dbrownell@users.sourceforge.net>
Thu, 3 Dec 2009 06:57:07 +0000 (22:57 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Thu, 3 Dec 2009 07:08:42 +0000 (23:08 -0800)
Move the initial breakpoint/watchpoint disable calls to
arm_dpm_initialize(), and start using that routine.  This
split helps with arm11 support.

src/target/arm11.c
src/target/arm11_dbgtap.c
src/target/arm11_dbgtap.h
src/target/arm_dpm.c
src/target/arm_dpm.h
src/target/cortex_a8.c

index 605e741b3db0819c5ea1d9168a4345f9edd1d35f..5053414337822bbe7701b73aeb7aaae533f43e6a 100644 (file)
@@ -1330,10 +1330,8 @@ static int arm11_examine(struct target *target)
        /* Build register cache "late", after target_init(), since we
         * want to know if this core supports Secure Monitor mode.
         */
-       if (!target_was_examined(target)) {
-               arm11_dpm_init(arm11, didr);
-               retval = arm_dpm_setup(&arm11->dpm);
-       }
+       if (!target_was_examined(target))
+               retval = arm11_dpm_init(arm11, didr);
 
        /* ETM on ARM11 still uses original scanchain 6 access mode */
        if (arm11->arm.etm && !target_was_examined(target)) {
index cfcb5bfabb9362a1d3d6cc8141a3dd59be45a2b6..6ce308e52ed215416183ac8abe5e58e9afcb32ed 100644 (file)
@@ -1022,10 +1022,11 @@ static int arm11_dpm_instr_read_data_r0(struct arm_dpm *dpm,
                        opcode, data);
 }
 
-
-void arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
+/** Set up high-level debug module utilities */
+int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
 {
        struct arm_dpm *dpm = &arm11->dpm;
+       int retval;
 
        dpm->arm = &arm11->arm;
 
@@ -1039,4 +1040,12 @@ void arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
 
        dpm->instr_read_data_dcc = arm11_dpm_instr_read_data_dcc;
        dpm->instr_read_data_r0 = arm11_dpm_instr_read_data_r0;
+
+       retval = arm_dpm_setup(dpm);
+       if (retval != ERROR_OK)
+               return retval;
+
+       retval = arm_dpm_initialize(dpm);
+
+       return retval;
 }
index 8b6a2065552835935bc6d4d98f7681b00829870a..2203361d632f91103ac74d23ce77dd0720072482 100644 (file)
@@ -60,7 +60,6 @@ void arm11_sc7_set_vcr(struct arm11_common *arm11, uint32_t value);
 int arm11_read_memory_word(struct arm11_common *arm11,
                uint32_t address, uint32_t *result);
 
-/* Set up high-level debug module utilities */
-void arm11_dpm_init(struct arm11_common *arm11, uint32_t didr);
+int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr);
 
 #endif // ARM11_DBGTAP_H
index 7c09e0645ec37bc6d409f202628a3270b14bdbea..434c63e17a4298bb354bcab4da17b1b910dec741 100644 (file)
@@ -807,18 +807,6 @@ int arm_dpm_setup(struct arm_dpm *dpm)
                return ERROR_FAIL;
        }
 
-       /* Disable all breakpoints and watchpoints at startup. */
-       if (dpm->bpwp_disable) {
-               unsigned i;
-
-               for (i = 0; i < dpm->nbp; i++)
-                       (void) dpm->bpwp_disable(dpm, i);
-               for (i = 0; i < dpm->nwp; i++)
-                       (void) dpm->bpwp_disable(dpm, 16 + i);
-       } else
-               LOG_WARNING("%s: can't disable breakpoints and watchpoints",
-                       target_name(target));
-
        LOG_INFO("%s: hardware has %d breakpoints, %d watchpoints",
                        target_name(target), dpm->nbp, dpm->nwp);
 
@@ -835,6 +823,17 @@ int arm_dpm_setup(struct arm_dpm *dpm)
  */
 int arm_dpm_initialize(struct arm_dpm *dpm)
 {
-       /* FIXME -- nothing yet */
+       /* Disable all breakpoints and watchpoints at startup. */
+       if (dpm->bpwp_disable) {
+               unsigned i;
+
+               for (i = 0; i < dpm->nbp; i++)
+                       (void) dpm->bpwp_disable(dpm, i);
+               for (i = 0; i < dpm->nwp; i++)
+                       (void) dpm->bpwp_disable(dpm, 16 + i);
+       } else
+               LOG_WARNING("%s: can't disable breakpoints and watchpoints",
+                       target_name(dpm->arm->target));
+
        return ERROR_OK;
 }
index 191f465a50f3ebe34edfaab6df93060252560f33..c284144a6795dfbc0b4465fc60332917616f1bee 100644 (file)
@@ -129,7 +129,7 @@ struct arm_dpm {
 };
 
 int arm_dpm_setup(struct arm_dpm *dpm);
-int arm_dpm_reinitialize(struct arm_dpm *dpm);
+int arm_dpm_initialize(struct arm_dpm *dpm);
 
 int arm_dpm_read_current_registers(struct arm_dpm *);
 int arm_dpm_write_dirty_registers(struct arm_dpm *, bool bpwp);
index 5f2de7658dd94014a7d5cff5dc3283ec1e3808d0..9ca072e0d934a109e03b1e90c628d53eba2642be 100644 (file)
@@ -523,6 +523,7 @@ static int cortex_a8_bpwp_disable(struct arm_dpm *dpm, unsigned index)
 static int cortex_a8_dpm_setup(struct cortex_a8_common *a8, uint32_t didr)
 {
        struct arm_dpm *dpm = &a8->armv7a_common.dpm;
+       int retval;
 
        dpm->arm = &a8->armv7a_common.armv4_5_common;
        dpm->didr = didr;
@@ -540,7 +541,11 @@ static int cortex_a8_dpm_setup(struct cortex_a8_common *a8, uint32_t didr)
        dpm->bpwp_enable = cortex_a8_bpwp_enable;
        dpm->bpwp_disable = cortex_a8_bpwp_disable;
 
-       return arm_dpm_setup(dpm);
+       retval = arm_dpm_setup(dpm);
+       if (retval == ERROR_OK)
+               retval = arm_dpm_initialize(dpm);
+
+       return retval;
 }
 
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)