diff --git a/sim/bfin/ChangeLog b/sim/bfin/ChangeLog index c5ab9ae6ef..d4a36ca0eb 100644 --- a/sim/bfin/ChangeLog +++ b/sim/bfin/ChangeLog @@ -1,3 +1,8 @@ +2011-03-24 Mike Frysinger + + * 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 * TODO: Document some known SIC issues. diff --git a/sim/bfin/dv-bfin_gpio.c b/sim/bfin/dv-bfin_gpio.c index 50baf03e71..6b18a4082c 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: