From: Dave.Martin@arm.com (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: [Ksummit-2013-discuss] [ARM ATTEND] Describing complex, non-probable system topologies
Date: Fri, 2 Aug 2013 16:26:48 +0100 [thread overview]
Message-ID: <20130802152648.GD2361@localhost.localdomain> (raw)
In-Reply-To: <20130802141449.GA7533@kroah.com>
On Fri, Aug 02, 2013 at 10:14:49PM +0800, Greg KH wrote:
> On Fri, Aug 02, 2013 at 05:34:45AM -0700, Tony Lindgren wrote:
> > * Greg KH <greg@kroah.com> [130802 02:37]:
> > > On Fri, Aug 02, 2013 at 02:03:55AM -0700, Tony Lindgren wrote:
> > > > * Greg KH <greg@kroah.com> [130801 12:33]:
> > > > > On Thu, Aug 01, 2013 at 07:35:31PM +0100, Will Deacon wrote:
> > > > > > Hello,
> > > > > >
> > > > > > Whilst Linux implements a bunch of different bus types (many of which
> > > > > > are in fact virtual), devices sitting on non-probable, memory mapped
> > > > > > buses inside SoCs typically live on either the platform_bus or the
> > > > > > amba_bus. So far, this has worked out alright; the buses haven't needed
> > > > > > to be visible to software and no additional software control is really
> > > > > > required from the OS. However, as I/O coherency and hardware
> > > > > > virtualisation capabilities start to creep into ARM-based SoCs, Linux
> > > > > > needs to know the topology of the system on which it is running.
> > > > > >
> > > > > > Naturally, this would need to be described as a device-tree binding and
> > > > > > communicate:
> > > > > >
> > > > > > - Buses which can be configured as coherent, including which devices
> > > > > > on those buses can be made coherent.
> > > > > >
> > > > > > - How IOMMUs sit on the bus and interact with masters on that bus (the
> > > > > > current one-IOMMU-driver-per-bus may not work well for the
> > > > > > platform_bus).
> > > > >
> > > > > I've been waiting for people to finally run into this one, and realize
> > > > > that they shouldn't be using "platform_bus" :)
> > > > >
> > > > > > - QoS and PM constraints. This isn't really in my area, but we do have
> > > > > > buses that have these features and expect software to control them.
> > > > > >
> > > > > > - The system topology and linkages between buses and devices.
> > > > >
> > > > > The driver core handles this really well, you just have to create new
> > > > > busses, and don't rely on the "catch-all" platform_bus.
> > > >
> > > > Hmm do you have some example of a device driver that is generic and
> > > > is supported on platform_bus and some other bus?
> > >
> > > Take a look at drivers/usb/host/ohci* for one example that I know of,
> > > there are others all through the kernel as well.
> >
> > Uhh OK so I guess the answer is that the bus glue still needs to
> > be implemented separately for each driver and there's no generic
> > way of supporting multiple busses?
>
> Different busses implies that there are different ways to physically
> talk to the device hardware, so of course there is no generic way to
> support that.
>
> Unless your subsystem wants to do what we did for USB, and define a
> generic way to talk to the hardware in a very abstract way, allowing for
> totally different types of physical layers to handle lots of different
> logical layer drivers. But odds are, you don't want to do that.
>
> It should be easy to just abstract out your "this is how I write a byte
> to the hardware" logic to handle the different bus types, if you really
> are using the same chip/core. Lots of drivers do this today just fine,
> it isn't a big deal.
I think the focus here is on high-performance memory-mapped buses, since
that's where a lot of the complexity lies in a SoC. Once the bus is
configured, all buses look much the same at the "how to write a byte"
level.
The pain points are how the buses are configured, what their capabilities
are, and how the view of the system (coherency, and addressing and visibility
of slaves) varies between different bus masters. These are key things which
may vary per bus. DT at least has no real way of describing such things
right now.
Unfortunately, hardware vendors have a lot of freedom about the on-SoC
bus architecture, and they do use it.
I think we've mostly escaped from this in the past, since in the past, bus
topologies have tended to be simpler, and the kernel does less active
management of the hardware -- with a bit of luck, the boot ROM or
bootloader sets them up in a sane state, and then Linux can just treat
those buses as generic memory-mapped IO.
But with current and future systems, we're starting to need to care
about dynamic control of bus configuration, particularly for things like
power management and multi-master scenarios.
Cheers
---Dave
next prev parent reply other threads:[~2013-08-02 15:26 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-01 18:35 [ARM ATTEND] Describing complex, non-probable system topologies Will Deacon
2013-08-01 18:42 ` Dave Martin
2013-08-01 22:41 ` [Ksummit-2013-discuss] " David Brown
2013-08-01 19:27 ` Greg KH
2013-08-01 19:39 ` Russell King - ARM Linux
2013-08-01 20:15 ` Greg KH
2013-08-01 20:18 ` Russell King - ARM Linux
2013-08-01 20:36 ` Greg KH
2013-08-01 20:45 ` Russell King - ARM Linux
2013-08-01 21:04 ` Greg KH
2013-08-01 21:48 ` James Bottomley
2013-08-01 23:16 ` Mark Brown
2013-08-02 9:03 ` Tony Lindgren
2013-08-02 9:32 ` Greg KH
2013-08-02 12:34 ` Tony Lindgren
2013-08-02 14:14 ` Greg KH
2013-08-02 15:26 ` Dave Martin [this message]
2013-08-02 16:45 ` Will Deacon
2013-08-05 6:55 ` Tony Lindgren
2013-08-05 7:11 ` Greg KH
2013-08-05 7:37 ` Tony Lindgren
2013-08-05 8:02 ` Greg KH
2013-08-05 8:21 ` Tony Lindgren
2013-08-05 8:51 ` Greg KH
2013-08-05 9:14 ` Tony Lindgren
2013-08-08 16:50 ` Kevin Hilman
2013-08-02 11:53 ` Will Deacon
2013-08-02 12:37 ` Tony Lindgren
2013-08-02 14:16 ` Greg KH
2013-08-02 14:20 ` Greg KH
2013-08-02 16:09 ` Will Deacon
2013-08-02 22:32 ` Greg KH
2013-08-03 5:16 ` Olof Johansson
2013-08-05 6:47 ` Tony Lindgren
2013-08-07 1:52 ` Will Deacon
2013-08-20 6:59 ` Hiroshi Doyu
2013-08-07 1:49 ` Will Deacon
2013-08-01 21:41 ` James Bottomley
2013-08-02 17:08 ` Will Deacon
2013-08-01 22:26 ` Bjorn Helgaas
2013-08-02 12:01 ` Will Deacon
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=20130802152648.GD2361@localhost.localdomain \
--to=dave.martin@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 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).