aboutsummaryrefslogtreecommitdiff
path: root/src/target/cortex_m.c
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2012-05-15 14:37:06 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2012-05-21 16:17:10 +0000
commite1c40cb1c116d6e49f787f59dcb3c0b87a52aa56 (patch)
tree2b8ee7a81e5f013142214fa3799577f793312cbb /src/target/cortex_m.c
parent8f842ea40a7be3507e3f8007070cc91e9d4e3ed6 (diff)
downloadriscv-openocd-e1c40cb1c116d6e49f787f59dcb3c0b87a52aa56.zip
riscv-openocd-e1c40cb1c116d6e49f787f59dcb3c0b87a52aa56.tar.gz
riscv-openocd-e1c40cb1c116d6e49f787f59dcb3c0b87a52aa56.tar.bz2
target: disable armv6m unaligned memory access
Change-Id: I42704cf80939ab9c9d4f402d2cd51c196e2fadb3 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/645 Tested-by: jenkins
Diffstat (limited to 'src/target/cortex_m.c')
-rw-r--r--src/target/cortex_m.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index acf2805..e437431 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -1570,6 +1570,12 @@ static int cortex_m3_read_memory(struct target *target, uint32_t address,
struct adiv5_dap *swjdp = &armv7m->dap;
int retval = ERROR_COMMAND_SYNTAX_ERROR;
+ if (armv7m->arm.is_armv6m) {
+ /* armv6m does not handle unaligned memory access */
+ if (((size == 4) && (address & 0x3u)) || ((size == 2) && (address & 0x1u)))
+ return ERROR_TARGET_UNALIGNED_ACCESS;
+ }
+
/* cortex_m3 handles unaligned memory access */
if (count && buffer) {
switch (size) {
@@ -1595,6 +1601,12 @@ static int cortex_m3_write_memory(struct target *target, uint32_t address,
struct adiv5_dap *swjdp = &armv7m->dap;
int retval = ERROR_COMMAND_SYNTAX_ERROR;
+ if (armv7m->arm.is_armv6m) {
+ /* armv6m does not handle unaligned memory access */
+ if (((size == 4) && (address & 0x3u)) || ((size == 2) && (address & 0x1u)))
+ return ERROR_TARGET_UNALIGNED_ACCESS;
+ }
+
if (count && buffer) {
switch (size) {
case 4:
@@ -1812,6 +1824,9 @@ int cortex_m3_examine(struct target *target)
LOG_DEBUG("Cortex-M%d floating point feature FPv4_SP found", i);
armv7m->fp_feature = FPv4_SP;
}
+ } else if (i == 0) {
+ /* Cortex-M0 does not support unaligned memory access */
+ armv7m->arm.is_armv6m = true;
}
/* NOTE: FPB and DWT are both optional. */