X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fbfin%2Fdv-bfin_pint.c;h=6a50395c76795eaafd9e1b45b1601e46840405ee;hb=160f8a8f32f5566077e4a4b13943bc7c70bc5da2;hp=0fa3c7e20d6cc66ce045620d5ec0a7dab29baf47;hpb=050396e533308f4d1c6ed55105a81eff1f402b9f;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/bfin/dv-bfin_pint.c b/sim/bfin/dv-bfin_pint.c index 0fa3c7e20d..6a50395c76 100644 --- a/sim/bfin/dv-bfin_pint.c +++ b/sim/bfin/dv-bfin_pint.c @@ -1,6 +1,6 @@ /* Blackfin Pin Interrupt (PINT) model - Copyright (C) 2010-2012 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. and Mike Frysinger. This file is part of simulators. @@ -63,6 +63,11 @@ bfin_pint_io_write_buffer (struct hw *me, const void *source, int space, bu32 value; bu32 *valuep; + /* Invalid access mode is higher priority than missing register. */ + /* XXX: The hardware allows 16 or 32 bit accesses ... */ + if (!dv_bfin_mmr_require_32 (me, addr, nr_bytes, true)) + return 0; + if (nr_bytes == 4) value = dv_load_4 (source); else @@ -72,9 +77,6 @@ bfin_pint_io_write_buffer (struct hw *me, const void *source, int space, HW_TRACE_WRITE (); - /* XXX: The hardware allows 16 or 32 bit accesses ... */ - dv_bfin_mmr_require_32 (me, addr, nr_bytes, true); - switch (mmr_off) { case mmr_offset(request): @@ -103,7 +105,7 @@ bfin_pint_io_write_buffer (struct hw *me, const void *source, int space, break; default: dv_bfin_mmr_invalid (me, addr, nr_bytes, true); - break; + return 0; } #if 0 @@ -134,14 +136,16 @@ bfin_pint_io_read_buffer (struct hw *me, void *dest, int space, bu32 mmr_off; bu32 *valuep; + /* Invalid access mode is higher priority than missing register. */ + /* XXX: The hardware allows 16 or 32 bit accesses ... */ + if (!dv_bfin_mmr_require_32 (me, addr, nr_bytes, false)) + return 0; + mmr_off = addr - pint->base; valuep = (void *)((unsigned long)pint + mmr_base() + mmr_off); HW_TRACE_READ (); - /* XXX: The hardware allows 16 or 32 bit accesses ... */ - dv_bfin_mmr_require_32 (me, addr, nr_bytes, false); - switch (mmr_off) { case mmr_offset(request): @@ -164,7 +168,7 @@ bfin_pint_io_read_buffer (struct hw *me, void *dest, int space, break; default: dv_bfin_mmr_invalid (me, addr, nr_bytes, false); - break; + return 0; } return nr_bytes;