Re: Server testing

Jay Estabrook - Alpha Migration Tools - LINUX Project (jestabro@brillig.amt.tay1.dec.com)
Fri, 15 Dec 95 10:50:54 -0500


Craig, and all,

Here are some kernel patches that are required on any Alphas running a late
version of SRM or ARC console, in order for X Servers to be able to access
BIOS ROM contents (this is necessary for PCI VGAs in general, and Mach64
especially).

Seems that these consoles *disable* BIOS ROM access after doing BIOS
emulation, specifically so that multi-head VGA configurations can be
supported.

Now, some PCI VGA cards prolly power up with BIOS ROM enabled, and when
running MILO directly instead of ARC or SRM, everything just works. But when
using ARC-to-MILO, or just SRM, unless the kernel re-initializes the card to
allow BIOS ROM access, the servers are out of luck.

With these in place, and some additional server patches, the ATI Mach64
server is much more useful (but still not ready for prime time).

Note that these diffs are against a 1.3.45 kernel; sorry...

--Jay++

-------------------------------------------------------------------------------

diff --recursive -u old/arch/alpha/kernel/bios32.c new/arch/alpha/kernel/bios32.c
--- old/arch/alpha/kernel/bios32.c Tue Nov 7 07:18:34 1995
+++ new/arch/alpha/kernel/bios32.c Thu Dec 14 11:11:07 1995
@@ -427,6 +427,14 @@
pcibios_write_config_byte(dev->bus->number, dev->devfn,
PCI_INTERRUPT_LINE, dev->irq);
#endif
+ /*
+ * if its a VGA, enable its BIOS ROM at C0000
+ */
+ if ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
+ pcibios_write_config_dword(dev->bus->number, dev->devfn,
+ PCI_ROM_ADDRESS,
+ 0x000c0000 | PCI_ROM_ADDRESS_ENABLE);
+ }
}
if (ide_base) {
enable_ide(ide_base);
@@ -612,6 +620,14 @@
if (pirq < 0) {
continue;
}
+ /*
+ * if its a VGA, enable its BIOS ROM at C0000
+ */
+ if ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
+ pcibios_write_config_dword(dev->bus->number, dev->devfn,
+ PCI_ROM_ADDRESS,
+ 0x000c0000 | PCI_ROM_ADDRESS_ENABLE);
+ }
if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
continue; /* for now, displays get no IRQ */
}
@@ -620,7 +636,6 @@
/* must set the PCI IRQs to level triggered */
/* assume they are all >= 8 */
level_bits |= (1 << (dev->irq - 8));
- outb(level_bits, 0x4d1);

#if PCI_MODIFY
/* tell the device: */
@@ -628,6 +643,10 @@
PCI_INTERRUPT_LINE, dev->irq);
#endif
}
+ /* now, set any level-triggered IRQs */
+ if (level_bits)
+ outb(level_bits, 0x4d1);
+

#if PCI_MODIFY
{

-------------------------------------------------------------------------------
American Non Sequitur Society: we don't make sense, but we do like pizza...

Jay A Estabrook Alpha Migration Tools
Mailstop: TAY1-2 (DTN) 227-4202
Digital Equipment Corp. (external) (508) 952-4202
151 Taylor Street enet: jestabro@amt.tay1.dec.com
Littleton, MA 01460-1407 decnet: tallis::jestabro
-------------------------------------------------------------------------------