PCI: Add parent device field to ECAM struct pci_config_window
authorJayachandran C <jchandra@broadcom.com>
Fri, 10 Jun 2016 19:55:10 +0000 (21:55 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 10 Jun 2016 20:41:08 +0000 (15:41 -0500)
Add a parent device field to struct pci_config_window.  The parent is not
saved now, but will be useful to save it in some cases.  For ACPI on ARM64,
it can be used to setup ACPI companion and domain.

Since the parent dev is in struct pci_config_window now, we need not pass
it to the init function as a separate argument.

Signed-off-by: Jayachandran C <jchandra@broadcom.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
drivers/pci/ecam.c
drivers/pci/host/pci-thunder-pem.c
include/linux/pci-ecam.h

index 820e26b473f4aa220b5e52b7f0f10ee0afbe7f8d..66e0d718472f2de7ec8408b567908d13b824c93f 100644 (file)
@@ -51,6 +51,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev,
        if (!cfg)
                return ERR_PTR(-ENOMEM);
 
+       cfg->parent = dev;
        cfg->ops = ops;
        cfg->busr.start = busr->start;
        cfg->busr.end = busr->end;
@@ -94,7 +95,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev,
        }
 
        if (ops->init) {
-               err = ops->init(dev, cfg);
+               err = ops->init(cfg);
                if (err)
                        goto err_exit;
        }
index 5020d3d61ba769a048692a31f44b3c74ba07d5ac..91f6fc68d374ccffcf5b25cf9b9995e0b8c7230c 100644 (file)
@@ -284,8 +284,9 @@ static int thunder_pem_config_write(struct pci_bus *bus, unsigned int devfn,
        return pci_generic_config_write(bus, devfn, where, size, val);
 }
 
-static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg)
+static int thunder_pem_init(struct pci_config_window *cfg)
 {
+       struct device *dev = cfg->parent;
        resource_size_t bar4_start;
        struct resource *res_pem;
        struct thunder_pem_pci *pem_pci;
index 9878bebd45bb3d2522c16bfeb3213b85193c80c0..7adad206b1f46dc97d51c346bd95a0f301f9da4d 100644 (file)
@@ -27,8 +27,7 @@ struct pci_config_window;
 struct pci_ecam_ops {
        unsigned int                    bus_shift;
        struct pci_ops                  pci_ops;
-       int                             (*init)(struct device *,
-                                               struct pci_config_window *);
+       int                             (*init)(struct pci_config_window *);
 };
 
 /*
@@ -45,6 +44,7 @@ struct pci_config_window {
                void __iomem            *win;   /* 64-bit single mapping */
                void __iomem            **winp; /* 32-bit per-bus mapping */
        };
+       struct device                   *parent;/* ECAM res was from this dev */
 };
 
 /* create and free pci_config_window */