1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Synopsys DesignWare PCIe host controller driver
4 *
5 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
6 * https://www.samsung.com
7 *
8 * Author: Jingoo Han <jg1.han@samsung.com>
9 */
10
11#ifndef _PCIE_DESIGNWARE_H
12#define _PCIE_DESIGNWARE_H
13
14#include <linux/bitfield.h>
15#include <linux/bitops.h>
16#include <linux/clk.h>
17#include <linux/dma-mapping.h>
18#include <linux/dma/edma.h>
19#include <linux/gpio/consumer.h>
20#include <linux/irq.h>
21#include <linux/msi.h>
22#include <linux/pci.h>
23#include <linux/pci-ecam.h>
24#include <linux/reset.h>
25
26#include <linux/pci-epc.h>
27#include <linux/pci-epf.h>
28
29#include "../../pci.h"
30
31/* DWC PCIe IP-core versions (native support since v4.70a) */
32#define DW_PCIE_VER_365A 0x3336352a
33#define DW_PCIE_VER_460A 0x3436302a
34#define DW_PCIE_VER_470A 0x3437302a
35#define DW_PCIE_VER_480A 0x3438302a
36#define DW_PCIE_VER_490A 0x3439302a
37#define DW_PCIE_VER_520A 0x3532302a
38#define DW_PCIE_VER_540A 0x3534302a
39
40#define __dw_pcie_ver_cmp(_pci, _ver, _op) \
41 ((_pci)->version _op DW_PCIE_VER_ ## _ver)
42
43#define dw_pcie_ver_is(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, ==)
44
45#define dw_pcie_ver_is_ge(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, >=)
46
47#define dw_pcie_ver_type_is(_pci, _ver, _type) \
48 (__dw_pcie_ver_cmp(_pci, _ver, ==) && \
49 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, ==))
50
51#define dw_pcie_ver_type_is_ge(_pci, _ver, _type) \
52 (__dw_pcie_ver_cmp(_pci, _ver, ==) && \
53 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, >=))
54
55/* DWC PCIe controller capabilities */
56#define DW_PCIE_CAP_REQ_RES 0
57#define DW_PCIE_CAP_IATU_UNROLL 1
58#define DW_PCIE_CAP_CDM_CHECK 2
59
60#define dw_pcie_cap_is(_pci, _cap) \
61 test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
62
63#define dw_pcie_cap_set(_pci, _cap) \
64 set_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
65
66/* Parameters for the waiting for iATU enabled routine */
67#define LINK_WAIT_MAX_IATU_RETRIES 5
68#define LINK_WAIT_IATU 9
69
70/* Synopsys-specific PCIe configuration registers */
71#define PCIE_PORT_FORCE 0x708
72#define PORT_FORCE_DO_DESKEW_FOR_SRIS BIT(23)
73
74#define PCIE_PORT_AFR 0x70C
75#define PORT_AFR_N_FTS_MASK GENMASK(15, 8)
76#define PORT_AFR_N_FTS(n) FIELD_PREP(PORT_AFR_N_FTS_MASK, n)
77#define PORT_AFR_CC_N_FTS_MASK GENMASK(23, 16)
78#define PORT_AFR_CC_N_FTS(n) FIELD_PREP(PORT_AFR_CC_N_FTS_MASK, n)
79#define PORT_AFR_ENTER_ASPM BIT(30)
80#define PORT_AFR_L0S_ENTRANCE_LAT_SHIFT 24
81#define PORT_AFR_L0S_ENTRANCE_LAT_MASK GENMASK(26, 24)
82#define PORT_AFR_L1_ENTRANCE_LAT_SHIFT 27
83#define PORT_AFR_L1_ENTRANCE_LAT_MASK GENMASK(29, 27)
84
85#define PCIE_PORT_LINK_CONTROL 0x710
86#define PORT_LINK_DLL_LINK_EN BIT(5)
87#define PORT_LINK_FAST_LINK_MODE BIT(7)
88#define PORT_LINK_MODE_MASK GENMASK(21, 16)
89#define PORT_LINK_MODE(n) FIELD_PREP(PORT_LINK_MODE_MASK, n)
90#define PORT_LINK_MODE_1_LANES PORT_LINK_MODE(0x1)
91#define PORT_LINK_MODE_2_LANES PORT_LINK_MODE(0x3)
92#define PORT_LINK_MODE_4_LANES PORT_LINK_MODE(0x7)
93#define PORT_LINK_MODE_8_LANES PORT_LINK_MODE(0xf)
94#define PORT_LINK_MODE_16_LANES PORT_LINK_MODE(0x1f)
95
96#define PCIE_PORT_LANE_SKEW 0x714
97#define PORT_LANE_SKEW_INSERT_MASK GENMASK(23, 0)
98
99#define PCIE_PORT_DEBUG0 0x728
100#define PORT_LOGIC_LTSSM_STATE_MASK 0x3f
101#define PORT_LOGIC_LTSSM_STATE_L0 0x11
102#define PCIE_PORT_DEBUG1 0x72C
103#define PCIE_PORT_DEBUG1_LINK_UP BIT(4)
104#define PCIE_PORT_DEBUG1_LINK_IN_TRAINING BIT(29)
105
106#define PCIE_LINK_WIDTH_SPEED_CONTROL 0x80C
107#define PORT_LOGIC_N_FTS_MASK GENMASK(7, 0)
108#define PORT_LOGIC_SPEED_CHANGE BIT(17)
109#define PORT_LOGIC_LINK_WIDTH_MASK GENMASK(12, 8)
110#define PORT_LOGIC_LINK_WIDTH(n) FIELD_PREP(PORT_LOGIC_LINK_WIDTH_MASK, n)
111#define PORT_LOGIC_LINK_WIDTH_1_LANES PORT_LOGIC_LINK_WIDTH(0x1)
112#define PORT_LOGIC_LINK_WIDTH_2_LANES PORT_LOGIC_LINK_WIDTH(0x2)
113#define PORT_LOGIC_LINK_WIDTH_4_LANES PORT_LOGIC_LINK_WIDTH(0x4)
114#define PORT_LOGIC_LINK_WIDTH_8_LANES PORT_LOGIC_LINK_WIDTH(0x8)
115
116#define PCIE_MSI_ADDR_LO 0x820
117#define PCIE_MSI_ADDR_HI 0x824
118#define PCIE_MSI_INTR0_ENABLE 0x828
119#define PCIE_MSI_INTR0_MASK 0x82C
120#define PCIE_MSI_INTR0_STATUS 0x830
121
122#define GEN3_RELATED_OFF 0x890
123#define GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL BIT(0)
124#define GEN3_RELATED_OFF_EQ_PHASE_2_3 BIT(9)
125#define GEN3_RELATED_OFF_RXEQ_RGRDLESS_RXTS BIT(13)
126#define GEN3_RELATED_OFF_GEN3_EQ_DISABLE BIT(16)
127#define GEN3_RELATED_OFF_RATE_SHADOW_SEL_SHIFT 24
128#define GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK GENMASK(25, 24)
129
130#define GEN3_EQ_CONTROL_OFF 0x8A8
131#define GEN3_EQ_CONTROL_OFF_FB_MODE GENMASK(3, 0)
132#define GEN3_EQ_CONTROL_OFF_PHASE23_EXIT_MODE BIT(4)
133#define GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC GENMASK(23, 8)
134#define GEN3_EQ_CONTROL_OFF_FOM_INC_INITIAL_EVAL BIT(24)
135
136#define GEN3_EQ_FB_MODE_DIR_CHANGE_OFF 0x8AC
137#define GEN3_EQ_FMDC_T_MIN_PHASE23 GENMASK(4, 0)
138#define GEN3_EQ_FMDC_N_EVALS GENMASK(9, 5)
139#define GEN3_EQ_FMDC_MAX_PRE_CURSOR_DELTA GENMASK(13, 10)
140#define GEN3_EQ_FMDC_MAX_POST_CURSOR_DELTA GENMASK(17, 14)
141
142#define COHERENCY_CONTROL_1_OFF 0x8E0
143#define CFG_MEMTYPE_BOUNDARY_LOW_ADDR_MASK GENMASK(31, 2)
144#define CFG_MEMTYPE_VALUE BIT(0)
145
146#define COHERENCY_CONTROL_2_OFF 0x8E4
147#define COHERENCY_CONTROL_3_OFF 0x8E8
148
149#define PCIE_PORT_MULTI_LANE_CTRL 0x8C0
150#define PORT_MLTI_UPCFG_SUPPORT BIT(7)
151
152#define PCIE_VERSION_NUMBER 0x8F8
153#define PCIE_VERSION_TYPE 0x8FC
154
155/*
156 * iATU inbound and outbound windows CSRs. Before the IP-core v4.80a each
157 * iATU region CSRs had been indirectly accessible by means of the dedicated
158 * viewport selector. The iATU/eDMA CSRs space was re-designed in DWC PCIe
159 * v4.80a in a way so the viewport was unrolled into the directly accessible
160 * iATU/eDMA CSRs space.
161 */
162#define PCIE_ATU_VIEWPORT 0x900
163#define PCIE_ATU_REGION_DIR_IB BIT(31)
164#define PCIE_ATU_REGION_DIR_OB 0
165#define PCIE_ATU_VIEWPORT_BASE 0x904
166#define PCIE_ATU_UNROLL_BASE(dir, index) \
167 (((index) << 9) | ((dir == PCIE_ATU_REGION_DIR_IB) ? BIT(8) : 0))
168#define PCIE_ATU_VIEWPORT_SIZE 0x2C
169#define PCIE_ATU_REGION_CTRL1 0x000
170#define PCIE_ATU_INCREASE_REGION_SIZE BIT(13)
171#define PCIE_ATU_TYPE_MEM 0x0
172#define PCIE_ATU_TYPE_IO 0x2
173#define PCIE_ATU_TYPE_CFG0 0x4
174#define PCIE_ATU_TYPE_CFG1 0x5
175#define PCIE_ATU_TYPE_MSG 0x10
176#define PCIE_ATU_TD BIT(8)
177#define PCIE_ATU_FUNC_NUM(pf) ((pf) << 20)
178#define PCIE_ATU_REGION_CTRL2 0x004
179#define PCIE_ATU_ENABLE BIT(31)
180#define PCIE_ATU_BAR_MODE_ENABLE BIT(30)
181#define PCIE_ATU_CFG_SHIFT_MODE_ENABLE BIT(28)
182#define PCIE_ATU_INHIBIT_PAYLOAD BIT(22)
183#define PCIE_ATU_FUNC_NUM_MATCH_EN BIT(19)
184#define PCIE_ATU_LOWER_BASE 0x008
185#define PCIE_ATU_UPPER_BASE 0x00C
186#define PCIE_ATU_LIMIT 0x010
187#define PCIE_ATU_LOWER_TARGET 0x014
188#define PCIE_ATU_BUS(x) FIELD_PREP(GENMASK(31, 24), x)
189#define PCIE_ATU_DEV(x) FIELD_PREP(GENMASK(23, 19), x)
190#define PCIE_ATU_FUNC(x) FIELD_PREP(GENMASK(18, 16), x)
191#define PCIE_ATU_UPPER_TARGET 0x018
192#define PCIE_ATU_UPPER_LIMIT 0x020
193
194#define PCIE_MISC_CONTROL_1_OFF 0x8BC
195#define PCIE_DBI_RO_WR_EN BIT(0)
196
197#define PCIE_MSIX_DOORBELL 0x948
198#define PCIE_MSIX_DOORBELL_PF_SHIFT 24
199
200/*
201 * eDMA CSRs. DW PCIe IP-core v4.70a and older had the eDMA registers accessible
202 * over the Port Logic registers space. Afterwards the unrolled mapping was
203 * introduced so eDMA and iATU could be accessed via a dedicated registers
204 * space.
205 */
206#define PCIE_DMA_VIEWPORT_BASE 0x970
207#define PCIE_DMA_UNROLL_BASE 0x80000
208#define PCIE_DMA_CTRL 0x008
209#define PCIE_DMA_NUM_WR_CHAN GENMASK(3, 0)
210#define PCIE_DMA_NUM_RD_CHAN GENMASK(19, 16)
211
212#define PCIE_PL_CHK_REG_CONTROL_STATUS 0xB20
213#define PCIE_PL_CHK_REG_CHK_REG_START BIT(0)
214#define PCIE_PL_CHK_REG_CHK_REG_CONTINUOUS BIT(1)
215#define PCIE_PL_CHK_REG_CHK_REG_COMPARISON_ERROR BIT(16)
216#define PCIE_PL_CHK_REG_CHK_REG_LOGIC_ERROR BIT(17)
217#define PCIE_PL_CHK_REG_CHK_REG_COMPLETE BIT(18)
218
219#define PCIE_PL_CHK_REG_ERR_ADDR 0xB28
220
221/*
222 * 16.0 GT/s (Gen 4) lane margining register definitions
223 */
224#define GEN4_LANE_MARGINING_1_OFF 0xB80
225#define MARGINING_MAX_VOLTAGE_OFFSET GENMASK(29, 24)
226#define MARGINING_NUM_VOLTAGE_STEPS GENMASK(22, 16)
227#define MARGINING_MAX_TIMING_OFFSET GENMASK(13, 8)
228#define MARGINING_NUM_TIMING_STEPS GENMASK(5, 0)
229
230#define GEN4_LANE_MARGINING_2_OFF 0xB84
231#define MARGINING_IND_ERROR_SAMPLER BIT(28)
232#define MARGINING_SAMPLE_REPORTING_METHOD BIT(27)
233#define MARGINING_IND_LEFT_RIGHT_TIMING BIT(26)
234#define MARGINING_IND_UP_DOWN_VOLTAGE BIT(25)
235#define MARGINING_VOLTAGE_SUPPORTED BIT(24)
236#define MARGINING_MAXLANES GENMASK(20, 16)
237#define MARGINING_SAMPLE_RATE_TIMING GENMASK(13, 8)
238#define MARGINING_SAMPLE_RATE_VOLTAGE GENMASK(5, 0)
239/*
240 * iATU Unroll-specific register definitions
241 * From 4.80 core version the address translation will be made by unroll
242 */
243#define PCIE_ATU_UNR_REGION_CTRL1 0x00
244#define PCIE_ATU_UNR_REGION_CTRL2 0x04
245#define PCIE_ATU_UNR_LOWER_BASE 0x08
246#define PCIE_ATU_UNR_UPPER_BASE 0x0C
247#define PCIE_ATU_UNR_LOWER_LIMIT 0x10
248#define PCIE_ATU_UNR_LOWER_TARGET 0x14
249#define PCIE_ATU_UNR_UPPER_TARGET 0x18
250#define PCIE_ATU_UNR_UPPER_LIMIT 0x20
251
252/*
253 * RAS-DES register definitions
254 */
255#define PCIE_RAS_DES_EVENT_COUNTER_CONTROL 0x8
256#define EVENT_COUNTER_ALL_CLEAR 0x3
257#define EVENT_COUNTER_ENABLE_ALL 0x7
258#define EVENT_COUNTER_ENABLE_SHIFT 2
259#define EVENT_COUNTER_EVENT_SEL_MASK GENMASK(7, 0)
260#define EVENT_COUNTER_EVENT_SEL_SHIFT 16
261#define EVENT_COUNTER_EVENT_Tx_L0S 0x2
262#define EVENT_COUNTER_EVENT_Rx_L0S 0x3
263#define EVENT_COUNTER_EVENT_L1 0x5
264#define EVENT_COUNTER_EVENT_L1_1 0x7
265#define EVENT_COUNTER_EVENT_L1_2 0x8
266#define EVENT_COUNTER_GROUP_SEL_SHIFT 24
267#define EVENT_COUNTER_GROUP_5 0x5
268
269#define PCIE_RAS_DES_EVENT_COUNTER_DATA 0xc
270
271/* PTM register definitions */
272#define PTM_RES_REQ_CTRL 0x8
273#define PTM_RES_CCONTEXT_VALID BIT(0)
274#define PTM_REQ_AUTO_UPDATE_ENABLED BIT(0)
275#define PTM_REQ_START_UPDATE BIT(1)
276
277#define PTM_LOCAL_LSB 0x10
278#define PTM_LOCAL_MSB 0x14
279#define PTM_T1_T2_LSB 0x18
280#define PTM_T1_T2_MSB 0x1c
281#define PTM_T3_T4_LSB 0x28
282#define PTM_T3_T4_MSB 0x2c
283#define PTM_MASTER_LSB 0x38
284#define PTM_MASTER_MSB 0x3c
285
286/*
287 * The default address offset between dbi_base and atu_base. Root controller
288 * drivers are not required to initialize atu_base if the offset matches this
289 * default; the driver core automatically derives atu_base from dbi_base using
290 * this offset, if atu_base not set.
291 */
292#define DEFAULT_DBI_ATU_OFFSET (0x3 << 20)
293#define DEFAULT_DBI_DMA_OFFSET PCIE_DMA_UNROLL_BASE
294
295#define MAX_MSI_IRQS 256
296#define MAX_MSI_IRQS_PER_CTRL 32
297#define MAX_MSI_CTRLS (MAX_MSI_IRQS / MAX_MSI_IRQS_PER_CTRL)
298#define MSI_REG_CTRL_BLOCK_SIZE 12
299#define MSI_DEF_NUM_VECTORS 32
300
301/* Maximum number of inbound/outbound iATUs */
302#define MAX_IATU_IN 256
303#define MAX_IATU_OUT 256
304
305/* Default eDMA LLP memory size */
306#define DMA_LLP_MEM_SIZE PAGE_SIZE
307
308struct dw_pcie;
309struct dw_pcie_rp;
310struct dw_pcie_ep;
311
312enum dw_pcie_device_mode {
313 DW_PCIE_UNKNOWN_TYPE,
314 DW_PCIE_EP_TYPE,
315 DW_PCIE_LEG_EP_TYPE,
316 DW_PCIE_RC_TYPE,
317};
318
319enum dw_pcie_app_clk {
320 DW_PCIE_DBI_CLK,
321 DW_PCIE_MSTR_CLK,
322 DW_PCIE_SLV_CLK,
323 DW_PCIE_NUM_APP_CLKS
324};
325
326enum dw_pcie_core_clk {
327 DW_PCIE_PIPE_CLK,
328 DW_PCIE_CORE_CLK,
329 DW_PCIE_AUX_CLK,
330 DW_PCIE_REF_CLK,
331 DW_PCIE_NUM_CORE_CLKS
332};
333
334enum dw_pcie_app_rst {
335 DW_PCIE_DBI_RST,
336 DW_PCIE_MSTR_RST,
337 DW_PCIE_SLV_RST,
338 DW_PCIE_NUM_APP_RSTS
339};
340
341enum dw_pcie_core_rst {
342 DW_PCIE_NON_STICKY_RST,
343 DW_PCIE_STICKY_RST,
344 DW_PCIE_CORE_RST,
345 DW_PCIE_PIPE_RST,
346 DW_PCIE_PHY_RST,
347 DW_PCIE_HOT_RST,
348 DW_PCIE_PWR_RST,
349 DW_PCIE_NUM_CORE_RSTS
350};
351
352enum dw_pcie_ltssm {
353 /* Need to align with PCIE_PORT_DEBUG0 bits 0:5 */
354 DW_PCIE_LTSSM_DETECT_QUIET = 0x0,
355 DW_PCIE_LTSSM_DETECT_ACT = 0x1,
356 DW_PCIE_LTSSM_POLL_ACTIVE = 0x2,
357 DW_PCIE_LTSSM_POLL_COMPLIANCE = 0x3,
358 DW_PCIE_LTSSM_POLL_CONFIG = 0x4,
359 DW_PCIE_LTSSM_PRE_DETECT_QUIET = 0x5,
360 DW_PCIE_LTSSM_DETECT_WAIT = 0x6,
361 DW_PCIE_LTSSM_CFG_LINKWD_START = 0x7,
362 DW_PCIE_LTSSM_CFG_LINKWD_ACEPT = 0x8,
363 DW_PCIE_LTSSM_CFG_LANENUM_WAI = 0x9,
364 DW_PCIE_LTSSM_CFG_LANENUM_ACEPT = 0xa,
365 DW_PCIE_LTSSM_CFG_COMPLETE = 0xb,
366 DW_PCIE_LTSSM_CFG_IDLE = 0xc,
367 DW_PCIE_LTSSM_RCVRY_LOCK = 0xd,
368 DW_PCIE_LTSSM_RCVRY_SPEED = 0xe,
369 DW_PCIE_LTSSM_RCVRY_RCVRCFG = 0xf,
370 DW_PCIE_LTSSM_RCVRY_IDLE = 0x10,
371 DW_PCIE_LTSSM_L0 = 0x11,
372 DW_PCIE_LTSSM_L0S = 0x12,
373 DW_PCIE_LTSSM_L123_SEND_EIDLE = 0x13,
374 DW_PCIE_LTSSM_L1_IDLE = 0x14,
375 DW_PCIE_LTSSM_L2_IDLE = 0x15,
376 DW_PCIE_LTSSM_L2_WAKE = 0x16,
377 DW_PCIE_LTSSM_DISABLED_ENTRY = 0x17,
378 DW_PCIE_LTSSM_DISABLED_IDLE = 0x18,
379 DW_PCIE_LTSSM_DISABLED = 0x19,
380 DW_PCIE_LTSSM_LPBK_ENTRY = 0x1a,
381 DW_PCIE_LTSSM_LPBK_ACTIVE = 0x1b,
382 DW_PCIE_LTSSM_LPBK_EXIT = 0x1c,
383 DW_PCIE_LTSSM_LPBK_EXIT_TIMEOUT = 0x1d,
384 DW_PCIE_LTSSM_HOT_RESET_ENTRY = 0x1e,
385 DW_PCIE_LTSSM_HOT_RESET = 0x1f,
386 DW_PCIE_LTSSM_RCVRY_EQ0 = 0x20,
387 DW_PCIE_LTSSM_RCVRY_EQ1 = 0x21,
388 DW_PCIE_LTSSM_RCVRY_EQ2 = 0x22,
389 DW_PCIE_LTSSM_RCVRY_EQ3 = 0x23,
390
391 DW_PCIE_LTSSM_UNKNOWN = 0xFFFFFFFF,
392};
393
394struct dw_pcie_ob_atu_cfg {
395 int index;
396 int type;
397 u8 func_no;
398 u8 code;
399 u8 routing;
400 u32 ctrl2;
401 u64 parent_bus_addr;
402 u64 pci_addr;
403 u64 size;
404};
405
406struct dw_pcie_host_ops {
407 int (*init)(struct dw_pcie_rp *pp);
408 void (*deinit)(struct dw_pcie_rp *pp);
409 void (*post_init)(struct dw_pcie_rp *pp);
410 int (*msi_init)(struct dw_pcie_rp *pp);
411 void (*pme_turn_off)(struct dw_pcie_rp *pp);
412};
413
414struct dw_pcie_rp {
415 bool has_msi_ctrl:1;
416 bool cfg0_io_shared:1;
417 u64 cfg0_base;
418 void __iomem *va_cfg0_base;
419 u32 cfg0_size;
420 resource_size_t io_base;
421 phys_addr_t io_bus_addr;
422 u32 io_size;
423 int irq;
424 const struct dw_pcie_host_ops *ops;
425 int msi_irq[MAX_MSI_CTRLS];
426 struct irq_domain *irq_domain;
427 dma_addr_t msi_data;
428 struct irq_chip *msi_irq_chip;
429 u32 num_vectors;
430 u32 irq_mask[MAX_MSI_CTRLS];
431 struct pci_host_bridge *bridge;
432 raw_spinlock_t lock;
433 DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS);
434 bool use_atu_msg;
435 int msg_atu_index;
436 struct resource *msg_res;
437 bool use_linkup_irq;
438 struct pci_eq_presets presets;
439 struct pci_config_window *cfg;
440 bool ecam_enabled;
441 bool native_ecam;
442};
443
444struct dw_pcie_ep_ops {
445 void (*pre_init)(struct dw_pcie_ep *ep);
446 void (*init)(struct dw_pcie_ep *ep);
447 int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
448 unsigned int type, u16 interrupt_num);
449 const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
450 /*
451 * Provide a method to implement the different func config space
452 * access for different platform, if different func have different
453 * offset, return the offset of func. if use write a register way
454 * return a 0, and implement code in callback function of platform
455 * driver.
456 */
457 unsigned int (*get_dbi_offset)(struct dw_pcie_ep *ep, u8 func_no);
458 unsigned int (*get_dbi2_offset)(struct dw_pcie_ep *ep, u8 func_no);
459};
460
461struct dw_pcie_ep_func {
462 struct list_head list;
463 u8 func_no;
464 u8 msi_cap; /* MSI capability offset */
465 u8 msix_cap; /* MSI-X capability offset */
466};
467
468struct dw_pcie_ep {
469 struct pci_epc *epc;
470 struct list_head func_list;
471 const struct dw_pcie_ep_ops *ops;
472 phys_addr_t phys_base;
473 size_t addr_size;
474 size_t page_size;
475 u8 bar_to_atu[PCI_STD_NUM_BARS];
476 phys_addr_t *outbound_addr;
477 unsigned long *ib_window_map;
478 unsigned long *ob_window_map;
479 void __iomem *msi_mem;
480 phys_addr_t msi_mem_phys;
481 struct pci_epf_bar *epf_bar[PCI_STD_NUM_BARS];
482};
483
484struct dw_pcie_ops {
485 u64 (*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr);
486 u32 (*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
487 size_t size);
488 void (*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
489 size_t size, u32 val);
490 void (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
491 size_t size, u32 val);
492 bool (*link_up)(struct dw_pcie *pcie);
493 enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie);
494 int (*start_link)(struct dw_pcie *pcie);
495 void (*stop_link)(struct dw_pcie *pcie);
496 int (*assert_perst)(struct dw_pcie *pcie, bool assert);
497};
498
499struct debugfs_info {
500 struct dentry *debug_dir;
501 void *rasdes_info;
502};
503
504struct dw_pcie {
505 struct device *dev;
506 void __iomem *dbi_base;
507 resource_size_t dbi_phys_addr;
508 void __iomem *dbi_base2;
509 void __iomem *atu_base;
510 void __iomem *elbi_base;
511 resource_size_t atu_phys_addr;
512 size_t atu_size;
513 resource_size_t parent_bus_offset;
514 u32 num_ib_windows;
515 u32 num_ob_windows;
516 u32 region_align;
517 u64 region_limit;
518 struct dw_pcie_rp pp;
519 struct dw_pcie_ep ep;
520 const struct dw_pcie_ops *ops;
521 u32 version;
522 u32 type;
523 unsigned long caps;
524 int num_lanes;
525 int max_link_speed;
526 u8 n_fts[2];
527 struct dw_edma_chip edma;
528 bool l1ss_support; /* L1 PM Substates support */
529 struct clk_bulk_data app_clks[DW_PCIE_NUM_APP_CLKS];
530 struct clk_bulk_data core_clks[DW_PCIE_NUM_CORE_CLKS];
531 struct reset_control_bulk_data app_rsts[DW_PCIE_NUM_APP_RSTS];
532 struct reset_control_bulk_data core_rsts[DW_PCIE_NUM_CORE_RSTS];
533 struct gpio_desc *pe_rst;
534 bool suspended;
535 struct debugfs_info *debugfs;
536 enum dw_pcie_device_mode mode;
537 u16 ptm_vsec_offset;
538 struct pci_ptm_debugfs *ptm_debugfs;
539
540 /*
541 * If iATU input addresses are offset from CPU physical addresses,
542 * we previously required .cpu_addr_fixup() to convert them. We
543 * now rely on the devicetree instead. If .cpu_addr_fixup()
544 * exists, we compare its results with devicetree.
545 *
546 * If .cpu_addr_fixup() does not exist, we assume the offset is
547 * zero and warn if devicetree claims otherwise. If we know all
548 * devicetrees correctly describe the offset, set
549 * use_parent_dt_ranges to true to avoid this warning.
550 */
551 bool use_parent_dt_ranges;
552};
553
554#define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp)
555
556#define to_dw_pcie_from_ep(endpoint) \
557 container_of((endpoint), struct dw_pcie, ep)
558
559int dw_pcie_get_resources(struct dw_pcie *pci);
560
561void dw_pcie_version_detect(struct dw_pcie *pci);
562
563u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap);
564u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap);
565u16 dw_pcie_find_rasdes_capability(struct dw_pcie *pci);
566u16 dw_pcie_find_ptm_capability(struct dw_pcie *pci);
567
568int dw_pcie_read(void __iomem *addr, int size, u32 *val);
569int dw_pcie_write(void __iomem *addr, int size, u32 val);
570
571u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size);
572void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
573void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
574bool dw_pcie_link_up(struct dw_pcie *pci);
575void dw_pcie_upconfig_setup(struct dw_pcie *pci);
576int dw_pcie_wait_for_link(struct dw_pcie *pci);
577int dw_pcie_link_get_max_link_width(struct dw_pcie *pci);
578int dw_pcie_prog_outbound_atu(struct dw_pcie *pci,
579 const struct dw_pcie_ob_atu_cfg *atu);
580int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type,
581 u64 parent_bus_addr, u64 pci_addr, u64 size);
582int dw_pcie_prog_ep_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
583 int type, u64 parent_bus_addr,
584 u8 bar, size_t size);
585void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index);
586void dw_pcie_hide_unsupported_l1ss(struct dw_pcie *pci);
587void dw_pcie_setup(struct dw_pcie *pci);
588void dw_pcie_iatu_detect(struct dw_pcie *pci);
589int dw_pcie_edma_detect(struct dw_pcie *pci);
590void dw_pcie_edma_remove(struct dw_pcie *pci);
591resource_size_t dw_pcie_parent_bus_offset(struct dw_pcie *pci,
592 const char *reg_name,
593 resource_size_t cpu_phy_addr);
594
595static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val)
596{
597 dw_pcie_write_dbi(pci, reg, size: 0x4, val);
598}
599
600static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg)
601{
602 return dw_pcie_read_dbi(pci, reg, size: 0x4);
603}
604
605static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val)
606{
607 dw_pcie_write_dbi(pci, reg, size: 0x2, val);
608}
609
610static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg)
611{
612 return dw_pcie_read_dbi(pci, reg, size: 0x2);
613}
614
615static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val)
616{
617 dw_pcie_write_dbi(pci, reg, size: 0x1, val);
618}
619
620static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg)
621{
622 return dw_pcie_read_dbi(pci, reg, size: 0x1);
623}
624
625static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val)
626{
627 dw_pcie_write_dbi2(pci, reg, size: 0x4, val);
628}
629
630static inline int dw_pcie_read_cfg_byte(struct dw_pcie *pci, int where,
631 u8 *val)
632{
633 *val = dw_pcie_readb_dbi(pci, reg: where);
634 return PCIBIOS_SUCCESSFUL;
635}
636
637static inline int dw_pcie_read_cfg_word(struct dw_pcie *pci, int where,
638 u16 *val)
639{
640 *val = dw_pcie_readw_dbi(pci, reg: where);
641 return PCIBIOS_SUCCESSFUL;
642}
643
644static inline int dw_pcie_read_cfg_dword(struct dw_pcie *pci, int where,
645 u32 *val)
646{
647 *val = dw_pcie_readl_dbi(pci, reg: where);
648 return PCIBIOS_SUCCESSFUL;
649}
650
651static inline unsigned int dw_pcie_ep_get_dbi_offset(struct dw_pcie_ep *ep,
652 u8 func_no)
653{
654 unsigned int dbi_offset = 0;
655
656 if (ep->ops->get_dbi_offset)
657 dbi_offset = ep->ops->get_dbi_offset(ep, func_no);
658
659 return dbi_offset;
660}
661
662static inline u32 dw_pcie_ep_read_dbi(struct dw_pcie_ep *ep, u8 func_no,
663 u32 reg, size_t size)
664{
665 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
666 struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
667
668 return dw_pcie_read_dbi(pci, reg: offset + reg, size);
669}
670
671static inline void dw_pcie_ep_write_dbi(struct dw_pcie_ep *ep, u8 func_no,
672 u32 reg, size_t size, u32 val)
673{
674 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
675 struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
676
677 dw_pcie_write_dbi(pci, reg: offset + reg, size, val);
678}
679
680static inline void dw_pcie_ep_writel_dbi(struct dw_pcie_ep *ep, u8 func_no,
681 u32 reg, u32 val)
682{
683 dw_pcie_ep_write_dbi(ep, func_no, reg, size: 0x4, val);
684}
685
686static inline u32 dw_pcie_ep_readl_dbi(struct dw_pcie_ep *ep, u8 func_no,
687 u32 reg)
688{
689 return dw_pcie_ep_read_dbi(ep, func_no, reg, size: 0x4);
690}
691
692static inline void dw_pcie_ep_writew_dbi(struct dw_pcie_ep *ep, u8 func_no,
693 u32 reg, u16 val)
694{
695 dw_pcie_ep_write_dbi(ep, func_no, reg, size: 0x2, val);
696}
697
698static inline u16 dw_pcie_ep_readw_dbi(struct dw_pcie_ep *ep, u8 func_no,
699 u32 reg)
700{
701 return dw_pcie_ep_read_dbi(ep, func_no, reg, size: 0x2);
702}
703
704static inline void dw_pcie_ep_writeb_dbi(struct dw_pcie_ep *ep, u8 func_no,
705 u32 reg, u8 val)
706{
707 dw_pcie_ep_write_dbi(ep, func_no, reg, size: 0x1, val);
708}
709
710static inline u8 dw_pcie_ep_readb_dbi(struct dw_pcie_ep *ep, u8 func_no,
711 u32 reg)
712{
713 return dw_pcie_ep_read_dbi(ep, func_no, reg, size: 0x1);
714}
715
716static inline int dw_pcie_ep_read_cfg_byte(struct dw_pcie_ep *ep, u8 func_no,
717 int where, u8 *val)
718{
719 *val = dw_pcie_ep_readb_dbi(ep, func_no, reg: where);
720 return PCIBIOS_SUCCESSFUL;
721}
722
723static inline int dw_pcie_ep_read_cfg_word(struct dw_pcie_ep *ep, u8 func_no,
724 int where, u16 *val)
725{
726 *val = dw_pcie_ep_readw_dbi(ep, func_no, reg: where);
727 return PCIBIOS_SUCCESSFUL;
728}
729
730static inline int dw_pcie_ep_read_cfg_dword(struct dw_pcie_ep *ep, u8 func_no,
731 int where, u32 *val)
732{
733 *val = dw_pcie_ep_readl_dbi(ep, func_no, reg: where);
734 return PCIBIOS_SUCCESSFUL;
735}
736
737static inline unsigned int dw_pcie_ep_get_dbi2_offset(struct dw_pcie_ep *ep,
738 u8 func_no)
739{
740 unsigned int dbi2_offset = 0;
741
742 if (ep->ops->get_dbi2_offset)
743 dbi2_offset = ep->ops->get_dbi2_offset(ep, func_no);
744 else if (ep->ops->get_dbi_offset) /* for backward compatibility */
745 dbi2_offset = ep->ops->get_dbi_offset(ep, func_no);
746
747 return dbi2_offset;
748}
749
750static inline void dw_pcie_ep_write_dbi2(struct dw_pcie_ep *ep, u8 func_no,
751 u32 reg, size_t size, u32 val)
752{
753 unsigned int offset = dw_pcie_ep_get_dbi2_offset(ep, func_no);
754 struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
755
756 dw_pcie_write_dbi2(pci, reg: offset + reg, size, val);
757}
758
759static inline void dw_pcie_ep_writel_dbi2(struct dw_pcie_ep *ep, u8 func_no,
760 u32 reg, u32 val)
761{
762 dw_pcie_ep_write_dbi2(ep, func_no, reg, size: 0x4, val);
763}
764
765static inline void dw_pcie_dbi_ro_wr_en(struct dw_pcie *pci)
766{
767 u32 reg;
768 u32 val;
769
770 reg = PCIE_MISC_CONTROL_1_OFF;
771 val = dw_pcie_readl_dbi(pci, reg);
772 val |= PCIE_DBI_RO_WR_EN;
773 dw_pcie_writel_dbi(pci, reg, val);
774}
775
776static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci)
777{
778 u32 reg;
779 u32 val;
780
781 reg = PCIE_MISC_CONTROL_1_OFF;
782 val = dw_pcie_readl_dbi(pci, reg);
783 val &= ~PCIE_DBI_RO_WR_EN;
784 dw_pcie_writel_dbi(pci, reg, val);
785}
786
787static inline int dw_pcie_start_link(struct dw_pcie *pci)
788{
789 if (pci->ops && pci->ops->start_link)
790 return pci->ops->start_link(pci);
791
792 return 0;
793}
794
795static inline void dw_pcie_stop_link(struct dw_pcie *pci)
796{
797 if (pci->ops && pci->ops->stop_link)
798 pci->ops->stop_link(pci);
799}
800
801static inline int dw_pcie_assert_perst(struct dw_pcie *pci, bool assert)
802{
803 if (pci->ops && pci->ops->assert_perst)
804 return pci->ops->assert_perst(pci, assert);
805
806 return 0;
807}
808
809static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci)
810{
811 u32 val;
812
813 if (pci->ops && pci->ops->get_ltssm)
814 return pci->ops->get_ltssm(pci);
815
816 val = dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG0);
817
818 return (enum dw_pcie_ltssm)FIELD_GET(PORT_LOGIC_LTSSM_STATE_MASK, val);
819}
820
821#ifdef CONFIG_PCIE_DW_HOST
822int dw_pcie_suspend_noirq(struct dw_pcie *pci);
823int dw_pcie_resume_noirq(struct dw_pcie *pci);
824irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp);
825void dw_pcie_msi_init(struct dw_pcie_rp *pp);
826int dw_pcie_msi_host_init(struct dw_pcie_rp *pp);
827void dw_pcie_free_msi(struct dw_pcie_rp *pp);
828int dw_pcie_setup_rc(struct dw_pcie_rp *pp);
829int dw_pcie_host_init(struct dw_pcie_rp *pp);
830void dw_pcie_host_deinit(struct dw_pcie_rp *pp);
831int dw_pcie_allocate_domains(struct dw_pcie_rp *pp);
832void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn,
833 int where);
834#else
835static inline int dw_pcie_suspend_noirq(struct dw_pcie *pci)
836{
837 return 0;
838}
839
840static inline int dw_pcie_resume_noirq(struct dw_pcie *pci)
841{
842 return 0;
843}
844
845static inline irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp)
846{
847 return IRQ_NONE;
848}
849
850static inline void dw_pcie_msi_init(struct dw_pcie_rp *pp)
851{ }
852
853static inline int dw_pcie_msi_host_init(struct dw_pcie_rp *pp)
854{
855 return -ENODEV;
856}
857
858static inline void dw_pcie_free_msi(struct dw_pcie_rp *pp)
859{ }
860
861static inline int dw_pcie_setup_rc(struct dw_pcie_rp *pp)
862{
863 return 0;
864}
865
866static inline int dw_pcie_host_init(struct dw_pcie_rp *pp)
867{
868 return 0;
869}
870
871static inline void dw_pcie_host_deinit(struct dw_pcie_rp *pp)
872{
873}
874
875static inline int dw_pcie_allocate_domains(struct dw_pcie_rp *pp)
876{
877 return 0;
878}
879static inline void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus,
880 unsigned int devfn,
881 int where)
882{
883 return NULL;
884}
885#endif
886
887#ifdef CONFIG_PCIE_DW_EP
888void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
889void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep);
890int dw_pcie_ep_init(struct dw_pcie_ep *ep);
891int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep);
892void dw_pcie_ep_deinit(struct dw_pcie_ep *ep);
893void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep);
894int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no);
895int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
896 u8 interrupt_num);
897int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
898 u16 interrupt_num);
899int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no,
900 u16 interrupt_num);
901void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar);
902int dw_pcie_ep_hide_ext_capability(struct dw_pcie *pci, u8 prev_cap, u8 cap);
903struct dw_pcie_ep_func *
904dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no);
905#else
906static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep)
907{
908}
909
910static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep)
911{
912}
913
914static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep)
915{
916 return 0;
917}
918
919static inline int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep)
920{
921 return 0;
922}
923
924static inline void dw_pcie_ep_deinit(struct dw_pcie_ep *ep)
925{
926}
927
928static inline void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep)
929{
930}
931
932static inline int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no)
933{
934 return 0;
935}
936
937static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
938 u8 interrupt_num)
939{
940 return 0;
941}
942
943static inline int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
944 u16 interrupt_num)
945{
946 return 0;
947}
948
949static inline int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep,
950 u8 func_no,
951 u16 interrupt_num)
952{
953 return 0;
954}
955
956static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar)
957{
958}
959
960static inline int dw_pcie_ep_hide_ext_capability(struct dw_pcie *pci,
961 u8 prev_cap, u8 cap)
962{
963 return 0;
964}
965
966static inline struct dw_pcie_ep_func *
967dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no)
968{
969 return NULL;
970}
971#endif
972
973#ifdef CONFIG_PCIE_DW_DEBUGFS
974void dwc_pcie_debugfs_init(struct dw_pcie *pci, enum dw_pcie_device_mode mode);
975void dwc_pcie_debugfs_deinit(struct dw_pcie *pci);
976#else
977static inline void dwc_pcie_debugfs_init(struct dw_pcie *pci,
978 enum dw_pcie_device_mode mode)
979{
980}
981static inline void dwc_pcie_debugfs_deinit(struct dw_pcie *pci)
982{
983}
984#endif
985
986#endif /* _PCIE_DESIGNWARE_H */
987

source code of linux/drivers/pci/controller/dwc/pcie-designware.h