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 | |
| 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>
| -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, }, |
