aice: Always setup SDP basic mode 67/1567/4
authorHsiangkai Wang <hsiangkai@gmail.com>
Thu, 13 Jun 2013 03:45:10 +0000 (11:45 +0800)
committerSpencer Oliver <spen@spen-soft.co.uk>
Fri, 13 Sep 2013 19:36:10 +0000 (19:36 +0000)
Change-Id: I1c0c11c2b9097b25324da0591edf036af207dbe9
Signed-off-by: Hsiangkai Wang <hsiangkai@gmail.com>
Reviewed-on: http://openocd.zylin.com/1567
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/jtag/aice/aice_usb.c

index 652298559ebbe22efc8bb14369621600caac8991..962219f79c0ba00f8ac248b00c451217d99a3d7b 100644 (file)
@@ -425,6 +425,24 @@ static void aice_usb_packet_append(uint8_t *out_buffer, int out_length,
 
 /***************************************************************************/
 /* AICE commands */
+static int aice_edm_reset(void)
+{
+       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+               return ERROR_FAIL;
+
+       /* turn off FASTMODE */
+       uint32_t pin_status;
+       if (aice_read_ctrl(AICE_READ_CTRL_GET_JTAG_PIN_STATUS, &pin_status)
+                       != ERROR_OK)
+               return ERROR_FAIL;
+
+       if (aice_write_ctrl(AICE_WRITE_CTRL_JTAG_PIN_STATUS, pin_status & (~0x2))
+                       != ERROR_OK)
+               return ERROR_FAIL;
+
+       return ERROR_OK;
+}
+
 static int aice_scan_chain(uint32_t *id_codes, uint8_t *num_of_ids)
 {
        int result;
@@ -462,7 +480,7 @@ static int aice_scan_chain(uint32_t *id_codes, uint8_t *num_of_ids)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -593,7 +611,7 @@ int aice_read_dtr(uint8_t target_id, uint32_t *data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -643,7 +661,7 @@ int aice_write_dtr(uint8_t target_id, uint32_t data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -693,7 +711,7 @@ int aice_read_misc(uint8_t target_id, uint32_t address, uint32_t *data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -743,7 +761,7 @@ int aice_write_misc(uint8_t target_id, uint32_t address, uint32_t data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -793,7 +811,7 @@ int aice_read_edmsr(uint8_t target_id, uint32_t address, uint32_t *data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -843,7 +861,7 @@ int aice_write_edmsr(uint8_t target_id, uint32_t address, uint32_t data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -919,7 +937,7 @@ static int aice_write_dim(uint8_t target_id, uint32_t *word, uint8_t num_of_word
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -968,7 +986,7 @@ static int aice_do_execute(uint8_t target_id)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -1019,7 +1037,7 @@ int aice_write_mem_b(uint8_t target_id, uint32_t address, uint32_t data)
                                        return ERROR_FAIL;
 
                                /* clear timeout and retry */
-                               if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                               if (aice_edm_reset() != ERROR_OK)
                                        return ERROR_FAIL;
 
                                retry_times++;
@@ -1071,7 +1089,7 @@ int aice_write_mem_h(uint8_t target_id, uint32_t address, uint32_t data)
                                        return ERROR_FAIL;
 
                                /* clear timeout and retry */
-                               if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                               if (aice_edm_reset() != ERROR_OK)
                                        return ERROR_FAIL;
 
                                retry_times++;
@@ -1123,7 +1141,7 @@ int aice_write_mem(uint8_t target_id, uint32_t address, uint32_t data)
                                        return ERROR_FAIL;
 
                                /* clear timeout and retry */
-                               if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                               if (aice_edm_reset() != ERROR_OK)
                                        return ERROR_FAIL;
 
                                retry_times++;
@@ -1172,7 +1190,7 @@ int aice_fastread_mem(uint8_t target_id, uint8_t *word, uint32_t num_of_words)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -1220,7 +1238,7 @@ int aice_fastwrite_mem(uint8_t target_id, const uint8_t *word, uint32_t num_of_w
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -1270,7 +1288,7 @@ int aice_read_mem_b(uint8_t target_id, uint32_t address, uint32_t *data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -1320,7 +1338,7 @@ int aice_read_mem_h(uint8_t target_id, uint32_t address, uint32_t *data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -1371,7 +1389,7 @@ int aice_read_mem(uint8_t target_id, uint32_t address, uint32_t *data)
                                return ERROR_FAIL;
 
                        /* clear timeout and retry */
-                       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+                       if (aice_edm_reset() != ERROR_OK)
                                return ERROR_FAIL;
 
                        retry_times++;
@@ -1920,14 +1938,6 @@ get_delay:
        return ERROR_OK;
 }
 
-static int aice_edm_reset(void)
-{
-       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
-               return ERROR_FAIL;
-
-       return ERROR_OK;
-}
-
 static int aice_usb_set_clock(int set_clock)
 {
        if (aice_write_ctrl(AICE_WRITE_CTRL_TCK_CONTROL,
@@ -2367,9 +2377,10 @@ static int aice_usb_state(enum aice_target_state_s *state)
 
 static int aice_usb_reset(void)
 {
-       if (aice_write_ctrl(AICE_WRITE_CTRL_CLEAR_TIMEOUT_STATUS, 0x1) != ERROR_OK)
+       if (aice_edm_reset() != ERROR_OK)
                return ERROR_FAIL;
 
+       /* issue TRST */
        if (custom_trst_script == NULL) {
                if (aice_write_ctrl(AICE_WRITE_CTRL_JTAG_PIN_CONTROL,
                                        AICE_JTAG_PIN_CONTROL_TRST) != ERROR_OK)

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)