forked from Minki/linux
parisc/PCI: lba: fix: convert to pci_create_root_bus() for correct root bus resources (v2)
commit dc7dce280a
Author: Bjorn Helgaas <bhelgaas@google.com>
Date: Fri Oct 28 16:27:27 2011 -0600
parisc/PCI: lba: convert to pci_create_root_bus() for correct root bus
resources
Supply root bus resources to pci_create_root_bus() so they're correct
immediately. This fixes the problem of "early" and "header" quirks seeing
incorrect root bus resources.
added tests for elmmio_space.start while it should use
elmmio_space.flags. This for example led to incorrect resource
assignments and a non-working stifb framebuffer on most parisc machines.
LBA 10:1: PCI host bridge to bus 0000:01
pci_bus 0000:01: root bus resource [io 0x12000-0x13fff] (bus address [0x2000-0x3fff])
pci_bus 0000:01: root bus resource [mem 0xfffffffffa000000-0xfffffffffbffffff] (bus address [0xfa000000-0xfbffffff])
pci_bus 0000:01: root bus resource [mem 0xfffffffff4800000-0xfffffffff4ffffff] (bus address [0xf4800000-0xf4ffffff])
pci_bus 0000:01: root bus resource [??? 0x00000001 flags 0x0]
Signed-off-by: Helge Deller <deller@gmx.de>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
b47d4934e7
commit
b204a4d2d4
@ -668,7 +668,7 @@ lba_fixup_bus(struct pci_bus *bus)
|
|||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ldev->hba.elmmio_space.start) {
|
if (ldev->hba.elmmio_space.flags) {
|
||||||
err = request_resource(&iomem_resource,
|
err = request_resource(&iomem_resource,
|
||||||
&(ldev->hba.elmmio_space));
|
&(ldev->hba.elmmio_space));
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
@ -993,7 +993,7 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|||||||
|
|
||||||
case PAT_LMMIO:
|
case PAT_LMMIO:
|
||||||
/* used to fix up pre-initialized MEM BARs */
|
/* used to fix up pre-initialized MEM BARs */
|
||||||
if (!lba_dev->hba.lmmio_space.start) {
|
if (!lba_dev->hba.lmmio_space.flags) {
|
||||||
sprintf(lba_dev->hba.lmmio_name,
|
sprintf(lba_dev->hba.lmmio_name,
|
||||||
"PCI%02x LMMIO",
|
"PCI%02x LMMIO",
|
||||||
(int)lba_dev->hba.bus_num.start);
|
(int)lba_dev->hba.bus_num.start);
|
||||||
@ -1001,7 +1001,7 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|||||||
io->start;
|
io->start;
|
||||||
r = &lba_dev->hba.lmmio_space;
|
r = &lba_dev->hba.lmmio_space;
|
||||||
r->name = lba_dev->hba.lmmio_name;
|
r->name = lba_dev->hba.lmmio_name;
|
||||||
} else if (!lba_dev->hba.elmmio_space.start) {
|
} else if (!lba_dev->hba.elmmio_space.flags) {
|
||||||
sprintf(lba_dev->hba.elmmio_name,
|
sprintf(lba_dev->hba.elmmio_name,
|
||||||
"PCI%02x ELMMIO",
|
"PCI%02x ELMMIO",
|
||||||
(int)lba_dev->hba.bus_num.start);
|
(int)lba_dev->hba.bus_num.start);
|
||||||
@ -1495,7 +1495,7 @@ lba_driver_probe(struct parisc_device *dev)
|
|||||||
|
|
||||||
pci_add_resource_offset(&resources, &lba_dev->hba.io_space,
|
pci_add_resource_offset(&resources, &lba_dev->hba.io_space,
|
||||||
HBA_PORT_BASE(lba_dev->hba.hba_num));
|
HBA_PORT_BASE(lba_dev->hba.hba_num));
|
||||||
if (lba_dev->hba.elmmio_space.start)
|
if (lba_dev->hba.elmmio_space.flags)
|
||||||
pci_add_resource_offset(&resources, &lba_dev->hba.elmmio_space,
|
pci_add_resource_offset(&resources, &lba_dev->hba.elmmio_space,
|
||||||
lba_dev->hba.lmmio_space_offset);
|
lba_dev->hba.lmmio_space_offset);
|
||||||
if (lba_dev->hba.lmmio_space.flags)
|
if (lba_dev->hba.lmmio_space.flags)
|
||||||
|
Loading…
Reference in New Issue
Block a user