X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=sim%2Fbfin%2Fdv-bfin_uart2.c;h=59716b99a44b8ca53d593f791abd286221909022;hb=466b619e95908dc073b78413f0d0d0b1cb97e4b5;hp=40a7eddf967198c8867f70e330b4d17c1432e745;hpb=b72dd4c228d71b44e487ff2c53c0d2883653bce7;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/bfin/dv-bfin_uart2.c b/sim/bfin/dv-bfin_uart2.c index 40a7eddf96..59716b99a4 100644 --- a/sim/bfin/dv-bfin_uart2.c +++ b/sim/bfin/dv-bfin_uart2.c @@ -76,14 +76,16 @@ bfin_uart_io_write_buffer (struct hw *me, const void *source, bu32 value; bu16 *valuep; + /* Invalid access mode is higher priority than missing register. */ + if (!dv_bfin_mmr_require_16 (me, addr, nr_bytes, true)) + return 0; + value = dv_load_2 (source); mmr_off = addr - uart->base; valuep = (void *)((unsigned long)uart + mmr_base() + mmr_off); HW_TRACE_WRITE (); - dv_bfin_mmr_require_16 (me, addr, nr_bytes, true); - /* XXX: All MMRs are "8bit" ... what happens to high 8bits ? */ switch (mmr_off) @@ -118,7 +120,7 @@ bfin_uart_io_write_buffer (struct hw *me, const void *source, break; default: dv_bfin_mmr_invalid (me, addr, nr_bytes, true); - break; + return 0; } return nr_bytes; @@ -132,13 +134,15 @@ bfin_uart_io_read_buffer (struct hw *me, void *dest, bu32 mmr_off; bu16 *valuep; + /* Invalid access mode is higher priority than missing register. */ + if (!dv_bfin_mmr_require_16 (me, addr, nr_bytes, false)) + return 0; + mmr_off = addr - uart->base; valuep = (void *)((unsigned long)uart + mmr_base() + mmr_off); HW_TRACE_READ (); - dv_bfin_mmr_require_16 (me, addr, nr_bytes, false); - switch (mmr_off) { case mmr_offset(rbr): @@ -165,7 +169,7 @@ bfin_uart_io_read_buffer (struct hw *me, void *dest, break; default: dv_bfin_mmr_invalid (me, addr, nr_bytes, false); - break; + return 0; } return nr_bytes;