Skip to content

Commit 2f2c725

Browse files
committed
Merge tag 'pci-v6.18-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci
Pull pci updates from Bjorn Helgaas: "Enumeration: - Add PCI_FIND_NEXT_CAP() and PCI_FIND_NEXT_EXT_CAP() macros that take config space accessor functions. Implement pci_find_capability(), pci_find_ext_capability(), and dwc, dwc endpoint, and cadence capability search interfaces with them (Hans Zhang) - Leave parent unit address 0 in 'interrupt-map' so that when we build devicetree nodes to describe PCI functions that contain multiple peripherals, we can build this property even when interrupt controllers lack 'reg' properties (Lorenzo Pieralisi) - Add a Xeon 6 quirk to disable Extended Tags and limit Max Read Request Size to 128B to avoid a performance issue (Ilpo Järvinen) - Add sysfs 'serial_number' file to expose the Device Serial Number (Matthew Wood) - Fix pci_acpi_preserve_config() memory leak (Nirmoy Das) Resource management: - Align m68k pcibios_enable_device() with other arches (Ilpo Järvinen) - Remove sparc pcibios_enable_device() implementations that don't do anything beyond what pci_enable_resources() does (Ilpo Järvinen) - Remove mips pcibios_enable_resources() and use pci_enable_resources() instead (Ilpo Järvinen) - Clean up bridge window sizing and assignment (Ilpo Järvinen), including: - Leave non-claimed bridge windows disabled - Enable bridges even if a window wasn't assigned because not all windows are required by downstream devices - Preserve bridge window type when releasing the resource, since the type is needed for reassignment - Consolidate selection of bridge windows into two new interfaces, pbus_select_window() and pbus_select_window_for_type(), so this is done consistently - Compute bridge window start and end earlier to avoid logging stale information MSI: - Add quirk to disable MSI on RDC PCI to PCIe bridges (Marcos Del Sol Vives) Error handling: - Align AER with EEH by allowing drivers to request a Bus Reset on Non-Fatal Errors (in addition to the reset on Fatal Errors that we already do) (Lukas Wunner) - If error recovery fails, emit FAILED_RECOVERY uevents for the devices, not for the bridge leading to them. This makes them correspond to BEGIN_RECOVERY uevents (Lukas Wunner) - Align AER with EEH by calling err_handler.error_detected() callbacks to notify drivers if error recovery fails (Lukas Wunner) - Align AER with EEH by restoring device error_state to pci_channel_io_normal before the err_handler.slot_reset() callback. This is earlier than before the err_handler.resume() callback (Lukas Wunner) - Emit a BEGIN_RECOVERY uevent when driver's err_handler.error_detected() requests a reset, as well as when it says recovery is complete or can be done without a reset (Niklas Schnelle) - Align s390 with AER and EEH by emitting uevents during error recovery (Niklas Schnelle) - Align EEH with AER and s390 by emitting BEGIN_RECOVERY, SUCCESSFUL_RECOVERY, or FAILED_RECOVERY uevents depending on the result of err_handler.error_detected() (Niklas Schnelle) - Fix a NULL pointer dereference in aer_ratelimit() when ACPI GHES error information identifies a device without an AER Capability (Breno Leitao) - Update error decoding and TLP Log printing for new errors in current PCIe base spec (Lukas Wunner) - Update error recovery documentation to match the current code and use consistent nomenclature (Lukas Wunner) ASPM: - Enable all ClockPM and ASPM states for devicetree platforms, since there's typically no firmware that enables ASPM This is a risky change that may uncover hardware or configuration defects at boot-time rather than when users enable ASPM via sysfs later. Booting with "pcie_aspm=off" prevents this enabling (Manivannan Sadhasivam) - Remove the qcom code that enabled ASPM (Manivannan Sadhasivam) Power management: - If a device has already been disconnected, e.g., by a hotplug removal, don't bother trying to resume it to D0 when detaching the driver. This avoids annoying "Unable to change power state from D3cold to D0" messages (Mario Limonciello) - Ensure devices are powered up before config reads for 'max_link_width', 'current_link_speed', 'current_link_width', 'secondary_bus_number', and 'subordinate_bus_number' sysfs files. This prevents using invalid data (~0) in drivers or lspci and, depending on how the PCIe controller reports errors, may avoid error interrupts or crashes (Brian Norris) Virtualization: - Add rescan/remove locking when enabling/disabling SR-IOV, which avoids list corruption on s390, where disabling SR-IOV also generates hotplug events (Niklas Schnelle) Peer-to-peer DMA: - Free struct p2p_pgmap, not a member within it, in the pci_p2pdma_add_resource() error path (Sungho Kim) Endpoint framework: - Document sysfs interface for BAR assignment of vNTB endpoint functions (Jerome Brunet) - Fix array underflow in endpoint BAR test case (Dan Carpenter) - Skip endpoint IRQ test if the IRQ is out of range to avoid false errors (Christian Bruel) - Fix endpoint test case for controllers with fixed-size BARs smaller than requested by the test (Marek Vasut) - Restore inbound translation when disabling doorbell so the endpoint doorbell test case can be run more than once (Niklas Cassel) - Avoid a NULL pointer dereference when releasing DMA channels in endpoint DMA test case (Shin'ichiro Kawasaki) - Convert tegra194 interrupt number to MSI vector to fix endpoint Kselftest MSI_TEST test case (Niklas Cassel) - Reset tegra194 BARs when running in endpoint mode so the BAR tests don't overwrite the ATU settings in BAR4 (Niklas Cassel) - Handle errors in tegra194 BPMP transactions so we don't mistakenly skip future PERST# assertion (Vidya Sagar) AMD MDB PCIe controller driver: - Update DT binding example to separate PERST# to a Root Port stanza to make multiple Root Ports possible in the future (Sai Krishna Musham) - Add driver support for PERST# being described in a Root Port stanza, falling back to the host bridge if not found there (Sai Krishna Musham) Freescale i.MX6 PCIe controller driver: - Enable the 3.3V Vaux supply if available so devices can request wakeup with either Beacon or WAKE# (Richard Zhu) MediaTek PCIe Gen3 controller driver: - Add optional sys clock ready time setting to avoid sys_clk_rdy signal glitching in MT6991 and MT8196 (AngeloGioacchino Del Regno) - Add DT binding and driver support for MT6991 and MT8196 (AngeloGioacchino Del Regno) NVIDIA Tegra PCIe controller driver: - When asserting PERST#, disable the controller instead of mistakenly disabling the PLL twice (Nagarjuna Kristam) - Convert struct tegra_msi mask_lock to raw spinlock to avoid a lock nesting error (Marek Vasut) Qualcomm PCIe controller driver: - Select PCI Power Control Slot driver so slot voltage rails can be turned on/off if described in Root Port devicetree node (Qiang Yu) - Parse only PCI bridge child nodes in devicetree, skipping unrelated nodes such as OPP (Operating Performance Points), which caused probe failures (Krishna Chaitanya Chundru) - Add 8.0 GT/s and 32.0 GT/s equalization settings (Ziyue Zhang) - Consolidate Root Port 'phy' and 'reset' properties in struct qcom_pcie_port, regardless of whether we got them from the Root Port node or the host bridge node (Manivannan Sadhasivam) - Fetch and map the ELBI register space in the DWC core rather than in each driver individually (Krishna Chaitanya Chundru) - Enable ECAM mechanism in DWC core by setting up iATU with 'CFG Shift Feature' and use this in the qcom driver (Krishna Chaitanya Chundru) - Add SM8750 compatible to qcom,pcie-sm8550.yaml (Krishna Chaitanya Chundru) - Update qcom,pcie-x1e80100.yaml to allow fifth PCIe host on Qualcomm Glymur, which is compatible with X1E80100 but doesn't have the cnoc_sf_axi clock (Qiang Yu) Renesas R-Car PCIe controller driver: - Fix a typo that prevented correct PHY initialization (Marek Vasut) - Add a missing 1ms delay after PWR reset assertion as required by the V4H manual (Marek Vasut) - Assure reset has completed before DBI access to avoid SError (Marek Vasut) - Fix inverted PHY initialization check, which sometimes led to timeouts and failure to start the controller (Marek Vasut) - Pass the correct IRQ domain to generic_handle_domain_irq() to fix a regression when converting to msi_create_parent_irq_domain() (Claudiu Beznea) - Drop the spinlock protecting the PMSR register - it's no longer required since pci_lock already serializes accesses (Marek Vasut) - Convert struct rcar_msi mask_lock to raw spinlock to avoid a lock nesting error (Marek Vasut) SOPHGO PCIe controller driver: - Check for existence of struct cdns_pcie.ops before using it to allow Cadence drivers that don't need to supply ops (Chen Wang) - Add DT binding and driver for the SOPHGO SG2042 PCIe controller (Chen Wang) STMicroelectronics STM32MP25 PCIe controller driver: - Update pinctrl documentation of initial states and use in runtime suspend/resume (Christian Bruel) - Add pinctrl_pm_select_init_state() for use by stm32 driver, which needs it during resume (Christian Bruel) - Add devicetree bindings and drivers for the STMicroelectronics STM32MP25 in host and endpoint modes (Christian Bruel) Synopsys DesignWare PCIe controller driver: - Add support for x16 in devicetree 'num-lanes' property (Konrad Dybcio) - Verify that if DT specifies a single IRQ for all eDMA channels, it is named 'dma' (Niklas Cassel) TI J721E PCIe driver: - Add MODULE_DEVICE_TABLE() so driver can be autoloaded (Siddharth Vadapalli) - Power controller off before configuring the glue layer so the controller latches the correct values on power-on (Siddharth Vadapalli) TI Keystone PCIe controller driver: - Use devm_request_irq() so 'ks-pcie-error-irq' is freed when driver exits with error (Siddharth Vadapalli) - Add Peripheral Virtualization Unit (PVU), which restricts DMA from PCIe devices to specific regions of host memory, to the ti,am65 binding (Jan Kiszka) Xilinx NWL PCIe controller driver: - Clear bootloader E_ECAM_CONTROL before merging in the new driver value to avoid writing invalid values (Jani Nurminen)" * tag 'pci-v6.18-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci: (141 commits) PCI/AER: Avoid NULL pointer dereference in aer_ratelimit() MAINTAINERS: Add entry for ST STM32MP25 PCIe drivers PCI: stm32-ep: Add PCIe Endpoint support for STM32MP25 dt-bindings: PCI: Add STM32MP25 PCIe Endpoint bindings PCI: stm32: Add PCIe host support for STM32MP25 PCI: xilinx-nwl: Fix ECAM programming PCI: j721e: Fix incorrect error message in probe() PCI: keystone: Use devm_request_irq() to free "ks-pcie-error-irq" on exit dt-bindings: PCI: qcom,pcie-x1e80100: Set clocks minItems for the fifth Glymur PCIe Controller PCI: dwc: Support 16-lane operation PCI: Add lockdep assertion in pci_stop_and_remove_bus_device() PCI/IOV: Add PCI rescan-remove locking when enabling/disabling SR-IOV PCI: rcar-host: Convert struct rcar_msi mask_lock into raw spinlock PCI: tegra194: Rename 'root_bus' to 'root_port_bus' in tegra_pcie_downstream_dev_to_D0() PCI: tegra: Convert struct tegra_msi mask_lock into raw spinlock PCI: rcar-gen4: Fix inverted break condition in PHY initialization PCI: rcar-gen4: Assure reset occurs before DBI access PCI: rcar-gen4: Add missing 1ms delay after PWR reset assertion PCI: Set up bridge resources earlier PCI: rcar-host: Drop PMSR spinlock ...
2 parents e4c0fdd + 51204fa commit 2f2c725

