* [PATCH 2.6.15-rc3-mm1] PCI Quirk: 1K I/O Space Granularity on Intel P64H2
@ 2005-12-01 19:37 Yeisley, Dan P.
2005-12-01 21:40 ` Greg KH
0 siblings, 1 reply; 2+ messages in thread
From: Yeisley, Dan P. @ 2005-12-01 19:37 UTC (permalink / raw)
To: linux-kernel; +Cc: gregkh, akpm
I've implemented a quirk to take advantage of the 1KB I/O space
granularity option on the Intel P64H2 PCI Bridge. I had to change
probe.c because it sets the resource start and end to be aligned on 4k
boundaries (after the quirk sets them to 1k boundaries). I've tested
this patch on a Unisys ES7000-600 both with and without the 1KB option
enabled. I also tested this on a 2 processor Dell box that doesn't have
a P64H2 to make sure there were no negative affects there.
Signed-off-by: Dan Yeisley <dan.yeisley@unisys.com>
---
diff -Naur linux-a/drivers/pci/probe.c linux-b/drivers/pci/probe.c
--- linux-a/drivers/pci/probe.c 2005-12-01 01:07:30.000000000 -0800
+++ linux-b/drivers/pci/probe.c 2005-11-30 05:13:41.000000000 -0800
@@ -264,8 +264,10 @@
if (base <= limit) {
res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) |
IORESOURCE_IO;
- res->start = base;
- res->end = limit + 0xfff;
+ if(!res->start)
+ res->start = base;
+ if(!res->end)
+ res->end = limit + 0xfff;
}
res = child->resource[1];
diff -Naur linux-a/drivers/pci/quirks.c linux-b/drivers/pci/quirks.c
--- linux-a/drivers/pci/quirks.c 2005-12-01 01:07:30.000000000
-0800
+++ linux-b/drivers/pci/quirks.c 2005-12-01 01:10:41.000000000
-0800
@@ -1312,6 +1312,35 @@
pci_do_fixups(dev, start, end);
}
+/*
+** Intel P64H2 PCI Bridge
+** Enable 1k I/O space granularity
+*/
+static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev)
+{
+ u16 en1k;
+ u8 io_base_lo, io_limit_lo;
+ unsigned long base, limit;
+ struct resource *res = dev->resource + PCI_BRIDGE_RESOURCES;
+
+ pci_read_config_word(dev, 0x40, &en1k);
+
+ if(en1k & 0x200) {
+ printk(KERN_INFO "PCI: Enable I/O Space to 1 KB
Granularity\n");
+
+ pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
+ pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
+ base = (io_base_lo & (PCI_IO_RANGE_MASK | 0x0c)) << 8;
+ limit = (io_limit_lo & (PCI_IO_RANGE_MASK | 0x0c)) << 8;
+
+ if(base <= limit) {
+ res->start = base;
+ res->end = limit + 0x3ff;
+ }
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1460,
quirk_p64h2_1k_io);
+
EXPORT_SYMBOL_GPL(pcie_mch_quirk);
#ifdef CONFIG_HOTPLUG
EXPORT_SYMBOL_GPL(pci_fixup_device);
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 2.6.15-rc3-mm1] PCI Quirk: 1K I/O Space Granularity on Intel P64H2
2005-12-01 19:37 [PATCH 2.6.15-rc3-mm1] PCI Quirk: 1K I/O Space Granularity on Intel P64H2 Yeisley, Dan P.
@ 2005-12-01 21:40 ` Greg KH
0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2005-12-01 21:40 UTC (permalink / raw)
To: Yeisley, Dan P.; +Cc: linux-kernel, akpm
On Thu, Dec 01, 2005 at 02:37:03PM -0500, Yeisley, Dan P. wrote:
> I've implemented a quirk to take advantage of the 1KB I/O space
> granularity option on the Intel P64H2 PCI Bridge. I had to change
> probe.c because it sets the resource start and end to be aligned on 4k
> boundaries (after the quirk sets them to 1k boundaries). I've tested
> this patch on a Unisys ES7000-600 both with and without the 1KB option
> enabled. I also tested this on a 2 processor Dell box that doesn't have
> a P64H2 to make sure there were no negative affects there.
>
> Signed-off-by: Dan Yeisley <dan.yeisley@unisys.com>
> ---
>
>
> diff -Naur linux-a/drivers/pci/probe.c linux-b/drivers/pci/probe.c
> --- linux-a/drivers/pci/probe.c 2005-12-01 01:07:30.000000000 -0800
> +++ linux-b/drivers/pci/probe.c 2005-11-30 05:13:41.000000000 -0800
> @@ -264,8 +264,10 @@
>
> if (base <= limit) {
> res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) |
> IORESOURCE_IO;
Your patch is linewrapped and can not be applied :(
Care to try again?
> - res->start = base;
> - res->end = limit + 0xfff;
> + if(!res->start)
> + res->start = base;
> + if(!res->end)
> + res->end = limit + 0xfff;
Why is this necessary, if your quirk already sets these values?
> }
>
> res = child->resource[1];
> diff -Naur linux-a/drivers/pci/quirks.c linux-b/drivers/pci/quirks.c
> --- linux-a/drivers/pci/quirks.c 2005-12-01 01:07:30.000000000
> -0800
> +++ linux-b/drivers/pci/quirks.c 2005-12-01 01:10:41.000000000
> -0800
> @@ -1312,6 +1312,35 @@
> pci_do_fixups(dev, start, end);
> }
>
> +/*
> +** Intel P64H2 PCI Bridge
> +** Enable 1k I/O space granularity
> +*/
That's a very odd function comment format. Care to use the standard
kernel format instead?
> +static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev)
> +{
> + u16 en1k;
> + u8 io_base_lo, io_limit_lo;
> + unsigned long base, limit;
> + struct resource *res = dev->resource + PCI_BRIDGE_RESOURCES;
> +
> + pci_read_config_word(dev, 0x40, &en1k);
> +
> + if(en1k & 0x200) {
Space after "if" and before "(" please.
> + printk(KERN_INFO "PCI: Enable I/O Space to 1 KB
> Granularity\n");
> +
> + pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
> + pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
> + base = (io_base_lo & (PCI_IO_RANGE_MASK | 0x0c)) << 8;
> + limit = (io_limit_lo & (PCI_IO_RANGE_MASK | 0x0c)) << 8;
> +
> + if(base <= limit) {
Space after "if" and before "(" please.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-12-01 21:41 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-12-01 19:37 [PATCH 2.6.15-rc3-mm1] PCI Quirk: 1K I/O Space Granularity on Intel P64H2 Yeisley, Dan P.
2005-12-01 21:40 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox