aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/dwc/pcie-designware.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/dwc/pcie-designware.h')
-rw-r--r--drivers/pci/dwc/pcie-designware.h41
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
116struct pcie_port; 122struct pcie_port;
117struct dw_pcie; 123struct dw_pcie;
118struct dw_pcie_ep; 124struct 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
181struct dw_pcie_ep_ops { 187struct 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
187struct dw_pcie_ep { 193struct 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
201struct dw_pcie_ops { 209struct 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)
334void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); 342void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
335int dw_pcie_ep_init(struct dw_pcie_ep *ep); 343int dw_pcie_ep_init(struct dw_pcie_ep *ep);
336void dw_pcie_ep_exit(struct dw_pcie_ep *ep); 344void dw_pcie_ep_exit(struct dw_pcie_ep *ep);
345int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
346 u8 interrupt_num);
347void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar);
337#else 348#else
338static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) 349static 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)
347static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep) 358static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep)
348{ 359{
349} 360}
361
362static 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
368static 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 */