File tree

103 files changed

+3167
-1299
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+3167
-1299
lines changed

Documentation/ABI/testing/sysfs-bus-pci

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,3 +612,12 @@ Description:
612612

613613
# ls doe_features
614614
0001:01 0001:02 doe_discovery
615+
616+
What: /sys/bus/pci/devices/.../serial_number
617+
Date: December 2025
618+
Contact: Matthew Wood <[email protected]>
619+
Description:
620+
This is visible only for PCI devices that support the serial
621+
number extended capability. The file is read only and due to
622+
the possible sensitivity of accessible serial numbers, admin
623+
only.

Documentation/PCI/endpoint/pci-vntb-howto.rst

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,9 @@ of the function device and is populated with the following NTB specific
9090
attributes that can be configured by the user::
9191

9292
# ls functions/pci_epf_vntb/func1/pci_epf_vntb.0/
93-
db_count mw1 mw2 mw3 mw4 num_mws
94-
spad_count
93+
ctrl_bar db_count mw1_bar mw2_bar mw3_bar mw4_bar spad_count
94+
db_bar mw1 mw2 mw3 mw4 num_mws vbus_number
95+
vntb_vid vntb_pid
9596

9697
A sample configuration for NTB function is given below::
9798

@@ -100,6 +101,10 @@ A sample configuration for NTB function is given below::
100101
# echo 1 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/num_mws
101102
# echo 0x100000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw1
102103

