Commit f5887fe5 authored by Tony Lindgren's avatar Tony Lindgren

ARM: OMAP2+: Add custom abort handler for t410

Similar to commit fdf4850c ("ARM: BCM5301X: workaround suppress fault"),
let's add custom handling for the aborts on t410 that prevent booting:

Unhandled fault: imprecise external abort (0xc06) at 0xee091fb0
pgd = ee4bc000
[ee091fb0] *pgd=ae00041e(bad)
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000007

Cc: Matthijs van Duin <matthijsvanduin@gmail.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 285f3690
...@@ -24,6 +24,9 @@ ...@@ -24,6 +24,9 @@
#include <linux/platform_data/iommu-omap.h> #include <linux/platform_data/iommu-omap.h>
#include <linux/platform_data/wkup_m3.h> #include <linux/platform_data/wkup_m3.h>
#include <asm/siginfo.h>
#include <asm/signal.h>
#include "common.h" #include "common.h"
#include "common-board-devices.h" #include "common-board-devices.h"
#include "dss-common.h" #include "dss-common.h"
...@@ -382,6 +385,29 @@ static void __init omap3_pandora_legacy_init(void) ...@@ -382,6 +385,29 @@ static void __init omap3_pandora_legacy_init(void)
} }
#endif /* CONFIG_ARCH_OMAP3 */ #endif /* CONFIG_ARCH_OMAP3 */
#ifdef CONFIG_SOC_TI81XX
static int fault_fixed_up;
static int t410_abort_handler(unsigned long addr, unsigned int fsr,
struct pt_regs *regs)
{
if ((fsr == 0x406 || fsr == 0xc06) && !fault_fixed_up) {
pr_warn("External imprecise Data abort at addr=%#lx, fsr=%#x ignored.\n",
addr, fsr);
fault_fixed_up = 1;
return 0;
}
return 1;
}
static void __init t410_abort_init(void)
{
hook_fault_code(16 + 6, t410_abort_handler, SIGBUS, BUS_OBJERR,
"imprecise external abort");
}
#endif
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
static struct iommu_platform_data omap4_iommu_pdata = { static struct iommu_platform_data omap4_iommu_pdata = {
.reset_name = "mmu_cache", .reset_name = "mmu_cache",
...@@ -510,6 +536,9 @@ static struct pdata_init pdata_quirks[] __initdata = { ...@@ -510,6 +536,9 @@ static struct pdata_init pdata_quirks[] __initdata = {
{ "openpandora,omap3-pandora-600mhz", omap3_pandora_legacy_init, }, { "openpandora,omap3-pandora-600mhz", omap3_pandora_legacy_init, },
{ "openpandora,omap3-pandora-1ghz", omap3_pandora_legacy_init, }, { "openpandora,omap3-pandora-1ghz", omap3_pandora_legacy_init, },
#endif #endif
#ifdef CONFIG_SOC_TI81XX
{ "hp,t410", t410_abort_init, },
#endif
#ifdef CONFIG_SOC_OMAP5 #ifdef CONFIG_SOC_OMAP5
{ "ti,omap5-uevm", omap5_uevm_legacy_init, }, { "ti,omap5-uevm", omap5_uevm_legacy_init, },
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment