From cfe9ca039f4f6c058dff64effea50a857ff80f96 Mon Sep 17 00:00:00 2001 From: Spencer Oliver Date: Wed, 18 Sep 2013 20:06:26 +0100 Subject: hla: move memory read/write functionality to driver Due to issues reported when using the jtag mode of the stlink (see Trac #61), the functionality/checking has been moved to the driver. This change also fixes unaligned 32bit memory read/write for the stlink. From testing this change also brings a 3KiB/s speed increase, this is due to the larger read/write packets. Change-Id: I8234110e7e49a683f4dadd54c442ecdc3c47b320 Signed-off-by: Spencer Oliver Reviewed-on: http://openocd.zylin.com/1632 Tested-by: jenkins Reviewed-by: Andreas Fritiofson --- src/target/hla_target.c | 60 ++----------------------------------------------- 1 file changed, 2 insertions(+), 58 deletions(-) (limited to 'src/target/hla_target.c') diff --git a/src/target/hla_target.c b/src/target/hla_target.c index dc81ee89..a65ba805 100644 --- a/src/target/hla_target.c +++ b/src/target/hla_target.c @@ -758,41 +758,13 @@ static int adapter_read_memory(struct target *target, uint32_t address, uint8_t *buffer) { struct hl_interface_s *adapter = target_to_adapter(target); - int res; - uint32_t buffer_threshold = (adapter->param.max_buffer / 4); - uint32_t addr_increment = 4; - uint32_t c; if (!count || !buffer) return ERROR_COMMAND_SYNTAX_ERROR; LOG_DEBUG("%s 0x%08x %d %d", __func__, address, size, count); - /* prepare byte count, buffer threshold - * and address increment for none 32bit access - */ - if (size != 4) { - count *= size; - buffer_threshold = (adapter->param.max_buffer / 4) / 2; - addr_increment = 1; - } - - while (count) { - if (count > buffer_threshold) - c = buffer_threshold; - else - c = count; - - res = adapter->layout->api->read_mem(adapter->fd, address, size, c, buffer); - if (res != ERROR_OK) - return res; - - address += (c * addr_increment); - buffer += (c * addr_increment); - count -= c; - } - - return ERROR_OK; + return adapter->layout->api->read_mem(adapter->fd, address, size, count, buffer); } static int adapter_write_memory(struct target *target, uint32_t address, @@ -800,41 +772,13 @@ static int adapter_write_memory(struct target *target, uint32_t address, const uint8_t *buffer) { struct hl_interface_s *adapter = target_to_adapter(target); - int res; - uint32_t buffer_threshold = (adapter->param.max_buffer / 4); - uint32_t addr_increment = 4; - uint32_t c; if (!count || !buffer) return ERROR_COMMAND_SYNTAX_ERROR; LOG_DEBUG("%s 0x%08x %d %d", __func__, address, size, count); - /* prepare byte count, buffer threshold - * and address increment for none 32bit access - */ - if (size != 4) { - count *= size; - buffer_threshold = (adapter->param.max_buffer / 4) / 2; - addr_increment = 1; - } - - while (count) { - if (count > buffer_threshold) - c = buffer_threshold; - else - c = count; - - res = adapter->layout->api->write_mem(adapter->fd, address, size, c, buffer); - if (res != ERROR_OK) - return res; - - address += (c * addr_increment); - buffer += (c * addr_increment); - count -= c; - } - - return ERROR_OK; + return adapter->layout->api->write_mem(adapter->fd, address, size, count, buffer); } static const struct command_registration adapter_command_handlers[] = { -- cgit v1.2.3-18-g5258