All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Pratyush Anand <pratyush.anand@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>, Jonathan Corbet <corbet@lwn.net>,
	Will Deacon <will.deacon@arm.com>,
	Jingoo Han <jingoohan1@gmail.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Mingkai Hu <mingkai.hu@freescale.com>,
	Tanmay Inamdar <tinamdar@apm.com>,
	Murali Karicheri <m-karicheri2@ti.com>,
	Russell King <linux@armlinux.org.uk>,
	Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>,
	Ray Jui <rjui@broadcom.com>, Wenrui Li <wenrui.li@rock-chips.com>,
	Shawn Lin <shawn.lin@rock-chips.com>,
	Minghuan Lian <minghuan.Lian@freescale.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Jon Mason <jonmason@broadcom.com>,
	Gabriele Paoloni <gabriele.paoloni@huawei.com>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Joao Pinto <Joao.Pinto@synopsys.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	Michal Simek <michal.simek@xilinx.com>,
	Stanimir Varbanov <svarbanov@mm-sol.com>,
	Zhou Wang <wangzhou1@hisilicon.com>,
	Roy Zang <tie-fei.zang@freescale.com>,
	John Garry <john.garry@huawei.com>
Subject: [PATCH 00/20] PCI: fix config and I/O Address space memory mappings
Date: Mon, 27 Feb 2017 15:14:11 +0000	[thread overview]
Message-ID: <20170227151436.18698-1-lorenzo.pieralisi@arm.com> (raw)

