aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/bus/omap_l3_noc.c31
-rw-r--r--drivers/bus/omap_l3_noc.h11
2 files changed, 39 insertions, 3 deletions
diff --git a/drivers/bus/omap_l3_noc.c b/drivers/bus/omap_l3_noc.c
index 343f002a06f7..7743e86e88b1 100644
--- a/drivers/bus/omap_l3_noc.c
+++ b/drivers/bus/omap_l3_noc.c
@@ -75,10 +75,41 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3)
75 if (err_reg) { 75 if (err_reg) {
76 /* Identify the source from control status register */ 76 /* Identify the source from control status register */
77 err_src = __ffs(err_reg); 77 err_src = __ffs(err_reg);
78
79 /* We DONOT expect err_src to go out of bounds */
80 BUG_ON(err_src > MAX_CLKDM_TARGETS);
81
78 l3_targ_inst = &l3_targ[i][err_src]; 82 l3_targ_inst = &l3_targ[i][err_src];
79 target_name = l3_targ_inst->name; 83 target_name = l3_targ_inst->name;
80 l3_targ_base = base + l3_targ_inst->offset; 84 l3_targ_base = base + l3_targ_inst->offset;
81 85
86 /*
87 * If we do not know of a register offset to decode
88 * and clear, then mask.
89 */
90 if (target_name == L3_TARGET_NOT_SUPPORTED) {
91 u32 mask_val;
92 void __iomem *mask_reg;
93
94 /*
95 * Certain plaforms may have "undocumented"
96 * status pending on boot.. So dont generate
97 * a severe warning here.
98 */
99 dev_err(l3->dev,
100 "L3 %s error: target %d mod:%d %s\n",
101 inttype ? "debug" : "application",
102 err_src, i, "(unclearable)");
103
104 mask_reg = base + l3_flagmux[i] +
105 L3_FLAGMUX_MASK0 + (inttype << 3);
106 mask_val = readl_relaxed(mask_reg);
107 mask_val &= ~(1 << err_src);
108 writel_relaxed(mask_val, mask_reg);
109
110 break;
111 }
112
82 /* Read the stderrlog_main_source from clk domain */ 113 /* Read the stderrlog_main_source from clk domain */
83 l3_targ_stderr = l3_targ_base + L3_TARG_STDERRLOG_MAIN; 114 l3_targ_stderr = l3_targ_base + L3_TARG_STDERRLOG_MAIN;
84 l3_targ_slvofslsb = l3_targ_base + 115 l3_targ_slvofslsb = l3_targ_base +
diff --git a/drivers/bus/omap_l3_noc.h b/drivers/bus/omap_l3_noc.h
index ae2878464efa..66caeceaf123 100644
--- a/drivers/bus/omap_l3_noc.h
+++ b/drivers/bus/omap_l3_noc.h
@@ -30,6 +30,11 @@
30#define L3_TARG_STDERRLOG_SLVOFSLSB 0x5c 30#define L3_TARG_STDERRLOG_SLVOFSLSB 0x5c
31#define L3_TARG_STDERRLOG_MSTADDR 0x68 31#define L3_TARG_STDERRLOG_MSTADDR 0x68
32#define L3_FLAGMUX_REGERR0 0xc 32#define L3_FLAGMUX_REGERR0 0xc
33#define L3_FLAGMUX_MASK0 0x8
34
35#define L3_TARGET_NOT_SUPPORTED NULL
36
37#define MAX_CLKDM_TARGETS 31
33 38
34#define NUM_OF_L3_MASTERS (sizeof(l3_masters)/sizeof(l3_masters[0])) 39#define NUM_OF_L3_MASTERS (sizeof(l3_masters)/sizeof(l3_masters[0]))
35 40
@@ -61,7 +66,7 @@ static u32 l3_flagmux[L3_MODULES] = {
61 0X0200 66 0X0200
62}; 67};
63 68
64static struct l3_target_data l3_target_inst_data_clk1[] = { 69static struct l3_target_data l3_target_inst_data_clk1[MAX_CLKDM_TARGETS] = {
65 {0x100, "DMM1",}, 70 {0x100, "DMM1",},
66 {0x200, "DMM2",}, 71 {0x200, "DMM2",},
67 {0x300, "ABE",}, 72 {0x300, "ABE",},
@@ -71,7 +76,7 @@ static struct l3_target_data l3_target_inst_data_clk1[] = {
71 {0x900, "L4WAKEUP",}, 76 {0x900, "L4WAKEUP",},
72}; 77};
73 78
74static struct l3_target_data l3_target_inst_data_clk2[] = { 79static struct l3_target_data l3_target_inst_data_clk2[MAX_CLKDM_TARGETS] = {
75 {0x500, "CORTEXM3",}, 80 {0x500, "CORTEXM3",},
76 {0x300, "DSS",}, 81 {0x300, "DSS",},
77 {0x100, "GPMC",}, 82 {0x100, "GPMC",},
@@ -95,7 +100,7 @@ static struct l3_target_data l3_target_inst_data_clk2[] = {
95 {0x1700, "LLI",}, 100 {0x1700, "LLI",},
96}; 101};
97 102
98static struct l3_target_data l3_target_inst_data_clk3[] = { 103static struct l3_target_data l3_target_inst_data_clk3[MAX_CLKDM_TARGETS] = {
99 {0x0100, "EMUSS",}, 104 {0x0100, "EMUSS",},
100 {0x0300, "DEBUG SOURCE",}, 105 {0x0300, "DEBUG SOURCE",},
101 {0x0, "HOST CLK3",}, 106 {0x0, "HOST CLK3",},