From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Cc: Greg KH <gregkh@suse.de>,
Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>,
Ralf Baechle <ralf@linux-mips.org>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Please revert: PCI: fix IDE legacy mode resources
Date: Thu, 06 Dec 2007 11:10:18 +1100 [thread overview]
Message-ID: <1196899818.7033.11.camel@pasglop> (raw)
In-Reply-To: <200710122305.l9CN5tFI008240@hera.kernel.org>
The commit below that was merged in october looks bogus to me.
At this stage in the PCI probe, the pci_dev->resource's contain RAW bar
values, that is bus values..
A PCI legacy IDE controller that hard decodes 0x1f0 etc... does such as
bus values as well. That is, the resources should contain 0x1f0...0x1f7
etc... -not- some kind of transformed values, because that's exactly
what a BAR would contain if it had been read from the device by
pci_read_bases() and we haven't performed any fixup yet.
If the platform offsets resources, like powerpc does, it should do so
later on in a fixup pass (on ppc, we use either a header quirk or
fixup_bus depending on the phase of the moon) and that should work
fine.
I don't understand how his fix can work on MIPS nor why the previous
code didn't, but I don't know how MIPS does its remapping tricks,
however it will definitely -not- work on powerpc (and will break a
couple of machines out there).
So there may be a problem with MIPS but that "fix" is wrong and will
break PowerPC at least. Can it be reverted ? I'll work with Yoichi and
Ralf to understand what mips does and see how it can be fixed.
Cheers,
Ben.
On Fri, 2007-10-12 at 23:05 +0000, Linux Kernel Mailing List wrote:
> Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fd6e732186ab522c812ab19c2c5e5befb8ec8115
> Commit: fd6e732186ab522c812ab19c2c5e5befb8ec8115
> Parent: cbf5d9e6b9bcf03291cbb51db144b3e2773a8a2d
> Author: Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
> AuthorDate: Tue Oct 2 14:19:23 2007 -0700
> Committer: Greg Kroah-Hartman <gregkh@suse.de>
> CommitDate: Fri Oct 12 15:03:17 2007 -0700
>
> PCI: fix IDE legacy mode resources
>
> I got the following error on MIPS Cobalt.
>
> PCI: Unable to reserve I/O region #1:8@f00001f0 for device 0000:00:09.1
> pata_via 0000:00:09.1: failed to request/iomap BARs for port 0 (errno=-16)
> PCI: Unable to reserve I/O region #3:8@f0000170 for device 0000:00:09.1
> pata_via 0000:00:09.1: failed to request/iomap BARs for port 1 (errno=-16)
> pata_via 0000:00:09.1: no available native port
>
> The legacy mode IDE resources set the following order.
>
> pci_setup_device()
> Legacy mode ATA controllers have fixed addresses.
> IDE resources: 0x1F0-0x1F7, 0x3F6, 0x170-0x177, 0x376
> |
> V
> pcibios_fixup_bus()
> MIPS Cobalt PCI bus regions have the -0x10000000 offset from PCI resources.
> pcibios_fixup_bus() fix PCI bus regions.
> 0x1F0 - 0x10000000 = 0xF00001F0
> |
> V
> ata_pci_init_one()
> PCI: Unable to reserve I/O region #1:8@f00001f0 for device 0000:00:09.1
>
> In some architectures, PCI bus regions have the offset from PCI resources.
> For this reason, pci_setup_device() should set PCI bus regions to
> dev->resource[].
>
> [akpm@linux-foundation.org: use struct initialiser]
> Signed-off-by: Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
> Cc: Greg KH <greg@kroah.com>
> Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> Cc: Ralf Baechle <ralf@linux-mips.org>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
> ---
> drivers/pci/probe.c | 48 ++++++++++++++++++++++++++++++++++++------------
> 1 files changed, 36 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 171ca71..40e571d 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -744,22 +744,46 @@ static int pci_setup_device(struct pci_dev * dev)
> */
> if (class == PCI_CLASS_STORAGE_IDE) {
> u8 progif;
> + struct pci_bus_region region;
> +
> pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
> if ((progif & 1) == 0) {
> - dev->resource[0].start = 0x1F0;
> - dev->resource[0].end = 0x1F7;
> - dev->resource[0].flags = LEGACY_IO_RESOURCE;
> - dev->resource[1].start = 0x3F6;
> - dev->resource[1].end = 0x3F6;
> - dev->resource[1].flags = LEGACY_IO_RESOURCE;
> + struct resource resource = {
> + .start = 0x1F0,
> + .end = 0x1F7,
> + .flags = LEGACY_IO_RESOURCE,
> + };
> +
> + pcibios_resource_to_bus(dev, ®ion, &resource);
> + dev->resource[0].start = region.start;
> + dev->resource[0].end = region.end;
> + dev->resource[0].flags = resource.flags;
> + resource.start = 0x3F6;
> + resource.end = 0x3F6;
> + resource.flags = LEGACY_IO_RESOURCE;
> + pcibios_resource_to_bus(dev, ®ion, &resource);
> + dev->resource[1].start = region.start;
> + dev->resource[1].end = region.end;
> + dev->resource[1].flags = resource.flags;
> }
> if ((progif & 4) == 0) {
> - dev->resource[2].start = 0x170;
> - dev->resource[2].end = 0x177;
> - dev->resource[2].flags = LEGACY_IO_RESOURCE;
> - dev->resource[3].start = 0x376;
> - dev->resource[3].end = 0x376;
> - dev->resource[3].flags = LEGACY_IO_RESOURCE;
> + struct resource resource = {
> + .start = 0x170,
> + .end = 0x177,
> + .flags = LEGACY_IO_RESOURCE,
> + };
> +
> + pcibios_resource_to_bus(dev, ®ion, &resource);
> + dev->resource[2].start = region.start;
> + dev->resource[2].end = region.end;
> + dev->resource[2].flags = resource.flags;
> + resource.start = 0x376;
> + resource.end = 0x376;
> + resource.flags = LEGACY_IO_RESOURCE;
> + pcibios_resource_to_bus(dev, ®ion, &resource);
> + dev->resource[3].start = region.start;
> + dev->resource[3].end = region.end;
> + dev->resource[3].flags = resource.flags;
> }
> }
> break;
> -
> To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next parent reply other threads:[~2007-12-06 0:12 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200710122305.l9CN5tFI008240@hera.kernel.org>
2007-12-06 0:10 ` Benjamin Herrenschmidt [this message]
2007-12-06 4:34 ` Please revert: PCI: fix IDE legacy mode resources Yoichi Yuasa
2007-12-06 5:04 ` Benjamin Herrenschmidt
2007-12-06 5:58 ` Yoichi Yuasa
2007-12-06 6:24 ` Benjamin Herrenschmidt
2007-12-09 2:12 ` Ralf Baechle
2007-12-09 7:24 ` Benjamin Herrenschmidt
2007-12-09 9:49 ` Benjamin Herrenschmidt
2007-12-09 12:46 ` Bartlomiej Zolnierkiewicz
2007-12-09 13:39 ` Alan Cox
2007-12-09 20:11 ` Benjamin Herrenschmidt
2007-12-09 13:38 ` Alan Cox
2007-12-09 20:03 ` Benjamin Herrenschmidt
2007-12-09 22:23 ` Alan Cox
2007-12-09 22:47 ` Benjamin Herrenschmidt
2007-12-10 4:29 ` Benjamin Herrenschmidt
2007-12-10 11:20 ` Alan Cox
2007-12-10 13:40 ` Ralf Baechle
2007-12-10 15:01 ` Alan Cox
2007-12-10 15:47 ` Ralf Baechle
2007-12-10 20:43 ` Benjamin Herrenschmidt
2007-12-11 0:05 ` Ralf Baechle
2007-12-11 0:27 ` Benjamin Herrenschmidt
2007-12-11 12:13 ` Ralf Baechle
2007-12-10 20:39 ` Benjamin Herrenschmidt
2007-12-10 23:07 ` Alan Cox
2007-12-11 0:10 ` Benjamin Herrenschmidt
2007-12-10 13:38 ` Ralf Baechle
2007-12-10 13:26 ` Ralf Baechle
2007-12-06 12:32 ` Ralf Baechle
2007-12-06 15:24 ` Ralf Baechle
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=1196899818.7033.11.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=ralf@linux-mips.org \
--cc=torvalds@linux-foundation.org \
--cc=yoichi_yuasa@tripeaks.co.jp \
/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