PCI local bus specifications (Rev3.0, 3.2.5 "Transaction Ordering
and Posting") strictly require PCI configuration and I/O Address space
write transactions to be non-posted.

Current crop of DT/ACPI PCI host controllers drivers relies on
the ioremap interface to map ECAM and ECAM-derivative PCI config
regions and pci_remap_iospace() to create a VMA for mapping
PCI host bridge I/O Address space transactions to CPU virtual address
space.

On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI
configuration non-posted write transactions requirement, because it
provides a memory mapping that issues "bufferable" or, in PCI terms
"posted" write transactions. Likewise, the current pci_remap_iospace()
implementation maps the physical address range that the PCI translates
to I/O space cycles to virtual address space through pgprot_device()
attributes that on eg ARM64 provides a memory mapping issuing
posted writes transactions, which is not PCI specifications compliant.

This patch series[1] addresses both issues in one go:

- It updates the pci_remap_iospace() function to use a page mapping
  that guarantees non-posted write transactions for I/O space addresses
- It adds a kernel API to remap PCI config space resources, so that
  architecture can override it with a mapping implementation that
  guarantees PCI specifications compliancy wrt non-posted write
  configuration transactions
- It updates all PCI host controller implementations (and the generic
  ECAM layer) to use the newly introduced mapping interface

Tested on Juno ECAM based interface (DT/ACPI).

Non-ECAM PCI host controller drivers patches need checking to make
sure that:

- I patched the correct resource region mapping for config space
- There are not any other ways to ensure posted-write completion
  in the respective pci_ops that make the relevant patch unnecessary

[1] git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git pci/config-io-mappings-fix

Cc: Pratyush Anand <pratyush.anand@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Jingoo Han <jingoohan1@gmail.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Mingkai Hu <mingkai.hu@freescale.com>
Cc: Tanmay Inamdar <tinamdar@apm.com>
Cc: Murali Karicheri <m-karicheri2@ti.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Wenrui Li <wenrui.li@rock-chips.com>
Cc: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Minghuan Lian <minghuan.Lian@freescale.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Jon Mason <jonmason@broadcom.com>
Cc: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Joao Pinto <Joao.Pinto@synopsys.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Stanimir Varbanov <svarbanov@mm-sol.com>
Cc: Zhou Wang <wangzhou1@hisilicon.com>
Cc: Roy Zang <tie-fei.zang@freescale.com>

Lorenzo Pieralisi (20):
  PCI: remove __weak tag from pci_remap_iospace()
  PCI: fix pci_remap_iospace() remap attribute
  asm-generic/io.h: add PCI config space remap interface
  ARM64: implement pci_remap_cfgspace() interface
  ARM: implement pci_remap_cfgspace() interface
  PCI: ECAM: use pci_remap_cfgspace() to map config region
  PCI: implement Devres interface to map PCI config space
  PCI: xilinx: update PCI config space remap function
  PCI: xilinx-nwl: update PCI config space remap function
  PCI: spear13xx: update PCI config space remap function
  PCI: rockchip: update PCI config space remap function
  PCI: qcom: update PCI config space remap function
  PCI: iproc-platform: update PCI config space remap function
  PCI: hisi: update PCI config space remap function
  PCI: designware: update PCI config space remap function
  PCI: armada8k: update PCI config space remap function
  PCI: xgene: update PCI config space remap function
  PCI: tegra: update PCI config space remap function
  PCI: layerscape: update PCI config space remap function
  PCI: keystone-dw: update PCI config space remap function

 Documentation/driver-model/devres.txt  |  6 ++-
 arch/arm/include/asm/io.h              | 10 ++++
 arch/arm/mm/ioremap.c                  |  7 +++
 arch/arm64/include/asm/io.h            | 10 ++++
 drivers/pci/dwc/pci-keystone-dw.c      |  2 +-
 drivers/pci/dwc/pci-layerscape.c       |  2 +-
 drivers/pci/dwc/pcie-armada8k.c        |  2 +-
 drivers/pci/dwc/pcie-designware-host.c | 12 +++--
 drivers/pci/dwc/pcie-hisi.c            |  3 +-
 drivers/pci/dwc/pcie-qcom.c            |  2 +-
 drivers/pci/dwc/pcie-spear13xx.c       |  2 +-
 drivers/pci/ecam.c                     |  5 +-
 drivers/pci/host/pci-tegra.c           |  4 +-
 drivers/pci/host/pci-xgene.c           |  4 +-
 drivers/pci/host/pcie-iproc-platform.c |  3 +-
 drivers/pci/host/pcie-rockchip.c       |  2 +-
 drivers/pci/host/pcie-xilinx-nwl.c     |  2 +-
 drivers/pci/host/pcie-xilinx.c         |  2 +-
 drivers/pci/pci.c                      | 86 +++++++++++++++++++++++++++++++++-
 include/asm-generic/io.h               |  9 ++++
 include/linux/pci.h                    |  5 ++
 21 files changed, 154 insertions(+), 26 deletions(-)

-- 
2.10.0

WARNING: multiple messages have this Message-ID (diff)
From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: Wenrui Li <wenrui.li@rock-chips.com>,
	Gabriele Paoloni <gabriele.paoloni@huawei.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Shawn Lin <shawn.lin@rock-chips.com>,
	Will Deacon <will.deacon@arm.com>,
	Michal Simek <michal.simek@xilinx.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	Tanmay Inamdar <tinamdar@apm.com>,
	linux-arch@vger.kernel.org,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Pratyush Anand <pratyush.anand@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Jon Mason <jonmason@broadcom.com>,
	Murali Karicheri <m-karicheri2@ti.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>,
	Ray Jui <rjui@broadcom.com>, John Garry <john.garry@huawei.com>,
	Joao Pinto <Joao.Pinto@synopsys.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Mingkai Hu <mingkai.hu@freescale.com>,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Jingoo Han <jingoohan1@gmail.com>,
	linux-kernel@vger.kernel.org,
	Stanimir Varbanov <svarbanov@mm-sol.com>,
	Minghuan Lian <minghuan.Lian@freescale.com>,
	Zhou Wang <wangzhou1@hisilicon.com>,
	Roy Zang <tie-fei.zang@freescale.com>
Subject: [PATCH 00/20] PCI: fix config and I/O Address space memory mappings
Date: Mon, 27 Feb 2017 15:14:11 +0000	[thread overview]
Message-ID: <20170227151436.18698-1-lorenzo.pieralisi@arm.com> (raw)

PCI local bus specifications (Rev3.0, 3.2.5 "Transaction Ordering
and Posting") strictly require PCI configuration and I/O Address space
write transactions to be non-posted.

Current crop of DT/ACPI PCI host controllers drivers relies on
the ioremap interface to map ECAM and ECAM-derivative PCI config
regions and pci_remap_iospace() to create a VMA for mapping
PCI host bridge I/O Address space transactions to CPU virtual address
space.

On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI
configuration non-posted write transactions requirement, because it
provides a memory mapping that issues "bufferable" or, in PCI terms
"posted" write transactions. Likewise, the current pci_remap_iospace()
implementation maps the physical address range that the PCI translates
to I/O space cycles to virtual address space through pgprot_device()
attributes that on eg ARM64 provides a memory mapping issuing
posted writes transactions, which is not PCI specifications compliant.

This patch series[1] addresses both issues in one go:

- It updates the pci_remap_iospace() function to use a page mapping
  that guarantees non-posted write transactions for I/O space addresses
- It adds a kernel API to remap PCI config space resources, so that
  architecture can override it with a mapping implementation that
  guarantees PCI specifications compliancy wrt non-posted write
  configuration transactions
- It updates all PCI host controller implementations (and the generic
  ECAM layer) to use the newly introduced mapping interface

Tested on Juno ECAM based interface (DT/ACPI).

Non-ECAM PCI host controller drivers patches need checking to make
sure that:

- I patched the correct resource region mapping for config space
- There are not any other ways to ensure posted-write completion
  in the respective pci_ops that make the relevant patch unnecessary

[1] git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git pci/config-io-mappings-fix

Cc: Pratyush Anand <pratyush.anand@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Jingoo Han <jingoohan1@gmail.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Mingkai Hu <mingkai.hu@freescale.com>
Cc: Tanmay Inamdar <tinamdar@apm.com>
Cc: Murali Karicheri <m-karicheri2@ti.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Wenrui Li <wenrui.li@rock-chips.com>
Cc: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Minghuan Lian <minghuan.Lian@freescale.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Jon Mason <jonmason@broadcom.com>
Cc: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Joao Pinto <Joao.Pinto@synopsys.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Stanimir Varbanov <svarbanov@mm-sol.com>
Cc: Zhou Wang <wangzhou1@hisilicon.com>
Cc: Roy Zang <tie-fei.zang@freescale.com>

Lorenzo Pieralisi (20):
  PCI: remove __weak tag from pci_remap_iospace()
  PCI: fix pci_remap_iospace() remap attribute
  asm-generic/io.h: add PCI config space remap interface
  ARM64: implement pci_remap_cfgspace() interface
  ARM: implement pci_remap_cfgspace() interface
  PCI: ECAM: use pci_remap_cfgspace() to map config region
  PCI: implement Devres interface to map PCI config space
  PCI: xilinx: update PCI config space remap function
  PCI: xilinx-nwl: update PCI config space remap function
  PCI: spear13xx: update PCI config space remap function
  PCI: rockchip: update PCI config space remap function
  PCI: qcom: update PCI config space remap function
  PCI: iproc-platform: update PCI config space remap function
  PCI: hisi: update PCI config space remap function
  PCI: designware: update PCI config space remap function
  PCI: armada8k: update PCI config space remap function
  PCI: xgene: update PCI config space remap function
  PCI: tegra: update PCI config space remap function
  PCI: layerscape: update PCI config space remap function
  PCI: keystone-dw: update PCI config space remap function

 Documentation/driver-model/devres.txt  |  6 ++-
 arch/arm/include/asm/io.h              | 10 ++++
 arch/arm/mm/ioremap.c                  |  7 +++
 arch/arm64/include/asm/io.h            | 10 ++++
 drivers/pci/dwc/pci-keystone-dw.c      |  2 +-
 drivers/pci/dwc/pci-layerscape.c       |  2 +-
 drivers/pci/dwc/pcie-armada8k.c        |  2 +-
 drivers/pci/dwc/pcie-designware-host.c | 12 +++--
 drivers/pci/dwc/pcie-hisi.c            |  3 +-
 drivers/pci/dwc/pcie-qcom.c            |  2 +-
 drivers/pci/dwc/pcie-spear13xx.c       |  2 +-
 drivers/pci/ecam.c                     |  5 +-
 drivers/pci/host/pci-tegra.c           |  4 +-
 drivers/pci/host/pci-xgene.c           |  4 +-
 drivers/pci/host/pcie-iproc-platform.c |  3 +-
 drivers/pci/host/pcie-rockchip.c       |  2 +-
 drivers/pci/host/pcie-xilinx-nwl.c     |  2 +-
 drivers/pci/host/pcie-xilinx.c         |  2 +-
 drivers/pci/pci.c                      | 86 +++++++++++++++++++++++++++++++++-
 include/asm-generic/io.h               |  9 ++++
 include/linux/pci.h                    |  5 ++
 21 files changed, 154 insertions(+), 26 deletions(-)

-- 
2.10.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
To: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: Wenrui Li <wenrui.li@rock-chips.com>,
	Gabriele Paoloni <gabriele.paoloni@huawei.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Shawn Lin <shawn.lin@rock-chips.com>,
	Will Deacon <will.deacon@arm.com>,
	Michal Simek <michal.simek@xilinx.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	Tanmay Inamdar <tinamdar@apm.com>,
	linux-arch@vger.kernel.org,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Pratyush Anand <pratyush.anand@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Jon Mason <jonmason@broadcom.com>,
	Murali Karicheri <m-karicheri2@ti.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>,
	Ray Jui <rjui@broadcom.com>, John Garry <john.garry@huawei.com>,
	Joao Pinto <Joao.Pinto@synopsys.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Mingkai Hu <mingkai.hu@freescale.com>,
	Thomas Petazzoni <thomas.petazzon>
Subject: [PATCH 00/20] PCI: fix config and I/O Address space memory mappings
Date: Mon, 27 Feb 2017 15:14:11 +0000	[thread overview]
Message-ID: <20170227151436.18698-1-lorenzo.pieralisi@arm.com> (raw)

PCI local bus specifications (Rev3.0, 3.2.5 "Transaction Ordering
and Posting") strictly require PCI configuration and I/O Address space
write transactions to be non-posted.

Current crop of DT/ACPI PCI host controllers drivers relies on
the ioremap interface to map ECAM and ECAM-derivative PCI config
regions and pci_remap_iospace() to create a VMA for mapping
PCI host bridge I/O Address space transactions to CPU virtual address
space.

On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI
configuration non-posted write transactions requirement, because it
provides a memory mapping that issues "bufferable" or, in PCI terms
"posted" write transactions. Likewise, the current pci_remap_iospace()
implementation maps the physical address range that the PCI translates
to I/O space cycles to virtual address space through pgprot_device()
attributes that on eg ARM64 provides a memory mapping issuing
posted writes transactions, which is not PCI specifications compliant.

This patch series[1] addresses both issues in one go:

- It updates the pci_remap_iospace() function to use a page mapping
  that guarantees non-posted write transactions for I/O space addresses
- It adds a kernel API to remap PCI config space resources, so that
  architecture can override it with a mapping implementation that
  guarantees PCI specifications compliancy wrt non-posted write
  configuration transactions
- It updates all PCI host controller implementations (and the generic
  ECAM layer) to use the newly introduced mapping interface

Tested on Juno ECAM based interface (DT/ACPI).

Non-ECAM PCI host controller drivers patches need checking to make
sure that:

- I patched the correct resource region mapping for config space
- There are not any other ways to ensure posted-write completion
  in the respective pci_ops that make the relevant patch unnecessary

[1] git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git pci/config-io-mappings-fix

Cc: Pratyush Anand <pratyush.anand@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Jingoo Han <jingoohan1@gmail.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Mingkai Hu <mingkai.hu@freescale.com>
Cc: Tanmay Inamdar <tinamdar@apm.com>
Cc: Murali Karicheri <m-karicheri2@ti.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Wenrui Li <wenrui.li@rock-chips.com>
Cc: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Minghuan Lian <minghuan.Lian@freescale.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Jon Mason <jonmason@broadcom.com>
Cc: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Joao Pinto <Joao.Pinto@synopsys.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Stanimir Varbanov <svarbanov@mm-sol.com>
Cc: Zhou Wang <wangzhou1@hisilicon.com>
Cc: Roy Zang <tie-fei.zang@freescale.com>

Lorenzo Pieralisi (20):
  PCI: remove __weak tag from pci_remap_iospace()
  PCI: fix pci_remap_iospace() remap attribute
  asm-generic/io.h: add PCI config space remap interface
  ARM64: implement pci_remap_cfgspace() interface
  ARM: implement pci_remap_cfgspace() interface
  PCI: ECAM: use pci_remap_cfgspace() to map config region
  PCI: implement Devres interface to map PCI config space
  PCI: xilinx: update PCI config space remap function
  PCI: xilinx-nwl: update PCI config space remap function
  PCI: spear13xx: update PCI config space remap function
  PCI: rockchip: update PCI config space remap function
  PCI: qcom: update PCI config space remap function
  PCI: iproc-platform: update PCI config space remap function
  PCI: hisi: update PCI config space remap function
  PCI: designware: update PCI config space remap function
  PCI: armada8k: update PCI config space remap function
  PCI: xgene: update PCI config space remap function
  PCI: tegra: update PCI config space remap function
  PCI: layerscape: update PCI config space remap function
  PCI: keystone-dw: update PCI config space remap function

 Documentation/driver-model/devres.txt  |  6 ++-
 arch/arm/include/asm/io.h              | 10 ++++
 arch/arm/mm/ioremap.c                  |  7 +++
 arch/arm64/include/asm/io.h            | 10 ++++
 drivers/pci/dwc/pci-keystone-dw.c      |  2 +-
 drivers/pci/dwc/pci-layerscape.c       |  2 +-
 drivers/pci/dwc/pcie-armada8k.c        |  2 +-
 drivers/pci/dwc/pcie-designware-host.c | 12 +++--
 drivers/pci/dwc/pcie-hisi.c            |  3 +-
 drivers/pci/dwc/pcie-qcom.c            |  2 +-
 drivers/pci/dwc/pcie-spear13xx.c       |  2 +-
 drivers/pci/ecam.c                     |  5 +-
 drivers/pci/host/pci-tegra.c           |  4 +-
 drivers/pci/host/pci-xgene.c           |  4 +-
 drivers/pci/host/pcie-iproc-platform.c |  3 +-
 drivers/pci/host/pcie-rockchip.c       |  2 +-
 drivers/pci/host/pcie-xilinx-nwl.c     |  2 +-
 drivers/pci/host/pcie-xilinx.c         |  2 +-
 drivers/pci/pci.c                      | 86 +++++++++++++++++++++++++++++++++-
 include/asm-generic/io.h               |  9 ++++
 include/linux/pci.h                    |  5 ++
 21 files changed, 154 insertions(+), 26 deletions(-)

-- 
2.10.0

WARNING: multiple messages have this Message-ID (diff)
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 00/20] PCI: fix config and I/O Address space memory mappings
Date: Mon, 27 Feb 2017 15:14:11 +0000	[thread overview]
Message-ID: <20170227151436.18698-1-lorenzo.pieralisi@arm.com> (raw)

PCI local bus specifications (Rev3.0, 3.2.5 "Transaction Ordering
and Posting") strictly require PCI configuration and I/O Address space
write transactions to be non-posted.

Current crop of DT/ACPI PCI host controllers drivers relies on
the ioremap interface to map ECAM and ECAM-derivative PCI config
regions and pci_remap_iospace() to create a VMA for mapping
PCI host bridge I/O Address space transactions to CPU virtual address
space.

On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI
configuration non-posted write transactions requirement, because it
provides a memory mapping that issues "bufferable" or, in PCI terms
"posted" write transactions. Likewise, the current pci_remap_iospace()
implementation maps the physical address range that the PCI translates
to I/O space cycles to virtual address space through pgprot_device()
attributes that on eg ARM64 provides a memory mapping issuing
posted writes transactions, which is not PCI specifications compliant.

This patch series[1] addresses both issues in one go:

- It updates the pci_remap_iospace() function to use a page mapping
  that guarantees non-posted write transactions for I/O space addresses
- It adds a kernel API to remap PCI config space resources, so that
  architecture can override it with a mapping implementation that
  guarantees PCI specifications compliancy wrt non-posted write
  configuration transactions
- It updates all PCI host controller implementations (and the generic
  ECAM layer) to use the newly introduced mapping interface

Tested on Juno ECAM based interface (DT/ACPI).

Non-ECAM PCI host controller drivers patches need checking to make
sure that:

- I patched the correct resource region mapping for config space
- There are not any other ways to ensure posted-write completion
  in the respective pci_ops that make the relevant patch unnecessary

[1] git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git pci/config-io-mappings-fix

Cc: Pratyush Anand <pratyush.anand@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Jingoo Han <jingoohan1@gmail.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Mingkai Hu <mingkai.hu@freescale.com>
Cc: Tanmay Inamdar <tinamdar@apm.com>
Cc: Murali Karicheri <m-karicheri2@ti.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Cc: Ray Jui <rjui@broadcom.com>
Cc: Wenrui Li <wenrui.li@rock-chips.com>
Cc: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Minghuan Lian <minghuan.Lian@freescale.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Jon Mason <jonmason@broadcom.com>
Cc: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Joao Pinto <Joao.Pinto@synopsys.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Stanimir Varbanov <svarbanov@mm-sol.com>
Cc: Zhou Wang <wangzhou1@hisilicon.com>
Cc: Roy Zang <tie-fei.zang@freescale.com>

Lorenzo Pieralisi (20):
  PCI: remove __weak tag from pci_remap_iospace()
  PCI: fix pci_remap_iospace() remap attribute
  asm-generic/io.h: add PCI config space remap interface
  ARM64: implement pci_remap_cfgspace() interface
  ARM: implement pci_remap_cfgspace() interface
  PCI: ECAM: use pci_remap_cfgspace() to map config region
  PCI: implement Devres interface to map PCI config space
  PCI: xilinx: update PCI config space remap function
  PCI: xilinx-nwl: update PCI config space remap function
  PCI: spear13xx: update PCI config space remap function
  PCI: rockchip: update PCI config space remap function
  PCI: qcom: update PCI config space remap function
  PCI: iproc-platform: update PCI config space remap function
  PCI: hisi: update PCI config space remap function
  PCI: designware: update PCI config space remap function
  PCI: armada8k: update PCI config space remap function
  PCI: xgene: update PCI config space remap function
  PCI: tegra: update PCI config space remap function
  PCI: layerscape: update PCI config space remap function
  PCI: keystone-dw: update PCI config space remap function

 Documentation/driver-model/devres.txt  |  6 ++-
 arch/arm/include/asm/io.h              | 10 ++++
 arch/arm/mm/ioremap.c                  |  7 +++
 arch/arm64/include/asm/io.h            | 10 ++++
 drivers/pci/dwc/pci-keystone-dw.c      |  2 +-
 drivers/pci/dwc/pci-layerscape.c       |  2 +-
 drivers/pci/dwc/pcie-armada8k.c        |  2 +-
 drivers/pci/dwc/pcie-designware-host.c | 12 +++--
 drivers/pci/dwc/pcie-hisi.c            |  3 +-
 drivers/pci/dwc/pcie-qcom.c            |  2 +-
 drivers/pci/dwc/pcie-spear13xx.c       |  2 +-
 drivers/pci/ecam.c                     |  5 +-
 drivers/pci/host/pci-tegra.c           |  4 +-
 drivers/pci/host/pci-xgene.c           |  4 +-
 drivers/pci/host/pcie-iproc-platform.c |  3 +-
 drivers/pci/host/pcie-rockchip.c       |  2 +-
 drivers/pci/host/pcie-xilinx-nwl.c     |  2 +-
 drivers/pci/host/pcie-xilinx.c         |  2 +-
 drivers/pci/pci.c                      | 86 +++++++++++++++++++++++++++++++++-
 include/asm-generic/io.h               |  9 ++++
 include/linux/pci.h                    |  5 ++
 21 files changed, 154 insertions(+), 26 deletions(-)

-- 
2.10.0

             reply	other threads:[~2017-02-27 15:15 UTC|newest]

Thread overview: 183+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-27 15:14 Lorenzo Pieralisi [this message]
2017-02-27 15:14 ` [PATCH 00/20] PCI: fix config and I/O Address space memory mappings Lorenzo Pieralisi
2017-02-27 15:14 ` Lorenzo Pieralisi
2017-02-27 15:14 ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 01/20] PCI: remove __weak tag from pci_remap_iospace() Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-03-01 16:15   ` Arnd Bergmann
2017-03-01 16:15     ` Arnd Bergmann
2017-03-01 16:15     ` Arnd Bergmann
2017-03-01 16:15     ` Arnd Bergmann
2017-02-27 15:14 ` [PATCH 02/20] PCI: fix pci_remap_iospace() remap attribute Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-03-16 21:48   ` Bjorn Helgaas
2017-03-16 21:48     ` Bjorn Helgaas
2017-03-16 21:48     ` Bjorn Helgaas
2017-03-16 21:48     ` Bjorn Helgaas
2017-03-17  0:33     ` Luis R. Rodriguez
2017-03-17  0:33       ` Luis R. Rodriguez
2017-03-17  0:33       ` Luis R. Rodriguez
2017-03-17 10:43       ` Liviu Dudau
2017-03-17 10:43         ` Liviu Dudau
2017-03-17 10:43         ` Liviu Dudau
2017-03-17 10:43         ` Liviu Dudau
2017-03-17 16:26         ` Luis R. Rodriguez
2017-03-17 16:26           ` Luis R. Rodriguez
2017-03-17 16:26           ` Luis R. Rodriguez
2017-03-20 16:19           ` Lorenzo Pieralisi
2017-03-20 16:19             ` Lorenzo Pieralisi
2017-03-20 16:19             ` Lorenzo Pieralisi
2017-03-20 16:06       ` Bjorn Helgaas
2017-03-20 16:06         ` Bjorn Helgaas
2017-03-20 16:06         ` Bjorn Helgaas
2017-03-20 16:06         ` Bjorn Helgaas
2017-03-20 16:26         ` Lorenzo Pieralisi
2017-03-20 16:26           ` Lorenzo Pieralisi
2017-03-20 16:26           ` Lorenzo Pieralisi
2017-03-20 16:38           ` Bjorn Helgaas
2017-03-20 16:38             ` Bjorn Helgaas
2017-03-20 16:38             ` Bjorn Helgaas
2017-03-20 16:38             ` Bjorn Helgaas
2017-02-27 15:14 ` [PATCH 03/20] asm-generic/io.h: add PCI config space remap interface Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-03-16 21:12   ` Bjorn Helgaas
2017-03-16 21:12     ` Bjorn Helgaas
2017-03-16 21:12     ` Bjorn Helgaas
2017-03-17  0:08     ` Luis R. Rodriguez
2017-03-17  0:08       ` Luis R. Rodriguez
2017-03-17  0:08       ` Luis R. Rodriguez
2017-03-20 10:22       ` John Garry
2017-03-20 10:22         ` John Garry
2017-03-20 10:22         ` John Garry
2017-03-20 10:22         ` John Garry
2017-03-20 16:27       ` Bjorn Helgaas
2017-03-20 16:27         ` Bjorn Helgaas
2017-03-20 16:27         ` Bjorn Helgaas
2017-03-20 16:27         ` Bjorn Helgaas
2017-03-20 18:45     ` Lorenzo Pieralisi
2017-03-20 18:45       ` Lorenzo Pieralisi
2017-03-20 18:45       ` Lorenzo Pieralisi
2017-03-22 15:04     ` Lorenzo Pieralisi
2017-03-22 15:04       ` Lorenzo Pieralisi
2017-03-22 15:04       ` Lorenzo Pieralisi
2017-03-22 15:15       ` Arnd Bergmann
2017-03-22 15:15         ` Arnd Bergmann
2017-03-22 15:15         ` Arnd Bergmann
2017-03-22 16:29       ` Bjorn Helgaas
2017-03-22 16:29         ` Bjorn Helgaas
2017-03-22 16:29         ` Bjorn Helgaas
2017-03-22 16:29         ` Bjorn Helgaas
2017-02-27 15:14 ` [PATCH 04/20] ARM64: implement pci_remap_cfgspace() interface Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 05/20] ARM: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-03-20 16:43   ` Russell King - ARM Linux
2017-03-20 16:43     ` Russell King - ARM Linux
2017-03-20 16:43     ` Russell King - ARM Linux
2017-03-20 16:43     ` Russell King - ARM Linux
2017-03-21 15:26     ` Lorenzo Pieralisi
2017-03-21 15:26       ` Lorenzo Pieralisi
2017-03-21 15:26       ` Lorenzo Pieralisi
2017-03-21 15:26       ` Lorenzo Pieralisi
2017-03-21 16:53       ` Russell King - ARM Linux
2017-03-21 16:53         ` Russell King - ARM Linux
2017-03-21 16:53         ` Russell King - ARM Linux
2017-03-21 16:53         ` Russell King - ARM Linux
2017-02-27 15:14 ` [PATCH 06/20] PCI: ECAM: use pci_remap_cfgspace() to map config region Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 07/20] PCI: implement Devres interface to map PCI config space Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-28 10:43   ` Lorenzo Pieralisi
2017-02-28 10:43     ` Lorenzo Pieralisi
2017-02-28 10:43     ` Lorenzo Pieralisi
2017-02-28 10:43     ` Lorenzo Pieralisi
2017-03-01 23:54   ` Andy Shevchenko
2017-03-01 23:54     ` Andy Shevchenko
2017-03-01 23:54     ` Andy Shevchenko
2017-03-01 23:54     ` Andy Shevchenko
2017-03-02 12:05     ` Lorenzo Pieralisi
2017-03-02 12:05       ` Lorenzo Pieralisi
2017-03-02 12:05       ` Lorenzo Pieralisi
2017-03-02 12:05       ` Lorenzo Pieralisi
2017-03-02 12:50       ` Andy Shevchenko
2017-03-02 12:50         ` Andy Shevchenko
2017-03-02 12:50         ` Andy Shevchenko
2017-03-02 12:50         ` Andy Shevchenko
2017-03-02 19:24         ` Tejun Heo
2017-03-02 19:24           ` Tejun Heo
2017-03-02 19:24           ` Tejun Heo
2017-03-02 19:24           ` Tejun Heo
2017-03-02 20:08           ` Thierry Reding
2017-03-02 20:08             ` Thierry Reding
2017-03-02 20:08             ` Thierry Reding
2017-03-02 20:08             ` Thierry Reding
2017-02-27 15:14 ` [PATCH 08/20] PCI: xilinx: update PCI config space remap function Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 09/20] PCI: xilinx-nwl: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 10/20] PCI: spear13xx: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 11/20] PCI: rockchip: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 12/20] PCI: qcom: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 13/20] PCI: iproc-platform: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 21:21   ` Ray Jui
2017-02-27 21:21     ` Ray Jui
2017-02-27 21:21     ` Ray Jui
2017-02-27 21:21     ` Ray Jui
2017-02-28 10:54     ` Lorenzo Pieralisi
2017-02-28 10:54       ` Lorenzo Pieralisi
2017-02-28 10:54       ` Lorenzo Pieralisi
2017-02-28 10:54       ` Lorenzo Pieralisi
2017-02-28 17:42       ` Ray Jui
2017-02-28 17:42         ` Ray Jui
2017-02-28 17:42         ` Ray Jui
2017-02-28 17:42         ` Ray Jui
2017-02-27 15:14 ` [PATCH 14/20] PCI: hisi: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-03-02 10:56   ` Gabriele Paoloni
2017-03-02 10:56     ` Gabriele Paoloni
2017-03-02 10:56     ` Gabriele Paoloni
2017-03-02 10:56     ` Gabriele Paoloni
2017-03-02 10:56     ` Gabriele Paoloni
2017-03-02 11:49     ` Lorenzo Pieralisi
2017-03-02 11:49       ` Lorenzo Pieralisi
2017-03-02 11:49       ` Lorenzo Pieralisi
2017-03-02 11:49       ` Lorenzo Pieralisi
2017-03-02 11:49       ` Lorenzo Pieralisi
2017-03-02 11:53       ` Gabriele Paoloni
2017-03-02 11:53         ` Gabriele Paoloni
2017-03-02 11:53         ` Gabriele Paoloni
2017-02-27 15:14 ` [PATCH 15/20] PCI: designware: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 16/20] PCI: armada8k: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 17/20] PCI: xgene: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 18/20] PCI: tegra: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 19/20] PCI: layerscape: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-02-27 15:14 ` [PATCH 20/20] PCI: keystone-dw: " Lorenzo Pieralisi
2017-02-27 15:14   ` Lorenzo Pieralisi
2017-03-01 16:18 ` [PATCH 00/20] PCI: fix config and I/O Address space memory mappings Arnd Bergmann
2017-03-01 16:18   ` Arnd Bergmann
2017-03-01 16:18   ` Arnd Bergmann
2017-03-01 16:18   ` Arnd Bergmann
2017-03-02 18:00   ` Lorenzo Pieralisi
2017-03-02 18:00     ` Lorenzo Pieralisi
2017-03-02 18:00     ` Lorenzo Pieralisi
2017-03-02 18:00     ` Lorenzo Pieralisi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170227151436.18698-1-lorenzo.pieralisi@arm.com \
    --to=lorenzo.pieralisi@arm.com \
    --cc=Joao.Pinto@synopsys.com \
    --cc=arnd@arndb.de \
    --cc=bharat.kumar.gogada@xilinx.com \
    --cc=bhelgaas@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=gabriele.paoloni@huawei.com \
    --cc=jingoohan1@gmail.com \
    --cc=john.garry@huawei.com \
    --cc=jonmason@broadcom.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=m-karicheri2@ti.com \
    --cc=michal.simek@xilinx.com \
    --cc=minghuan.Lian@freescale.com \
    --cc=mingkai.hu@freescale.com \
    --cc=pratyush.anand@gmail.com \
    --cc=rjui@broadcom.com \
    --cc=shawn.lin@rock-chips.com \
    --cc=svarbanov@mm-sol.com \
    --cc=thierry.reding@gmail.com \
    --cc=thomas.petazzoni@free-electrons.com \
    --cc=tie-fei.zang@freescale.com \
    --cc=tinamdar@apm.com \
    --cc=wangzhou1@hisilicon.com \
    --cc=wenrui.li@rock-chips.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.