All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: Samuel Holland <samuel@sholland.org>
Cc: u-boot@lists.denx.de, Tom Rini <trini@konsulko.com>,
	Jagan Teki <jagan@amarulasolutions.com>
Subject: Re: [PATCH v2] ARM: Prevent the compiler from using NEON registers
Date: Thu, 26 Aug 2021 00:55:09 +0100	[thread overview]
Message-ID: <20210826005509.0e5a1e66@slackpad.fritz.box> (raw)
In-Reply-To: <20210822005402.18113-1-samuel@sholland.org>

On Sat, 21 Aug 2021 19:54:02 -0500
Samuel Holland <samuel@sholland.org> wrote:

Hi Samuel,

thanks for the update.

> For ARMv8-A, NEON is standard, so the compiler can use it even when no
> special target flags are provided.

That is not entirely true, NEON is architecturally an optional feature,
it's just so prevalent that GCC decided to include it in the default
"armv8-a" arch definition:
https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html -march=name

> For example, it can use stores from
> NEON registers to zero-initialize large structures. GCC 11 decides to
> do this inside the DRAM init code for the Allwinner H6.
> 
> However, GCC 11 has a bug where it generates misaligned NEON register
> stores even with -mstrict-align. Since the MMU is not enabled this early
> in SPL, the misaligned store causes an exception and breaks booting.

For the records: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101934
 
> Work around this issue by restricting the compiler to using GPRs only,
> not vector registers. This prevents any future surprises relating to
> NEON use as well.

While one could argue that this is papering over a compiler bug, we
actually have no guarantee that *every* ARMv8 target core we compile
for has NEON support. Cortex-A53 (and even A55) for instance allow to
not include NEON during the integration process, so any access to NEON
registers would crash there already.

> Signed-off-by: Samuel Holland <samuel@sholland.org>

Acked-by: Andre Przywara <andre.przywara@arm.com>

Cheers,
Andre

> ---
> 
> Changes in v2:
>  - Updated commit message to describe problem more precisely
> 
>  arch/arm/config.mk | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm/config.mk b/arch/arm/config.mk
> index 16c63e12667..964c6b026ec 100644
> --- a/arch/arm/config.mk
> +++ b/arch/arm/config.mk
> @@ -25,6 +25,7 @@ endif
>  
>  PLATFORM_RELFLAGS += -fno-common -ffixed-r9
>  PLATFORM_RELFLAGS += $(call cc-option, -msoft-float) \
> +		     $(call cc-option,-mgeneral-regs-only) \
>        $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
>  
>  # LLVM support


  reply	other threads:[~2021-08-25 23:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-22  0:54 [PATCH v2] ARM: Prevent the compiler from using NEON registers Samuel Holland
2021-08-25 23:55 ` Andre Przywara [this message]
2021-09-02 22:42 ` Tom Rini

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=20210826005509.0e5a1e66@slackpad.fritz.box \
    --to=andre.przywara@arm.com \
    --cc=jagan@amarulasolutions.com \
    --cc=samuel@sholland.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /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.