All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Dave Martin <dave.martin@linaro.org>
Cc: linux-arm-kernel@lists.infradead.org,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Nicolas Pitre <nicolas.pitre@linaro.org>,
	Tony Lindgren <tony@atomide.com>,
	Santosh Shilimkar <santosh.shilimkar@ti.com>,
	linux-omap@vger.kernel.org, Jean Pihet <j-pihet@ti.com>
Subject: Re: [PATCH v2] ARM: Define wfi() macro for v6 processors
Date: Tue, 8 Feb 2011 16:15:15 +0100	[thread overview]
Message-ID: <201102081615.15713.arnd@arndb.de> (raw)
In-Reply-To: <AANLkTi=+2VN53gs=ZDr-M0V3mG5A0iMPRL-RdUugXxUy@mail.gmail.com>

On Tuesday 08 February 2011, Dave Martin wrote:
> I guess there are two problems we're trying to solve here:
> 
> 1) a lowest-common denominator implementation of things like wfi(),
> for use in common code.  This must be based on __LINUX_ARM_ARCH__
> (which IIUC gives the lowest arch supported by all the CPUs being
> built for -- am I correct?)
> 2) definitions for specific CPUs, for non-generic code which may be
> bundled together in a single kernel build.
> 
> For (1), We can sensibly try to define a generic macro.  If building
> for ARMv6 and ARMv7 CPUs in the same kernel, then we have to use the
> lowest-common-denominator definition, i.e., the MCR form.  For ARMv7,
> we can use WFI.

But that doesn't work if you build a combined v5/v6/v7 kernel, because
v5 supports neither form, right? I think to do that, it needs the
same kind of abstraction that we have for a number of other things
like cache management in arch/arm/mm/.

> For (2), I think the best approach is to use the actual "wfi"
> instruction and build the affected files with the appropriate -march=
> flag (omap already does that) - since those CPU-specific files should
> by definition never be run if running on another CPU.  We only support
> new enough tools these days that this should be supported; so "wfi"
> should be preferable to ".long 0xdeadbeef" - otherwise we need lots of
> #ifdef CONFIG_THUMB2_KERNEL, or a macro.  If we have a macro, it would
> be better for that to be generically implemented somewhere, becasue
> the requirements are the same for every BSP supporting v7.

Makes sense.

> I don't like the practice of pre-assembling bits of code with .long,
> in order to allow a file to be built with wrong -march= flags, and I
> would favour migrating away from this where possible ... but I accept
> it's a pragmatic solution to a problem for which gcc/binutils provide
> no good alternative.

Yes. Moreover, new instructions may always have to be that way for
a while, before they can be moved over to the proper inline
assembly.

> So, for v6K we should either always use MCR for wfi(), or we need to
> define wfi() using ALT_SMP(wfi) ALT_UP(mcr).  But whether that's a
> common enough case to care about, I can't say.
> 
> 
> Any thoughts on all that?

I think that having all instances of wfi in per-CPU source files is
good enough, because it's not performance critical, and this method
is well-supported already.

	Arnd

WARNING: multiple messages have this Message-ID (diff)
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] ARM: Define wfi() macro for v6 processors
Date: Tue, 8 Feb 2011 16:15:15 +0100	[thread overview]
Message-ID: <201102081615.15713.arnd@arndb.de> (raw)
In-Reply-To: <AANLkTi=+2VN53gs=ZDr-M0V3mG5A0iMPRL-RdUugXxUy@mail.gmail.com>

On Tuesday 08 February 2011, Dave Martin wrote:
> I guess there are two problems we're trying to solve here:
> 
> 1) a lowest-common denominator implementation of things like wfi(),
> for use in common code.  This must be based on __LINUX_ARM_ARCH__
> (which IIUC gives the lowest arch supported by all the CPUs being
> built for -- am I correct?)
> 2) definitions for specific CPUs, for non-generic code which may be
> bundled together in a single kernel build.
> 
> For (1), We can sensibly try to define a generic macro.  If building
> for ARMv6 and ARMv7 CPUs in the same kernel, then we have to use the
> lowest-common-denominator definition, i.e., the MCR form.  For ARMv7,
> we can use WFI.

But that doesn't work if you build a combined v5/v6/v7 kernel, because
v5 supports neither form, right? I think to do that, it needs the
same kind of abstraction that we have for a number of other things
like cache management in arch/arm/mm/.

