[GIT PULL] PCI changes for v6.3

From: Bjorn Helgaas
Date: Wed Feb 22 2023 - 15:18:01 EST


This includes several Synopsys DesignWare eDMA controller driver changes
that are in drivers/dma, not drivers/pci. These lead up to eDMA support in
PCIe Root Port and Endpoint drivers and have been acked by Vinod.

The following changes since commit 1b929c02afd37871d5afb9d498426f83432e71c2:

Linux 6.2-rc1 (2022-12-25 13:41:39 -0800)

are available in the Git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git tags/pci-v6.3-changes

for you to fetch changes up to 3eb5d0f26f4ea604e83ca499a72c0d33638f4765:

Merge branch 'pci/misc' (2023-02-22 13:47:32 -0600)

----------------------------------------------------------------
Enumeration:

- Rework portdrv shutdown so it disables interrupts but doesn't disable
bus mastering, which leads to hangs on Loongson LS7A.

- Add mechanism to prevent Max_Read_Request_Size (MRRS) increases, again
to avoid hardware issues on Loongson LS7A (and likely other devices
based on DesignWare IP).

- Ignore devices with a firmware (DT or ACPI) node that says the device
is disabled.

Resource management:

- Distribute spare resources to unconfigured hotplug bridges at boot-time
(not just when hot-adding such a bridge), which makes hot-adding
devices to docks work better. Tried this in v6.1 but had to revert for
regressions, so try again.

- Fix root bus issue that dropped resources that happened to end at 0,
e.g., [bus 00].

PCI device hotplug:

- Remove device locking when marking device as disconnected so this
doesn't have to wait for concurrent driver bind/unbind to complete.

- Quirk more Qualcomm bridges that don't fully implement the PCIe Slot
Status 'Command Completed' bit.

Power management:

- Account for _S0W of the target bridge in acpi_pci_bridge_d3() so we
don't miss hot-add notifications for USB4 docks, Thunderbolt, etc.

Reset:

- Observe delay after reset, e.g., resuming from system sleep, regardless
of whether a bridge can suspend to D3cold at runtime.

- Wait for secondary bus to become ready after a bridge reset.

Virtualization:

- Avoid FLR on some AMD FCH AHCI adapters where it doesn't work.

- Allow independent IOMMU groups for some Wangxun NICs that prevent
peer-to-peer transactions but don't advertise an ACS Capability.

Error handling:

- Configure End-to-End-CRC (ECRC) only if Linux owns the AER Capability.

- Remove redundant Device Control Error Reporting Enable in the AER
service driver since this is already done for all devices during
enumeration.

ASPM:

- Add pci_enable_link_state() interface to allow drivers to enable ASPM
link state.

Endpoint framework:

- Move dra7xx and tegra194 linkup processing from hard IRQ to threaded
IRQ handler.

- Add a separate lock for endpoint controller list of endpoint function
drivers to prevent deadlock in callbacks.

- Pass events from endpoint controller to endpoint function drivers via
callbacks instead of notifiers.

Synopsys DesignWare eDMA controller driver (acked by Vinod):

- Fix CPU vs PCI address issues.

- Fix source vs destination address issues.

- Fix issues with interleaved transfer semantics.

- Fix channel count initialization issue (issue still exists in several
other drivers).

- Clean up and improve debugfs usage so it will work on platforms with
several eDMA devices.

Baikal T-1 PCIe controller driver:

- Set a 64-bit DMA mask.

Freescale i.MX6 PCIe controller driver:

- Add i.MX8MM, i.MX8MQ, i.MX8MP endpoint mode DT binding and driver
support.

Intel VMD host bridge driver:

- Add quirk to configure PCIe ASPM and LTR. This is normally done by
BIOS, and will be for future products.

Marvell MVEBU PCIe controller driver:

- Mark this driver as broken in Kconfig since bugs prevent its daily
usage.

MediaTek MT7621 PCIe controller driver:

- Delay PHY port initialization to improve boot reliability for ZBT
WE1326, ZBT WF3526-P, and some Netgear models.

Qualcomm PCIe controller driver:

- Add MSM8998 DT compatible string.

- Unify MSM8996 and MSM8998 clock orderings.

- Add SM8350 DT binding and driver support.

- Add IPQ8074 Gen3 DT binding and driver support.

- Correct qcom,perst-regs in DT binding.

- Add qcom_pcie_host_deinit() so the PHY is powered off and regulators
and clocks are disabled on late host-init errors.

Socionext UniPhier Pro5 controller driver:

- Clean up uniphier-ep reg, clocks, resets, and their names in DT
binding.

Synopsys DesignWare PCIe controller driver:

- Restrict coherent DMA mask to 32 bits for MSI, but allow controller
drivers to set 64-bit streaming DMA mask.

- Add eDMA engine support in both Root Port and Endpoint controllers.

Miscellaneous:

- Remove MODULE_LICENSE from boolean drivers so they don't look like
modules so modprobe can complain about them.

----------------------------------------------------------------
Alexey V. Vissarionov (1):
PCI/IOV: Enlarge virtfn sysfs name buffer

Bjorn Helgaas (23):
PCI: switchtec: Simplify switchtec_dma_mrpc_isr()
PCI: switchtec: Return -EFAULT for copy_to_user() errors
PCI/AER: Remove redundant Device Control Error Reporting Enable
Merge branch 'pci/aer'
Merge branch 'pci/enumeration'
Merge branch 'pci/hotplug'
Merge branch 'pci/iov'
Merge branch 'pci/kbuild'
Merge branch 'pci/p2pdma'
Merge branch 'pci/pm'
Merge branch 'pci/reset'
Merge branch 'pci/resource'
Merge branch 'pci/virtualization'
Merge branch 'pci/endpoint'
Merge branch 'pci/controller/dwc'
Merge branch 'pci/controller/imx6'
Merge branch 'pci/controller/mt7621'
Merge branch 'pci/controller/mvebu'
Merge branch 'pci/controller/qcom'
Merge branch 'pci/controller/switchtec'
Merge branch 'pci/controller/uniphier'
Merge branch 'pci/controller/vmd'
Merge branch 'pci/misc'

Damien Le Moal (1):
PCI: Avoid FLR for AMD FCH AHCI adapters

David E. Box (3):
PCI: vmd: Use PCI_VDEVICE in device list
PCI: vmd: Create feature grouping for client products
PCI: vmd: Add quirk to configure PCIe ASPM and LTR

Dmitry Baryshkov (2):
dt-bindings: PCI: qcom: Add SM8350
PCI: qcom: Add SM8350 support

Geert Uytterhoeven (1):
PCI: Fix dropping valid root bus resources with .end = zero

Huacai Chen (3):
PCI/portdrv: Prevent LS7A Bus Master clearing on shutdown
PCI: loongson: Prevent LS7A MRRS increases
PCI: loongson: Add more devices that need MRRS quirk

Johan Hovold (1):
PCI: qcom: Fix host-init error handling

Krzysztof Kozlowski (4):
dt-bindings: PCI: qcom: Add oneOf to compatible match
dt-bindings: PCI: qcom: Add MSM8998 specific compatible
dt-bindings: PCI: qcom: Unify MSM8996 and MSM8998 clock order
dt-bindings: PCI: qcom-ep: Correct qcom,perst-regs

Kunihiko Hayashi (1):
dt-bindings: PCI: uniphier-ep: Clean up reg, clocks, resets, and their names

Logan Gunthorpe (1):
PCI/P2PDMA: Annotate RCU dereference

Lukas Bulwahn (1):
PCI: hv: Drop duplicate PCI_MSI dependency

Lukas Wunner (4):
PCI/PM: Observe reset delay irrespective of bridge_d3
PCI: Unify delay handling for reset and resume
PCI/DPC: Await readiness of secondary bus after reset
PCI: hotplug: Allow marking devices as disconnected during bind/unbind

Manivannan Sadhasivam (6):
PCI: dra7xx: Use threaded IRQ handler for "dra7xx-pcie-main" IRQ
PCI: tegra194: Move dw_pcie_ep_linkup() to threaded IRQ handler
PCI: endpoint: Use a separate lock for protecting epc->pci_epf list
PCI: endpoint: Use callback mechanism for passing events from EPC to EPF
PCI: endpoint: Use link_up() callback in place of LINK_UP notifier
PCI: pciehp: Add Qualcomm quirk for Command Completed erratum

Mengyuan Lou (1):
PCI: Add ACS quirk for Wangxun NICs

