• Benjamin Herrenschmidt's avatar
    powerpc/pmac: Simplify old pmac PIC interrupt handling · 8e609d5e
    Benjamin Herrenschmidt authored
    In the old days, we treated all interrupts from the legacy Apple home made
    interrupt controllers as level, with a trick reading the "level" register
    along with the "event" register to work arounds bugs where it would
    occasionally fail to latch some events.
    
    Doing so appeared to work fine for both level and edge interrupts.
    
    Later on, we discovered in Darwin source the magic masks that define which
    interrupts are actually level and which are edge, and implemented a
    different algorithm, more similar to what Apple does, that treats those
    differently.
    
    I recently discovered however that this caused problems (including loss
    of interrupts) with an old Wallstreet PowerBook when trying to use the
    internal modem (connected to a cascaded controller).
    
    It looks like some interrupts are treated as edge while they are really
    level and I'm starting to seriously doubt the correctness of the Darwin
    code (which has other obvious bugs when you read it, so ...)
    
    This patch reverts to our original behaviour of treating everything as
    a level interrupt. It appears to solve the problems with the modem on
    the Wallstreet and everything else seems to be working properly as well.
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    8e609d5e
pic.c 17.7 KB