aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2013-09-18 20:06:26 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2013-09-25 13:53:34 +0000
commitcfe9ca039f4f6c058dff64effea50a857ff80f96 (patch)
treee5a30faaba2005b3f538ba83708c33680a0558c6 /src/target
parent0c58b81b08455439a5ef7c06a839664d1460748b (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.c60
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[] = {