• Paul Mundt's avatar
    sh: interrupt exception handling rework · baf4326e
    Paul Mundt authored
    Kill off interrupt_table for all of the CPU subtypes, we now
    default in to stepping in to do_IRQ() for _all_ IRQ exceptions
    and counting the spurious ones, rather than simply flipping on
    the ones we cared about. This and enabling the IRQ by default
    automatically has already uncovered a couple of bugs and IRQs
    that weren't being caught, as well as some that are being
    generated far too often (SCI Tx Data Empty, for example).
    
    The general rationale is to use a marker for interrupt exceptions,
    test for it in the handle_exception() path, and skip out to
    do_IRQ() if it's found. Everything else follows the same behaviour
    of finding the cached EXPEVT value in r2/r2_bank, we just rip out
    the INTEVT read from entry.S entirely (except for in the kGDB NMI
    case, which is another matter).
    
    Note that while this changes the do_IRQ() semantics regarding r4
    handling, they were fundamentally broken anyways (relying entirely
    on r2_bank for the cached code). With this, we do the INTEVT read
    from do_IRQ() itself (in the CONFIG_CPU_HAS_INTEVT case), or fall
    back on r4 for the muxed IRQ number, which should also be closer
    to what SH-2 and SH-2A want anyways.
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    baf4326e
irq.c 5.92 KB