at91samd: Atmel SAML22 (segment LCD) family added
[fw/openocd] / src / flash / nor / pic32mx.c
index 842fd76bba7fc5193fca83ad3c6b3eaeb8a74820..ce5bffb56fc4db3793530b8a870e3fb823f6615c 100644 (file)
@@ -21,7 +21,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
@@ -410,7 +410,7 @@ static uint32_t pic32mx_flash_write_code[] = {
        0x00000000              /* nop */
 };
 
-static int pic32mx_write_block(struct flash_bank *bank, uint8_t *buffer,
+static int pic32mx_write_block(struct flash_bank *bank, const uint8_t *buffer,
                uint32_t offset, uint32_t count)
 {
        struct target *target = bank->target;
@@ -430,7 +430,7 @@ static int pic32mx_write_block(struct flash_bank *bank, uint8_t *buffer,
                        &write_algorithm) != ERROR_OK) {
                LOG_WARNING("no working area available, can't do block memory writes");
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
-       };
+       }
 
        /* Change values for counters and row size, depending on variant */
        if (pic32mx_info->dev_type == MX_1_2) {
@@ -449,8 +449,10 @@ static int pic32mx_write_block(struct flash_bank *bank, uint8_t *buffer,
                row_size = 512;
        }
 
-       retval = target_write_buffer(target, write_algorithm->address,
-                       sizeof(pic32mx_flash_write_code), (uint8_t *)pic32mx_flash_write_code);
+       uint8_t code[sizeof(pic32mx_flash_write_code)];
+       target_buffer_set_u32_array(target, code, ARRAY_SIZE(pic32mx_flash_write_code),
+                       pic32mx_flash_write_code);
+       retval = target_write_buffer(target, write_algorithm->address, sizeof(code), code);
        if (retval != ERROR_OK)
                return retval;
 
@@ -470,9 +472,9 @@ static int pic32mx_write_block(struct flash_bank *bank, uint8_t *buffer,
        mips32_info.common_magic = MIPS32_COMMON_MAGIC;
        mips32_info.isa_mode = MIPS32_ISA_MIPS32;
 
-       init_reg_param(&reg_params[0], "a0", 32, PARAM_IN_OUT);
-       init_reg_param(&reg_params[1], "a1", 32, PARAM_OUT);
-       init_reg_param(&reg_params[2], "a2", 32, PARAM_OUT);
+       init_reg_param(&reg_params[0], "r4", 32, PARAM_IN_OUT);
+       init_reg_param(&reg_params[1], "r5", 32, PARAM_OUT);
+       init_reg_param(&reg_params[2], "r6", 32, PARAM_OUT);
 
        int row_offset = offset % row_size;
        uint8_t *new_buffer = NULL;
@@ -569,7 +571,7 @@ static int pic32mx_write_word(struct flash_bank *bank, uint32_t address, uint32_
        return pic32mx_nvm_exec(bank, NVMCON_OP_WORD_PROG, 5);
 }
 
-static int pic32mx_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
+static int pic32mx_write(struct flash_bank *bank, const uint8_t *buffer, uint32_t offset, uint32_t count)
 {
        uint32_t words_remaining = (count / 4);
        uint32_t bytes_remaining = (count & 0x00000003);