aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/omap_l3_noc.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2/omap_l3_noc.c')
-rw-r--r--arch/arm/mach-omap2/omap_l3_noc.c49
1 files changed, 22 insertions, 27 deletions
diff --git a/arch/arm/mach-omap2/omap_l3_noc.c b/arch/arm/mach-omap2/omap_l3_noc.c
index 9d152de..0d6aaae 100644
--- a/arch/arm/mach-omap2/omap_l3_noc.c
+++ b/arch/arm/mach-omap2/omap_l3_noc.c
@@ -28,30 +28,10 @@
#include <linux/slab.h>
#include "omap_l3_noc.h"
+#include "board-tuna.h"
#define NUM_OF_L3_MASTERS ARRAY_SIZE(l3_masters)
-static void l3_dump_targ_context(u32 baseaddr)
-{
- pr_err("COREREG : 0x%08x\n", readl(baseaddr + L3_COREREG));
- pr_err("VERSIONREG : 0x%08x\n", readl(baseaddr + L3_VERSIONREG));
- pr_err("MAINCTLREG : 0x%08x\n", readl(baseaddr + L3_MAINCTLREG));
- pr_err("NTTPADDR_0 : 0x%08x\n", readl(baseaddr + L3_NTTPADDR_0));
- pr_err("SVRTSTDLVL : 0x%08x\n", readl(baseaddr + L3_SVRTSTDLVL));
- pr_err("SVRTCUSTOMLVL: 0x%08x\n", readl(baseaddr + L3_SVRTCUSTOMLVL));
- pr_err("MAIN : 0x%08x\n", readl(baseaddr + L3_MAIN));
- pr_err("HDR : 0x%08x\n", readl(baseaddr + L3_HDR));
- pr_err("MSTADDR : 0x%08x\n", readl(baseaddr + L3_MSTADDR));
- pr_err("SLVADDR : 0x%08x\n", readl(baseaddr + L3_SLVADDR));
- pr_err("INFO : 0x%08x\n", readl(baseaddr + L3_INFO));
- pr_err("SLVOFSLSB : 0x%08x\n", readl(baseaddr + L3_SLVOFSLSB));
- pr_err("SLVOFSMSB : 0x%08x\n", readl(baseaddr + L3_SLVOFSMSB));
- pr_err("CUSTOMINFO_INFO : 0x%08x\n", readl(baseaddr + L3_CUSTOMINFO_INFO));
- pr_err("CUSTOMINFO_MSTADDR: 0x%08x\n", readl(baseaddr + L3_CUSTOMINFO_MSTADDR));
- pr_err("CUSTOMINFO_OPCODE : 0x%08x\n", readl(baseaddr + L3_CUSTOMINFO_OPCODE));
- pr_err("ADDRSPACESIZELOG : 0x%08x\n", readl(baseaddr + L3_ADDRSPACESIZELOG));
-}
-
/*
* Interrupt Handler for L3 error detection.
* 1) Identify the L3 clockdomain partition to which the error belongs to.
@@ -116,10 +96,23 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
slave_addr = std_err_main_addr +
L3_SLAVE_ADDRESS_OFFSET;
- WARN(true, "L3 standard error: SOURCE:%s at address 0x%x\n",
- source_name, readl(slave_addr));
-
- l3_dump_targ_context(base + regoffset);
+ pr_err("L3 standard error: SOURCE:%s at address 0x%x MSTADDR=0x%x hdr=0x%x\n",
+ source_name, readl(slave_addr),
+ readl(base + regoffset + L3_MSTADDR),
+ readl(base + regoffset + L3_HDR));
+ WARN_ONCE(true, "L3 standard error");
+
+ /* Disable ABE L3 Interrupt on LTE boards */
+ if ((readl(base + regoffset + L3_MSTADDR) == 0xc0) &&
+ (readl(base + regoffset + L3_SLVADDR) == 0x3) &&
+ (omap4_tuna_get_type() == TUNA_TYPE_TORO)) {
+ pr_err("** Disabling ABE L3 interrupt for now....\n");
+ writel(0x1, base + regoffset + L3_MAINCTLREG);
+ writel(0x0, base + regoffset + L3_SVRTSTDLVL);
+ writel(0x0, base + regoffset + L3_SVRTCUSTOMLVL);
+ writel(0x0, base + regoffset + L3_MAIN);
+ writel(0x1F, base + regoffset + L3_ADDRSPACESIZELOG);
+ }
/* clear the std error log*/
clear = std_err_main | CLEAR_STDERR_LOG;
@@ -131,8 +124,10 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
l3_targ_stderrlog_main_name[i][err_src];
regoffset = targ_reg_offset[i][err_src];
- WARN(true, "CUSTOM SRESP error with SOURCE:%s\n",
- source_name);
+ pr_err("L3 CUSTOM SRESP error with SOURCE:%s info=0x%x\n",
+ source_name,
+ readl(base + regoffset + L3_CUSTOMINFO_INFO));
+ WARN_ONCE(true, "L3 custom sresp error");
masterid = readl(base + regoffset +
L3_CUSTOMINFO_MSTADDR);