104+
By default, each construct is assigned a BAR, as needed and in order.
105+
Should a specific BAR setup be required by the platform, BAR may be assigned
106+
to each construct using the related ``XYZ_bar`` entry.
107+
103108
A sample configuration for virtual NTB driver for virtual PCI bus::
104109

105110
# echo 0x1957 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vntb_vid

Documentation/PCI/pci-error-recovery.rst

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ PCI Error Recovery
1313
Many PCI bus controllers are able to detect a variety of hardware
1414
PCI errors on the bus, such as parity errors on the data and address
1515
buses, as well as SERR and PERR errors. Some of the more advanced
16-
chipsets are able to deal with these errors; these include PCI-E chipsets,
16+
chipsets are able to deal with these errors; these include PCIe chipsets,
1717
and the PCI-host bridges found on IBM Power4, Power5 and Power6-based
1818
pSeries boxes. A typical action taken is to disconnect the affected device,
1919
halting all I/O to it. The goal of a disconnection is to avoid system
@@ -108,8 +108,8 @@ A driver does not have to implement all of these callbacks; however,
108108
if it implements any, it must implement error_detected(). If a callback
109109
is not implemented, the corresponding feature is considered unsupported.
110110
For example, if mmio_enabled() and resume() aren't there, then it
111-
is assumed that the driver is not doing any direct recovery and requires
112-
a slot reset. Typically a driver will want to know about
111+
is assumed that the driver does not need these callbacks
112+
for recovery. Typically a driver will want to know about
113113
a slot_reset().
114114

