aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/mm
diff options
context:
space:
mode:
authorBob Liu <lliubbo@gmail.com>2012-05-16 06:18:27 -0400
committerBob Liu <lliubbo@gmail.com>2012-05-21 02:54:23 -0400
commitb2cfc653a513f347114c85ed8e75456ea0159c18 (patch)
tree4c87b8c5ef7755882bf9034a6300199956e2d999 /arch/blackfin/mm
parentc55c89e939f2a0a83d5c61462be554d5d2408178 (diff)
blackfin: bf60x: add l2 ecc irq handler
bf60x support l2 hardware ecc error check, add panic when double bits ecc error happened. Signed-off-by: Bob Liu <lliubbo@gmail.com>
Diffstat (limited to 'arch/blackfin/mm')
-rw-r--r--arch/blackfin/mm/sram-alloc.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/blackfin/mm/sram-alloc.c b/arch/blackfin/mm/sram-alloc.c
index 29d98faa1efd..342e378da1ec 100644
--- a/arch/blackfin/mm/sram-alloc.c
+++ b/arch/blackfin/mm/sram-alloc.c
@@ -186,9 +186,45 @@ static void __init l1_inst_sram_init(void)
186#endif 186#endif
187} 187}
188 188
189#ifdef __ADSPBF60x__
190static irqreturn_t l2_ecc_err(int irq, void *dev_id)
191{
192 int status;
193
194 printk(KERN_ERR "L2 ecc error happend\n");
195 status = bfin_read32(L2CTL0_STAT);
196 if (status & 0x1)
197 printk(KERN_ERR "Core channel error type:0x%x, addr:0x%x\n",
198 bfin_read32(L2CTL0_ET0), bfin_read32(L2CTL0_EADDR0));
199 if (status & 0x2)
200 printk(KERN_ERR "System channel error type:0x%x, addr:0x%x\n",
201 bfin_read32(L2CTL0_ET1), bfin_read32(L2CTL0_EADDR1));
202
203 status = status >> 8;
204 if (status)
205 printk(KERN_ERR "L2 Bank%d error, addr:0x%x\n",
206 status, bfin_read32(L2CTL0_ERRADDR0 + status));
207
208 panic("L2 Ecc error");
209 return IRQ_HANDLED;
210}
211#endif
212
189static void __init l2_sram_init(void) 213static void __init l2_sram_init(void)
190{ 214{
191#if L2_LENGTH != 0 215#if L2_LENGTH != 0
216
217#ifdef __ADSPBF60x__
218 int ret;
219
220 ret = request_irq(IRQ_L2CTL0_ECC_ERR, l2_ecc_err, 0, "l2-ecc-err",
221 NULL);
222 if (unlikely(ret < 0)) {
223 printk(KERN_INFO "Fail to request l2 ecc error interrupt");
224 return;
225 }
226#endif
227
192 free_l2_sram_head.next = 228 free_l2_sram_head.next =
193 kmem_cache_alloc(sram_piece_cache, GFP_KERNEL); 229 kmem_cache_alloc(sram_piece_cache, GFP_KERNEL);
194 if (!free_l2_sram_head.next) { 230 if (!free_l2_sram_head.next) {