Revision 775616c3 hw/pl061.c

b/hw/pl061.c
48 48
    uint8_t slr;
49 49
    uint8_t den;
50 50
    uint8_t cr;
51
    uint8_t float_high;
51 52
    qemu_irq irq;
52 53
    qemu_irq out[8];
53 54
} pl061_state;
......
56 57
{
57 58
    uint8_t changed;
58 59
    uint8_t mask;
60
    uint8_t out;
59 61
    int i;
60 62

  
61
    changed = s->old_data ^ s->data;
63
    /* Outputs float high.  */
64
    /* FIXME: This is board dependent.  */
65
    out = (s->data & s->dir) | ~s->dir;
66
    changed = s->old_data ^ out;
62 67
    if (!changed)
63 68
        return;
64 69

  
65
    s->old_data = s->data;
70
    s->old_data = out;
66 71
    for (i = 0; i < 8; i++) {
67 72
        mask = 1 << i;
68
        if ((changed & mask & s->dir) && s->out) {
69
            DPRINTF("Set output %d = %d\n", i, (s->data & mask) != 0);
70
            qemu_set_irq(s->out[i], (s->data & mask) != 0);
73
        if ((changed & mask) && s->out) {
74
            DPRINTF("Set output %d = %d\n", i, (out & mask) != 0);
75
            qemu_set_irq(s->out[i], (out & mask) != 0);
71 76
        }
72 77
    }
73 78

  

Also available in: Unified diff