115115
The actual steps taken by a platform to recover from a PCI error
@@ -122,6 +122,10 @@ A PCI bus error is detected by the PCI hardware. On powerpc, the slot
122122
is isolated, in that all I/O is blocked: all reads return 0xffffffff,
123123
all writes are ignored.
124124

125+
Similarly, on platforms supporting Downstream Port Containment
126+
(PCIe r7.0 sec 6.2.11), the link to the sub-hierarchy with the
127+
faulting device is disabled. Any device in the sub-hierarchy
128+
becomes inaccessible.
125129

126130
STEP 1: Notification
127131
--------------------
@@ -141,6 +145,9 @@ shouldn't do any new IOs. Called in task context. This is sort of a
141145
All drivers participating in this system must implement this call.
142146
The driver must return one of the following result codes:
143147

148+
- PCI_ERS_RESULT_RECOVERED
149+
Driver returns this if it thinks the device is usable despite
150+
the error and does not need further intervention.
144151
- PCI_ERS_RESULT_CAN_RECOVER
145152
Driver returns this if it thinks it might be able to recover
146153
the HW by just banging IOs or if it wants to be given
@@ -199,7 +206,25 @@ reset or some such, but not restart operations. This callback is made if
199206
all drivers on a segment agree that they can try to recover and if no automatic
200207
link reset was performed by the HW. If the platform can't just re-enable IOs
201208
without a slot reset or a link reset, it will not call this callback, and
202-
instead will have gone directly to STEP 3 (Link Reset) or STEP 4 (Slot Reset)
209+
instead will have gone directly to STEP 3 (Link Reset) or STEP 4 (Slot Reset).
210+
211+
.. note::
212+
213+
On platforms supporting Advanced Error Reporting (PCIe r7.0 sec 6.2),
214+
the faulting device may already be accessible in STEP 1 (Notification).
215+
Drivers should nevertheless defer accesses to STEP 2 (MMIO Enabled)
216+
to be compatible with EEH on powerpc and with s390 (where devices are
217+
inaccessible until STEP 2).
218+
219+
On platforms supporting Downstream Port Containment, the link to the
220+
sub-hierarchy with the faulting device is re-enabled in STEP 3 (Link
221+
Reset). Hence devices in the sub-hierarchy are inaccessible until
222+
STEP 4 (Slot Reset).
223+
224+
For errors such as Surprise Down (PCIe r7.0 sec 6.2.7), the device
225+
may not even be accessible in STEP 4 (Slot Reset). Drivers can detect
226+
accessibility by checking whether reads from the device return all 1's
227+
(PCI_POSSIBLE_ERROR()).
203228

204229
.. note::
205230

@@ -234,14 +259,14 @@ The driver should return one of the following result codes:
234259

235260
The next step taken depends on the results returned by the drivers.
236261
If all drivers returned PCI_ERS_RESULT_RECOVERED, then the platform
237-
proceeds to either STEP3 (Link Reset) or to STEP 5 (Resume Operations).
262+
proceeds to either STEP 3 (Link Reset) or to STEP 5 (Resume Operations).
238263

239264
If any driver returned PCI_ERS_RESULT_NEED_RESET, then the platform
240265
proceeds to STEP 4 (Slot Reset)
241266

242267
STEP 3: Link Reset
243268
------------------
244-
The platform resets the link. This is a PCI-Express specific step
269+
The platform resets the link. This is a PCIe specific step
245270
and is done whenever a fatal error has been detected that can be
246271
"solved" by resetting the link.
247272

@@ -263,13 +288,13 @@ that is equivalent to what it would be after a fresh system
263288
power-on followed by power-on BIOS/system firmware initialization.
264289
Soft reset is also known as hot-reset.
265290

266-
Powerpc fundamental reset is supported by PCI Express cards only
291+
Powerpc fundamental reset is supported by PCIe cards only
267292
and results in device's state machines, hardware logic, port states and
268293
configuration registers to initialize to their default conditions.
269294

270295
For most PCI devices, a soft reset will be sufficient for recovery.
271296
Optional fundamental reset is provided to support a limited number
272-
of PCI Express devices for which a soft reset is not sufficient
297+
of PCIe devices for which a soft reset is not sufficient
273298
for recovery.
274299

275300
If the platform supports PCI hotplug, then the reset might be
@@ -313,7 +338,7 @@ Result codes:
313338
- PCI_ERS_RESULT_DISCONNECT
314339
Same as above.
315340

316-
Drivers for PCI Express cards that require a fundamental reset must
341+
Drivers for PCIe cards that require a fundamental reset must
317342
set the needs_freset bit in the pci_dev structure in their probe function.
318343
For example, the QLogic qla2xxx driver sets the needs_freset bit for certain
319344
PCI card types::

Documentation/PCI/pcieaer-howto.rst

Lines changed: 40 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,16 @@ AER error output
7070
----------------
7171

7272
When a PCIe AER error is captured, an error message will be output to
73-
console. If it's a correctable error, it is output as an info message.
73+
console. If it's a correctable error, it is output as a warning message.
7474
Otherwise, it is printed as an error. So users could choose different
7575
log level to filter out correctable error messages.
7676

7777
Below shows an example::
7878

79-
0000:50:00.0: PCIe Bus Error: severity=Uncorrected (Fatal), type=Transaction Layer, id=0500(Requester ID)
79+
0000:50:00.0: PCIe Bus Error: severity=Uncorrectable (Fatal), type=Transaction Layer, (Requester ID)
8080
0000:50:00.0: device [8086:0329] error status/mask=00100000/00000000
81-
0000:50:00.0: [20] Unsupported Request (First)
82-
0000:50:00.0: TLP Header: 04000001 00200a03 05010000 00050100
81+
0000:50:00.0: [20] UnsupReq (First)
82+
0000:50:00.0: TLP Header: 0x04000001 0x00200a03 0x05010000 0x00050100
8383

