All of lore.kernel.org
 help / color / mirror / Atom feed
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 1/3] ARM: mm: allow sub-architectures to override PCI I/O memory type
Date: Fri, 16 May 2014 10:57:36 +0100	[thread overview]
Message-ID: <20140516095736.GF12341@arm.com> (raw)
In-Reply-To: <20140515175307.GA12259@obsidianresearch.com>

On Thu, May 15, 2014 at 06:53:07PM +0100, Jason Gunthorpe wrote:
> On Thu, May 15, 2014 at 04:34:30PM +0100, Will Deacon wrote:
> > > How can a write be non-posted on the PCI bus if it's posted on AXI?
> > 
> > From the point-of-view of the CPU it would be posted, but the PCI bus would
> > see an unposted write (so I imagine there would be write buffering at the
> > host controller). However, I worry that I'm missing your point :)
> 
> It is worth being a bit careful with language here, from an AXI
> perspective there is not really such thing as a posted write. 
> 
> All writes are explicitly ack'd upon 'completion', however the memory
> type influences when that is allowed to happen.

Correct. I was trying desperately to avoid delving into AXI signals as it
adds another source of confusion, despite the attempt at being precise.

> For PCI IO writes the AXI memory type from the CPU must be 'Device
> Non-bufferable' (AWCACHE = 0), which will require the AXI ACK to be
> generated only once the PCI target returns an IOWr completion TLP.

That sounds like `strongly-ordered memory' for ARMv7.

> For PCI Memory writes the AXI memory type from the CPU could be
> 'Device Non-bufferable' but it would be best if it is 'Device
> Bufferable' (AWCACHE = 1).

That sounds like `device memory' for ARMv7.

> The latter allows more performance by permitting any AXI bridge in the
> path to ack the write early. This is as close as AXI gets to 'posted
> writes'
> 
> It is very important that the page tables in the CPU properly select
> the right AXI Memory Type for each space.

But, as far as I know, this ordering/completion guarantee for I/O space
accesses is a property of the x86 architecture, not something mandated by
the PCI spec (after all, this is nothing to do with the PCI bus).

> AFAIK, to duplicate x86 semantics an outl/inl must spin the CPU until
> it completes at the target, and the CPU must not pipeline outl/inl
> operations: outl();  outl(); produces 1 IOWr TLP, waits for
> completion, then produces another.

So that's the real question: Do we really need to duplicate x86 semantics
for IO space accesses? If we do, then we need both strongly-ordered memory
*and* a dsb in our accessors. That's not going to be much fun.

Will

WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
To: Jason Gunthorpe
	<jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Cc: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
	Thomas Petazzoni
	<thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
	Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
	Tawfik Bayouk <tawfik-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
	Andrew Lunn <andrew-g2DYL2Zd6BY@public.gmane.org>,
	Catalin Marinas <Catalin.Marinas-5wv7dgnIgG8@public.gmane.org>,
	Grant Likely
	<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>,
	Albin Tonnerre <Albin.Tonnerre-5wv7dgnIgG8@public.gmane.org>,
	Lior Amsalem <alior-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Ezequiel Garcia
	<ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Gregory Clement
	<gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Nadav Haklai <nadavh-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	Sebastian Hesselbarth
	<sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCHv3 1/3] ARM: mm: allow sub-architectures to override PCI I/O memory type
Date: Fri, 16 May 2014 10:57:36 +0100	[thread overview]
Message-ID: <20140516095736.GF12341@arm.com> (raw)
In-Reply-To: <20140515175307.GA12259-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>

On Thu, May 15, 2014 at 06:53:07PM +0100, Jason Gunthorpe wrote:
> On Thu, May 15, 2014 at 04:34:30PM +0100, Will Deacon wrote:
> > > How can a write be non-posted on the PCI bus if it's posted on AXI?
> > 
> > From the point-of-view of the CPU it would be posted, but the PCI bus would
> > see an unposted write (so I imagine there would be write buffering at the
> > host controller). However, I worry that I'm missing your point :)
> 
> It is worth being a bit careful with language here, from an AXI
> perspective there is not really such thing as a posted write. 
> 
> All writes are explicitly ack'd upon 'completion', however the memory
> type influences when that is allowed to happen.

Correct. I was trying desperately to avoid delving into AXI signals as it
adds another source of confusion, despite the attempt at being precise.

> For PCI IO writes the AXI memory type from the CPU must be 'Device
> Non-bufferable' (AWCACHE = 0), which will require the AXI ACK to be
> generated only once the PCI target returns an IOWr completion TLP.

That sounds like `strongly-ordered memory' for ARMv7.

> For PCI Memory writes the AXI memory type from the CPU could be
> 'Device Non-bufferable' but it would be best if it is 'Device
> Bufferable' (AWCACHE = 1).

That sounds like `device memory' for ARMv7.

> The latter allows more performance by permitting any AXI bridge in the
> path to ack the write early. This is as close as AXI gets to 'posted
> writes'
> 
> It is very important that the page tables in the CPU properly select
> the right AXI Memory Type for each space.

