• Finn Thain's avatar
    m68k: Mac nubus IRQ fixes (plan E) · cd713ddc
    Finn Thain authored
    Some Macs lack a slot interrupt enable register. So the existing code makes
    disabled and unregistered slot IRQ lines outputs set high. This seems to work
    on quadras, but does not work on genuine VIAs (perhaps the card still succeeds
    in pulling the line low, or perhaps because this increases the settle time on
    the port A input, meaning that the CA1 IRQ could fire before the slot line
    reads active).
    
    Because of this, the nubus_active flags were used to mask IRQs, which is
    actually worse than the problem it tries to solve. Any interrupt masked by
    nubus_active will remain asserted and prevent further transitions on CA1. And
    so the nubus gets wedged regardless of hardware (emulated VIA ASIC, real VIA
    chip or RBV).
    
    The best solution to this hardware limitation of genuine VIAs is to disable the
    umbrella SLOTS IRQ when disabling a slot on those machines. Unfortunately, this
    means all slot IRQs get disabled when any slot IRQ is disabled. But it is only
    a problem when there's more than 1 device using nubus interrupts.
    
    Another potential problem for genuine VIAs is an unregistered nubus IRQ.
    Eventually it will be possible to enable the CA1 interrupt by installing its
    handler only _after_ all nubus drivers have loaded but _before_ the kernel
    needs them, at which time this last problem can be fixed. For now it can be
    worked around:
    
      - disable MacOS extensions
      - don't boot MacOS (use the Emile bootloader instead)
      - get the bootloaders to disable ROM drivers (Penguin does this for video
        cards already, don't know about Emile)
      - physically remove unsupported cards
    Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
    Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    cd713ddc
via.c 16.8 KB