From: Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>
To: Olof Johansson <olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org>
Cc: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
"paul-DWxLp4Yu+b8AvxtiuMwx3w@public.gmane.org"
<paul-DWxLp4Yu+b8AvxtiuMwx3w@public.gmane.org>,
Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
Greg Kroah-Hartman
<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
Peter De Schrijver
<pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"arm-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org"
<arm-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
Pawel Moll <Pawel.Moll-5wv7dgnIgG8@public.gmane.org>
Subject: Re: [GIT PULL 2/3] ARM: tegra: move fuse code out of arch/arm
Date: Tue, 22 Jul 2014 11:27:49 +0100 [thread overview]
Message-ID: <20140722102749.GB2219@arm.com> (raw)
In-Reply-To: <CAOesGMgvd1HbjywN7BDPtr8ZU7vucWH48B=AW3TZjng73YA8WA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On Mon, Jul 21, 2014 at 05:46:02PM +0100, Olof Johansson wrote:
> On Mon, Jul 21, 2014 at 9:38 AM, Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> wrote:
> > On 07/21/2014 09:54 AM, Catalin Marinas wrote:
> >> We have a similar issue with arm64 vexpress (well, just on the model)
> >> where vexpress_sysreg_init() is a core_initcall (should be fine as
> >> arch_initcall) as it needs to be done before of_platform_populate().
> >> Pawel on cc should know more of the history here.
> >>
> >> I recall there were also some discussions about a SoC driver model which
> >> hangs off the top compatible string in the DT (e.g. "arm,vexpress") and
> >> allow (minimal) code to be run slightly earlier, though still not
> >> earlier than arch_initcall.
> >
> > I guess that would work out OK; if we force the driver that binds to a
> > top-level compatible value of "nvidia,tegraNNN" to probe first, and it
> > then calls out to all the low-level init code in a sane order, that
> > would solve the problem. I'm not sure that's any better than having a
> > machine descriptor with an "init" function though; wrapping all this in
> > a driver just seems like overhead, but it would work out OK.
>
> This is exactly the same as having a machine descriptor, but the
> arch/arm64 maintainers don't have to look at it so they don't think it
> is one.
>
> So now we need to find a place for machine descriptors somewhere under
> drivers/* too. Sigh. Agreed, this is nothing but overhead and
> overabstraction.
You are missing the point. It's not the machine descriptor (or mach-*
directories) I want to hide but rather the need for early SoC specific
initialisation. Always providing a machine descriptor with hooks for
early SoC initialisation does not provide any incentive for people to
think properly about what's early hardware configuration (usually done
by firmware), what's actually needed for CPU booting (SoC-independent
with a secondary booting protocol selectable from a small set) and how
the rest of the SoC fits with the Linux device model. It's also aimed at
pushing back on hardware people who think they can mess up, for example,
a GIC implementation because the rest is just software and you can
always add #ifdefs.
On 32-bit ARM this was not always possible (non-standard essential
peripherals like IRQ controller, timers) but with arm64 we have the
things needed to be able to boot an SoC to arch_initcall level without
any early hooks. I agree that on occasion we may need some early SoC
code just because of some (bad) hardware design or simply to work around
firmware/hardware bugs (and Pawel's patch is a nice approach). But this
should definitely not be the norm and I disagree with moving entire
arch/arm/mach-* code to drivers/soc just because one can't decide where
early SoC initialisation belongs to. Also the legacy firmware argument
doesn't hold for ARMv8/arm64 since the CPU now starts at EL3 in AArch64
mode and you need code there before Linux is invoked (at EL2 or EL1).
In the Tegra fuse case, it's not actually some hardware configuration
that needs to be set up early but rather a driver dependency
initialisation which is not (cannot be) handled by the DT. This is not
that different from the vexpress sysregs mfd where we worked around
using an initcall. It's not ideal, I would prefer something simpler like
sibling DT node sorting during unflattening (or maybe addressing issues
with deferred probing if there are any) rather than working around it
using machine_desc.
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [GIT PULL 2/3] ARM: tegra: move fuse code out of arch/arm
Date: Tue, 22 Jul 2014 11:27:49 +0100 [thread overview]
Message-ID: <20140722102749.GB2219@arm.com> (raw)
In-Reply-To: <CAOesGMgvd1HbjywN7BDPtr8ZU7vucWH48B=AW3TZjng73YA8WA@mail.gmail.com>
On Mon, Jul 21, 2014 at 05:46:02PM +0100, Olof Johansson wrote:
> On Mon, Jul 21, 2014 at 9:38 AM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> > On 07/21/2014 09:54 AM, Catalin Marinas wrote:
> >> We have a similar issue with arm64 vexpress (well, just on the model)
> >> where vexpress_sysreg_init() is a core_initcall (should be fine as
> >> arch_initcall) as it needs to be done before of_platform_populate().
> >> Pawel on cc should know more of the history here.
> >>
> >> I recall there were also some discussions about a SoC driver model which
> >> hangs off the top compatible string in the DT (e.g. "arm,vexpress") and
> >> allow (minimal) code to be run slightly earlier, though still not
> >> earlier than arch_initcall.
> >
> > I guess that would work out OK; if we force the driver that binds to a
> > top-level compatible value of "nvidia,tegraNNN" to probe first, and it
> > then calls out to all the low-level init code in a sane order, that
> > would solve the problem. I'm not sure that's any better than having a
> > machine descriptor with an "init" function though; wrapping all this in
> > a driver just seems like overhead, but it would work out OK.
>
> This is exactly the same as having a machine descriptor, but the
> arch/arm64 maintainers don't have to look at it so they don't think it
> is one.
>
> So now we need to find a place for machine descriptors somewhere under
> drivers/* too. Sigh. Agreed, this is nothing but overhead and
> overabstraction.
You are missing the point. It's not the machine descriptor (or mach-*
directories) I want to hide but rather the need for early SoC specific
initialisation. Always providing a machine descriptor with hooks for
early SoC initialisation does not provide any incentive for people to
think properly about what's early hardware configuration (usually done
by firmware), what's actually needed for CPU booting (SoC-independent
with a secondary booting protocol selectable from a small set) and how
the rest of the SoC fits with the Linux device model. It's also aimed at
pushing back on hardware people who think they can mess up, for example,
a GIC implementation because the rest is just software and you can
always add #ifdefs.
On 32-bit ARM this was not always possible (non-standard essential
peripherals like IRQ controller, timers) but with arm64 we have the
things needed to be able to boot an SoC to arch_initcall level without
any early hooks. I agree that on occasion we may need some early SoC
code just because of some (bad) hardware design or simply to work around
firmware/hardware bugs (and Pawel's patch is a nice approach). But this
should definitely not be the norm and I disagree with moving entire
arch/arm/mach-* code to drivers/soc just because one can't decide where
early SoC initialisation belongs to. Also the legacy firmware argument
doesn't hold for ARMv8/arm64 since the CPU now starts at EL3 in AArch64
mode and you need code there before Linux is invoked (at EL2 or EL1).
In the Tegra fuse case, it's not actually some hardware configuration
that needs to be set up early but rather a driver dependency
initialisation which is not (cannot be) handled by the DT. This is not
that different from the vexpress sysregs mfd where we worked around
using an initcall. It's not ideal, I would prefer something simpler like
sibling DT node sorting during unflattening (or maybe addressing issues
with deferred probing if there are any) rather than working around it
using machine_desc.
--
Catalin
next prev parent reply other threads:[~2014-07-22 10:27 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 21:23 [GIT PULL 1/3] ARM: tegra: rework PCIe regulators Stephen Warren
2014-06-23 21:23 ` Stephen Warren
[not found] ` <1403558626-13422-1-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-06-23 21:23 ` [GIT PULL 2/3] ARM: tegra: move fuse code out of arch/arm Stephen Warren
2014-06-23 21:23 ` Stephen Warren
[not found] ` <1403558626-13422-2-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-07 0:44 ` Olof Johansson
2014-07-07 0:44 ` Olof Johansson
[not found] ` <20140707004417.GE8469-O5ziIzlqnXUVNXGz7ipsyg@public.gmane.org>
2014-07-08 13:43 ` Peter De Schrijver
2014-07-08 13:43 ` Peter De Schrijver
[not found] ` <20140708134359.GA23218-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2014-07-08 17:47 ` Olof Johansson
2014-07-08 17:47 ` Olof Johansson
[not found] ` <CAOesGMhoqvqf-dktp-OfUNTPLahPwkyAPiTeDngr4QjH=VfOGA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-09 11:16 ` Peter De Schrijver
2014-07-09 11:16 ` Peter De Schrijver
[not found] ` <20140709111633.GG23218-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2014-07-09 12:50 ` Arnd Bergmann
2014-07-09 12:50 ` Arnd Bergmann
2014-07-11 12:56 ` Thierry Reding
2014-07-11 12:56 ` Thierry Reding
2014-07-18 2:45 ` Stephen Warren
2014-07-18 2:45 ` Stephen Warren
[not found] ` <53C88A4C.3070304-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-18 5:33 ` Olof Johansson
2014-07-18 5:33 ` Olof Johansson
[not found] ` <CAOesGMh+zLV781wzdR5=_Bpzh+XMwJfWL-5XMDP6DwG_Hg80kw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-21 15:06 ` Stephen Warren
2014-07-21 15:06 ` Stephen Warren
[not found] ` <53CD2C58.6060601-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-21 15:54 ` Catalin Marinas
2014-07-21 15:54 ` Catalin Marinas
[not found] ` <20140721155451.GF32578-5wv7dgnIgG8@public.gmane.org>
2014-07-21 16:14 ` Pawel Moll
2014-07-21 16:14 ` Pawel Moll
2014-07-21 16:38 ` Stephen Warren
2014-07-21 16:38 ` Stephen Warren
[not found] ` <53CD4201.5070705-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-21 16:46 ` Olof Johansson
2014-07-21 16:46 ` Olof Johansson
[not found] ` <CAOesGMgvd1HbjywN7BDPtr8ZU7vucWH48B=AW3TZjng73YA8WA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-21 17:00 ` [PATCH] platform: Make platform_bus device a platform device Pawel Moll
2014-07-21 17:00 ` Pawel Moll
[not found] ` <1405962034-25482-1-git-send-email-pawel.moll-5wv7dgnIgG8@public.gmane.org>
2014-07-21 18:40 ` Greg Kroah-Hartman
2014-07-21 18:40 ` Greg Kroah-Hartman
[not found] ` <20140721184007.GB572-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-22 10:02 ` [PATCH v2] " Pawel Moll
2014-07-22 10:02 ` Pawel Moll
[not found] ` <1406023327-18525-1-git-send-email-pawel.moll-5wv7dgnIgG8@public.gmane.org>
2014-07-22 17:10 ` Greg Kroah-Hartman
2014-07-22 17:10 ` Greg Kroah-Hartman
[not found] ` <20140722171013.GA6605-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-22 17:30 ` Pawel Moll
2014-07-22 17:30 ` Pawel Moll
2014-07-22 17:37 ` Greg Kroah-Hartman
2014-07-22 17:37 ` Greg Kroah-Hartman
[not found] ` <20140722173713.GA8959-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-22 17:55 ` [PATCH v3] " Pawel Moll
2014-07-22 17:55 ` Pawel Moll
[not found] ` <1406051719-17354-1-git-send-email-pawel.moll-5wv7dgnIgG8@public.gmane.org>
2014-07-22 18:01 ` Pawel Moll
2014-07-22 18:01 ` Pawel Moll
2014-07-22 18:15 ` Greg Kroah-Hartman
2014-07-22 18:15 ` Greg Kroah-Hartman
[not found] ` <20140722181505.GA9898-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-23 17:16 ` Pawel Moll
2014-07-23 17:16 ` Pawel Moll
2014-07-23 19:34 ` Greg Kroah-Hartman
2014-07-23 19:34 ` Greg Kroah-Hartman
[not found] ` <20140723193434.GA31983-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-24 17:12 ` Pawel Moll
2014-07-24 17:12 ` Pawel Moll
2014-07-22 19:46 ` Olof Johansson
2014-07-22 19:46 ` Olof Johansson
[not found] ` <CAOesGMgya9i=zc_AVO_mgrC_FjYz-RWxwXguNueVA=7gpq=5sA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-23 14:26 ` Pawel Moll
2014-07-23 14:26 ` Pawel Moll
2014-07-22 22:16 ` Greg Kroah-Hartman
2014-07-22 22:16 ` Greg Kroah-Hartman
[not found] ` <20140722221619.GA15781-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-23 14:27 ` Pawel Moll
2014-07-23 14:27 ` Pawel Moll
2014-07-22 10:27 ` Catalin Marinas [this message]
2014-07-22 10:27 ` [GIT PULL 2/3] ARM: tegra: move fuse code out of arch/arm Catalin Marinas
[not found] ` <20140722102749.GB2219-5wv7dgnIgG8@public.gmane.org>
2014-07-22 16:27 ` Stephen Warren
2014-07-22 16:27 ` Stephen Warren
[not found] ` <53CE90ED.8030900-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-22 16:54 ` Catalin Marinas
2014-07-22 16:54 ` Catalin Marinas
2014-07-22 11:26 ` Catalin Marinas
2014-07-22 11:26 ` Catalin Marinas
[not found] ` <20140722112651.GC2219-5wv7dgnIgG8@public.gmane.org>
2014-07-22 16:22 ` Stephen Warren
2014-07-22 16:22 ` Stephen Warren
[not found] ` <53CE8FB1.4060307-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-22 17:04 ` Catalin Marinas
2014-07-22 17:04 ` Catalin Marinas
2014-07-18 2:44 ` Stephen Warren
2014-07-18 2:44 ` Stephen Warren
[not found] ` <53C889FF.4070206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-18 5:33 ` Olof Johansson
2014-07-18 5:33 ` Olof Johansson
2014-06-23 21:23 ` [GIT PULL 3/3] ARM: tegra: use us counter as delay timer Stephen Warren
2014-06-23 21:23 ` Stephen Warren
[not found] ` <1403558626-13422-3-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-07 0:49 ` Olof Johansson
2014-07-07 0:49 ` Olof Johansson
2014-07-07 0:38 ` [GIT PULL 1/3] ARM: tegra: rework PCIe regulators Olof Johansson
2014-07-07 0:38 ` Olof Johansson
[not found] ` <20140707003854.GD8469-O5ziIzlqnXUVNXGz7ipsyg@public.gmane.org>
2014-07-07 5:52 ` Thierry Reding
2014-07-07 5:52 ` Thierry Reding
2014-07-08 4:45 ` Olof Johansson
2014-07-08 4:45 ` Olof Johansson
[not found] ` <CAOesGMjwE=xThuUwmBF02YaQ32_uFogryW5anNoGc8yfkuN_Pg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-10 10:15 ` Thierry Reding
2014-07-10 10:15 ` Thierry Reding
2014-07-17 14:20 ` Thierry Reding
2014-07-17 14:20 ` Thierry Reding
2014-07-17 17:52 ` Olof Johansson
2014-07-17 17:52 ` Olof Johansson
2014-07-18 2:47 ` Stephen Warren
2014-07-18 2:47 ` Stephen Warren
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=20140722102749.GB2219@arm.com \
--to=catalin.marinas-5wv7dgnigg8@public.gmane.org \
--cc=Pawel.Moll-5wv7dgnIgG8@public.gmane.org \
--cc=arm-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \
--cc=paul-DWxLp4Yu+b8AvxtiuMwx3w@public.gmane.org \
--cc=pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.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.