diff options
Diffstat (limited to 'drivers/pci/controller/dwc/pcie-designware.h')
| -rw-r--r-- | drivers/pci/controller/dwc/pcie-designware.h | 63 | 
1 files changed, 60 insertions, 3 deletions
| diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index a871ae7eb59e..393dfb931df6 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -12,10 +12,14 @@  #define _PCIE_DESIGNWARE_H  #include <linux/bitfield.h> +#include <linux/bitops.h> +#include <linux/clk.h>  #include <linux/dma-mapping.h> +#include <linux/gpio/consumer.h>  #include <linux/irq.h>  #include <linux/msi.h>  #include <linux/pci.h> +#include <linux/reset.h>  #include <linux/pci-epc.h>  #include <linux/pci-epf.h> @@ -43,6 +47,17 @@  	(__dw_pcie_ver_cmp(_pci, _ver, ==) && \  	 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, >=)) +/* DWC PCIe controller capabilities */ +#define DW_PCIE_CAP_REQ_RES		0 +#define DW_PCIE_CAP_IATU_UNROLL		1 +#define DW_PCIE_CAP_CDM_CHECK		2 + +#define dw_pcie_cap_is(_pci, _cap) \ +	test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps) + +#define dw_pcie_cap_set(_pci, _cap) \ +	set_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps) +  /* Parameters for the waiting for link up routine */  #define LINK_WAIT_MAX_RETRIES		10  #define LINK_WAIT_USLEEP_MIN		90000 @@ -222,6 +237,39 @@ enum dw_pcie_device_mode {  	DW_PCIE_RC_TYPE,  }; +enum dw_pcie_app_clk { +	DW_PCIE_DBI_CLK, +	DW_PCIE_MSTR_CLK, +	DW_PCIE_SLV_CLK, +	DW_PCIE_NUM_APP_CLKS +}; + +enum dw_pcie_core_clk { +	DW_PCIE_PIPE_CLK, +	DW_PCIE_CORE_CLK, +	DW_PCIE_AUX_CLK, +	DW_PCIE_REF_CLK, +	DW_PCIE_NUM_CORE_CLKS +}; + +enum dw_pcie_app_rst { +	DW_PCIE_DBI_RST, +	DW_PCIE_MSTR_RST, +	DW_PCIE_SLV_RST, +	DW_PCIE_NUM_APP_RSTS +}; + +enum dw_pcie_core_rst { +	DW_PCIE_NON_STICKY_RST, +	DW_PCIE_STICKY_RST, +	DW_PCIE_CORE_RST, +	DW_PCIE_PIPE_RST, +	DW_PCIE_PHY_RST, +	DW_PCIE_HOT_RST, +	DW_PCIE_PWR_RST, +	DW_PCIE_NUM_CORE_RSTS +}; +  struct dw_pcie_host_ops {  	int (*host_init)(struct dw_pcie_rp *pp);  	void (*host_deinit)(struct dw_pcie_rp *pp); @@ -317,10 +365,15 @@ struct dw_pcie {  	const struct dw_pcie_ops *ops;  	u32			version;  	u32			type; +	unsigned long		caps;  	int			num_lanes;  	int			link_gen;  	u8			n_fts[2]; -	bool			iatu_unroll_enabled: 1; +	struct clk_bulk_data	app_clks[DW_PCIE_NUM_APP_CLKS]; +	struct clk_bulk_data	core_clks[DW_PCIE_NUM_CORE_CLKS]; +	struct reset_control_bulk_data	app_rsts[DW_PCIE_NUM_APP_RSTS]; +	struct reset_control_bulk_data	core_rsts[DW_PCIE_NUM_CORE_RSTS]; +	struct gpio_desc		*pe_rst;  };  #define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp) @@ -328,6 +381,8 @@ struct dw_pcie {  #define to_dw_pcie_from_ep(endpoint)   \  		container_of((endpoint), struct dw_pcie, ep) +int dw_pcie_get_resources(struct dw_pcie *pci); +  void dw_pcie_version_detect(struct dw_pcie *pci);  u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap); @@ -346,8 +401,10 @@ int dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type,  			      u64 cpu_addr, u64 pci_addr, u64 size);  int dw_pcie_prog_ep_outbound_atu(struct dw_pcie *pci, u8 func_no, int index,  				 int type, u64 cpu_addr, u64 pci_addr, u64 size); -int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, u8 func_no, int index, -			     int type, u64 cpu_addr, u8 bar); +int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type, +			     u64 cpu_addr, u64 pci_addr, u64 size); +int dw_pcie_prog_ep_inbound_atu(struct dw_pcie *pci, u8 func_no, int index, +				int type, u64 cpu_addr, u8 bar);  void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index);  void dw_pcie_setup(struct dw_pcie *pci);  void dw_pcie_iatu_detect(struct dw_pcie *pci); |