aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJayachandran C <jchandra@broadcom.com>2016-05-30 17:14:15 +0200
committerGraeme Gregory <graeme.gregory@linaro.org>2016-06-07 14:09:23 +0100
commit8fa48f17825f0831a3bb9bf4753b59494b7a02b6 (patch)
tree32ebeeacd6ee01e011293d1d438f1f6e4ed3cd2a
parent679618cd8e882ab1d4bb94b93de66aad6b9dc227 (diff)
downloadleg-kernel-8fa48f17825f0831a3bb9bf4753b59494b7a02b6.tar.gz
PCI: ecam: Add parent device field to pci_config_window
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. Specifically in case of ACPI for 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 he init function as a separate argument. Signed-off-by: Jayachandran C <jchandra@broadcom.com>
-rw-r--r--drivers/pci/ecam.c3
-rw-r--r--drivers/pci/host/pci-thunder-pem.c3
-rw-r--r--include/linux/pci-ecam.h4
3 files changed, 6 insertions, 4 deletions
diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c
index 820e26b473f4..66e0d718472f 100644
--- a/drivers/pci/ecam.c
+++ b/drivers/pci/ecam.c
@@ -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;
}
diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c
index 5020d3d61ba7..91f6fc68d374 100644
--- a/drivers/pci/host/pci-thunder-pem.c
+++ b/drivers/pci/host/pci-thunder-pem.c
@@ -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;
diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
index 9878bebd45bb..7adad206b1f4 100644
--- a/include/linux/pci-ecam.h
+++ b/include/linux/pci-ecam.h
@@ -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 */