This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] 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.

Committed.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>

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.
---
 sim/bfin/dv-bfin_gpio.c |    6 ++++++
 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:
-- 
1.7.4.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]