X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=sim%2Fbfin%2Fdv-bfin_uart.c;h=caf846a569a30b3d8798cb2bc61ccea0cdc6a946;hb=58920b5be048726fca38e4e6ddcaa02ae6d9c1b8;hp=4b41eaad7471a195b77a30145a37dba7d38c5906;hpb=c5a570810022466eaa5e077cd1b8aa00d74706f1;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/bfin/dv-bfin_uart.c b/sim/bfin/dv-bfin_uart.c index 4b41eaad74..caf846a569 100644 --- a/sim/bfin/dv-bfin_uart.c +++ b/sim/bfin/dv-bfin_uart.c @@ -1,7 +1,7 @@ /* Blackfin Universal Asynchronous Receiver/Transmitter (UART) model. For "old style" UARTs on BF53x/etc... parts. - Copyright (C) 2010-2012 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. @@ -74,12 +74,6 @@ static const char *mmr_name (struct bfin_uart *uart, bu32 idx) } #define mmr_name(off) mmr_name (uart, (off) / 4) -#ifndef HAVE_DV_SOCKSER -# define dv_sockser_status(sd) -1 -# define dv_sockser_write(sd, byte) do { ; } while (0) -# define dv_sockser_read(sd) 0xff -#endif - static void bfin_uart_poll (struct hw *me, void *data) { @@ -144,14 +138,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) { @@ -187,7 +183,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; @@ -266,13 +262,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(dll): @@ -306,7 +304,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;