or1k: remove address of the Free Software Foundation
[fw/openocd] / src / target / openrisc / or1k.c
index f26a01629745615815f2054f69fcc94eaefb101d..cb18075a2fbfd8da4999d59ac288c2bfa5d2973a 100644 (file)
  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
  *   GNU General Public License for more details.                          *
- *                                                                         *
- *   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.             *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -50,7 +45,7 @@ static int or1k_write_core_reg(struct target *target, int num);
 
 static struct or1k_core_reg *or1k_core_reg_list_arch_info;
 
-struct or1k_core_reg_init or1k_init_reg_list[] = {
+static const struct or1k_core_reg_init or1k_init_reg_list[] = {
        {"r0"       , GROUP0 + 1024, "org.gnu.gdb.or1k.group0", NULL},
        {"r1"       , GROUP0 + 1025, "org.gnu.gdb.or1k.group0", NULL},
        {"r2"       , GROUP0 + 1026, "org.gnu.gdb.or1k.group0", NULL},
@@ -513,7 +508,7 @@ static struct reg_cache *or1k_build_reg_cache(struct target *target)
        struct or1k_common *or1k = target_to_or1k(target);
        struct reg_cache **cache_p = register_get_last_cache_p(&target->reg_cache);
        struct reg_cache *cache = malloc(sizeof(struct reg_cache));
-       struct reg *reg_list = malloc((or1k->nb_regs) * sizeof(struct reg));
+       struct reg *reg_list = calloc(or1k->nb_regs, sizeof(struct reg));
        struct or1k_core_reg *arch_info =
                malloc((or1k->nb_regs) * sizeof(struct or1k_core_reg));
        struct reg_feature *feature;
@@ -950,12 +945,13 @@ static int or1k_add_breakpoint(struct target *target,
        memcpy(breakpoint->orig_instr, &data, breakpoint->length);
 
        /* Sub in the OR1K trap instruction */
-       uint32_t or1k_trap_insn = OR1K_TRAP_INSTR;
+       uint8_t or1k_trap_insn[4];
+       target_buffer_set_u32(target, or1k_trap_insn, OR1K_TRAP_INSTR);
        retval = du_core->or1k_jtag_write_memory(&or1k->jtag,
                                          breakpoint->address,
                                          4,
                                          1,
-                                         (uint8_t *)&or1k_trap_insn);
+                                         or1k_trap_insn);
 
        if (retval != ERROR_OK) {
                LOG_ERROR("Error while writing OR1K_TRAP_INSTR at 0x%08" PRIx32,
@@ -1050,38 +1046,7 @@ static int or1k_read_memory(struct target *target, uint32_t address,
                return ERROR_TARGET_UNALIGNED_ACCESS;
        }
 
-       /* or1k_read_memory with size 4/2 returns uint32_t/uint16_t in host   */
-       /* endianness, but byte array should represent target endianness      */
-
-       void *t = NULL;
-       if (size > 1) {
-               t = malloc(count * size * sizeof(uint8_t));
-               if (t == NULL) {
-                       LOG_ERROR("Out of memory");
-                       return ERROR_FAIL;
-               }
-       } else
-               t = buffer;
-
-
-       int retval = du_core->or1k_jtag_read_memory(&or1k->jtag, address,
-                                                   size, count, t);
-
-       if (retval == ERROR_OK) {
-               switch (size) {
-               case 4:
-                       target_buffer_set_u32_array(target, buffer, count, t);
-                       break;
-               case 2:
-                       target_buffer_set_u16_array(target, buffer, count, t);
-                       break;
-               }
-       }
-
-       if ((size > 1) && (t != NULL))
-               free(t);
-
-       return ERROR_OK;
+       return du_core->or1k_jtag_read_memory(&or1k->jtag, address, size, count, buffer);
 }
 
 static int or1k_write_memory(struct target *target, uint32_t address,
@@ -1108,37 +1073,7 @@ static int or1k_write_memory(struct target *target, uint32_t address,
                return ERROR_TARGET_UNALIGNED_ACCESS;
        }
 
-       /* or1k_write_memory with size 4/2 requires uint32_t/uint16_t in host */
-       /* endianness, but byte array represents target endianness            */
-
-       void *t = NULL;
-       if (size > 1) {
-               t = malloc(count * size * sizeof(uint8_t));
-               if (t == NULL) {
-                       LOG_ERROR("Out of memory");
-                       return ERROR_FAIL;
-               }
-
-               switch (size) {
-               case 4:
-                       target_buffer_get_u32_array(target, buffer, count, (uint32_t *)t);
-                       break;
-               case 2:
-                       target_buffer_get_u16_array(target, buffer, count, (uint16_t *)t);
-                       break;
-               }
-               buffer = t;
-       }
-
-       int retval = du_core->or1k_jtag_write_memory(&or1k->jtag, address, size, count, buffer);
-
-       if (t != NULL)
-               free(t);
-
-       if (retval != ERROR_OK)
-               return retval;
-
-       return ERROR_OK;
+       return du_core->or1k_jtag_write_memory(&or1k->jtag, address, size, count, buffer);
 }
 
 static int or1k_init_target(struct command_context *cmd_ctx,
@@ -1161,6 +1096,7 @@ static int or1k_init_target(struct command_context *cmd_ctx,
        or1k->jtag.tap = target->tap;
        or1k->jtag.or1k_jtag_inited = 0;
        or1k->jtag.or1k_jtag_module_selected = -1;
+       or1k->jtag.target = target;
 
        or1k_build_reg_cache(target);