linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Martin Diehl <mdiehlcs@compuserve.de>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Martin Mares <mj@suse.cz>,
	Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] VLSI irq router (was: PCI irq routing..)
Date: Mon, 11 Dec 2000 02:46:34 +0100 (CET)	[thread overview]
Message-ID: <Pine.LNX.4.21.0012110138280.1413-200000@notebook.diehl.home> (raw)
In-Reply-To: <Pine.LNX.4.10.10012071031300.2496-100000@penguin.transmeta.com>

[-- Attachment #1: Type: TEXT/PLAIN, Size: 2310 bytes --]

On Thu, 7 Dec 2000, Linus Torvalds wrote:

> > btw, I'm thinking I could guess the routing from the VLSI config space,
> > but I don't have any doc's. Would it be worth to try to add some specific
> 
> Please do. You might leave them commented out right now, but this is

Ok. Apparently it's the "pirq is nibble index in config space" kind of
routing which makes guessing a change bios and lspci procedure.
patch vs. 2.4.0-t12p8 below. Tested as (in)complete as my bios permits.
Works fine for several days and correctly assigns IRQ's when unassigned 
due to "pnp os". So I feel confident enough to not leave it commented out.
Test example attached.

Regards
Martin

-----

diff -Nur linux-2.4.0-t12p8/arch/i386/kernel/pci-irq.c linux-2.4.0-t12p8-md/arch/i386/kernel/pci-irq.c
--- linux-2.4.0-t12p8/arch/i386/kernel/pci-irq.c	Mon Dec 11 00:29:42 2000
+++ linux-2.4.0-t12p8-md/arch/i386/kernel/pci-irq.c	Mon Dec 11 00:58:48 2000
@@ -298,6 +298,33 @@
 	return 1;
 }
 
+/*
+ * VLSI: nibble offset 0x74 - educated guess due to routing table and
+ *       config space of VLSI 82C534 PCI-bridge/router (1004:0102)
+ *       Tested on HP OmniBook 800 covering PIRQ 1, 2, 4, 8 for onboard
+ *       devices, PIRQ 3 for non-pci(!) soundchip and (untested) PIRQ 6
+ *       for the busbridge to the docking station.
+ */
+
+static int pirq_vlsi_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
+{
+	if (pirq > 8) {
+		printk("VLSI router pirq escape (%d)\n", pirq);
+		return 0;
+	}
+	return read_config_nybble(router, 0x74, pirq-1);
+}
+
+static int pirq_vlsi_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+{
+	if (pirq > 8) {
+		printk("VLSI router pirq escape (%d)\n", pirq);
+		return 0;
+	}
+	write_config_nybble(router, 0x74, pirq-1, irq);
+	return 1;
+}
+                                                                
 #ifdef CONFIG_PCI_BIOS
 
 static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
@@ -329,6 +356,7 @@
 
 	{ "NatSemi", PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, pirq_cyrix_get, pirq_cyrix_set },
 	{ "SIS", PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, pirq_sis_get, pirq_sis_set },
+        { "VLSI 82C534", PCI_VENDOR_ID_VLSI, PCI_DEVICE_ID_VLSI_82C534, pirq_vlsi_get, pirq_vlsi_set },
 	{ "default", 0, 0, NULL, NULL }
 };



