aboutsummaryrefslogtreecommitdiff
path: root/sim/bfin/dv-bfin_gpio.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-03-25 00:12:47 +0000
committerMike Frysinger <vapier@gentoo.org>2011-03-25 00:12:47 +0000
commiteaf863cd1ef55ef8c276e5dd7c277f22522a0436 (patch)
treedfc0285293eb6eee6123708c8aa73635d6c86e68 /sim/bfin/dv-bfin_gpio.c
parentee196b8c2b47bcb9a090a9f144664b10523117e0 (diff)
downloadgdb-eaf863cd1ef55ef8c276e5dd7c277f22522a0436.zip
gdb-eaf863cd1ef55ef8c276e5dd7c277f22522a0436.tar.gz
gdb-eaf863cd1ef55ef8c276e5dd7c277f22522a0436.tar.bz2
sim: bfin: fix clear/set/toggle GPIO handling
The clear/set/toggle MMRs aren't backed by "real" data; they implicitly perform bit operations on the associated data register. So when we go to process writes to them, we need to adjust the pointer accordingly so that the actual backing data is modified. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'sim/bfin/dv-bfin_gpio.c')
-rw-r--r--sim/bfin/dv-bfin_gpio.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sim/bfin/dv-bfin_gpio.c b/sim/bfin/dv-bfin_gpio.c
index 50baf03..6b18a40 100644
--- a/sim/bfin/dv-bfin_gpio.c
+++ b/sim/bfin/dv-bfin_gpio.c
@@ -92,16 +92,22 @@ bfin_gpio_io_write_buffer (struct hw *me, const void *source, int space,
case mmr_offset(clear):
case mmr_offset(maska_clear):
case mmr_offset(maskb_clear):
+ /* We want to clear the related data MMR. */
+ valuep -= 2;
dv_w1c_2 (valuep, value, -1);
break;
case mmr_offset(set):
case mmr_offset(maska_set):
case mmr_offset(maskb_set):
+ /* We want to set the related data MMR. */
+ valuep -= 4;
*valuep |= value;
break;
case mmr_offset(toggle):
case mmr_offset(maska_toggle):
case mmr_offset(maskb_toggle):
+ /* We want to toggle the related data MMR. */
+ valuep -= 6;
*valuep ^= value;
break;
default: