[GIT PULL] PCI changes for v6.2

From: Bjorn Helgaas
Date: Tue Dec 13 2022 - 18:31:02 EST


The following changes since commit 9abf2313adc1ca1b6180c508c25f22f9395cc780:

Linux 6.1-rc1 (2022-10-16 15:36:24 -0700)

are available in the Git repository at:

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

for you to fetch changes up to f826afe5eae856b3834cbc65db6178cccd4a3142:

Merge branch 'pci/kbuild' (2022-12-10 10:36:52 -0600)


You will see a merge conflict in
Documentation/devicetree/bindings/pci/snps,dw-pcie.yaml between these:

5c3741492d2e ("dt-bindings: PCI: tegra234: Add ECAM support")
4cc13eedb892 ("dt-bindings: PCI: dwc: Add reg/reg-names common properties")

5c3741492d2e is already in your tree via arm-soc, and 4cc13eedb892 is in
this pull request. The resolution I suggest is to use 4cc13eedb892, which
means we'll lose the addition of "ecam" from 5c3741492d2e. This resolution
has been in linux-next for a week or so and is available here if you're
interested:
https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git/commit/?h=v6.2-merge&id=f64171fdd171

----------------------------------------------------------------

Enumeration:

- Squash portdrv_{core,pci}.c into portdrv.c to ease maintenance and make
more things static.

- Make portdrv bind to Switch Ports that have AER. Previously, if these
Ports lacked MSI/MSI-X, portdrv failed to bind, which meant the Ports
couldn't be suspended to low-power states. AER on these Ports doesn't
use interrupts, and the AER driver doesn't need to claim them.

- Assign PCI domain IDs using ida_alloc(), which makes host bridge
add/remove work better.

Resource management:

- To work better with recent BIOSes that use EfiMemoryMappedIO for PCI
host bridge apertures, remove those regions from the E820 map (E820
entries normally prevent us from allocating BARs). In v5.19, we added
some quirks to disable E820 checking, but that's not very maintainable.
EfiMemoryMappedIO means the OS needs to map the region for use by EFI
runtime services; it shouldn't prevent OS from using it.

PCIe native device hotplug:

- Build pciehp by default if USB4 is enabled, since Thunderbolt/USB4 PCIe
tunneling depends on native PCIe hotplug.

- Enable Command Completed Interrupt only if supported to avoid user
confusion from lspci output that says this is enabled but not
supported.

- Prevent pciehp from binding to Switch Upstream Ports; this happened
because of interaction with acpiphp and caused devices below the
Upstream Port to disappear.

Power management:

- Convert AGP drivers to generic power management. We hope to remove
legacy power management from the PCI core eventually.

Virtualization:

- Fix pci_device_is_present(), which previously always returned "false"
for VFs, causing virtio hangs when unbinding the driver.

Miscellaneous:

- Convert drivers to gpiod API to prepare for dropping some legacy code.

- Fix DOE fencepost error for the maximum data object length.

Baikal-T1 PCIe controller driver:

- Add driver and DT bindings.

Broadcom STB PCIe controller driver:

- Enable Multi-MSI.

- Delay 100ms after PERST# deassert to allow power and clocks to
stabilize.

- Configure Read Completion Boundary to 64 bytes.

Freescale i.MX6 PCIe controller driver:

- Initialize PHY before deasserting core reset to fix a regression in
v6.0 on boards where the PHY provides the reference.

- Fix imx6sx and imx8mq clock names in DT schema.

Intel VMD host bridge driver:

- Fix Secondary Bus Reset on VMD bridges, which allows reset of NVMe SSDs
in VT-d pass-through scenarios.

- Disable MSI remapping, which gets re-enabled by firmware during
suspend/resume.

MediaTek PCIe Gen3 controller driver:

- Add MT7986 and MT8195 support.

Qualcomm PCIe controller driver:

- Add SC8280XP/SA8540P basic interconnect support.

Rockchip DesignWare PCIe controller driver:

- Base DT schema on common Synopsys schema.

Synopsys DesignWare PCIe core:

- Collect DT items shared between Root Port and Endpoint (PERST GPIO, PHY
info, clocks, resets, link speed, number of lanes, number of iATU
windows, interrupt info, etc) to snps,dw-pcie-common.yaml.

- Add dma-ranges support for Root Ports and Endpoints.

- Consolidate DT resource retrieval for "dbi", "dbi2", "atu", etc. to
reduce code duplication.

- Add generic names for clocks and resets to encourage more consistent
naming across drivers using DesignWare IP.

- Stop advertising PTM Responder role for Endpoints, which aren't allowed
to be responders.

TI J721E PCIe driver:

- Add j721s2 host mode ID to DT schema.

- Add interrupt properties to DT schema.

Toshiba Visconti PCIe controller driver:

- Fix interrupts array max constraints in DT schema.

----------------------------------------------------------------
Albert Zhou (1):
PCI: pciehp: Enable by default if USB4 enabled

Bjorn Helgaas (47):
PCI/portdrv: Squash into portdrv.c
PCI/portdrv: Move private things to portdrv.c
PCI/portdrv: Unexport pcie_port_service_register(), pcie_port_service_unregister()
agp/efficeon: Convert to generic power management
agp/intel: Convert to generic power management
agp/amd-k7: Convert to generic power management
agp/ati: Convert to generic power management
agp/nvidia: Convert to generic power management
agp/amd64: Update to DEFINE_SIMPLE_DEV_PM_OPS()
agp/sis: Update to DEFINE_SIMPLE_DEV_PM_OPS()
agp/via: Update to DEFINE_SIMPLE_DEV_PM_OPS()
PCI/PM: Remove unused 'state' parameter to pci_legacy_suspend_late()
Revert "PCI: Clear PCI_STATUS when setting up device"
PCI: altera-msi: Include <linux/irqdomain.h> explicitly
PCI: microchip: Include <linux/irqdomain.h> explicitly
PCI: mvebu: Include <linux/irqdomain.h> explicitly
PCI: xgene-msi: Include <linux/irqdomain.h> explicitly
PCI: Remove unnecessary <linux/of_irq.h> includes
PCI: Drop of_match_ptr() to avoid unused variables
PCI/portdrv: Allow AER service only for Root Ports & RCECs
efi/x86: Remove EfiMemoryMappedIO from E820 map
PCI: Skip allocate_resource() if too little space available
x86/PCI: Tidy E820 removal messages
x86/PCI: Fix log message typo
x86/PCI: Use pr_info() when possible
Merge branch 'pci/doe'
Merge branch 'pci/enumeration'
Merge branch 'pci/hotplug'
Merge branch 'pci/misc'
Merge branch 'pci/pm'
Merge branch 'pci/pm-agp'
Merge branch 'pci/portdrv'
Merge branch 'pci/resource'
Merge branch 'pci/sysfs'
Merge branch 'remotes/lorenzo/pci/dt'
Merge branch 'remotes/lorenzo/pci/brcmstb'
Merge branch 'remotes/lorenzo/pci/dwc'
Merge branch 'remotes/lorenzo/pci/endpoint'
Merge branch 'remotes/lorenzo/pci/mt7621'
Merge branch 'remotes/lorenzo/pci/qcom'
Merge branch 'remotes/lorenzo/pci/tegra'
Merge branch 'remotes/lorenzo/pci/vmd'
Merge branch 'remotes/lorenzo/pci/misc'
Merge branch 'pci/ctrl/aardvark'
Merge branch 'pci/ctrl/mvebu'
Merge branch 'pci/ctrl/xilinx'
Merge branch 'pci/kbuild'

Dmitry Torokhov (4):
PCI: tegra: Switch to using devm_fwnode_gpiod_get
PCI: histb: Switch to using gpiod API
PCI: aardvark: Switch to using devm_gpiod_get_optional()
PCI: mvebu: Switch to using gpiod API

Francisco Munoz (1):
PCI: vmd: Fix secondary bus reset for Intel bridges

Frank Li (7):
PCI: endpoint: pci-epf-vntb: Clean up kernel_doc warning
PCI: endpoint: pci-epf-vntb: Fix struct epf_ntb_ctrl indentation
PCI: endpoint: pci-epf-vntb: Fix call pci_epc_mem_free_addr() in error path
PCI: endpoint: pci-epf-vntb: Remove unused epf_db_phy struct member
PCI: endpoint: pci-epf-vntb: Replace hardcoded 4 with sizeof(u32)
PCI: endpoint: pci-epf-vntb: Fix sparse build warning for epf_db
PCI: endpoint: pci-epf-vntb: Fix sparse ntb->reg build warning

Frank Wunderlich (2):
dt-bindings: PCI: mediatek-gen3: add SoC based clock config
dt-bindings: PCI: mediatek-gen3: add support for mt7986

Ian Cowan (1):
PCI: shpchp: Remove unused get_mode1_ECC_cap callback

Jianjun Wang (1):
dt-bindings: PCI: mediatek-gen3: Support mt8195

Jim Quinlan (5):
PCI: brcmstb: Enable Multi-MSI
PCI: brcmstb: Wait for 100ms following PERST# deassert
PCI: brcmstb: Replace status loops with read_poll_timeout_atomic()
PCI: brcmstb: Drop needless 'inline' annotations
PCI: brcmstb: Set RCB_{MPS,64B}_MODE bits

Johan Hovold (3):
dt-bindings: PCI: qcom: Add SC8280XP/SA8540P interconnects
PCI: qcom: Add basic interconnect support
dt-bindings: PCI: qcom: Allow 'dma-coherent' property

John Thomson (1):
PCI: mt7621: Add sentinel to quirks table

Kunihiko Hayashi (1):
PCI: pci-epf-test: Register notifier if only core_init_notifier is enabled

Li Ming (1):
PCI/DOE: Fix maximum data object length miscalculation

Maciej W. Rozycki (1):
PCI: Access Link 2 registers only for devices with Links

Manivannan Sadhasivam (1):
PCI: qcom: Fix error message for reset_control_assert()

Matt Ranostay (3):
dt-bindings: PCI: ti,j721e-pci-host: add interrupt controller definition
dt-bindings: PCI: ti,j721e-pci-*: Add missing interrupt properties
dt-bindings: PCI: Add host mode device-id for j721s2 platform

Michael S. Tsirkin (1):
PCI: Fix pci_device_is_present() for VFs by checking PF

Michal Simek (1):
PCI: xilinx-nwl: Fix coding style violations

Nirmal Patel (1):
PCI: vmd: Disable MSI remapping after suspend

Pali Rohár (2):
PCI: Assign PCI domain IDs by ida_alloc()
PCI: pciehp: Enable Command Completed Interrupt only if supported

Rafael J. Wysocki (2):
PCI/portdrv: Set PCIE_PORT_SERVICE_HP for Root and Downstream Ports only
PCI: acpiphp: Avoid setting is_hotplug_bridge for PCIe Upstream Ports

Sascha Hauer (2):
PCI/sysfs: Fix double free in error path
PCI: imx6: Initialize PHY before deasserting core reset

Serge Semin (20):
dt-bindings: imx6q-pcie: Fix clock names for imx6sx and imx8mq
dt-bindings: visconti-pcie: Fix interrupts array max constraints
dt-bindings: PCI: dwc: Detach common RP/EP DT bindings
dt-bindings: PCI: dwc: Remove bus node from the examples
dt-bindings: PCI: dwc: Add phys/phy-names common properties
dt-bindings: PCI: dwc: Add max-link-speed common property
dt-bindings: PCI: dwc: Apply generic schema for generic device only
dt-bindings: PCI: dwc: Add max-functions EP property
dt-bindings: PCI: dwc: Add interrupts/interrupt-names common properties
dt-bindings: PCI: dwc: Add reg/reg-names common properties
dt-bindings: PCI: dwc: Add clocks/resets common properties
dt-bindings: PCI: dwc: Add dma-coherent property
dt-bindings: PCI: dwc: Apply common schema to Rockchip DW PCIe nodes
dt-bindings: PCI: dwc: Add Baikal-T1 PCIe Root Port bindings
PCI: dwc: Introduce dma-ranges property support for RC-host
PCI: dwc: Introduce generic controller capabilities interface
PCI: dwc: Introduce generic resources getter
PCI: dwc: Combine iATU detection procedures
PCI: dwc: Introduce generic platform clocks and resets
PCI: dwc: Add Baikal-T1 PCIe controller support

Shunsuke Mie (1):
PCI: endpoint: Fix Kconfig indent style

Vidya Sagar (4):
PCI: dwc: Fix n_fts[] array overrun
PCI: Add PCI_PTM_CAP_RES macro
PCI: designware-ep: Disable PTM capabilities for EP mode
PCI: dwc: Use dev_info for PCIe link down event logging

Yipeng Zou (1):
PCI/ACPI: Use METHOD_NAME__UID instead of plain string

Yoshihiro Shimoda (1):
PCI: endpoint: Fix WARN() when an endpoint driver is removed

Zeng Heng (1):
PCI: Check for alloc failure in pci_request_irq()

