diff options
author | Sai Pavan Boddu <sai.pavan.boddu@xilinx.com> | 2020-05-12 20:24:45 +0530 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2020-06-18 21:05:51 +0800 |
commit | 86a29d4c72e42130e08bae3335c25575d4af0b4d (patch) | |
tree | c554c2009fa6642dc65ba87173351fa9373d17af /hw | |
parent | 96ea126a8deef30cc81519fb3cb50bf3d65eb6aa (diff) | |
download | qemu-86a29d4c72e42130e08bae3335c25575d4af0b4d.zip |
net: cadence_gem: Fix irq update w.r.t queue
Set irq's specific to a queue, present implementation is setting q1 irq
based on q0 status.
Signed-off-by: Sai Pavan Boddu <sai.pavan.boddu@xilinx.com>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/net/cadence_gem.c | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c index fd3e4a8cd6..4ad6c8e3c9 100644 --- a/hw/net/cadence_gem.c +++ b/hw/net/cadence_gem.c @@ -554,29 +554,10 @@ static void gem_update_int_status(CadenceGEMState *s) { int i; - if (!s->regs[GEM_ISR]) { - /* ISR isn't set, clear all the interrupts */ - for (i = 0; i < s->num_priority_queues; ++i) { - qemu_set_irq(s->irq[i], 0); - } - return; - } + qemu_set_irq(s->irq[0], !!s->regs[GEM_ISR]); - /* If we get here we know s->regs[GEM_ISR] is set, so we don't need to - * check it again. - */ - if (s->num_priority_queues == 1) { - /* No priority queues, just trigger the interrupt */ - DB_PRINT("asserting int.\n"); - qemu_set_irq(s->irq[0], 1); - return; - } - - for (i = 0; i < s->num_priority_queues; ++i) { - if (s->regs[GEM_INT_Q1_STATUS + i]) { - DB_PRINT("asserting int. (q=%d)\n", i); - qemu_set_irq(s->irq[i], 1); - } + for (i = 1; i < s->num_priority_queues; ++i) { + qemu_set_irq(s->irq[i], !!s->regs[GEM_INT_Q1_STATUS + i - 1]); } } |