* [PATCH] ARM: kernel/sleep.S: fix Thumb2 compilation issues
@ 2011-03-19 3:00 Nicolas Pitre
2011-03-22 12:52 ` Dave Martin
2011-03-26 10:20 ` Russell King - ARM Linux
0 siblings, 2 replies; 4+ messages in thread
From: Nicolas Pitre @ 2011-03-19 3:00 UTC (permalink / raw)
To: linux-arm-kernel
Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
diff --git a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S
index bfad698..6398ead 100644
--- a/arch/arm/kernel/sleep.S
+++ b/arch/arm/kernel/sleep.S
@@ -119,11 +119,19 @@ ENTRY(cpu_resume)
#else
ldr r0, sleep_save_sp @ stack phys addr
#endif
- msr cpsr_c, #PSR_I_BIT | PSR_F_BIT | SVC_MODE @ set SVC, irqs off
+ setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1 @ set SVC, irqs off
#ifdef MULTI_CPU
- ldmia r0!, {r1, sp, lr, pc} @ load v:p, stack, return fn, resume fn
+ @ load v:p, stack, return fn, resume fn
+ ARM( ldmia r0!, {r1, sp, lr, pc} )
+THUMB( ldmia r0!, {r1, r2, r3, r4} )
+THUMB( mov sp, r2 )
+THUMB( mov lr, r3 )
+THUMB( bx r4 )
#else
- ldmia r0!, {r1, sp, lr} @ load v:p, stack, return fn
+ @ load v:p, stack, return fn
+ ARM( ldmia r0!, {r1, sp, lr} )
+THUMB( ldmia r0!, {r1, r2, lr} )
+THUMB( mov sp, r2 )
b cpu_do_resume
#endif
ENDPROC(cpu_resume)
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH] ARM: kernel/sleep.S: fix Thumb2 compilation issues
2011-03-19 3:00 [PATCH] ARM: kernel/sleep.S: fix Thumb2 compilation issues Nicolas Pitre
@ 2011-03-22 12:52 ` Dave Martin
2011-03-26 10:20 ` Russell King - ARM Linux
1 sibling, 0 replies; 4+ messages in thread
From: Dave Martin @ 2011-03-22 12:52 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Mar 18, 2011 at 11:00:02PM -0400, Nicolas Pitre wrote:
>
> Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
>
> diff --git a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S
> index bfad698..6398ead 100644
> --- a/arch/arm/kernel/sleep.S
> +++ b/arch/arm/kernel/sleep.S
> @@ -119,11 +119,19 @@ ENTRY(cpu_resume)
> #else
> ldr r0, sleep_save_sp @ stack phys addr
> #endif
> - msr cpsr_c, #PSR_I_BIT | PSR_F_BIT | SVC_MODE @ set SVC, irqs off
> + setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1 @ set SVC, irqs off
> #ifdef MULTI_CPU
> - ldmia r0!, {r1, sp, lr, pc} @ load v:p, stack, return fn, resume fn
> + @ load v:p, stack, return fn, resume fn
> + ARM( ldmia r0!, {r1, sp, lr, pc} )
> +THUMB( ldmia r0!, {r1, r2, r3, r4} )
> +THUMB( mov sp, r2 )
> +THUMB( mov lr, r3 )
> +THUMB( bx r4 )
> #else
> - ldmia r0!, {r1, sp, lr} @ load v:p, stack, return fn
> + @ load v:p, stack, return fn
> + ARM( ldmia r0!, {r1, sp, lr} )
> +THUMB( ldmia r0!, {r1, r2, lr} )
> +THUMB( mov sp, r2 )
> b cpu_do_resume
> #endif
> ENDPROC(cpu_resume)
As far as I can determine from the context, r1-r4 are not live at
this point, so the suggested change looks sound.
Reviewed-by: Dave Martin <dave.martin@linaro.org>
I haven't watched the generic suspend/resume discussion too
closely; how would I go about testing this?
Cheers
---Dave
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH] ARM: kernel/sleep.S: fix Thumb2 compilation issues
2011-03-19 3:00 [PATCH] ARM: kernel/sleep.S: fix Thumb2 compilation issues Nicolas Pitre
2011-03-22 12:52 ` Dave Martin
@ 2011-03-26 10:20 ` Russell King - ARM Linux
2011-03-26 15:41 ` Nicolas Pitre
1 sibling, 1 reply; 4+ messages in thread
From: Russell King - ARM Linux @ 2011-03-26 10:20 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Mar 18, 2011 at 11:00:02PM -0400, Nicolas Pitre wrote:
>
> Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
>
> diff --git a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S
> index bfad698..6398ead 100644
> --- a/arch/arm/kernel/sleep.S
> +++ b/arch/arm/kernel/sleep.S
> @@ -119,11 +119,19 @@ ENTRY(cpu_resume)
> #else
> ldr r0, sleep_save_sp @ stack phys addr
> #endif
> - msr cpsr_c, #PSR_I_BIT | PSR_F_BIT | SVC_MODE @ set SVC, irqs off
> + setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1 @ set SVC, irqs off
> #ifdef MULTI_CPU
> - ldmia r0!, {r1, sp, lr, pc} @ load v:p, stack, return fn, resume fn
> + @ load v:p, stack, return fn, resume fn
> + ARM( ldmia r0!, {r1, sp, lr, pc} )
> +THUMB( ldmia r0!, {r1, r2, r3, r4} )
> +THUMB( mov sp, r2 )
> +THUMB( mov lr, r3 )
> +THUMB( bx r4 )
> #else
> - ldmia r0!, {r1, sp, lr} @ load v:p, stack, return fn
> + @ load v:p, stack, return fn
> + ARM( ldmia r0!, {r1, sp, lr} )
> +THUMB( ldmia r0!, {r1, r2, lr} )
> +THUMB( mov sp, r2 )
> b cpu_do_resume
> #endif
> ENDPROC(cpu_resume)
Do we know whether boot loaders support calling the resume path in Thumb
mode, and is the necessary setup in place for telling boot loaders that
they are to call the resume path in Thumb mode?
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH] ARM: kernel/sleep.S: fix Thumb2 compilation issues
2011-03-26 10:20 ` Russell King - ARM Linux
@ 2011-03-26 15:41 ` Nicolas Pitre
0 siblings, 0 replies; 4+ messages in thread
From: Nicolas Pitre @ 2011-03-26 15:41 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, 26 Mar 2011, Russell King - ARM Linux wrote:
> On Fri, Mar 18, 2011 at 11:00:02PM -0400, Nicolas Pitre wrote:
> >
> > Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
> >
> > diff --git a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S
> > index bfad698..6398ead 100644
> > --- a/arch/arm/kernel/sleep.S
> > +++ b/arch/arm/kernel/sleep.S
> > @@ -119,11 +119,19 @@ ENTRY(cpu_resume)
> > #else
> > ldr r0, sleep_save_sp @ stack phys addr
> > #endif
> > - msr cpsr_c, #PSR_I_BIT | PSR_F_BIT | SVC_MODE @ set SVC, irqs off
> > + setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1 @ set SVC, irqs off
> > #ifdef MULTI_CPU
> > - ldmia r0!, {r1, sp, lr, pc} @ load v:p, stack, return fn, resume fn
> > + @ load v:p, stack, return fn, resume fn
> > + ARM( ldmia r0!, {r1, sp, lr, pc} )
> > +THUMB( ldmia r0!, {r1, r2, r3, r4} )
> > +THUMB( mov sp, r2 )
> > +THUMB( mov lr, r3 )
> > +THUMB( bx r4 )
> > #else
> > - ldmia r0!, {r1, sp, lr} @ load v:p, stack, return fn
> > + @ load v:p, stack, return fn
> > + ARM( ldmia r0!, {r1, sp, lr} )
> > +THUMB( ldmia r0!, {r1, r2, lr} )
> > +THUMB( mov sp, r2 )
> > b cpu_do_resume
> > #endif
> > ENDPROC(cpu_resume)
>
> Do we know whether boot loaders support calling the resume path in Thumb
> mode, and is the necessary setup in place for telling boot loaders that
> they are to call the resume path in Thumb mode?
Hard to tell for sure without testing. But in theory, if the bootloader
is passed the value of the cpu_resume symbol, even after going through
virt_to_phys(), then bit 0 should be set indicating Thumb mode and
therefore it ought to work correctly by simply loading that value into
the pc (not true for ARMv6T2 but we don't support any of those).
Nicolas
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-03-26 15:41 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-19 3:00 [PATCH] ARM: kernel/sleep.S: fix Thumb2 compilation issues Nicolas Pitre
2011-03-22 12:52 ` Dave Martin
2011-03-26 10:20 ` Russell King - ARM Linux
2011-03-26 15:41 ` Nicolas Pitre
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).