8484
In the example, 'Requester ID' means the ID of the device that sent
8585
the error message to the Root Port. Please refer to PCIe specs for other
@@ -138,7 +138,7 @@ error message to the Root Port above it when it captures
138138
an error. The Root Port, upon receiving an error reporting message,
139139
internally processes and logs the error message in its AER
140140
Capability structure. Error information being logged includes storing
141-
the error reporting agent's requestor ID into the Error Source
141+
the error reporting agent's Requester ID into the Error Source
142142
Identification Registers and setting the error bits of the Root Error
143143
Status Register accordingly. If AER error reporting is enabled in the Root
144144
Error Command Register, the Root Port generates an interrupt when an
@@ -152,18 +152,6 @@ the device driver.
152152
Provide callbacks
153153
-----------------
154154

155-
callback reset_link to reset PCIe link
156-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
157-
158-
This callback is used to reset the PCIe physical link when a
159-
fatal error happens. The Root Port AER service driver provides a
160-
default reset_link function, but different Upstream Ports might
161-
have different specifications to reset the PCIe link, so
162-
Upstream Port drivers may provide their own reset_link functions.
163-
164-
Section 3.2.2.2 provides more detailed info on when to call
165-
reset_link.
166-
167155
PCI error-recovery callbacks
168156
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
169157

@@ -174,8 +162,8 @@ when performing error recovery actions.
174162
Data struct pci_driver has a pointer, err_handler, to point to
175163
pci_error_handlers who consists of a couple of callback function
176164
pointers. The AER driver follows the rules defined in
177-
pci-error-recovery.rst except PCIe-specific parts (e.g.
178-
reset_link). Please refer to pci-error-recovery.rst for detailed
165+
pci-error-recovery.rst except PCIe-specific parts (see
166+
below). Please refer to pci-error-recovery.rst for detailed
179167
definitions of the callbacks.
180168

181169
The sections below specify when to call the error callback functions.
@@ -189,10 +177,21 @@ software intervention or any loss of data. These errors do not
189177
require any recovery actions. The AER driver clears the device's
190178
correctable error status register accordingly and logs these errors.
191179

192-
Non-correctable (non-fatal and fatal) errors
193-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
180+
Uncorrectable (non-fatal and fatal) errors
181+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
194182

195-
If an error message indicates a non-fatal error, performing link reset
183+
The AER driver performs a Secondary Bus Reset to recover from
184+
uncorrectable errors. The reset is applied at the port above
185+
the originating device: If the originating device is an Endpoint,
186+
only the Endpoint is reset. If on the other hand the originating
187+
device has subordinate devices, those are all affected by the
188+
reset as well.
189+
190+
If the originating device is a Root Complex Integrated Endpoint,
191+
there's no port above where a Secondary Bus Reset could be applied.
192+
In this case, the AER driver instead applies a Function Level Reset.
193+
194+
If an error message indicates a non-fatal error, performing a reset
196195
at upstream is not required. The AER driver calls error_detected(dev,
197196
pci_channel_io_normal) to all drivers associated within a hierarchy in
198197
question. For example::
@@ -204,38 +203,34 @@ Downstream Port B and Endpoint.
204203

205204
A driver may return PCI_ERS_RESULT_CAN_RECOVER,
206205
PCI_ERS_RESULT_DISCONNECT, or PCI_ERS_RESULT_NEED_RESET, depending on
207-
whether it can recover or the AER driver calls mmio_enabled as next.
206+
whether it can recover without a reset, considers the device unrecoverable
207+
or needs a reset for recovery. If all affected drivers agree that they can
208+
recover without a reset, it is skipped. Should one driver request a reset,
209+
it overrides all other drivers.
208210

209211
If an error message indicates a fatal error, kernel will broadcast
210212
error_detected(dev, pci_channel_io_frozen) to all drivers within
211-
a hierarchy in question. Then, performing link reset at upstream is
212-
necessary. As different kinds of devices might use different approaches
213-
to reset link, AER port service driver is required to provide the
214-
function to reset link via callback parameter of pcie_do_recovery()
215-
function. If reset_link is not NULL, recovery function will use it
216-
to reset the link. If error_detected returns PCI_ERS_RESULT_CAN_RECOVER
217-
and reset_link returns PCI_ERS_RESULT_RECOVERED, the error handling goes
218-
to mmio_enabled.
219-
220-
Frequent Asked Questions
221-
------------------------
213+
a hierarchy in question. Then, performing a reset at upstream is
214+
necessary. If error_detected returns PCI_ERS_RESULT_CAN_RECOVER
215+
to indicate that recovery without a reset is possible, the error
216+
handling goes to mmio_enabled, but afterwards a reset is still
217+
performed.
222218

