• Finn Thain's avatar
    m68k/mac: Disentangle VIA/RBV and NuBus initialization · 8ee90c5c
    Finn Thain authored
    The Nubus subsystem should not be concerned with differences between VIA,
    RBV and OSS platforms. It should be portable across Macs and PowerMacs.
    This goal has implications for the initialization code relating to bus
    locking and slot interrupts.
    
    During Nubus initialization, bus transactions are "unlocked": on VIA2 and
    RBV machines, via_nubus_init() sets a bit in the via2[gBufB] register to
    allow bus-mastering Nubus cards to arbitrate for the bus. This happens
    upon subsys_initcall(nubus_init). But because nubus_init() has no effect
    on card state, this sequence is arbitrary.
    
    Moreover, when Penguin is used to boot Linux, the bus is already unlocked
    when Linux starts. On OSS machines there's no attempt to unlock Nubus
    transactions at all. (Maybe there's no benefit on that platform or maybe
    no-one knows how.)
    
    All of this demonstrates that there's no benefit in locking out
    bus-mastering cards, as yet. (If the need arises, we could lock the bus
    for the duration of a timing-critical operation.) NetBSD unlocks the
    Nubus early (at VIA initialization) and we can do the same.
    
    via_nubus_init() is also responsible for some VIA interrupt setup that
    should happen earlier than subsys_initcall(nubus_init). And actually, the
    Nubus subsystem need not be involved with slot interrupts: SLOT2IRQ
    works fine because Nubus slot IRQs are geographically assigned
    (regardless of platform).
    
    For certain platforms with PDS slots, some Nubus IRQs may be platform
    IRQs and this is not something that the NuBus subsystem should worry
    about. So let's invoke via_nubus_init() earlier and make the platform
    responsible for bus unlocking and interrupt setup instead of the NuBus
    subsystem.
    Tested-by: default avatarStan Johnson <userm57@yahoo.com>
    Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
    Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    8ee90c5c
oss.c 4.72 KB