All of lore.kernel.org
 help / color / mirror / Atom feed
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.

  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.