.../devicetree/bindings/pci/baikal,bt1-pcie.yaml | 168 ++++++
.../devicetree/bindings/pci/fsl,imx6q-pcie.yaml | 46 +-
.../bindings/pci/mediatek-pcie-gen3.yaml | 77 ++-
.../devicetree/bindings/pci/qcom,pcie.yaml | 22 +
.../devicetree/bindings/pci/rockchip-dw-pcie.yaml | 4 +-
.../bindings/pci/snps,dw-pcie-common.yaml | 266 +++++++++
.../devicetree/bindings/pci/snps,dw-pcie-ep.yaml | 206 +++++--
.../devicetree/bindings/pci/snps,dw-pcie.yaml | 256 +++++---
.../devicetree/bindings/pci/ti,j721e-pci-ep.yaml | 7 +
.../devicetree/bindings/pci/ti,j721e-pci-host.yaml | 22 +
.../bindings/pci/toshiba,visconti-pcie.yaml | 7 +-
arch/x86/kernel/resource.c | 12 +-
arch/x86/pci/acpi.c | 39 +-
arch/x86/platform/efi/efi.c | 46 ++
drivers/char/agp/amd-k7-agp.c | 24 +-
drivers/char/agp/amd64-agp.c | 6 +-
drivers/char/agp/ati-agp.c | 22 +-
drivers/char/agp/efficeon-agp.c | 16 +-
drivers/char/agp/intel-agp.c | 11 +-
drivers/char/agp/nvidia-agp.c | 24 +-
drivers/char/agp/sis-agp.c | 7 +-
drivers/char/agp/via-agp.c | 6 +-
drivers/pci/access.c | 8 +-
drivers/pci/bus.c | 4 +
drivers/pci/controller/cadence/pci-j721e.c | 1 -
drivers/pci/controller/dwc/Kconfig | 9 +
drivers/pci/controller/dwc/Makefile | 1 +
drivers/pci/controller/dwc/pci-imx6.c | 13 +-
drivers/pci/controller/dwc/pci-layerscape.c | 1 -
drivers/pci/controller/dwc/pcie-armada8k.c | 1 -
drivers/pci/controller/dwc/pcie-bt1.c | 643 +++++++++++++++++++++
drivers/pci/controller/dwc/pcie-designware-ep.c | 48 +-
drivers/pci/controller/dwc/pcie-designware-host.c | 47 +-
drivers/pci/controller/dwc/pcie-designware.c | 266 +++++++--
drivers/pci/controller/dwc/pcie-designware.h | 63 +-
drivers/pci/controller/dwc/pcie-histb.c | 39 +-
drivers/pci/controller/dwc/pcie-qcom.c | 78 ++-
drivers/pci/controller/dwc/pcie-tegra194.c | 1 -
drivers/pci/controller/pci-aardvark.c | 22 +-
drivers/pci/controller/pci-ftpci100.c | 2 +-
drivers/pci/controller/pci-mvebu.c | 52 +-
drivers/pci/controller/pci-tegra.c | 9 +-
drivers/pci/controller/pci-v3-semi.c | 3 +-
drivers/pci/controller/pci-xgene-msi.c | 2 +-
drivers/pci/controller/pci-xgene.c | 1 -
drivers/pci/controller/pcie-altera-msi.c | 2 +-
drivers/pci/controller/pcie-brcmstb.c | 85 +--
drivers/pci/controller/pcie-iproc-platform.c | 1 -
drivers/pci/controller/pcie-iproc.c | 1 -
drivers/pci/controller/pcie-microchip-host.c | 2 +-
drivers/pci/controller/pcie-mt7621.c | 3 +-
drivers/pci/controller/pcie-rockchip-host.c | 1 -
drivers/pci/controller/pcie-xilinx-cpm.c | 1 -
drivers/pci/controller/pcie-xilinx-nwl.c | 8 +-
drivers/pci/controller/vmd.c | 27 +-
drivers/pci/doe.c | 20 +-
drivers/pci/endpoint/functions/Kconfig | 18 +-
drivers/pci/endpoint/functions/pci-epf-test.c | 2 +-
drivers/pci/endpoint/functions/pci-epf-vntb.c | 150 +++--
drivers/pci/endpoint/pci-epc-core.c | 7 +-
drivers/pci/hotplug/Kconfig | 3 +
drivers/pci/hotplug/TODO | 3 -
drivers/pci/hotplug/acpiphp_glue.c | 8 +
drivers/pci/hotplug/pciehp_hpc.c | 4 +-
drivers/pci/hotplug/shpchp.h | 1 -
drivers/pci/hotplug/shpchp_hpc.c | 18 -
drivers/pci/irq.c | 2 +
drivers/pci/pci-acpi.c | 2 +-
drivers/pci/pci-driver.c | 8 +-
drivers/pci/pci-sysfs.c | 13 +-
drivers/pci/pci.c | 109 ++--
drivers/pci/pci.h | 1 +
drivers/pci/pcie/Kconfig | 8 +-
drivers/pci/pcie/Makefile | 2 +-
drivers/pci/pcie/{portdrv_core.c => portdrv.c} | 269 ++++++++-
drivers/pci/pcie/portdrv.h | 19 -
drivers/pci/pcie/portdrv_pci.c | 252 --------
drivers/pci/probe.c | 10 +-
drivers/pci/remove.c | 6 +
include/linux/pci.h | 1 +
include/uapi/linux/pci_regs.h | 1 +
81 files changed, 2748 insertions(+), 928 deletions(-)
create mode 100644 Documentation/devicetree/bindings/pci/baikal,bt1-pcie.yaml
create mode 100644 Documentation/devicetree/bindings/pci/snps,dw-pcie-common.yaml
create mode 100644 drivers/pci/controller/dwc/pcie-bt1.c
rename drivers/pci/pcie/{portdrv_core.c => portdrv.c} (68%)
delete mode 100644 drivers/pci/pcie/portdrv_pci.c