diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2018-01-25 16:24:55 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2018-01-25 16:24:56 +0000 |
commit | a3f9362af5c7071036fafb66665b85fda1e49bcc (patch) | |
tree | bc66805eb2a71797d9146c1f8590f184bf24ff11 /hw/intc | |
parent | b3bbe959b5dc3bf07041946455cc8e8d562bfd1f (diff) | |
parent | 25c5d5acfbaa148b2da64b1f2c1401f87ebb0bb4 (diff) | |
download | qemu-a3f9362af5c7071036fafb66665b85fda1e49bcc.zip qemu-a3f9362af5c7071036fafb66665b85fda1e49bcc.tar.gz qemu-a3f9362af5c7071036fafb66665b85fda1e49bcc.tar.bz2 |
Merge remote-tracking branch 'remotes/mcayland/tags/qemu-sparc-signed' into staging
qemu-sparc update
# gpg: Signature made Thu 25 Jan 2018 13:44:58 GMT
# gpg: using RSA key 0x5BC2C56FAE0F321F
# gpg: Good signature from "Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>"
# Primary key fingerprint: CC62 1AB9 8E82 200D 915C C9C4 5BC2 C56F AE0F 321F
* remotes/mcayland/tags/qemu-sparc-signed:
sun4u: implement power device
sparc64: convert hw/sparc64/sparc64.c from DPRINTF macros to trace events
sabre: convert from SABRE_DPRINTF macro to trace-events
apb: rename apb.c to sabre.c
sun4u: rename apb variables and constants
apb: rename QOM type from TYPE_APB to TYPE_SABRE
apb: QOMify sabre PCI host bridge
apb: change pbm_pci_host prefix functions to use sabre_pci prefix
apb: rename APB functions to use sabre prefix
simba: rename PBMPCIBridge and QOM types to reflect simba naming
apb: split simba PCI bridge into hw/pci-bridge/simba.c
sparc/leon3 irqmp: fix IRQ software ack
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/intc')
-rw-r--r-- | hw/intc/grlib_irqmp.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c index 94659ee..d6f9cb3 100644 --- a/hw/intc/grlib_irqmp.c +++ b/hw/intc/grlib_irqmp.c @@ -106,6 +106,15 @@ static void grlib_irqmp_check_irqs(IRQMPState *state) } } +static void grlib_irqmp_ack_mask(IRQMPState *state, uint32_t mask) +{ + /* Clear registers */ + state->pending &= ~mask; + state->force[0] &= ~mask; /* Only CPU 0 (No SMP support) */ + + grlib_irqmp_check_irqs(state); +} + void grlib_irqmp_ack(DeviceState *dev, int intno) { IRQMP *irqmp = GRLIB_IRQMP(dev); @@ -120,11 +129,7 @@ void grlib_irqmp_ack(DeviceState *dev, int intno) trace_grlib_irqmp_ack(intno); - /* Clear registers */ - state->pending &= ~mask; - state->force[0] &= ~mask; /* Only CPU 0 (No SMP support) */ - - grlib_irqmp_check_irqs(state); + grlib_irqmp_ack_mask(state, mask); } void grlib_irqmp_set_irq(void *opaque, int irq, int level) @@ -251,7 +256,7 @@ static void grlib_irqmp_write(void *opaque, hwaddr addr, case CLEAR_OFFSET: value &= ~1; /* clean up the value */ - state->pending &= ~value; + grlib_irqmp_ack_mask(state, value); return; case MP_STATUS_OFFSET: |