diff options
author | Spencer Oliver <spen@spen-soft.co.uk> | 2013-09-18 20:06:26 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2013-09-25 13:53:34 +0000 |
commit | cfe9ca039f4f6c058dff64effea50a857ff80f96 (patch) | |
tree | e5a30faaba2005b3f538ba83708c33680a0558c6 /src/target | |
parent | 0c58b81b08455439a5ef7c06a839664d1460748b (diff) |
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 <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/1632
Tested-by: jenkins
Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/hla_target.c | 60 |
1 files changed, 2 insertions, 58 deletions
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[] = { |