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 help 118 Enables support for the PCIe controller in the i.MX SoCs to 119 work in Root Complex mode. The PCI controller on i.MX is based 120 on DesignWare hardware and therefore the driver re-uses the 121 DesignWare core functions to implement the driver. 122 123config PCI_IMX6_EP 124 bool "Freescale i.MX6/7/8 PCIe controller (endpoint mode)" 125 depends on ARCH_MXC || COMPILE_TEST 126 depends on PCI_ENDPOINT 127 select PCIE_DW_EP 128 select PCI_IMX6 129 help 130 Enables support for the PCIe controller in the i.MX SoCs to 131 work in endpoint mode. The PCI controller on i.MX is based 132 on DesignWare hardware and therefore the driver re-uses the 133 DesignWare core functions to implement the driver. 134 135config PCI_LAYERSCAPE 136 tristate "Freescale Layerscape PCIe controller (host mode)" 137 depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST) 138 depends on PCI_MSI 139 select PCIE_DW_HOST 140 select MFD_SYSCON 141 help 142 Say Y here if you want to enable PCIe controller support on Layerscape 143 SoCs to work in Host mode. 144 This controller can work either as EP or RC. The RCW[HOST_AGT_PEX] 145 determines which PCIe controller works in EP mode and which PCIe 146 controller works in RC mode. 147 148config PCI_LAYERSCAPE_EP 149 bool "Freescale Layerscape PCIe controller (endpoint mode)" 150 depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST) 151 depends on PCI_ENDPOINT 152 select PCIE_DW_EP 153 help 154 Say Y here if you want to enable PCIe controller support on Layerscape 155 SoCs to work in Endpoint mode. 156 This controller can work either as EP or RC. The RCW[HOST_AGT_PEX] 157 determines which PCIe controller works in EP mode and which PCIe 158 controller works in RC mode. 159 160config PCI_HISI 161 depends on OF && (ARM64 || COMPILE_TEST) 162 bool "HiSilicon Hip05 and Hip06 SoCs PCIe controller" 163 depends on PCI_MSI 164 select PCIE_DW_HOST 165 select PCI_HOST_COMMON 166 help 167 Say Y here if you want PCIe controller support on HiSilicon 168 Hip05 and Hip06 SoCs 169 170config PCIE_KIRIN 171 depends on OF && (ARM64 || COMPILE_TEST) 172 tristate "HiSilicon Kirin PCIe controller" 173 depends on PCI_MSI 174 select PCIE_DW_HOST 175 select REGMAP_MMIO 176 help 177 Say Y here if you want PCIe controller support 178 on HiSilicon Kirin series SoCs. 179 180config PCIE_HISI_STB 181 bool "HiSilicon STB PCIe controller" 182 depends on ARCH_HISI || COMPILE_TEST 183 depends on PCI_MSI 184 select PCIE_DW_HOST 185 help 186 Say Y here if you want PCIe controller support on HiSilicon STB SoCs 187 188config PCIE_INTEL_GW 189 bool "Intel Gateway PCIe controller " 190 depends on OF && (X86 || COMPILE_TEST) 191 depends on PCI_MSI 192 select PCIE_DW_HOST 193 help 194 Say 'Y' here to enable PCIe Host controller support on Intel 195 Gateway SoCs. 196 The PCIe controller uses the DesignWare core plus Intel-specific 197 hardware wrappers. 198 199config PCIE_KEEMBAY 200 bool 201 202config PCIE_KEEMBAY_HOST 203 bool "Intel Keem Bay PCIe controller (host mode)" 204 depends on ARCH_KEEMBAY || COMPILE_TEST 205 depends on PCI_MSI 206 select PCIE_DW_HOST 207 select PCIE_KEEMBAY 208 help 209 Say 'Y' here to enable support for the PCIe controller in Keem Bay 210 to work in host mode. 211 The PCIe controller is based on DesignWare Hardware and uses 212 DesignWare core functions. 213 214config PCIE_KEEMBAY_EP 215 bool "Intel Keem Bay PCIe controller (endpoint mode)" 216 depends on ARCH_KEEMBAY || COMPILE_TEST 217 depends on PCI_MSI 218 depends on PCI_ENDPOINT 219 select PCIE_DW_EP 220 select PCIE_KEEMBAY 221 help 222 Say 'Y' here to enable support for the PCIe controller in Keem Bay 223 to work in endpoint mode. 224 The PCIe controller is based on DesignWare Hardware and uses 225 DesignWare core functions. 226 227config PCIE_ARMADA_8K 228 bool "Marvell Armada-8K PCIe controller" 229 depends on ARCH_MVEBU || COMPILE_TEST 230 depends on PCI_MSI 231 select PCIE_DW_HOST 232 help 233 Say Y here if you want to enable PCIe controller support on 234 Armada-8K SoCs. The PCIe controller on Armada-8K is based on 235 DesignWare hardware and therefore the driver re-uses the 236 DesignWare core functions to implement the driver. 237 238config PCIE_TEGRA194 239 tristate 240 241config PCIE_TEGRA194_HOST 242 tristate "NVIDIA Tegra194 (and later) PCIe controller (host mode)" 243 depends on (ARCH_TEGRA && ARM64) || COMPILE_TEST 244 depends on PCI_MSI 245 select PCIE_DW_HOST 246 select PHY_TEGRA194_P2U 247 select PCIE_TEGRA194 248 help 249 Enables support for the PCIe controller in the NVIDIA Tegra194 SoC to 250 work in host mode. There are two instances of PCIe controllers in 251 Tegra194. This controller can work either as EP or RC. In order to 252 enable host-specific features PCIE_TEGRA194_HOST must be selected and 253 in order to enable device-specific features PCIE_TEGRA194_EP must be 254 selected. This uses the DesignWare core. 255 256config PCIE_TEGRA194_EP 257 tristate "NVIDIA Tegra194 (and later) PCIe controller (endpoint mode)" 258 depends on (ARCH_TEGRA && ARM64) || COMPILE_TEST 259 depends on PCI_ENDPOINT 260 select PCIE_DW_EP 261 select PHY_TEGRA194_P2U 262 select PCIE_TEGRA194 263 help 264 Enables support for the PCIe controller in the NVIDIA Tegra194 SoC to 265 work in endpoint mode. There are two instances of PCIe controllers in 266 Tegra194. This controller can work either as EP or RC. In order to 267 enable host-specific features PCIE_TEGRA194_HOST must be selected and 268 in order to enable device-specific features PCIE_TEGRA194_EP must be 269 selected. This uses the DesignWare core. 270 271config PCIE_NXP_S32G 272 bool "NXP S32G PCIe controller (host mode)" 273 depends on ARCH_S32 || COMPILE_TEST 274 select PCIE_DW_HOST 275 help 276 Enable support for the PCIe controller in NXP S32G based boards to 277 work in Host mode. The controller is based on DesignWare IP and 278 can work either as RC or EP. In order to enable host-specific 279 features PCIE_NXP_S32G must be selected. 280 281config PCIE_DW_PLAT 282 bool 283 284config PCIE_DW_PLAT_HOST 285 bool "Platform bus based DesignWare PCIe controller (host mode)" 286 depends on PCI_MSI 287 select PCIE_DW_HOST 288 select PCIE_DW_PLAT 289 help 290 Enables support for the PCIe controller in the Designware IP to 291 work in host mode. There are two instances of PCIe controller in 292 Designware IP. 293 This controller can work either as EP or RC. In order to enable 294 host-specific features PCIE_DW_PLAT_HOST must be selected and in 295 order to enable device-specific features PCI_DW_PLAT_EP must be 296 selected. 297 298config PCIE_DW_PLAT_EP 299 bool "Platform bus based DesignWare PCIe controller (endpoint mode)" 300 depends on PCI && PCI_MSI 301 depends on PCI_ENDPOINT 302 select PCIE_DW_EP 303 select PCIE_DW_PLAT 304 help 305 Enables support for the PCIe controller in the Designware IP to 306 work in endpoint mode. There are two instances of PCIe controller 307 in Designware IP. 308 This controller can work either as EP or RC. In order to enable 309 host-specific features PCIE_DW_PLAT_HOST must be selected and in 310 order to enable device-specific features PCI_DW_PLAT_EP must be 311 selected. 312 313config PCIE_QCOM_COMMON 314 bool 315 316config PCIE_QCOM 317 bool "Qualcomm PCIe controller (host mode)" 318 depends on OF && (ARCH_QCOM || COMPILE_TEST) 319 depends on PCI_MSI 320 select PCIE_DW_HOST 321 select CRC8 322 select PCIE_QCOM_COMMON 323 select PCI_HOST_COMMON 324 select PCI_PWRCTRL_GENERIC 325 help 326 Say Y here to enable PCIe controller support on Qualcomm SoCs. The 327 PCIe controller uses the DesignWare core plus Qualcomm-specific 328 hardware wrappers. 329 330config PCIE_QCOM_EP 331 tristate "Qualcomm PCIe controller (endpoint mode)" 332 depends on OF && (ARCH_QCOM || COMPILE_TEST) 333 depends on PCI_ENDPOINT 334 select PCIE_DW_EP 335 select PCIE_QCOM_COMMON 336 help 337 Say Y here to enable support for the PCIe controllers on Qualcomm SoCs 338 to work in endpoint mode. The PCIe controller uses the DesignWare core 339 plus Qualcomm-specific hardware wrappers. 340 341config PCIE_RCAR_GEN4 342 tristate 343 344config PCIE_RCAR_GEN4_HOST 345 tristate "Renesas R-Car Gen4 PCIe controller (host mode)" 346 depends on ARCH_RENESAS || COMPILE_TEST 347 depends on PCI_MSI 348 select PCIE_DW_HOST 349 select PCIE_RCAR_GEN4 350 help 351 Say Y here if you want PCIe controller (host mode) on R-Car Gen4 SoCs. 352 To compile this driver as a module, choose M here: the module will be 353 called pcie-rcar-gen4.ko. This uses the DesignWare core. 354 355config PCIE_RCAR_GEN4_EP 356 tristate "Renesas R-Car Gen4 PCIe controller (endpoint mode)" 357 depends on ARCH_RENESAS || COMPILE_TEST 358 depends on PCI_ENDPOINT 359 select PCIE_DW_EP 360 select PCIE_RCAR_GEN4 361 help 362 Say Y here if you want PCIe controller (endpoint mode) on R-Car Gen4 363 SoCs. To compile this driver as a module, choose M here: the module 364 will be called pcie-rcar-gen4.ko. This uses the DesignWare core. 365 366config PCIE_ROCKCHIP_DW 367 bool 368 369config PCIE_ROCKCHIP_DW_HOST 370 bool "Rockchip DesignWare PCIe controller (host mode)" 371 depends on PCI_MSI 372 depends on ARCH_ROCKCHIP || COMPILE_TEST 373 depends on OF 374 select PCIE_DW_HOST 375 select PCIE_ROCKCHIP_DW 376 help 377 Enables support for the DesignWare PCIe controller in the 378 Rockchip SoC (except RK3399) to work in host mode. 379 380config PCIE_ROCKCHIP_DW_EP 381 bool "Rockchip DesignWare PCIe controller (endpoint mode)" 382 depends on ARCH_ROCKCHIP || COMPILE_TEST 383 depends on OF 384 depends on PCI_ENDPOINT 385 select PCIE_DW_EP 386 select PCIE_ROCKCHIP_DW 387 help 388 Enables support for the DesignWare PCIe controller in the 389 Rockchip SoC (except RK3399) to work in endpoint mode. 390 391config PCI_EXYNOS 392 tristate "Samsung Exynos PCIe controller" 393 depends on ARCH_EXYNOS || COMPILE_TEST 394 depends on PCI_MSI 395 select PCIE_DW_HOST 396 help 397 Enables support for the PCIe controller in the Samsung Exynos SoCs 398 to work in host mode. The PCI controller is based on the DesignWare 399 hardware and therefore the driver re-uses the DesignWare core 400 functions to implement the driver. 401 402config PCIE_FU740 403 bool "SiFive FU740 PCIe controller" 404 depends on PCI_MSI 405 depends on ARCH_SIFIVE || COMPILE_TEST 406 select PCIE_DW_HOST 407 help 408 Say Y here if you want PCIe controller support for the SiFive 409 FU740. 410 411config PCIE_UNIPHIER 412 bool "Socionext UniPhier PCIe controller (host mode)" 413 depends on ARCH_UNIPHIER || COMPILE_TEST 414 depends on OF && HAS_IOMEM 415 depends on PCI_MSI 416 select PCIE_DW_HOST 417 help 418 Say Y here if you want PCIe host controller support on UniPhier SoCs. 419 This driver supports LD20 and PXs3 SoCs. 420 421config PCIE_UNIPHIER_EP 422 bool "Socionext UniPhier PCIe controller (endpoint mode)" 423 depends on ARCH_UNIPHIER || COMPILE_TEST 424 depends on OF && HAS_IOMEM 425 depends on PCI_ENDPOINT 426 select PCIE_DW_EP 427 help 428 Say Y here if you want PCIe endpoint controller support on 429 UniPhier SoCs. This driver supports Pro5 SoC. 430 431config PCIE_SOPHGO_DW 432 bool "Sophgo DesignWare PCIe controller (host mode)" 433 depends on ARCH_SOPHGO || COMPILE_TEST 434 depends on PCI_MSI 435 depends on OF 436 select PCIE_DW_HOST 437 help 438 Say Y here if you want PCIe host controller support on 439 Sophgo SoCs. 440 441config PCIE_SPACEMIT_K1 442 tristate "SpacemiT K1 PCIe controller (host mode)" 443 depends on ARCH_SPACEMIT || COMPILE_TEST 444 depends on HAS_IOMEM 445 select PCIE_DW_HOST 446 select PCI_PWRCTRL_GENERIC 447 default ARCH_SPACEMIT 448 help 449 Enables support for the DesignWare based PCIe controller in 450 the SpacemiT K1 SoC operating in host mode. Three controllers 451 are available on the K1 SoC; the first of these shares a PHY 452 with a USB 3.0 host controller (one or the other can be used). 453 454config PCIE_SPEAR13XX 455 bool "STMicroelectronics SPEAr PCIe controller" 456 depends on ARCH_SPEAR13XX || COMPILE_TEST 457 depends on PCI_MSI 458 select PCIE_DW_HOST 459 help 460 Say Y here if you want PCIe support on SPEAr13XX SoCs. 461 462config PCIE_STM32_HOST 463 tristate "STMicroelectronics STM32MP25 PCIe Controller (host mode)" 464 depends on ARCH_STM32 || COMPILE_TEST 465 depends on PCI_MSI 466 select PCIE_DW_HOST 467 help 468 Enables Root Complex (RC) support for the DesignWare core based PCIe 469 controller found in STM32MP25 SoC. 470 471 This driver can also be built as a module. If so, the module 472 will be called pcie-stm32. 473 474config PCIE_STM32_EP 475 tristate "STMicroelectronics STM32MP25 PCIe Controller (endpoint mode)" 476 depends on ARCH_STM32 || COMPILE_TEST 477 depends on PCI_ENDPOINT 478 select PCIE_DW_EP 479 help 480 Enables Endpoint (EP) support for the DesignWare core based PCIe 481 controller found in STM32MP25 SoC. 482 483 This driver can also be built as a module. If so, the module 484 will be called pcie-stm32-ep. 485 486config PCI_DRA7XX 487 tristate 488 489config PCI_DRA7XX_HOST 490 tristate "TI DRA7xx PCIe controller (host mode)" 491 depends on SOC_DRA7XX || COMPILE_TEST 492 depends on OF && HAS_IOMEM && TI_PIPE3 493 depends on PCI_MSI 494 select PCIE_DW_HOST 495 select PCI_DRA7XX 496 default y if SOC_DRA7XX 497 help 498 Enables support for the PCIe controller in the DRA7xx SoC to work in 499 host mode. There are two instances of PCIe controller in DRA7xx. 500 This controller can work either as EP or RC. In order to enable 501 host-specific features PCI_DRA7XX_HOST must be selected and in order 502 to enable device-specific features PCI_DRA7XX_EP must be selected. 503 This uses the DesignWare core. 504 505config PCI_DRA7XX_EP 506 tristate "TI DRA7xx PCIe controller (endpoint mode)" 507 depends on SOC_DRA7XX || COMPILE_TEST 508 depends on OF && HAS_IOMEM && TI_PIPE3 509 depends on PCI_ENDPOINT 510 select PCIE_DW_EP 511 select PCI_DRA7XX 512 help 513 Enables support for the PCIe controller in the DRA7xx SoC to work in 514 endpoint mode. There are two instances of PCIe controller in DRA7xx. 515 This controller can work either as EP or RC. In order to enable 516 host-specific features PCI_DRA7XX_HOST must be selected and in order 517 to enable device-specific features PCI_DRA7XX_EP must be selected. 518 This uses the DesignWare core. 519 520# ARM32 platforms use hook_fault_code() and cannot support loadable module. 521config PCI_KEYSTONE 522 bool 523 524# On non-ARM32 platforms, loadable module can be supported. 525config PCI_KEYSTONE_TRISTATE 526 tristate 527 528config PCI_KEYSTONE_HOST 529 tristate "TI Keystone PCIe controller (host mode)" 530 depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST 531 depends on PCI_MSI 532 select PCIE_DW_HOST 533 select PCI_KEYSTONE if ARM 534 select PCI_KEYSTONE_TRISTATE if !ARM 535 help 536 Enables support for the PCIe controller in the Keystone SoC to 537 work in host mode. The PCI controller on Keystone is based on 538 DesignWare hardware and therefore the driver re-uses the 539 DesignWare core functions to implement the driver. 540 541config PCI_KEYSTONE_EP 542 tristate "TI Keystone PCIe controller (endpoint mode)" 543 depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST 544 depends on PCI_ENDPOINT 545 select PCIE_DW_EP 546 select PCI_KEYSTONE if ARM 547 select PCI_KEYSTONE_TRISTATE if !ARM 548 help 549 Enables support for the PCIe controller in the Keystone SoC to 550 work in endpoint mode. The PCI controller on Keystone is based 551 on DesignWare hardware and therefore the driver re-uses the 552 DesignWare core functions to implement the driver. 553 554config PCIE_VISCONTI_HOST 555 bool "Toshiba Visconti PCIe controller" 556 depends on ARCH_VISCONTI || COMPILE_TEST 557 depends on PCI_MSI 558 select PCIE_DW_HOST 559 help 560 Say Y here if you want PCIe controller support on Toshiba Visconti SoC. 561 This driver supports TMPV7708 SoC. 562 563endmenu 564