But, as far as I know, this ordering/completion guarantee for I/O space
accesses is a property of the x86 architecture, not something mandated by
the PCI spec (after all, this is nothing to do with the PCI bus).

> AFAIK, to duplicate x86 semantics an outl/inl must spin the CPU until
> it completes at the target, and the CPU must not pipeline outl/inl
> operations: outl();  outl(); produces 1 IOWr TLP, waits for
> completion, then produces another.

So that's the real question: Do we really need to duplicate x86 semantics
for IO space accesses? If we do, then we need both strongly-ordered memory
*and* a dsb in our accessors. That's not going to be much fun.

Will
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2014-05-16  9:57 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-15  9:18 [PATCHv3 0/3] ARM: implement workaround for Cortex-A9/PL310/PCIe deadlock Thomas Petazzoni
2014-05-15  9:18 ` Thomas Petazzoni
2014-05-15  9:18 ` [PATCHv3 1/3] ARM: mm: allow sub-architectures to override PCI I/O memory type Thomas Petazzoni
2014-05-15  9:18   ` Thomas Petazzoni
2014-05-15 13:21   ` Arnd Bergmann
2014-05-15 13:21     ` Arnd Bergmann
2014-05-15 13:51     ` Thomas Petazzoni
2014-05-15 13:51       ` Thomas Petazzoni
2014-05-15 14:29       ` Will Deacon
2014-05-15 14:29         ` Will Deacon
2014-05-15 14:32         ` Arnd Bergmann
2014-05-15 14:32           ` Arnd Bergmann
2014-05-15 15:34           ` Will Deacon
2014-05-15 15:34             ` Will Deacon
2014-05-15 15:55             ` Arnd Bergmann
2014-05-15 15:55               ` Arnd Bergmann
2014-05-16  9:53               ` Will Deacon
2014-05-16  9:53                 ` Will Deacon
2014-05-19 13:19                 ` Arnd Bergmann
2014-05-19 13:19                   ` Arnd Bergmann
2014-05-19 14:23                   ` Will Deacon
2014-05-19 14:23                     ` Will Deacon
2014-05-19 16:40                     ` Arnd Bergmann
2014-05-19 16:40                       ` Arnd Bergmann
2014-05-19 16:50                       ` Will Deacon
2014-05-19 16:50                         ` Will Deacon
2014-05-19 17:04                         ` Arnd Bergmann
2014-05-19 17:04                           ` Arnd Bergmann
2014-05-21  5:20                 ` Jason Gunthorpe
2014-05-21  5:20                   ` Jason Gunthorpe
2014-05-21  8:20                   ` Arnd Bergmann
2014-05-21  8:20                     ` Arnd Bergmann
2014-05-15 17:53             ` Jason Gunthorpe
2014-05-15 17:53               ` Jason Gunthorpe
2014-05-16  9:57               ` Will Deacon [this message]
2014-05-16  9:57                 ` Will Deacon
2014-05-16 15:33                 ` Jason Gunthorpe
2014-05-16 15:33                   ` Jason Gunthorpe
2014-05-15  9:18 ` [PATCHv3 2/3] ARM: mm: add support for HW coherent systems in PL310 Thomas Petazzoni
2014-05-15  9:18   ` Thomas Petazzoni
2014-05-15  9:36   ` Catalin Marinas
2014-05-15  9:36     ` Catalin Marinas
2014-05-15 11:39     ` Thomas Petazzoni
2014-05-15 11:39       ` Thomas Petazzoni
2014-05-15 13:23   ` Arnd Bergmann
2014-05-15 13:23     ` Arnd Bergmann
2014-05-15 13:35   ` Rob Herring
2014-05-15 13:35     ` Rob Herring
2014-05-15 13:46     ` Thomas Petazzoni
2014-05-15 13:46       ` Thomas Petazzoni
2014-05-15  9:18 ` [PATCHv3 3/3] ARM: mvebu: implement L2/PCIe deadlock workaround Thomas Petazzoni
2014-05-15  9:18   ` Thomas Petazzoni
2014-05-15  9:36   ` Catalin Marinas
2014-05-15  9:36     ` Catalin Marinas
2014-05-15 13:21   ` Jason Cooper
2014-05-15 13:21     ` Jason Cooper
2014-05-15 13:50     ` Thomas Petazzoni
2014-05-15 13:50       ` Thomas Petazzoni
2014-05-15 15:31       ` Jason Cooper
2014-05-15 15:31         ` Jason Cooper
2014-05-16  7:19         ` Thomas Petazzoni
2014-05-16  7:19           ` Thomas Petazzoni
2014-05-15 13:26   ` Arnd Bergmann
2014-05-15 13:26     ` Arnd Bergmann
2014-05-15 14:22     ` Thomas Petazzoni
2014-05-15 14:22       ` Thomas Petazzoni

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=20140516095736.GF12341@arm.com \
    --to=will.deacon@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.