mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 21:05:02 -04:00
Merge branch 'pci/enumeration'
- Simplify pci_read_bridge_bases() logic (Ilpo Järvinen) * pci/enumeration: PCI: Simplify pci_read_bridge_bases() logic PCI: Move struct pci_bus_resource into bus.c PCI: Remove unused PCI_SUBTRACTIVE_DECODE
This commit is contained in:
@@ -53,7 +53,7 @@ static int zpci_bus_prepare_device(struct zpci_dev *zdev)
|
||||
zpci_setup_bus_resources(zdev);
|
||||
for (i = 0; i < PCI_STD_NUM_BARS; i++) {
|
||||
if (zdev->bars[i].res)
|
||||
pci_bus_add_resource(zdev->zbus->bus, zdev->bars[i].res, 0);
|
||||
pci_bus_add_resource(zdev->zbus->bus, zdev->bars[i].res);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -757,7 +757,7 @@ static void pci_amd_enable_64bit_bar(struct pci_dev *dev)
|
||||
dev_info(&dev->dev, "adding root bus resource %pR (tainting kernel)\n",
|
||||
res);
|
||||
add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
|
||||
pci_bus_add_resource(dev->bus, res, 0);
|
||||
pci_bus_add_resource(dev->bus, res);
|
||||
}
|
||||
|
||||
base = ((res->start >> 8) & AMD_141b_MMIO_BASE_MMIOBASE_MASK) |
|
||||
|
||||
@@ -18,6 +18,18 @@
|
||||
|
||||
#include "pci.h"
|
||||
|
||||
/*
|
||||
* The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond
|
||||
* to P2P or CardBus bridge windows) go in a table. Additional ones (for
|
||||
* buses below host bridges or subtractive decode bridges) go in the list.
|
||||
* Use pci_bus_for_each_resource() to iterate through all the resources.
|
||||
*/
|
||||
|
||||
struct pci_bus_resource {
|
||||
struct list_head list;
|
||||
struct resource *res;
|
||||
};
|
||||
|
||||
void pci_add_resource_offset(struct list_head *resources, struct resource *res,
|
||||
resource_size_t offset)
|
||||
{
|
||||
@@ -46,8 +58,7 @@ void pci_free_resource_list(struct list_head *resources)
|
||||
}
|
||||
EXPORT_SYMBOL(pci_free_resource_list);
|
||||
|
||||
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res,
|
||||
unsigned int flags)
|
||||
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res)
|
||||
{
|
||||
struct pci_bus_resource *bus_res;
|
||||
|
||||
@@ -58,7 +69,6 @@ void pci_bus_add_resource(struct pci_bus *bus, struct resource *res,
|
||||
}
|
||||
|
||||
bus_res->res = res;
|
||||
bus_res->flags = flags;
|
||||
list_add_tail(&bus_res->list, &bus->resources);
|
||||
}
|
||||
|
||||
|
||||
@@ -543,15 +543,15 @@ void pci_read_bridge_bases(struct pci_bus *child)
|
||||
pci_read_bridge_mmio(child->self, child->resource[1], false);
|
||||
pci_read_bridge_mmio_pref(child->self, child->resource[2], false);
|
||||
|
||||
if (dev->transparent) {
|
||||
pci_bus_for_each_resource(child->parent, res) {
|
||||
if (res && res->flags) {
|
||||
pci_bus_add_resource(child, res,
|
||||
PCI_SUBTRACTIVE_DECODE);
|
||||
pci_info(dev, " bridge window %pR (subtractive decode)\n",
|
||||
res);
|
||||
}
|
||||
}
|
||||
if (!dev->transparent)
|
||||
return;
|
||||
|
||||
pci_bus_for_each_resource(child->parent, res) {
|
||||
if (!res || !res->flags)
|
||||
continue;
|
||||
|
||||
pci_bus_add_resource(child, res);
|
||||
pci_info(dev, " bridge window %pR (subtractive decode)\n", res);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1034,7 +1034,7 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
|
||||
if (res->flags & IORESOURCE_BUS)
|
||||
pci_bus_insert_busn_res(bus, bus->number, res->end);
|
||||
else
|
||||
pci_bus_add_resource(bus, res, 0);
|
||||
pci_bus_add_resource(bus, res);
|
||||
|
||||
if (offset) {
|
||||
if (resource_type(res) == IORESOURCE_IO)
|
||||
|
||||
@@ -636,27 +636,6 @@ void pci_set_host_bridge_release(struct pci_host_bridge *bridge,
|
||||
|
||||
int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge);
|
||||
|
||||
/*
|
||||
* The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond
|
||||
* to P2P or CardBus bridge windows) go in a table. Additional ones (for
|
||||
* buses below host bridges or subtractive decode bridges) go in the list.
|
||||
* Use pci_bus_for_each_resource() to iterate through all the resources.
|
||||
*/
|
||||
|
||||
/*
|
||||
* PCI_SUBTRACTIVE_DECODE means the bridge forwards the window implicitly
|
||||
* and there's no way to program the bridge with the details of the window.
|
||||
* This does not apply to ACPI _CRS windows, even with the _DEC subtractive-
|
||||
* decode bit set, because they are explicit and can be programmed with _SRS.
|
||||
*/
|
||||
#define PCI_SUBTRACTIVE_DECODE 0x1
|
||||
|
||||
struct pci_bus_resource {
|
||||
struct list_head list;
|
||||
struct resource *res;
|
||||
unsigned int flags;
|
||||
};
|
||||
|
||||
#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */
|
||||
|
||||
struct pci_bus {
|
||||
@@ -1509,8 +1488,7 @@ void pci_add_resource(struct list_head *resources, struct resource *res);
|
||||
void pci_add_resource_offset(struct list_head *resources, struct resource *res,
|
||||
resource_size_t offset);
|
||||
void pci_free_resource_list(struct list_head *resources);
|
||||
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res,
|
||||
unsigned int flags);
|
||||
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res);
|
||||
struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
|
||||
void pci_bus_remove_resources(struct pci_bus *bus);
|
||||
void pci_bus_remove_resource(struct pci_bus *bus, struct resource *res);
|
||||
|
||||
Reference in New Issue
Block a user