[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20101208213627.13026.18854.stgit@bob.kio>
Date: Wed, 08 Dec 2010 14:36:27 -0700
From: Bjorn Helgaas <bjorn.helgaas@...com>
To: Jesse Barnes <jbarnes@...tuousgeek.org>,
Len Brown <lenb@...nel.org>
Cc: linux-pci@...r.kernel.org, linux-kernel@...r.kernel.org,
"Rafael J. Wysocki" <rjw@...k.pl>, linux-acpi@...r.kernel.org,
"H. Peter Anvin" <hpa@...or.com>,
Thomas Gleixner <tglx@...utronix.de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Ingo Molnar <mingo@...e.hu>, Adam Belay <abelay@....edu>
Subject: [PATCH 5/5] PNP: HP nx6325 fixup: reserve unreported resources
The HP nx6325 BIOS doesn't report any devices in the [0xf8000000-0xfbffffff]
region via ACPI devices or the E820 memory map, but when we assign it to the
00:14.4 bridge as a prefetchable memory window, the machine hangs.
I determined experimentally that there are only three 1MB regions in
that area that cause trouble, so this fixup builds a fake PNP device
that consumes those regions.
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=23332
Reported-by: Rafael J. Wysocki <rjw@...k.pl>
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@...com>
---
drivers/pnp/quirks.c | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
index f18bb69..e7de402 100644
--- a/drivers/pnp/quirks.c
+++ b/drivers/pnp/quirks.c
@@ -343,7 +343,37 @@ static struct pnp_protocol pnp_fixup_protocol = {
.name = "Plug and Play fixup",
};
+static int __init hp_nx6325_fixup(const struct dmi_system_id *d)
+{
+ struct pnp_dev *dev;
+
+ /*
+ * The BIOS apparently forgot to describe some regions in the
+ * address map. See https://bugzilla.kernel.org/show_bug.cgi?id=23332
+ */
+
+ dev = pnp_alloc_dev(&pnp_fixup_protocol, 0, "LNXHAZRD");
+ if (!dev)
+ return 0;
+
+ dev->active = 1;
+ pnp_add_mem_resource(dev, 0xf8300000, 0xf83fffff, 0);
+ pnp_add_mem_resource(dev, 0xf8500000, 0xf85fffff, 0);
+ pnp_add_mem_resource(dev, 0xf9100000, 0xf91fffff, 0);
+ pnp_add_device(dev);
+ dev_info(&dev->dev, "added to work around BIOS defect\n");
+ return 0;
+}
+
static const struct dmi_system_id pnp_fixup_table[] __initconst = {
+ {
+ .callback = hp_nx6325_fixup,
+ .ident = "HP nx6325 laptop",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
+ },
+ },
{}
};
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists