jim tests: use installed
[openocd.git] / src / target / arm_adi_v5.c
index 1b97e3349f0c8506c09f524df74c6623a73518cb..34147967a7feda7fa526e670ba7b5c05a59f395e 100644 (file)
@@ -5,7 +5,7 @@
  *   Copyright (C) 2008 by Spencer Oliver                                  *
  *   spen@spen-soft.co.uk                                                  *
  *                                                                         *
- *   Copyright (C) 2009 by Oyvind Harboe                                   *
+ *   Copyright (C) 2009-2010 by Oyvind Harboe                              *
  *   oyvind.harboe@zylin.com                                               *
  *                                                                         *
  *   Copyright (C) 2009-2010 by David Brownell                             *
@@ -102,11 +102,11 @@ static uint32_t max_tar_block_size(uint32_t tar_autoincr_block, uint32_t address
  */
 void dap_ap_select(struct adiv5_dap *dap,uint8_t apsel)
 {
-       uint32_t select = (apsel << 24) & 0xFF000000;
+       uint32_t select_apsel = (apsel << 24) & 0xFF000000;
 
-       if (select != dap->apsel)
+       if (select_apsel != dap->apsel)
        {
-               dap->apsel = select;
+               dap->apsel = select_apsel;
                /* Switching AP invalidates cached values.
                 * Values MUST BE UPDATED BEFORE AP ACCESS.
                 */
@@ -309,17 +309,19 @@ int mem_ap_write_buf_u32(struct adiv5_dap *dap, uint8_t *buffer, int count, uint
                if (blocksize == 0)
                        blocksize = 1;
 
-               dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE, address);
+               retval = dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE, address);
+               if (retval != ERROR_OK)
+                       return retval;
 
                for (writecount = 0; writecount < blocksize; writecount++)
                {
                        retval = dap_queue_ap_write(dap, AP_REG_DRW,
-                               *(uint32_t *) (buffer + 4 * writecount));
+                               *(uint32_t *) ((void *) (buffer + 4 * writecount)));
                        if (retval != ERROR_OK)
                                break;
                }
 
-               if (dap_run(dap) == ERROR_OK)
+               if ((retval = dap_run(dap)) == ERROR_OK)
                {
                        wcount = wcount - blocksize;
                        address = address + 4 * blocksize;
@@ -333,8 +335,7 @@ int mem_ap_write_buf_u32(struct adiv5_dap *dap, uint8_t *buffer, int count, uint
                if (errorcount > 1)
                {
                        LOG_WARNING("Block write error address 0x%" PRIx32 ", wcount 0x%x", address, wcount);
-                       /* REVISIT return the *actual* fault code */
-                       return ERROR_JTAG_DEVICE_ERROR;
+                       return retval;
                }
        }
 
@@ -363,7 +364,9 @@ static int mem_ap_write_buf_packed_u16(struct adiv5_dap *dap,
                if (blocksize == 0)
                        blocksize = 1;
 
-               dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
+               retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
+               if (retval != ERROR_OK)
+                       return retval;
                writecount = blocksize;
 
                do
@@ -372,13 +375,14 @@ static int mem_ap_write_buf_packed_u16(struct adiv5_dap *dap,
 
                        if (nbytes < 4)
                        {
-                               if (mem_ap_write_buf_u16(dap, buffer,
-                                               nbytes, address) != ERROR_OK)
+                               retval = mem_ap_write_buf_u16(dap, buffer,
+                                               nbytes, address);
+                               if (retval != ERROR_OK)
                                {
                                        LOG_WARNING("Block write error address "
                                                "0x%" PRIx32 ", count 0x%x",
                                                address, count);
-                                       return ERROR_JTAG_DEVICE_ERROR;
+                                       return retval;
                                }
 
                                address += nbytes >> 1;
@@ -401,13 +405,12 @@ static int mem_ap_write_buf_packed_u16(struct adiv5_dap *dap,
                                if (retval != ERROR_OK)
                                        break;
 
-                               if (dap_run(dap) != ERROR_OK)
+                               if ((retval = dap_run(dap)) != ERROR_OK)
                                {
                                        LOG_WARNING("Block write error address "
                                                "0x%" PRIx32 ", count 0x%x",
                                                address, count);
-                                       /* REVISIT return *actual* fault code */
-                                       return ERROR_JTAG_DEVICE_ERROR;
+                                       return retval;
                                }
                        }
 
@@ -430,7 +433,9 @@ int mem_ap_write_buf_u16(struct adiv5_dap *dap, uint8_t *buffer, int count, uint
 
        while (count > 0)
        {
-               dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
+               retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
+               if (retval != ERROR_OK)
+                       return retval;
                uint16_t svalue;
                memcpy(&svalue, buffer, sizeof(uint16_t));
                uint32_t outvalue = (uint32_t)svalue << 8 * (address & 0x3);
@@ -468,7 +473,9 @@ static int mem_ap_write_buf_packed_u8(struct adiv5_dap *dap,
                if (wcount < blocksize)
                        blocksize = wcount;
 
-               dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
+               retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
+               if (retval != ERROR_OK)
+                       return retval;
                writecount = blocksize;
 
                do
@@ -477,12 +484,13 @@ static int mem_ap_write_buf_packed_u8(struct adiv5_dap *dap,
 
                        if (nbytes < 4)
                        {
-                               if (mem_ap_write_buf_u8(dap, buffer, nbytes, address) != ERROR_OK)
+                               retval = mem_ap_write_buf_u8(dap, buffer, nbytes, address);
+                               if (retval != ERROR_OK)
                                {
                                        LOG_WARNING("Block write error address "
                                                "0x%" PRIx32 ", count 0x%x",
                                                address, count);
-                                       return ERROR_JTAG_DEVICE_ERROR;
+                                       return retval;
                                }
 
                                address += nbytes;
@@ -505,13 +513,12 @@ static int mem_ap_write_buf_packed_u8(struct adiv5_dap *dap,
                                if (retval != ERROR_OK)
                                        break;
 
-                               if (dap_run(dap) != ERROR_OK)
+                               if ((retval = dap_run(dap)) != ERROR_OK)
                                {
                                        LOG_WARNING("Block write error address "
                                                "0x%" PRIx32 ", count 0x%x",
                                                address, count);
-                                       /* REVISIT return *actual* fault code */
-                                       return ERROR_JTAG_DEVICE_ERROR;
+                                       return retval;
                                }
                        }
 
@@ -534,7 +541,9 @@ int mem_ap_write_buf_u8(struct adiv5_dap *dap, uint8_t *buffer, int count, uint3
 
        while (count > 0)
        {
-               dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
+               retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
+               if (retval != ERROR_OK)
+                       return retval;
                uint32_t outvalue = (uint32_t)*buffer << 8 * (address & 0x3);
                retval = dap_queue_ap_write(dap, AP_REG_DRW, outvalue);
                if (retval != ERROR_OK)
@@ -592,8 +601,10 @@ int mem_ap_read_buf_u32(struct adiv5_dap *dap, uint8_t *buffer,
                if (blocksize == 0)
                        blocksize = 1;
 
-               dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE,
+               retval = dap_setup_accessport(dap, CSW_32BIT | CSW_ADDRINC_SINGLE,
                                address);
+               if (retval != ERROR_OK)
+                       return retval;
 
                /* FIXME remove these three calls to adi_jtag_dp_scan(),
                 * so this routine becomes transport-neutral.  Be careful
@@ -603,43 +614,47 @@ int mem_ap_read_buf_u32(struct adiv5_dap *dap, uint8_t *buffer,
                 */
 
                /* Scan out first read */
-               adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
+               retval = adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
                                DPAP_READ, 0, NULL, NULL);
+               if (retval != ERROR_OK)
+                       return retval;
                for (readcount = 0; readcount < blocksize - 1; readcount++)
                {
                        /* Scan out next read; scan in posted value for the
                         * previous one.  Assumes read is acked "OK/FAULT",
                         * and CTRL_STAT says that meant "OK".
                         */
-                       adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
+                       retval = adi_jtag_dp_scan(dap, JTAG_DP_APACC, AP_REG_DRW,
                                        DPAP_READ, 0, buffer + 4 * readcount,
                                        &dap->ack);
+                       if (retval != ERROR_OK)
+                               return retval;
                }
 
                /* Scan in last posted value; RDBUFF has no other effect,
                 * assuming ack is OK/FAULT and CTRL_STAT says "OK".
                 */
-               adi_jtag_dp_scan(dap, JTAG_DP_DPACC, DP_RDBUFF,
+               retval = adi_jtag_dp_scan(dap, JTAG_DP_DPACC, DP_RDBUFF,
                                DPAP_READ, 0, buffer + 4 * readcount,
                                &dap->ack);
-               if (dap_run(dap) == ERROR_OK)
-               {
-                       wcount = wcount - blocksize;
-                       address += 4 * blocksize;
-                       buffer += 4 * blocksize;
-               }
-               else
-               {
-                       errorcount++;
-               }
+               if (retval != ERROR_OK)
+                       return retval;
 
-               if (errorcount > 1)
+               retval = dap_run(dap);
+               if (retval != ERROR_OK)
                {
-                       LOG_WARNING("Block read error address 0x%" PRIx32
-                               ", count 0x%x", address, count);
-                       /* REVISIT return the *actual* fault code */
-                       return ERROR_JTAG_DEVICE_ERROR;
+                       errorcount++;
+                       if (errorcount <= 1)
+                       {
+                               /* try again */
+                               continue;
+                       }
+                       LOG_WARNING("Block read error address 0x%" PRIx32, address);
+                       return retval;
                }
+               wcount = wcount - blocksize;
+               address += 4 * blocksize;
+               buffer += 4 * blocksize;
        }
 
        /* if we have an unaligned access - reorder data */
@@ -682,7 +697,9 @@ static int mem_ap_read_buf_packed_u16(struct adiv5_dap *dap,
                if (wcount < blocksize)
                        blocksize = wcount;
 
-               dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
+               retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_PACKED, address);
+               if (retval != ERROR_OK)
+                       return retval;
 
                /* handle unaligned data at 4k boundary */
                if (blocksize == 0)
@@ -692,11 +709,12 @@ static int mem_ap_read_buf_packed_u16(struct adiv5_dap *dap,
                do
                {
                        retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
-                       if (dap_run(dap) != ERROR_OK)
+                       if (retval != ERROR_OK)
+                               return retval;
+                       if ((retval = dap_run(dap)) != ERROR_OK)
                        {
                                LOG_WARNING("Block read error address 0x%" PRIx32 ", count 0x%x", address, count);
-                               /* REVISIT return the *actual* fault code */
-                               return ERROR_JTAG_DEVICE_ERROR;
+                               return retval;
                        }
 
                        nbytes = MIN((readcount << 1), 4);
@@ -735,7 +753,9 @@ int mem_ap_read_buf_u16(struct adiv5_dap *dap, uint8_t *buffer,
 
        while (count > 0)
        {
-               dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
+               retval = dap_setup_accessport(dap, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
+               if (retval != ERROR_OK)
+                       return retval;
                retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
                if (retval != ERROR_OK)
                        break;
@@ -791,17 +811,20 @@ static int mem_ap_read_buf_packed_u8(struct adiv5_dap *dap,
                if (wcount < blocksize)
                        blocksize = wcount;
 
-               dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
+               retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_PACKED, address);
+               if (retval != ERROR_OK)
+                       return retval;
                readcount = blocksize;
 
                do
                {
                        retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
-                       if (dap_run(dap) != ERROR_OK)
+                       if (retval != ERROR_OK)
+                               return retval;
+                       if ((retval = dap_run(dap)) != ERROR_OK)
                        {
                                LOG_WARNING("Block read error address 0x%" PRIx32 ", count 0x%x", address, count);
-                               /* REVISIT return the *actual* fault code */
-                               return ERROR_JTAG_DEVICE_ERROR;
+                               return retval;
                        }
 
                        nbytes = MIN(readcount, 4);
@@ -840,8 +863,12 @@ int mem_ap_read_buf_u8(struct adiv5_dap *dap, uint8_t *buffer,
 
        while (count > 0)
        {
-               dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
+               retval = dap_setup_accessport(dap, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
+               if (retval != ERROR_OK)
+                       return retval;
                retval = dap_queue_ap_read(dap, AP_REG_DRW, &invalue);
+               if (retval != ERROR_OK)
+                       return retval;
                retval = dap_run(dap);
                if (retval != ERROR_OK)
                        break;
@@ -965,9 +992,16 @@ int ahbap_debugport_init(struct adiv5_dap *dap)
         * place to scan the table and do any topology detection?
         */
        retval = dap_queue_ap_read(dap, AP_REG_IDR, &idreg);
+       if (retval != ERROR_OK)
+               return retval;
        retval = dap_queue_ap_read(dap, AP_REG_BASE, &romaddr);
+       if (retval != ERROR_OK)
+               return retval;
 
-       LOG_DEBUG("MEM-AP #%d ID Register 0x%" PRIx32
+       if ((retval = dap_run(dap)) != ERROR_OK)
+               return retval;
+
+       LOG_DEBUG("MEM-AP #%" PRId32 " ID Register 0x%" PRIx32
                ", Debug ROM Address 0x%" PRIx32,
                dap->apsel, idreg, romaddr);
 
@@ -1008,7 +1042,11 @@ static int dap_info_command(struct command_context *cmd_ctx,
        apselold = dap->apsel;
        dap_ap_select(dap, apsel);
        retval = dap_queue_ap_read(dap, AP_REG_BASE, &dbgbase);
+       if (retval != ERROR_OK)
+               return retval;
        retval = dap_queue_ap_read(dap, AP_REG_IDR, &apid);
+       if (retval != ERROR_OK)
+               return retval;
        retval = dap_run(dap);
        if (retval != ERROR_OK)
                return retval;
@@ -1059,21 +1097,32 @@ static int dap_info_command(struct command_context *cmd_ctx,
                        command_print(cmd_ctx, "\tROM table in legacy format");
 
                /* Now we read ROM table ID registers, ref. ARM IHI 0029B sec  */
-               mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFF0, &cid0);
-               mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFF4, &cid1);
-               mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFF8, &cid2);
-               mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFFC, &cid3);
-               mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFCC, &memtype);
+               retval = mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFF0, &cid0);
+               if (retval != ERROR_OK)
+                       return retval;
+               retval = mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFF4, &cid1);
+               if (retval != ERROR_OK)
+                       return retval;
+               retval = mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFF8, &cid2);
+               if (retval != ERROR_OK)
+                       return retval;
+               retval = mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFFC, &cid3);
+               if (retval != ERROR_OK)
+                       return retval;
+               retval = mem_ap_read_u32(dap, (dbgbase&0xFFFFF000) | 0xFCC, &memtype);
+               if (retval != ERROR_OK)
+                       return retval;
                retval = dap_run(dap);
                if (retval != ERROR_OK)
                        return retval;
 
                if (!is_dap_cid_ok(cid3, cid2, cid1, cid0))
-                       command_print(cmd_ctx, "\tCID3 0x%2.2" PRIx32
-                                       ", CID2 0x%2.2" PRIx32
-                                       ", CID1 0x%2.2" PRIx32
-                                       ", CID0 0x%2.2" PRIx32,
-                                       cid3, cid2, cid1, cid0);
+                       command_print(cmd_ctx, "\tCID3 0x%2.2x"
+                                       ", CID2 0x%2.2x"
+                                       ", CID1 0x%2.2x"
+                                       ", CID0 0x%2.2x",
+                                       (unsigned) cid3, (unsigned)cid2,
+                                       (unsigned) cid1, (unsigned) cid0);
                if (memtype & 0x01)
                        command_print(cmd_ctx, "\tMEMTYPE system memory present on bus");
                else
@@ -1084,41 +1133,78 @@ static int dap_info_command(struct command_context *cmd_ctx,
                entry_offset = 0;
                do
                {
-                       mem_ap_read_atomic_u32(dap, (dbgbase&0xFFFFF000) | entry_offset, &romentry);
+                       retval = mem_ap_read_atomic_u32(dap, (dbgbase&0xFFFFF000) | entry_offset, &romentry);
+                       if (retval != ERROR_OK)
+                               return retval;
                        command_print(cmd_ctx, "\tROMTABLE[0x%x] = 0x%" PRIx32 "",entry_offset,romentry);
                        if (romentry&0x01)
                        {
                                uint32_t c_cid0, c_cid1, c_cid2, c_cid3;
                                uint32_t c_pid0, c_pid1, c_pid2, c_pid3, c_pid4;
-                               uint32_t component_start, component_base;
+                               uint32_t component_base;
                                unsigned part_num;
                                char *type, *full;
 
-                               component_base = (uint32_t)((dbgbase & 0xFFFFF000)
-                                               + (int)(romentry & 0xFFFFF000));
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFE0, &c_pid0);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFE4, &c_pid1);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFE8, &c_pid2);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFEC, &c_pid3);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFD0, &c_pid4);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFF0, &c_cid0);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFF4, &c_cid1);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFF8, &c_cid2);
-                               mem_ap_read_atomic_u32(dap,
-                                               (component_base & 0xFFFFF000) | 0xFFC, &c_cid3);
-                               component_start = component_base - 0x1000*(c_pid4 >> 4);
-
-                               command_print(cmd_ctx, "\t\tComponent base address 0x%" PRIx32
-                                               ", start address 0x%" PRIx32,
-                                               component_base, component_start);
+                               component_base = (dbgbase & 0xFFFFF000)
+                                               + (romentry & 0xFFFFF000);
+
+                               /* IDs are in last 4K section */
+
+
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFE0, &c_pid0);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_pid0 &= 0xff;
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFE4, &c_pid1);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_pid1 &= 0xff;
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFE8, &c_pid2);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_pid2 &= 0xff;
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFEC, &c_pid3);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_pid3 &= 0xff;
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFD0, &c_pid4);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_pid4 &= 0xff;
+
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFF0, &c_cid0);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_cid0 &= 0xff;
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFF4, &c_cid1);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_cid1 &= 0xff;
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFF8, &c_cid2);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_cid2 &= 0xff;
+                               retval = mem_ap_read_atomic_u32(dap,
+                                       component_base + 0xFFC, &c_cid3);
+                               if (retval != ERROR_OK)
+                                       return retval;
+                               c_cid3 &= 0xff;
+
+
+                               command_print(cmd_ctx,
+                               "\t\tComponent base address 0x%" PRIx32
+                                       ", start address 0x%" PRIx32,
+                                               component_base,
+                               /* component may take multiple 4K pages */
+                               component_base - 0x1000*(c_pid4 >> 4));
                                command_print(cmd_ctx, "\t\tComponent class is 0x%x, %s",
                                                (int) (c_cid1 >> 4) & 0xf,
                                                /* See ARM IHI 0029B Table 3-3 */
@@ -1130,9 +1216,11 @@ static int dap_info_command(struct command_context *cmd_ctx,
                                        unsigned minor;
                                        char *major = "Reserved", *subtype = "Reserved";
 
-                                       mem_ap_read_atomic_u32(dap,
+                                       retval = mem_ap_read_atomic_u32(dap,
                                                        (component_base & 0xfffff000) | 0xfcc,
                                                        &devtype);
+                                       if (retval != ERROR_OK)
+                                               return retval;
                                        minor = (devtype >> 4) & 0x0f;
                                        switch (devtype & 0x0f) {
                                        case 0:
@@ -1236,23 +1324,27 @@ static int dap_info_command(struct command_context *cmd_ctx,
                                }
 
                                if (!is_dap_cid_ok(cid3, cid2, cid1, cid0))
-                                       command_print(cmd_ctx, "\t\tCID3 0x%2.2" PRIx32
-                                                       ", CID2 0x%2.2" PRIx32
-                                                       ", CID1 0x%2.2" PRIx32
-                                                       ", CID0 0x%2.2" PRIx32,
-                                                       c_cid3, c_cid2, c_cid1, c_cid0);
-                               command_print(cmd_ctx, "\t\tPeripheral ID[4..0] = hex "
-                                               "%2.2x %2.2x %2.2x %2.2x %2.2x",
-                                               (int) c_pid4,
-                                               (int) c_pid3, (int) c_pid2,
-                                               (int) c_pid1, (int) c_pid0);
+                                       command_print(cmd_ctx,
+                                                     "\t\tCID3 0%2.2x"
+                                                       ", CID2 0%2.2x"
+                                                       ", CID1 0%2.2x"
+                                                       ", CID0 0%2.2x",
+                                                       (int) c_cid3,
+                                                       (int) c_cid2,
+                                                       (int)c_cid1,
+                                                       (int)c_cid0);
+                               command_print(cmd_ctx,
+                               "\t\tPeripheral ID[4..0] = hex "
+                               "%2.2x %2.2x %2.2x %2.2x %2.2x",
+                               (int) c_pid4, (int) c_pid3, (int) c_pid2,
+                               (int) c_pid1, (int) c_pid0);
 
                                /* Part number interpretations are from Cortex
                                 * core specs, the CoreSight components TRM
                                 * (ARM DDI 0314H), and ETM specs; also from
                                 * chip observation (e.g. TI SDTI).
                                 */
-                               part_num = c_pid0 & 0xff;
+                               part_num = (c_pid0 & 0xff);
                                part_num |= (c_pid1 & 0x0f) << 8;
                                switch (part_num) {
                                case 0x000:
@@ -1405,6 +1497,8 @@ COMMAND_HANDLER(dap_baseaddr_command)
         * use the ID register to verify it's a MEM-AP.
         */
        retval = dap_queue_ap_read(dap, AP_REG_BASE, &baseaddr);
+       if (retval != ERROR_OK)
+               return retval;
        retval = dap_run(dap);
        if (retval != ERROR_OK)
                return retval;
@@ -1468,6 +1562,8 @@ COMMAND_HANDLER(dap_apsel_command)
 
        dap_ap_select(dap, apsel);
        retval = dap_queue_ap_read(dap, AP_REG_IDR, &apid);
+       if (retval != ERROR_OK)
+               return retval;
        retval = dap_run(dap);
        if (retval != ERROR_OK)
                return retval;
@@ -1506,6 +1602,8 @@ COMMAND_HANDLER(dap_apid_command)
                dap_ap_select(dap, apsel);
 
        retval = dap_queue_ap_read(dap, AP_REG_IDR, &apid);
+       if (retval != ERROR_OK)
+               return retval;
        retval = dap_run(dap);
        if (retval != ERROR_OK)
                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)