All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tetsuyuki Kobayashi <koba@kmckk.co.jp>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3] BUGFIX: arm: data abort in get_bad_stack_swi
Date: Thu, 11 Apr 2013 18:47:43 +0900	[thread overview]
Message-ID: <516686BF.1020301@kmckk.co.jp> (raw)
In-Reply-To: <1365156772-31846-1-git-send-email-koba@kmckk.co.jp>

Hello Albert

How about this patch?

(04/05/2013 07:12 PM), Tetsuyuki Kobayashi wrote:
> When swi instruction is executed, it is expected to get message
> "software interrupt" in console and dump registers and reboot, as
> do_software_interrupt() in arch/arm/lib/interrupts.c.
> But, actually it causes data abort accessing wrong address in get_bad_stack_swi
> macro in arch/arm/cpu/v7/start.S.
> This patch fixes this problem.
> 
> The same mistake in arch/arm/cpu/{arm1136,arm1176,pxa}/start.S.
> 
> Signed-off-by: Tetsuyuki Kobayashi <koba@kmckk.co.jp>
> ---
> Changes for v2:
> - added arch/arm/cpu/{arm1136,arm1176,pxa}/start.S
> Changes for v3:
> - restore lr register in all 4 files.
>   Only arm/arm/cpu/armv7/start.S is tested on KZM-A9-GT board.
> 
>  arch/arm/cpu/arm1136/start.S |    3 ++-
>  arch/arm/cpu/arm1176/start.S |    4 +++-
>  arch/arm/cpu/armv7/start.S   |    3 ++-
>  arch/arm/cpu/pxa/start.S     |    3 ++-
>  4 files changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S
> index eba2324..bccfdbf 100644
> --- a/arch/arm/cpu/arm1136/start.S
> +++ b/arch/arm/cpu/arm1136/start.S
> @@ -392,8 +392,9 @@ cpu_init_crit:
>  	str	r0, [r13]			@ save R0's value.
>  	ldr	r0, IRQ_STACK_START_IN		@ get data regions start
>  	str	lr, [r0]			@ save caller lr in position 0 of saved stack
> -	mrs	r0, spsr			@ get the spsr
> +	mrs	lr, spsr			@ get the spsr
>  	str	lr, [r0, #4]			@ save spsr in position 1 of saved stack
> +	ldr	lr, [r0]			@ restore lr
>  	ldr	r0, [r13]			@ restore r0
>  	add	r13, r13, #4			@ pop stack entry
>  	.endm
> diff --git a/arch/arm/cpu/arm1176/start.S b/arch/arm/cpu/arm1176/start.S
> index 3c291fb..694f79d 100644
> --- a/arch/arm/cpu/arm1176/start.S
> +++ b/arch/arm/cpu/arm1176/start.S
> @@ -480,9 +480,11 @@ phy_last_jump:
>  	/* save caller lr in position 0 of saved stack */
>  	str	lr, [r0]
>  	/* get the spsr */
> -	mrs	r0, spsr
> +	mrs	lr, spsr
>  	/* save spsr in position 1 of saved stack */
>  	str	lr, [r0, #4]
> +	/* restore lr */
> +	ldr	lr, [r0]
>  	/* restore r0 */
>  	ldr	r0, [r13]
>  	/* pop stack entry */
> diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
> index 36a4c3c..e5e157b 100644
> --- a/arch/arm/cpu/armv7/start.S
> +++ b/arch/arm/cpu/armv7/start.S
> @@ -465,9 +465,10 @@ ENDPROC(cpu_init_crit)
>  						@ spots for abort stack
>  	str	lr, [r0]			@ save caller lr in position 0
>  						@ of saved stack
> -	mrs	r0, spsr			@ get the spsr
> +	mrs	lr, spsr			@ get the spsr
>  	str	lr, [r0, #4]			@ save spsr in position 1 of
>  						@ saved stack
> +	ldr	lr, [r0]			@ restore lr
>  	ldr	r0, [r13]			@ restore r0
>  	add	r13, r13, #4			@ pop stack entry
>  	.endm
> diff --git a/arch/arm/cpu/pxa/start.S b/arch/arm/cpu/pxa/start.S
> index 456a783..9c525e8 100644
> --- a/arch/arm/cpu/pxa/start.S
> +++ b/arch/arm/cpu/pxa/start.S
> @@ -387,8 +387,9 @@ cpu_init_crit:
>  	str	r0, [r13]			@ save R0's value.
>  	ldr	r0, IRQ_STACK_START_IN		@ get data regions start
>  	str	lr, [r0]			@ save caller lr in position 0 of saved stack
> -	mrs	r0, spsr			@ get the spsr
> +	mrs	lr, spsr			@ get the spsr
>  	str	lr, [r0, #4]			@ save spsr in position 1 of saved stack
> +	ldr	lr, [r0]			@ restore lr
>  	ldr	r0, [r13]			@ restore r0
>  	add	r13, r13, #4			@ pop stack entry
>  	.endm
> 

  reply	other threads:[~2013-04-11  9:47 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-04  4:52 [U-Boot] [PATCH] BUGFIX: arm: armv7: data abort in get_bad_stack_swi Tetsuyuki Kobayashi
2013-04-04  6:21 ` Albert ARIBAUD
2013-04-04  6:24   ` Albert ARIBAUD
2013-04-04 10:29     ` Tetsuyuki Kobayashi
2013-04-05  1:45 ` [U-Boot] [PATCH v2] BUGFIX: arm: " Tetsuyuki Kobayashi
2013-04-05  7:04   ` Albert ARIBAUD
2013-04-05 10:04     ` Tetsuyuki Kobayashi
2013-04-05 10:12   ` [U-Boot] [PATCH v3] " Tetsuyuki Kobayashi
2013-04-11  9:47     ` Tetsuyuki Kobayashi [this message]
2013-04-13 11:37     ` Albert ARIBAUD

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=516686BF.1020301@kmckk.co.jp \
    --to=koba@kmckk.co.jp \
    --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.