1# SPDX-License-Identifier: GPL-2.0 2 3menu "DesignWare-based PCIe controllers" 4 depends on PCI 5 6config PCIE_DW 7 bool 8 9config PCIE_DW_DEBUGFS 10 bool "DesignWare PCIe debugfs entries" 11 depends on DEBUG_FS 12 depends on PCIE_DW_HOST || PCIE_DW_EP 13 help 14 Say Y here to enable debugfs entries for the PCIe controller. These 15 entries provide various debug features related to the controller and 16 expose the RAS DES capabilities such as Silicon Debug, Error Injection 17 and Statistical Counters. 18 19config PCIE_DW_HOST 20 bool 21 select PCIE_DW 22 select IRQ_MSI_LIB 23 select PCI_HOST_COMMON 24 25config PCIE_DW_EP 26 bool 27 select PCIE_DW 28 29config PCIE_AL 30 bool "Amazon Annapurna Labs PCIe controller" 31 depends on OF && (ARM64 || COMPILE_TEST) 32 depends on PCI_MSI 33 select PCIE_DW_HOST 34 select PCI_ECAM 35 help 36 Say Y here to enable support of the Amazon's Annapurna Labs PCIe 37 controller IP on Amazon SoCs. The PCIe controller uses the DesignWare 38 core plus Annapurna Labs proprietary hardware wrappers. This is 39 required only for DT-based platforms. ACPI platforms with the 40 Annapurna Labs PCIe controller don't need to enable this. 41 42config PCIE_AMD_MDB 43 bool "AMD MDB Versal2 PCIe controller" 44 depends on OF && (ARM64 || COMPILE_TEST) 45 depends on PCI_MSI 46 select PCIE_DW_HOST 47 help 48 Say Y here if you want to enable PCIe controller support on AMD 49 Versal2 SoCs. The AMD MDB Versal2 PCIe controller is based on 50 DesignWare IP and therefore the driver re-uses the DesignWare 51 core functions to implement the driver. 52 53config PCI_MESON 54 tristate "Amlogic Meson PCIe controller" 55 default m if ARCH_MESON 56 depends on PCI_MSI 57 select PCIE_DW_HOST 58 help 59 Say Y here if you want to enable PCI controller support on Amlogic 60 SoCs. The PCI controller on Amlogic is based on DesignWare hardware 61 and therefore the driver re-uses the DesignWare core functions to 62 implement the driver. 63 64config PCIE_ANDES_QILAI 65 tristate "Andes QiLai PCIe controller" 66 depends on ARCH_ANDES || COMPILE_TEST 67 depends on PCI_MSI 68 select PCIE_DW_HOST 69 help 70 Say Y here to enable PCIe controller support on Andes QiLai SoCs, 71 which operate in Root Complex mode. The Andes QiLai SoC PCIe 72 controller is based on DesignWare IP and therefore the driver 73 re-uses the DesignWare core functions to implement the driver. 74 75config PCIE_ARTPEC6 76 bool 77 78config PCIE_ARTPEC6_HOST 79 bool "Axis ARTPEC-6 PCIe controller (host mode)" 80 depends on MACH_ARTPEC6 || COMPILE_TEST 81 depends on PCI_MSI 82 select PCIE_DW_HOST 83 select PCIE_ARTPEC6 84 help 85 Enables support for the PCIe controller in the ARTPEC-6 SoC to work in 86 host mode. This uses the DesignWare core. 87 88config PCIE_ARTPEC6_EP 89 bool "Axis ARTPEC-6 PCIe controller (endpoint mode)" 90 depends on MACH_ARTPEC6 || COMPILE_TEST 91 depends on PCI_ENDPOINT 92 select PCIE_DW_EP 93 select PCIE_ARTPEC6 94 help 95 Enables support for the PCIe controller in the ARTPEC-6 SoC to work in 96 endpoint mode. This uses the DesignWare core. 97 98config PCIE_ESWIN 99 tristate "ESWIN PCIe controller" 100 depends on ARCH_ESWIN || COMPILE_TEST 101 depends on PCI_MSI 102 select PCIE_DW_HOST 103 help 104 Say Y here if you want PCIe controller support for the ESWIN SoCs. 105 The PCIe controller in ESWIN SoCs is based on DesignWare hardware, and 106 works only in host mode. 107 108config PCI_IMX6 109 bool 110 111config PCI_IMX6_HOST 112 bool "Freescale i.MX6/7/8 PCIe controller (host mode)" 113 depends on ARCH_MXC || COMPILE_TEST 114 depends on PCI_MSI 115 select PCIE_DW_HOST 116 select PCI_IMX6 117 select PCI_PWRCTRL_GENERIC 118 help 119 Enables support for the PCIe controller in the i.MX SoCs to 120 work in Root Complex mode. The PCI controller on i.MX is based 121 on DesignWare hardware and therefore the driver re-uses the 122 DesignWare core functions to implement the driver. 123 124config PCI_IMX6_EP 125 bool "Freescale i.MX6/7/8 PCIe controller (endpoint mode)" 126 depends on ARCH_MXC || COMPILE_TEST 127 depends on PCI_ENDPOINT 128 select PCIE_DW_EP 129 select PCI_IMX6 130 help 131 Enables support for the PCIe controller in the i.MX SoCs to 132 work in endpoint mode. The PCI controller on i.MX is based 133 on DesignWare hardware and therefore the driver re-uses the 134 DesignWare core functions to implement the driver. 135 136config PCI_LAYERSCAPE 137 tristate "Freescale Layerscape PCIe controller (host mode)" 138 depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST) 139 depends on PCI_MSI 140 select PCIE_DW_HOST 141 select MFD_SYSCON 142 help 143 Say Y here if you want to enable PCIe controller support on Layerscape 144 SoCs to work in Host mode. 145 This controller can work either as EP or RC. The RCW[HOST_AGT_PEX] 146 determines which PCIe controller works in EP mode and which PCIe 147 controller works in RC mode. 148 149config PCI_LAYERSCAPE_EP 150 bool "Freescale Layerscape PCIe controller (endpoint mode)" 151 depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST) 152 depends on PCI_ENDPOINT 153 select PCIE_DW_EP 154 help 155 Say Y here if you want to enable PCIe controller support on Layerscape 156 SoCs to work in Endpoint mode. 157 This controller can work either as EP or RC. The RCW[HOST_AGT_PEX] 158 determines which PCIe controller works in EP mode and which PCIe 159 controller works in RC mode. 160 161config PCI_HISI 162 depends on OF && (ARM64 || COMPILE_TEST) 163 bool "HiSilicon Hip05 and Hip06 SoCs PCIe controller" 164 depends on PCI_MSI 165 select PCIE_DW_HOST 166 select PCI_HOST_COMMON 167 help 168 Say Y here if you want PCIe controller support on HiSilicon 169 Hip05 and Hip06 SoCs 170 171config PCIE_KIRIN 172 depends on OF && (ARM64 || COMPILE_TEST) 173 tristate "HiSilicon Kirin PCIe controller" 174 depends on PCI_MSI 175 select PCIE_DW_HOST 176 select REGMAP_MMIO 177 help 178 Say Y here if you want PCIe controller support 179 on HiSilicon Kirin series SoCs. 180 181config PCIE_HISI_STB 182 bool "HiSilicon STB PCIe controller" 183 depends on ARCH_HISI || COMPILE_TEST 184 depends on PCI_MSI 185 select PCIE_DW_HOST 186 help 187 Say Y here if you want PCIe controller support on HiSilicon STB SoCs 188 189config PCIE_INTEL_GW 190 bool "Intel Gateway PCIe controller " 191 depends on OF && (X86 || COMPILE_TEST) 192 depends on PCI_MSI 193 select PCIE_DW_HOST 194 help 195 Say 'Y' here to enable PCIe Host controller support on Intel 196 Gateway SoCs. 197 The PCIe controller uses the DesignWare core plus Intel-specific 198 hardware wrappers. 199 200config PCIE_KEEMBAY 201 bool 202 203config PCIE_KEEMBAY_HOST 204 bool "Intel Keem Bay PCIe controller (host mode)" 205 depends on ARCH_KEEMBAY || COMPILE_TEST 206 depends on PCI_MSI 207 select PCIE_DW_HOST 208 select PCIE_KEEMBAY 209 help 210 Say 'Y' here to enable support for the PCIe controller in Keem Bay 211 to work in host mode. 212 The PCIe controller is based on DesignWare Hardware and uses 213 DesignWare core functions. 214 215config PCIE_KEEMBAY_EP 216 bool "Intel Keem Bay PCIe controller (endpoint mode)" 217 depends on ARCH_KEEMBAY || COMPILE_TEST 218 depends on PCI_MSI 219 depends on PCI_ENDPOINT 220 select PCIE_DW_EP 221 select PCIE_KEEMBAY 222 help 223 Say 'Y' here to enable support for the PCIe controller in Keem Bay 224 to work in endpoint mode. 225 The PCIe controller is based on DesignWare Hardware and uses 226 DesignWare core functions. 227 228config PCIE_ARMADA_8K 229 bool "Marvell Armada-8K PCIe controller" 230 depends on ARCH_MVEBU || COMPILE_TEST 231 depends on PCI_MSI 232 select PCIE_DW_HOST 233 help 234 Say Y here if you want to enable PCIe controller support on 235 Armada-8K SoCs. The PCIe controller on Armada-8K is based on 236 DesignWare hardware and therefore the driver re-uses the 237 DesignWare core functions to implement the driver. 238 239config PCIE_TEGRA194 240 tristate 241 242config PCIE_TEGRA194_HOST 243 tristate "NVIDIA Tegra194 (and later) PCIe controller (host mode)" 244 depends on (ARCH_TEGRA && ARM64) || COMPILE_TEST 245 depends on PCI_MSI 246 select PCIE_DW_HOST 247 select PHY_TEGRA194_P2U 248 select PCIE_TEGRA194 249 help 250 Enables support for the PCIe controller in the NVIDIA Tegra194 SoC to 251 work in host mode. There are two instances of PCIe controllers in 252 Tegra194. This controller can work either as EP or RC. In order to 253 enable host-specific features PCIE_TEGRA194_HOST must be selected and 254 in order to enable device-specific features PCIE_TEGRA194_EP must be 255 selected. This uses the DesignWare core. 256 257config PCIE_TEGRA194_EP 258 tristate "NVIDIA Tegra194 (and later) PCIe controller (endpoint mode)" 259 depends on (ARCH_TEGRA && ARM64) || COMPILE_TEST 260 depends on PCI_ENDPOINT 261 select PCIE_DW_EP 262 select PHY_TEGRA194_P2U 263 select PCIE_TEGRA194 264 help 265 Enables support for the PCIe controller in the NVIDIA Tegra194 SoC to 266 work in endpoint mode. There are two instances of PCIe controllers in 267 Tegra194. This controller can work either as EP or RC. In order to 268 enable host-specific features PCIE_TEGRA194_HOST must be selected and 269 in order to enable device-specific features PCIE_TEGRA194_EP must be 270 selected. This uses the DesignWare core. 271 272config PCIE_NXP_S32G 273 bool "NXP S32G PCIe controller (host mode)" 274 depends on ARCH_S32 || COMPILE_TEST 275 select PCIE_DW_HOST 276 help 277 Enable support for the PCIe controller in NXP S32G based boards to 278 work in Host mode. The controller is based on DesignWare IP and 279 can work either as RC or EP. In order to enable host-specific 280 features PCIE_NXP_S32G must be selected. 281 282config PCIE_DW_PLAT 283 bool 284 285config PCIE_DW_PLAT_HOST 286 bool "Platform bus based DesignWare PCIe controller (host mode)" 287 depends on PCI_MSI 288 select PCIE_DW_HOST 289 select PCIE_DW_PLAT 290 help 291 Enables support for the PCIe controller in the Designware IP to 292 work in host mode. There are two instances of PCIe controller in 293 Designware IP. 294 This controller can work either as EP or RC. In order to enable 295 host-specific features PCIE_DW_PLAT_HOST must be selected and in 296 order to enable device-specific features PCI_DW_PLAT_EP must be 297 selected. 298 299config PCIE_DW_PLAT_EP 300 bool "Platform bus based DesignWare PCIe controller (endpoint mode)" 301 depends on PCI && PCI_MSI 302 depends on PCI_ENDPOINT 303 select PCIE_DW_EP 304 select PCIE_DW_PLAT 305 help 306 Enables support for the PCIe controller in the Designware IP to 307 work in endpoint mode. There are two instances of PCIe controller 308 in Designware IP. 309 This controller can work either as EP or RC. In order to enable 310 host-specific features PCIE_DW_PLAT_HOST must be selected and in 311 order to enable device-specific features PCI_DW_PLAT_EP must be 312 selected. 313 314config PCIE_QCOM_COMMON 315 bool 316 317config PCIE_QCOM 318 bool "Qualcomm PCIe controller (host mode)" 319 depends on OF && (ARCH_QCOM || COMPILE_TEST) 320 depends on PCI_MSI 321 select PCIE_DW_HOST 322 select CRC8 323 select PCIE_QCOM_COMMON 324 select PCI_HOST_COMMON 325 select PCI_PWRCTRL_GENERIC 326 help 327 Say Y here to enable PCIe controller support on Qualcomm SoCs. The 328 PCIe controller uses the DesignWare core plus Qualcomm-specific 329 hardware wrappers. 330 331config PCIE_QCOM_EP 332 tristate "Qualcomm PCIe controller (endpoint mode)" 333 depends on OF && (ARCH_QCOM || COMPILE_TEST) 334 depends on PCI_ENDPOINT 335 select PCIE_DW_EP 336 select PCIE_QCOM_COMMON 337 help 338 Say Y here to enable support for the PCIe controllers on Qualcomm SoCs 339 to work in endpoint mode. The PCIe controller uses the DesignWare core 340 plus Qualcomm-specific hardware wrappers. 341 342config PCIE_RCAR_GEN4 343 tristate 344 345config PCIE_RCAR_GEN4_HOST 346 tristate "Renesas R-Car Gen4 PCIe controller (host mode)" 347 depends on ARCH_RENESAS || COMPILE_TEST 348 depends on PCI_MSI 349 select PCIE_DW_HOST 350 select PCIE_RCAR_GEN4 351 help 352 Say Y here if you want PCIe controller (host mode) on R-Car Gen4 SoCs. 353 To compile this driver as a module, choose M here: the module will be 354 called pcie-rcar-gen4.ko. This uses the DesignWare core. 355 356config PCIE_RCAR_GEN4_EP 357 tristate "Renesas R-Car Gen4 PCIe controller (endpoint mode)" 358 depends on ARCH_RENESAS || COMPILE_TEST 359 depends on PCI_ENDPOINT 360 select PCIE_DW_EP 361 select PCIE_RCAR_GEN4 362 help 363 Say Y here if you want PCIe controller (endpoint mode) on R-Car Gen4 364 SoCs. To compile this driver as a module, choose M here: the module 365 will be called pcie-rcar-gen4.ko. This uses the DesignWare core. 366 367config PCIE_ROCKCHIP_DW 368 bool 369 370config PCIE_ROCKCHIP_DW_HOST 371 bool "Rockchip DesignWare PCIe controller (host mode)" 372 depends on PCI_MSI 373 depends on ARCH_ROCKCHIP || COMPILE_TEST 374 depends on OF 375 select PCIE_DW_HOST 376 select PCIE_ROCKCHIP_DW 377 help 378 Enables support for the DesignWare PCIe controller in the 379 Rockchip SoC (except RK3399) to work in host mode. 380 381config PCIE_ROCKCHIP_DW_EP 382 bool "Rockchip DesignWare PCIe controller (endpoint mode)" 383 depends on ARCH_ROCKCHIP || COMPILE_TEST 384 depends on OF 385 depends on PCI_ENDPOINT 386 select PCIE_DW_EP 387 select PCIE_ROCKCHIP_DW 388 help 389 Enables support for the DesignWare PCIe controller in the 390 Rockchip SoC (except RK3399) to work in endpoint mode. 391 392config PCI_EXYNOS 393 tristate "Samsung Exynos PCIe controller" 394 depends on ARCH_EXYNOS || COMPILE_TEST 395 depends on PCI_MSI 396 select PCIE_DW_HOST 397 help 398 Enables support for the PCIe controller in the Samsung Exynos SoCs 399 to work in host mode. The PCI controller is based on the DesignWare 400 hardware and therefore the driver re-uses the DesignWare core 401 functions to implement the driver. 402 403config PCIE_FU740 404 bool "SiFive FU740 PCIe controller" 405 depends on PCI_MSI 406 depends on ARCH_SIFIVE || COMPILE_TEST 407 select PCIE_DW_HOST 408 help 409 Say Y here if you want PCIe controller support for the SiFive 410 FU740. 411 412config PCIE_UNIPHIER 413 bool "Socionext UniPhier PCIe controller (host mode)" 414 depends on ARCH_UNIPHIER || COMPILE_TEST 415 depends on OF && HAS_IOMEM 416 depends on PCI_MSI 417 select PCIE_DW_HOST 418 help 419 Say Y here if you want PCIe host controller support on UniPhier SoCs. 420 This driver supports LD20 and PXs3 SoCs. 421 422config PCIE_UNIPHIER_EP 423 bool "Socionext UniPhier PCIe controller (endpoint mode)" 424 depends on ARCH_UNIPHIER || COMPILE_TEST 425 depends on OF && HAS_IOMEM 426 depends on PCI_ENDPOINT 427 select PCIE_DW_EP 428 help 429 Say Y here if you want PCIe endpoint controller support on 430 UniPhier SoCs. This driver supports Pro5 SoC. 431 432config PCIE_SOPHGO_DW 433 bool "Sophgo DesignWare PCIe controller (host mode)" 434 depends on ARCH_SOPHGO || COMPILE_TEST 435 depends on PCI_MSI 436 depends on OF 437 select PCIE_DW_HOST 438 help 439 Say Y here if you want PCIe host controller support on 440 Sophgo SoCs. 441 442config PCIE_SPACEMIT_K1 443 tristate "SpacemiT K1 PCIe controller (host mode)" 444 depends on ARCH_SPACEMIT || COMPILE_TEST 445 depends on HAS_IOMEM 446 select PCIE_DW_HOST 447 select PCI_PWRCTRL_GENERIC 448 default ARCH_SPACEMIT 449 help 450 Enables support for the DesignWare based PCIe controller in 451 the SpacemiT K1 SoC operating in host mode. Three controllers 452 are available on the K1 SoC; the first of these shares a PHY 453 with a USB 3.0 host controller (one or the other can be used). 454 455config PCIE_SPEAR13XX 456 bool "STMicroelectronics SPEAr PCIe controller" 457 depends on ARCH_SPEAR13XX || COMPILE_TEST 458 depends on PCI_MSI 459 select PCIE_DW_HOST 460 help 461 Say Y here if you want PCIe support on SPEAr13XX SoCs. 462 463config PCIE_STM32_HOST 464 tristate "STMicroelectronics STM32MP25 PCIe Controller (host mode)" 465 depends on ARCH_STM32 || COMPILE_TEST 466 depends on PCI_MSI 467 select PCIE_DW_HOST 468 help 469 Enables Root Complex (RC) support for the DesignWare core based PCIe 470 controller found in STM32MP25 SoC. 471 472 This driver can also be built as a module. If so, the module 473 will be called pcie-stm32. 474 475config PCIE_STM32_EP 476 tristate "STMicroelectronics STM32MP25 PCIe Controller (endpoint mode)" 477 depends on ARCH_STM32 || COMPILE_TEST 478 depends on PCI_ENDPOINT 479 select PCIE_DW_EP 480 help 481 Enables Endpoint (EP) support for the DesignWare core based PCIe 482 controller found in STM32MP25 SoC. 483 484 This driver can also be built as a module. If so, the module 485 will be called pcie-stm32-ep. 486 487config PCI_DRA7XX 488 tristate 489 490config PCI_DRA7XX_HOST 491 tristate "TI DRA7xx PCIe controller (host mode)" 492 depends on SOC_DRA7XX || COMPILE_TEST 493 depends on OF && HAS_IOMEM && TI_PIPE3 494 depends on PCI_MSI 495 select PCIE_DW_HOST 496 select PCI_DRA7XX 497 default y if SOC_DRA7XX 498 help 499 Enables support for the PCIe controller in the DRA7xx SoC to work in 500 host mode. There are two instances of PCIe controller in DRA7xx. 501 This controller can work either as EP or RC. In order to enable 502 host-specific features PCI_DRA7XX_HOST must be selected and in order 503 to enable device-specific features PCI_DRA7XX_EP must be selected. 504 This uses the DesignWare core. 505 506config PCI_DRA7XX_EP 507 tristate "TI DRA7xx PCIe controller (endpoint mode)" 508 depends on SOC_DRA7XX || COMPILE_TEST 509 depends on OF && HAS_IOMEM && TI_PIPE3 510 depends on PCI_ENDPOINT 511 select PCIE_DW_EP 512 select PCI_DRA7XX 513 help 514 Enables support for the PCIe controller in the DRA7xx SoC to work in 515 endpoint mode. There are two instances of PCIe controller in DRA7xx. 516 This controller can work either as EP or RC. In order to enable 517 host-specific features PCI_DRA7XX_HOST must be selected and in order 518 to enable device-specific features PCI_DRA7XX_EP must be selected. 519 This uses the DesignWare core. 520 521# ARM32 platforms use hook_fault_code() and cannot support loadable module. 522config PCI_KEYSTONE 523 bool 524 525# On non-ARM32 platforms, loadable module can be supported. 526config PCI_KEYSTONE_TRISTATE 527 tristate 528 529config PCI_KEYSTONE_HOST 530 tristate "TI Keystone PCIe controller (host mode)" 531 depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST 532 depends on PCI_MSI 533 select PCIE_DW_HOST 534 select PCI_KEYSTONE if ARM 535 select PCI_KEYSTONE_TRISTATE if !ARM 536 help 537 Enables support for the PCIe controller in the Keystone SoC to 538 work in host mode. The PCI controller on Keystone is based on 539 DesignWare hardware and therefore the driver re-uses the 540 DesignWare core functions to implement the driver. 541 542config PCI_KEYSTONE_EP 543 tristate "TI Keystone PCIe controller (endpoint mode)" 544 depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST 545 depends on PCI_ENDPOINT 546 select PCIE_DW_EP 547 select PCI_KEYSTONE if ARM 548 select PCI_KEYSTONE_TRISTATE if !ARM 549 help 550 Enables support for the PCIe controller in the Keystone SoC to 551 work in endpoint mode. The PCI controller on Keystone is based 552 on DesignWare hardware and therefore the driver re-uses the 553 DesignWare core functions to implement the driver. 554 555config PCIE_VISCONTI_HOST 556 bool "Toshiba Visconti PCIe controller" 557 depends on ARCH_VISCONTI || COMPILE_TEST 558 depends on PCI_MSI 559 select PCIE_DW_HOST 560 help 561 Say Y here if you want PCIe controller support on Toshiba Visconti SoC. 562 This driver supports TMPV7708 SoC. 563 564config PCIE_ULTRARISC 565 tristate "UltraRISC PCIe host controller" 566 depends on ARCH_ULTRARISC || COMPILE_TEST 567 select PCIE_DW_HOST 568 select PCI_MSI 569 default y if ARCH_ULTRARISC 570 help 571 Enables support for the PCIe controller in the UltraRISC SoC. 572 This driver supports UR-DP1000 SoC. 573 574 By default, this symbol is enabled when ARCH_ULTRARISC is active, 575 requiring no further configuration on that platform. 576 577endmenu 578