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 308 struct dw_pcie; 309 struct dw_pcie_rp; 310 struct dw_pcie_ep; 311 312 enum 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 319 enum 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 326 enum 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 334 enum 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 341 enum 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 352 enum 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 394 struct 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 406 struct 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 414 struct 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 444 struct 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 461 struct 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 468 struct 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 484 struct 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 499 struct debugfs_info { 500 struct dentry *debug_dir; 501 void *rasdes_info; 502 }; 503 504 struct 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 559 int dw_pcie_get_resources(struct dw_pcie *pci); 560 561 void dw_pcie_version_detect(struct dw_pcie *pci); 562 563 u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap); 564 u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap); 565 u16 dw_pcie_find_rasdes_capability(struct dw_pcie *pci); 566 u16 dw_pcie_find_ptm_capability(struct dw_pcie *pci); 567 568 int dw_pcie_read(void __iomem *addr, int size, u32 *val); 569 int dw_pcie_write(void __iomem *addr, int size, u32 val); 570 571 u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size); 572 void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val); 573 void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val); 574 bool dw_pcie_link_up(struct dw_pcie *pci); 575 void dw_pcie_upconfig_setup(struct dw_pcie *pci); 576 int dw_pcie_wait_for_link(struct dw_pcie *pci); 577 int dw_pcie_link_get_max_link_width(struct dw_pcie *pci); 578 int dw_pcie_prog_outbound_atu(struct dw_pcie *pci, 579 const struct dw_pcie_ob_atu_cfg *atu); 580 int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type, 581 u64 parent_bus_addr, u64 pci_addr, u64 size); 582 int 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); 585 void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index); 586 void dw_pcie_hide_unsupported_l1ss(struct dw_pcie *pci); 587 void dw_pcie_setup(struct dw_pcie *pci); 588 void dw_pcie_iatu_detect(struct dw_pcie *pci); 589 int dw_pcie_edma_detect(struct dw_pcie *pci); 590 void dw_pcie_edma_remove(struct dw_pcie *pci); 591 resource_size_t dw_pcie_parent_bus_offset(struct dw_pcie *pci, 592 const char *reg_name, 593 resource_size_t cpu_phy_addr); 594 595 static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val) 596 { 597 dw_pcie_write_dbi(pci, reg, 0x4, val); 598 } 599 600 static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg) 601 { 602 return dw_pcie_read_dbi(pci, reg, 0x4); 603 } 604 605 static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val) 606 { 607 dw_pcie_write_dbi(pci, reg, 0x2, val); 608 } 609 610 static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg) 611 { 612 return dw_pcie_read_dbi(pci, reg, 0x2); 613 } 614 615 static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val) 616 { 617 dw_pcie_write_dbi(pci, reg, 0x1, val); 618 } 619 620 static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg) 621 { 622 return dw_pcie_read_dbi(pci, reg, 0x1); 623 } 624 625 static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val) 626 { 627 dw_pcie_write_dbi2(pci, reg, 0x4, val); 628 } 629 630 static inline int dw_pcie_read_cfg_byte(struct dw_pcie *pci, int where, 631 u8 *val) 632 { 633 *val = dw_pcie_readb_dbi(pci, where); 634 return PCIBIOS_SUCCESSFUL; 635 } 636 637 static inline int dw_pcie_read_cfg_word(struct dw_pcie *pci, int where, 638 u16 *val) 639 { 640 *val = dw_pcie_readw_dbi(pci, where); 641 return PCIBIOS_SUCCESSFUL; 642 } 643 644 static inline int dw_pcie_read_cfg_dword(struct dw_pcie *pci, int where, 645 u32 *val) 646 { 647 *val = dw_pcie_readl_dbi(pci, where); 648 return PCIBIOS_SUCCESSFUL; 649 } 650 651 static 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 662 static 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, offset + reg, size); 669 } 670 671 static 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, offset + reg, size, val); 678 } 679 680 static 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, 0x4, val); 684 } 685 686 static 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, 0x4); 690 } 691 692 static 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, 0x2, val); 696 } 697 698 static 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, 0x2); 702 } 703 704 static 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, 0x1, val); 708 } 709 710 static 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, 0x1); 714 } 715 716 static 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, where); 720 return PCIBIOS_SUCCESSFUL; 721 } 722 723 static 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, where); 727 return PCIBIOS_SUCCESSFUL; 728 } 729 730 static 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, where); 734 return PCIBIOS_SUCCESSFUL; 735 } 736 737 static 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 750 static 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, offset + reg, size, val); 757 } 758 759 static 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, 0x4, val); 763 } 764 765 static 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 776 static 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 787 static 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 795 static 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 801 static 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 809 static 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 822 int dw_pcie_suspend_noirq(struct dw_pcie *pci); 823 int dw_pcie_resume_noirq(struct dw_pcie *pci); 824 irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp); 825 void dw_pcie_msi_init(struct dw_pcie_rp *pp); 826 int dw_pcie_msi_host_init(struct dw_pcie_rp *pp); 827 void dw_pcie_free_msi(struct dw_pcie_rp *pp); 828 int dw_pcie_setup_rc(struct dw_pcie_rp *pp); 829 int dw_pcie_host_init(struct dw_pcie_rp *pp); 830 void dw_pcie_host_deinit(struct dw_pcie_rp *pp); 831 int dw_pcie_allocate_domains(struct dw_pcie_rp *pp); 832 void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn, 833 int where); 834 #else 835 static inline int dw_pcie_suspend_noirq(struct dw_pcie *pci) 836 { 837 return 0; 838 } 839 840 static inline int dw_pcie_resume_noirq(struct dw_pcie *pci) 841 { 842 return 0; 843 } 844 845 static inline irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp) 846 { 847 return IRQ_NONE; 848 } 849 850 static inline void dw_pcie_msi_init(struct dw_pcie_rp *pp) 851 { } 852 853 static inline int dw_pcie_msi_host_init(struct dw_pcie_rp *pp) 854 { 855 return -ENODEV; 856 } 857 858 static inline void dw_pcie_free_msi(struct dw_pcie_rp *pp) 859 { } 860 861 static inline int dw_pcie_setup_rc(struct dw_pcie_rp *pp) 862 { 863 return 0; 864 } 865 866 static inline int dw_pcie_host_init(struct dw_pcie_rp *pp) 867 { 868 return 0; 869 } 870 871 static inline void dw_pcie_host_deinit(struct dw_pcie_rp *pp) 872 { 873 } 874 875 static inline int dw_pcie_allocate_domains(struct dw_pcie_rp *pp) 876 { 877 return 0; 878 } 879 static 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 888 void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); 889 void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep); 890 int dw_pcie_ep_init(struct dw_pcie_ep *ep); 891 int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep); 892 void dw_pcie_ep_deinit(struct dw_pcie_ep *ep); 893 void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep); 894 int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no); 895 int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, 896 u8 interrupt_num); 897 int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no, 898 u16 interrupt_num); 899 int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no, 900 u16 interrupt_num); 901 void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar); 902 int dw_pcie_ep_hide_ext_capability(struct dw_pcie *pci, u8 prev_cap, u8 cap); 903 struct dw_pcie_ep_func * 904 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no); 905 #else 906 static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) 907 { 908 } 909 910 static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) 911 { 912 } 913 914 static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) 915 { 916 return 0; 917 } 918 919 static inline int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) 920 { 921 return 0; 922 } 923 924 static inline void dw_pcie_ep_deinit(struct dw_pcie_ep *ep) 925 { 926 } 927 928 static inline void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep) 929 { 930 } 931 932 static inline int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no) 933 { 934 return 0; 935 } 936 937 static 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 943 static 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 949 static 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 956 static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar) 957 { 958 } 959 960 static inline int dw_pcie_ep_hide_ext_capability(struct dw_pcie *pci, 961 u8 prev_cap, u8 cap) 962 { 963 return 0; 964 } 965 966 static inline struct dw_pcie_ep_func * 967 dw_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 974 void dwc_pcie_debugfs_init(struct dw_pcie *pci, enum dw_pcie_device_mode mode); 975 void dwc_pcie_debugfs_deinit(struct dw_pcie *pci); 976 #else 977 static inline void dwc_pcie_debugfs_init(struct dw_pcie *pci, 978 enum dw_pcie_device_mode mode) 979 { 980 } 981 static inline void dwc_pcie_debugfs_deinit(struct dw_pcie *pci) 982 { 983 } 984 #endif 985 986 #endif /* _PCIE_DESIGNWARE_H */ 987