]> git.baikalelectronics.ru Git - kernel.git/log
kernel.git
3 years agoMerge branch 'remotes/lorenzo/pci/msi'
Bjorn Helgaas [Tue, 4 May 2021 15:43:30 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/msi'

- Convert tegra to MSI domains (Marc Zyngier)

- Use rcar controller address as MSI doorbell instead of allocating a page
  (Marc Zyngier)

- Convert rcar to MSI domains (Marc Zyngier)

- Use xilinx port structure as MSI doorbell instead of allocating a page
  (Marc Zyngier)

- Convert xilinx to MSI domains (Marc Zyngier)

- Remove unused Hyper-V msi_controller structure (Marc Zyngier)

- Remove unused PCI core msi_controller support (Marc Zyngier)

- Remove struct msi_controller (Marc Zyngier)

- Remove unused default_teardown_msi_irqs() (Marc Zyngier)

- Let host bridges declare their reliance on MSI domains (Marc Zyngier)

- Make pci_host_common_probe() declare its reliance on MSI domains (Marc
  Zyngier)

- Advertise mediatek lack of built-in MSI handling (Thomas Gleixner)

- Document ways of ending up with NO_MSI (Marc Zyngier)

- Refactor HT advertising of NO_MSI flag (Marc Zyngier)

* remotes/lorenzo/pci/msi:
  PCI: Refactor HT advertising of NO_MSI flag
  PCI/MSI: Document the various ways of ending up with NO_MSI
  PCI: mediatek: Advertise lack of built-in MSI handling
  PCI/MSI: Make pci_host_common_probe() declare its reliance on MSI domains
  PCI/MSI: Let PCI host bridges declare their reliance on MSI domains
  PCI/MSI: Kill default_teardown_msi_irqs()
  PCI/MSI: Kill msi_controller structure
  PCI/MSI: Drop use of msi_controller from core code
  PCI: hv: Drop msi_controller structure
  PCI: xilinx: Convert to MSI domains
  PCI: xilinx: Don't allocate extra memory for the MSI capture address
  PCI: rcar: Convert to MSI domains
  PCI: rcar: Don't allocate extra memory for the MSI capture address
  PCI: tegra: Convert to MSI domains

3 years agoMerge branch 'remotes/lorenzo/pci/xilinx'
Bjorn Helgaas [Tue, 4 May 2021 15:43:30 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/xilinx'

- Add support for coherent PCIe DMA traffic using CCI (Bharat Kumar Gogada)

- Add optional "dma-coherent" DT property (Bharat Kumar Gogada)

* remotes/lorenzo/pci/xilinx:
  PCI: xilinx-nwl: Add optional "dma-coherent" property
  PCI: xilinx-nwl: Enable coherent PCIe DMA traffic using CCI

3 years agoMerge branch 'remotes/lorenzo/pci/xgene'
Bjorn Helgaas [Tue, 4 May 2021 15:43:30 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/xgene'

- Fix cfg resource mapping regression (Dejin Zheng)

* remotes/lorenzo/pci/xgene:
  PCI: xgene: Fix cfg resource mapping

3 years agoMerge branch 'remotes/lorenzo/pci/vmd'
Bjorn Helgaas [Tue, 4 May 2021 15:43:29 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/vmd'

- Program IRTE with Requester ID of VMD endpoint, not child device (Jon
  Derrick)

- Disable VMD MSI-X remapping when possible so children can use more MSI-X
  vectors (Jon Derrick)

* remotes/lorenzo/pci/vmd:
  PCI: vmd: Disable MSI-X remapping when possible
  iommu/vt-d: Use Real PCI DMA device for IRTE

3 years agoMerge branch 'remotes/lorenzo/pci/tegra'
Bjorn Helgaas [Tue, 4 May 2021 15:43:29 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/tegra'

- Make several tegra symbols const (Rikard Falkeborn)

- Fix tegra Kconfig host/endpoint typo (Wesley Sheng)

- Fix runtime PM imbalance (Dinghao Liu)

* remotes/lorenzo/pci/tegra:
  PCI: tegra: Fix runtime PM imbalance in pex_ep_event_pex_rst_deassert()
  PCI: tegra: Fix typo for PCIe endpoint mode in Tegra194
  PCI: tegra: Constify static structs

3 years agoMerge branch 'remotes/lorenzo/pci/risc-v'
Bjorn Helgaas [Tue, 4 May 2021 15:43:28 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/risc-v'

- sifive: Add pcie_aux clock to prci driver (Greentime Hu)

- sifive: Use reset-simple in prci driver for PCIe (Greentime Hu)

- Add SiFive FU740 PCIe host controller driver and DT binding (Paul
  Walmsley, Greentime Hu)

* remotes/lorenzo/pci/risc-v:
  riscv: dts: Add PCIe support for the SiFive FU740-C000 SoC
  PCI: fu740: Add SiFive FU740 PCIe host controller driver
  dt-bindings: PCI: Add SiFive FU740 PCIe host controller
  MAINTAINERS: Add maintainers for SiFive FU740 PCIe driver
  clk: sifive: Use reset-simple in prci driver for PCIe driver
  clk: sifive: Add pcie_aux clock in prci driver for PCIe driver

3 years agoMerge branch 'remotes/lorenzo/pci/microchip'
Bjorn Helgaas [Tue, 4 May 2021 15:43:28 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/microchip'

- Make several microchip symbols static (Wei Yongjun)

- Drop redundant dev_err() for platform_get_irq() errors (Krzysztof
  Wilczyński)

* remotes/lorenzo/pci/microchip:
  PCI: microchip: Remove dev_err() when handing an error from platform_get_irq()
  PCI: microchip: Make some symbols static

3 years agoMerge branch 'remotes/lorenzo/pci/mediatek'
Bjorn Helgaas [Tue, 4 May 2021 15:43:28 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/mediatek'

- Configure FC and FTS for functions other than 0 (Ryder Lee)

- Add missing MODULE_DEVICE_TABLE (Qiheng Lin)

- Add YAML schema for MediaTek (Jianjun Wang)

- Export pci_pio_to_address() for module use (Jianjun Wang)

- Add MediaTek MT8192 PCIe controller driver (Jianjun Wang)

- Add MediaTek MT8192 INTx support (Jianjun Wang)

- Add MediaTek MT8192 MSI support (Jianjun Wang)

- Add MediaTek MT8192 system power management support (Jianjun Wang)

* remotes/lorenzo/pci/mediatek:
  MAINTAINERS: Add Jianjun Wang as MediaTek PCI co-maintainer
  PCI: mediatek-gen3: Add system PM support
  PCI: mediatek-gen3: Add MSI support
  PCI: mediatek-gen3: Add INTx support
  PCI: mediatek-gen3: Add MediaTek Gen3 driver for MT8192
  PCI: Export pci_pio_to_address() for module use
  dt-bindings: PCI: mediatek-gen3: Add YAML schema
  PCI: mediatek: Add missing MODULE_DEVICE_TABLE
  PCI: mediatek: Configure FC and FTS for functions other than 0

3 years agoMerge branch 'remotes/lorenzo/pci/layerscape'
Bjorn Helgaas [Tue, 4 May 2021 15:43:27 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/layerscape'

- Fix ls_pcie_ep_probe() syntax error (comma for semicolon) (Krzysztof
  Wilczyński)

* remotes/lorenzo/pci/layerscape:
  PCI: layerscape: Correct syntax by changing comma to semicolon

3 years agoMerge branch 'remotes/lorenzo/pci/iproc'
Bjorn Helgaas [Tue, 4 May 2021 15:43:27 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/iproc'

- Return zero for success of iproc_msi_irq_domain_alloc() (Pali Rohár)

* remotes/lorenzo/pci/iproc:
  PCI: iproc: Fix return value of iproc_msi_irq_domain_alloc()

3 years agoMerge branch 'remotes/lorenzo/pci/endpoint'
Bjorn Helgaas [Tue, 4 May 2021 15:43:27 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/endpoint'

- Fix NULL pointer dereference when epc_features not implemented (Shradha
  Todi)

- Remove redundant initialization (Colin Ian King)

- Add missing destroy_workqueue() in endpoint test (Yang Yingliang)

* remotes/lorenzo/pci/endpoint:
  PCI: endpoint: Fix missing destroy_workqueue()
  PCI: endpoint: Remove redundant initialization of pointer dev
  PCI: endpoint: Fix NULL pointer dereference for ->get_features()

3 years agoMerge branch 'remotes/lorenzo/pci/dwc'
Bjorn Helgaas [Tue, 4 May 2021 15:43:26 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/dwc'

- Use generic config accessors for TI AM65x (K3) to fix regression (Kishon
  Vijay Abraham I)

- Move MSI Receiver init to dw_pcie_host_init() so it is re-initialized
  along with the RC in resume (Jisheng Zhang)

- Remove unused pcie_app_rd() (Jiapeng Chong)

- Move iATU detection earlier to fix regression (Hou Zhiqiang)

* remotes/lorenzo/pci/dwc:
  PCI: dwc: Move iATU detection earlier
  PCI: dwc/intel-gw: Remove unused function
  PCI: dwc: Move dw_pcie_msi_init() to dw_pcie_setup_rc()
  PCI: keystone: Let AM65 use the pci_ops defined in pcie-designware-host.c

3 years agoMerge branch 'remotes/lorenzo/pci/cadence'
Bjorn Helgaas [Tue, 4 May 2021 15:43:26 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/cadence'

- Add DT binding and TI j721e support for refclk to PCIe connector (Kishon
  Vijay Abraham I)

- Add host mode and endpoint mode DT bindings for TI AM64 SoC (Kishon Vijay
  Abraham I)

* remotes/lorenzo/pci/cadence:
  PCI: j721e: Add support to provide refclk to PCIe connector
  dt-bindings: PCI: ti,j721e: Add endpoint mode dt-bindings for TI's AM64 SoC
  dt-bindings: PCI: ti,j721e: Add host mode dt-bindings for TI's AM64 SoC
  dt-bindings: PCI: ti,j721e: Add binding to represent refclk to the connector

3 years agoMerge branch 'remotes/lorenzo/pci/brcmstb'
Bjorn Helgaas [Tue, 4 May 2021 15:43:25 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/brcmstb'

- Fix brcm_pcie_probe() error return for unsupported revision (Wei Yongjun)

* remotes/lorenzo/pci/brcmstb:
  PCI: brcmstb: Fix error return code in brcm_pcie_probe()

3 years agoMerge branch 'remotes/lorenzo/pci/altera-msi'
Bjorn Helgaas [Tue, 4 May 2021 15:43:25 +0000 (10:43 -0500)]
Merge branch 'remotes/lorenzo/pci/altera-msi'

- Remove redundant dev_err() for devm_ioremap_resource() failure (Chen Hui)

* remotes/lorenzo/pci/altera-msi:
  PCI: altera-msi: Remove redundant dev_err call in altera_msi_probe()

3 years agoMerge branch 'pci/misc'
Bjorn Helgaas [Tue, 4 May 2021 15:43:25 +0000 (10:43 -0500)]
Merge branch 'pci/misc'

- Fix compile testing of al driver without CONFIG_PCI_ECAM (Arnd Bergmann)

- Fix compile testing of thunder drivers (Arnd Bergmann)

- Fix "no symbols" warnings when compile testing al, thunder driver with
  CONFIG_TRIM_UNUSED_KSYMS (Arnd Bergmann)

- Remove unused MicroGate SyncLink device IDs (Jiri Slaby)

- Remove unused alloc_pci_root_info() return value (Krzysztof Wilczyński)

* pci/misc:
  x86/PCI: Remove unused alloc_pci_root_info() return value
  PCI: Remove MicroGate SyncLink device IDs
  PCI: Avoid building empty drivers
  PCI: thunder: Fix compile testing
  PCI: al: Select CONFIG_PCI_ECAM

3 years agoMerge branch 'pci/virtualization'
Bjorn Helgaas [Tue, 4 May 2021 15:43:24 +0000 (10:43 -0500)]
Merge branch 'pci/virtualization'

- Increase delay after FLR to work around Intel DC P4510 NVMe erratum
  (Raphael Norwitz)

* pci/virtualization:
  PCI: Delay after FLR of Intel DC P4510 NVMe

3 years agoMerge branch 'pci/kernel-doc'
Bjorn Helgaas [Tue, 4 May 2021 15:43:24 +0000 (10:43 -0500)]
Merge branch 'pci/kernel-doc'

- Fix kernel-doc warnings (Krzysztof Wilczyński)

* pci/kernel-doc:
  PCI: Fix kernel-doc errors

3 years agoMerge branch 'pci/sysfs'
Bjorn Helgaas [Tue, 4 May 2021 15:43:23 +0000 (10:43 -0500)]
Merge branch 'pci/sysfs'

- Convert sysfs "config", "rom", "reset", "label", "index", "acpi_index" to
  static attributes to fix races in device enumeration (Krzysztof
  Wilczyński)

- Convert sysfs "vpd" to static attribute (Heiner Kallweit, Krzysztof
  Wilczyński)

- Use sysfs_emit() in "show" functions (Krzysztof Wilczyński)

* pci/sysfs:
  PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions
  PCI/sysfs: Rearrange smbios_attr_group and acpi_attr_group
  PCI/sysfs: Tidy SMBIOS & ACPI label attributes
  PCI/sysfs: Convert "index", "acpi_index", "label" to static attributes
  PCI/sysfs: Define SMBIOS label attributes with DEVICE_ATTR*()
  PCI/sysfs: Define ACPI label attributes with DEVICE_ATTR*()
  PCI/sysfs: Rename device_has_dsm() to device_has_acpi_name()
  PCI/sysfs: Convert "vpd" to static attribute
  PCI/sysfs: Rename "vpd" attribute accessors
  PCI/sysfs: Convert "reset" to static attribute
  PCI/sysfs: Convert "rom" to static attribute
  PCI/sysfs: Convert "config" to static attribute

3 years agoMerge branch 'pci/vpd'
Bjorn Helgaas [Tue, 4 May 2021 15:43:23 +0000 (10:43 -0500)]
Merge branch 'pci/vpd'

- Remove obsolete Broadcom NIC VPD length-limiting quirk (Heiner Kallweit)

- Remove sysfs VPD size checking dead code (Heiner Kallweit)

- Convert VPF sysfs file to static attribute (Heiner Kallweit)

- Remove unnecessary pci_set_vpd_size() (Heiner Kallweit)

- Tone down "missing VPD" message (Heiner Kallweit)

* pci/vpd:
  PCI: Allow VPD access for QLogic ISP2722
  PCI/VPD: Add helper pci_get_func0_dev()
  PCI/VPD: Remove pci_vpd_find_tag() SRDT handling
  PCI/VPD: Remove pci_vpd_find_tag() 'offset' argument
  PCI/VPD: Change pci_vpd_init() return type to void
  PCI/VPD: Make missing VPD message less alarming
  PCI/VPD: Remove pci_set_vpd_size()
  PCI/VPD: Remove sysfs accessor size checking dead code
  PCI/VPD: Remove obsolete Broadcom NIC quirk

3 years agoMerge branch 'pci/pm'
Bjorn Helgaas [Tue, 4 May 2021 15:43:23 +0000 (10:43 -0500)]
Merge branch 'pci/pm'

- Fix acpi_pci_set_power_state() debug message (Rafael J. Wysocki)

* pci/pm:
  PCI/ACPI: Fix acpi_pci_set_power_state() debug message

3 years agoMerge branch 'pci/hotplug'
Bjorn Helgaas [Tue, 4 May 2021 15:43:22 +0000 (10:43 -0500)]
Merge branch 'pci/hotplug'

- Fix acpiphp reference count leak (Feilong Lin)

* pci/hotplug:
  PCI: acpiphp: Fix whitespace issue
  PCI: shpchp: Remove unused shpc_writeb()
  PCI: cpqphp: Use DEFINE_SPINLOCK() for int15_lock
  ACPI / hotplug / PCI: Fix reference count leak in enable_slot()

3 years agoMerge branch 'pci/error'
Bjorn Helgaas [Tue, 4 May 2021 15:43:22 +0000 (10:43 -0500)]
Merge branch 'pci/error'

- Fix RCiEP device to RCEC association (Qiuxu Zhuo)

* pci/error:
  PCI/RCEC: Fix RCiEP device to RCEC association

3 years agoMerge branch 'pci/enumeration'
Bjorn Helgaas [Tue, 4 May 2021 15:43:22 +0000 (10:43 -0500)]
Merge branch 'pci/enumeration'

- Release OF node when pci_scan_device() fails (Dmitry Baryshkov)

- Add pci_disable_parity() (Bjorn Helgaas)

- Disable Mellanox Tavor parity reporting (Heiner Kallweit)

- Disable N2100 r8169 parity reporting (Heiner Kallweit)

* pci/enumeration:
  ARM: iop32x: disable N2100 PCI parity reporting
  IB/mthca: Disable parity reporting
  PCI: Add pci_disable_parity()
  PCI: Release OF node in pci_scan_device()'s error path

3 years agoriscv: dts: Add PCIe support for the SiFive FU740-C000 SoC
Greentime Hu [Tue, 4 May 2021 10:59:40 +0000 (18:59 +0800)]
riscv: dts: Add PCIe support for the SiFive FU740-C000 SoC

Link: https://lore.kernel.org/r/20210504105940.100004-7-greentime.hu@sifive.com
Signed-off-by: Greentime Hu <greentime.hu@sifive.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Palmer Dabbelt <palmerdabbelt@google.com>
3 years agoPCI: fu740: Add SiFive FU740 PCIe host controller driver
Paul Walmsley [Tue, 4 May 2021 10:59:39 +0000 (18:59 +0800)]
PCI: fu740: Add SiFive FU740 PCIe host controller driver

Add driver for the SiFive FU740 PCIe host controller.
This controller is based on the DesignWare PCIe core.

Co-developed-by: Henry Styles <hes@sifive.com>
Co-developed-by: Erik Danie <erik.danie@sifive.com>
Co-developed-by: Greentime Hu <greentime.hu@sifive.com>
Link: https://lore.kernel.org/r/20210504105940.100004-6-greentime.hu@sifive.com
Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com>
Signed-off-by: Henry Styles <hes@sifive.com>
Signed-off-by: Erik Danie <erik.danie@sifive.com>
Signed-off-by: Greentime Hu <greentime.hu@sifive.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agodt-bindings: PCI: Add SiFive FU740 PCIe host controller
Greentime Hu [Tue, 4 May 2021 10:59:38 +0000 (18:59 +0800)]
dt-bindings: PCI: Add SiFive FU740 PCIe host controller

Add PCIe host controller DT bindings of SiFive FU740.

Link: https://lore.kernel.org/r/20210504105940.100004-5-greentime.hu@sifive.com
Signed-off-by: Greentime Hu <greentime.hu@sifive.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
3 years agoMAINTAINERS: Add maintainers for SiFive FU740 PCIe driver
Greentime Hu [Tue, 4 May 2021 10:59:37 +0000 (18:59 +0800)]
MAINTAINERS: Add maintainers for SiFive FU740 PCIe driver

Here add maintainer information for SiFive FU740 PCIe driver.

Link: https://lore.kernel.org/r/20210504105940.100004-4-greentime.hu@sifive.com
Signed-off-by: Greentime Hu <greentime.hu@sifive.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agoclk: sifive: Use reset-simple in prci driver for PCIe driver
Greentime Hu [Tue, 4 May 2021 10:59:36 +0000 (18:59 +0800)]
clk: sifive: Use reset-simple in prci driver for PCIe driver

We use reset-simple in this patch so that pcie driver can use
devm_reset_control_get() to get this reset data structure and use
reset_control_deassert() to deassert pcie_power_up_rst_n.

Link: https://lore.kernel.org/r/20210504105940.100004-3-greentime.hu@sifive.com
Signed-off-by: Greentime Hu <greentime.hu@sifive.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Stephen Boyd <sboyd@kernel.org>
3 years agoclk: sifive: Add pcie_aux clock in prci driver for PCIe driver
Greentime Hu [Tue, 4 May 2021 10:59:35 +0000 (18:59 +0800)]
clk: sifive: Add pcie_aux clock in prci driver for PCIe driver

We add pcie_aux clock in this patch so that pcie driver can use
clk_prepare_enable() and clk_disable_unprepare() to enable and disable
pcie_aux clock.

Link: https://lore.kernel.org/r/20210504105940.100004-2-greentime.hu@sifive.com
Signed-off-by: Greentime Hu <greentime.hu@sifive.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Stephen Boyd <sboyd@kernel.org>
3 years agoPCI: Allow VPD access for QLogic ISP2722
Arun Easi [Fri, 9 Apr 2021 21:51:53 +0000 (14:51 -0700)]
PCI: Allow VPD access for QLogic ISP2722

0790ae0564ab ("PCI: Prevent VPD access for QLogic ISP2722") disabled access
to VPD of the ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter because
reading past the end of the VPD caused NMIs.

d3afef2eae86 ("PCI: Determine actual VPD size on first access") limits
reads to the actual size of VPD, which should prevent these NMIs.

d3afef2eae86 was merged *before* 0790ae0564ab, but we think the testing
that prompted 0790ae0564ab ("PCI: Prevent VPD access for QLogic ISP2722")
was done with a kernel that lacked d3afef2eae86.  See [1, 2].

Remove the quirk added by 0790ae0564ab ("PCI: Prevent VPD access for QLogic
ISP2722") so customers can read the HBA VPD.

[1] https://lore.kernel.org/linux-pci/alpine.LRH.2.21.9999.2012161641230.28924@irv1user01.caveonetworks.com/
[2] https://lore.kernel.org/linux-pci/alpine.LRH.2.21.9999.2104071535110.13940@irv1user01.caveonetworks.com/
[bhelgaas: commit log]
Link: https://lore.kernel.org/r/20210409215153.16569-2-aeasi@marvell.com
Signed-off-by: Arun Easi <aeasi@marvell.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: stable@vger.kernel.org # v4.6+
3 years agoPCI/VPD: Add helper pci_get_func0_dev()
Heiner Kallweit [Fri, 16 Apr 2021 19:52:07 +0000 (21:52 +0200)]
PCI/VPD: Add helper pci_get_func0_dev()

Factor out the "get function 0" logic into pci_get_func0_dev().

[bhelgaas: keep PCI_DEVFN(PCI_SLOT()) instead of exposing implementation
details, commit log]
Link: https://lore.kernel.org/r/75d1f619-8a35-690d-8fc8-e851264a4bbb@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/VPD: Remove pci_vpd_find_tag() SRDT handling
Heiner Kallweit [Thu, 1 Apr 2021 16:44:15 +0000 (18:44 +0200)]
PCI/VPD: Remove pci_vpd_find_tag() SRDT handling

Only SRDT tag is the end tag, and no caller is interested in it.  This
allows to remove all SRDT tag handling.

Link: https://lore.kernel.org/r/3f63f06f-734f-8fff-9518-27fe1faf903d@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/VPD: Remove pci_vpd_find_tag() 'offset' argument
Heiner Kallweit [Thu, 1 Apr 2021 16:43:15 +0000 (18:43 +0200)]
PCI/VPD: Remove pci_vpd_find_tag() 'offset' argument

All callers pass 0 as offset. Therefore remove the parameter and use a
fixed offset 0 in pci_vpd_find_tag().

Link: https://lore.kernel.org/r/f62e6e19-5423-2ead-b2bd-62844b23ef8f@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/VPD: Change pci_vpd_init() return type to void
Heiner Kallweit [Thu, 1 Apr 2021 16:37:47 +0000 (18:37 +0200)]
PCI/VPD: Change pci_vpd_init() return type to void

pci_init_capabilities() is the only caller and doesn't use the return
value. So let's change the return type to void.

Link: https://lore.kernel.org/r/663ec440-8375-1459-ddb4-98ea76e75917@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/VPD: Make missing VPD message less alarming
Heiner Kallweit [Thu, 1 Apr 2021 12:03:49 +0000 (14:03 +0200)]
PCI/VPD: Make missing VPD message less alarming

Realtek RTL8169/8168/8125 NIC families indicate VPD capability and an
optional VPD EEPROM can be connected via I2C/SPI. However I haven't seen
any card or system with such a VPD EEPROM yet. The missing EEPROM causes
the following warning whenever e.g. lscpi -vv is executed.

  invalid short VPD tag 00 at offset 01

The warning confuses users, and I think we should handle the situation more
gently. Therefore, if first VPD byte is read as 0x00, assume a missing
optional VPD PROM and replace the warning with a more descriptive message
at info level.

[bhelgaas: fix pre-existing whitespace]
Link: https://lore.kernel.org/r/ccbc11f1-4dbb-e2c8-d0ea-559e06d4c340@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/VPD: Remove pci_set_vpd_size()
Heiner Kallweit [Fri, 12 Feb 2021 10:02:47 +0000 (11:02 +0100)]
PCI/VPD: Remove pci_set_vpd_size()

3ea9a4374dc4 ("cxgb4: collect serial config version from register") removed
the only usage of pci_set_vpd_size(). If a device needs to override the
auto-detected VPD size, then this can be done with a PCI quirk, as is done
for Chelsio devices. There's no need to allow drivers to change the VPD
size.

Remove pci_set_vpd_size().

[bhelgaas: squash in Arnd's fix for "'pci_vpd_set_size' defined but not
used" from
https://lore.kernel.org/r/20210421140334.3847155-1-arnd@kernel.org]
Link: https://lore.kernel.org/r/47d86e52-9bcf-7da7-1edb-0d988a7a82ab@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agox86/PCI: Remove unused alloc_pci_root_info() return value
Krzysztof Wilczyński [Tue, 20 Apr 2021 21:09:13 +0000 (21:09 +0000)]
x86/PCI: Remove unused alloc_pci_root_info() return value

The "info" value returned from alloc_pci_root_info() is never used, so drop
it.

[bhelgaas: commit log]
Addresses-Coverity-ID: 1222153 ("Unused value")
Link: https://lore.kernel.org/r/20210420210913.1137116-1-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoMAINTAINERS: Add Jianjun Wang as MediaTek PCI co-maintainer
Jianjun Wang [Tue, 20 Apr 2021 06:17:23 +0000 (14:17 +0800)]
MAINTAINERS: Add Jianjun Wang as MediaTek PCI co-maintainer

Update entry for MediaTek PCIe controller, add Jianjun Wang
as MediaTek PCI co-maintainer.

Link: https://lore.kernel.org/r/20210420061723.989-8-jianjun.wang@mediatek.com
Signed-off-by: Jianjun Wang <jianjun.wang@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Ryder Lee <ryder.lee@mediatek.com>
3 years agoPCI: mediatek-gen3: Add system PM support
Jianjun Wang [Tue, 20 Apr 2021 06:17:22 +0000 (14:17 +0800)]
PCI: mediatek-gen3: Add system PM support

Add suspend_noirq and resume_noirq callback functions to implement PM
system suspend and resume hooks for the MediaTek Gen3 PCIe controller.

When the system suspends, trigger the PCIe link to enter the L2 state
and pull down the PERST# pin, gating the clocks of the MAC layer, and
then power-off the physical layer to provide power-saving.

When the system resumes, the PCIe link should be re-established and the
related control register values should be restored.

Link: https://lore.kernel.org/r/20210420061723.989-7-jianjun.wang@mediatek.com
Signed-off-by: Jianjun Wang <jianjun.wang@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Ryder Lee <ryder.lee@mediatek.com>
3 years agoPCI: mediatek-gen3: Add MSI support
Jianjun Wang [Tue, 20 Apr 2021 06:17:21 +0000 (14:17 +0800)]
PCI: mediatek-gen3: Add MSI support

Add MSI support for MediaTek Gen3 PCIe controller.

This PCIe controller supports up to 256 MSI vectors, the MSI hardware
block diagram is as follows:

                  +-----+
                  | GIC |
                  +-----+
                     ^
                     |
                 port->irq
                     |
             +-+-+-+-+-+-+-+-+
             |0|1|2|3|4|5|6|7| (PCIe intc)
             +-+-+-+-+-+-+-+-+
              ^ ^           ^
              | |    ...    |
      +-------+ +------+    +-----------+
      |                |                |
+-+-+---+--+--+  +-+-+---+--+--+  +-+-+---+--+--+
|0|1|...|30|31|  |0|1|...|30|31|  |0|1|...|30|31| (MSI sets)
+-+-+---+--+--+  +-+-+---+--+--+  +-+-+---+--+--+
 ^ ^      ^  ^    ^ ^      ^  ^    ^ ^      ^  ^
 | |      |  |    | |      |  |    | |      |  |  (MSI vectors)
 | |      |  |    | |      |  |    | |      |  |

  (MSI SET0)       (MSI SET1)  ...   (MSI SET7)

With 256 MSI vectors supported, the MSI vectors are composed of 8 sets,
each set has its own address for MSI message, and supports 32 MSI vectors
to generate interrupt.

Link: https://lore.kernel.org/r/20210420061723.989-6-jianjun.wang@mediatek.com
Signed-off-by: Jianjun Wang <jianjun.wang@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Acked-by: Ryder Lee <ryder.lee@mediatek.com>
3 years agoPCI: mediatek-gen3: Add INTx support
Jianjun Wang [Tue, 20 Apr 2021 06:17:20 +0000 (14:17 +0800)]
PCI: mediatek-gen3: Add INTx support

Add INTx support for MediaTek Gen3 PCIe controller.

Link: https://lore.kernel.org/r/20210420061723.989-5-jianjun.wang@mediatek.com
Signed-off-by: Jianjun Wang <jianjun.wang@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Acked-by: Ryder Lee <ryder.lee@mediatek.com>
3 years agoPCI: mediatek-gen3: Add MediaTek Gen3 driver for MT8192
Jianjun Wang [Tue, 20 Apr 2021 06:17:19 +0000 (14:17 +0800)]
PCI: mediatek-gen3: Add MediaTek Gen3 driver for MT8192

MediaTek's PCIe host controller has three generation HWs, the new
generation HW is an individual bridge, it supports Gen3 speed and
compatible with Gen2, Gen1 speed.

Add support for new Gen3 controller which can be found on MT8192.

Link: https://lore.kernel.org/r/20210420061723.989-4-jianjun.wang@mediatek.com
Signed-off-by: Jianjun Wang <jianjun.wang@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Ryder Lee <ryder.lee@mediatek.com>
3 years agoPCI: dwc: Move iATU detection earlier
Hou Zhiqiang [Tue, 13 Apr 2021 14:22:19 +0000 (17:22 +0300)]
PCI: dwc: Move iATU detection earlier

dw_pcie_ep_init() depends on the detected iATU region numbers to allocate
the in/outbound window management bitmap.  It fails after 3d69e247270c
("PCI: dwc: Detect number of iATU windows").

Move the iATU region detection into a new function, move the detection to
the very beginning of dw_pcie_host_init() and dw_pcie_ep_init().  Also
remove it from the dw_pcie_setup(), since it's more like a software
initialization step than hardware setup.

Link: https://lore.kernel.org/r/20210125044803.4310-1-Zhiqiang.Hou@nxp.com
Link: https://lore.kernel.org/linux-pci/20210407131255.702054-1-dmitry.baryshkov@linaro.org
Link: https://lore.kernel.org/r/20210413142219.2301430-1-dmitry.baryshkov@linaro.org
Fixes: 3d69e247270c ("PCI: dwc: Detect number of iATU windows")
Tested-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
[DB: moved dw_pcie_iatu_detect to happen after host_init callback]
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Cc: stable@vger.kernel.org # v5.11+
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
3 years agoPCI: dwc/intel-gw: Remove unused function
Jiapeng Chong [Thu, 15 Apr 2021 08:32:57 +0000 (16:32 +0800)]
PCI: dwc/intel-gw: Remove unused function

Fix the following clang warning:

drivers/pci/controller/dwc/pcie-intel-gw.c:84:19: warning: unused
function 'pcie_app_rd' [-Wunused-function].

Link: https://lore.kernel.org/r/1618475577-99198-1-git-send-email-jiapeng.chong@linux.alibaba.com
Reported-by: Abaci Robot <abaci@linux.alibaba.com>
Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoPCI: dwc: Move dw_pcie_msi_init() to dw_pcie_setup_rc()
Jisheng Zhang [Thu, 25 Mar 2021 07:26:04 +0000 (15:26 +0800)]
PCI: dwc: Move dw_pcie_msi_init() to dw_pcie_setup_rc()

If the host which makes use of IP's integrated MSI Receiver losts
power during suspend, we need to reinit the RC and MSI Receiver in
resume. But after we move dw_pcie_msi_init() into the core, we have no
API to do so. Usually the dwc users need to call dw_pcie_setup_rc() to
reinit the RC, we can solve this problem by moving dw_pcie_msi_init()
to dw_pcie_setup_rc().

Link: https://lore.kernel.org/r/20210325152604.6e79deba@xhacker.debian
Signed-off-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
3 years agoPCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions
Krzysztof Wilczyński [Fri, 16 Apr 2021 20:58:45 +0000 (20:58 +0000)]
PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions

The sysfs_emit() and sysfs_emit_at() functions were introduced to make it
less ambiguous which function is preferred when writing to the output
buffer in a device attribute's "show" callback [1].

Convert the PCI sysfs object "show" functions from sprintf(), snprintf()
and scnprintf() to sysfs_emit() and sysfs_emit_at() accordingly, as the
latter is aware of the PAGE_SIZE buffer and correctly returns the number of
bytes written into the buffer.

No functional change intended.

[1] Documentation/filesystems/sysfs.rst

[bhelgaas: drop dsm_label_utf16s_to_utf8s(), link speed/width changes]
Link: https://lore.kernel.org/r/20210416205856.3234481-10-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Rearrange smbios_attr_group and acpi_attr_group
Krzysztof Wilczyński [Tue, 27 Apr 2021 20:18:47 +0000 (15:18 -0500)]
PCI/sysfs: Rearrange smbios_attr_group and acpi_attr_group

Collect the smbios_attr_group and acpi_attr_group together in the logical
order.  No functional change intended.

[bhelgaas: split to separate patch]
Link: https://lore.kernel.org/r/20210416205856.3234481-6-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Tidy SMBIOS & ACPI label attributes
Krzysztof Wilczyński [Tue, 27 Apr 2021 20:04:44 +0000 (15:04 -0500)]
PCI/sysfs: Tidy SMBIOS & ACPI label attributes

Update coding style to reduce distraction.  No functional change intended.

[bhelgaas: split to separate patch]
Link: https://lore.kernel.org/r/20210416205856.3234481-6-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Convert "index", "acpi_index", "label" to static attributes
Krzysztof Wilczyński [Tue, 27 Apr 2021 15:49:16 +0000 (10:49 -0500)]
PCI/sysfs: Convert "index", "acpi_index", "label" to static attributes

The "label", "index", and "acpi_index" sysfs attributes show firmware label
information about the device.  If the ACPI Device Name _DSM is implemented
for the device, we have:

  label        Device name (optional, may be null)
  acpi_index   Instance number (unique under \_SB scope)

When there is no ACPI _DSM and SMBIOS provides an Onboard Devices structure
for the device, we have:

  label        Reference Designation, e.g., a silkscreen label
  index        Device Type Instance

Previously these attributes were dynamically created either by
pci_bus_add_device() or the pci_sysfs_init() initcall, but since they don't
need to be created or removed dynamically, we can use a static attribute so
the device model takes care of addition and removal automatically.

Convert "label", "index", and "acpi_index" to static attributes.

Presence of the ACPI _DSM (device_has_acpi_name()) determines whether the
ACPI information (label, acpi_index) or the SMBIOS information (label,
index) is visible.

[bhelgaas: commit log, split to separate patch, add "pci_dev_" prefix]
Suggested-by: Oliver O'Halloran <oohall@gmail.com>
Link: https://lore.kernel.org/r/20210416205856.3234481-6-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Define SMBIOS label attributes with DEVICE_ATTR*()
Krzysztof Wilczyński [Tue, 27 Apr 2021 19:18:26 +0000 (14:18 -0500)]
PCI/sysfs: Define SMBIOS label attributes with DEVICE_ATTR*()

Use DEVICE_ATTR*() to simplify definition of the SMBIOS label attributes.
No functional change intended.

Note that dev_attr_smbios_label requires __ATTR() because the "label"
attribute can be exposed via either ACPI or SMBIOS, and we already have the
ACPI label_show() function in this file.

[bhelgaas: split to separate patch]
Link: https://lore.kernel.org/r/20210416205856.3234481-6-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Define ACPI label attributes with DEVICE_ATTR*()
Krzysztof Wilczyński [Tue, 27 Apr 2021 18:48:51 +0000 (13:48 -0500)]
PCI/sysfs: Define ACPI label attributes with DEVICE_ATTR*()

Use DEVICE_ATTR*() to simplify definitions of the ACPI label attributes.
No functional change intended.

[bhelgaas: split to separate patch]
Link: https://lore.kernel.org/r/20210416205856.3234481-6-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Rename device_has_dsm() to device_has_acpi_name()
Krzysztof Wilczyński [Tue, 27 Apr 2021 15:39:16 +0000 (10:39 -0500)]
PCI/sysfs: Rename device_has_dsm() to device_has_acpi_name()

Rename device_has_dsm() to device_has_acpi_name() to better reflect its
purpose and move it earlier so it's available for a future SMBIOS
.is_visible() function.  No functional change intended.

[bhelgaas: split to separate patch]
Link: https://lore.kernel.org/r/20210416205856.3234481-6-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Convert "vpd" to static attribute
Krzysztof Wilczyński [Fri, 16 Apr 2021 20:58:40 +0000 (20:58 +0000)]
PCI/sysfs: Convert "vpd" to static attribute

The "vpd" sysfs attribute allows access to Vital Product Data (VPD).
Previously it was dynamically created either by pci_bus_add_device() or the
pci_sysfs_init() initcall, but since it doesn't need to be created or
removed dynamically, we can use a static attribute so the device model
takes care of addition and removal automatically.

Convert "vpd" to a static attribute and use the .is_bin_visible() callback
to check whether the device supports VPD.

Remove pcie_vpd_create_sysfs_dev_files(),
pcie_vpd_remove_sysfs_dev_files(), pci_create_capabilities_sysfs(), and
pci_create_capabilities_sysfs(), which are no longer needed.

[bhelgaas: This is substantially the same as the earlier patch from Heiner
Kallweit <hkallweit1@gmail.com>.  I included Krzysztof's change here so all
the "convert to static attribute" changes are together.]

[bhelgaas: rename to vpd_read()/vpd_write() and pci_dev_vpd_attr_group]
Suggested-by: Oliver O'Halloran <oohall@gmail.com>
Based-on: https://lore.kernel.org/r/7703024f-8882-9eec-a122-599871728a89@gmail.com
Based-on-patch-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://lore.kernel.org/r/20210416205856.3234481-5-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Rename "vpd" attribute accessors
Bjorn Helgaas [Wed, 28 Apr 2021 18:32:53 +0000 (13:32 -0500)]
PCI/sysfs: Rename "vpd" attribute accessors

Rename "vpd" attribute accessors so they fit with the BIN_ATTR_RW() macro
usage.  Currently there is no BIN_ATTR_ADMIN_RW() that uses 0600
permissions, but if there were, it would likely use "vpd_read()" and
"vpd_write()".  No functional change intended.

Extracted from the patch mentioned below by Heiner Kallweit
<hkallweit1@gmail.com>.

Link: https://lore.kernel.org/linux-pci/7703024f-8882-9eec-a122-599871728a89@gmail.com/
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Convert "reset" to static attribute
Krzysztof Wilczyński [Fri, 16 Apr 2021 20:58:39 +0000 (20:58 +0000)]
PCI/sysfs: Convert "reset" to static attribute

The "reset" sysfs attribute allows for resetting a PCI function.
Previously it was dynamically created either by pci_bus_add_device() or
the pci_sysfs_init() initcall, but since it doesn't need to be created or
removed dynamically, we can use a static attribute so the device model
takes care of addition and removal automatically.

Convert "reset" to a static attribute and use the .is_visible() callback to
check whether the device supports reset.

Clear reset_fn in pci_stop_dev() instead of pci_remove_capabilities_sysfs()
since we no longer explicitly remove the "reset" sysfs file.

[bhelgaas: commit log]
Suggested-by: Oliver O'Halloran <oohall@gmail.com>
Link: https://lore.kernel.org/r/20210416205856.3234481-4-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Convert "rom" to static attribute
Krzysztof Wilczyński [Fri, 16 Apr 2021 20:58:38 +0000 (20:58 +0000)]
PCI/sysfs: Convert "rom" to static attribute

The "rom" sysfs attribute allows access to the PCI Option ROM.  Previously
it was dynamically created either by pci_bus_add_device() or the
pci_sysfs_init() initcall, but since it doesn't need to be created or
removed dynamically, we can use a static attribute so the device model
takes care of addition and removal automatically.

Convert "rom" to a static attribute and use the .is_bin_visible() callback
to set the correct object size based on the ROM size.

Remove "rom_attr" from the struct pci_dev since it is no longer needed.

This attribute was added in the pre-git era by https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/drivers/pci/pci-sysfs.c?id=f6d553444da2

[bhelgaas: commit log]
Suggested-by: Oliver O'Halloran <oohall@gmail.com>
Link: https://lore.kernel.org/r/20210416205856.3234481-3-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/sysfs: Convert "config" to static attribute
Krzysztof Wilczyński [Fri, 16 Apr 2021 20:58:37 +0000 (20:58 +0000)]
PCI/sysfs: Convert "config" to static attribute

The "config" sysfs attribute allows access to either the legacy (PCI and
PCI-X Mode 1) or the extended (PCI-X Mode 2 and PCIe) device configuration
space.  Previously it was dynamically created either when a device was
added (for hot-added devices) or via a late_initcall (for devices present
at boot):

  pci_bus_add_devices
    pci_bus_add_device
      pci_create_sysfs_dev_files
        if (!sysfs_initialized)
  return
sysfs_create_bin_file           # for hot-added devices

  pci_sysfs_init                        # late_initcall
    sysfs_initialized = 1
    for_each_pci_dev(pdev)
      pci_create_sysfs_dev_files(pdev)  # for devices present at boot

And dynamically removed when the PCI device is stopped and removed:

  pci_stop_bus_device
    pci_stop_dev
      pci_remove_sysfs_dev_files
        sysfs_remove_bin_file

This attribute does not need to be created or removed dynamically, so we
can use a static attribute so the device model takes care of addition and
removal automatically.

Convert "config" to a static attribute and use the .is_bin_visible()
callback to set the correct object size (either 256 bytes or 4 KiB) at
runtime.

The pci_sysfs_init() scheme was added in the pre-git era by
https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/drivers/pci/pci-sysfs.c?id=f6d553444da2

[bhelgaas: commit log]
Suggested-by: Oliver O'Halloran <oohall@gmail.com>
Link: https://lore.kernel.org/r/CAOSf1CHss03DBSDO4PmTtMp0tCEu5kScn704ZEwLKGXQzBfqaA@mail.gmail.com
Link: https://lore.kernel.org/r/20210416205856.3234481-2-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: Refactor HT advertising of NO_MSI flag
Marc Zyngier [Tue, 30 Mar 2021 15:11:45 +0000 (16:11 +0100)]
PCI: Refactor HT advertising of NO_MSI flag

The few quirks that deal with NO_MSI tend to be copy-paste heavy.
Refactor them so that the hierarchy of conditions is slightly
cleaner.

Link: https://lore.kernel.org/r/20210330151145.997953-15-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/MSI: Document the various ways of ending up with NO_MSI
Marc Zyngier [Tue, 30 Mar 2021 15:11:44 +0000 (16:11 +0100)]
PCI/MSI: Document the various ways of ending up with NO_MSI

We have now three ways of ending up with NO_MSI being set.
Document them.

Link: https://lore.kernel.org/r/20210330151145.997953-14-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: mediatek: Advertise lack of built-in MSI handling
Thomas Gleixner [Tue, 30 Mar 2021 15:11:43 +0000 (16:11 +0100)]
PCI: mediatek: Advertise lack of built-in MSI handling

Some Mediatek host bridges cannot handle MSIs, which is sad.
This also results in an ugly warning at device probe time,
as the core PCI code wasn't told that MSIs were not available.

Advertise this fact to the rest of the core PCI code by
using the 'msi_domain' attribute, which still opens the possibility
for another block to provide the MSI functionnality.

[maz: commit message, switched over to msi_domain attribute]

Link: https://lore.kernel.org/r/20210330151145.997953-13-maz@kernel.org
Reported-by: Frank Wunderlich <frank-w@public-files.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/MSI: Make pci_host_common_probe() declare its reliance on MSI domains
Marc Zyngier [Tue, 30 Mar 2021 15:11:42 +0000 (16:11 +0100)]
PCI/MSI: Make pci_host_common_probe() declare its reliance on MSI domains

The generic PCI host driver relies on MSI domains for MSIs to
be provided to its end-points. Make this dependency explicit.

This cures the warnings occuring on arm/arm64 VMs when booted
with PCI virtio devices and no MSI controller (no GICv3 ITS,
for example).

It is likely that other drivers will need to express the same
dependency.

Link: https://lore.kernel.org/r/20210330151145.997953-12-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/MSI: Let PCI host bridges declare their reliance on MSI domains
Marc Zyngier [Tue, 30 Mar 2021 15:11:41 +0000 (16:11 +0100)]
PCI/MSI: Let PCI host bridges declare their reliance on MSI domains

There is a whole class of host bridges that cannot know whether
MSIs will be provided or not, as they rely on other blocks
to provide the MSI functionnality, using MSI domains.  This is
the case for example on systems that use the ARM GIC architecture.

Introduce a new attribute ('msi_domain') indicating that implicit
dependency, and use this property to set the NO_MSI flag when
no MSI domain is found at probe time.

Link: https://lore.kernel.org/r/20210330151145.997953-11-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/MSI: Kill default_teardown_msi_irqs()
Marc Zyngier [Tue, 30 Mar 2021 15:11:40 +0000 (16:11 +0100)]
PCI/MSI: Kill default_teardown_msi_irqs()

It doesn't have any caller left.

Link: https://lore.kernel.org/r/20210330151145.997953-10-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/MSI: Kill msi_controller structure
Marc Zyngier [Tue, 30 Mar 2021 15:11:39 +0000 (16:11 +0100)]
PCI/MSI: Kill msi_controller structure

msi_controller had a good, long life as the abstraction for
a driver providing MSIs to PCI devices. But it has been replaced
in all drivers by the more expressive generic MSI framework.

Farewell, struct msi_controller.

Link: https://lore.kernel.org/r/20210330151145.997953-9-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI/MSI: Drop use of msi_controller from core code
Marc Zyngier [Tue, 30 Mar 2021 15:11:38 +0000 (16:11 +0100)]
PCI/MSI: Drop use of msi_controller from core code

As there is no driver using msi_controller, we can now safely
remove its use from the PCI probe code.

Link: https://lore.kernel.org/r/20210330151145.997953-8-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: hv: Drop msi_controller structure
Marc Zyngier [Tue, 30 Mar 2021 15:11:37 +0000 (16:11 +0100)]
PCI: hv: Drop msi_controller structure

The Hyper-V PCI driver still makes use of a msi_controller structure,
but it looks more like a distant leftover than anything actually
useful, since it is initialised to 0 and never used for anything.

Just remove it.

Link: https://lore.kernel.org/r/20210330151145.997953-7-maz@kernel.org
Tested-by: Michael Kelley <mikelley@microsoft.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: xilinx: Convert to MSI domains
Marc Zyngier [Tue, 30 Mar 2021 15:11:36 +0000 (16:11 +0100)]
PCI: xilinx: Convert to MSI domains

In anticipation of the removal of the msi_controller structure, convert
the ancient xilinx host controller driver to MSI domains.

We end-up with the usual two domain structure, the top one being a
generic PCI/MSI domain, the bottom one being xilinx-specific and handling
the actual HW interrupt allocation.

This allows us to fix some of the most appaling MSI programming, where
the message programmed in the device is the virtual IRQ number instead
of the allocated vector number. The allocator is also made safe with
a mutex. This should allow support for MultiMSI, but I decided not to
even try, since I cannot test it.

Link: https://lore.kernel.org/r/20210330151145.997953-6-maz@kernel.org
Tested-by: Bharat Kumar Gogada <bharatku@xilinx.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: xilinx: Don't allocate extra memory for the MSI capture address
Marc Zyngier [Tue, 30 Mar 2021 15:11:35 +0000 (16:11 +0100)]
PCI: xilinx: Don't allocate extra memory for the MSI capture address

A long cargo-culted behaviour of PCI drivers is to allocate memory
to obtain an address that is fed to the controller as the MSI
capture address (i.e. the MSI doorbell).

But there is no actual requirement for this address to be RAM.
All it needs to be is a suitable aligned address that will
*not* be DMA'd to.

Use the physical address of the 'port' data structure as the MSI
capture address, aligned on a 4K boundary.

Link: https://lore.kernel.org/r/20210330151145.997953-5-maz@kernel.org
Tested-by: Bharat Kumar Gogada <bharatku@xilinx.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agoPCI: rcar: Convert to MSI domains
Marc Zyngier [Tue, 30 Mar 2021 15:11:34 +0000 (16:11 +0100)]
PCI: rcar: Convert to MSI domains

In anticipation of the removal of the msi_controller structure, convert
the Rcar host controller driver to MSI domains.

We end-up with the usual two domain structure, the top one being a
generic PCI/MSI domain, the bottom one being Rcar-specific and handling
the actual HW interrupt allocation.

Link: https://lore.kernel.org/r/20210330151145.997953-4-maz@kernel.org
Tested-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
[lorenzo.pieralisi@arm.com: merged fix https://lore.kernel.org/linux-pci/87y2e2p9wk.wl-maz@kernel.org]
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: rcar: Don't allocate extra memory for the MSI capture address
Marc Zyngier [Tue, 30 Mar 2021 15:11:33 +0000 (16:11 +0100)]
PCI: rcar: Don't allocate extra memory for the MSI capture address

A long cargo-culted behaviour of PCI drivers is to allocate memory
to obtain an address that is fed to the controller as the MSI
capture address (i.e. the MSI doorbell).

But there is no actual requirement for this address to be RAM.
All it needs to be is a suitable aligned address that will
*not* be DMA'd to.

Since the rcar platform already has a requirement that this
address should be in the first 4GB of the physical address space,
use the controller's own base address as the capture address.

Link: https://lore.kernel.org/r/20210330151145.997953-3-maz@kernel.org
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
3 years agoPCI: tegra: Convert to MSI domains
Marc Zyngier [Tue, 30 Mar 2021 15:11:32 +0000 (16:11 +0100)]
PCI: tegra: Convert to MSI domains

In anticipation of the removal of the msi_controller structure, convert
the Tegra host controller driver to MSI domains.

We end-up with the usual two domain structure, the top one being a
generic PCI/MSI domain, the bottom one being Tegra-specific and handling
the actual HW interrupt allocation.

While at it, convert the normal interrupt handler to a chained handler,
handle the controller's MSI IRQ edge triggered, support multiple MSIs
per device and use the AFI_MSI_EN_VEC* registers to provide MSI masking.

[treding@nvidia.com: fix, clean up and address TODOs from Marc's draft]

Link: https://lore.kernel.org/r/20210330151145.997953-2-maz@kernel.org
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: Export pci_pio_to_address() for module use
Jianjun Wang [Tue, 20 Apr 2021 06:17:18 +0000 (14:17 +0800)]
PCI: Export pci_pio_to_address() for module use

This interface will be used by PCI host drivers for PIO translation,
export it to support compiling those drivers as kernel modules.

Link: https://lore.kernel.org/r/20210420061723.989-3-jianjun.wang@mediatek.com
Signed-off-by: Jianjun Wang <jianjun.wang@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agodt-bindings: PCI: mediatek-gen3: Add YAML schema
Jianjun Wang [Tue, 20 Apr 2021 06:17:17 +0000 (14:17 +0800)]
dt-bindings: PCI: mediatek-gen3: Add YAML schema

Add YAML schemas documentation for Gen3 PCIe controller on
MediaTek SoCs.

Link: https://lore.kernel.org/r/20210420061723.989-2-jianjun.wang@mediatek.com
Signed-off-by: Jianjun Wang <jianjun.wang@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Acked-by: Ryder Lee <ryder.lee@mediatek.com>
3 years agoPCI: acpiphp: Fix whitespace issue
chakravarthikulkarni [Mon, 1 Mar 2021 07:21:45 +0000 (12:51 +0530)]
PCI: acpiphp: Fix whitespace issue

Fix coding style for braces.

[bhelgaas: drop comment change]
Link: https://lore.kernel.org/r/20210301072145.19018-1-chakravarthikulkarni2021@gmail.com
Signed-off-by: chakravarthikulkarni <chakravarthikulkarni2021@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: shpchp: Remove unused shpc_writeb()
Jiapeng Chong [Thu, 15 Apr 2021 08:30:22 +0000 (16:30 +0800)]
PCI: shpchp: Remove unused shpc_writeb()

Fix the following clang warning:

  drivers/pci/hotplug/shpchp_hpc.c:177:20: warning: unused function 'shpc_writeb' [-Wunused-function].

Link: https://lore.kernel.org/r/1618475422-96531-1-git-send-email-jiapeng.chong@linux.alibaba.com
Reported-by: Abaci Robot <abaci@linux.alibaba.com>
Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoPCI: cpqphp: Use DEFINE_SPINLOCK() for int15_lock
Guobin Huang [Tue, 6 Apr 2021 12:06:37 +0000 (20:06 +0800)]
PCI: cpqphp: Use DEFINE_SPINLOCK() for int15_lock

Initialize the static int15_lock spinlock with DEFINE_SPINLOCK() rather
than explicitly calling spin_lock_init().

Link: https://lore.kernel.org/r/1617710797-48903-1-git-send-email-huangguobin4@huawei.com
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Guobin Huang <huangguobin4@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: altera-msi: Remove redundant dev_err call in altera_msi_probe()
Chen Hui [Fri, 9 Apr 2021 07:57:48 +0000 (15:57 +0800)]
PCI: altera-msi: Remove redundant dev_err call in altera_msi_probe()

There is a error message within devm_ioremap_resource()
already, so remove the dev_err() call to avoid redundant
error message.

Link: https://lore.kernel.org/r/20210409075748.226141-1-clare.chenhui@huawei.com
Signed-off-by: Chen Hui <clare.chenhui@huawei.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Ley Foon Tan <ley.foon.tan@intel.com>
3 years agoPCI: mediatek: Add missing MODULE_DEVICE_TABLE
Qiheng Lin [Wed, 31 Mar 2021 08:59:38 +0000 (16:59 +0800)]
PCI: mediatek: Add missing MODULE_DEVICE_TABLE

This patch adds missing MODULE_DEVICE_TABLE definition which generates
correct modalias for automatic loading of this driver when it is built
as an external module.

Link: https://lore.kernel.org/r/20210331085938.3115-1-linqiheng@huawei.com
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Qiheng Lin <linqiheng@huawei.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agoPCI: endpoint: Fix missing destroy_workqueue()
Yang Yingliang [Wed, 31 Mar 2021 08:40:12 +0000 (16:40 +0800)]
PCI: endpoint: Fix missing destroy_workqueue()

Add the missing destroy_workqueue() before return from
pci_epf_test_init() in the error handling case and add
destroy_workqueue() in pci_epf_test_exit().

Link: https://lore.kernel.org/r/20210331084012.2091010-1-yangyingliang@huawei.com
Fixes: dbbde090d453c ("PCI: endpoint: functions: Add an EP function to test PCI")
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agoPCI: endpoint: Remove redundant initialization of pointer dev
Colin Ian King [Fri, 26 Mar 2021 19:09:09 +0000 (19:09 +0000)]
PCI: endpoint: Remove redundant initialization of pointer dev

The pointer dev is being initialized with a value that is
never read and it is being updated later with a new value.  The
initialization is redundant and can be removed.

Addresses-Coverity: ("Unused value")
Link: https://lore.kernel.org/r/20210326190909.622369-1-colin.king@canonical.com
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoPCI: Delay after FLR of Intel DC P4510 NVMe
Raphael Norwitz [Thu, 8 Apr 2021 19:05:27 +0000 (19:05 +0000)]
PCI: Delay after FLR of Intel DC P4510 NVMe

Like the Intel DC P3700 NVMe, the Intel P4510 NVMe exhibits a timeout
failure when the driver tries to interact with the device too soon after an
FLR.

Add a device-specific reset method that delays 250ms after doing an FLR.

Link: https://lore.kernel.org/r/20210408190521.16897-1-raphael.norwitz@nutanix.com
Signed-off-by: Alay Shah <alay.shah@nutanix.com>
Signed-off-by: Suresh Gumpula <suresh.gumpula@nutanix.com>
Signed-off-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
3 years agoPCI: tegra: Fix runtime PM imbalance in pex_ep_event_pex_rst_deassert()
Dinghao Liu [Thu, 8 Apr 2021 07:26:58 +0000 (15:26 +0800)]
PCI: tegra: Fix runtime PM imbalance in pex_ep_event_pex_rst_deassert()

pm_runtime_get_sync() will increase the runtime PM counter
even it returns an error. Thus a pairing decrement is needed
to prevent refcount leak. Fix this by replacing this API with
pm_runtime_resume_and_get(), which will not change the runtime
PM counter on error.

Link: https://lore.kernel.org/r/20210408072700.15791-1-dinghao.liu@zju.edu.cn
Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Thierry Reding <treding@nvidia.com>
3 years agoACPI / hotplug / PCI: Fix reference count leak in enable_slot()
Feilong Lin [Thu, 25 Mar 2021 07:26:00 +0000 (15:26 +0800)]
ACPI / hotplug / PCI: Fix reference count leak in enable_slot()

In enable_slot(), if pci_get_slot() returns NULL, we clear the SLOT_ENABLED
flag. When pci_get_slot() finds a device, it increments the device's
reference count.  In this case, we did not call pci_dev_put() to decrement
the reference count, so the memory of the device (struct pci_dev type) will
eventually leak.

Call pci_dev_put() to decrement its reference count when pci_get_slot()
returns a PCI device.

Link: https://lore.kernel.org/r/b411af88-5049-a1c6-83ac-d104a1f429be@huawei.com
Signed-off-by: Feilong Lin <linfeilong@huawei.com>
Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
3 years agoPCI: xilinx-nwl: Add optional "dma-coherent" property
Bharat Kumar Gogada [Mon, 22 Feb 2021 08:47:32 +0000 (14:17 +0530)]
PCI: xilinx-nwl: Add optional "dma-coherent" property

Add optional dma-coherent property to support coherent PCIe DMA traffic.

Link: https://lore.kernel.org/r/20210222084732.21521-2-bharat.kumar.gogada@xilinx.com
Signed-off-by: Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agoPCI: xilinx-nwl: Enable coherent PCIe DMA traffic using CCI
Bharat Kumar Gogada [Mon, 22 Feb 2021 08:47:31 +0000 (14:17 +0530)]
PCI: xilinx-nwl: Enable coherent PCIe DMA traffic using CCI

Add support for routing PCIe DMA traffic coherently when
Cache Coherent Interconnect (CCI) is enabled in the system.
The "dma-coherent" property is used to determine if CCI is enabled
or not.
Refer to https://developer.arm.com/documentation/ddi0470/k/preface
for the CCI specification.

Link: https://lore.kernel.org/r/20210222084732.21521-1-bharat.kumar.gogada@xilinx.com
Signed-off-by: Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agoPCI/ACPI: Fix acpi_pci_set_power_state() debug message
Rafael J. Wysocki [Thu, 25 Mar 2021 18:57:51 +0000 (19:57 +0100)]
PCI/ACPI: Fix acpi_pci_set_power_state() debug message

If PCI_D3cold is passed to acpi_pci_set_power_state() as the second
argument and there is no ACPI D3cold support for the given device, the
debug message will state that the device power state has been changed to
D3cold, while in fact it will be D3hot, because acpi_device_set_power()
falls back to D3hot automatically if D3cold is not supported without
returning an error.

To address this issue, modify the debug message to print the current power
state of the target PCI device's ACPI companion instead of printing the
target power state, which may not reflect the real final power state of the
device.

Link: https://lore.kernel.org/r/4319486.LvFx2qVVIh@kreacher
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoARM: iop32x: disable N2100 PCI parity reporting
Heiner Kallweit [Tue, 30 Mar 2021 17:43:18 +0000 (12:43 -0500)]
ARM: iop32x: disable N2100 PCI parity reporting

On the N2100, instead of just marking the r8169 chips as having
broken_parity_status, disable parity error reporting for them entirely.

This was the only relevant place that set broken_parity_status, so we no
longer need to check for it in the r8169 error interrupt handler.

[bhelgaas: squash into one patch, commit log]
Link: https://lore.kernel.org/r/20210330174318.1289680-4-helgaas@kernel.org
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoIB/mthca: Disable parity reporting
Heiner Kallweit [Tue, 30 Mar 2021 17:43:17 +0000 (12:43 -0500)]
IB/mthca: Disable parity reporting

For Mellanox Tavor devices, we previously set dev->broken_parity_status,
which does not change the device's behavior; it merely prevents the EDAC
PCI error reporting from warning about Master Data Parity Error, Signaled
System Error, or Detected Parity Error for this device.

Instead, disable Parity Error Response so the device doesn't report
parity errors in the first place.

[bhelgaas: split out pci_disable_parity(), commit log, keep quirk static]
Link: https://lore.kernel.org/r/20210330174318.1289680-3-helgaas@kernel.org
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoPCI: Add pci_disable_parity()
Bjorn Helgaas [Tue, 30 Mar 2021 17:43:16 +0000 (12:43 -0500)]
PCI: Add pci_disable_parity()

Add pci_disable_parity() to disable reporting of parity errors for a
device by clearing PCI_COMMAND_PARITY.

The device will still set PCI_STATUS_DETECTED_PARITY when it detects
a parity error or receives a Poisoned TLP, but it will not set
PCI_STATUS_PARITY, which means it will not assert PERR#
(conventional PCI) or report Poisoned TLPs (PCIe).

Based-on: https://lore.kernel.org/linux-arm-kernel/d375987c-ea4f-dd98-4ef8-99b2fbfe7c33@gmail.com/
Based-on-patch-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://lore.kernel.org/r/20210330174318.1289680-2-helgaas@kernel.org
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: xgene: Fix cfg resource mapping
Dejin Zheng [Sun, 28 Mar 2021 14:41:18 +0000 (22:41 +0800)]
PCI: xgene: Fix cfg resource mapping

In commit 69c2bd0dbc09 a change was made to use
devm_platform_ioremap_resource_byname() to simplify code and remove
the res variable; this was wrong since the res variable is still needed
and as an outcome the port->cfg_addr gets an erroneous address.

Revert the change going back to original behaviour.

Link: https://lore.kernel.org/r/20210328144118.305074-1-zhengdejin5@gmail.com
Fixes: 69c2bd0dbc094 ("PCI: controller: Convert to devm_platform_ioremap_resource_byname()")
Reported-by: dann.frazier@canonical.com
Tested-by: dann frazier <dann.frazier@canonical.com>
Signed-off-by: Dejin Zheng <zhengdejin5@gmail.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: stable@vger.kernel.org # v5.9+
3 years agoPCI/VPD: Remove sysfs accessor size checking dead code
Heiner Kallweit [Wed, 3 Feb 2021 08:48:03 +0000 (09:48 +0100)]
PCI/VPD: Remove sysfs accessor size checking dead code

Since d3afef2eae86 ("PCI: Determine actual VPD size on first access")
attribute size is set to 0 (unlimited).

Remove the dead code that checks for "bin_attr->size > 0".

Link: https://lore.kernel.org/r/267eae86-f8a6-6792-a7f8-2c4fd51beedc@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoPCI/VPD: Remove obsolete Broadcom NIC quirk
Heiner Kallweit [Thu, 17 Dec 2020 20:59:03 +0000 (21:59 +0100)]
PCI/VPD: Remove obsolete Broadcom NIC quirk

quirk_brcm_570x_limit_vpd() was added in 2008 [0] when we didn't have the
logic to determine VPD size based on checking for the VPD end tag.  Now
that we do have this logic [1] and don't read beyond the end tag, this
quirk can be removed.

[0] 4ae5ca29aeb9 ("PCI: Limit VPD read/write lengths for Broadcom 5706, 5708, 5709 rev.")
[1] d3afef2eae86 ("PCI: Determine actual VPD size on first access")
Link: https://lore.kernel.org/r/daa6acdf-5027-62c8-e3fb-125411b018f5@gmail.com
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
3 years agoPCI: mediatek: Configure FC and FTS for functions other than 0
Ryder Lee [Wed, 4 Nov 2020 20:58:33 +0000 (04:58 +0800)]
PCI: mediatek: Configure FC and FTS for functions other than 0

"PCI_FUNC(port->slot << 3)" is always 0, so previously
mtk_pcie_startup_port() only configured FC credits and FTs for function
0.

Compute "func" correctly so we also configure functions other than
0. This affects MT2701 and MT7623.

Link: https://lore.kernel.org/r/c529dbfc066f4bda9b87edbdbf771f207e69b84e.1604510053.git.ryder.lee@mediatek.com
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
3 years agoPCI: endpoint: Fix NULL pointer dereference for ->get_features()
Shradha Todi [Wed, 24 Mar 2021 10:16:09 +0000 (15:46 +0530)]
PCI: endpoint: Fix NULL pointer dereference for ->get_features()

get_features ops of pci_epc_ops may return NULL, causing NULL pointer
dereference in pci_epf_test_alloc_space function. Let us add a check for
pci_epc_feature pointer in pci_epf_test_bind before we access it to avoid
any such NULL pointer dereference and return -ENOTSUPP in case
pci_epc_feature is not found.

When the patch is not applied and EPC features is not implemented in the
platform driver, we see the following dump due to kernel NULL pointer
dereference.

Call trace:
 pci_epf_test_bind+0xf4/0x388
 pci_epf_bind+0x3c/0x80
 pci_epc_epf_link+0xa8/0xcc
 configfs_symlink+0x1a4/0x48c
 vfs_symlink+0x104/0x184
 do_symlinkat+0x80/0xd4
 __arm64_sys_symlinkat+0x1c/0x24
 el0_svc_common.constprop.3+0xb8/0x170
 el0_svc_handler+0x70/0x88
 el0_svc+0x8/0x640
Code: d2800581 b9403ab9 f9404ebb 8b394f60 (f9400400)
---[ end trace a438e3c5a24f9df0 ]---

Link: https://lore.kernel.org/r/20210324101609.79278-1-shradha.t@samsung.com
Fixes: 1d23170c629c4 ("PCI: pci-epf-test: Use pci_epc_get_features() to get EPC features")
Signed-off-by: Sriram Dash <dash.sriram@gmail.com>
Signed-off-by: Shradha Todi <shradha.t@samsung.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Pankaj Dubey <pankaj.dubey@samsung.com>
Reviewed-by: Kishon Vijay Abraham I <kishon@ti.com>
3 years agoPCI: Release OF node in pci_scan_device()'s error path
Dmitry Baryshkov [Sun, 24 Jan 2021 23:28:26 +0000 (02:28 +0300)]
PCI: Release OF node in pci_scan_device()'s error path

In pci_scan_device(), if pci_setup_device() fails for any reason, the code
will not release device's of_node by calling pci_release_of_node().  Fix
that by calling the release function.

Fixes: e9743ceae099 ("pci/of: Match PCI devices to OF nodes dynamically")
Link: https://lore.kernel.org/r/20210124232826.1879-1-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
3 years agoPCI: j721e: Add support to provide refclk to PCIe connector
Kishon Vijay Abraham I [Mon, 8 Mar 2021 06:35:50 +0000 (12:05 +0530)]
PCI: j721e: Add support to provide refclk to PCIe connector

Add support to provide refclk to PCIe connector.

Link: https://lore.kernel.org/r/20210308063550.6227-5-kishon@ti.com
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
3 years agodt-bindings: PCI: ti,j721e: Add endpoint mode dt-bindings for TI's AM64 SoC
Kishon Vijay Abraham I [Mon, 8 Mar 2021 06:35:49 +0000 (12:05 +0530)]
dt-bindings: PCI: ti,j721e: Add endpoint mode dt-bindings for TI's AM64 SoC

Add endpoint mode dt-bindings for TI's AM64 SoC. This is the same IP
used in J7200, however AM64 is a non-coherent architecture.

Link: https://lore.kernel.org/r/20210308063550.6227-4-kishon@ti.com
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
3 years agodt-bindings: PCI: ti,j721e: Add host mode dt-bindings for TI's AM64 SoC
Kishon Vijay Abraham I [Mon, 8 Mar 2021 06:35:48 +0000 (12:05 +0530)]
dt-bindings: PCI: ti,j721e: Add host mode dt-bindings for TI's AM64 SoC

Add host mode dt-bindings for TI's AM64 SoC. This is the same IP used in
J7200, however AM64 is a non-coherent architecture.

Link: https://lore.kernel.org/r/20210308063550.6227-3-kishon@ti.com
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>
3 years agodt-bindings: PCI: ti,j721e: Add binding to represent refclk to the connector
Kishon Vijay Abraham I [Mon, 8 Mar 2021 06:35:47 +0000 (12:05 +0530)]
dt-bindings: PCI: ti,j721e: Add binding to represent refclk to the connector

Add binding to represent refclk to the PCIe connector.

Link: https://lore.kernel.org/r/20210308063550.6227-2-kishon@ti.com
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Rob Herring <robh@kernel.org>