提交 fcfaab30 编写于 作者: G Gabriele Paoloni 提交者: Bjorn Helgaas

PCI: Add fwnode handler as input param of pci_register_io_range()

In preparation for having the PCI MMIO helpers use the new generic I/O
space management (logical PIO) we need to add the fwnode handler as an
extra input parameter.

Changes the signature of pci_register_io_range() and its callers as
needed.
Tested-by: Ndann frazier <dann.frazier@canonical.com>
Signed-off-by: NGabriele Paoloni <gabriele.paoloni@huawei.com>
Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: NAndy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: NRob Herring <robh@kernel.org>
上级 e2515476
...@@ -729,7 +729,8 @@ static void acpi_pci_root_validate_resources(struct device *dev, ...@@ -729,7 +729,8 @@ static void acpi_pci_root_validate_resources(struct device *dev,
} }
} }
static void acpi_pci_root_remap_iospace(struct resource_entry *entry) static void acpi_pci_root_remap_iospace(struct fwnode_handle *fwnode,
struct resource_entry *entry)
{ {
#ifdef PCI_IOBASE #ifdef PCI_IOBASE
struct resource *res = entry->res; struct resource *res = entry->res;
...@@ -738,7 +739,7 @@ static void acpi_pci_root_remap_iospace(struct resource_entry *entry) ...@@ -738,7 +739,7 @@ static void acpi_pci_root_remap_iospace(struct resource_entry *entry)
resource_size_t length = resource_size(res); resource_size_t length = resource_size(res);
unsigned long port; unsigned long port;
if (pci_register_io_range(cpu_addr, length)) if (pci_register_io_range(fwnode, cpu_addr, length))
goto err; goto err;
port = pci_address_to_pio(cpu_addr); port = pci_address_to_pio(cpu_addr);
...@@ -780,7 +781,8 @@ int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) ...@@ -780,7 +781,8 @@ int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info)
else { else {
resource_list_for_each_entry_safe(entry, tmp, list) { resource_list_for_each_entry_safe(entry, tmp, list) {
if (entry->res->flags & IORESOURCE_IO) if (entry->res->flags & IORESOURCE_IO)
acpi_pci_root_remap_iospace(entry); acpi_pci_root_remap_iospace(&device->fwnode,
entry);
if (entry->res->flags & IORESOURCE_DISABLED) if (entry->res->flags & IORESOURCE_DISABLED)
resource_list_destroy_entry(entry); resource_list_destroy_entry(entry);
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#define pr_fmt(fmt) "OF: " fmt #define pr_fmt(fmt) "OF: " fmt
#include <linux/device.h> #include <linux/device.h>
#include <linux/fwnode.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -333,7 +334,8 @@ int of_pci_range_to_resource(struct of_pci_range *range, ...@@ -333,7 +334,8 @@ int of_pci_range_to_resource(struct of_pci_range *range,
if (res->flags & IORESOURCE_IO) { if (res->flags & IORESOURCE_IO) {
unsigned long port; unsigned long port;
err = pci_register_io_range(range->cpu_addr, range->size); err = pci_register_io_range(&np->fwnode, range->cpu_addr,
range->size);
if (err) if (err)
goto invalid_range; goto invalid_range;
port = pci_address_to_pio(range->cpu_addr); port = pci_address_to_pio(range->cpu_addr);
......
...@@ -3455,7 +3455,8 @@ static DEFINE_SPINLOCK(io_range_lock); ...@@ -3455,7 +3455,8 @@ static DEFINE_SPINLOCK(io_range_lock);
* Record the PCI IO range (expressed as CPU physical address + size). * Record the PCI IO range (expressed as CPU physical address + size).
* Return a negative value if an error has occured, zero otherwise * Return a negative value if an error has occured, zero otherwise
*/ */
int pci_register_io_range(phys_addr_t addr, resource_size_t size) int pci_register_io_range(struct fwnode_handle *fwnode, phys_addr_t addr,
resource_size_t size)
{ {
int err = 0; int err = 0;
......
...@@ -1226,7 +1226,8 @@ int __must_check pci_bus_alloc_resource(struct pci_bus *bus, ...@@ -1226,7 +1226,8 @@ int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
void *alignf_data); void *alignf_data);
int pci_register_io_range(phys_addr_t addr, resource_size_t size); int pci_register_io_range(struct fwnode_handle *fwnode, phys_addr_t addr,
resource_size_t size);
unsigned long pci_address_to_pio(phys_addr_t addr); unsigned long pci_address_to_pio(phys_addr_t addr);
phys_addr_t pci_pio_to_address(unsigned long pio); phys_addr_t pci_pio_to_address(unsigned long pio);
int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr); int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册