summaryrefslogtreecommitdiff
path: root/drivers/pci/host/pcie-iproc.h
diff options
context:
space:
mode:
authorRay Jui <rjui@broadcom.com>2015-10-16 08:18:24 -0500
committerBjorn Helgaas <bhelgaas@google.com>2015-10-16 08:18:24 -0500
commite99a187b5c5f60fe55ca586f82ac1a3557fb166a (patch)
tree2da61f1c9e854b6f1eebadb3a74dc1a1429ce333 /drivers/pci/host/pcie-iproc.h
parent8d0afa1a93be2da954c85392bbc7b2264c9d241c (diff)
PCI: iproc: Add outbound mapping support
Certain SoCs require the PCIe outbound mapping to be configured in software. Add support for those chips. [jonmason: Use %pap format when printing size_t to avoid warnings in 32-bit build.] [arnd: Use div64_u64() instead of "%" to avoid __aeabi_uldivmod link error in 32-bit build.] Signed-off-by: Ray Jui <rjui@broadcom.com> Signed-off-by: Jon Mason <jonmason@broadcom.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/host/pcie-iproc.h')
-rw-r--r--drivers/pci/host/pcie-iproc.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/pci/host/pcie-iproc.h b/drivers/pci/host/pcie-iproc.h
index ecaad574135a..d3dc940f773a 100644
--- a/drivers/pci/host/pcie-iproc.h
+++ b/drivers/pci/host/pcie-iproc.h
@@ -15,6 +15,19 @@
#define _PCIE_IPROC_H
/**
+ * iProc PCIe outbound mapping
+ * @set_oarr_size: indicates the OARR size bit needs to be set
+ * @axi_offset: offset from the AXI address to the internal address used by
+ * the iProc PCIe core
+ * @window_size: outbound window size
+ */
+struct iproc_pcie_ob {
+ bool set_oarr_size;
+ resource_size_t axi_offset;
+ resource_size_t window_size;
+};
+
+/**
* iProc PCIe device
* @dev: pointer to device data structure
* @base: PCIe host controller I/O register base
@@ -23,6 +36,8 @@
* @phy: optional PHY device that controls the Serdes
* @irqs: interrupt IDs
* @map_irq: function callback to map interrupts
+ * @need_ob_cfg: indidates SW needs to configure the outbound mapping window
+ * @ob: outbound mapping parameters
*/
struct iproc_pcie {
struct device *dev;
@@ -33,6 +48,8 @@ struct iproc_pcie {
struct pci_bus *root_bus;
struct phy *phy;
int (*map_irq)(const struct pci_dev *, u8, u8);
+ bool need_ob_cfg;
+ struct iproc_pcie_ob ob;
};
int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res);