1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * PCIe host controller driver for the following SoCs 4 * Tegra194 5 * Tegra234 6 * 7 * Copyright (C) 2019-2022 NVIDIA Corporation. 8 * 9 * Author: Vidya Sagar <vidyas@nvidia.com> 10 */ 11 12 #include <linux/clk.h> 13 #include <linux/debugfs.h> 14 #include <linux/delay.h> 15 #include <linux/gpio.h> 16 #include <linux/gpio/consumer.h> 17 #include <linux/interrupt.h> 18 #include <linux/iopoll.h> 19 #include <linux/kernel.h> 20 #include <linux/module.h> 21 #include <linux/of.h> 22 #include <linux/of_device.h> 23 #include <linux/of_gpio.h> 24 #include <linux/of_irq.h> 25 #include <linux/of_pci.h> 26 #include <linux/pci.h> 27 #include <linux/phy/phy.h> 28 #include <linux/pinctrl/consumer.h> 29 #include <linux/platform_device.h> 30 #include <linux/pm_runtime.h> 31 #include <linux/random.h> 32 #include <linux/reset.h> 33 #include <linux/resource.h> 34 #include <linux/types.h> 35 #include "pcie-designware.h" 36 #include <soc/tegra/bpmp.h> 37 #include <soc/tegra/bpmp-abi.h> 38 #include "../../pci.h" 39 40 #define TEGRA194_DWC_IP_VER 0x490A 41 #define TEGRA234_DWC_IP_VER 0x562A 42 43 #define APPL_PINMUX 0x0 44 #define APPL_PINMUX_PEX_RST BIT(0) 45 #define APPL_PINMUX_CLKREQ_OVERRIDE_EN BIT(2) 46 #define APPL_PINMUX_CLKREQ_OVERRIDE BIT(3) 47 #define APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE_EN BIT(4) 48 #define APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE BIT(5) 49 50 #define APPL_CTRL 0x4 51 #define APPL_CTRL_SYS_PRE_DET_STATE BIT(6) 52 #define APPL_CTRL_LTSSM_EN BIT(7) 53 #define APPL_CTRL_HW_HOT_RST_EN BIT(20) 54 #define APPL_CTRL_HW_HOT_RST_MODE_MASK GENMASK(1, 0) 55 #define APPL_CTRL_HW_HOT_RST_MODE_SHIFT 22 56 #define APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST 0x1 57 #define APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST_LTSSM_EN 0x2 58 59 #define APPL_INTR_EN_L0_0 0x8 60 #define APPL_INTR_EN_L0_0_LINK_STATE_INT_EN BIT(0) 61 #define APPL_INTR_EN_L0_0_MSI_RCV_INT_EN BIT(4) 62 #define APPL_INTR_EN_L0_0_INT_INT_EN BIT(8) 63 #define APPL_INTR_EN_L0_0_PCI_CMD_EN_INT_EN BIT(15) 64 #define APPL_INTR_EN_L0_0_CDM_REG_CHK_INT_EN BIT(19) 65 #define APPL_INTR_EN_L0_0_SYS_INTR_EN BIT(30) 66 #define APPL_INTR_EN_L0_0_SYS_MSI_INTR_EN BIT(31) 67 68 #define APPL_INTR_STATUS_L0 0xC 69 #define APPL_INTR_STATUS_L0_LINK_STATE_INT BIT(0) 70 #define APPL_INTR_STATUS_L0_INT_INT BIT(8) 71 #define APPL_INTR_STATUS_L0_PCI_CMD_EN_INT BIT(15) 72 #define APPL_INTR_STATUS_L0_PEX_RST_INT BIT(16) 73 #define APPL_INTR_STATUS_L0_CDM_REG_CHK_INT BIT(18) 74 75 #define APPL_INTR_EN_L1_0_0 0x1C 76 #define APPL_INTR_EN_L1_0_0_LINK_REQ_RST_NOT_INT_EN BIT(1) 77 #define APPL_INTR_EN_L1_0_0_RDLH_LINK_UP_INT_EN BIT(3) 78 #define APPL_INTR_EN_L1_0_0_HOT_RESET_DONE_INT_EN BIT(30) 79 80 #define APPL_INTR_STATUS_L1_0_0 0x20 81 #define APPL_INTR_STATUS_L1_0_0_LINK_REQ_RST_NOT_CHGED BIT(1) 82 #define APPL_INTR_STATUS_L1_0_0_RDLH_LINK_UP_CHGED BIT(3) 83 #define APPL_INTR_STATUS_L1_0_0_HOT_RESET_DONE BIT(30) 84 85 #define APPL_INTR_STATUS_L1_1 0x2C 86 #define APPL_INTR_STATUS_L1_2 0x30 87 #define APPL_INTR_STATUS_L1_3 0x34 88 #define APPL_INTR_STATUS_L1_6 0x3C 89 #define APPL_INTR_STATUS_L1_7 0x40 90 #define APPL_INTR_STATUS_L1_15_CFG_BME_CHGED BIT(1) 91 92 #define APPL_INTR_EN_L1_8_0 0x44 93 #define APPL_INTR_EN_L1_8_BW_MGT_INT_EN BIT(2) 94 #define APPL_INTR_EN_L1_8_AUTO_BW_INT_EN BIT(3) 95 #define APPL_INTR_EN_L1_8_INTX_EN BIT(11) 96 #define APPL_INTR_EN_L1_8_AER_INT_EN BIT(15) 97 98 #define APPL_INTR_STATUS_L1_8_0 0x4C 99 #define APPL_INTR_STATUS_L1_8_0_EDMA_INT_MASK GENMASK(11, 6) 100 #define APPL_INTR_STATUS_L1_8_0_BW_MGT_INT_STS BIT(2) 101 #define APPL_INTR_STATUS_L1_8_0_AUTO_BW_INT_STS BIT(3) 102 103 #define APPL_INTR_STATUS_L1_9 0x54 104 #define APPL_INTR_STATUS_L1_10 0x58 105 #define APPL_INTR_STATUS_L1_11 0x64 106 #define APPL_INTR_STATUS_L1_13 0x74 107 #define APPL_INTR_STATUS_L1_14 0x78 108 #define APPL_INTR_STATUS_L1_15 0x7C 109 #define APPL_INTR_STATUS_L1_17 0x88 110 111 #define APPL_INTR_EN_L1_18 0x90 112 #define APPL_INTR_EN_L1_18_CDM_REG_CHK_CMPLT BIT(2) 113 #define APPL_INTR_EN_L1_18_CDM_REG_CHK_CMP_ERR BIT(1) 114 #define APPL_INTR_EN_L1_18_CDM_REG_CHK_LOGIC_ERR BIT(0) 115 116 #define APPL_INTR_STATUS_L1_18 0x94 117 #define APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMPLT BIT(2) 118 #define APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMP_ERR BIT(1) 119 #define APPL_INTR_STATUS_L1_18_CDM_REG_CHK_LOGIC_ERR BIT(0) 120 121 #define APPL_MSI_CTRL_1 0xAC 122 123 #define APPL_MSI_CTRL_2 0xB0 124 125 #define APPL_LEGACY_INTX 0xB8 126 127 #define APPL_LTR_MSG_1 0xC4 128 #define LTR_MSG_REQ BIT(15) 129 #define LTR_MST_NO_SNOOP_SHIFT 16 130 131 #define APPL_LTR_MSG_2 0xC8 132 #define APPL_LTR_MSG_2_LTR_MSG_REQ_STATE BIT(3) 133 134 #define APPL_LINK_STATUS 0xCC 135 #define APPL_LINK_STATUS_RDLH_LINK_UP BIT(0) 136 137 #define APPL_DEBUG 0xD0 138 #define APPL_DEBUG_PM_LINKST_IN_L2_LAT BIT(21) 139 #define APPL_DEBUG_PM_LINKST_IN_L0 0x11 140 #define APPL_DEBUG_LTSSM_STATE_MASK GENMASK(8, 3) 141 #define APPL_DEBUG_LTSSM_STATE_SHIFT 3 142 #define LTSSM_STATE_PRE_DETECT 5 143 144 #define APPL_RADM_STATUS 0xE4 145 #define APPL_PM_XMT_TURNOFF_STATE BIT(0) 146 147 #define APPL_DM_TYPE 0x100 148 #define APPL_DM_TYPE_MASK GENMASK(3, 0) 149 #define APPL_DM_TYPE_RP 0x4 150 #define APPL_DM_TYPE_EP 0x0 151 152 #define APPL_CFG_BASE_ADDR 0x104 153 #define APPL_CFG_BASE_ADDR_MASK GENMASK(31, 12) 154 155 #define APPL_CFG_IATU_DMA_BASE_ADDR 0x108 156 #define APPL_CFG_IATU_DMA_BASE_ADDR_MASK GENMASK(31, 18) 157 158 #define APPL_CFG_MISC 0x110 159 #define APPL_CFG_MISC_SLV_EP_MODE BIT(14) 160 #define APPL_CFG_MISC_ARCACHE_MASK GENMASK(13, 10) 161 #define APPL_CFG_MISC_ARCACHE_SHIFT 10 162 #define APPL_CFG_MISC_ARCACHE_VAL 3 163 164 #define APPL_CFG_SLCG_OVERRIDE 0x114 165 #define APPL_CFG_SLCG_OVERRIDE_SLCG_EN_MASTER BIT(0) 166 167 #define APPL_CAR_RESET_OVRD 0x12C 168 #define APPL_CAR_RESET_OVRD_CYA_OVERRIDE_CORE_RST_N BIT(0) 169 170 #define IO_BASE_IO_DECODE BIT(0) 171 #define IO_BASE_IO_DECODE_BIT8 BIT(8) 172 173 #define CFG_PREF_MEM_LIMIT_BASE_MEM_DECODE BIT(0) 174 #define CFG_PREF_MEM_LIMIT_BASE_MEM_LIMIT_DECODE BIT(16) 175 176 #define CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF 0x718 177 #define CFG_TIMER_CTRL_ACK_NAK_SHIFT (19) 178 179 #define N_FTS_VAL 52 180 #define FTS_VAL 52 181 182 #define GEN3_EQ_CONTROL_OFF 0x8a8 183 #define GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_SHIFT 8 184 #define GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_MASK GENMASK(23, 8) 185 #define GEN3_EQ_CONTROL_OFF_FB_MODE_MASK GENMASK(3, 0) 186 187 #define PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT 0x8D0 188 #define AMBA_ERROR_RESPONSE_CRS_SHIFT 3 189 #define AMBA_ERROR_RESPONSE_CRS_MASK GENMASK(1, 0) 190 #define AMBA_ERROR_RESPONSE_CRS_OKAY 0 191 #define AMBA_ERROR_RESPONSE_CRS_OKAY_FFFFFFFF 1 192 #define AMBA_ERROR_RESPONSE_CRS_OKAY_FFFF0001 2 193 194 #define MSIX_ADDR_MATCH_LOW_OFF 0x940 195 #define MSIX_ADDR_MATCH_LOW_OFF_EN BIT(0) 196 #define MSIX_ADDR_MATCH_LOW_OFF_MASK GENMASK(31, 2) 197 198 #define MSIX_ADDR_MATCH_HIGH_OFF 0x944 199 #define MSIX_ADDR_MATCH_HIGH_OFF_MASK GENMASK(31, 0) 200 201 #define PORT_LOGIC_MSIX_DOORBELL 0x948 202 203 #define CAP_SPCIE_CAP_OFF 0x154 204 #define CAP_SPCIE_CAP_OFF_DSP_TX_PRESET0_MASK GENMASK(3, 0) 205 #define CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_MASK GENMASK(11, 8) 206 #define CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_SHIFT 8 207 208 #define PME_ACK_TIMEOUT 10000 209 210 #define LTSSM_TIMEOUT 50000 /* 50ms */ 211 212 #define GEN3_GEN4_EQ_PRESET_INIT 5 213 214 #define GEN1_CORE_CLK_FREQ 62500000 215 #define GEN2_CORE_CLK_FREQ 125000000 216 #define GEN3_CORE_CLK_FREQ 250000000 217 #define GEN4_CORE_CLK_FREQ 500000000 218 219 #define LTR_MSG_TIMEOUT (100 * 1000) 220 221 #define PERST_DEBOUNCE_TIME (5 * 1000) 222 223 #define EP_STATE_DISABLED 0 224 #define EP_STATE_ENABLED 1 225 226 static const unsigned int pcie_gen_freq[] = { 227 GEN1_CORE_CLK_FREQ, 228 GEN2_CORE_CLK_FREQ, 229 GEN3_CORE_CLK_FREQ, 230 GEN4_CORE_CLK_FREQ 231 }; 232 233 struct tegra_pcie_dw_of_data { 234 u32 version; 235 enum dw_pcie_device_mode mode; 236 bool has_msix_doorbell_access_fix; 237 bool has_sbr_reset_fix; 238 bool has_l1ss_exit_fix; 239 bool has_ltr_req_fix; 240 u32 cdm_chk_int_en_bit; 241 u32 gen4_preset_vec; 242 u8 n_fts[2]; 243 }; 244 245 struct tegra_pcie_dw { 246 struct device *dev; 247 struct resource *appl_res; 248 struct resource *dbi_res; 249 struct resource *atu_dma_res; 250 void __iomem *appl_base; 251 struct clk *core_clk; 252 struct reset_control *core_apb_rst; 253 struct reset_control *core_rst; 254 struct dw_pcie pci; 255 struct tegra_bpmp *bpmp; 256 257 struct tegra_pcie_dw_of_data *of_data; 258 259 bool supports_clkreq; 260 bool enable_cdm_check; 261 bool enable_srns; 262 bool link_state; 263 bool update_fc_fixup; 264 bool enable_ext_refclk; 265 u8 init_link_width; 266 u32 msi_ctrl_int; 267 u32 num_lanes; 268 u32 cid; 269 u32 cfg_link_cap_l1sub; 270 u32 ras_des_cap; 271 u32 pcie_cap_base; 272 u32 aspm_cmrt; 273 u32 aspm_pwr_on_t; 274 u32 aspm_l0s_enter_lat; 275 276 struct regulator *pex_ctl_supply; 277 struct regulator *slot_ctl_3v3; 278 struct regulator *slot_ctl_12v; 279 280 unsigned int phy_count; 281 struct phy **phys; 282 283 struct dentry *debugfs; 284 285 /* Endpoint mode specific */ 286 struct gpio_desc *pex_rst_gpiod; 287 struct gpio_desc *pex_refclk_sel_gpiod; 288 unsigned int pex_rst_irq; 289 int ep_state; 290 }; 291 292 static inline struct tegra_pcie_dw *to_tegra_pcie(struct dw_pcie *pci) 293 { 294 return container_of(pci, struct tegra_pcie_dw, pci); 295 } 296 297 static inline void appl_writel(struct tegra_pcie_dw *pcie, const u32 value, 298 const u32 reg) 299 { 300 writel_relaxed(value, pcie->appl_base + reg); 301 } 302 303 static inline u32 appl_readl(struct tegra_pcie_dw *pcie, const u32 reg) 304 { 305 return readl_relaxed(pcie->appl_base + reg); 306 } 307 308 struct tegra_pcie_soc { 309 enum dw_pcie_device_mode mode; 310 }; 311 312 static void apply_bad_link_workaround(struct dw_pcie_rp *pp) 313 { 314 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 315 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 316 u32 current_link_width; 317 u16 val; 318 319 /* 320 * NOTE:- Since this scenario is uncommon and link as such is not 321 * stable anyway, not waiting to confirm if link is really 322 * transitioning to Gen-2 speed 323 */ 324 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA); 325 if (val & PCI_EXP_LNKSTA_LBMS) { 326 current_link_width = (val & PCI_EXP_LNKSTA_NLW) >> 327 PCI_EXP_LNKSTA_NLW_SHIFT; 328 if (pcie->init_link_width > current_link_width) { 329 dev_warn(pci->dev, "PCIe link is bad, width reduced\n"); 330 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + 331 PCI_EXP_LNKCTL2); 332 val &= ~PCI_EXP_LNKCTL2_TLS; 333 val |= PCI_EXP_LNKCTL2_TLS_2_5GT; 334 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + 335 PCI_EXP_LNKCTL2, val); 336 337 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + 338 PCI_EXP_LNKCTL); 339 val |= PCI_EXP_LNKCTL_RL; 340 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + 341 PCI_EXP_LNKCTL, val); 342 } 343 } 344 } 345 346 static irqreturn_t tegra_pcie_rp_irq_handler(int irq, void *arg) 347 { 348 struct tegra_pcie_dw *pcie = arg; 349 struct dw_pcie *pci = &pcie->pci; 350 struct dw_pcie_rp *pp = &pci->pp; 351 u32 val, status_l0, status_l1; 352 u16 val_w; 353 354 status_l0 = appl_readl(pcie, APPL_INTR_STATUS_L0); 355 if (status_l0 & APPL_INTR_STATUS_L0_LINK_STATE_INT) { 356 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_0_0); 357 appl_writel(pcie, status_l1, APPL_INTR_STATUS_L1_0_0); 358 if (!pcie->of_data->has_sbr_reset_fix && 359 status_l1 & APPL_INTR_STATUS_L1_0_0_LINK_REQ_RST_NOT_CHGED) { 360 /* SBR & Surprise Link Down WAR */ 361 val = appl_readl(pcie, APPL_CAR_RESET_OVRD); 362 val &= ~APPL_CAR_RESET_OVRD_CYA_OVERRIDE_CORE_RST_N; 363 appl_writel(pcie, val, APPL_CAR_RESET_OVRD); 364 udelay(1); 365 val = appl_readl(pcie, APPL_CAR_RESET_OVRD); 366 val |= APPL_CAR_RESET_OVRD_CYA_OVERRIDE_CORE_RST_N; 367 appl_writel(pcie, val, APPL_CAR_RESET_OVRD); 368 369 val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL); 370 val |= PORT_LOGIC_SPEED_CHANGE; 371 dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val); 372 } 373 } 374 375 if (status_l0 & APPL_INTR_STATUS_L0_INT_INT) { 376 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_8_0); 377 if (status_l1 & APPL_INTR_STATUS_L1_8_0_AUTO_BW_INT_STS) { 378 appl_writel(pcie, 379 APPL_INTR_STATUS_L1_8_0_AUTO_BW_INT_STS, 380 APPL_INTR_STATUS_L1_8_0); 381 apply_bad_link_workaround(pp); 382 } 383 if (status_l1 & APPL_INTR_STATUS_L1_8_0_BW_MGT_INT_STS) { 384 val_w = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + 385 PCI_EXP_LNKSTA); 386 val_w |= PCI_EXP_LNKSTA_LBMS; 387 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + 388 PCI_EXP_LNKSTA, val_w); 389 390 appl_writel(pcie, 391 APPL_INTR_STATUS_L1_8_0_BW_MGT_INT_STS, 392 APPL_INTR_STATUS_L1_8_0); 393 394 val_w = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + 395 PCI_EXP_LNKSTA); 396 dev_dbg(pci->dev, "Link Speed : Gen-%u\n", val_w & 397 PCI_EXP_LNKSTA_CLS); 398 } 399 } 400 401 if (status_l0 & APPL_INTR_STATUS_L0_CDM_REG_CHK_INT) { 402 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_18); 403 val = dw_pcie_readl_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS); 404 if (status_l1 & APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMPLT) { 405 dev_info(pci->dev, "CDM check complete\n"); 406 val |= PCIE_PL_CHK_REG_CHK_REG_COMPLETE; 407 } 408 if (status_l1 & APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMP_ERR) { 409 dev_err(pci->dev, "CDM comparison mismatch\n"); 410 val |= PCIE_PL_CHK_REG_CHK_REG_COMPARISON_ERROR; 411 } 412 if (status_l1 & APPL_INTR_STATUS_L1_18_CDM_REG_CHK_LOGIC_ERR) { 413 dev_err(pci->dev, "CDM Logic error\n"); 414 val |= PCIE_PL_CHK_REG_CHK_REG_LOGIC_ERROR; 415 } 416 dw_pcie_writel_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS, val); 417 val = dw_pcie_readl_dbi(pci, PCIE_PL_CHK_REG_ERR_ADDR); 418 dev_err(pci->dev, "CDM Error Address Offset = 0x%08X\n", val); 419 } 420 421 return IRQ_HANDLED; 422 } 423 424 static void pex_ep_event_hot_rst_done(struct tegra_pcie_dw *pcie) 425 { 426 u32 val; 427 428 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0); 429 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0); 430 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1); 431 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2); 432 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3); 433 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6); 434 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7); 435 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0); 436 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9); 437 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10); 438 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11); 439 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13); 440 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14); 441 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15); 442 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17); 443 appl_writel(pcie, 0xFFFFFFFF, APPL_MSI_CTRL_2); 444 445 val = appl_readl(pcie, APPL_CTRL); 446 val |= APPL_CTRL_LTSSM_EN; 447 appl_writel(pcie, val, APPL_CTRL); 448 } 449 450 static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg) 451 { 452 struct tegra_pcie_dw *pcie = arg; 453 struct dw_pcie *pci = &pcie->pci; 454 u32 val, speed; 455 456 speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) & 457 PCI_EXP_LNKSTA_CLS; 458 clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]); 459 460 if (pcie->of_data->has_ltr_req_fix) 461 return IRQ_HANDLED; 462 463 /* If EP doesn't advertise L1SS, just return */ 464 val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub); 465 if (!(val & (PCI_L1SS_CAP_ASPM_L1_1 | PCI_L1SS_CAP_ASPM_L1_2))) 466 return IRQ_HANDLED; 467 468 /* Check if BME is set to '1' */ 469 val = dw_pcie_readl_dbi(pci, PCI_COMMAND); 470 if (val & PCI_COMMAND_MASTER) { 471 ktime_t timeout; 472 473 /* 110us for both snoop and no-snoop */ 474 val = 110 | (2 << PCI_LTR_SCALE_SHIFT) | LTR_MSG_REQ; 475 val |= (val << LTR_MST_NO_SNOOP_SHIFT); 476 appl_writel(pcie, val, APPL_LTR_MSG_1); 477 478 /* Send LTR upstream */ 479 val = appl_readl(pcie, APPL_LTR_MSG_2); 480 val |= APPL_LTR_MSG_2_LTR_MSG_REQ_STATE; 481 appl_writel(pcie, val, APPL_LTR_MSG_2); 482 483 timeout = ktime_add_us(ktime_get(), LTR_MSG_TIMEOUT); 484 for (;;) { 485 val = appl_readl(pcie, APPL_LTR_MSG_2); 486 if (!(val & APPL_LTR_MSG_2_LTR_MSG_REQ_STATE)) 487 break; 488 if (ktime_after(ktime_get(), timeout)) 489 break; 490 usleep_range(1000, 1100); 491 } 492 if (val & APPL_LTR_MSG_2_LTR_MSG_REQ_STATE) 493 dev_err(pcie->dev, "Failed to send LTR message\n"); 494 } 495 496 return IRQ_HANDLED; 497 } 498 499 static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg) 500 { 501 struct tegra_pcie_dw *pcie = arg; 502 struct dw_pcie_ep *ep = &pcie->pci.ep; 503 int spurious = 1; 504 u32 status_l0, status_l1, link_status; 505 506 status_l0 = appl_readl(pcie, APPL_INTR_STATUS_L0); 507 if (status_l0 & APPL_INTR_STATUS_L0_LINK_STATE_INT) { 508 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_0_0); 509 appl_writel(pcie, status_l1, APPL_INTR_STATUS_L1_0_0); 510 511 if (status_l1 & APPL_INTR_STATUS_L1_0_0_HOT_RESET_DONE) 512 pex_ep_event_hot_rst_done(pcie); 513 514 if (status_l1 & APPL_INTR_STATUS_L1_0_0_RDLH_LINK_UP_CHGED) { 515 link_status = appl_readl(pcie, APPL_LINK_STATUS); 516 if (link_status & APPL_LINK_STATUS_RDLH_LINK_UP) { 517 dev_dbg(pcie->dev, "Link is up with Host\n"); 518 dw_pcie_ep_linkup(ep); 519 } 520 } 521 522 spurious = 0; 523 } 524 525 if (status_l0 & APPL_INTR_STATUS_L0_PCI_CMD_EN_INT) { 526 status_l1 = appl_readl(pcie, APPL_INTR_STATUS_L1_15); 527 appl_writel(pcie, status_l1, APPL_INTR_STATUS_L1_15); 528 529 if (status_l1 & APPL_INTR_STATUS_L1_15_CFG_BME_CHGED) 530 return IRQ_WAKE_THREAD; 531 532 spurious = 0; 533 } 534 535 if (spurious) { 536 dev_warn(pcie->dev, "Random interrupt (STATUS = 0x%08X)\n", 537 status_l0); 538 appl_writel(pcie, status_l0, APPL_INTR_STATUS_L0); 539 } 540 541 return IRQ_HANDLED; 542 } 543 544 static int tegra_pcie_dw_rd_own_conf(struct pci_bus *bus, u32 devfn, int where, 545 int size, u32 *val) 546 { 547 struct dw_pcie_rp *pp = bus->sysdata; 548 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 549 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 550 551 /* 552 * This is an endpoint mode specific register happen to appear even 553 * when controller is operating in root port mode and system hangs 554 * when it is accessed with link being in ASPM-L1 state. 555 * So skip accessing it altogether 556 */ 557 if (!pcie->of_data->has_msix_doorbell_access_fix && 558 !PCI_SLOT(devfn) && where == PORT_LOGIC_MSIX_DOORBELL) { 559 *val = 0x00000000; 560 return PCIBIOS_SUCCESSFUL; 561 } 562 563 return pci_generic_config_read(bus, devfn, where, size, val); 564 } 565 566 static int tegra_pcie_dw_wr_own_conf(struct pci_bus *bus, u32 devfn, int where, 567 int size, u32 val) 568 { 569 struct dw_pcie_rp *pp = bus->sysdata; 570 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 571 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 572 573 /* 574 * This is an endpoint mode specific register happen to appear even 575 * when controller is operating in root port mode and system hangs 576 * when it is accessed with link being in ASPM-L1 state. 577 * So skip accessing it altogether 578 */ 579 if (!pcie->of_data->has_msix_doorbell_access_fix && 580 !PCI_SLOT(devfn) && where == PORT_LOGIC_MSIX_DOORBELL) 581 return PCIBIOS_SUCCESSFUL; 582 583 return pci_generic_config_write(bus, devfn, where, size, val); 584 } 585 586 static struct pci_ops tegra_pci_ops = { 587 .map_bus = dw_pcie_own_conf_map_bus, 588 .read = tegra_pcie_dw_rd_own_conf, 589 .write = tegra_pcie_dw_wr_own_conf, 590 }; 591 592 #if defined(CONFIG_PCIEASPM) 593 static void disable_aspm_l11(struct tegra_pcie_dw *pcie) 594 { 595 u32 val; 596 597 val = dw_pcie_readl_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub); 598 val &= ~PCI_L1SS_CAP_ASPM_L1_1; 599 dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val); 600 } 601 602 static void disable_aspm_l12(struct tegra_pcie_dw *pcie) 603 { 604 u32 val; 605 606 val = dw_pcie_readl_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub); 607 val &= ~PCI_L1SS_CAP_ASPM_L1_2; 608 dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val); 609 } 610 611 static inline u32 event_counter_prog(struct tegra_pcie_dw *pcie, u32 event) 612 { 613 u32 val; 614 615 val = dw_pcie_readl_dbi(&pcie->pci, pcie->ras_des_cap + 616 PCIE_RAS_DES_EVENT_COUNTER_CONTROL); 617 val &= ~(EVENT_COUNTER_EVENT_SEL_MASK << EVENT_COUNTER_EVENT_SEL_SHIFT); 618 val |= EVENT_COUNTER_GROUP_5 << EVENT_COUNTER_GROUP_SEL_SHIFT; 619 val |= event << EVENT_COUNTER_EVENT_SEL_SHIFT; 620 val |= EVENT_COUNTER_ENABLE_ALL << EVENT_COUNTER_ENABLE_SHIFT; 621 dw_pcie_writel_dbi(&pcie->pci, pcie->ras_des_cap + 622 PCIE_RAS_DES_EVENT_COUNTER_CONTROL, val); 623 val = dw_pcie_readl_dbi(&pcie->pci, pcie->ras_des_cap + 624 PCIE_RAS_DES_EVENT_COUNTER_DATA); 625 626 return val; 627 } 628 629 static int aspm_state_cnt(struct seq_file *s, void *data) 630 { 631 struct tegra_pcie_dw *pcie = (struct tegra_pcie_dw *) 632 dev_get_drvdata(s->private); 633 u32 val; 634 635 seq_printf(s, "Tx L0s entry count : %u\n", 636 event_counter_prog(pcie, EVENT_COUNTER_EVENT_Tx_L0S)); 637 638 seq_printf(s, "Rx L0s entry count : %u\n", 639 event_counter_prog(pcie, EVENT_COUNTER_EVENT_Rx_L0S)); 640 641 seq_printf(s, "Link L1 entry count : %u\n", 642 event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1)); 643 644 seq_printf(s, "Link L1.1 entry count : %u\n", 645 event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1_1)); 646 647 seq_printf(s, "Link L1.2 entry count : %u\n", 648 event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1_2)); 649 650 /* Clear all counters */ 651 dw_pcie_writel_dbi(&pcie->pci, pcie->ras_des_cap + 652 PCIE_RAS_DES_EVENT_COUNTER_CONTROL, 653 EVENT_COUNTER_ALL_CLEAR); 654 655 /* Re-enable counting */ 656 val = EVENT_COUNTER_ENABLE_ALL << EVENT_COUNTER_ENABLE_SHIFT; 657 val |= EVENT_COUNTER_GROUP_5 << EVENT_COUNTER_GROUP_SEL_SHIFT; 658 dw_pcie_writel_dbi(&pcie->pci, pcie->ras_des_cap + 659 PCIE_RAS_DES_EVENT_COUNTER_CONTROL, val); 660 661 return 0; 662 } 663 664 static void init_host_aspm(struct tegra_pcie_dw *pcie) 665 { 666 struct dw_pcie *pci = &pcie->pci; 667 u32 val; 668 669 val = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_L1SS); 670 pcie->cfg_link_cap_l1sub = val + PCI_L1SS_CAP; 671 672 pcie->ras_des_cap = dw_pcie_find_ext_capability(&pcie->pci, 673 PCI_EXT_CAP_ID_VNDR); 674 675 /* Enable ASPM counters */ 676 val = EVENT_COUNTER_ENABLE_ALL << EVENT_COUNTER_ENABLE_SHIFT; 677 val |= EVENT_COUNTER_GROUP_5 << EVENT_COUNTER_GROUP_SEL_SHIFT; 678 dw_pcie_writel_dbi(pci, pcie->ras_des_cap + 679 PCIE_RAS_DES_EVENT_COUNTER_CONTROL, val); 680 681 /* Program T_cmrt and T_pwr_on values */ 682 val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub); 683 val &= ~(PCI_L1SS_CAP_CM_RESTORE_TIME | PCI_L1SS_CAP_P_PWR_ON_VALUE); 684 val |= (pcie->aspm_cmrt << 8); 685 val |= (pcie->aspm_pwr_on_t << 19); 686 dw_pcie_writel_dbi(pci, pcie->cfg_link_cap_l1sub, val); 687 688 /* Program L0s and L1 entrance latencies */ 689 val = dw_pcie_readl_dbi(pci, PCIE_PORT_AFR); 690 val &= ~PORT_AFR_L0S_ENTRANCE_LAT_MASK; 691 val |= (pcie->aspm_l0s_enter_lat << PORT_AFR_L0S_ENTRANCE_LAT_SHIFT); 692 val |= PORT_AFR_ENTER_ASPM; 693 dw_pcie_writel_dbi(pci, PCIE_PORT_AFR, val); 694 } 695 696 static void init_debugfs(struct tegra_pcie_dw *pcie) 697 { 698 debugfs_create_devm_seqfile(pcie->dev, "aspm_state_cnt", pcie->debugfs, 699 aspm_state_cnt); 700 } 701 #else 702 static inline void disable_aspm_l12(struct tegra_pcie_dw *pcie) { return; } 703 static inline void disable_aspm_l11(struct tegra_pcie_dw *pcie) { return; } 704 static inline void init_host_aspm(struct tegra_pcie_dw *pcie) { return; } 705 static inline void init_debugfs(struct tegra_pcie_dw *pcie) { return; } 706 #endif 707 708 static void tegra_pcie_enable_system_interrupts(struct dw_pcie_rp *pp) 709 { 710 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 711 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 712 u32 val; 713 u16 val_w; 714 715 val = appl_readl(pcie, APPL_INTR_EN_L0_0); 716 val |= APPL_INTR_EN_L0_0_LINK_STATE_INT_EN; 717 appl_writel(pcie, val, APPL_INTR_EN_L0_0); 718 719 if (!pcie->of_data->has_sbr_reset_fix) { 720 val = appl_readl(pcie, APPL_INTR_EN_L1_0_0); 721 val |= APPL_INTR_EN_L1_0_0_LINK_REQ_RST_NOT_INT_EN; 722 appl_writel(pcie, val, APPL_INTR_EN_L1_0_0); 723 } 724 725 if (pcie->enable_cdm_check) { 726 val = appl_readl(pcie, APPL_INTR_EN_L0_0); 727 val |= pcie->of_data->cdm_chk_int_en_bit; 728 appl_writel(pcie, val, APPL_INTR_EN_L0_0); 729 730 val = appl_readl(pcie, APPL_INTR_EN_L1_18); 731 val |= APPL_INTR_EN_L1_18_CDM_REG_CHK_CMP_ERR; 732 val |= APPL_INTR_EN_L1_18_CDM_REG_CHK_LOGIC_ERR; 733 appl_writel(pcie, val, APPL_INTR_EN_L1_18); 734 } 735 736 val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base + 737 PCI_EXP_LNKSTA); 738 pcie->init_link_width = (val_w & PCI_EXP_LNKSTA_NLW) >> 739 PCI_EXP_LNKSTA_NLW_SHIFT; 740 741 val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base + 742 PCI_EXP_LNKCTL); 743 val_w |= PCI_EXP_LNKCTL_LBMIE; 744 dw_pcie_writew_dbi(&pcie->pci, pcie->pcie_cap_base + PCI_EXP_LNKCTL, 745 val_w); 746 } 747 748 static void tegra_pcie_enable_legacy_interrupts(struct dw_pcie_rp *pp) 749 { 750 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 751 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 752 u32 val; 753 754 /* Enable legacy interrupt generation */ 755 val = appl_readl(pcie, APPL_INTR_EN_L0_0); 756 val |= APPL_INTR_EN_L0_0_SYS_INTR_EN; 757 val |= APPL_INTR_EN_L0_0_INT_INT_EN; 758 appl_writel(pcie, val, APPL_INTR_EN_L0_0); 759 760 val = appl_readl(pcie, APPL_INTR_EN_L1_8_0); 761 val |= APPL_INTR_EN_L1_8_INTX_EN; 762 val |= APPL_INTR_EN_L1_8_AUTO_BW_INT_EN; 763 val |= APPL_INTR_EN_L1_8_BW_MGT_INT_EN; 764 if (IS_ENABLED(CONFIG_PCIEAER)) 765 val |= APPL_INTR_EN_L1_8_AER_INT_EN; 766 appl_writel(pcie, val, APPL_INTR_EN_L1_8_0); 767 } 768 769 static void tegra_pcie_enable_msi_interrupts(struct dw_pcie_rp *pp) 770 { 771 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 772 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 773 u32 val; 774 775 /* Enable MSI interrupt generation */ 776 val = appl_readl(pcie, APPL_INTR_EN_L0_0); 777 val |= APPL_INTR_EN_L0_0_SYS_MSI_INTR_EN; 778 val |= APPL_INTR_EN_L0_0_MSI_RCV_INT_EN; 779 appl_writel(pcie, val, APPL_INTR_EN_L0_0); 780 } 781 782 static void tegra_pcie_enable_interrupts(struct dw_pcie_rp *pp) 783 { 784 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 785 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 786 787 /* Clear interrupt statuses before enabling interrupts */ 788 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0); 789 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0); 790 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1); 791 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2); 792 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3); 793 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6); 794 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7); 795 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0); 796 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9); 797 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10); 798 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11); 799 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13); 800 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14); 801 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15); 802 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17); 803 804 tegra_pcie_enable_system_interrupts(pp); 805 tegra_pcie_enable_legacy_interrupts(pp); 806 if (IS_ENABLED(CONFIG_PCI_MSI)) 807 tegra_pcie_enable_msi_interrupts(pp); 808 } 809 810 static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie) 811 { 812 struct dw_pcie *pci = &pcie->pci; 813 u32 val, offset, i; 814 815 /* Program init preset */ 816 for (i = 0; i < pcie->num_lanes; i++) { 817 val = dw_pcie_readw_dbi(pci, CAP_SPCIE_CAP_OFF + (i * 2)); 818 val &= ~CAP_SPCIE_CAP_OFF_DSP_TX_PRESET0_MASK; 819 val |= GEN3_GEN4_EQ_PRESET_INIT; 820 val &= ~CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_MASK; 821 val |= (GEN3_GEN4_EQ_PRESET_INIT << 822 CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_SHIFT); 823 dw_pcie_writew_dbi(pci, CAP_SPCIE_CAP_OFF + (i * 2), val); 824 825 offset = dw_pcie_find_ext_capability(pci, 826 PCI_EXT_CAP_ID_PL_16GT) + 827 PCI_PL_16GT_LE_CTRL; 828 val = dw_pcie_readb_dbi(pci, offset + i); 829 val &= ~PCI_PL_16GT_LE_CTRL_DSP_TX_PRESET_MASK; 830 val |= GEN3_GEN4_EQ_PRESET_INIT; 831 val &= ~PCI_PL_16GT_LE_CTRL_USP_TX_PRESET_MASK; 832 val |= (GEN3_GEN4_EQ_PRESET_INIT << 833 PCI_PL_16GT_LE_CTRL_USP_TX_PRESET_SHIFT); 834 dw_pcie_writeb_dbi(pci, offset + i, val); 835 } 836 837 val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF); 838 val &= ~GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK; 839 dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val); 840 841 val = dw_pcie_readl_dbi(pci, GEN3_EQ_CONTROL_OFF); 842 val &= ~GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_MASK; 843 val |= (0x3ff << GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_SHIFT); 844 val &= ~GEN3_EQ_CONTROL_OFF_FB_MODE_MASK; 845 dw_pcie_writel_dbi(pci, GEN3_EQ_CONTROL_OFF, val); 846 847 val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF); 848 val &= ~GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK; 849 val |= (0x1 << GEN3_RELATED_OFF_RATE_SHADOW_SEL_SHIFT); 850 dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val); 851 852 val = dw_pcie_readl_dbi(pci, GEN3_EQ_CONTROL_OFF); 853 val &= ~GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_MASK; 854 val |= (pcie->of_data->gen4_preset_vec << 855 GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_SHIFT); 856 val &= ~GEN3_EQ_CONTROL_OFF_FB_MODE_MASK; 857 dw_pcie_writel_dbi(pci, GEN3_EQ_CONTROL_OFF, val); 858 859 val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF); 860 val &= ~GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK; 861 dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val); 862 } 863 864 static int tegra_pcie_dw_host_init(struct dw_pcie_rp *pp) 865 { 866 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 867 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 868 u32 val; 869 u16 val_16; 870 871 pp->bridge->ops = &tegra_pci_ops; 872 873 if (!pcie->pcie_cap_base) 874 pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci, 875 PCI_CAP_ID_EXP); 876 877 val_16 = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL); 878 val_16 &= ~PCI_EXP_DEVCTL_PAYLOAD; 879 val_16 |= PCI_EXP_DEVCTL_PAYLOAD_256B; 880 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL, val_16); 881 882 val = dw_pcie_readl_dbi(pci, PCI_IO_BASE); 883 val &= ~(IO_BASE_IO_DECODE | IO_BASE_IO_DECODE_BIT8); 884 dw_pcie_writel_dbi(pci, PCI_IO_BASE, val); 885 886 val = dw_pcie_readl_dbi(pci, PCI_PREF_MEMORY_BASE); 887 val |= CFG_PREF_MEM_LIMIT_BASE_MEM_DECODE; 888 val |= CFG_PREF_MEM_LIMIT_BASE_MEM_LIMIT_DECODE; 889 dw_pcie_writel_dbi(pci, PCI_PREF_MEMORY_BASE, val); 890 891 dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0); 892 893 /* Enable as 0xFFFF0001 response for CRS */ 894 val = dw_pcie_readl_dbi(pci, PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT); 895 val &= ~(AMBA_ERROR_RESPONSE_CRS_MASK << AMBA_ERROR_RESPONSE_CRS_SHIFT); 896 val |= (AMBA_ERROR_RESPONSE_CRS_OKAY_FFFF0001 << 897 AMBA_ERROR_RESPONSE_CRS_SHIFT); 898 dw_pcie_writel_dbi(pci, PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT, val); 899 900 /* Configure Max lane width from DT */ 901 val = dw_pcie_readl_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP); 902 val &= ~PCI_EXP_LNKCAP_MLW; 903 val |= (pcie->num_lanes << PCI_EXP_LNKSTA_NLW_SHIFT); 904 dw_pcie_writel_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP, val); 905 906 /* Clear Slot Clock Configuration bit if SRNS configuration */ 907 if (pcie->enable_srns) { 908 val_16 = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + 909 PCI_EXP_LNKSTA); 910 val_16 &= ~PCI_EXP_LNKSTA_SLC; 911 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA, 912 val_16); 913 } 914 915 config_gen3_gen4_eq_presets(pcie); 916 917 init_host_aspm(pcie); 918 919 /* Disable ASPM-L1SS advertisement if there is no CLKREQ routing */ 920 if (!pcie->supports_clkreq) { 921 disable_aspm_l11(pcie); 922 disable_aspm_l12(pcie); 923 } 924 925 if (!pcie->of_data->has_l1ss_exit_fix) { 926 val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF); 927 val &= ~GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL; 928 dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val); 929 } 930 931 if (pcie->update_fc_fixup) { 932 val = dw_pcie_readl_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF); 933 val |= 0x1 << CFG_TIMER_CTRL_ACK_NAK_SHIFT; 934 dw_pcie_writel_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF, val); 935 } 936 937 clk_set_rate(pcie->core_clk, GEN4_CORE_CLK_FREQ); 938 939 return 0; 940 } 941 942 static int tegra_pcie_dw_start_link(struct dw_pcie *pci) 943 { 944 u32 val, offset, speed, tmp; 945 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 946 struct dw_pcie_rp *pp = &pci->pp; 947 bool retry = true; 948 949 if (pcie->of_data->mode == DW_PCIE_EP_TYPE) { 950 enable_irq(pcie->pex_rst_irq); 951 return 0; 952 } 953 954 retry_link: 955 /* Assert RST */ 956 val = appl_readl(pcie, APPL_PINMUX); 957 val &= ~APPL_PINMUX_PEX_RST; 958 appl_writel(pcie, val, APPL_PINMUX); 959 960 usleep_range(100, 200); 961 962 /* Enable LTSSM */ 963 val = appl_readl(pcie, APPL_CTRL); 964 val |= APPL_CTRL_LTSSM_EN; 965 appl_writel(pcie, val, APPL_CTRL); 966 967 /* De-assert RST */ 968 val = appl_readl(pcie, APPL_PINMUX); 969 val |= APPL_PINMUX_PEX_RST; 970 appl_writel(pcie, val, APPL_PINMUX); 971 972 msleep(100); 973 974 if (dw_pcie_wait_for_link(pci)) { 975 if (!retry) 976 return 0; 977 /* 978 * There are some endpoints which can't get the link up if 979 * root port has Data Link Feature (DLF) enabled. 980 * Refer Spec rev 4.0 ver 1.0 sec 3.4.2 & 7.7.4 for more info 981 * on Scaled Flow Control and DLF. 982 * So, need to confirm that is indeed the case here and attempt 983 * link up once again with DLF disabled. 984 */ 985 val = appl_readl(pcie, APPL_DEBUG); 986 val &= APPL_DEBUG_LTSSM_STATE_MASK; 987 val >>= APPL_DEBUG_LTSSM_STATE_SHIFT; 988 tmp = appl_readl(pcie, APPL_LINK_STATUS); 989 tmp &= APPL_LINK_STATUS_RDLH_LINK_UP; 990 if (!(val == 0x11 && !tmp)) { 991 /* Link is down for all good reasons */ 992 return 0; 993 } 994 995 dev_info(pci->dev, "Link is down in DLL"); 996 dev_info(pci->dev, "Trying again with DLFE disabled\n"); 997 /* Disable LTSSM */ 998 val = appl_readl(pcie, APPL_CTRL); 999 val &= ~APPL_CTRL_LTSSM_EN; 1000 appl_writel(pcie, val, APPL_CTRL); 1001 1002 reset_control_assert(pcie->core_rst); 1003 reset_control_deassert(pcie->core_rst); 1004 1005 offset = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_DLF); 1006 val = dw_pcie_readl_dbi(pci, offset + PCI_DLF_CAP); 1007 val &= ~PCI_DLF_EXCHANGE_ENABLE; 1008 dw_pcie_writel_dbi(pci, offset + PCI_DLF_CAP, val); 1009 1010 tegra_pcie_dw_host_init(pp); 1011 dw_pcie_setup_rc(pp); 1012 1013 retry = false; 1014 goto retry_link; 1015 } 1016 1017 speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) & 1018 PCI_EXP_LNKSTA_CLS; 1019 clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]); 1020 1021 tegra_pcie_enable_interrupts(pp); 1022 1023 return 0; 1024 } 1025 1026 static int tegra_pcie_dw_link_up(struct dw_pcie *pci) 1027 { 1028 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 1029 u32 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA); 1030 1031 return !!(val & PCI_EXP_LNKSTA_DLLLA); 1032 } 1033 1034 static void tegra_pcie_dw_stop_link(struct dw_pcie *pci) 1035 { 1036 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 1037 1038 disable_irq(pcie->pex_rst_irq); 1039 } 1040 1041 static const struct dw_pcie_ops tegra_dw_pcie_ops = { 1042 .link_up = tegra_pcie_dw_link_up, 1043 .start_link = tegra_pcie_dw_start_link, 1044 .stop_link = tegra_pcie_dw_stop_link, 1045 }; 1046 1047 static const struct dw_pcie_host_ops tegra_pcie_dw_host_ops = { 1048 .host_init = tegra_pcie_dw_host_init, 1049 }; 1050 1051 static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie) 1052 { 1053 unsigned int phy_count = pcie->phy_count; 1054 1055 while (phy_count--) { 1056 phy_power_off(pcie->phys[phy_count]); 1057 phy_exit(pcie->phys[phy_count]); 1058 } 1059 } 1060 1061 static int tegra_pcie_enable_phy(struct tegra_pcie_dw *pcie) 1062 { 1063 unsigned int i; 1064 int ret; 1065 1066 for (i = 0; i < pcie->phy_count; i++) { 1067 ret = phy_init(pcie->phys[i]); 1068 if (ret < 0) 1069 goto phy_power_off; 1070 1071 ret = phy_power_on(pcie->phys[i]); 1072 if (ret < 0) 1073 goto phy_exit; 1074 } 1075 1076 return 0; 1077 1078 phy_power_off: 1079 while (i--) { 1080 phy_power_off(pcie->phys[i]); 1081 phy_exit: 1082 phy_exit(pcie->phys[i]); 1083 } 1084 1085 return ret; 1086 } 1087 1088 static int tegra_pcie_dw_parse_dt(struct tegra_pcie_dw *pcie) 1089 { 1090 struct platform_device *pdev = to_platform_device(pcie->dev); 1091 struct device_node *np = pcie->dev->of_node; 1092 int ret; 1093 1094 pcie->dbi_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi"); 1095 if (!pcie->dbi_res) { 1096 dev_err(pcie->dev, "Failed to find \"dbi\" region\n"); 1097 return -ENODEV; 1098 } 1099 1100 ret = of_property_read_u32(np, "nvidia,aspm-cmrt-us", &pcie->aspm_cmrt); 1101 if (ret < 0) { 1102 dev_info(pcie->dev, "Failed to read ASPM T_cmrt: %d\n", ret); 1103 return ret; 1104 } 1105 1106 ret = of_property_read_u32(np, "nvidia,aspm-pwr-on-t-us", 1107 &pcie->aspm_pwr_on_t); 1108 if (ret < 0) 1109 dev_info(pcie->dev, "Failed to read ASPM Power On time: %d\n", 1110 ret); 1111 1112 ret = of_property_read_u32(np, "nvidia,aspm-l0s-entrance-latency-us", 1113 &pcie->aspm_l0s_enter_lat); 1114 if (ret < 0) 1115 dev_info(pcie->dev, 1116 "Failed to read ASPM L0s Entrance latency: %d\n", ret); 1117 1118 ret = of_property_read_u32(np, "num-lanes", &pcie->num_lanes); 1119 if (ret < 0) { 1120 dev_err(pcie->dev, "Failed to read num-lanes: %d\n", ret); 1121 return ret; 1122 } 1123 1124 ret = of_property_read_u32_index(np, "nvidia,bpmp", 1, &pcie->cid); 1125 if (ret) { 1126 dev_err(pcie->dev, "Failed to read Controller-ID: %d\n", ret); 1127 return ret; 1128 } 1129 1130 ret = of_property_count_strings(np, "phy-names"); 1131 if (ret < 0) { 1132 dev_err(pcie->dev, "Failed to find PHY entries: %d\n", 1133 ret); 1134 return ret; 1135 } 1136 pcie->phy_count = ret; 1137 1138 if (of_property_read_bool(np, "nvidia,update-fc-fixup")) 1139 pcie->update_fc_fixup = true; 1140 1141 /* RP using an external REFCLK is supported only in Tegra234 */ 1142 if (pcie->of_data->version == TEGRA194_DWC_IP_VER) { 1143 if (pcie->of_data->mode == DW_PCIE_EP_TYPE) 1144 pcie->enable_ext_refclk = true; 1145 } else { 1146 pcie->enable_ext_refclk = 1147 of_property_read_bool(pcie->dev->of_node, 1148 "nvidia,enable-ext-refclk"); 1149 } 1150 1151 pcie->supports_clkreq = 1152 of_property_read_bool(pcie->dev->of_node, "supports-clkreq"); 1153 1154 pcie->enable_cdm_check = 1155 of_property_read_bool(np, "snps,enable-cdm-check"); 1156 1157 if (pcie->of_data->version == TEGRA234_DWC_IP_VER) 1158 pcie->enable_srns = 1159 of_property_read_bool(np, "nvidia,enable-srns"); 1160 1161 if (pcie->of_data->mode == DW_PCIE_RC_TYPE) 1162 return 0; 1163 1164 /* Endpoint mode specific DT entries */ 1165 pcie->pex_rst_gpiod = devm_gpiod_get(pcie->dev, "reset", GPIOD_IN); 1166 if (IS_ERR(pcie->pex_rst_gpiod)) { 1167 int err = PTR_ERR(pcie->pex_rst_gpiod); 1168 const char *level = KERN_ERR; 1169 1170 if (err == -EPROBE_DEFER) 1171 level = KERN_DEBUG; 1172 1173 dev_printk(level, pcie->dev, 1174 dev_fmt("Failed to get PERST GPIO: %d\n"), 1175 err); 1176 return err; 1177 } 1178 1179 pcie->pex_refclk_sel_gpiod = devm_gpiod_get(pcie->dev, 1180 "nvidia,refclk-select", 1181 GPIOD_OUT_HIGH); 1182 if (IS_ERR(pcie->pex_refclk_sel_gpiod)) { 1183 int err = PTR_ERR(pcie->pex_refclk_sel_gpiod); 1184 const char *level = KERN_ERR; 1185 1186 if (err == -EPROBE_DEFER) 1187 level = KERN_DEBUG; 1188 1189 dev_printk(level, pcie->dev, 1190 dev_fmt("Failed to get REFCLK select GPIOs: %d\n"), 1191 err); 1192 pcie->pex_refclk_sel_gpiod = NULL; 1193 } 1194 1195 return 0; 1196 } 1197 1198 static int tegra_pcie_bpmp_set_ctrl_state(struct tegra_pcie_dw *pcie, 1199 bool enable) 1200 { 1201 struct mrq_uphy_response resp; 1202 struct tegra_bpmp_message msg; 1203 struct mrq_uphy_request req; 1204 1205 /* 1206 * Controller-5 doesn't need to have its state set by BPMP-FW in 1207 * Tegra194 1208 */ 1209 if (pcie->of_data->version == TEGRA194_DWC_IP_VER && pcie->cid == 5) 1210 return 0; 1211 1212 memset(&req, 0, sizeof(req)); 1213 memset(&resp, 0, sizeof(resp)); 1214 1215 req.cmd = CMD_UPHY_PCIE_CONTROLLER_STATE; 1216 req.controller_state.pcie_controller = pcie->cid; 1217 req.controller_state.enable = enable; 1218 1219 memset(&msg, 0, sizeof(msg)); 1220 msg.mrq = MRQ_UPHY; 1221 msg.tx.data = &req; 1222 msg.tx.size = sizeof(req); 1223 msg.rx.data = &resp; 1224 msg.rx.size = sizeof(resp); 1225 1226 return tegra_bpmp_transfer(pcie->bpmp, &msg); 1227 } 1228 1229 static int tegra_pcie_bpmp_set_pll_state(struct tegra_pcie_dw *pcie, 1230 bool enable) 1231 { 1232 struct mrq_uphy_response resp; 1233 struct tegra_bpmp_message msg; 1234 struct mrq_uphy_request req; 1235 1236 memset(&req, 0, sizeof(req)); 1237 memset(&resp, 0, sizeof(resp)); 1238 1239 if (enable) { 1240 req.cmd = CMD_UPHY_PCIE_EP_CONTROLLER_PLL_INIT; 1241 req.ep_ctrlr_pll_init.ep_controller = pcie->cid; 1242 } else { 1243 req.cmd = CMD_UPHY_PCIE_EP_CONTROLLER_PLL_OFF; 1244 req.ep_ctrlr_pll_off.ep_controller = pcie->cid; 1245 } 1246 1247 memset(&msg, 0, sizeof(msg)); 1248 msg.mrq = MRQ_UPHY; 1249 msg.tx.data = &req; 1250 msg.tx.size = sizeof(req); 1251 msg.rx.data = &resp; 1252 msg.rx.size = sizeof(resp); 1253 1254 return tegra_bpmp_transfer(pcie->bpmp, &msg); 1255 } 1256 1257 static void tegra_pcie_downstream_dev_to_D0(struct tegra_pcie_dw *pcie) 1258 { 1259 struct dw_pcie_rp *pp = &pcie->pci.pp; 1260 struct pci_bus *child, *root_bus = NULL; 1261 struct pci_dev *pdev; 1262 1263 /* 1264 * link doesn't go into L2 state with some of the endpoints with Tegra 1265 * if they are not in D0 state. So, need to make sure that immediate 1266 * downstream devices are in D0 state before sending PME_TurnOff to put 1267 * link into L2 state. 1268 * This is as per PCI Express Base r4.0 v1.0 September 27-2017, 1269 * 5.2 Link State Power Management (Page #428). 1270 */ 1271 1272 list_for_each_entry(child, &pp->bridge->bus->children, node) { 1273 /* Bring downstream devices to D0 if they are not already in */ 1274 if (child->parent == pp->bridge->bus) { 1275 root_bus = child; 1276 break; 1277 } 1278 } 1279 1280 if (!root_bus) { 1281 dev_err(pcie->dev, "Failed to find downstream devices\n"); 1282 return; 1283 } 1284 1285 list_for_each_entry(pdev, &root_bus->devices, bus_list) { 1286 if (PCI_SLOT(pdev->devfn) == 0) { 1287 if (pci_set_power_state(pdev, PCI_D0)) 1288 dev_err(pcie->dev, 1289 "Failed to transition %s to D0 state\n", 1290 dev_name(&pdev->dev)); 1291 } 1292 } 1293 } 1294 1295 static int tegra_pcie_get_slot_regulators(struct tegra_pcie_dw *pcie) 1296 { 1297 pcie->slot_ctl_3v3 = devm_regulator_get_optional(pcie->dev, "vpcie3v3"); 1298 if (IS_ERR(pcie->slot_ctl_3v3)) { 1299 if (PTR_ERR(pcie->slot_ctl_3v3) != -ENODEV) 1300 return PTR_ERR(pcie->slot_ctl_3v3); 1301 1302 pcie->slot_ctl_3v3 = NULL; 1303 } 1304 1305 pcie->slot_ctl_12v = devm_regulator_get_optional(pcie->dev, "vpcie12v"); 1306 if (IS_ERR(pcie->slot_ctl_12v)) { 1307 if (PTR_ERR(pcie->slot_ctl_12v) != -ENODEV) 1308 return PTR_ERR(pcie->slot_ctl_12v); 1309 1310 pcie->slot_ctl_12v = NULL; 1311 } 1312 1313 return 0; 1314 } 1315 1316 static int tegra_pcie_enable_slot_regulators(struct tegra_pcie_dw *pcie) 1317 { 1318 int ret; 1319 1320 if (pcie->slot_ctl_3v3) { 1321 ret = regulator_enable(pcie->slot_ctl_3v3); 1322 if (ret < 0) { 1323 dev_err(pcie->dev, 1324 "Failed to enable 3.3V slot supply: %d\n", ret); 1325 return ret; 1326 } 1327 } 1328 1329 if (pcie->slot_ctl_12v) { 1330 ret = regulator_enable(pcie->slot_ctl_12v); 1331 if (ret < 0) { 1332 dev_err(pcie->dev, 1333 "Failed to enable 12V slot supply: %d\n", ret); 1334 goto fail_12v_enable; 1335 } 1336 } 1337 1338 /* 1339 * According to PCI Express Card Electromechanical Specification 1340 * Revision 1.1, Table-2.4, T_PVPERL (Power stable to PERST# inactive) 1341 * should be a minimum of 100ms. 1342 */ 1343 if (pcie->slot_ctl_3v3 || pcie->slot_ctl_12v) 1344 msleep(100); 1345 1346 return 0; 1347 1348 fail_12v_enable: 1349 if (pcie->slot_ctl_3v3) 1350 regulator_disable(pcie->slot_ctl_3v3); 1351 return ret; 1352 } 1353 1354 static void tegra_pcie_disable_slot_regulators(struct tegra_pcie_dw *pcie) 1355 { 1356 if (pcie->slot_ctl_12v) 1357 regulator_disable(pcie->slot_ctl_12v); 1358 if (pcie->slot_ctl_3v3) 1359 regulator_disable(pcie->slot_ctl_3v3); 1360 } 1361 1362 static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie, 1363 bool en_hw_hot_rst) 1364 { 1365 int ret; 1366 u32 val; 1367 1368 ret = tegra_pcie_bpmp_set_ctrl_state(pcie, true); 1369 if (ret) { 1370 dev_err(pcie->dev, 1371 "Failed to enable controller %u: %d\n", pcie->cid, ret); 1372 return ret; 1373 } 1374 1375 if (pcie->enable_ext_refclk) { 1376 ret = tegra_pcie_bpmp_set_pll_state(pcie, true); 1377 if (ret) { 1378 dev_err(pcie->dev, "Failed to init UPHY: %d\n", ret); 1379 goto fail_pll_init; 1380 } 1381 } 1382 1383 ret = tegra_pcie_enable_slot_regulators(pcie); 1384 if (ret < 0) 1385 goto fail_slot_reg_en; 1386 1387 ret = regulator_enable(pcie->pex_ctl_supply); 1388 if (ret < 0) { 1389 dev_err(pcie->dev, "Failed to enable regulator: %d\n", ret); 1390 goto fail_reg_en; 1391 } 1392 1393 ret = clk_prepare_enable(pcie->core_clk); 1394 if (ret) { 1395 dev_err(pcie->dev, "Failed to enable core clock: %d\n", ret); 1396 goto fail_core_clk; 1397 } 1398 1399 ret = reset_control_deassert(pcie->core_apb_rst); 1400 if (ret) { 1401 dev_err(pcie->dev, "Failed to deassert core APB reset: %d\n", 1402 ret); 1403 goto fail_core_apb_rst; 1404 } 1405 1406 if (en_hw_hot_rst || pcie->of_data->has_sbr_reset_fix) { 1407 /* Enable HW_HOT_RST mode */ 1408 val = appl_readl(pcie, APPL_CTRL); 1409 val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK << 1410 APPL_CTRL_HW_HOT_RST_MODE_SHIFT); 1411 val |= (APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST_LTSSM_EN << 1412 APPL_CTRL_HW_HOT_RST_MODE_SHIFT); 1413 val |= APPL_CTRL_HW_HOT_RST_EN; 1414 appl_writel(pcie, val, APPL_CTRL); 1415 } 1416 1417 ret = tegra_pcie_enable_phy(pcie); 1418 if (ret) { 1419 dev_err(pcie->dev, "Failed to enable PHY: %d\n", ret); 1420 goto fail_phy; 1421 } 1422 1423 /* Update CFG base address */ 1424 appl_writel(pcie, pcie->dbi_res->start & APPL_CFG_BASE_ADDR_MASK, 1425 APPL_CFG_BASE_ADDR); 1426 1427 /* Configure this core for RP mode operation */ 1428 appl_writel(pcie, APPL_DM_TYPE_RP, APPL_DM_TYPE); 1429 1430 appl_writel(pcie, 0x0, APPL_CFG_SLCG_OVERRIDE); 1431 1432 val = appl_readl(pcie, APPL_CTRL); 1433 appl_writel(pcie, val | APPL_CTRL_SYS_PRE_DET_STATE, APPL_CTRL); 1434 1435 val = appl_readl(pcie, APPL_CFG_MISC); 1436 val |= (APPL_CFG_MISC_ARCACHE_VAL << APPL_CFG_MISC_ARCACHE_SHIFT); 1437 appl_writel(pcie, val, APPL_CFG_MISC); 1438 1439 if (pcie->enable_srns || pcie->enable_ext_refclk) { 1440 /* 1441 * When Tegra PCIe RP is using external clock, it cannot supply 1442 * same clock to its downstream hierarchy. Hence, gate PCIe RP 1443 * REFCLK out pads when RP & EP are using separate clocks or RP 1444 * is using an external REFCLK. 1445 */ 1446 val = appl_readl(pcie, APPL_PINMUX); 1447 val |= APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE_EN; 1448 val &= ~APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE; 1449 appl_writel(pcie, val, APPL_PINMUX); 1450 } 1451 1452 if (!pcie->supports_clkreq) { 1453 val = appl_readl(pcie, APPL_PINMUX); 1454 val |= APPL_PINMUX_CLKREQ_OVERRIDE_EN; 1455 val &= ~APPL_PINMUX_CLKREQ_OVERRIDE; 1456 appl_writel(pcie, val, APPL_PINMUX); 1457 } 1458 1459 /* Update iATU_DMA base address */ 1460 appl_writel(pcie, 1461 pcie->atu_dma_res->start & APPL_CFG_IATU_DMA_BASE_ADDR_MASK, 1462 APPL_CFG_IATU_DMA_BASE_ADDR); 1463 1464 reset_control_deassert(pcie->core_rst); 1465 1466 return ret; 1467 1468 fail_phy: 1469 reset_control_assert(pcie->core_apb_rst); 1470 fail_core_apb_rst: 1471 clk_disable_unprepare(pcie->core_clk); 1472 fail_core_clk: 1473 regulator_disable(pcie->pex_ctl_supply); 1474 fail_reg_en: 1475 tegra_pcie_disable_slot_regulators(pcie); 1476 fail_slot_reg_en: 1477 if (pcie->enable_ext_refclk) 1478 tegra_pcie_bpmp_set_pll_state(pcie, false); 1479 fail_pll_init: 1480 tegra_pcie_bpmp_set_ctrl_state(pcie, false); 1481 1482 return ret; 1483 } 1484 1485 static void tegra_pcie_unconfig_controller(struct tegra_pcie_dw *pcie) 1486 { 1487 int ret; 1488 1489 ret = reset_control_assert(pcie->core_rst); 1490 if (ret) 1491 dev_err(pcie->dev, "Failed to assert \"core\" reset: %d\n", ret); 1492 1493 tegra_pcie_disable_phy(pcie); 1494 1495 ret = reset_control_assert(pcie->core_apb_rst); 1496 if (ret) 1497 dev_err(pcie->dev, "Failed to assert APB reset: %d\n", ret); 1498 1499 clk_disable_unprepare(pcie->core_clk); 1500 1501 ret = regulator_disable(pcie->pex_ctl_supply); 1502 if (ret) 1503 dev_err(pcie->dev, "Failed to disable regulator: %d\n", ret); 1504 1505 tegra_pcie_disable_slot_regulators(pcie); 1506 1507 if (pcie->enable_ext_refclk) { 1508 ret = tegra_pcie_bpmp_set_pll_state(pcie, false); 1509 if (ret) 1510 dev_err(pcie->dev, "Failed to deinit UPHY: %d\n", ret); 1511 } 1512 1513 ret = tegra_pcie_bpmp_set_ctrl_state(pcie, false); 1514 if (ret) 1515 dev_err(pcie->dev, "Failed to disable controller %d: %d\n", 1516 pcie->cid, ret); 1517 } 1518 1519 static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie) 1520 { 1521 struct dw_pcie *pci = &pcie->pci; 1522 struct dw_pcie_rp *pp = &pci->pp; 1523 int ret; 1524 1525 ret = tegra_pcie_config_controller(pcie, false); 1526 if (ret < 0) 1527 return ret; 1528 1529 pp->ops = &tegra_pcie_dw_host_ops; 1530 1531 ret = dw_pcie_host_init(pp); 1532 if (ret < 0) { 1533 dev_err(pcie->dev, "Failed to add PCIe port: %d\n", ret); 1534 goto fail_host_init; 1535 } 1536 1537 return 0; 1538 1539 fail_host_init: 1540 tegra_pcie_unconfig_controller(pcie); 1541 return ret; 1542 } 1543 1544 static int tegra_pcie_try_link_l2(struct tegra_pcie_dw *pcie) 1545 { 1546 u32 val; 1547 1548 if (!tegra_pcie_dw_link_up(&pcie->pci)) 1549 return 0; 1550 1551 val = appl_readl(pcie, APPL_RADM_STATUS); 1552 val |= APPL_PM_XMT_TURNOFF_STATE; 1553 appl_writel(pcie, val, APPL_RADM_STATUS); 1554 1555 return readl_poll_timeout_atomic(pcie->appl_base + APPL_DEBUG, val, 1556 val & APPL_DEBUG_PM_LINKST_IN_L2_LAT, 1557 1, PME_ACK_TIMEOUT); 1558 } 1559 1560 static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie) 1561 { 1562 u32 data; 1563 int err; 1564 1565 if (!tegra_pcie_dw_link_up(&pcie->pci)) { 1566 dev_dbg(pcie->dev, "PCIe link is not up...!\n"); 1567 return; 1568 } 1569 1570 /* 1571 * PCIe controller exits from L2 only if reset is applied, so 1572 * controller doesn't handle interrupts. But in cases where 1573 * L2 entry fails, PERST# is asserted which can trigger surprise 1574 * link down AER. However this function call happens in 1575 * suspend_noirq(), so AER interrupt will not be processed. 1576 * Disable all interrupts to avoid such a scenario. 1577 */ 1578 appl_writel(pcie, 0x0, APPL_INTR_EN_L0_0); 1579 1580 if (tegra_pcie_try_link_l2(pcie)) { 1581 dev_info(pcie->dev, "Link didn't transition to L2 state\n"); 1582 /* 1583 * TX lane clock freq will reset to Gen1 only if link is in L2 1584 * or detect state. 1585 * So apply pex_rst to end point to force RP to go into detect 1586 * state 1587 */ 1588 data = appl_readl(pcie, APPL_PINMUX); 1589 data &= ~APPL_PINMUX_PEX_RST; 1590 appl_writel(pcie, data, APPL_PINMUX); 1591 1592 /* 1593 * Some cards do not go to detect state even after de-asserting 1594 * PERST#. So, de-assert LTSSM to bring link to detect state. 1595 */ 1596 data = readl(pcie->appl_base + APPL_CTRL); 1597 data &= ~APPL_CTRL_LTSSM_EN; 1598 writel(data, pcie->appl_base + APPL_CTRL); 1599 1600 err = readl_poll_timeout_atomic(pcie->appl_base + APPL_DEBUG, 1601 data, 1602 ((data & 1603 APPL_DEBUG_LTSSM_STATE_MASK) >> 1604 APPL_DEBUG_LTSSM_STATE_SHIFT) == 1605 LTSSM_STATE_PRE_DETECT, 1606 1, LTSSM_TIMEOUT); 1607 if (err) 1608 dev_info(pcie->dev, "Link didn't go to detect state\n"); 1609 } 1610 /* 1611 * DBI registers may not be accessible after this as PLL-E would be 1612 * down depending on how CLKREQ is pulled by end point 1613 */ 1614 data = appl_readl(pcie, APPL_PINMUX); 1615 data |= (APPL_PINMUX_CLKREQ_OVERRIDE_EN | APPL_PINMUX_CLKREQ_OVERRIDE); 1616 /* Cut REFCLK to slot */ 1617 data |= APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE_EN; 1618 data &= ~APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE; 1619 appl_writel(pcie, data, APPL_PINMUX); 1620 } 1621 1622 static void tegra_pcie_deinit_controller(struct tegra_pcie_dw *pcie) 1623 { 1624 tegra_pcie_downstream_dev_to_D0(pcie); 1625 dw_pcie_host_deinit(&pcie->pci.pp); 1626 tegra_pcie_dw_pme_turnoff(pcie); 1627 tegra_pcie_unconfig_controller(pcie); 1628 } 1629 1630 static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie) 1631 { 1632 struct device *dev = pcie->dev; 1633 char *name; 1634 int ret; 1635 1636 pm_runtime_enable(dev); 1637 1638 ret = pm_runtime_get_sync(dev); 1639 if (ret < 0) { 1640 dev_err(dev, "Failed to get runtime sync for PCIe dev: %d\n", 1641 ret); 1642 goto fail_pm_get_sync; 1643 } 1644 1645 ret = pinctrl_pm_select_default_state(dev); 1646 if (ret < 0) { 1647 dev_err(dev, "Failed to configure sideband pins: %d\n", ret); 1648 goto fail_pm_get_sync; 1649 } 1650 1651 ret = tegra_pcie_init_controller(pcie); 1652 if (ret < 0) { 1653 dev_err(dev, "Failed to initialize controller: %d\n", ret); 1654 goto fail_pm_get_sync; 1655 } 1656 1657 pcie->link_state = tegra_pcie_dw_link_up(&pcie->pci); 1658 if (!pcie->link_state) { 1659 ret = -ENOMEDIUM; 1660 goto fail_host_init; 1661 } 1662 1663 name = devm_kasprintf(dev, GFP_KERNEL, "%pOFP", dev->of_node); 1664 if (!name) { 1665 ret = -ENOMEM; 1666 goto fail_host_init; 1667 } 1668 1669 pcie->debugfs = debugfs_create_dir(name, NULL); 1670 init_debugfs(pcie); 1671 1672 return ret; 1673 1674 fail_host_init: 1675 tegra_pcie_deinit_controller(pcie); 1676 fail_pm_get_sync: 1677 pm_runtime_put_sync(dev); 1678 pm_runtime_disable(dev); 1679 return ret; 1680 } 1681 1682 static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie) 1683 { 1684 u32 val; 1685 int ret; 1686 1687 if (pcie->ep_state == EP_STATE_DISABLED) 1688 return; 1689 1690 /* Disable LTSSM */ 1691 val = appl_readl(pcie, APPL_CTRL); 1692 val &= ~APPL_CTRL_LTSSM_EN; 1693 appl_writel(pcie, val, APPL_CTRL); 1694 1695 ret = readl_poll_timeout(pcie->appl_base + APPL_DEBUG, val, 1696 ((val & APPL_DEBUG_LTSSM_STATE_MASK) >> 1697 APPL_DEBUG_LTSSM_STATE_SHIFT) == 1698 LTSSM_STATE_PRE_DETECT, 1699 1, LTSSM_TIMEOUT); 1700 if (ret) 1701 dev_err(pcie->dev, "Failed to go Detect state: %d\n", ret); 1702 1703 reset_control_assert(pcie->core_rst); 1704 1705 tegra_pcie_disable_phy(pcie); 1706 1707 reset_control_assert(pcie->core_apb_rst); 1708 1709 clk_disable_unprepare(pcie->core_clk); 1710 1711 pm_runtime_put_sync(pcie->dev); 1712 1713 if (pcie->enable_ext_refclk) { 1714 ret = tegra_pcie_bpmp_set_pll_state(pcie, false); 1715 if (ret) 1716 dev_err(pcie->dev, "Failed to turn off UPHY: %d\n", 1717 ret); 1718 } 1719 1720 ret = tegra_pcie_bpmp_set_pll_state(pcie, false); 1721 if (ret) 1722 dev_err(pcie->dev, "Failed to turn off UPHY: %d\n", ret); 1723 1724 pcie->ep_state = EP_STATE_DISABLED; 1725 dev_dbg(pcie->dev, "Uninitialization of endpoint is completed\n"); 1726 } 1727 1728 static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie) 1729 { 1730 struct dw_pcie *pci = &pcie->pci; 1731 struct dw_pcie_ep *ep = &pci->ep; 1732 struct device *dev = pcie->dev; 1733 u32 val; 1734 int ret; 1735 u16 val_16; 1736 1737 if (pcie->ep_state == EP_STATE_ENABLED) 1738 return; 1739 1740 ret = pm_runtime_resume_and_get(dev); 1741 if (ret < 0) { 1742 dev_err(dev, "Failed to get runtime sync for PCIe dev: %d\n", 1743 ret); 1744 return; 1745 } 1746 1747 ret = tegra_pcie_bpmp_set_ctrl_state(pcie, true); 1748 if (ret) { 1749 dev_err(pcie->dev, "Failed to enable controller %u: %d\n", 1750 pcie->cid, ret); 1751 goto fail_set_ctrl_state; 1752 } 1753 1754 if (pcie->enable_ext_refclk) { 1755 ret = tegra_pcie_bpmp_set_pll_state(pcie, true); 1756 if (ret) { 1757 dev_err(dev, "Failed to init UPHY for PCIe EP: %d\n", 1758 ret); 1759 goto fail_pll_init; 1760 } 1761 } 1762 1763 ret = clk_prepare_enable(pcie->core_clk); 1764 if (ret) { 1765 dev_err(dev, "Failed to enable core clock: %d\n", ret); 1766 goto fail_core_clk_enable; 1767 } 1768 1769 ret = reset_control_deassert(pcie->core_apb_rst); 1770 if (ret) { 1771 dev_err(dev, "Failed to deassert core APB reset: %d\n", ret); 1772 goto fail_core_apb_rst; 1773 } 1774 1775 ret = tegra_pcie_enable_phy(pcie); 1776 if (ret) { 1777 dev_err(dev, "Failed to enable PHY: %d\n", ret); 1778 goto fail_phy; 1779 } 1780 1781 /* Clear any stale interrupt statuses */ 1782 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0); 1783 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0); 1784 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1); 1785 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2); 1786 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3); 1787 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6); 1788 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7); 1789 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0); 1790 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9); 1791 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10); 1792 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11); 1793 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13); 1794 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14); 1795 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15); 1796 appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17); 1797 1798 /* configure this core for EP mode operation */ 1799 val = appl_readl(pcie, APPL_DM_TYPE); 1800 val &= ~APPL_DM_TYPE_MASK; 1801 val |= APPL_DM_TYPE_EP; 1802 appl_writel(pcie, val, APPL_DM_TYPE); 1803 1804 appl_writel(pcie, 0x0, APPL_CFG_SLCG_OVERRIDE); 1805 1806 val = appl_readl(pcie, APPL_CTRL); 1807 val |= APPL_CTRL_SYS_PRE_DET_STATE; 1808 val |= APPL_CTRL_HW_HOT_RST_EN; 1809 appl_writel(pcie, val, APPL_CTRL); 1810 1811 val = appl_readl(pcie, APPL_CFG_MISC); 1812 val |= APPL_CFG_MISC_SLV_EP_MODE; 1813 val |= (APPL_CFG_MISC_ARCACHE_VAL << APPL_CFG_MISC_ARCACHE_SHIFT); 1814 appl_writel(pcie, val, APPL_CFG_MISC); 1815 1816 val = appl_readl(pcie, APPL_PINMUX); 1817 val |= APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE_EN; 1818 val |= APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE; 1819 appl_writel(pcie, val, APPL_PINMUX); 1820 1821 appl_writel(pcie, pcie->dbi_res->start & APPL_CFG_BASE_ADDR_MASK, 1822 APPL_CFG_BASE_ADDR); 1823 1824 appl_writel(pcie, pcie->atu_dma_res->start & 1825 APPL_CFG_IATU_DMA_BASE_ADDR_MASK, 1826 APPL_CFG_IATU_DMA_BASE_ADDR); 1827 1828 val = appl_readl(pcie, APPL_INTR_EN_L0_0); 1829 val |= APPL_INTR_EN_L0_0_SYS_INTR_EN; 1830 val |= APPL_INTR_EN_L0_0_LINK_STATE_INT_EN; 1831 val |= APPL_INTR_EN_L0_0_PCI_CMD_EN_INT_EN; 1832 appl_writel(pcie, val, APPL_INTR_EN_L0_0); 1833 1834 val = appl_readl(pcie, APPL_INTR_EN_L1_0_0); 1835 val |= APPL_INTR_EN_L1_0_0_HOT_RESET_DONE_INT_EN; 1836 val |= APPL_INTR_EN_L1_0_0_RDLH_LINK_UP_INT_EN; 1837 appl_writel(pcie, val, APPL_INTR_EN_L1_0_0); 1838 1839 reset_control_deassert(pcie->core_rst); 1840 1841 if (pcie->update_fc_fixup) { 1842 val = dw_pcie_readl_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF); 1843 val |= 0x1 << CFG_TIMER_CTRL_ACK_NAK_SHIFT; 1844 dw_pcie_writel_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF, val); 1845 } 1846 1847 config_gen3_gen4_eq_presets(pcie); 1848 1849 init_host_aspm(pcie); 1850 1851 /* Disable ASPM-L1SS advertisement if there is no CLKREQ routing */ 1852 if (!pcie->supports_clkreq) { 1853 disable_aspm_l11(pcie); 1854 disable_aspm_l12(pcie); 1855 } 1856 1857 if (!pcie->of_data->has_l1ss_exit_fix) { 1858 val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF); 1859 val &= ~GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL; 1860 dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val); 1861 } 1862 1863 pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci, 1864 PCI_CAP_ID_EXP); 1865 1866 val_16 = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL); 1867 val_16 &= ~PCI_EXP_DEVCTL_PAYLOAD; 1868 val_16 |= PCI_EXP_DEVCTL_PAYLOAD_256B; 1869 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL, val_16); 1870 1871 /* Clear Slot Clock Configuration bit if SRNS configuration */ 1872 if (pcie->enable_srns) { 1873 val_16 = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + 1874 PCI_EXP_LNKSTA); 1875 val_16 &= ~PCI_EXP_LNKSTA_SLC; 1876 dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA, 1877 val_16); 1878 } 1879 1880 clk_set_rate(pcie->core_clk, GEN4_CORE_CLK_FREQ); 1881 1882 val = (ep->msi_mem_phys & MSIX_ADDR_MATCH_LOW_OFF_MASK); 1883 val |= MSIX_ADDR_MATCH_LOW_OFF_EN; 1884 dw_pcie_writel_dbi(pci, MSIX_ADDR_MATCH_LOW_OFF, val); 1885 val = (upper_32_bits(ep->msi_mem_phys) & MSIX_ADDR_MATCH_HIGH_OFF_MASK); 1886 dw_pcie_writel_dbi(pci, MSIX_ADDR_MATCH_HIGH_OFF, val); 1887 1888 ret = dw_pcie_ep_init_complete(ep); 1889 if (ret) { 1890 dev_err(dev, "Failed to complete initialization: %d\n", ret); 1891 goto fail_init_complete; 1892 } 1893 1894 dw_pcie_ep_init_notify(ep); 1895 1896 /* Program the private control to allow sending LTR upstream */ 1897 if (pcie->of_data->has_ltr_req_fix) { 1898 val = appl_readl(pcie, APPL_LTR_MSG_2); 1899 val |= APPL_LTR_MSG_2_LTR_MSG_REQ_STATE; 1900 appl_writel(pcie, val, APPL_LTR_MSG_2); 1901 } 1902 1903 /* Enable LTSSM */ 1904 val = appl_readl(pcie, APPL_CTRL); 1905 val |= APPL_CTRL_LTSSM_EN; 1906 appl_writel(pcie, val, APPL_CTRL); 1907 1908 pcie->ep_state = EP_STATE_ENABLED; 1909 dev_dbg(dev, "Initialization of endpoint is completed\n"); 1910 1911 return; 1912 1913 fail_init_complete: 1914 reset_control_assert(pcie->core_rst); 1915 tegra_pcie_disable_phy(pcie); 1916 fail_phy: 1917 reset_control_assert(pcie->core_apb_rst); 1918 fail_core_apb_rst: 1919 clk_disable_unprepare(pcie->core_clk); 1920 fail_core_clk_enable: 1921 tegra_pcie_bpmp_set_pll_state(pcie, false); 1922 fail_pll_init: 1923 tegra_pcie_bpmp_set_ctrl_state(pcie, false); 1924 fail_set_ctrl_state: 1925 pm_runtime_put_sync(dev); 1926 } 1927 1928 static irqreturn_t tegra_pcie_ep_pex_rst_irq(int irq, void *arg) 1929 { 1930 struct tegra_pcie_dw *pcie = arg; 1931 1932 if (gpiod_get_value(pcie->pex_rst_gpiod)) 1933 pex_ep_event_pex_rst_assert(pcie); 1934 else 1935 pex_ep_event_pex_rst_deassert(pcie); 1936 1937 return IRQ_HANDLED; 1938 } 1939 1940 static int tegra_pcie_ep_raise_legacy_irq(struct tegra_pcie_dw *pcie, u16 irq) 1941 { 1942 /* Tegra194 supports only INTA */ 1943 if (irq > 1) 1944 return -EINVAL; 1945 1946 appl_writel(pcie, 1, APPL_LEGACY_INTX); 1947 usleep_range(1000, 2000); 1948 appl_writel(pcie, 0, APPL_LEGACY_INTX); 1949 return 0; 1950 } 1951 1952 static int tegra_pcie_ep_raise_msi_irq(struct tegra_pcie_dw *pcie, u16 irq) 1953 { 1954 if (unlikely(irq > 31)) 1955 return -EINVAL; 1956 1957 appl_writel(pcie, BIT(irq), APPL_MSI_CTRL_1); 1958 1959 return 0; 1960 } 1961 1962 static int tegra_pcie_ep_raise_msix_irq(struct tegra_pcie_dw *pcie, u16 irq) 1963 { 1964 struct dw_pcie_ep *ep = &pcie->pci.ep; 1965 1966 writel(irq, ep->msi_mem); 1967 1968 return 0; 1969 } 1970 1971 static int tegra_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no, 1972 enum pci_epc_irq_type type, 1973 u16 interrupt_num) 1974 { 1975 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); 1976 struct tegra_pcie_dw *pcie = to_tegra_pcie(pci); 1977 1978 switch (type) { 1979 case PCI_EPC_IRQ_LEGACY: 1980 return tegra_pcie_ep_raise_legacy_irq(pcie, interrupt_num); 1981 1982 case PCI_EPC_IRQ_MSI: 1983 return tegra_pcie_ep_raise_msi_irq(pcie, interrupt_num); 1984 1985 case PCI_EPC_IRQ_MSIX: 1986 return tegra_pcie_ep_raise_msix_irq(pcie, interrupt_num); 1987 1988 default: 1989 dev_err(pci->dev, "Unknown IRQ type\n"); 1990 return -EPERM; 1991 } 1992 1993 return 0; 1994 } 1995 1996 static const struct pci_epc_features tegra_pcie_epc_features = { 1997 .linkup_notifier = true, 1998 .core_init_notifier = true, 1999 .msi_capable = false, 2000 .msix_capable = false, 2001 .reserved_bar = 1 << BAR_2 | 1 << BAR_3 | 1 << BAR_4 | 1 << BAR_5, 2002 .bar_fixed_64bit = 1 << BAR_0, 2003 .bar_fixed_size[0] = SZ_1M, 2004 }; 2005 2006 static const struct pci_epc_features* 2007 tegra_pcie_ep_get_features(struct dw_pcie_ep *ep) 2008 { 2009 return &tegra_pcie_epc_features; 2010 } 2011 2012 static const struct dw_pcie_ep_ops pcie_ep_ops = { 2013 .raise_irq = tegra_pcie_ep_raise_irq, 2014 .get_features = tegra_pcie_ep_get_features, 2015 }; 2016 2017 static int tegra_pcie_config_ep(struct tegra_pcie_dw *pcie, 2018 struct platform_device *pdev) 2019 { 2020 struct dw_pcie *pci = &pcie->pci; 2021 struct device *dev = pcie->dev; 2022 struct dw_pcie_ep *ep; 2023 char *name; 2024 int ret; 2025 2026 ep = &pci->ep; 2027 ep->ops = &pcie_ep_ops; 2028 2029 ep->page_size = SZ_64K; 2030 2031 ret = gpiod_set_debounce(pcie->pex_rst_gpiod, PERST_DEBOUNCE_TIME); 2032 if (ret < 0) { 2033 dev_err(dev, "Failed to set PERST GPIO debounce time: %d\n", 2034 ret); 2035 return ret; 2036 } 2037 2038 ret = gpiod_to_irq(pcie->pex_rst_gpiod); 2039 if (ret < 0) { 2040 dev_err(dev, "Failed to get IRQ for PERST GPIO: %d\n", ret); 2041 return ret; 2042 } 2043 pcie->pex_rst_irq = (unsigned int)ret; 2044 2045 name = devm_kasprintf(dev, GFP_KERNEL, "tegra_pcie_%u_pex_rst_irq", 2046 pcie->cid); 2047 if (!name) { 2048 dev_err(dev, "Failed to create PERST IRQ string\n"); 2049 return -ENOMEM; 2050 } 2051 2052 irq_set_status_flags(pcie->pex_rst_irq, IRQ_NOAUTOEN); 2053 2054 pcie->ep_state = EP_STATE_DISABLED; 2055 2056 ret = devm_request_threaded_irq(dev, pcie->pex_rst_irq, NULL, 2057 tegra_pcie_ep_pex_rst_irq, 2058 IRQF_TRIGGER_RISING | 2059 IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 2060 name, (void *)pcie); 2061 if (ret < 0) { 2062 dev_err(dev, "Failed to request IRQ for PERST: %d\n", ret); 2063 return ret; 2064 } 2065 2066 pm_runtime_enable(dev); 2067 2068 ret = dw_pcie_ep_init(ep); 2069 if (ret) { 2070 dev_err(dev, "Failed to initialize DWC Endpoint subsystem: %d\n", 2071 ret); 2072 pm_runtime_disable(dev); 2073 return ret; 2074 } 2075 2076 return 0; 2077 } 2078 2079 static int tegra_pcie_dw_probe(struct platform_device *pdev) 2080 { 2081 const struct tegra_pcie_dw_of_data *data; 2082 struct device *dev = &pdev->dev; 2083 struct resource *atu_dma_res; 2084 struct tegra_pcie_dw *pcie; 2085 struct dw_pcie_rp *pp; 2086 struct dw_pcie *pci; 2087 struct phy **phys; 2088 char *name; 2089 int ret; 2090 u32 i; 2091 2092 data = of_device_get_match_data(dev); 2093 2094 pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL); 2095 if (!pcie) 2096 return -ENOMEM; 2097 2098 pci = &pcie->pci; 2099 pci->dev = &pdev->dev; 2100 pci->ops = &tegra_dw_pcie_ops; 2101 pcie->dev = &pdev->dev; 2102 pcie->of_data = (struct tegra_pcie_dw_of_data *)data; 2103 pci->n_fts[0] = pcie->of_data->n_fts[0]; 2104 pci->n_fts[1] = pcie->of_data->n_fts[1]; 2105 pp = &pci->pp; 2106 pp->num_vectors = MAX_MSI_IRQS; 2107 2108 ret = tegra_pcie_dw_parse_dt(pcie); 2109 if (ret < 0) { 2110 const char *level = KERN_ERR; 2111 2112 if (ret == -EPROBE_DEFER) 2113 level = KERN_DEBUG; 2114 2115 dev_printk(level, dev, 2116 dev_fmt("Failed to parse device tree: %d\n"), 2117 ret); 2118 return ret; 2119 } 2120 2121 ret = tegra_pcie_get_slot_regulators(pcie); 2122 if (ret < 0) { 2123 const char *level = KERN_ERR; 2124 2125 if (ret == -EPROBE_DEFER) 2126 level = KERN_DEBUG; 2127 2128 dev_printk(level, dev, 2129 dev_fmt("Failed to get slot regulators: %d\n"), 2130 ret); 2131 return ret; 2132 } 2133 2134 if (pcie->pex_refclk_sel_gpiod) 2135 gpiod_set_value(pcie->pex_refclk_sel_gpiod, 1); 2136 2137 pcie->pex_ctl_supply = devm_regulator_get(dev, "vddio-pex-ctl"); 2138 if (IS_ERR(pcie->pex_ctl_supply)) { 2139 ret = PTR_ERR(pcie->pex_ctl_supply); 2140 if (ret != -EPROBE_DEFER) 2141 dev_err(dev, "Failed to get regulator: %ld\n", 2142 PTR_ERR(pcie->pex_ctl_supply)); 2143 return ret; 2144 } 2145 2146 pcie->core_clk = devm_clk_get(dev, "core"); 2147 if (IS_ERR(pcie->core_clk)) { 2148 dev_err(dev, "Failed to get core clock: %ld\n", 2149 PTR_ERR(pcie->core_clk)); 2150 return PTR_ERR(pcie->core_clk); 2151 } 2152 2153 pcie->appl_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, 2154 "appl"); 2155 if (!pcie->appl_res) { 2156 dev_err(dev, "Failed to find \"appl\" region\n"); 2157 return -ENODEV; 2158 } 2159 2160 pcie->appl_base = devm_ioremap_resource(dev, pcie->appl_res); 2161 if (IS_ERR(pcie->appl_base)) 2162 return PTR_ERR(pcie->appl_base); 2163 2164 pcie->core_apb_rst = devm_reset_control_get(dev, "apb"); 2165 if (IS_ERR(pcie->core_apb_rst)) { 2166 dev_err(dev, "Failed to get APB reset: %ld\n", 2167 PTR_ERR(pcie->core_apb_rst)); 2168 return PTR_ERR(pcie->core_apb_rst); 2169 } 2170 2171 phys = devm_kcalloc(dev, pcie->phy_count, sizeof(*phys), GFP_KERNEL); 2172 if (!phys) 2173 return -ENOMEM; 2174 2175 for (i = 0; i < pcie->phy_count; i++) { 2176 name = kasprintf(GFP_KERNEL, "p2u-%u", i); 2177 if (!name) { 2178 dev_err(dev, "Failed to create P2U string\n"); 2179 return -ENOMEM; 2180 } 2181 phys[i] = devm_phy_get(dev, name); 2182 kfree(name); 2183 if (IS_ERR(phys[i])) { 2184 ret = PTR_ERR(phys[i]); 2185 if (ret != -EPROBE_DEFER) 2186 dev_err(dev, "Failed to get PHY: %d\n", ret); 2187 return ret; 2188 } 2189 } 2190 2191 pcie->phys = phys; 2192 2193 atu_dma_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, 2194 "atu_dma"); 2195 if (!atu_dma_res) { 2196 dev_err(dev, "Failed to find \"atu_dma\" region\n"); 2197 return -ENODEV; 2198 } 2199 pcie->atu_dma_res = atu_dma_res; 2200 2201 pci->atu_size = resource_size(atu_dma_res); 2202 pci->atu_base = devm_ioremap_resource(dev, atu_dma_res); 2203 if (IS_ERR(pci->atu_base)) 2204 return PTR_ERR(pci->atu_base); 2205 2206 pcie->core_rst = devm_reset_control_get(dev, "core"); 2207 if (IS_ERR(pcie->core_rst)) { 2208 dev_err(dev, "Failed to get core reset: %ld\n", 2209 PTR_ERR(pcie->core_rst)); 2210 return PTR_ERR(pcie->core_rst); 2211 } 2212 2213 pp->irq = platform_get_irq_byname(pdev, "intr"); 2214 if (pp->irq < 0) 2215 return pp->irq; 2216 2217 pcie->bpmp = tegra_bpmp_get(dev); 2218 if (IS_ERR(pcie->bpmp)) 2219 return PTR_ERR(pcie->bpmp); 2220 2221 platform_set_drvdata(pdev, pcie); 2222 2223 switch (pcie->of_data->mode) { 2224 case DW_PCIE_RC_TYPE: 2225 ret = devm_request_irq(dev, pp->irq, tegra_pcie_rp_irq_handler, 2226 IRQF_SHARED, "tegra-pcie-intr", pcie); 2227 if (ret) { 2228 dev_err(dev, "Failed to request IRQ %d: %d\n", pp->irq, 2229 ret); 2230 goto fail; 2231 } 2232 2233 ret = tegra_pcie_config_rp(pcie); 2234 if (ret && ret != -ENOMEDIUM) 2235 goto fail; 2236 else 2237 return 0; 2238 break; 2239 2240 case DW_PCIE_EP_TYPE: 2241 ret = devm_request_threaded_irq(dev, pp->irq, 2242 tegra_pcie_ep_hard_irq, 2243 tegra_pcie_ep_irq_thread, 2244 IRQF_SHARED | IRQF_ONESHOT, 2245 "tegra-pcie-ep-intr", pcie); 2246 if (ret) { 2247 dev_err(dev, "Failed to request IRQ %d: %d\n", pp->irq, 2248 ret); 2249 goto fail; 2250 } 2251 2252 ret = tegra_pcie_config_ep(pcie, pdev); 2253 if (ret < 0) 2254 goto fail; 2255 break; 2256 2257 default: 2258 dev_err(dev, "Invalid PCIe device type %d\n", 2259 pcie->of_data->mode); 2260 } 2261 2262 fail: 2263 tegra_bpmp_put(pcie->bpmp); 2264 return ret; 2265 } 2266 2267 static int tegra_pcie_dw_remove(struct platform_device *pdev) 2268 { 2269 struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev); 2270 2271 if (pcie->of_data->mode == DW_PCIE_RC_TYPE) { 2272 if (!pcie->link_state) 2273 return 0; 2274 2275 debugfs_remove_recursive(pcie->debugfs); 2276 tegra_pcie_deinit_controller(pcie); 2277 pm_runtime_put_sync(pcie->dev); 2278 } else { 2279 disable_irq(pcie->pex_rst_irq); 2280 pex_ep_event_pex_rst_assert(pcie); 2281 } 2282 2283 pm_runtime_disable(pcie->dev); 2284 tegra_bpmp_put(pcie->bpmp); 2285 if (pcie->pex_refclk_sel_gpiod) 2286 gpiod_set_value(pcie->pex_refclk_sel_gpiod, 0); 2287 2288 return 0; 2289 } 2290 2291 static int tegra_pcie_dw_suspend_late(struct device *dev) 2292 { 2293 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); 2294 u32 val; 2295 2296 if (pcie->of_data->mode == DW_PCIE_EP_TYPE) { 2297 dev_err(dev, "Failed to Suspend as Tegra PCIe is in EP mode\n"); 2298 return -EPERM; 2299 } 2300 2301 if (!pcie->link_state) 2302 return 0; 2303 2304 /* Enable HW_HOT_RST mode */ 2305 if (!pcie->of_data->has_sbr_reset_fix) { 2306 val = appl_readl(pcie, APPL_CTRL); 2307 val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK << 2308 APPL_CTRL_HW_HOT_RST_MODE_SHIFT); 2309 val |= APPL_CTRL_HW_HOT_RST_EN; 2310 appl_writel(pcie, val, APPL_CTRL); 2311 } 2312 2313 return 0; 2314 } 2315 2316 static int tegra_pcie_dw_suspend_noirq(struct device *dev) 2317 { 2318 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); 2319 2320 if (!pcie->link_state) 2321 return 0; 2322 2323 tegra_pcie_downstream_dev_to_D0(pcie); 2324 tegra_pcie_dw_pme_turnoff(pcie); 2325 tegra_pcie_unconfig_controller(pcie); 2326 2327 return 0; 2328 } 2329 2330 static int tegra_pcie_dw_resume_noirq(struct device *dev) 2331 { 2332 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); 2333 int ret; 2334 2335 if (!pcie->link_state) 2336 return 0; 2337 2338 ret = tegra_pcie_config_controller(pcie, true); 2339 if (ret < 0) 2340 return ret; 2341 2342 ret = tegra_pcie_dw_host_init(&pcie->pci.pp); 2343 if (ret < 0) { 2344 dev_err(dev, "Failed to init host: %d\n", ret); 2345 goto fail_host_init; 2346 } 2347 2348 dw_pcie_setup_rc(&pcie->pci.pp); 2349 2350 ret = tegra_pcie_dw_start_link(&pcie->pci); 2351 if (ret < 0) 2352 goto fail_host_init; 2353 2354 return 0; 2355 2356 fail_host_init: 2357 tegra_pcie_unconfig_controller(pcie); 2358 return ret; 2359 } 2360 2361 static int tegra_pcie_dw_resume_early(struct device *dev) 2362 { 2363 struct tegra_pcie_dw *pcie = dev_get_drvdata(dev); 2364 u32 val; 2365 2366 if (pcie->of_data->mode == DW_PCIE_EP_TYPE) { 2367 dev_err(dev, "Suspend is not supported in EP mode"); 2368 return -ENOTSUPP; 2369 } 2370 2371 if (!pcie->link_state) 2372 return 0; 2373 2374 /* Disable HW_HOT_RST mode */ 2375 if (!pcie->of_data->has_sbr_reset_fix) { 2376 val = appl_readl(pcie, APPL_CTRL); 2377 val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK << 2378 APPL_CTRL_HW_HOT_RST_MODE_SHIFT); 2379 val |= APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST << 2380 APPL_CTRL_HW_HOT_RST_MODE_SHIFT; 2381 val &= ~APPL_CTRL_HW_HOT_RST_EN; 2382 appl_writel(pcie, val, APPL_CTRL); 2383 } 2384 2385 return 0; 2386 } 2387 2388 static void tegra_pcie_dw_shutdown(struct platform_device *pdev) 2389 { 2390 struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev); 2391 2392 if (pcie->of_data->mode == DW_PCIE_RC_TYPE) { 2393 if (!pcie->link_state) 2394 return; 2395 2396 debugfs_remove_recursive(pcie->debugfs); 2397 tegra_pcie_downstream_dev_to_D0(pcie); 2398 2399 disable_irq(pcie->pci.pp.irq); 2400 if (IS_ENABLED(CONFIG_PCI_MSI)) 2401 disable_irq(pcie->pci.pp.msi_irq[0]); 2402 2403 tegra_pcie_dw_pme_turnoff(pcie); 2404 tegra_pcie_unconfig_controller(pcie); 2405 pm_runtime_put_sync(pcie->dev); 2406 } else { 2407 disable_irq(pcie->pex_rst_irq); 2408 pex_ep_event_pex_rst_assert(pcie); 2409 } 2410 } 2411 2412 static const struct tegra_pcie_dw_of_data tegra194_pcie_dw_rc_of_data = { 2413 .version = TEGRA194_DWC_IP_VER, 2414 .mode = DW_PCIE_RC_TYPE, 2415 .cdm_chk_int_en_bit = BIT(19), 2416 /* Gen4 - 5, 6, 8 and 9 presets enabled */ 2417 .gen4_preset_vec = 0x360, 2418 .n_fts = { 52, 52 }, 2419 }; 2420 2421 static const struct tegra_pcie_dw_of_data tegra194_pcie_dw_ep_of_data = { 2422 .version = TEGRA194_DWC_IP_VER, 2423 .mode = DW_PCIE_EP_TYPE, 2424 .cdm_chk_int_en_bit = BIT(19), 2425 /* Gen4 - 5, 6, 8 and 9 presets enabled */ 2426 .gen4_preset_vec = 0x360, 2427 .n_fts = { 52, 52 }, 2428 }; 2429 2430 static const struct tegra_pcie_dw_of_data tegra234_pcie_dw_rc_of_data = { 2431 .version = TEGRA234_DWC_IP_VER, 2432 .mode = DW_PCIE_RC_TYPE, 2433 .has_msix_doorbell_access_fix = true, 2434 .has_sbr_reset_fix = true, 2435 .has_l1ss_exit_fix = true, 2436 .cdm_chk_int_en_bit = BIT(18), 2437 /* Gen4 - 6, 8 and 9 presets enabled */ 2438 .gen4_preset_vec = 0x340, 2439 .n_fts = { 52, 80 }, 2440 }; 2441 2442 static const struct tegra_pcie_dw_of_data tegra234_pcie_dw_ep_of_data = { 2443 .version = TEGRA234_DWC_IP_VER, 2444 .mode = DW_PCIE_EP_TYPE, 2445 .has_l1ss_exit_fix = true, 2446 .has_ltr_req_fix = true, 2447 .cdm_chk_int_en_bit = BIT(18), 2448 /* Gen4 - 6, 8 and 9 presets enabled */ 2449 .gen4_preset_vec = 0x340, 2450 .n_fts = { 52, 80 }, 2451 }; 2452 2453 static const struct of_device_id tegra_pcie_dw_of_match[] = { 2454 { 2455 .compatible = "nvidia,tegra194-pcie", 2456 .data = &tegra194_pcie_dw_rc_of_data, 2457 }, 2458 { 2459 .compatible = "nvidia,tegra194-pcie-ep", 2460 .data = &tegra194_pcie_dw_ep_of_data, 2461 }, 2462 { 2463 .compatible = "nvidia,tegra234-pcie", 2464 .data = &tegra234_pcie_dw_rc_of_data, 2465 }, 2466 { 2467 .compatible = "nvidia,tegra234-pcie-ep", 2468 .data = &tegra234_pcie_dw_ep_of_data, 2469 }, 2470 {} 2471 }; 2472 2473 static const struct dev_pm_ops tegra_pcie_dw_pm_ops = { 2474 .suspend_late = tegra_pcie_dw_suspend_late, 2475 .suspend_noirq = tegra_pcie_dw_suspend_noirq, 2476 .resume_noirq = tegra_pcie_dw_resume_noirq, 2477 .resume_early = tegra_pcie_dw_resume_early, 2478 }; 2479 2480 static struct platform_driver tegra_pcie_dw_driver = { 2481 .probe = tegra_pcie_dw_probe, 2482 .remove = tegra_pcie_dw_remove, 2483 .shutdown = tegra_pcie_dw_shutdown, 2484 .driver = { 2485 .name = "tegra194-pcie", 2486 .pm = &tegra_pcie_dw_pm_ops, 2487 .of_match_table = tegra_pcie_dw_of_match, 2488 }, 2489 }; 2490 module_platform_driver(tegra_pcie_dw_driver); 2491 2492 MODULE_DEVICE_TABLE(of, tegra_pcie_dw_of_match); 2493 2494 MODULE_AUTHOR("Vidya Sagar <vidyas@nvidia.com>"); 2495 MODULE_DESCRIPTION("NVIDIA PCIe host controller driver"); 2496 MODULE_LICENSE("GPL v2"); 2497