@@ -22,31 +22,14 @@
static void aw_a10_pic_update(AwA10PICState *s)
{
- uint8_t i, j;
- bool irq = false, fiq = false;
-
- for (i = 0, j = 0; i < AW_A10_PIC_REG_NUM; i++) {
- if (s->irq_pending[i] == 0 && s->fiq_pending[i] == 0) {
- continue;
- }
- for (j = 0; j < 32; j++) {
- if (test_bit(j, (void *)&s->mask[i])) {
- continue;
- }
- if (test_bit(j, (void *)&s->irq_pending[i])) {
- irq = true;
- }
- if (test_bit(j, (void *)&s->fiq_pending[i]) &&
- test_bit(j, (void *)&s->select[i])) {
- fiq = true;
- }
- if (irq && fiq) {
- goto out;
- }
- }
+ uint8_t i;
+ int irq = 0, fiq = 0;
+
+ for (i = 0; i < AW_A10_PIC_REG_NUM; i++) {
+ irq |= s->irq_pending[i] & ~s->mask[i];
+ fiq |= s->select[i] & s->irq_pending[i] & ~s->mask[i];
}
-out:
qemu_set_irq(s->parent_irq, irq);
qemu_set_irq(s->parent_fiq, fiq);