linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: thierry.reding@gmail.com (Thierry Reding)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 12/12] ARM: tegra: Convert PMC to a driver
Date: Thu, 17 Jul 2014 13:06:53 +0200	[thread overview]
Message-ID: <20140717110652.GA18383@ulmo> (raw)
In-Reply-To: <111661024.qGiugVUugr@wuerfel>

On Thu, Jul 17, 2014 at 10:54:17AM +0200, Arnd Bergmann wrote:
> On Wednesday 16 July 2014 12:34:56 Olof Johansson wrote:
> > On Wed, Jul 16, 2014 at 11:57 AM, Thierry Reding
> > <thierry.reding@gmail.com> wrote:
> > > On Wed, Jul 16, 2014 at 05:22:03PM +0200, Arnd Bergmann wrote:
> > >> On Wednesday 16 July 2014 17:14:29 Thierry Reding wrote:
> > >> > >
> > >> > > Ok, I'll have a look. I think when this becomes a separate driver, it
> > >> > > should also have its own header file, so maybe you can in the meantime
> > >> > > make it a local header file in mach-tegra until we have found a good
> > >> > > place for it.
> > >> >
> > >> > Why do you think it should be a separate header? We already have a
> > >> > couple in include/linux and I'm not sure it's useful to add even more.
> > >> > If anything I would've thought it made sense to move the content of the
> > >> > other headers into tegra-soc.h.
> > >>
> > >> I very much dislike the idea of having a per-vendor header file that
> > >> everything gets crammed into. We should try to have proper subsystems
> > >> and generic interfaces for these wherever possible.
> > >
> > > I completely agree. However spreading the SoC-specific functions across
> > > multiple header files isn't going to help. If we keep all the per-vendor
> > > APIs in one file it makes it easier to see what could still be moved off
> > > into a separate subsystem.
> > >
> > > Now for PMC specifically, we've investigated converting the powergate
> > > API to power domains. I don't think it will be possible to make that
> > > work. The issue is that there's a defined sequence that needs to be
> > > respected to make sure the device is powered up properly. That sequence
> > > involves the primary clock and reset of the device. It's been proposed
> > > to make these clocks available to the PMC driver so that it can control
> > > them, but then we can't make sure that clocks are really off if they
> > > need to be, since we have two drivers accessing them. The only way I see
> > > to make that work reliably is by moving complete control of the
> > > powergate into drivers so that they can make sure clocks and resets are
> > > in the correct states.
> 
> I don't completely follow, but that's ok ;-)
> 
> > > The PMC driver also provides access to I/O rails and specifically a deep
> > > power down state. Some modules are in deep power down state by default,
> > > so they need to be brought out of that state. I suppose this would be
> > > easier to turn into a generic framework because there aren't any cross-
> > > dependencies like for powergates, but I'm not aware of any other SoC
> > > having a similar feature (or implementation thereof in the kernel). And
> > > adding a subsystem just for the sake of it if only one implementation is
> > > available isn't a good idea in my opinion because it will be naturally
> > > designed to work best (and therefore maybe only) for the one instance.
> > >
> > > This issue is a fundamental one and there are bound to be other SoCs
> > > that have similarly unique blocks for which it's impractical to add a
> > > framework. I suspect the primary reason why we haven't run into it this
> > > frequently is because a lot of it is still hidden in arch/arm/mach-*.
> > >
> > > I'm open to suggestions of course, but the best option I currently see
> > > is to collect these custom APIs in a central place so that we can easily
> > > compare various SoCs for commonalities as time goes by and factor them
> > > out into subsystems where appropriate.
> > >
> > > For the same reason I think it's valid to put this type of code into
> > > drivers/soc. That way we have one subdirectory to look through for
> > > potential unification rather than various ones sprinkled across arch
> > > directories. It makes little sense in my opinion to move this code to
> > > drivers/power if there's no common framework anyway.
> > 
> > I agree. We can move them out and make them common them later if needed.
> > 
> > We're sometimes trying too hard to find proper homes for various new
> > drivers, which means that we're proliferating the kernel with a lot of
> > new driver directories that have only one or two drivers in them.
> > 
> > I'd rather collect stuff in drivers/soc, and move it out as needed
> > later. Especially since we merge drivers/soc through one merge path
> > (arm-soc) and can keep an eye on it, while the
> > scatter-drivers-everywhere approach merges through various
> > maintainers.
> 
> Ok. I'm fine with having one driver in drivers/soc for the pmc (and
> a few associated bits if necessary) and a header file for that. If you
> end up with two separate drivers in drivers/soc, I'd also prefer two
> separate header files.
> 
> It may be a good idea to put these headers somewhere other than
> include/linux/*.h, which is completely overloaded by random stuff.
> We could use include/linux/soc/*.h or include/soc/*.h for those.

We could go all the way and make it include/soc/tegra/*.h for better
namespacing. I guess either way would be fine, really, since the number
of files in those directories should be small by definition, so we
should be able to do without the extra SoC directory, too. I have a
slight preference for a separate SoC directory, do you have any
objections?

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140717/afc16874/attachment-0001.sig>

  reply	other threads:[~2014-07-17 11:06 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-11 12:15 [PATCH 00/12] Add NVIDIA Tegra FUSE driver Thierry Reding
2014-07-11 12:16 ` [PATCH 01/12] ARM: tegra: Sort includes alphabetically Thierry Reding
2014-07-11 12:16 ` [PATCH 02/12] ARM: tegra: Use a function to get the chip ID Thierry Reding
2014-07-11 12:16 ` [PATCH 03/12] ARM: tegra: export apb dma readl/writel Thierry Reding
2014-07-11 12:16 ` [PATCH 04/12] ARM: tegra: move fuse exports to tegra-soc.h Thierry Reding
2014-07-11 12:16 ` [PATCH 05/12] soc/tegra: Add efuse driver for Tegra Thierry Reding
2014-10-19  3:12   ` Shawn Guo
2014-11-10 15:10     ` Thierry Reding
2014-07-11 12:16 ` [PATCH 06/12] soc/tegra: Add efuse and apbmisc bindings Thierry Reding
2014-07-11 12:16 ` [PATCH 07/12] soc/tegra: fuse: move APB DMA into Tegra20 fuse driver Thierry Reding
2014-07-11 12:16 ` [PATCH 08/12] misc: fuse: fix dummy functions Thierry Reding
2014-07-11 12:16 ` [PATCH 09/12] ARM: tegra: Setup CPU hotplug in a pure initcall Thierry Reding
2014-07-11 12:16 ` [PATCH 10/12] ARM: tegra: Always lock the CPU reset vector Thierry Reding
2014-07-11 12:16 ` [PATCH 11/12] soc/tegra: fuse: Set up in early initcall Thierry Reding
2014-07-11 12:16 ` [PATCH 12/12] ARM: tegra: Convert PMC to a driver Thierry Reding
2014-07-11 13:58   ` Peter De Schrijver
2014-07-14  8:06     ` Thierry Reding
2014-07-16 11:56   ` Arnd Bergmann
2014-07-16 13:22     ` Thierry Reding
2014-07-16 14:12       ` Arnd Bergmann
2014-07-16 15:14         ` Thierry Reding
2014-07-16 15:22           ` Arnd Bergmann
2014-07-16 18:57             ` Thierry Reding
2014-07-16 19:34               ` Olof Johansson
2014-07-17  8:54                 ` Arnd Bergmann
2014-07-17 11:06                   ` Thierry Reding [this message]
2014-07-21 12:06                     ` Arnd Bergmann
2014-07-21 13:12                       ` Thierry Reding
2014-07-21 13:16                         ` Tejun Heo
2014-07-21 13:39                           ` Thierry Reding
2014-07-17  8:53               ` Peter De Schrijver
2014-07-17  9:01                 ` Peter De Schrijver
2014-07-17 11:01                   ` Thierry Reding
2014-07-21  7:09                     ` Vince Hsu
2014-07-21  9:02                       ` Thierry Reding
2014-07-22  3:34                         ` Vince Hsu
2014-07-13  6:38 ` [PATCH 00/12] Add NVIDIA Tegra FUSE driver Olof Johansson
2014-07-14  6:57   ` Thierry Reding

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=20140717110652.GA18383@ulmo \
    --to=thierry.reding@gmail.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).