diff options
Diffstat (limited to 'drivers/pci/controller/dwc/pcie-designware.h')
| -rw-r--r-- | drivers/pci/controller/dwc/pcie-designware.h | 26 | 
1 files changed, 18 insertions, 8 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index 377f4c0b52da..b8993f2b78df 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -41,6 +41,9 @@  #define PCIE_PORT_DEBUG0		0x728  #define PORT_LOGIC_LTSSM_STATE_MASK	0x1f  #define PORT_LOGIC_LTSSM_STATE_L0	0x11 +#define PCIE_PORT_DEBUG1		0x72C +#define PCIE_PORT_DEBUG1_LINK_UP		BIT(4) +#define PCIE_PORT_DEBUG1_LINK_IN_TRAINING	BIT(29)  #define PCIE_LINK_WIDTH_SPEED_CONTROL	0x80C  #define PORT_LOGIC_SPEED_CHANGE		BIT(17) @@ -145,14 +148,9 @@ struct dw_pcie_host_ops {  	int (*wr_other_conf)(struct pcie_port *pp, struct pci_bus *bus,  			     unsigned int devfn, int where, int size, u32 val);  	int (*host_init)(struct pcie_port *pp); -	void (*msi_set_irq)(struct pcie_port *pp, int irq); -	void (*msi_clear_irq)(struct pcie_port *pp, int irq); -	phys_addr_t (*get_msi_addr)(struct pcie_port *pp); -	u32 (*get_msi_data)(struct pcie_port *pp, int pos);  	void (*scan_bus)(struct pcie_port *pp);  	void (*set_num_vectors)(struct pcie_port *pp);  	int (*msi_host_init)(struct pcie_port *pp); -	void (*msi_irq_ack)(int irq, struct pcie_port *pp);  };  struct pcie_port { @@ -179,8 +177,11 @@ struct pcie_port {  	struct irq_domain	*irq_domain;  	struct irq_domain	*msi_domain;  	dma_addr_t		msi_data; +	struct page		*msi_page; +	struct irq_chip		*msi_irq_chip;  	u32			num_vectors;  	u32			irq_mask[MAX_MSI_CTRLS]; +	struct pci_bus		*root_bus;  	raw_spinlock_t		lock;  	DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS);  }; @@ -200,7 +201,7 @@ struct dw_pcie_ep_ops {  struct dw_pcie_ep {  	struct pci_epc		*epc; -	struct dw_pcie_ep_ops	*ops; +	const struct dw_pcie_ep_ops *ops;  	phys_addr_t		phys_base;  	size_t			addr_size;  	size_t			page_size; @@ -222,6 +223,10 @@ struct dw_pcie_ops {  			    size_t size);  	void	(*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,  			     size_t size, u32 val); +	u32     (*read_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg, +			     size_t size); +	void    (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg, +			      size_t size, u32 val);  	int	(*link_up)(struct dw_pcie *pcie);  	int	(*start_link)(struct dw_pcie *pcie);  	void	(*stop_link)(struct dw_pcie *pcie); @@ -238,6 +243,7 @@ struct dw_pcie {  	struct pcie_port	pp;  	struct dw_pcie_ep	ep;  	const struct dw_pcie_ops *ops; +	unsigned int		version;  };  #define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp) @@ -252,6 +258,10 @@ u32 __dw_pcie_read_dbi(struct dw_pcie *pci, void __iomem *base, u32 reg,  		       size_t size);  void __dw_pcie_write_dbi(struct dw_pcie *pci, void __iomem *base, u32 reg,  			 size_t size, u32 val); +u32 __dw_pcie_read_dbi2(struct dw_pcie *pci, void __iomem *base, u32 reg, +			size_t size); +void __dw_pcie_write_dbi2(struct dw_pcie *pci, void __iomem *base, u32 reg, +			  size_t size, u32 val);  int dw_pcie_link_up(struct dw_pcie *pci);  int dw_pcie_wait_for_link(struct dw_pcie *pci);  void dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, @@ -295,12 +305,12 @@ static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg)  static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val)  { -	__dw_pcie_write_dbi(pci, pci->dbi_base2, reg, 0x4, val); +	__dw_pcie_write_dbi2(pci, pci->dbi_base2, reg, 0x4, val);  }  static inline u32 dw_pcie_readl_dbi2(struct dw_pcie *pci, u32 reg)  { -	return __dw_pcie_read_dbi(pci, pci->dbi_base2, reg, 0x4); +	return __dw_pcie_read_dbi2(pci, pci->dbi_base2, reg, 0x4);  }  static inline void dw_pcie_writel_atu(struct dw_pcie *pci, u32 reg, u32 val)  |