> For (2), I think the best approach is to use the actual "wfi"
> instruction and build the affected files with the appropriate -march=
> flag (omap already does that) - since those CPU-specific files should
> by definition never be run if running on another CPU.  We only support
> new enough tools these days that this should be supported; so "wfi"
> should be preferable to ".long 0xdeadbeef" - otherwise we need lots of
> #ifdef CONFIG_THUMB2_KERNEL, or a macro.  If we have a macro, it would
> be better for that to be generically implemented somewhere, becasue
> the requirements are the same for every BSP supporting v7.

Makes sense.

> I don't like the practice of pre-assembling bits of code with .long,
> in order to allow a file to be built with wrong -march= flags, and I
> would favour migrating away from this where possible ... but I accept
> it's a pragmatic solution to a problem for which gcc/binutils provide
> no good alternative.

Yes. Moreover, new instructions may always have to be that way for
a while, before they can be moved over to the proper inline
assembly.

> So, for v6K we should either always use MCR for wfi(), or we need to
> define wfi() using ALT_SMP(wfi) ALT_UP(mcr).  But whether that's a
> common enough case to care about, I can't say.
> 
> 
> Any thoughts on all that?

I think that having all instances of wfi in per-CPU source files is
good enough, because it's not performance critical, and this method
is well-supported already.

	Arnd

  parent reply	other threads:[~2011-02-08 15:15 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-08 11:01 [PATCH v2] ARM: Define wfi() macro for v6 processors Dave Martin
2011-02-08 11:01 ` Dave Martin
2011-02-08 11:08 ` Russell King - ARM Linux
2011-02-08 11:08   ` Russell King - ARM Linux
2011-02-08 11:16   ` Dave Martin
2011-02-08 11:16     ` Dave Martin
2011-02-08 12:11   ` Arnd Bergmann
2011-02-08 12:11     ` Arnd Bergmann
2011-02-08 12:13     ` Russell King - ARM Linux
2011-02-08 12:13       ` Russell King - ARM Linux
2011-02-08 12:53       ` Arnd Bergmann
2011-02-08 12:53         ` Arnd Bergmann
2011-02-08 14:45         ` Dave Martin
2011-02-08 14:45           ` Dave Martin
2011-02-08 14:54           ` Santosh Shilimkar
2011-02-08 14:54             ` Santosh Shilimkar
2011-02-08 15:09             ` Dave Martin
2011-02-08 15:09               ` Dave Martin
2011-02-08 15:17               ` Arnd Bergmann
2011-02-08 15:17                 ` Arnd Bergmann
2011-02-08 16:32                 ` Russell King - ARM Linux
2011-02-08 16:32                   ` Russell King - ARM Linux
2011-02-08 16:58                   ` Arnd Bergmann
2011-02-08 16:58                     ` Arnd Bergmann
2011-02-08 17:15                     ` Dave Martin
2011-02-08 17:15                       ` Dave Martin
2011-02-08 15:15           ` Arnd Bergmann [this message]
2011-02-08 15:15             ` Arnd Bergmann
2011-02-08 15:30             ` Dave Martin
2011-02-08 15:30               ` Dave Martin
2011-02-08 15:42               ` Arnd Bergmann
2011-02-08 15:42                 ` Arnd Bergmann
2011-02-08 16:21                 ` Dave Martin
2011-02-08 16:21                   ` Dave Martin
2011-02-09 10:07                   ` Arnd Bergmann
2011-02-09 10:07                     ` Arnd Bergmann
2011-02-08 16:25             ` Russell King - ARM Linux
2011-02-08 16:25               ` Russell King - ARM Linux
2011-02-08 16:31               ` Dave Martin
2011-02-08 16:31                 ` Dave Martin
2011-02-08 16:47               ` Arnd Bergmann
2011-02-08 16:47                 ` Arnd Bergmann
2011-02-08 16:55                 ` Russell King - ARM Linux
2011-02-08 16:55                   ` Russell King - ARM Linux
2011-02-08 17:00                   ` Dave Martin
2011-02-08 17:00                     ` Dave Martin
2011-02-08 16:20           ` Russell King - ARM Linux
2011-02-08 16:20             ` Russell King - ARM Linux
2011-02-08 16:28             ` Dave Martin
2011-02-08 16:28               ` Dave Martin
2011-02-08 12:22     ` Dave Martin
2011-02-08 12:22       ` Dave Martin
2011-02-08 12:31       ` Santosh Shilimkar
2011-02-08 12:31         ` Santosh Shilimkar

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=201102081615.15713.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=dave.martin@linaro.org \
    --cc=j-pihet@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=nicolas.pitre@linaro.org \
    --cc=santosh.shilimkar@ti.com \
    --cc=tony@atomide.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: 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.