This is an automated email from Gerrit.

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

-- gerrit

commit f20e76c084a0fdd46a8a4893b875dabf39af3cd0
Author: Andreas Fritiofson <[email protected]>
Date:   Sun Dec 6 17:16:31 2015 +0100

    arm_adi_v5: Remove all cases of "restoring" previous dap_ap_select()
    
    All AP operations should select the AP to use before calling it so
    there's no point in restoring the previous value afterwards.
    
    The explicit call to dap_ap_select() before all AP operations should be
    moved into dap_queue_ap_read/write() which then would have to take the
    AP as an argument instead of the DAP.
    
    Change-Id: Icacb0c76ef2a5ac36b4d2f26b52ec01a8850286e
    Signed-off-by: Andreas Fritiofson <[email protected]>

diff --git a/src/flash/nor/kinetis.c b/src/flash/nor/kinetis.c
index 1795279..c248b05 100644
--- a/src/flash/nor/kinetis.c
+++ b/src/flash/nor/kinetis.c
@@ -245,6 +245,8 @@ static int kinetis_mdm_write_register(struct adiv5_dap 
*dap, unsigned reg, uint3
        int retval;
        LOG_DEBUG("MDM_REG[0x%02x] <- %08" PRIX32, reg, value);
 
+       dap_ap_select(dap, 1);
+
        retval = dap_queue_ap_write(dap, reg, value);
        if (retval != ERROR_OK) {
                LOG_DEBUG("MDM: failed to queue a write request");
@@ -264,6 +266,9 @@ static int kinetis_mdm_write_register(struct adiv5_dap 
*dap, unsigned reg, uint3
 static int kinetis_mdm_read_register(struct adiv5_dap *dap, unsigned reg, 
uint32_t *result)
 {
        int retval;
+
+       dap_ap_select(dap, 1);
+
        retval = dap_queue_ap_read(dap, reg, result);
        if (retval != ERROR_OK) {
                LOG_DEBUG("MDM: failed to queue a read request");
@@ -316,7 +321,6 @@ COMMAND_HANDLER(kinetis_mdm_mass_erase)
        }
 
        int retval;
-       const uint8_t original_ap = dap_ap_get_select(dap);
 
        /*
         * ... Power on the processor, or if power has already been
@@ -333,8 +337,6 @@ COMMAND_HANDLER(kinetis_mdm_mass_erase)
                LOG_WARNING("Attempting mass erase without hardware reset. This 
is not reliable; "
                            "it's recommended you connect SRST and use 
``reset_config srst_only''.");
 
-       dap_ap_select(dap, 1);
-
        retval = kinetis_mdm_write_register(dap, MDM_REG_CTRL, 
MEM_CTRL_SYS_RES_REQ);
        if (retval != ERROR_OK)
                return retval;
@@ -384,8 +386,6 @@ COMMAND_HANDLER(kinetis_mdm_mass_erase)
        if (retval != ERROR_OK)
                return retval;
 
-       dap_ap_select(dap, original_ap);
-
        if (jtag_get_reset_config() & RESET_HAS_SRST) {
                /* halt MCU otherwise it loops in hard fault - WDOG reset cycle 
*/
                target->reset_halt = true;
@@ -420,10 +420,6 @@ COMMAND_HANDLER(kinetis_check_flash_security_status)
 
        uint32_t val;
        int retval;
-       const uint8_t origninal_ap = dap_ap_get_select(dap);
-
-       dap_ap_select(dap, 1);
-
 
        /*
         * ... The MDM-AP ID register can be read to verify that the
@@ -474,7 +470,6 @@ COMMAND_HANDLER(kinetis_check_flash_security_status)
                LOG_WARNING("MDM: Secured MCU state detected however it may be 
a false alarm");
                LOG_WARNING("MDM: Halting target to detect secured state 
reliably");
 
-               dap_ap_select(dap, origninal_ap);
                retval = target_halt(target);
                if (retval == ERROR_OK)
                        retval = target_wait_state(target, TARGET_HALTED, 100);
@@ -487,7 +482,6 @@ COMMAND_HANDLER(kinetis_check_flash_security_status)
                }
 
                /* re-read status */
-               dap_ap_select(dap, 1);
                retval = kinetis_mdm_read_register(dap, MDM_REG_STAT, &val);
                if (retval != ERROR_OK) {
                        LOG_ERROR("MDM: failed to read MDM_REG_STAT");
@@ -512,8 +506,6 @@ COMMAND_HANDLER(kinetis_check_flash_security_status)
                jtag_poll_set_enabled(true);
        }
 
-       dap_ap_select(dap, origninal_ap);
-
        return ERROR_OK;
 
 fail:
diff --git a/src/flash/nor/sim3x.c b/src/flash/nor/sim3x.c
index 0a5906c..e30ca45 100644
--- a/src/flash/nor/sim3x.c
+++ b/src/flash/nor/sim3x.c
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2014 by Ladislav B�bel                                  *
+ *   Copyright (C) 2014 by Ladislav Bábel                                  *
  *   [email protected]                                                   *
  *                                                                         *
  *   Copyright (C) 2015 by Andreas Bomholtz                                *
@@ -893,6 +893,8 @@ static int ap_write_register(struct adiv5_dap *dap, 
unsigned reg, uint32_t value
        int retval;
        LOG_DEBUG("DAP_REG[0x%02x] <- %08" PRIX32, reg, value);
 
+       dap_ap_select(dap, SIM3X_AP);
+
        retval = dap_queue_ap_write(dap, reg, value);
        if (retval != ERROR_OK) {
                LOG_DEBUG("DAP: failed to queue a write request");
@@ -911,6 +913,9 @@ static int ap_write_register(struct adiv5_dap *dap, 
unsigned reg, uint32_t value
 static int ap_read_register(struct adiv5_dap *dap, unsigned reg, uint32_t 
*result)
 {
        int retval;
+
+       dap_ap_select(dap, SIM3X_AP);
+
        retval = dap_queue_ap_read(dap, reg, result);
        if (retval != ERROR_OK) {
                LOG_DEBUG("DAP: failed to queue a read request");
@@ -959,9 +964,6 @@ COMMAND_HANDLER(sim3x_mass_erase)
                return ERROR_FAIL;
        }
 
-       const uint8_t origninal_ap = dap_ap_get_select(dap);
-       dap_ap_select(dap, SIM3X_AP);
-
        ret = ap_read_register(dap, SIM3X_AP_ID, &val);
        if (ret != ERROR_OK)
                return ret;
@@ -988,8 +990,6 @@ COMMAND_HANDLER(sim3x_mass_erase)
        if (ret != ERROR_OK)
                return ret;
 
-       dap_ap_select(dap, origninal_ap);
-
        LOG_INFO("Mass erase success");
        return ERROR_OK;
 }
@@ -1017,9 +1017,6 @@ COMMAND_HANDLER(sim3x_lock)
                        return ERROR_FAIL;
                }
        } else {
-               const uint8_t origninal_ap = dap_ap_get_select(dap);
-               dap_ap_select(dap, SIM3X_AP);
-
                /* check SIM3X_AP_ID */
                ret = ap_read_register(dap, SIM3X_AP_ID, &val);
                if (ret != ERROR_OK)
@@ -1039,8 +1036,6 @@ COMMAND_HANDLER(sim3x_lock)
                        if (ret != ERROR_OK)
                                return ret;
 
-                       dap_ap_select(dap, origninal_ap);
-
                        if (val & SIM3X_AP_INIT_STAT_LOCK) {
                                LOG_INFO("Target is already locked");
                                return ERROR_OK;
@@ -1049,8 +1044,6 @@ COMMAND_HANDLER(sim3x_lock)
                                return ERROR_FAIL;
                        }
                }
-
-               dap_ap_select(dap, origninal_ap);
        }
 
        ret = target_read_u32(target, LOCK_WORD_ADDRESS, &val);
diff --git a/src/target/arm_adi_v5.c b/src/target/arm_adi_v5.c
index 7726b9d..59b5e01 100644
--- a/src/target/arm_adi_v5.c
+++ b/src/target/arm_adi_v5.c
@@ -842,10 +842,8 @@ int dap_get_debugbase(struct adiv5_ap *ap,
                        uint32_t *dbgbase, uint32_t *apid)
 {
        struct adiv5_dap *dap = ap->dap;
-       uint32_t ap_old;
        int retval;
 
-       ap_old = dap_ap_get_select(dap);
        dap_ap_select(dap, ap->ap_num);
 
        retval = dap_queue_ap_read(dap, MEM_AP_REG_BASE, dbgbase);
@@ -858,21 +856,16 @@ int dap_get_debugbase(struct adiv5_ap *ap,
        if (retval != ERROR_OK)
                return retval;
 
-       dap_ap_select(dap, ap_old);
-
        return ERROR_OK;
 }
 
 int dap_lookup_cs_component(struct adiv5_ap *ap,
                        uint32_t dbgbase, uint8_t type, uint32_t *addr, int32_t 
*idx)
 {
-       struct adiv5_dap *dap = ap->dap;
-       uint32_t ap_old;
        uint32_t romentry, entry_offset = 0, component_base, devtype;
        int retval;
 
        *addr = 0;
-       ap_old = dap_ap_get_select(dap);
 
        do {
                retval = mem_ap_read_atomic_u32(ap, (dbgbase&0xFFFFF000) |
@@ -916,8 +909,6 @@ int dap_lookup_cs_component(struct adiv5_ap *ap,
                entry_offset += 4;
        } while (romentry > 0);
 
-       dap_ap_select(dap, ap_old);
-
        if (!*addr)
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 

-- 

------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to