Michael Bottini (1):
PCI/ASPM: Add pci_enable_link_state()

Mika Westerberg (3):
PCI: Align extra resources for hotplug bridges properly
PCI: Take other bus devices into account when distributing resources
PCI: Distribute available resources for root buses, too

Nick Alcock (1):
PCI: Remove MODULE_LICENSE so boolean drivers don't look like modules

Pali Rohár (1):
PCI: mvebu: Mark driver as BROKEN

Rafael J. Wysocki (1):
PCI/ACPI: Account for _S0W of the target bridge in acpi_pci_bridge_d3()

Randy Dunlap (1):
misc: pci_endpoint_test: Drop initial kernel-doc marker

Richard Zhu (8):
dt-bindings: imx6q-pcie: Add i.MX8MM PCIe EP mode compatible string
dt-bindings: imx6q-pcie: Add i.MX8MQ PCIe EP mode compatible string
dt-bindings: imx6q-pcie: Add i.MX8MP PCIe EP mode compatible string
misc: pci_endpoint_test: Add i.MX8 PCIe EP device support
PCI: imx6: Add i.MX PCIe EP mode support
PCI: imx6: Add i.MX8MQ PCIe EP support
PCI: imx6: Add i.MX8MM PCIe EP support
PCI: imx6: Add i.MX8MP PCIe EP support

Rob Herring (1):
PCI: Honor firmware's device disabled status

Robert Marko (3):
dt-bindings: PCI: qcom: Sort compatibles alphabetically
dt-bindings: PCI: qcom: Add IPQ8074 Gen3 port
PCI: qcom: Add IPQ8074 Gen3 port support

Serge Semin (29):
dmaengine: Fix dma_slave_config.dst_addr description
dmaengine: dw-edma: Release requested IRQs on failure
dmaengine: dw-edma: Convert ll/dt phys address to PCI bus/DMA address
dmaengine: dw-edma: Fix missing src/dst address of interleaved xfers
dmaengine: dw-edma: Don't permit non-inc interleaved xfers
dmaengine: dw-edma: Fix invalid interleaved xfers semantics
dmaengine: dw-edma: Add CPU to PCI bus address translation
dmaengine: dw-edma: Add PCI bus address getter to the remote EP glue driver
dmaengine: dw-edma: Drop chancnt initialization
dmaengine: dw-edma: Drop unnecessary debugfs reg casts
dmaengine: dw-edma: Stop checking debugfs_create_*() return value
dmaengine: dw-edma: Add dw_edma prefix to debugfs nodes descriptor
dmaengine: dw-edma: Convert debugfs descs to being heap-allocated
dmaengine: dw-edma: Rename debugfs dentry variables to 'dent'
dmaengine: dw-edma: Simplify debugfs context CSRs init procedure
dmaengine: dw-edma: Move eDMA data pointer to debugfs node descriptor
dmaengine: dw-edma: Join read/write channels into a single device
dmaengine: dw-edma: Use DMA engine device debugfs subdirectory
dmaengine: dw-edma: Fix readq_ch() return value truncation
dmaengine: dw-edma: Use non-atomic io-64 methods
dmaengine: dw-edma: Drop DT-region allocation
dmaengine: dw-edma: Replace chip ID number with device name
dmaengine: dw-edma: Skip cleanup procedure if no private data found
dmaengine: dw-edma: Add mem-mapped LL-entries support
dmaengine: dw-edma: Depend on DW_EDMA instead of selecting it
dmaengine: dw-edma: Prepare dw_edma_probe() for builtin callers
PCI: dwc: Restrict only coherent DMA mask for MSI address allocation
PCI: bt1: Set 64-bit DMA mask
PCI: dwc: Add Root Port and Endpoint controller eDMA engine support

Sergio Paracuellos (1):
PCI: mt7621: Delay phy ports initialization

Thomas Weißschuh (1):
PCI/sysfs: Constify struct kobj_type pci_slot_ktype

Vidya Sagar (1):
PCI/AER: Configure ECRC only if AER is native

Yang Yingliang (1):
PCI: endpoint: pci-epf-vntb: Add epf_ntb_mw_bar_clear() num_mws kernel-doc

