summaryrefslogtreecommitdiff
path: root/sim
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
commitcb9913332befd0d66560525c93e28c2d1e6b0ec1 (patch)
tree1ad872ec64639476ab20a0f8a9d5dc075ddeade2 /sim
parent2ceb3cd093bea0421a97c1c5a9910059d3c5bd6f (diff)
downloadgdb-cb9913332befd0d66560525c93e28c2d1e6b0ec1.tar.gz
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')
-rw-r--r--sim/bfin/ChangeLog5
-rw-r--r--sim/bfin/dv-bfin_gpio.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/sim/bfin/ChangeLog b/sim/bfin/ChangeLog
index c5ab9ae6efc..d4a36ca0eb6 100644
--- a/sim/bfin/ChangeLog
+++ b/sim/bfin/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-24 Mike Frysinger <vapier@gentoo.org>
+
+ * dv-bfin_gpio.c (bfin_gpio_io_write_buffer): Subtract 2 from the
+ valuep pointer for clear MMRs, 4 for set MMRs, and 6 for toggle MMRs.
+
2011-03-23 Mike Frysinger <vapier@gentoo.org>
* TODO: Document some known SIC issues.
diff --git a/sim/bfin/dv-bfin_gpio.c b/sim/bfin/dv-bfin_gpio.c
index 50baf03e71c..6b18a4082c2 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: