public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Cory Bell <cory.bell@usa.net>
To: Patrick Mochel <mochel@osdl.org>
Cc: linux-kernel@vger.kernel.org,
	Andrew Grover <andrew.grover@intel.com>,
	John Clemens <john@deater.net>
Subject: Re: IRQ Routing Problem on ALi Chipset Laptop (HP Pavilion N5425)
Date: 07 Dec 2001 13:23:53 -0800	[thread overview]
Message-ID: <1007760235.10687.0.camel@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.33.0112070925280.851-100000@segfault.osdlab.org>
In-Reply-To: <Pine.LNX.4.33.0112070925280.851-100000@segfault.osdlab.org>

On Fri, 2001-12-07 at 09:35, Patrick Mochel wrote:
> 
> Hey there.

Hey to you too - thanks for chiming in!

> How new is this system?

Brand spankin'. About 3 weeks old. It's definitely acronym compliant
(ACPI, DMI, etc).

> If it's new (3-6 months) PCI IRQ information is probably encoded in ACPI
> AML methods. OEMs are gradually changing from the old way (PIRQ and MP
> tables, APM) to new Grand Unified Way(tm) (ACPI).

I've already noticed that APM locks the machine when "console blanking
with APM" is turned on. The ACPI semantics seem a bit bizarre (the
executable code thing), but it's worked well on (recent) laptops I've
used. Besides, new stuff is cool!

> For a while now, BIOSes have shipped with both old tables and ACPI tables,
> and in a lot of cases, one or the other lies. So, you're almost lucky in a
> sense. Unfortunately, it doesn't solve your problem.

Bizarrely enough, it seems that BOTH the $PIR table and the ACPI table
are borken (at least HP's BIOS engineers are consistent). dump_pirq
reports that 00:02 (my usb controller) is on "link" 0x59 (all the other
links are 0x00-0x03).  The $PIR *mask* is correct, though (according to
it, IRQ ll is the only allowable for that slot. As you can see below,
the ACPI table seems to agree about irq 9.

ACPI: Core Subsystem version [20011205]
...
ACPI: PCI Routing Table (bus 00)
  device=02 pin=00 irq=9
  device=04 pin=00 irq=11
  device=04 pin=01 irq=11
  device=08 pin=00 irq=5
  device=10 pin=00 irq=11
ACPI: PCI Routing Table (bus 01)
  device=00 pin=00 irq=11

> For some reason, the people that wrote the spec encoded PCI IRQ
> information in AML (ACPI Machine Language), instead of putting them in a
> flat table. Which means you need the interpretor up and running and you
> need to execute those methods (don't ask, just nod and smile).

Nod. :>

> The Intel ACPI guys kinda have this working. They are able to extract and
> execute the methods. But, they still have yet to make devices request and
> use that information. Maybe Andy Grover can comment on this..
> 
> BTW, The latest ACPI patch is at: http://sourceforge.net/projects/acpi/.

Thanks! Just got it and tried it.

Could I get your comments on a patch against 2.4.16-stock? I'm trying to
figure out the best way to automagically work around the bug, and this
is the best I've come up with so far. I need more DMI data from other HP
5400 series AMD/ALi laptops with the problem to come up with the most
accurate matches - right now it's tied to my machine type and BIOS
version.

--- linux/arch/i386/kernel/dmi_scan.c	Mon Dec  3 22:11:36 2001
+++ linux/arch/i386/kernel/dmi_scan.c	Fri Dec  7 01:14:18 2001
@@ -414,6 +414,20 @@
 	return 0;
 }
 
+/*
+ * Work around broken HP Pavilion Notebooks which assign USB to
+ * IRQ 9 even though it is actually wired to IRQ 11
+ */
+static __init int fix_broken_hp_bios_irq9(struct dmi_blacklist *d)
+{
+	extern int broken_hp_bios_irq9;
+	if (broken_hp_bios_irq9 == 0)
+	{
+		broken_hp_bios_irq9 = 1;
+		printk(KERN_INFO "%s detected - fixing broken IRQ routing\n", d->ident);
+	}
+	return 0;
+}
 
 /*
  *	Simple "print if true" callback
@@ -603,7 +617,14 @@
 			NO_MATCH, NO_MATCH
 			} },
 	 
-			
+	{ fix_broken_hp_bios_irq9, "HP Pavilion N5400 Series Laptop", {
+			MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
+			MATCH(DMI_BIOS_VERSION, "GE.M1.03"),
+			MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook Model GE"),
+			MATCH(DMI_BOARD_VERSION, "OmniBook N32N-736")
+			} },
+ 
+
 	/*
 	 *	Generic per vendor APM settings
 	 */
--- linux/arch/i386/kernel/pci-irq.c	Sun Nov  4 09:31:58 2001
+++ linux/arch/i386/kernel/pci-irq.c	Fri Dec  7 00:38:17 2001
@@ -22,6 +22,8 @@
 #define PIRQ_SIGNATURE	(('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))
 #define PIRQ_VERSION 0x0100
 
+int broken_hp_bios_irq9;
+
 static struct irq_routing_table *pirq_table;
 
 /*
@@ -565,6 +567,15 @@
 	DBG(" -> PIRQ %02x, mask %04x, excl %04x", pirq, mask, pirq_table->exclusive_irqs);
 	mask &= pcibios_irq_mask;
 
+	/* Work around broken HP Pavilion Notebooks which assign USB to
+	   IRQ 9 even though it is actually wired to IRQ 11 */
+
+	if (broken_hp_bios_irq9 && pirq == 0x59 && dev->irq == 9) {
+		dev->irq = 11;
+		pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 11);
+		r->set(pirq_router_dev, dev, pirq, 11);
+	}
+
 	/*
 	 * Find the best IRQ to assign: use the one
 	 * reported by the device if possible.


  reply	other threads:[~2001-12-07 21:33 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-05  5:16 IRQ Routing Problem on ALi Chipset Laptop (HP Pavilion N5425) Cory Bell
2001-12-05  5:58 ` John Clemens
2001-12-05  8:40   ` Cory Bell
2001-12-05 16:41     ` John Clemens
2001-12-05 16:54       ` Daniel Gryniewicz
2001-12-05 18:48         ` James Cassidy
2001-12-05 19:43           ` Daniel Gryniewicz
2001-12-06  7:00       ` Cory Bell
2001-12-06 15:11         ` John Clemens
2001-12-07  0:41           ` Cory Bell
2001-12-07  1:03             ` Randy.Dunlap
2001-12-07  1:27               ` Cory Bell
2001-12-07 16:24                 ` rddunlap
2001-12-07 17:35                 ` Patrick Mochel
2001-12-07 21:23                   ` Cory Bell [this message]
2001-12-07 21:48                     ` Daniel Gryniewicz
2001-12-07 22:32                       ` Cory Bell
2001-12-08 22:38                     ` Pavel Machek
2001-12-08 23:04                     ` Pavel Machek
2001-12-09 20:02                       ` Cory Bell
2001-12-10 10:49                         ` Pavel Machek
2001-12-19 21:53                         ` Pavel Machek
2001-12-20 21:48                           ` Kai Germaschewski
2001-12-20 22:40                             ` Pavel Machek
2001-12-20 23:58                               ` Kai Germaschewski
2001-12-07 20:33             ` Pavel Machek
2001-12-09  5:37               ` Cory Bell
2001-12-09 13:13                 ` Pavel Machek
2001-12-10 15:26                   ` John Clemens
2001-12-10 16:04                     ` Pavel Machek
2001-12-10 17:53                       ` John Clemens
2001-12-11  1:53                         ` Cory Bell
2001-12-11  9:45                           ` Pavel Machek
2001-12-10 18:32                     ` Pavel Machek
2001-12-10 20:56                     ` Cory Bell
2001-12-10 11:03                 ` Pavel Machek
2001-12-10 16:01                 ` Pavel Machek
2001-12-10 21:24                   ` Cory Bell
2001-12-11 10:02                     ` Pavel Machek
2001-12-11 10:14                 ` Pavel Machek
2001-12-11 15:19                   ` Cory Bell
2001-12-11 15:36                     ` Pavel Machek
2001-12-11 17:08                       ` Cory Bell
  -- strict thread matches above, loose matches on Subject: below --
2001-12-07 18:13 Grover, Andrew

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=1007760235.10687.0.camel@localhost.localdomain \
    --to=cory.bell@usa.net \
    --cc=andrew.grover@intel.com \
    --cc=john@deater.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mochel@osdl.org \
    /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