]> git.sur5r.net Git - openocd/blobdiff - src/jtag/core.c
arm_adi_v5: Fix packed and unaligned memory writes
[openocd] / src / jtag / core.c
index 9f1e4cf03903fbe223473f7a0aec4b8cd1847386..b61280cc0ce2bb349a1d23f3bb041b4aba62516c 100644 (file)
@@ -25,7 +25,7 @@
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -1177,7 +1177,7 @@ static int jtag_validate_ircapture(void)
        int total_ir_length = 0;
        uint8_t *ir_test = NULL;
        struct scan_field field;
-       int val;
+       uint64_t val;
        int chain_pos = 0;
        int retval;
 
@@ -1236,8 +1236,8 @@ static int jtag_validate_ircapture(void)
                 */
                if (tap->ir_length == 0) {
                        tap->ir_length = 2;
-                       while ((val = buf_get_u32(ir_test, chain_pos, tap->ir_length + 1)) == 1
-                                       && tap->ir_length <= 32) {
+                       while ((val = buf_get_u64(ir_test, chain_pos, tap->ir_length + 1)) == 1
+                                       && tap->ir_length <= 64) {
                                tap->ir_length++;
                        }
                        LOG_WARNING("AUTO %s - use \"... -irlen %d\"",
@@ -1251,25 +1251,23 @@ static int jtag_validate_ircapture(void)
                 * this part of the JTAG spec, so their capture mask/value
                 * attributes might disable this test.
                 */
-               val = buf_get_u32(ir_test, chain_pos, tap->ir_length);
+               val = buf_get_u64(ir_test, chain_pos, tap->ir_length);
                if ((val & tap->ir_capture_mask) != tap->ir_capture_value) {
-                       LOG_ERROR("%s: IR capture error; saw 0x%0*x not 0x%0*x",
+                       LOG_ERROR("%s: IR capture error; saw 0x%0*" PRIx64 " not 0x%0*" PRIx32,
                                jtag_tap_name(tap),
-                               (tap->ir_length + 7) / tap->ir_length,
-                               val,
-                               (tap->ir_length + 7) / tap->ir_length,
-                               (unsigned) tap->ir_capture_value);
+                               (tap->ir_length + 7) / tap->ir_length, val,
+                               (tap->ir_length + 7) / tap->ir_length, tap->ir_capture_value);
 
                        retval = ERROR_JTAG_INIT_FAILED;
                        goto done;
                }
-               LOG_DEBUG("%s: IR capture 0x%0*x", jtag_tap_name(tap),
+               LOG_DEBUG("%s: IR capture 0x%0*" PRIx64, jtag_tap_name(tap),
                        (tap->ir_length + 7) / tap->ir_length, val);
                chain_pos += tap->ir_length;
        }
 
        /* verify the '11' sentinel we wrote is returned at the end */
-       val = buf_get_u32(ir_test, chain_pos, 2);
+       val = buf_get_u64(ir_test, chain_pos, 2);
        if (val != 0x3) {
                char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
 
@@ -1371,6 +1369,11 @@ int adapter_init(struct command_context *cmd_ctx)
                        return retval;
        }
 
+       if (jtag->speed == NULL) {
+               LOG_INFO("This adapter doesn't support configurable speed");
+               return ERROR_OK;
+       }
+
        if (CLOCK_MODE_UNSELECTED == clock_mode) {
                LOG_ERROR("An adapter speed is not selected in the init script."
                        " Insert a call to adapter_khz or jtag_rclk to proceed.");