From: Jeff Garzik <jgarzik@mandrakesoft.com>
To: thunder7@xs4all.nl
Cc: Manfred Spraul <manfred@colorfullife.com>,
linux-kernel@vger.kernel.org, John Cavan <johnc@damncats.org>
Subject: [PATCH] interrupt problem with MPS 1.4 / not with MPS 1.1 ?
Date: Sat, 02 Jun 2001 03:41:08 -0400 [thread overview]
Message-ID: <3B189894.8B2FA041@mandrakesoft.com> (raw)
In-Reply-To: <3B16A7E3.1BD600F3@colorfullife.com> <20010531222708.A8295@middle.of.nowhere> <3B16AD5D.DEDB8523@colorfullife.com> <20010601071414.A871@middle.of.nowhere> <3B17D0C1.5FC21CFB@colorfullife.com> <20010601210346.A1069@middle.of.nowhere> <3B17FE40.BDCB31BD@mandrakesoft.com> <20010602082710.A1071@middle.of.nowhere>
[-- Attachment #1: Type: text/plain, Size: 658 bytes --]
> On Fri, Jun 01, 2001 at 04:42:40PM -0400, Jeff Garzik wrote:
> > Does this patch fix things for you, such that MPS 1.1 and MPS 1.4 both
> > work?
>
> No, I'm afraid it doesn't :-(
>
> Here are the dmesg (with some info cut out for brevity), the
> /proc/interrupts and the lspci -vvvxxx from a 2.4.5-ac6 kernel with this
> patch. I see in the dmesg the patch is active, but still I get:
Thanks for testing.
Ok, how about this one? This is a more simple version of the logic
presented, which should give you the value that Manfred asked you plug
in manually.
--
Jeff Garzik | Disbelief, that's why you fail.
Building 1024 |
MandrakeSoft |
[-- Attachment #2: via-irqpic.patch --]
[-- Type: text/plain, Size: 3462 bytes --]
diff -urN linux-2.4.5/drivers/pci/quirks.c linux.viairq/drivers/pci/quirks.c
--- linux-2.4.5/drivers/pci/quirks.c Sat May 19 20:43:06 2001
+++ linux.viairq/drivers/pci/quirks.c Sat Jun 2 03:38:48 2001
@@ -17,6 +17,7 @@
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/init.h>
+#include <linux/delay.h>
#undef DEBUG
@@ -267,6 +268,8 @@
/*
* VIA 686A/B: If an IO-APIC is active, we need to route all on-chip
* devices to the external APIC.
+ *
+ * TODO: this should be done at IRQ assign time (pci_enable_device call)
*/
static void __init quirk_via_ioapic(struct pci_dev *dev)
{
@@ -277,6 +280,9 @@
else
tmp = 0x1f; /* all known bits (4-0) routed to external APIC */
+ printk(KERN_INFO "PCI: %sbling Via external APIC routing\n",
+ tmp ? "Disa" : "Ena");
+
/* Offset 0x58: External APIC IRQ output control */
pci_write_config_byte (dev, 0x58, tmp);
}
@@ -285,6 +291,34 @@
/*
+ * Via 686A/B: The PCI_INTERRUPT_LINE register for the on-chip
+ * devices, USB0/1, AC97, MC97, and ACPI, has an unusual feature:
+ * when written, it makes an internal connection to the PIC.
+ * For these devices, this register is defined to be 4 bits wide.
+ * Normally this is fine. However for IO-APIC motherboards, or
+ * non-x86 architectures (yes Via exists on PPC among other places),
+ * we must mask the PCI_INTERRUPT_LINE value versus 0xf to get
+ * interrupts delivered properly.
+ *
+ * TODO: this should be done at IRQ assign time (pci_enable_device call)
+ */
+static void __init quirk_via_irqpic(struct pci_dev *dev)
+{
+ u8 irq, new_irq;
+
+ pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
+ new_irq = irq & 0xf;
+ if (new_irq != irq) {
+ printk(KERN_INFO "PCI: Via IRQ fixup for %s, from %d to %d\n",
+ dev->slot_name, irq, new_irq);
+
+ udelay(15);
+ pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
+ }
+}
+
+
+/*
* PIIX3 USB: We have to disable USB interrupts that are
* hardwired to PIRQD# and may be shared with an
* external device.
@@ -372,6 +406,11 @@
#ifdef CONFIG_X86_IO_APIC
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic },
#endif
+
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irqpic },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_irqpic },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irqpic },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_6, quirk_via_irqpic },
{ 0 }
};
diff -urN linux-2.4.5/drivers/sound/via82cxxx_audio.c linux.viairq/drivers/sound/via82cxxx_audio.c
--- linux-2.4.5/drivers/sound/via82cxxx_audio.c Tue May 1 19:05:00 2001
+++ linux.viairq/drivers/sound/via82cxxx_audio.c Fri Jun 1 16:32:25 2001
@@ -3012,7 +3012,6 @@
{
int rc;
struct via_info *card;
- u8 tmp;
static int printed_version = 0;
DPRINTK ("ENTER\n");
@@ -3107,19 +3106,6 @@
if (rc) {
printk (KERN_ERR PFX "interrupt init failed, aborting\n");
goto err_out_have_proc;
- }
-
- pci_read_config_byte (pdev, 0x3C, &tmp);
- if ((tmp & 0x0F) != pdev->irq) {
- printk (KERN_WARNING PFX "IRQ fixup, 0x3C==0x%02X\n", tmp);
- udelay (15);
- tmp &= 0xF0;
- tmp |= pdev->irq;
- pci_write_config_byte (pdev, 0x3C, tmp);
- DPRINTK ("new 0x3c==0x%02x\n", tmp);
- } else {
- DPRINTK ("IRQ reg 0x3c==0x%02x, irq==%d\n",
- tmp, tmp & 0x0F);
}
printk (KERN_INFO PFX "board #%d at 0x%04lX, IRQ %d\n",
next prev parent reply other threads:[~2001-06-02 7:41 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-05-31 20:21 [lkml]Re: interrupt problem with MPS 1.4 / not with MPS 1.1 ? Manfred Spraul
2001-05-31 20:27 ` [lkml]Re: " thunder7
2001-05-31 20:45 ` Manfred Spraul
2001-06-01 5:14 ` thunder7
2001-06-01 5:20 ` Jeff Garzik
2001-06-01 5:39 ` thunder7
2001-06-01 17:28 ` Manfred Spraul
2001-06-01 17:41 ` Jeff Garzik
2001-06-01 19:03 ` thunder7
2001-06-01 20:42 ` [PATCH] " Jeff Garzik
2001-06-02 6:27 ` [PATCH] " thunder7
2001-06-02 7:41 ` Jeff Garzik [this message]
2001-06-02 9:00 ` thunder7
2001-06-01 4:41 ` [lkml]Re: " Jeff Garzik
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=3B189894.8B2FA041@mandrakesoft.com \
--to=jgarzik@mandrakesoft.com \
--cc=johnc@damncats.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=thunder7@xs4all.nl \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.