diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2015-02-10 10:05:16 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2015-02-10 10:05:16 -0500 |
commit | 8fbcf5ecb336eb6da560f08d60e95b51d318795c (patch) | |
tree | 77a1b947838d60edd0e81d37327985de2e842b68 /drivers/pci | |
parent | d23209680291dad6c79f1a6f187697c3884d554d (diff) | |
parent | 5c493df25a0d9e0c3bda742250ecfc5953bf4ccd (diff) |
Merge branch 'acpi-resources'
* acpi-resources: (23 commits)
Merge branch 'pci/host-generic' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci into acpi-resources
x86/irq, ACPI: Implement ACPI driver to support IOAPIC hotplug
ACPI: Add interfaces to parse IOAPIC ID for IOAPIC hotplug
x86/PCI: Refine the way to release PCI IRQ resources
x86/PCI/ACPI: Use common ACPI resource interfaces to simplify implementation
x86/PCI: Fix the range check for IO resources
PCI: Use common resource list management code instead of private implementation
resources: Move struct resource_list_entry from ACPI into resource core
ACPI: Introduce helper function acpi_dev_filter_resource_type()
ACPI: Add field offset to struct resource_list_entry
ACPI: Translate resource into master side address for bridge window resources
ACPI: Return translation offset when parsing ACPI address space resources
ACPI: Enforce stricter checks for address space descriptors
ACPI: Set flag IORESOURCE_UNSET for unassigned resources
ACPI: Normalize return value of resource parser functions
ACPI: Fix a bug in parsing ACPI Memory24 resource
ACPI: Add prefetch decoding to the address space parser
ACPI: Move the window flag logic to the combined parser
ACPI: Unify the parsing of address_space and ext_address_space
ACPI: Let the parser return false for disabled resources
...
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/bus.c | 18 | ||||
-rw-r--r-- | drivers/pci/host-bridge.c | 8 | ||||
-rw-r--r-- | drivers/pci/host/pci-host-generic.c | 4 | ||||
-rw-r--r-- | drivers/pci/host/pci-xgene.c | 4 | ||||
-rw-r--r-- | drivers/pci/host/pcie-xilinx.c | 4 | ||||
-rw-r--r-- | drivers/pci/probe.c | 10 |
6 files changed, 21 insertions, 27 deletions
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 8fb16188cd82..90fa3a78fb7c 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c | |||
@@ -20,17 +20,16 @@ | |||
20 | void pci_add_resource_offset(struct list_head *resources, struct resource *res, | 20 | void pci_add_resource_offset(struct list_head *resources, struct resource *res, |
21 | resource_size_t offset) | 21 | resource_size_t offset) |
22 | { | 22 | { |
23 | struct pci_host_bridge_window *window; | 23 | struct resource_entry *entry; |
24 | 24 | ||
25 | window = kzalloc(sizeof(struct pci_host_bridge_window), GFP_KERNEL); | 25 | entry = resource_list_create_entry(res, 0); |
26 | if (!window) { | 26 | if (!entry) { |
27 | printk(KERN_ERR "PCI: can't add host bridge window %pR\n", res); | 27 | printk(KERN_ERR "PCI: can't add host bridge window %pR\n", res); |
28 | return; | 28 | return; |
29 | } | 29 | } |
30 | 30 | ||
31 | window->res = res; | 31 | entry->offset = offset; |
32 | window->offset = offset; | 32 | resource_list_add_tail(entry, resources); |
33 | list_add_tail(&window->list, resources); | ||
34 | } | 33 | } |
35 | EXPORT_SYMBOL(pci_add_resource_offset); | 34 | EXPORT_SYMBOL(pci_add_resource_offset); |
36 | 35 | ||
@@ -42,12 +41,7 @@ EXPORT_SYMBOL(pci_add_resource); | |||
42 | 41 | ||
43 | void pci_free_resource_list(struct list_head *resources) | 42 | void pci_free_resource_list(struct list_head *resources) |
44 | { | 43 | { |
45 | struct pci_host_bridge_window *window, *tmp; | 44 | resource_list_free(resources); |
46 | |||
47 | list_for_each_entry_safe(window, tmp, resources, list) { | ||
48 | list_del(&window->list); | ||
49 | kfree(window); | ||
50 | } | ||
51 | } | 45 | } |
52 | EXPORT_SYMBOL(pci_free_resource_list); | 46 | EXPORT_SYMBOL(pci_free_resource_list); |
53 | 47 | ||
diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c index 0e5f3c95af5b..39b2dbe585aa 100644 --- a/drivers/pci/host-bridge.c +++ b/drivers/pci/host-bridge.c | |||
@@ -35,10 +35,10 @@ void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region, | |||
35 | struct resource *res) | 35 | struct resource *res) |
36 | { | 36 | { |
37 | struct pci_host_bridge *bridge = find_pci_host_bridge(bus); | 37 | struct pci_host_bridge *bridge = find_pci_host_bridge(bus); |
38 | struct pci_host_bridge_window *window; | 38 | struct resource_entry *window; |
39 | resource_size_t offset = 0; | 39 | resource_size_t offset = 0; |
40 | 40 | ||
41 | list_for_each_entry(window, &bridge->windows, list) { | 41 | resource_list_for_each_entry(window, &bridge->windows) { |
42 | if (resource_contains(window->res, res)) { | 42 | if (resource_contains(window->res, res)) { |
43 | offset = window->offset; | 43 | offset = window->offset; |
44 | break; | 44 | break; |
@@ -60,10 +60,10 @@ void pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res, | |||
60 | struct pci_bus_region *region) | 60 | struct pci_bus_region *region) |
61 | { | 61 | { |
62 | struct pci_host_bridge *bridge = find_pci_host_bridge(bus); | 62 | struct pci_host_bridge *bridge = find_pci_host_bridge(bus); |
63 | struct pci_host_bridge_window *window; | 63 | struct resource_entry *window; |
64 | resource_size_t offset = 0; | 64 | resource_size_t offset = 0; |
65 | 65 | ||
66 | list_for_each_entry(window, &bridge->windows, list) { | 66 | resource_list_for_each_entry(window, &bridge->windows) { |
67 | struct pci_bus_region bus_region; | 67 | struct pci_bus_region bus_region; |
68 | 68 | ||
69 | if (resource_type(res) != resource_type(window->res)) | 69 | if (resource_type(res) != resource_type(window->res)) |
diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c index 6eb1aa75bd37..aee3c620ecf9 100644 --- a/drivers/pci/host/pci-host-generic.c +++ b/drivers/pci/host/pci-host-generic.c | |||
@@ -149,14 +149,14 @@ static int gen_pci_parse_request_of_pci_ranges(struct gen_pci *pci) | |||
149 | struct device *dev = pci->host.dev.parent; | 149 | struct device *dev = pci->host.dev.parent; |
150 | struct device_node *np = dev->of_node; | 150 | struct device_node *np = dev->of_node; |
151 | resource_size_t iobase; | 151 | resource_size_t iobase; |
152 | struct pci_host_bridge_window *win; | 152 | struct resource_entry *win; |
153 | 153 | ||
154 | err = of_pci_get_host_bridge_resources(np, 0, 0xff, &pci->resources, | 154 | err = of_pci_get_host_bridge_resources(np, 0, 0xff, &pci->resources, |
155 | &iobase); | 155 | &iobase); |
156 | if (err) | 156 | if (err) |
157 | return err; | 157 | return err; |
158 | 158 | ||
159 | list_for_each_entry(win, &pci->resources, list) { | 159 | resource_list_for_each_entry(win, &pci->resources) { |
160 | struct resource *parent, *res = win->res; | 160 | struct resource *parent, *res = win->res; |
161 | 161 | ||
162 | switch (resource_type(res)) { | 162 | switch (resource_type(res)) { |
diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c index b1d0596457c5..a704257bab7f 100644 --- a/drivers/pci/host/pci-xgene.c +++ b/drivers/pci/host/pci-xgene.c | |||
@@ -401,11 +401,11 @@ static int xgene_pcie_map_ranges(struct xgene_pcie_port *port, | |||
401 | struct list_head *res, | 401 | struct list_head *res, |
402 | resource_size_t io_base) | 402 | resource_size_t io_base) |
403 | { | 403 | { |
404 | struct pci_host_bridge_window *window; | 404 | struct resource_entry *window; |
405 | struct device *dev = port->dev; | 405 | struct device *dev = port->dev; |
406 | int ret; | 406 | int ret; |
407 | 407 | ||
408 | list_for_each_entry(window, res, list) { | 408 | resource_list_for_each_entry(window, res) { |
409 | struct resource *res = window->res; | 409 | struct resource *res = window->res; |
410 | u64 restype = resource_type(res); | 410 | u64 restype = resource_type(res); |
411 | 411 | ||
diff --git a/drivers/pci/host/pcie-xilinx.c b/drivers/pci/host/pcie-xilinx.c index ef3ebaf9a738..601261df7663 100644 --- a/drivers/pci/host/pcie-xilinx.c +++ b/drivers/pci/host/pcie-xilinx.c | |||
@@ -737,7 +737,7 @@ static int xilinx_pcie_parse_and_add_res(struct xilinx_pcie_port *port) | |||
737 | resource_size_t offset; | 737 | resource_size_t offset; |
738 | struct of_pci_range_parser parser; | 738 | struct of_pci_range_parser parser; |
739 | struct of_pci_range range; | 739 | struct of_pci_range range; |
740 | struct pci_host_bridge_window *win; | 740 | struct resource_entry *win; |
741 | int err = 0, mem_resno = 0; | 741 | int err = 0, mem_resno = 0; |
742 | 742 | ||
743 | /* Get the ranges */ | 743 | /* Get the ranges */ |
@@ -807,7 +807,7 @@ static int xilinx_pcie_parse_and_add_res(struct xilinx_pcie_port *port) | |||
807 | 807 | ||
808 | free_resources: | 808 | free_resources: |
809 | release_child_resources(&iomem_resource); | 809 | release_child_resources(&iomem_resource); |
810 | list_for_each_entry(win, &port->resources, list) | 810 | resource_list_for_each_entry(win, &port->resources) |
811 | devm_kfree(dev, win->res); | 811 | devm_kfree(dev, win->res); |
812 | pci_free_resource_list(&port->resources); | 812 | pci_free_resource_list(&port->resources); |
813 | 813 | ||
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 23212f8ae09b..8d2f400e96cb 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -1895,7 +1895,7 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus, | |||
1895 | int error; | 1895 | int error; |
1896 | struct pci_host_bridge *bridge; | 1896 | struct pci_host_bridge *bridge; |
1897 | struct pci_bus *b, *b2; | 1897 | struct pci_bus *b, *b2; |
1898 | struct pci_host_bridge_window *window, *n; | 1898 | struct resource_entry *window, *n; |
1899 | struct resource *res; | 1899 | struct resource *res; |
1900 | resource_size_t offset; | 1900 | resource_size_t offset; |
1901 | char bus_addr[64]; | 1901 | char bus_addr[64]; |
@@ -1959,8 +1959,8 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus, | |||
1959 | printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev)); | 1959 | printk(KERN_INFO "PCI host bridge to bus %s\n", dev_name(&b->dev)); |
1960 | 1960 | ||
1961 | /* Add initial resources to the bus */ | 1961 | /* Add initial resources to the bus */ |
1962 | list_for_each_entry_safe(window, n, resources, list) { | 1962 | resource_list_for_each_entry_safe(window, n, resources) { |
1963 | list_move_tail(&window->list, &bridge->windows); | 1963 | list_move_tail(&window->node, &bridge->windows); |
1964 | res = window->res; | 1964 | res = window->res; |
1965 | offset = window->offset; | 1965 | offset = window->offset; |
1966 | if (res->flags & IORESOURCE_BUS) | 1966 | if (res->flags & IORESOURCE_BUS) |
@@ -2060,12 +2060,12 @@ void pci_bus_release_busn_res(struct pci_bus *b) | |||
2060 | struct pci_bus *pci_scan_root_bus(struct device *parent, int bus, | 2060 | struct pci_bus *pci_scan_root_bus(struct device *parent, int bus, |
2061 | struct pci_ops *ops, void *sysdata, struct list_head *resources) | 2061 | struct pci_ops *ops, void *sysdata, struct list_head *resources) |
2062 | { | 2062 | { |
2063 | struct pci_host_bridge_window *window; | 2063 | struct resource_entry *window; |
2064 | bool found = false; | 2064 | bool found = false; |
2065 | struct pci_bus *b; | 2065 | struct pci_bus *b; |
2066 | int max; | 2066 | int max; |
2067 | 2067 | ||
2068 | list_for_each_entry(window, resources, list) | 2068 | resource_list_for_each_entry(window, resources) |
2069 | if (window->res->flags & IORESOURCE_BUS) { | 2069 | if (window->res->flags & IORESOURCE_BUS) { |
2070 | found = true; | 2070 | found = true; |
2071 | break; | 2071 | break; |