diff options
author | Sebastian Reichel <sre@debian.org> | 2014-02-17 16:30:58 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2014-02-21 18:07:36 -0500 |
commit | deff82e688a278eb4b822fd616c05fc62907bb71 (patch) | |
tree | 2acd24e184006652a219372504046e1a6344ab94 /arch/arm | |
parent | 915a15593b4d9a06ec13faede49ce349650cc19d (diff) |
ARM: OMAP2+: Add support for thumb mode on DT booted N900
Without enabling the workaround for ARM errata 430973 thumb
compiled userland crashes randomly on the Nokia N900.
Signed-off-by: Sebastian Reichel <sre@debian.org>
Reviewed-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-omap2/pdata-quirks.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c index 3d5b24dcd9a4..0cc710d0da90 100644 --- a/arch/arm/mach-omap2/pdata-quirks.c +++ b/arch/arm/mach-omap2/pdata-quirks.c | |||
@@ -22,6 +22,8 @@ | |||
22 | #include "common-board-devices.h" | 22 | #include "common-board-devices.h" |
23 | #include "dss-common.h" | 23 | #include "dss-common.h" |
24 | #include "control.h" | 24 | #include "control.h" |
25 | #include "omap-secure.h" | ||
26 | #include "soc.h" | ||
25 | 27 | ||
26 | struct pdata_init { | 28 | struct pdata_init { |
27 | const char *compatible; | 29 | const char *compatible; |
@@ -169,6 +171,22 @@ static void __init am3517_evm_legacy_init(void) | |||
169 | omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET); | 171 | omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET); |
170 | omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */ | 172 | omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */ |
171 | } | 173 | } |
174 | |||
175 | static void __init nokia_n900_legacy_init(void) | ||
176 | { | ||
177 | hsmmc2_internal_input_clk(); | ||
178 | |||
179 | if (omap_type() == OMAP2_DEVICE_TYPE_SEC) { | ||
180 | if (IS_ENABLED(CONFIG_ARM_ERRATA_430973)) { | ||
181 | pr_info("RX-51: Enabling ARM errata 430973 workaround\n"); | ||
182 | /* set IBE to 1 */ | ||
183 | rx51_secure_update_aux_cr(BIT(6), 0); | ||
184 | } else { | ||
185 | pr_warning("RX-51: Not enabling ARM errata 430973 workaround\n"); | ||
186 | pr_warning("Thumb binaries may crash randomly without this workaround\n"); | ||
187 | } | ||
188 | } | ||
189 | } | ||
172 | #endif /* CONFIG_ARCH_OMAP3 */ | 190 | #endif /* CONFIG_ARCH_OMAP3 */ |
173 | 191 | ||
174 | #ifdef CONFIG_ARCH_OMAP4 | 192 | #ifdef CONFIG_ARCH_OMAP4 |
@@ -259,7 +277,7 @@ struct of_dev_auxdata omap_auxdata_lookup[] __initdata = { | |||
259 | static struct pdata_init pdata_quirks[] __initdata = { | 277 | static struct pdata_init pdata_quirks[] __initdata = { |
260 | #ifdef CONFIG_ARCH_OMAP3 | 278 | #ifdef CONFIG_ARCH_OMAP3 |
261 | { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, }, | 279 | { "compulab,omap3-sbc-t3730", omap3_sbc_t3730_legacy_init, }, |
262 | { "nokia,omap3-n900", hsmmc2_internal_input_clk, }, | 280 | { "nokia,omap3-n900", nokia_n900_legacy_init, }, |
263 | { "nokia,omap3-n9", hsmmc2_internal_input_clk, }, | 281 | { "nokia,omap3-n9", hsmmc2_internal_input_clk, }, |
264 | { "nokia,omap3-n950", hsmmc2_internal_input_clk, }, | 282 | { "nokia,omap3-n950", hsmmc2_internal_input_clk, }, |
265 | { "isee,omap3-igep0020", omap3_igep0020_legacy_init, }, | 283 | { "isee,omap3-igep0020", omap3_igep0020_legacy_init, }, |