Skip to content

Commit

Permalink
ARM: 8389/1: Add cpu_resume_arm() for firmwares that resume in ARM state
Browse files Browse the repository at this point in the history
Some platforms always enter the kernel in the ARM state even if
the kernel is compiled for THUMB2. Add a small wrapper on top of
cpu_resume() that switches into THUMB2 state.

This provides the functionality to fix a problem reported by Kevin
Hilman on next-20150601 where the ifc6410 fails to boot a THUMB2
kernel because the platform's firmware always enters the kernel in
ARM mode from deep idle states.

(rmk: tweaked to work without BSYM->badr changes.)

Reported-by: Kevin Hilman <[email protected]>
Cc: Ard Biesheuvel <[email protected]>
Cc: Lina Iyer <[email protected]>
Signed-off-by: Stephen Boyd <[email protected]>
Signed-off-by: Russell King <[email protected]>
  • Loading branch information
bebarino authored and Russell King committed Jun 12, 2015
1 parent 02b4e27 commit 32e55a7
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/arm/include/asm/suspend.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ struct sleep_save_sp {
};

extern void cpu_resume(void);
extern void cpu_resume_arm(void);
extern int cpu_suspend(unsigned long, int (*)(unsigned long));

#endif
7 changes: 7 additions & 0 deletions arch/arm/kernel/sleep.S
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ ENDPROC(cpu_resume_after_mmu)

.text
.align
.arm
ENTRY(cpu_resume_arm)
THUMB( adr r9, BSYM(1f) ) @ Kernel is entered in ARM.
THUMB( bx r9 ) @ If this is a Thumb-2 kernel,
THUMB( .thumb ) @ switch to Thumb now.
THUMB(1: )
ENTRY(cpu_resume)
ARM_BE8(setend be) @ ensure we are in BE mode
#ifdef CONFIG_ARM_VIRT_EXT
Expand Down Expand Up @@ -149,6 +155,7 @@ THUMB( ldmia r0!, {r1, r2, r3} )
THUMB( mov sp, r2 )
THUMB( bx r3 )
ENDPROC(cpu_resume)
ENDPROC(cpu_resume_arm)

.align 2
_sleep_save_sp:
Expand Down

0 comments on commit 32e55a7

Please sign in to comment.