Comment 1 for bug 56427

Revision history for this message
In , DaveM (davem) wrote :

The code in hw/xfree86/os-support/bus/sparcPci.c:simbaCheckBus()
is trying to mimmick VGA routing by disabling I/O space responses
behind the Simba PCI-PCI controller.

Unfortunately, doing this also happens to disable access to the
IDE controller I/O space registers, thus crashing the system. The
granularity of the I/O disabling in the Simba controller is not
fine enough to disable VGA without also disabling the IDE controller
registers.

What usually happens is that the SIMBA code disables the I/O range,
and the first module to get loaded afterwards which isn't already in
system ram goes out to disk which hangs. We get no console
messages because the console has been put into framebuffer mode
by the X server already.

This took a painfully long time to track down and debug.

In my opinion this Simba code should be just removed outright.
It cannot work properly without also disabling access to critical
system devices, such as the IDE controller.

The code tries to disable I/O space by clearing the lowest
bit of the APB_IO_ADDRESS_MAP register. The effect of this
is to disable the first 2MB of I/O space behind that bridge,
and it's extremely likely that other critical devices will be
sitting in that region, and thus be disabled too.

Bit 0 of this register controls I/O space in the range
0 --> ((1 << 21) - 1), bit 1 controls I/O space in the
range (1 << 21) --> ((2 << 21) - 1), etc.