This is an automated email from Gerrit.

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

-- gerrit

commit bdc3175edb9bda6127e59faeb2235fed4ff417b4
Author: Felipe Balbi <[email protected]>
Date:   Fri Feb 24 15:21:37 2017 +0200

    target: lakemon: probemode entry isn't instantaneous
    
    When testing with Intel Galileo GEN2 I have noticed a few iterations
    where probemode entry took a little longer. At most I had to read
    tapstatus twice. This patch uses a loop of up to 100 iterations to
    wait for tapstatus to update with PM entry results.
    
    Change-Id: I1c87d7dde715255b3fd2460d299b9493218533fc
    Signed-off-by: Felipe Balbi <[email protected]>

diff --git a/src/target/lakemont.c b/src/target/lakemont.c
index 2bd12fd..5f92f0d 100644
--- a/src/target/lakemont.c
+++ b/src/target/lakemont.c
@@ -444,6 +444,8 @@ static uint32_t get_tapstatus(struct target *t)
 static int enter_probemode(struct target *t)
 {
        uint32_t tapstatus = 0;
+       int retries = 100;
+
        tapstatus = get_tapstatus(t);
        LOG_DEBUG("TS before PM enter = 0x%08" PRIx32, tapstatus);
        if (tapstatus & TS_PM_BIT) {
@@ -456,15 +458,17 @@ static int enter_probemode(struct target *t)
        scan.out[0] = 1;
        if (drscan(t, scan.out, scan.in, 1) != ERROR_OK)
                return ERROR_FAIL;
-       tapstatus = get_tapstatus(t);
-       LOG_DEBUG("TS after PM enter = 0x%08" PRIx32, tapstatus);
-       if ((tapstatus & TS_PM_BIT) && (!(tapstatus & TS_EN_PM_BIT)))
-               return ERROR_OK;
-       else {
-               LOG_ERROR("%s PM enter error, tapstatus = 0x%08" PRIx32
-                               , __func__, tapstatus);
-               return ERROR_FAIL;
+
+       while (retries--) {
+               tapstatus = get_tapstatus(t);
+               LOG_DEBUG("TS after PM enter = 0x%08" PRIx32, tapstatus);
+               if ((tapstatus & TS_PM_BIT) && (!(tapstatus & TS_EN_PM_BIT)))
+                       return ERROR_OK;
        }
+
+       LOG_ERROR("%s PM enter error, tapstatus = 0x%08" PRIx32
+                       , __func__, tapstatus);
+       return ERROR_FAIL;
 }
 
 static int exit_probemode(struct target *t)

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to