From: Marek Vasut <marek.vasut@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] arm: Tegra2: Fix ELDK42 gcc failure with inline asm stack pointer load
Date: Fri, 17 Feb 2012 09:56:47 +0100 [thread overview]
Message-ID: <201202170956.47421.marek.vasut@gmail.com> (raw)
In-Reply-To: <1329421534-12963-1-git-send-email-twarren@nvidia.com>
> The 4.2.2 gcc in the ELDK42 release doesn't like the direct SP
> load using a constant in tegra2_start. Break it up into 4 loads
> using mov & orr.
>
> Tested on my Seaboard T20-A03, U-Boot loads and runs OK. Also
> compiled all tegra2 builds with both gcc 4.2.2 and 4.4.1 OK.
>
> Signed-off-by: Tom Warren <twarren@nvidia.com>
> ---
> arch/arm/cpu/armv7/tegra2/ap20.c | 25 ++++++++++++++++++++-----
> 1 files changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/tegra2/ap20.c
> b/arch/arm/cpu/armv7/tegra2/ap20.c index 4c44bb3..d2bc0d5 100644
> --- a/arch/arm/cpu/armv7/tegra2/ap20.c
> +++ b/arch/arm/cpu/armv7/tegra2/ap20.c
> @@ -298,11 +298,26 @@ void tegra2_start(void)
> writel(0xC0, &pmt->pmt_cfg_ctl);
>
> /*
> - * If we are ARM7 - give it a different stack. We are about to
> - * start up the A9 which will want to use this one.
> - */
> - asm volatile("ldr sp, =%c0\n"
> - : : "i"(AVP_EARLY_BOOT_STACK_LIMIT));
> + * If we are ARM7 - give it a different stack. We are about to
> + * start up the A9 which will want to use this one.
> + */
> + /*
> + * Note that the 'ldr sp,CONSTANT' version, below, doesn't
> + * work on gcc 4.2.2 (ELDK42), but does on gcc 4.4.1 and above.
> + * The work-around is to use the (ugly) 4-pass mov/orr below.
> + *
> + * asm volatile("ldr sp, =%c0\n" : :
> + * "i"(AVP_EARLY_BOOT_STACK_LIMIT));
> + */
> +
> + asm volatile("mov sp, %0"
> + : : "i"(AVP_EARLY_BOOT_STACK_LIMIT & 0xFF));
> + asm volatile("orr sp, %0"
> + : : "i"(AVP_EARLY_BOOT_STACK_LIMIT & 0xFF00));
> + asm volatile("orr sp, %0"
> + : : "i"(AVP_EARLY_BOOT_STACK_LIMIT & 0xFF0000));
> + asm volatile("orr sp, %0"
> + : : "i"(AVP_EARLY_BOOT_STACK_LIMIT & 0xFF000000));
>
> start_cpu((u32)_start);
> halt_avp();
I think you said you'll send an updated patch.
next prev parent reply other threads:[~2012-02-17 8:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-16 19:45 [U-Boot] [PATCH] arm: Tegra2: Fix ELDK42 gcc failure with inline asm stack pointer load Tom Warren
2012-02-16 19:51 ` Tom Warren
2012-02-16 21:30 ` Simon Glass
2012-02-16 22:47 ` Marek Vasut
2012-02-16 23:04 ` Tom Warren
2012-02-17 8:56 ` Marek Vasut [this message]
2012-02-17 16:08 ` Tom 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=201202170956.47421.marek.vasut@gmail.com \
--to=marek.vasut@gmail.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.