diff options
-rw-r--r-- | drivers/bus/omap_l3_noc.c | 9 | ||||
-rw-r--r-- | drivers/bus/omap_l3_noc.h | 4 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/bus/omap_l3_noc.c b/drivers/bus/omap_l3_noc.c index 0691e6d9c1e4..00e4fed4a39b 100644 --- a/drivers/bus/omap_l3_noc.c +++ b/drivers/bus/omap_l3_noc.c | |||
@@ -169,6 +169,9 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3) | |||
169 | err_reg = readl_relaxed(base + flag_mux->offset + | 169 | err_reg = readl_relaxed(base + flag_mux->offset + |
170 | L3_FLAGMUX_REGERR0 + (inttype << 3)); | 170 | L3_FLAGMUX_REGERR0 + (inttype << 3)); |
171 | 171 | ||
172 | err_reg &= ~(inttype ? flag_mux->mask_app_bits : | ||
173 | flag_mux->mask_dbg_bits); | ||
174 | |||
172 | /* Get the corresponding error and analyse */ | 175 | /* Get the corresponding error and analyse */ |
173 | if (err_reg) { | 176 | if (err_reg) { |
174 | /* Identify the source from control status register */ | 177 | /* Identify the source from control status register */ |
@@ -193,6 +196,12 @@ static irqreturn_t l3_interrupt_handler(int irq, void *_l3) | |||
193 | mask_val = readl_relaxed(mask_reg); | 196 | mask_val = readl_relaxed(mask_reg); |
194 | mask_val &= ~(1 << err_src); | 197 | mask_val &= ~(1 << err_src); |
195 | writel_relaxed(mask_val, mask_reg); | 198 | writel_relaxed(mask_val, mask_reg); |
199 | |||
200 | /* Mark these bits as to be ignored */ | ||
201 | if (inttype) | ||
202 | flag_mux->mask_app_bits |= 1 << err_src; | ||
203 | else | ||
204 | flag_mux->mask_dbg_bits |= 1 << err_src; | ||
196 | } | 205 | } |
197 | 206 | ||
198 | /* Error found so break the for loop */ | 207 | /* Error found so break the for loop */ |
diff --git a/drivers/bus/omap_l3_noc.h b/drivers/bus/omap_l3_noc.h index ea2f51c984f1..4e18307470f6 100644 --- a/drivers/bus/omap_l3_noc.h +++ b/drivers/bus/omap_l3_noc.h | |||
@@ -66,11 +66,15 @@ struct l3_target_data { | |||
66 | * target data. unsupported ones are marked with | 66 | * target data. unsupported ones are marked with |
67 | * L3_TARGET_NOT_SUPPORTED | 67 | * L3_TARGET_NOT_SUPPORTED |
68 | * @num_targ_data: number of entries in target data | 68 | * @num_targ_data: number of entries in target data |
69 | * @mask_app_bits: ignore these from raw application irq status | ||
70 | * @mask_dbg_bits: ignore these from raw debug irq status | ||
69 | */ | 71 | */ |
70 | struct l3_flagmux_data { | 72 | struct l3_flagmux_data { |
71 | u32 offset; | 73 | u32 offset; |
72 | struct l3_target_data *l3_targ; | 74 | struct l3_target_data *l3_targ; |
73 | u8 num_targ_data; | 75 | u8 num_targ_data; |
76 | u32 mask_app_bits; | ||
77 | u32 mask_dbg_bits; | ||
74 | }; | 78 | }; |
75 | 79 | ||
76 | 80 | ||