[-- Attachment #2: vlsi_debug --]
[-- Type: TEXT/PLAIN, Size: 4169 bytes --]

PCI: BIOS32 Service Directory structure at 0xc00ec060
PCI: BIOS32 Service Directory entry at 0xeefb0
PCI: BIOS probe returned s=00 hw=11 ver=02.10 l=01
PCI: PCI BIOS revision 2.10 entry at 0xeefc2, last bus=1
PCI: Using configuration type 1
PCI: Probing PCI hardware
PCI: Scanning for ghost devices on bus 0
PCI: Scanning for ghost devices on bus 1
PCI: IRQ init
PCI: Interrupt Routing Table found at 0xc00f36e0
00:03 slot=00 0:00/0000 1:00/0000 2:00/0000 3:00/0000
00:04 slot=00 0:01/8eb8 1:04/8eb8 2:04/0000 3:04/0000
00:05 slot=00 0:08/8eb8 1:08/0000 2:08/0000 3:08/0000
00:06 slot=00 0:02/8eb8 1:02/0000 2:02/0000 3:02/0000
01:00 slot=00 0:08/8eb8 1:08/0000 2:08/0000 3:08/0000
01:06 slot=01 0:06/8eb8 1:06/8eb8 2:06/8eb8 3:06/8eb8
PCI: Using IRQ router VLSI 82C534 [1004/0102] at 00:01.0
PCI: IRQ fixup
00:03.0: ignoring bogus IRQ 255
00:04.0: ignoring bogus IRQ 255
00:04.1: ignoring bogus IRQ 255
IRQ for 00:03.0(0) via 00:03.0 -> not routed
IRQ for 00:04.0(0) via 00:04.0 -> PIRQ 01, mask 8eb8, excl 0000 -> newirq=0 ... failed
IRQ for 00:04.1(1) via 00:04.1 -> PIRQ 04, mask 8eb8, excl 0000 -> newirq=0 ... failed
PCI: Allocating resources
PCI: Resource c0000000-c03fffff (f=1208, d=0, p=0)
PCI: Resource 00003100-000031ff (f=101, d=0, p=0)
PCI: Resource 1fffff00-1fffffff (f=200, d=0, p=0)
PCI: Resource 00003000-0000301f (f=101, d=0, p=0)
  got res[10000000:10000fff] for resource 0 of Texas Instruments PCI1131
  got res[10001000:10001fff] for resource 0 of Texas Instruments PCI1131 (#2)
PCI: Sorting device list...

Linux PCMCIA Card Services 3.1.22
  options:  [pci] [cardbus] [pm]
PCI: Enabling device 00:04.0 (0000 -> 0002)
IRQ for 00:04.0(0) via 00:04.0 -> PIRQ 01, mask 8eb8, excl 0000 -> newirq=5 -> assigning IRQ 5 ... OK
PCI: Assigned IRQ 5 for device 00:04.0
PCI: Enabling device 00:04.1 (0000 -> 0002)
IRQ for 00:04.1(1) via 00:04.1 -> PIRQ 04, mask 8eb8, excl 0000 -> newirq=9 -> assigning IRQ 9 ... OK
PCI: Assigned IRQ 9 for device 00:04.1
Yenta IRQ list 0ad8, PCI irq5
Socket status: 30000110
Yenta IRQ list 08d8, PCI irq9
Socket status: 30000010

00:00.0 Host bridge: VLSI Technology Inc 82C535 (rev 03)
	Flags: bus master, medium devsel, latency 0

00:01.0 PCI bridge: VLSI Technology Inc 82C534 (rev 03) (prog-if 00 [Normal decode])
	Flags: bus master, medium devsel, latency 0
	Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
	I/O behind bridge: 00004000-00007fff
	Memory behind bridge: 20000000-2fffffff
	Prefetchable memory behind bridge: 30000000-3fffffff
70: 08 08 08 00 a5 95 00 a0 00 00 00 00 00 00 00 3a
                ^^^^^^^^^^^

00:02.0 Class ff00: VLSI Technology Inc 82C532 (rev 02)
	Flags: medium devsel

00:03.0 VGA compatible controller: Neomagic Corporation NM2093 [MagicGraph 128ZV] (rev 04) (prog-if 00 [VGA])
	Flags: medium devsel
	Memory at c0000000 (32-bit, prefetchable) [size=4M]

00:04.0 CardBus bridge: Texas Instruments PCI1131 (rev 01)
	Flags: bus master, medium devsel, latency 168, IRQ 5
	Memory at 10000000 (32-bit, non-prefetchable) [size=4K]
	Bus: primary=00, secondary=02, subordinate=02, sec-latency=176
	Memory window 0: 10000000-103ff000 (prefetchable)
	Memory window 1: 10400000-107ff000
	I/O window 0: 00001400-000014ff
	I/O window 1: 00001800-000018ff
	16-bit legacy interface ports at 0001

00:04.1 CardBus bridge: Texas Instruments PCI1131 (rev 01)
	Flags: bus master, medium devsel, latency 168, IRQ 9
	Memory at 10001000 (32-bit, non-prefetchable) [size=4K]
	Bus: primary=00, secondary=06, subordinate=06, sec-latency=176
	Memory window 0: 10800000-10bff000 (prefetchable)
	Memory window 1: 10c00000-10fff000
	I/O window 0: 00001c00-00001cff
	I/O window 1: 00002000-000020ff
	16-bit legacy interface ports at 0001

00:05.0 SCSI storage controller: Symbios Logic Inc. (formerly NCR) 53c810 (rev 12)
	Flags: bus master, medium devsel, latency 128, IRQ 10
	I/O ports at 3100 [size=256]
	Memory at 1fffff00 (32-bit, non-prefetchable) [size=256]

00:06.0 IRDA controller: VLSI Technology Inc 82C147 (rev 02)
	Flags: bus master, medium devsel, latency 0, IRQ 10
	I/O ports at 3000 [size=32]


  parent reply	other threads:[~2000-12-11  2:17 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Pine.LNX.4.30.0012052110590.968-100000@localhost.localdomain>
2000-12-05 23:04 ` PCI irq routing Linus Torvalds
2000-12-05 23:25   ` Kai Germaschewski
2000-12-06  9:29   ` Martin Diehl
2000-12-06 17:49     ` Linus Torvalds
2000-12-07 18:30       ` Martin Diehl
2000-12-07 18:38         ` Linus Torvalds
2000-12-08  0:49           ` Martin Diehl
2000-12-11  1:46           ` Martin Diehl [this message]
2000-12-15 18:39           ` yenta, pm, ioremap(!) problems (was: PCI irq routing..) Martin Diehl
2000-12-15 18:55             ` Linus Torvalds
2000-12-16  0:21               ` Martin Diehl
2000-12-18 13:08               ` [PATCH] yenta, pm - part 1 Martin Diehl
2000-12-18 13:10               ` [PATCH] yenta, pm - part 2 Martin Diehl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.21.0012110138280.1413-200000@notebook.diehl.home \
    --to=mdiehlcs@compuserve.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mj@suse.cz \
    --cc=torvalds@transmeta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).