1# SPDX-License-Identifier: GPL-2.0
2#
3# PCI Express Port Bus Configuration
4#
5config PCIEPORTBUS
6	bool "PCI Express Port Bus support"
7	default y if USB4
8	help
9	  This enables PCI Express Port Bus support. Users can then enable
10	  support for Native Hot-Plug, Advanced Error Reporting, Power
11	  Management Events, and Downstream Port Containment.
12
13#
14# Include service Kconfig here
15#
16config HOTPLUG_PCI_PCIE
17	bool "PCI Express Hotplug driver"
18	depends on HOTPLUG_PCI && PCIEPORTBUS
19	default y if USB4
20	help
21	  Say Y here if you have a motherboard that supports PCIe native
22	  hotplug.
23
24	  Thunderbolt/USB4 PCIe tunneling depends on native PCIe hotplug.
25
26	  When in doubt, say N.
27
28config PCIEAER
29	bool "PCI Express Advanced Error Reporting support"
30	depends on PCIEPORTBUS
31	select RAS
32	help
33	  This enables PCI Express Root Port Advanced Error Reporting
34	  (AER) driver support. Error reporting messages sent to Root
35	  Port will be handled by PCI Express AER driver.
36
37config PCIEAER_INJECT
38	tristate "PCI Express error injection support"
39	depends on PCIEAER
40	select GENERIC_IRQ_INJECTION
41	help
42	  This enables PCI Express Root Port Advanced Error Reporting
43	  (AER) software error injector.
44
45	  Debugging AER code is quite difficult because it is hard
46	  to trigger various real hardware errors. Software-based
47	  error injection can fake almost all kinds of errors with the
48	  help of a user space helper tool aer-inject, which can be
49	  gotten from:
50	     https://git.kernel.org/cgit/linux/kernel/git/gong.chen/aer-inject.git/
51
52config PCIEAER_CXL
53	bool "PCI Express CXL RAS support"
54	default y
55	depends on PCIEAER && CXL_PCI
56	help
57	  Enables CXL error handling.
58
59	  If unsure, say Y.
60
61#
62# PCI Express ECRC
63#
64config PCIE_ECRC
65	bool "PCI Express ECRC settings control"
66	depends on PCIEAER
67	help
68	  Used to override firmware/bios settings for PCI Express ECRC
69	  (transaction layer end-to-end CRC checking).
70
71	  When in doubt, say N.
72
73#
74# PCI Express ASPM
75#
76config PCIEASPM
77	bool "PCI Express ASPM control" if EXPERT
78	default y
79	help
80	  This enables OS control over PCI Express ASPM (Active State
81	  Power Management) and Clock Power Management. ASPM supports
82	  state L0/L0s/L1.
83
84	  ASPM is initially set up by the firmware. With this option enabled,
85	  Linux can modify this state in order to disable ASPM on known-bad
86	  hardware or configurations and enable it when known-safe.
87
88	  ASPM can be disabled or enabled at runtime via
89	  /sys/module/pcie_aspm/parameters/policy
90
91	  When in doubt, say Y.
92
93choice
94	prompt "Default ASPM policy"
95	default PCIEASPM_DEFAULT
96	depends on PCIEASPM
97
98config PCIEASPM_DEFAULT
99	bool "BIOS default"
100	depends on PCIEASPM
101	help
102	  Use the BIOS defaults for PCI Express ASPM.
103
104config PCIEASPM_POWERSAVE
105	bool "Powersave"
106	depends on PCIEASPM
107	help
108	  Enable PCI Express ASPM L0s and L1 where possible, even if the
109	  BIOS did not.
110
111config PCIEASPM_POWER_SUPERSAVE
112	bool "Power Supersave"
113	depends on PCIEASPM
114	help
115	  Same as PCIEASPM_POWERSAVE, except it also enables L1 substates where
116	  possible. This would result in higher power savings while staying in L1
117	  where the components support it.
118
119config PCIEASPM_PERFORMANCE
120	bool "Performance"
121	depends on PCIEASPM
122	help
123	  Disable PCI Express ASPM L0s and L1, even if the BIOS enabled them.
124endchoice
125
126config PCIE_PME
127	def_bool y
128	depends on PCIEPORTBUS && PM
129
130config PCIE_DPC
131	bool "PCI Express Downstream Port Containment support"
132	depends on PCIEPORTBUS && PCIEAER
133	help
134	  This enables PCI Express Downstream Port Containment (DPC)
135	  driver support.  DPC events from Root and Downstream ports
136	  will be handled by the DPC driver.  If your system doesn't
137	  have this capability or you do not want to use this feature,
138	  it is safe to answer N.
139
140config PCIE_PTM
141	bool "PCI Express Precision Time Measurement support"
142	help
143	  This enables PCI Express Precision Time Measurement (PTM)
144	  support.
145
146	  This is only useful if you have devices that support PTM, but it
147	  is safe to enable even if you don't.
148
149config PCIE_EDR
150	bool "PCI Express Error Disconnect Recover support"
151	depends on PCIE_DPC && ACPI
152	help
153	  This option adds Error Disconnect Recover support as specified
154	  in the Downstream Port Containment Related Enhancements ECN to
155	  the PCI Firmware Specification r3.2.  Enable this if you want to
156	  support hybrid DPC model which uses both firmware and OS to
157	  implement DPC.
158