223-
Q:
224-
What happens if a PCIe device driver does not provide an
225-
error recovery handler (pci_driver->err_handler is equal to NULL)?
219+
In other words, for non-fatal errors, drivers may opt in to a reset.
220+
But for fatal errors, they cannot opt out of a reset, based on the
221+
assumption that the link is unreliable.
226222

227-
A:
228-
The devices attached with the driver won't be recovered. If the
229-
error is fatal, kernel will print out warning messages. Please refer
230-
to section 3 for more information.
223+
Frequently Asked Questions
224+
--------------------------
231225

232226
Q:
233-
What happens if an upstream port service driver does not provide
234-
callback reset_link?
227+
What happens if a PCIe device driver does not provide an
228+
error recovery handler (pci_driver->err_handler is equal to NULL)?
235229

236230
A:
237-
Fatal error recovery will fail if the errors are reported by the
238-
upstream ports who are attached by the service driver.
231+
The devices attached with the driver won't be recovered.
232+
The kernel will print out informational messages to identify
233+
unrecoverable devices.
239234

240235

241236
Software error injection

Documentation/devicetree/bindings/pci/amd,versal2-mdb-host.yaml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,17 @@ properties:
7171
- "#address-cells"
7272
- "#interrupt-cells"
7373

74+
patternProperties:
75+
'^pcie@[0-2],0$':
76+
type: object
77+
$ref: /schemas/pci/pci-pci-bridge.yaml#
78+
79+
properties:
80+
reg:
81+
maxItems: 1
82+
83+
unevaluatedProperties: false
84+
7485
required:
7586
- reg
7687
- reg-names
@@ -87,6 +98,7 @@ examples:
8798
- |
8899
#include <dt-bindings/interrupt-controller/arm-gic.h>
89100
#include <dt-bindings/interrupt-controller/irq.h>
101+
#include <dt-bindings/gpio/gpio.h>
90102
91103
soc {
92104
#address-cells = <2>;
@@ -112,10 +124,20 @@ examples:
112124
#size-cells = <2>;
113125
#interrupt-cells = <1>;
114126
device_type = "pci";
127+
128+
pcie@0,0 {
129+
device_type = "pci";
130+
reg = <0x0 0x0 0x0 0x0 0x0>;
131+
reset-gpios = <&tca6416_u37 7 GPIO_ACTIVE_LOW>;
132+
#address-cells = <3>;
133+
#size-cells = <2>;
134+
ranges;
135+
};
136+
115137
pcie_intc_0: interrupt-controller {
116138
#address-cells = <0>;
117139
#interrupt-cells = <1>;
118140
interrupt-controller;
119-
};
141+
};
120142
};
121143
};

Documentation/devicetree/bindings/pci/mediatek-pcie-gen3.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ properties:
5252
- mediatek,mt8188-pcie
5353
- mediatek,mt8195-pcie
5454
- const: mediatek,mt8192-pcie
55+
- items:
56+
- enum:
57+
- mediatek,mt6991-pcie
58+
- const: mediatek,mt8196-pcie
5559
- const: mediatek,mt8192-pcie
60+
- const: mediatek,mt8196-pcie
5661
- const: airoha,en7581-pcie
5762

5863
reg:
@@ -212,6 +217,36 @@ allOf:
212217

213218
mediatek,pbus-csr: false
214219

220+
- if:
221+
properties:
222+
compatible:
223+
contains:
224+
enum:
225+
- mediatek,mt8196-pcie
226+
then:
227+
properties:
228+
clocks:
229+
minItems: 6
230+
231+
clock-names:
232+
items:
233+
- const: pl_250m
234+
- const: tl_26m
235+
- const: bus
236+
- const: low_power
237+
- const: peri_26m
238+
- const: peri_mem
239+
240+
resets:
241+
minItems: 2
242+
243+
reset-names:
244+
items:
245+
- const: phy
246+
- const: mac
247+
248+
mediatek,pbus-csr: false
249+
215250
- if:
216251
properties:
217252
compatible:

0 commit comments

Comments
 (0)