From: Tony Lindgren <tony@atomide.com>
To: linux-omap@vger.kernel.org
Cc: Kevin Hilman <khilman@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Dave Martin <dave.martin@linaro.org>,
linux-arm-kernel@lists.infradead.org
Subject: [RFC] Fix omap3 booting with thumb2 compiled kernel
Date: Wed, 27 May 2015 14:55:46 -0700 [thread overview]
Message-ID: <20150527215545.GA30984@atomide.com> (raw)
The power management related assembly needs to interact with
ARM mode bootrom code, so we need to keep most of the related
assembly in ARM mode.
Currently we are entering into and ARM mode assembly function
from thumb2 mode, so we need to make sure we switch to ARM
mode. And we need to do that again after the cache flush.
---
Kevin told me about this earlier today.. Anybody got better ideas
for a fix here?
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -151,6 +151,17 @@ ENTRY(save_secure_ram_context_sz)
*/
.align 3
ENTRY(omap34xx_cpu_suspend)
+
+ /*
+ * This ARM assembly can also be called from thumb2 kernel code.
+ * Make sure we switch to ARM mode first.
+ */
+ THUMB( .thumb )
+ THUMB( .align )
+ THUMB( bx pc )
+ THUMB( nop )
+ .arm
+
stmfd sp!, {r4 - r11, lr} @ save registers on stack
/*
@@ -187,6 +198,18 @@ save_context_wfi:
bx r1
/*
+ * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
+ * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
+ * This sequence switches back to ARM. Note that .align may insert a
+ * nop: bx pc needs to be word-aligned in order to work.
+ */
+ THUMB( .thumb )
+ THUMB( .align )
+ THUMB( bx pc )
+ THUMB( nop )
+ .arm
+
+ /*
* Clear the SCTLR.C bit to prevent further data cache
* allocation. Clearing SCTLR.C would make all the data accesses
* strongly ordered and would not hit the cache.
@@ -203,12 +226,8 @@ save_context_wfi:
*/
ldr r1, kernel_flush
blx r1
- /*
- * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
- * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
- * This sequence switches back to ARM. Note that .align may insert a
- * nop: bx pc needs to be word-aligned in order to work.
- */
+
+ /* See the comments above about v7_flush_dcache_all */
THUMB( .thumb )
THUMB( .align )
THUMB( bx pc )
WARNING: multiple messages have this Message-ID (diff)
From: tony@atomide.com (Tony Lindgren)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC] Fix omap3 booting with thumb2 compiled kernel
Date: Wed, 27 May 2015 14:55:46 -0700 [thread overview]
Message-ID: <20150527215545.GA30984@atomide.com> (raw)
The power management related assembly needs to interact with
ARM mode bootrom code, so we need to keep most of the related
assembly in ARM mode.
Currently we are entering into and ARM mode assembly function
from thumb2 mode, so we need to make sure we switch to ARM
mode. And we need to do that again after the cache flush.
---
Kevin told me about this earlier today.. Anybody got better ideas
for a fix here?
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -151,6 +151,17 @@ ENTRY(save_secure_ram_context_sz)
*/
.align 3
ENTRY(omap34xx_cpu_suspend)
+
+ /*
+ * This ARM assembly can also be called from thumb2 kernel code.
+ * Make sure we switch to ARM mode first.
+ */
+ THUMB( .thumb )
+ THUMB( .align )
+ THUMB( bx pc )
+ THUMB( nop )
+ .arm
+
stmfd sp!, {r4 - r11, lr} @ save registers on stack
/*
@@ -187,6 +198,18 @@ save_context_wfi:
bx r1
/*
+ * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
+ * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
+ * This sequence switches back to ARM. Note that .align may insert a
+ * nop: bx pc needs to be word-aligned in order to work.
+ */
+ THUMB( .thumb )
+ THUMB( .align )
+ THUMB( bx pc )
+ THUMB( nop )
+ .arm
+
+ /*
* Clear the SCTLR.C bit to prevent further data cache
* allocation. Clearing SCTLR.C would make all the data accesses
* strongly ordered and would not hit the cache.
@@ -203,12 +226,8 @@ save_context_wfi:
*/
ldr r1, kernel_flush
blx r1
- /*
- * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
- * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
- * This sequence switches back to ARM. Note that .align may insert a
- * nop: bx pc needs to be word-aligned in order to work.
- */
+
+ /* See the comments above about v7_flush_dcache_all */
THUMB( .thumb )
THUMB( .align )
THUMB( bx pc )
next reply other threads:[~2015-05-27 21:55 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-27 21:55 Tony Lindgren [this message]
2015-05-27 21:55 ` [RFC] Fix omap3 booting with thumb2 compiled kernel Tony Lindgren
2015-05-27 22:19 ` Kevin Hilman
2015-05-27 22:19 ` Kevin Hilman
2015-05-27 22:55 ` Tony Lindgren
2015-05-27 22:55 ` Tony Lindgren
2015-05-27 23:19 ` Kevin Hilman
2015-05-27 23:19 ` Kevin Hilman
2015-05-28 11:43 ` Grazvydas Ignotas
2015-05-28 11:43 ` Grazvydas Ignotas
2015-05-28 14:21 ` Tony Lindgren
2015-05-28 14:21 ` Tony Lindgren
2015-05-28 16:17 ` Dave Martin
2015-05-28 16:17 ` Dave Martin
2015-05-28 16:36 ` Tony Lindgren
2015-05-28 16:36 ` Tony Lindgren
2015-05-28 17:31 ` Dave Martin
2015-05-28 17:31 ` Dave Martin
2015-05-28 18:55 ` Arnd Bergmann
2015-05-28 18:55 ` Arnd Bergmann
2015-05-28 20:41 ` Tony Lindgren
2015-05-28 20:41 ` Tony Lindgren
2015-05-29 11:06 ` Dave P Martin
2015-05-29 11:06 ` Dave P Martin
2015-05-29 16:28 ` Tony Lindgren
2015-05-29 16:28 ` Tony Lindgren
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=20150527215545.GA30984@atomide.com \
--to=tony@atomide.com \
--cc=arnd@arndb.de \
--cc=dave.martin@linaro.org \
--cc=khilman@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
/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.