mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
hw/misc/mps2-fpgaio: Support AN547 DBGCTRL register
For the AN547 image, the FPGAIO block has an extra DBGCTRL register, which is used to control the SPNIDEN, SPIDEN, NPIDEN and DBGEN inputs to the CPU. These signals control when the CPU permits use of the external debug interface. Our CPU models don't implement the external debug interface, so we model the register as reads-as-written. Implement the register, with a property defining whether it is present, and allow mps2-tz boards to specify that it is present. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20210219144617.4782-39-peter.maydell@linaro.org
This commit is contained in:
parent
7fa859914f
commit
39901aea06
3 changed files with 27 additions and 2 deletions
|
@ -29,6 +29,7 @@
|
|||
#include "qemu/timer.h"
|
||||
|
||||
REG32(LED0, 0)
|
||||
REG32(DBGCTRL, 4)
|
||||
REG32(BUTTON, 8)
|
||||
REG32(CLK1HZ, 0x10)
|
||||
REG32(CLK100HZ, 0x14)
|
||||
|
@ -129,6 +130,12 @@ static uint64_t mps2_fpgaio_read(void *opaque, hwaddr offset, unsigned size)
|
|||
case A_LED0:
|
||||
r = s->led0;
|
||||
break;
|
||||
case A_DBGCTRL:
|
||||
if (!s->has_dbgctrl) {
|
||||
goto bad_offset;
|
||||
}
|
||||
r = s->dbgctrl;
|
||||
break;
|
||||
case A_BUTTON:
|
||||
/* User-pressable board buttons. We don't model that, so just return
|
||||
* zeroes.
|
||||
|
@ -195,6 +202,14 @@ static void mps2_fpgaio_write(void *opaque, hwaddr offset, uint64_t value,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case A_DBGCTRL:
|
||||
if (!s->has_dbgctrl) {
|
||||
goto bad_offset;
|
||||
}
|
||||
qemu_log_mask(LOG_UNIMP,
|
||||
"MPS2 FPGAIO: DBGCTRL unimplemented\n");
|
||||
s->dbgctrl = value;
|
||||
break;
|
||||
case A_PRESCALE:
|
||||
resync_counter(s);
|
||||
s->prescale = value;
|
||||
|
@ -225,6 +240,7 @@ static void mps2_fpgaio_write(void *opaque, hwaddr offset, uint64_t value,
|
|||
s->pscntr = value;
|
||||
break;
|
||||
default:
|
||||
bad_offset:
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"MPS2 FPGAIO write: bad offset 0x%x\n", (int) offset);
|
||||
break;
|
||||
|
@ -287,12 +303,13 @@ static void mps2_fpgaio_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
static const VMStateDescription mps2_fpgaio_vmstate = {
|
||||
.name = "mps2-fpgaio",
|
||||
.version_id = 2,
|
||||
.minimum_version_id = 2,
|
||||
.version_id = 3,
|
||||
.minimum_version_id = 3,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT32(led0, MPS2FPGAIO),
|
||||
VMSTATE_UINT32(prescale, MPS2FPGAIO),
|
||||
VMSTATE_UINT32(misc, MPS2FPGAIO),
|
||||
VMSTATE_UINT32(dbgctrl, MPS2FPGAIO),
|
||||
VMSTATE_INT64(clk1hz_tick_offset, MPS2FPGAIO),
|
||||
VMSTATE_INT64(clk100hz_tick_offset, MPS2FPGAIO),
|
||||
VMSTATE_UINT32(counter, MPS2FPGAIO),
|
||||
|
@ -308,6 +325,7 @@ static Property mps2_fpgaio_properties[] = {
|
|||
/* Number of LEDs controlled by LED0 register */
|
||||
DEFINE_PROP_UINT32("num-leds", MPS2FPGAIO, num_leds, 2),
|
||||
DEFINE_PROP_BOOL("has-switches", MPS2FPGAIO, has_switches, false),
|
||||
DEFINE_PROP_BOOL("has-dbgctrl", MPS2FPGAIO, has_dbgctrl, false),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue