diff options
author | Kishon Vijay Abraham I <kishon@ti.com> | 2019-01-14 06:15:00 -0500 |
---|---|---|
committer | Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> | 2019-02-14 11:09:14 -0500 |
commit | fee35cb76a54c87985410ea6aa12002e5d38b367 (patch) | |
tree | 94f84e9f216a4b5e297bd0b02bb0a054e948097d /drivers/pci/controller/dwc | |
parent | 41cb8d189c9d4964df52a6f497cab7b301ae831b (diff) |
PCI: dwc: Add ->get_features() callback function to dw_pcie_ep_ops
Each platform using Designware PCIe core can support different set of
endpoint features. Add a new callback function ->get_features() in
dw_pcie_ep_ops so that each platform using Designware PCIe core can
advertise its supported features to the endpoint function driver.
Tested-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Diffstat (limited to 'drivers/pci/controller/dwc')
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-ep.c | 12 | ||||
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware.h | 1 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c index a543c45c7224..7a2925a16ab8 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c | |||
@@ -355,6 +355,17 @@ static int dw_pcie_ep_start(struct pci_epc *epc) | |||
355 | return pci->ops->start_link(pci); | 355 | return pci->ops->start_link(pci); |
356 | } | 356 | } |
357 | 357 | ||
358 | static const struct pci_epc_features* | ||
359 | dw_pcie_ep_get_features(struct pci_epc *epc, u8 func_no) | ||
360 | { | ||
361 | struct dw_pcie_ep *ep = epc_get_drvdata(epc); | ||
362 | |||
363 | if (!ep->ops->get_features) | ||
364 | return NULL; | ||
365 | |||
366 | return ep->ops->get_features(ep); | ||
367 | } | ||
368 | |||
358 | static const struct pci_epc_ops epc_ops = { | 369 | static const struct pci_epc_ops epc_ops = { |
359 | .write_header = dw_pcie_ep_write_header, | 370 | .write_header = dw_pcie_ep_write_header, |
360 | .set_bar = dw_pcie_ep_set_bar, | 371 | .set_bar = dw_pcie_ep_set_bar, |
@@ -368,6 +379,7 @@ static const struct pci_epc_ops epc_ops = { | |||
368 | .raise_irq = dw_pcie_ep_raise_irq, | 379 | .raise_irq = dw_pcie_ep_raise_irq, |
369 | .start = dw_pcie_ep_start, | 380 | .start = dw_pcie_ep_start, |
370 | .stop = dw_pcie_ep_stop, | 381 | .stop = dw_pcie_ep_stop, |
382 | .get_features = dw_pcie_ep_get_features, | ||
371 | }; | 383 | }; |
372 | 384 | ||
373 | int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no) | 385 | int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no) |
diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index 9943d8c68335..1f56e6ae34ff 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h | |||
@@ -192,6 +192,7 @@ struct dw_pcie_ep_ops { | |||
192 | void (*ep_init)(struct dw_pcie_ep *ep); | 192 | void (*ep_init)(struct dw_pcie_ep *ep); |
193 | int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no, | 193 | int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no, |
194 | enum pci_epc_irq_type type, u16 interrupt_num); | 194 | enum pci_epc_irq_type type, u16 interrupt_num); |
195 | const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep); | ||
195 | }; | 196 | }; |
196 | 197 | ||
197 | struct dw_pcie_ep { | 198 | struct dw_pcie_ep { |