From owner-freebsd-smp Sat Apr 19 11:05:25 1997 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.5/8.8.5) id LAA28798 for smp-outgoing; Sat, 19 Apr 1997 11:05:25 -0700 (PDT) Received: from Ilsa.StevesCafe.com (Ilsa.StevesCafe.com [205.168.119.129]) by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id LAA28793 for ; Sat, 19 Apr 1997 11:05:21 -0700 (PDT) Received: from Ilsa.StevesCafe.com (localhost [127.0.0.1]) by Ilsa.StevesCafe.com (8.8.5/8.8.5) with ESMTP id MAA03317; Sat, 19 Apr 1997 12:05:14 -0600 (MDT) Message-Id: <199704191805.MAA03317@Ilsa.StevesCafe.com> X-Mailer: exmh version 2.0gamma 1/27/96 From: Steve Passe To: Gunther Hipper cc: smp@freebsd.org Subject: Re: Problem with DEC 21050 PCI/PCI bridge In-reply-to: Your message of "Sat, 19 Apr 1997 17:14:32 +0200." <199704191514.RAA05104@donau.informatik.uni-rostock.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Sat, 19 Apr 1997 12:05:14 -0600 Sender: owner-smp@freebsd.org X-Loop: FreeBSD.org Precedence: bulk Hi, I've never had access to a bridge card to check out the GA586DX's behaviour, but am not suprised to find that it fails, almost ALL current generation MP boards do! I just going from memory, but I think this is how I solved the problem for another user. Note that I placed '???' in the code for the actual INT#, as I don't have enough info to decide which it will be (or its just that I haven't had my first latte' yet this morning...) The INT used depends on the slot the card is in. The ahc is not a direct clue as it is a "virtual fifth slot", ie it's builit into the MB and I forget which slot it is shared with. We know it will be one of: INT active-lo level 1 8:A 2 16 INT active-lo level 1 9:A 2 17 INT active-lo level 1 10:A 2 18 INT active-lo level 1 12:A 2 19 ie, INT 16,17,18,19 furthermore we know that whatever slot the vga card is in uses 16: vga0 rev 227 int a irq 16 on pci0:8:0 you could move the vga card around in the empty PCI slots, recording this value each time you boot, and map the slot to APIC INT# values. Or you could just put the de card in the slot currently occuppied by the vga card and use 16 in place of the '???'. Remember that this patch requires that you keep the de card in the same slot once you have the kernel working... my guess is that your vga is in slot 1, that the map will be: slot 1 -> INT16 slot 2 -> INT17 slot 3 -> INT18 slot 4 -> INT19 and that the ahc "shares" slot 4/INT19. let me know how this does/doesn't work... If you map the slots to INTs please forward them here for my rogue database. ------------------------------------ cut -------------------------------------- *** mp_machdep.c.orig Thu Dec 12 01:43:52 1996 --- mp_machdep.c Sat Apr 19 11:44:18 1997 *************** *** 920,932 **** #define SRCBUSDEVICE(I) ((ioApicINTs[(I)].srcBusIRQ >> 2) & 0x1f) #define SRCBUSLINE(I) (ioApicINTs[(I)].srcBusIRQ & 0x03) int ! get_pci_apic_irq( int pciBus __attribute__ ((unused)), ! int pciDevice, int pciInt ) { /** * FIXME: how do we associate a SPECIFIC PCI bus with a unique bus ID??? */ int intr; --pciInt; /* zero based */ --- 920,934 ---- #define SRCBUSDEVICE(I) ((ioApicINTs[(I)].srcBusIRQ >> 2) & 0x1f) #define SRCBUSLINE(I) (ioApicINTs[(I)].srcBusIRQ & 0x03) int ! get_pci_apic_irq( int pciBus, int pciDevice, int pciInt ) { /** * FIXME: how do we associate a SPECIFIC PCI bus with a unique bus ID??? */ int intr; + + if ( (pciBus == 1) && ((pciDevice >= 4) && (pciDevice <=7)) + return ???; --pciInt; /* zero based */ ------------------------------------ cut -------------------------------------- -- Steve Passe | powered by smp@csn.net | Symmetric MultiProcessor FreeBSD