diff options
Diffstat (limited to 'drivers/pci/dwc/pcie-designware.h')
-rw-r--r-- | drivers/pci/dwc/pcie-designware.h | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/drivers/pci/dwc/pcie-designware.h b/drivers/pci/dwc/pcie-designware.h index e5d9d77b778e..11b13864a406 100644 --- a/drivers/pci/dwc/pcie-designware.h +++ b/drivers/pci/dwc/pcie-designware.h | |||
@@ -1,3 +1,4 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
1 | /* | 2 | /* |
2 | * Synopsys DesignWare PCIe host controller driver | 3 | * Synopsys DesignWare PCIe host controller driver |
3 | * | 4 | * |
@@ -5,15 +6,12 @@ | |||
5 | * http://www.samsung.com | 6 | * http://www.samsung.com |
6 | * | 7 | * |
7 | * Author: Jingoo Han <jg1.han@samsung.com> | 8 | * Author: Jingoo Han <jg1.han@samsung.com> |
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | 9 | */ |
13 | 10 | ||
14 | #ifndef _PCIE_DESIGNWARE_H | 11 | #ifndef _PCIE_DESIGNWARE_H |
15 | #define _PCIE_DESIGNWARE_H | 12 | #define _PCIE_DESIGNWARE_H |
16 | 13 | ||
14 | #include <linux/dma-mapping.h> | ||
17 | #include <linux/irq.h> | 15 | #include <linux/irq.h> |
18 | #include <linux/msi.h> | 16 | #include <linux/msi.h> |
19 | #include <linux/pci.h> | 17 | #include <linux/pci.h> |
@@ -100,10 +98,14 @@ | |||
100 | 98 | ||
101 | #define MSI_MESSAGE_CONTROL 0x52 | 99 | #define MSI_MESSAGE_CONTROL 0x52 |
102 | #define MSI_CAP_MMC_SHIFT 1 | 100 | #define MSI_CAP_MMC_SHIFT 1 |
101 | #define MSI_CAP_MMC_MASK (7 << MSI_CAP_MMC_SHIFT) | ||
103 | #define MSI_CAP_MME_SHIFT 4 | 102 | #define MSI_CAP_MME_SHIFT 4 |
103 | #define MSI_CAP_MSI_EN_MASK 0x1 | ||
104 | #define MSI_CAP_MME_MASK (7 << MSI_CAP_MME_SHIFT) | 104 | #define MSI_CAP_MME_MASK (7 << MSI_CAP_MME_SHIFT) |
105 | #define MSI_MESSAGE_ADDR_L32 0x54 | 105 | #define MSI_MESSAGE_ADDR_L32 0x54 |
106 | #define MSI_MESSAGE_ADDR_U32 0x58 | 106 | #define MSI_MESSAGE_ADDR_U32 0x58 |
107 | #define MSI_MESSAGE_DATA_32 0x58 | ||
108 | #define MSI_MESSAGE_DATA_64 0x5C | ||
107 | 109 | ||
108 | /* | 110 | /* |
109 | * Maximum number of MSI IRQs can be 256 per controller. But keep | 111 | * Maximum number of MSI IRQs can be 256 per controller. But keep |
@@ -113,6 +115,10 @@ | |||
113 | #define MAX_MSI_IRQS 32 | 115 | #define MAX_MSI_IRQS 32 |
114 | #define MAX_MSI_CTRLS (MAX_MSI_IRQS / 32) | 116 | #define MAX_MSI_CTRLS (MAX_MSI_IRQS / 32) |
115 | 117 | ||
118 | /* Maximum number of inbound/outbound iATUs */ | ||
119 | #define MAX_IATU_IN 256 | ||
120 | #define MAX_IATU_OUT 256 | ||
121 | |||
116 | struct pcie_port; | 122 | struct pcie_port; |
117 | struct dw_pcie; | 123 | struct dw_pcie; |
118 | struct dw_pcie_ep; | 124 | struct dw_pcie_ep; |
@@ -168,7 +174,7 @@ struct pcie_port { | |||
168 | const struct dw_pcie_host_ops *ops; | 174 | const struct dw_pcie_host_ops *ops; |
169 | int msi_irq; | 175 | int msi_irq; |
170 | struct irq_domain *irq_domain; | 176 | struct irq_domain *irq_domain; |
171 | unsigned long msi_data; | 177 | dma_addr_t msi_data; |
172 | DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS); | 178 | DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS); |
173 | }; | 179 | }; |
174 | 180 | ||
@@ -180,8 +186,8 @@ enum dw_pcie_as_type { | |||
180 | 186 | ||
181 | struct dw_pcie_ep_ops { | 187 | struct dw_pcie_ep_ops { |
182 | void (*ep_init)(struct dw_pcie_ep *ep); | 188 | void (*ep_init)(struct dw_pcie_ep *ep); |
183 | int (*raise_irq)(struct dw_pcie_ep *ep, enum pci_epc_irq_type type, | 189 | int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no, |
184 | u8 interrupt_num); | 190 | enum pci_epc_irq_type type, u8 interrupt_num); |
185 | }; | 191 | }; |
186 | 192 | ||
187 | struct dw_pcie_ep { | 193 | struct dw_pcie_ep { |
@@ -192,14 +198,16 @@ struct dw_pcie_ep { | |||
192 | size_t page_size; | 198 | size_t page_size; |
193 | u8 bar_to_atu[6]; | 199 | u8 bar_to_atu[6]; |
194 | phys_addr_t *outbound_addr; | 200 | phys_addr_t *outbound_addr; |
195 | unsigned long ib_window_map; | 201 | unsigned long *ib_window_map; |
196 | unsigned long ob_window_map; | 202 | unsigned long *ob_window_map; |
197 | u32 num_ib_windows; | 203 | u32 num_ib_windows; |
198 | u32 num_ob_windows; | 204 | u32 num_ob_windows; |
205 | void __iomem *msi_mem; | ||
206 | phys_addr_t msi_mem_phys; | ||
199 | }; | 207 | }; |
200 | 208 | ||
201 | struct dw_pcie_ops { | 209 | struct dw_pcie_ops { |
202 | u64 (*cpu_addr_fixup)(u64 cpu_addr); | 210 | u64 (*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr); |
203 | u32 (*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg, | 211 | u32 (*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg, |
204 | size_t size); | 212 | size_t size); |
205 | void (*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg, | 213 | void (*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg, |
@@ -334,6 +342,9 @@ static inline int dw_pcie_host_init(struct pcie_port *pp) | |||
334 | void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); | 342 | void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); |
335 | int dw_pcie_ep_init(struct dw_pcie_ep *ep); | 343 | int dw_pcie_ep_init(struct dw_pcie_ep *ep); |
336 | void dw_pcie_ep_exit(struct dw_pcie_ep *ep); | 344 | void dw_pcie_ep_exit(struct dw_pcie_ep *ep); |
345 | int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, | ||
346 | u8 interrupt_num); | ||
347 | void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar); | ||
337 | #else | 348 | #else |
338 | static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) | 349 | static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) |
339 | { | 350 | { |
@@ -347,5 +358,15 @@ static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) | |||
347 | static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep) | 358 | static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep) |
348 | { | 359 | { |
349 | } | 360 | } |
361 | |||
362 | static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, | ||
363 | u8 interrupt_num) | ||
364 | { | ||
365 | return 0; | ||
366 | } | ||
367 | |||
368 | static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar) | ||
369 | { | ||
370 | } | ||
350 | #endif | 371 | #endif |
351 | #endif /* _PCIE_DESIGNWARE_H */ | 372 | #endif /* _PCIE_DESIGNWARE_H */ |