From: "Luis R. Rodriguez" <mcgrof@kernel.org> To: Bjorn Helgaas <helgaas@kernel.org> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>, Andy Lutomirski <luto@amacapital.net>, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>, Will Deacon <will.deacon@arm.com>, Bjorn Helgaas <bhelgaas@google.com>, Russell King <linux@armlinux.org.uk>, Catalin Marinas <catalin.marinas@arm.com>, Pratyush Anand <pratyush.anand@gmail.com>, Jingoo Han <jingoohan1@gmail.com>, Mingkai Hu <mingkai.hu@freescale.com>, John Garry <john.garry@huawei.com>, Tanmay Inamdar <tinamdar@apm.com>, Murali Karicheri <m-karicheri2@ti.com>, Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>, Ray Jui <rjui@broadcom.com> Subject: Re: [PATCH 03/20] asm-generic/io.h: add PCI config space remap interface Date: Fri, 17 Mar 2017 01:08:03 +0100 [thread overview] Message-ID: <20170317000803.GA28800@wotan.suse.de> (raw) In-Reply-To: <20170316211243.GE9739@bhelgaas-glaptop.roam.corp.google.com> On Thu, Mar 16, 2017 at 04:12:43PM -0500, Bjorn Helgaas wrote: > [+cc Luis] > > On Mon, Feb 27, 2017 at 03:14:14PM +0000, Lorenzo Pieralisi wrote: > > The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and > > Posting") mandate non-posted configuration transactions. As further > > highlighted in the PCIe specifications (4.0 - Rev0.3, "Ordering > > Considerations for the Enhanced Configuration Access Mechanism"), > > through ECAM and ECAM-derivative configuration mechanism, the memory > > mapped transactions from the host CPU into Configuration Requests on the > > PCI express fabric may create ordering problems for software because > > writes to memory address are typically posted transactions (unless the > > architecture can enforce through virtual address mapping non-posted > > write transactions behaviour) but writes to Configuration Space are not > > posted on the PCI express fabric. > > > > Current DT and ACPI host bridge controllers map PCI configuration space > > (ECAM and ECAM-derivative) into the virtual address space through > > ioremap() calls, that are non-cacheable device accesses on most > > architectures, but may provide "bufferable" or "posted" write semantics > > in architecture like eg ARM/ARM64 that allow ioremap'ed regions writes > > to be buffered in the bus connecting the host CPU to the PCI fabric; > > this behaviour, as underlined in the PCIe specifications, may trigger > > transactions ordering rules and must be prevented. > > > > Introduce a new generic and explicit API to create a memory > > mapping for ECAM and ECAM-derivative config space area that > > defaults to ioremap_nocache() (which should provide a sane default > > behaviour) but still allowing architectures on which ioremap_nocache() > > results in posted write transactions to override the function > > call with an arch specific implementation that complies with > > the PCI specifications for configuration transactions. So... I take it this is actually fixing a series of odd issues also, do we at least have some reports or actual issues ? > > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > > Cc: Arnd Bergmann <arnd@arndb.de> > > Cc: Will Deacon <will.deacon@arm.com> > > Cc: Bjorn Helgaas <bhelgaas@google.com> > > Cc: Russell King <linux@armlinux.org.uk> > > Cc: Catalin Marinas <catalin.marinas@arm.com> > > --- > > include/asm-generic/io.h | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h > > index 7ef015e..52dda81 100644 > > --- a/include/asm-generic/io.h > > +++ b/include/asm-generic/io.h > > @@ -915,6 +915,15 @@ extern void ioport_unmap(void __iomem *p); > > #endif /* CONFIG_GENERIC_IOMAP */ > > #endif /* CONFIG_HAS_IOPORT_MAP */ > > > > +#ifndef pci_remap_cfgspace > > +#define pci_remap_cfgspace pci_remap_cfgspace > > +static inline void __iomem *pci_remap_cfgspace(phys_addr_t offset, > > + size_t size) > > +{ > > + return ioremap_nocache(offset, size); > > +} > > I'm fine with this conceptually, but I think it would make more sense > if the name weren't specific to PCI or config space, e.g., > ioremap_nopost() or something. Seems reasonable to me -- but are there other buses that could use this already as well ? Wouldn't these other buses also run into similar issues ? Can someone also bounce me a copy of the patches that use this ? While at it, please add some documentation too, the above commit log is huge, and yet for the person eyeballing the code they won't have any clue why this was added exactly. Since this is about helping with picking the right ioremap due to certain semantics / requirements on the PCI config space, we should clarify then what exactly are the expectations here. The clearer you are the less in trouble we can get later. Luis
WARNING: multiple messages have this Message-ID (diff)
From: "Luis R. Rodriguez" <mcgrof@kernel.org> To: Bjorn Helgaas <helgaas@kernel.org> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>, Andy Lutomirski <luto@amacapital.net>, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>, Will Deacon <will.deacon@arm.com>, Bjorn Helgaas <bhelgaas@google.com>, Russell King <linux@armlinux.org.uk>, Catalin Marinas <catalin.marinas@arm.com>, Pratyush Anand <pratyush.anand@gmail.com>, Jingoo Han <jingoohan1@gmail.com>, Mingkai Hu <mingkai.hu@freescale.com>, John Garry <john.garry@huawei.com>, Tanmay Inamdar <tinamdar@apm.com>, Murali Karicheri <m-karicheri2@ti.com>, 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>, 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>, "Luis R. Rodriguez" <mcgrof@kernel.org> Subject: Re: [PATCH 03/20] asm-generic/io.h: add PCI config space remap interface Date: Fri, 17 Mar 2017 01:08:03 +0100 [thread overview] Message-ID: <20170317000803.GA28800@wotan.suse.de> (raw) Message-ID: <20170317000803.jrMGDlRkmkW73tvpfVXsO3aHzvrn3CcldwJsOK6NGHg@z> (raw) In-Reply-To: <20170316211243.GE9739@bhelgaas-glaptop.roam.corp.google.com> On Thu, Mar 16, 2017 at 04:12:43PM -0500, Bjorn Helgaas wrote: > [+cc Luis] > > On Mon, Feb 27, 2017 at 03:14:14PM +0000, Lorenzo Pieralisi wrote: > > The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and > > Posting") mandate non-posted configuration transactions. As further > > highlighted in the PCIe specifications (4.0 - Rev0.3, "Ordering > > Considerations for the Enhanced Configuration Access Mechanism"), > > through ECAM and ECAM-derivative configuration mechanism, the memory > > mapped transactions from the host CPU into Configuration Requests on the > > PCI express fabric may create ordering problems for software because > > writes to memory address are typically posted transactions (unless the > > architecture can enforce through virtual address mapping non-posted > > write transactions behaviour) but writes to Configuration Space are not > > posted on the PCI express fabric. > > > > Current DT and ACPI host bridge controllers map PCI configuration space > > (ECAM and ECAM-derivative) into the virtual address space through > > ioremap() calls, that are non-cacheable device accesses on most > > architectures, but may provide "bufferable" or "posted" write semantics > > in architecture like eg ARM/ARM64 that allow ioremap'ed regions writes > > to be buffered in the bus connecting the host CPU to the PCI fabric; > > this behaviour, as underlined in the PCIe specifications, may trigger > > transactions ordering rules and must be prevented. > > > > Introduce a new generic and explicit API to create a memory > > mapping for ECAM and ECAM-derivative config space area that > > defaults to ioremap_nocache() (which should provide a sane default > > behaviour) but still allowing architectures on which ioremap_nocache() > > results in posted write transactions to override the function > > call with an arch specific implementation that complies with > > the PCI specifications for configuration transactions. So... I take it this is actually fixing a series of odd issues also, do we at least have some reports or actual issues ? > > Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > > Cc: Arnd Bergmann <arnd@arndb.de> > > Cc: Will Deacon <will.deacon@arm.com> > > Cc: Bjorn Helgaas <bhelgaas@google.com> > > Cc: Russell King <linux@armlinux.org.uk> > > Cc: Catalin Marinas <catalin.marinas@arm.com> > > --- > > include/asm-generic/io.h | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h > > index 7ef015e..52dda81 100644 > > --- a/include/asm-generic/io.h > > +++ b/include/asm-generic/io.h > > @@ -915,6 +915,15 @@ extern void ioport_unmap(void __iomem *p); > > #endif /* CONFIG_GENERIC_IOMAP */ > > #endif /* CONFIG_HAS_IOPORT_MAP */ > > > > +#ifndef pci_remap_cfgspace > > +#define pci_remap_cfgspace pci_remap_cfgspace > > +static inline void __iomem *pci_remap_cfgspace(phys_addr_t offset, > > + size_t size) > > +{ > > + return ioremap_nocache(offset, size); > > +} > > I'm fine with this conceptually, but I think it would make more sense > if the name weren't specific to PCI or config space, e.g., > ioremap_nopost() or something. Seems reasonable to me -- but are there other buses that could use this already as well ? Wouldn't these other buses also run into similar issues ? Can someone also bounce me a copy of the patches that use this ? While at it, please add some documentation too, the above commit log is huge, and yet for the person eyeballing the code they won't have any clue why this was added exactly. Since this is about helping with picking the right ioremap due to certain semantics / requirements on the PCI config space, we should clarify then what exactly are the expectations here. The clearer you are the less in trouble we can get later. Luis
next prev parent reply other threads:[~2017-03-17 0:08 UTC|newest] Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top 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 ` [PATCH 01/20] PCI: remove __weak tag from pci_remap_iospace() Lorenzo Pieralisi 2017-02-27 15:14 ` Lorenzo Pieralisi 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-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 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-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: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-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-03-16 21:12 ` Bjorn Helgaas 2017-03-16 21:12 ` Bjorn Helgaas 2017-03-17 0:08 ` Luis R. Rodriguez [this message] 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 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-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 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 ` [PATCH 05/20] ARM: " 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-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-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 ` [PATCH 07/20] PCI: implement Devres interface to map PCI config space Lorenzo Pieralisi 2017-02-27 15:14 ` 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-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 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-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 ` [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-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-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 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-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 ` [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-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=20170317000803.GA28800@wotan.suse.de \ --to=mcgrof@kernel.org \ --cc=arnd@arndb.de \ --cc=bharat.kumar.gogada@xilinx.com \ --cc=bhelgaas@google.com \ --cc=catalin.marinas@arm.com \ --cc=helgaas@kernel.org \ --cc=jingoohan1@gmail.com \ --cc=john.garry@huawei.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=lorenzo.pieralisi@arm.com \ --cc=luto@amacapital.net \ --cc=m-karicheri2@ti.com \ --cc=mingkai.hu@freescale.com \ --cc=paulmck@linux.vnet.ibm.com \ --cc=pratyush.anand@gmail.com \ --cc=rjui@broadcom.com \ --cc=tinamdar@apm.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).