]> rtime.felk.cvut.cz Git - zynq/linux.git/commitdiff
PCI: xilinx: Removing xilinx_pcie_parse_and_add_res funtion
authorBharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Thu, 19 Nov 2015 12:29:19 +0000 (17:59 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Thu, 19 Nov 2015 14:14:23 +0000 (15:14 +0100)
Removing xilinx_pcie_parse_and_add_res function replacing with
of_pci_get_host_bridge_resources API.

Signed-off-by: Bharat Kumar Gogada <bharatku@xilinx.com>
Signed-off-by: Ravi Kiran Gummaluri <rgummal@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/pci/host/pcie-xilinx.c

index f1a06a091ccb578359656b1d9c4b32c0e99b2d99..1710bf0fa938cc4d5811e5cae2b0ddf50e678139 100644 (file)
@@ -94,8 +94,6 @@
 /* Number of MSI IRQs */
 #define XILINX_NUM_MSI_IRQS            128
 
-/* Number of Memory Resources */
-#define XILINX_MAX_NUM_RESOURCES       3
 
 /**
  * struct xilinx_pcie_port - PCIe port information
  * @root_busno: Root Bus number
  * @dev: Device pointer
  * @irq_domain: IRQ domain pointer
- * @bus_range: Bus range
  * @resources: Bus Resources
  */
 struct xilinx_pcie_port {
@@ -115,7 +112,6 @@ struct xilinx_pcie_port {
        u8 root_busno;
        struct device *dev;
        struct irq_domain *irq_domain;
-       struct resource bus_range;
        struct list_head resources;
 };
 
@@ -653,98 +649,6 @@ static struct pci_bus *xilinx_pcie_scan_bus(int nr, struct pci_sys_data *sys)
        return bus;
 }
 
-/**
- * xilinx_pcie_parse_and_add_res - Add resources by parsing ranges
- * @port: PCIe port information
- *
- * Return: '0' on success and error value on failure
- */
-static int xilinx_pcie_parse_and_add_res(struct xilinx_pcie_port *port)
-{
-       struct device *dev = port->dev;
-       struct device_node *node = dev->of_node;
-       struct resource *mem;
-       resource_size_t offset;
-       struct of_pci_range_parser parser;
-       struct of_pci_range range;
-       struct resource_entry *win;
-       int err = 0, mem_resno = 0;
-
-       /* Get the ranges */
-       if (of_pci_range_parser_init(&parser, node)) {
-               dev_err(dev, "missing \"ranges\" property\n");
-               return -EINVAL;
-       }
-
-       /* Parse the ranges and add the resources found to the list */
-       for_each_of_pci_range(&parser, &range) {
-
-               if (mem_resno >= XILINX_MAX_NUM_RESOURCES) {
-                       dev_err(dev, "Maximum memory resources exceeded\n");
-                       return -EINVAL;
-               }
-
-               mem = devm_kmalloc(dev, sizeof(*mem), GFP_KERNEL);
-               if (!mem) {
-                       err = -ENOMEM;
-                       goto free_resources;
-               }
-
-               of_pci_range_to_resource(&range, node, mem);
-
-               switch (mem->flags & IORESOURCE_TYPE_BITS) {
-               case IORESOURCE_MEM:
-                       offset = range.cpu_addr - range.pci_addr;
-                       mem_resno++;
-                       break;
-               default:
-                       err = -EINVAL;
-                       break;
-               }
-
-               if (err < 0) {
-                       dev_warn(dev, "Invalid resource found %pR\n", mem);
-                       continue;
-               }
-
-               err = request_resource(&iomem_resource, mem);
-               if (err)
-                       goto free_resources;
-
-               pci_add_resource_offset(&port->resources, mem, offset);
-       }
-
-       /* Get the bus range */
-       if (of_pci_parse_bus_range(node, &port->bus_range)) {
-               u32 val = pcie_read(port, XILINX_PCIE_REG_BIR);
-               u8 last;
-
-               last = (val & XILINX_PCIE_BIR_ECAM_SZ_MASK) >>
-                       XILINX_PCIE_BIR_ECAM_SZ_SHIFT;
-
-               port->bus_range = (struct resource) {
-                       .name   = node->name,
-                       .start  = 0,
-                       .end    = last,
-                       .flags  = IORESOURCE_BUS,
-               };
-       }
-
-       /* Register bus resource */
-       pci_add_resource(&port->resources, &port->bus_range);
-
-       return 0;
-
-free_resources:
-       release_child_resources(&iomem_resource);
-       resource_list_for_each_entry(win, &port->resources)
-               devm_kfree(dev, win->res);
-       pci_free_resource_list(&port->resources);
-
-       return err;
-}
-
-/**
  * xilinx_pcie_parse_dt - Parse Device tree
  * @port: PCIe port information
  *
@@ -797,6 +701,8 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
        struct hw_pci hw;
        struct device *dev = &pdev->dev;
        int err;
+       resource_size_t iobase = 0;
+       LIST_HEAD(res);
 
        if (!dev->of_node)
                return -ENODEV;
@@ -821,14 +727,10 @@ static int xilinx_pcie_probe(struct platform_device *pdev)
                return err;
        }
 
-       /*
-        * Parse PCI ranges, configuration bus range and
-        * request their resources
-        */
-       INIT_LIST_HEAD(&port->resources);
-       err = xilinx_pcie_parse_and_add_res(port);
+       err = of_pci_get_host_bridge_resources(dev->of_node, 0, 0xff, &res,
+                                              &iobase);
        if (err) {
-               dev_err(dev, "Failed adding resources\n");
+               dev_err(dev, "Getting bridge resources failed\n");
                return err;
        }