Documentation/admin-guide/kernel-parameters.txt | 4 +-
.../devicetree/bindings/pci/fsl,imx6q-pcie.yaml | 3 +
.../devicetree/bindings/pci/qcom,pcie-ep.yaml | 6 +-
.../devicetree/bindings/pci/qcom,pcie.yaml | 103 ++++--
.../bindings/pci/socionext,uniphier-pcie-ep.yaml | 76 +++--
drivers/acpi/device_pm.c | 19 ++
drivers/dma/dw-edma/Kconfig | 5 +-
drivers/dma/dw-edma/dw-edma-core.c | 198 +++++------
drivers/dma/dw-edma/dw-edma-core.h | 10 +-
drivers/dma/dw-edma/dw-edma-pcie.c | 56 ++--
drivers/dma/dw-edma/dw-edma-v0-core.c | 100 +++---
drivers/dma/dw-edma/dw-edma-v0-core.h | 1 -
drivers/dma/dw-edma/dw-edma-v0-debugfs.c | 368 ++++++++++-----------
drivers/dma/dw-edma/dw-edma-v0-debugfs.h | 5 -
drivers/misc/pci_endpoint_test.c | 4 +-
drivers/pci/controller/Kconfig | 3 +-
drivers/pci/controller/dwc/Kconfig | 23 +-
drivers/pci/controller/dwc/pci-dra7xx.c | 2 +-
drivers/pci/controller/dwc/pci-imx6.c | 200 ++++++++++-
drivers/pci/controller/dwc/pcie-bt1.c | 4 +
drivers/pci/controller/dwc/pcie-designware-ep.c | 12 +-
drivers/pci/controller/dwc/pcie-designware-host.c | 25 +-
drivers/pci/controller/dwc/pcie-designware.c | 195 +++++++++++
drivers/pci/controller/dwc/pcie-designware.h | 21 ++
drivers/pci/controller/dwc/pcie-histb.c | 1 -
drivers/pci/controller/dwc/pcie-qcom.c | 15 +-
drivers/pci/controller/dwc/pcie-tegra194.c | 9 +-
.../pci/controller/mobiveil/pcie-mobiveil-plat.c | 1 -
drivers/pci/controller/pci-loongson.c | 69 ++--
drivers/pci/controller/pci-tegra.c | 1 -
drivers/pci/controller/pci-versatile.c | 1 -
drivers/pci/controller/pcie-hisi-error.c | 1 -
drivers/pci/controller/pcie-microchip-host.c | 1 -
drivers/pci/controller/pcie-mt7621.c | 2 +
drivers/pci/controller/vmd.c | 97 ++++--
drivers/pci/endpoint/functions/pci-epf-test.c | 38 +--
drivers/pci/endpoint/functions/pci-epf-vntb.c | 1 +
drivers/pci/endpoint/pci-ep-cfs.c | 1 -
drivers/pci/endpoint/pci-epc-core.c | 33 +-
drivers/pci/endpoint/pci-epc-mem.c | 1 -
drivers/pci/endpoint/pci-epf-core.c | 1 -
drivers/pci/hotplug/acpiphp_core.c | 1 -
drivers/pci/hotplug/pciehp_hpc.c | 2 +
drivers/pci/hotplug/shpchp_core.c | 1 -
drivers/pci/iov.c | 2 +-
drivers/pci/p2pdma.c | 8 +-
drivers/pci/pci-acpi.c | 45 ++-
drivers/pci/pci-driver.c | 2 +-
drivers/pci/pci.c | 69 ++--
drivers/pci/pci.h | 59 ++--
drivers/pci/pcie/aer.c | 51 +--
drivers/pci/pcie/aspm.c | 54 +++
drivers/pci/pcie/dpc.c | 4 +-
drivers/pci/pcie/portdrv.c | 16 +-
drivers/pci/probe.c | 4 +-
drivers/pci/quirks.c | 23 ++
drivers/pci/setup-bus.c | 248 ++++++++++----
drivers/pci/slot.c | 2 +-
drivers/pci/switch/switchtec.c | 13 +-
include/acpi/acpi_bus.h | 1 +
include/linux/dma/edma.h | 25 +-
include/linux/dmaengine.h | 2 +-
include/linux/pci-epc.h | 10 +-
include/linux/pci-epf.h | 19 +-
include/linux/pci.h | 8 +
include/linux/pci_ids.h | 2 +
66 files changed, 1573 insertions(+), 814 deletions(-)