cw1200: drop useless LIST_HEAD
[linux-2.6-block.git] / drivers / edac / altera_edac.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *  Copyright (C) 2017-2018, Intel Corporation. All rights reserved
4  *  Copyright Altera Corporation (C) 2014-2016. All rights reserved.
5  *  Copyright 2011-2012 Calxeda, Inc.
6  */
7
8 #include <asm/cacheflush.h>
9 #include <linux/ctype.h>
10 #include <linux/delay.h>
11 #include <linux/edac.h>
12 #include <linux/genalloc.h>
13 #include <linux/interrupt.h>
14 #include <linux/irqchip/chained_irq.h>
15 #include <linux/kernel.h>
16 #include <linux/mfd/syscon.h>
17 #include <linux/notifier.h>
18 #include <linux/of_address.h>
19 #include <linux/of_irq.h>
20 #include <linux/of_platform.h>
21 #include <linux/platform_device.h>
22 #include <linux/regmap.h>
23 #include <linux/types.h>
24 #include <linux/uaccess.h>
25
26 #include "altera_edac.h"
27 #include "edac_module.h"
28
29 #define EDAC_MOD_STR            "altera_edac"
30 #define EDAC_DEVICE             "Altera"
31
32 static const struct altr_sdram_prv_data c5_data = {
33         .ecc_ctrl_offset    = CV_CTLCFG_OFST,
34         .ecc_ctl_en_mask    = CV_CTLCFG_ECC_AUTO_EN,
35         .ecc_stat_offset    = CV_DRAMSTS_OFST,
36         .ecc_stat_ce_mask   = CV_DRAMSTS_SBEERR,
37         .ecc_stat_ue_mask   = CV_DRAMSTS_DBEERR,
38         .ecc_saddr_offset   = CV_ERRADDR_OFST,
39         .ecc_daddr_offset   = CV_ERRADDR_OFST,
40         .ecc_cecnt_offset   = CV_SBECOUNT_OFST,
41         .ecc_uecnt_offset   = CV_DBECOUNT_OFST,
42         .ecc_irq_en_offset  = CV_DRAMINTR_OFST,
43         .ecc_irq_en_mask    = CV_DRAMINTR_INTREN,
44         .ecc_irq_clr_offset = CV_DRAMINTR_OFST,
45         .ecc_irq_clr_mask   = (CV_DRAMINTR_INTRCLR | CV_DRAMINTR_INTREN),
46         .ecc_cnt_rst_offset = CV_DRAMINTR_OFST,
47         .ecc_cnt_rst_mask   = CV_DRAMINTR_INTRCLR,
48         .ce_ue_trgr_offset  = CV_CTLCFG_OFST,
49         .ce_set_mask        = CV_CTLCFG_GEN_SB_ERR,
50         .ue_set_mask        = CV_CTLCFG_GEN_DB_ERR,
51 };
52
53 static const struct altr_sdram_prv_data a10_data = {
54         .ecc_ctrl_offset    = A10_ECCCTRL1_OFST,
55         .ecc_ctl_en_mask    = A10_ECCCTRL1_ECC_EN,
56         .ecc_stat_offset    = A10_INTSTAT_OFST,
57         .ecc_stat_ce_mask   = A10_INTSTAT_SBEERR,
58         .ecc_stat_ue_mask   = A10_INTSTAT_DBEERR,
59         .ecc_saddr_offset   = A10_SERRADDR_OFST,
60         .ecc_daddr_offset   = A10_DERRADDR_OFST,
61         .ecc_irq_en_offset  = A10_ERRINTEN_OFST,
62         .ecc_irq_en_mask    = A10_ECC_IRQ_EN_MASK,
63         .ecc_irq_clr_offset = A10_INTSTAT_OFST,
64         .ecc_irq_clr_mask   = (A10_INTSTAT_SBEERR | A10_INTSTAT_DBEERR),
65         .ecc_cnt_rst_offset = A10_ECCCTRL1_OFST,
66         .ecc_cnt_rst_mask   = A10_ECC_CNT_RESET_MASK,
67         .ce_ue_trgr_offset  = A10_DIAGINTTEST_OFST,
68         .ce_set_mask        = A10_DIAGINT_TSERRA_MASK,
69         .ue_set_mask        = A10_DIAGINT_TDERRA_MASK,
70 };
71
72 /*********************** EDAC Memory Controller Functions ****************/
73
74 /* The SDRAM controller uses the EDAC Memory Controller framework.       */
75
76 static irqreturn_t altr_sdram_mc_err_handler(int irq, void *dev_id)
77 {
78         struct mem_ctl_info *mci = dev_id;
79         struct altr_sdram_mc_data *drvdata = mci->pvt_info;
80         const struct altr_sdram_prv_data *priv = drvdata->data;
81         u32 status, err_count = 1, err_addr;
82
83         regmap_read(drvdata->mc_vbase, priv->ecc_stat_offset, &status);
84
85         if (status & priv->ecc_stat_ue_mask) {
86                 regmap_read(drvdata->mc_vbase, priv->ecc_daddr_offset,
87                             &err_addr);
88                 if (priv->ecc_uecnt_offset)
89                         regmap_read(drvdata->mc_vbase, priv->ecc_uecnt_offset,
90                                     &err_count);
91                 panic("\nEDAC: [%d Uncorrectable errors @ 0x%08X]\n",
92                       err_count, err_addr);
93         }
94         if (status & priv->ecc_stat_ce_mask) {
95                 regmap_read(drvdata->mc_vbase, priv->ecc_saddr_offset,
96                             &err_addr);
97                 if (priv->ecc_uecnt_offset)
98                         regmap_read(drvdata->mc_vbase,  priv->ecc_cecnt_offset,
99                                     &err_count);
100                 edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, err_count,
101                                      err_addr >> PAGE_SHIFT,
102                                      err_addr & ~PAGE_MASK, 0,
103                                      0, 0, -1, mci->ctl_name, "");
104                 /* Clear IRQ to resume */
105                 regmap_write(drvdata->mc_vbase, priv->ecc_irq_clr_offset,
106                              priv->ecc_irq_clr_mask);
107
108                 return IRQ_HANDLED;
109         }
110         return IRQ_NONE;
111 }
112
113 static ssize_t altr_sdr_mc_err_inject_write(struct file *file,
114                                             const char __user *data,
115                                             size_t count, loff_t *ppos)
116 {
117         struct mem_ctl_info *mci = file->private_data;
118         struct altr_sdram_mc_data *drvdata = mci->pvt_info;
119         const struct altr_sdram_prv_data *priv = drvdata->data;
120         u32 *ptemp;
121         dma_addr_t dma_handle;
122         u32 reg, read_reg;
123
124         ptemp = dma_alloc_coherent(mci->pdev, 16, &dma_handle, GFP_KERNEL);
125         if (!ptemp) {
126                 dma_free_coherent(mci->pdev, 16, ptemp, dma_handle);
127                 edac_printk(KERN_ERR, EDAC_MC,
128                             "Inject: Buffer Allocation error\n");
129                 return -ENOMEM;
130         }
131
132         regmap_read(drvdata->mc_vbase, priv->ce_ue_trgr_offset,
133                     &read_reg);
134         read_reg &= ~(priv->ce_set_mask | priv->ue_set_mask);
135
136         /* Error are injected by writing a word while the SBE or DBE
137          * bit in the CTLCFG register is set. Reading the word will
138          * trigger the SBE or DBE error and the corresponding IRQ.
139          */
140         if (count == 3) {
141                 edac_printk(KERN_ALERT, EDAC_MC,
142                             "Inject Double bit error\n");
143                 local_irq_disable();
144                 regmap_write(drvdata->mc_vbase, priv->ce_ue_trgr_offset,
145                              (read_reg | priv->ue_set_mask));
146                 local_irq_enable();
147         } else {
148                 edac_printk(KERN_ALERT, EDAC_MC,
149                             "Inject Single bit error\n");
150                 local_irq_disable();
151                 regmap_write(drvdata->mc_vbase, priv->ce_ue_trgr_offset,
152                              (read_reg | priv->ce_set_mask));
153                 local_irq_enable();
154         }
155
156         ptemp[0] = 0x5A5A5A5A;
157         ptemp[1] = 0xA5A5A5A5;
158
159         /* Clear the error injection bits */
160         regmap_write(drvdata->mc_vbase, priv->ce_ue_trgr_offset, read_reg);
161         /* Ensure it has been written out */
162         wmb();
163
164         /*
165          * To trigger the error, we need to read the data back
166          * (the data was written with errors above).
167          * The READ_ONCE macros and printk are used to prevent the
168          * the compiler optimizing these reads out.
169          */
170         reg = READ_ONCE(ptemp[0]);
171         read_reg = READ_ONCE(ptemp[1]);
172         /* Force Read */
173         rmb();
174
175         edac_printk(KERN_ALERT, EDAC_MC, "Read Data [0x%X, 0x%X]\n",
176                     reg, read_reg);
177
178         dma_free_coherent(mci->pdev, 16, ptemp, dma_handle);
179
180         return count;
181 }
182
183 static const struct file_operations altr_sdr_mc_debug_inject_fops = {
184         .open = simple_open,
185         .write = altr_sdr_mc_err_inject_write,
186         .llseek = generic_file_llseek,
187 };
188
189 static void altr_sdr_mc_create_debugfs_nodes(struct mem_ctl_info *mci)
190 {
191         if (!IS_ENABLED(CONFIG_EDAC_DEBUG))
192                 return;
193
194         if (!mci->debugfs)
195                 return;
196
197         edac_debugfs_create_file("altr_trigger", S_IWUSR, mci->debugfs, mci,
198                                  &altr_sdr_mc_debug_inject_fops);
199 }
200
201 /* Get total memory size from Open Firmware DTB */
202 static unsigned long get_total_mem(void)
203 {
204         struct device_node *np = NULL;
205         struct resource res;
206         int ret;
207         unsigned long total_mem = 0;
208
209         for_each_node_by_type(np, "memory") {
210                 ret = of_address_to_resource(np, 0, &res);
211                 if (ret)
212                         continue;
213
214                 total_mem += resource_size(&res);
215         }
216         edac_dbg(0, "total_mem 0x%lx\n", total_mem);
217         return total_mem;
218 }
219
220 static const struct of_device_id altr_sdram_ctrl_of_match[] = {
221         { .compatible = "altr,sdram-edac", .data = &c5_data},
222         { .compatible = "altr,sdram-edac-a10", .data = &a10_data},
223         { .compatible = "altr,sdram-edac-s10", .data = &a10_data},
224         {},
225 };
226 MODULE_DEVICE_TABLE(of, altr_sdram_ctrl_of_match);
227
228 static int a10_init(struct regmap *mc_vbase)
229 {
230         if (regmap_update_bits(mc_vbase, A10_INTMODE_OFST,
231                                A10_INTMODE_SB_INT, A10_INTMODE_SB_INT)) {
232                 edac_printk(KERN_ERR, EDAC_MC,
233                             "Error setting SB IRQ mode\n");
234                 return -ENODEV;
235         }
236
237         if (regmap_write(mc_vbase, A10_SERRCNTREG_OFST, 1)) {
238                 edac_printk(KERN_ERR, EDAC_MC,
239                             "Error setting trigger count\n");
240                 return -ENODEV;
241         }
242
243         return 0;
244 }
245
246 static int a10_unmask_irq(struct platform_device *pdev, u32 mask)
247 {
248         void __iomem  *sm_base;
249         int  ret = 0;
250
251         if (!request_mem_region(A10_SYMAN_INTMASK_CLR, sizeof(u32),
252                                 dev_name(&pdev->dev))) {
253                 edac_printk(KERN_ERR, EDAC_MC,
254                             "Unable to request mem region\n");
255                 return -EBUSY;
256         }
257
258         sm_base = ioremap(A10_SYMAN_INTMASK_CLR, sizeof(u32));
259         if (!sm_base) {
260                 edac_printk(KERN_ERR, EDAC_MC,
261                             "Unable to ioremap device\n");
262
263                 ret = -ENOMEM;
264                 goto release;
265         }
266
267         iowrite32(mask, sm_base);
268
269         iounmap(sm_base);
270
271 release:
272         release_mem_region(A10_SYMAN_INTMASK_CLR, sizeof(u32));
273
274         return ret;
275 }
276
277 static int socfpga_is_a10(void);
278 static int altr_sdram_probe(struct platform_device *pdev)
279 {
280         const struct of_device_id *id;
281         struct edac_mc_layer layers[2];
282         struct mem_ctl_info *mci;
283         struct altr_sdram_mc_data *drvdata;
284         const struct altr_sdram_prv_data *priv;
285         struct regmap *mc_vbase;
286         struct dimm_info *dimm;
287         u32 read_reg;
288         int irq, irq2, res = 0;
289         unsigned long mem_size, irqflags = 0;
290
291         id = of_match_device(altr_sdram_ctrl_of_match, &pdev->dev);
292         if (!id)
293                 return -ENODEV;
294
295         /* Grab the register range from the sdr controller in device tree */
296         mc_vbase = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
297                                                    "altr,sdr-syscon");
298         if (IS_ERR(mc_vbase)) {
299                 edac_printk(KERN_ERR, EDAC_MC,
300                             "regmap for altr,sdr-syscon lookup failed.\n");
301                 return -ENODEV;
302         }
303
304         /* Check specific dependencies for the module */
305         priv = of_match_node(altr_sdram_ctrl_of_match,
306                              pdev->dev.of_node)->data;
307
308         /* Validate the SDRAM controller has ECC enabled */
309         if (regmap_read(mc_vbase, priv->ecc_ctrl_offset, &read_reg) ||
310             ((read_reg & priv->ecc_ctl_en_mask) != priv->ecc_ctl_en_mask)) {
311                 edac_printk(KERN_ERR, EDAC_MC,
312                             "No ECC/ECC disabled [0x%08X]\n", read_reg);
313                 return -ENODEV;
314         }
315
316         /* Grab memory size from device tree. */
317         mem_size = get_total_mem();
318         if (!mem_size) {
319                 edac_printk(KERN_ERR, EDAC_MC, "Unable to calculate memory size\n");
320                 return -ENODEV;
321         }
322
323         /* Ensure the SDRAM Interrupt is disabled */
324         if (regmap_update_bits(mc_vbase, priv->ecc_irq_en_offset,
325                                priv->ecc_irq_en_mask, 0)) {
326                 edac_printk(KERN_ERR, EDAC_MC,
327                             "Error disabling SDRAM ECC IRQ\n");
328                 return -ENODEV;
329         }
330
331         /* Toggle to clear the SDRAM Error count */
332         if (regmap_update_bits(mc_vbase, priv->ecc_cnt_rst_offset,
333                                priv->ecc_cnt_rst_mask,
334                                priv->ecc_cnt_rst_mask)) {
335                 edac_printk(KERN_ERR, EDAC_MC,
336                             "Error clearing SDRAM ECC count\n");
337                 return -ENODEV;
338         }
339
340         if (regmap_update_bits(mc_vbase, priv->ecc_cnt_rst_offset,
341                                priv->ecc_cnt_rst_mask, 0)) {
342                 edac_printk(KERN_ERR, EDAC_MC,
343                             "Error clearing SDRAM ECC count\n");
344                 return -ENODEV;
345         }
346
347         irq = platform_get_irq(pdev, 0);
348         if (irq < 0) {
349                 edac_printk(KERN_ERR, EDAC_MC,
350                             "No irq %d in DT\n", irq);
351                 return -ENODEV;
352         }
353
354         /* Arria10 has a 2nd IRQ */
355         irq2 = platform_get_irq(pdev, 1);
356
357         layers[0].type = EDAC_MC_LAYER_CHIP_SELECT;
358         layers[0].size = 1;
359         layers[0].is_virt_csrow = true;
360         layers[1].type = EDAC_MC_LAYER_CHANNEL;
361         layers[1].size = 1;
362         layers[1].is_virt_csrow = false;
363         mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers,
364                             sizeof(struct altr_sdram_mc_data));
365         if (!mci)
366                 return -ENOMEM;
367
368         mci->pdev = &pdev->dev;
369         drvdata = mci->pvt_info;
370         drvdata->mc_vbase = mc_vbase;
371         drvdata->data = priv;
372         platform_set_drvdata(pdev, mci);
373
374         if (!devres_open_group(&pdev->dev, NULL, GFP_KERNEL)) {
375                 edac_printk(KERN_ERR, EDAC_MC,
376                             "Unable to get managed device resource\n");
377                 res = -ENOMEM;
378                 goto free;
379         }
380
381         mci->mtype_cap = MEM_FLAG_DDR3;
382         mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED;
383         mci->edac_cap = EDAC_FLAG_SECDED;
384         mci->mod_name = EDAC_MOD_STR;
385         mci->ctl_name = dev_name(&pdev->dev);
386         mci->scrub_mode = SCRUB_SW_SRC;
387         mci->dev_name = dev_name(&pdev->dev);
388
389         dimm = *mci->dimms;
390         dimm->nr_pages = ((mem_size - 1) >> PAGE_SHIFT) + 1;
391         dimm->grain = 8;
392         dimm->dtype = DEV_X8;
393         dimm->mtype = MEM_DDR3;
394         dimm->edac_mode = EDAC_SECDED;
395
396         res = edac_mc_add_mc(mci);
397         if (res < 0)
398                 goto err;
399
400         /* Only the Arria10 has separate IRQs */
401         if (socfpga_is_a10()) {
402                 /* Arria10 specific initialization */
403                 res = a10_init(mc_vbase);
404                 if (res < 0)
405                         goto err2;
406
407                 res = devm_request_irq(&pdev->dev, irq2,
408                                        altr_sdram_mc_err_handler,
409                                        IRQF_SHARED, dev_name(&pdev->dev), mci);
410                 if (res < 0) {
411                         edac_mc_printk(mci, KERN_ERR,
412                                        "Unable to request irq %d\n", irq2);
413                         res = -ENODEV;
414                         goto err2;
415                 }
416
417                 res = a10_unmask_irq(pdev, A10_DDR0_IRQ_MASK);
418                 if (res < 0)
419                         goto err2;
420
421                 irqflags = IRQF_SHARED;
422         }
423
424         res = devm_request_irq(&pdev->dev, irq, altr_sdram_mc_err_handler,
425                                irqflags, dev_name(&pdev->dev), mci);
426         if (res < 0) {
427                 edac_mc_printk(mci, KERN_ERR,
428                                "Unable to request irq %d\n", irq);
429                 res = -ENODEV;
430                 goto err2;
431         }
432
433         /* Infrastructure ready - enable the IRQ */
434         if (regmap_update_bits(drvdata->mc_vbase, priv->ecc_irq_en_offset,
435                                priv->ecc_irq_en_mask, priv->ecc_irq_en_mask)) {
436                 edac_mc_printk(mci, KERN_ERR,
437                                "Error enabling SDRAM ECC IRQ\n");
438                 res = -ENODEV;
439                 goto err2;
440         }
441
442         altr_sdr_mc_create_debugfs_nodes(mci);
443
444         devres_close_group(&pdev->dev, NULL);
445
446         return 0;
447
448 err2:
449         edac_mc_del_mc(&pdev->dev);
450 err:
451         devres_release_group(&pdev->dev, NULL);
452 free:
453         edac_mc_free(mci);
454         edac_printk(KERN_ERR, EDAC_MC,
455                     "EDAC Probe Failed; Error %d\n", res);
456
457         return res;
458 }
459
460 static int altr_sdram_remove(struct platform_device *pdev)
461 {
462         struct mem_ctl_info *mci = platform_get_drvdata(pdev);
463
464         edac_mc_del_mc(&pdev->dev);
465         edac_mc_free(mci);
466         platform_set_drvdata(pdev, NULL);
467
468         return 0;
469 }
470
471 /**************** Stratix 10 EDAC Memory Controller Functions ************/
472
473 /**
474  * s10_protected_reg_write
475  * Write to a protected SMC register.
476  * @context: Not used.
477  * @reg: Address of register
478  * @value: Value to write
479  * Return: INTEL_SIP_SMC_STATUS_OK (0) on success
480  *         INTEL_SIP_SMC_REG_ERROR on error
481  *         INTEL_SIP_SMC_RETURN_UNKNOWN_FUNCTION if not supported
482  */
483 static int s10_protected_reg_write(void *context, unsigned int reg,
484                                    unsigned int val)
485 {
486         struct arm_smccc_res result;
487         unsigned long offset = (unsigned long)context;
488
489         arm_smccc_smc(INTEL_SIP_SMC_REG_WRITE, offset + reg, val, 0, 0,
490                       0, 0, 0, &result);
491
492         return (int)result.a0;
493 }
494
495 /**
496  * s10_protected_reg_read
497  * Read the status of a protected SMC register
498  * @context: Not used.
499  * @reg: Address of register
500  * @value: Value read.
501  * Return: INTEL_SIP_SMC_STATUS_OK (0) on success
502  *         INTEL_SIP_SMC_REG_ERROR on error
503  *         INTEL_SIP_SMC_RETURN_UNKNOWN_FUNCTION if not supported
504  */
505 static int s10_protected_reg_read(void *context, unsigned int reg,
506                                   unsigned int *val)
507 {
508         struct arm_smccc_res result;
509         unsigned long offset = (unsigned long)context;
510
511         arm_smccc_smc(INTEL_SIP_SMC_REG_READ, offset + reg, 0, 0, 0,
512                       0, 0, 0, &result);
513
514         *val = (unsigned int)result.a1;
515
516         return (int)result.a0;
517 }
518
519 static const struct regmap_config s10_sdram_regmap_cfg = {
520         .name = "s10_ddr",
521         .reg_bits = 32,
522         .reg_stride = 4,
523         .val_bits = 32,
524         .max_register = 0xffd12228,
525         .reg_read = s10_protected_reg_read,
526         .reg_write = s10_protected_reg_write,
527         .use_single_read = true,
528         .use_single_write = true,
529 };
530
531 /************** </Stratix10 EDAC Memory Controller Functions> ***********/
532
533 /*
534  * If you want to suspend, need to disable EDAC by removing it
535  * from the device tree or defconfig.
536  */
537 #ifdef CONFIG_PM
538 static int altr_sdram_prepare(struct device *dev)
539 {
540         pr_err("Suspend not allowed when EDAC is enabled.\n");
541
542         return -EPERM;
543 }
544
545 static const struct dev_pm_ops altr_sdram_pm_ops = {
546         .prepare = altr_sdram_prepare,
547 };
548 #endif
549
550 static struct platform_driver altr_sdram_edac_driver = {
551         .probe = altr_sdram_probe,
552         .remove = altr_sdram_remove,
553         .driver = {
554                 .name = "altr_sdram_edac",
555 #ifdef CONFIG_PM
556                 .pm = &altr_sdram_pm_ops,
557 #endif
558                 .of_match_table = altr_sdram_ctrl_of_match,
559         },
560 };
561
562 module_platform_driver(altr_sdram_edac_driver);
563
564 /************************* EDAC Parent Probe *************************/
565
566 static const struct of_device_id altr_edac_device_of_match[];
567
568 static const struct of_device_id altr_edac_of_match[] = {
569         { .compatible = "altr,socfpga-ecc-manager" },
570         {},
571 };
572 MODULE_DEVICE_TABLE(of, altr_edac_of_match);
573
574 static int altr_edac_probe(struct platform_device *pdev)
575 {
576         of_platform_populate(pdev->dev.of_node, altr_edac_device_of_match,
577                              NULL, &pdev->dev);
578         return 0;
579 }
580
581 static struct platform_driver altr_edac_driver = {
582         .probe =  altr_edac_probe,
583         .driver = {
584                 .name = "socfpga_ecc_manager",
585                 .of_match_table = altr_edac_of_match,
586         },
587 };
588 module_platform_driver(altr_edac_driver);
589
590 /************************* EDAC Device Functions *************************/
591
592 /*
593  * EDAC Device Functions (shared between various IPs).
594  * The discrete memories use the EDAC Device framework. The probe
595  * and error handling functions are very similar between memories
596  * so they are shared. The memory allocation and freeing for EDAC
597  * trigger testing are different for each memory.
598  */
599
600 static const struct edac_device_prv_data ocramecc_data;
601 static const struct edac_device_prv_data l2ecc_data;
602 static const struct edac_device_prv_data a10_ocramecc_data;
603 static const struct edac_device_prv_data a10_l2ecc_data;
604
605 static irqreturn_t altr_edac_device_handler(int irq, void *dev_id)
606 {
607         irqreturn_t ret_value = IRQ_NONE;
608         struct edac_device_ctl_info *dci = dev_id;
609         struct altr_edac_device_dev *drvdata = dci->pvt_info;
610         const struct edac_device_prv_data *priv = drvdata->data;
611
612         if (irq == drvdata->sb_irq) {
613                 if (priv->ce_clear_mask)
614                         writel(priv->ce_clear_mask, drvdata->base);
615                 edac_device_handle_ce(dci, 0, 0, drvdata->edac_dev_name);
616                 ret_value = IRQ_HANDLED;
617         } else if (irq == drvdata->db_irq) {
618                 if (priv->ue_clear_mask)
619                         writel(priv->ue_clear_mask, drvdata->base);
620                 edac_device_handle_ue(dci, 0, 0, drvdata->edac_dev_name);
621                 panic("\nEDAC:ECC_DEVICE[Uncorrectable errors]\n");
622                 ret_value = IRQ_HANDLED;
623         } else {
624                 WARN_ON(1);
625         }
626
627         return ret_value;
628 }
629
630 static ssize_t altr_edac_device_trig(struct file *file,
631                                      const char __user *user_buf,
632                                      size_t count, loff_t *ppos)
633
634 {
635         u32 *ptemp, i, error_mask;
636         int result = 0;
637         u8 trig_type;
638         unsigned long flags;
639         struct edac_device_ctl_info *edac_dci = file->private_data;
640         struct altr_edac_device_dev *drvdata = edac_dci->pvt_info;
641         const struct edac_device_prv_data *priv = drvdata->data;
642         void *generic_ptr = edac_dci->dev;
643
644         if (!user_buf || get_user(trig_type, user_buf))
645                 return -EFAULT;
646
647         if (!priv->alloc_mem)
648                 return -ENOMEM;
649
650         /*
651          * Note that generic_ptr is initialized to the device * but in
652          * some alloc_functions, this is overridden and returns data.
653          */
654         ptemp = priv->alloc_mem(priv->trig_alloc_sz, &generic_ptr);
655         if (!ptemp) {
656                 edac_printk(KERN_ERR, EDAC_DEVICE,
657                             "Inject: Buffer Allocation error\n");
658                 return -ENOMEM;
659         }
660
661         if (trig_type == ALTR_UE_TRIGGER_CHAR)
662                 error_mask = priv->ue_set_mask;
663         else
664                 error_mask = priv->ce_set_mask;
665
666         edac_printk(KERN_ALERT, EDAC_DEVICE,
667                     "Trigger Error Mask (0x%X)\n", error_mask);
668
669         local_irq_save(flags);
670         /* write ECC corrupted data out. */
671         for (i = 0; i < (priv->trig_alloc_sz / sizeof(*ptemp)); i++) {
672                 /* Read data so we're in the correct state */
673                 rmb();
674                 if (READ_ONCE(ptemp[i]))
675                         result = -1;
676                 /* Toggle Error bit (it is latched), leave ECC enabled */
677                 writel(error_mask, (drvdata->base + priv->set_err_ofst));
678                 writel(priv->ecc_enable_mask, (drvdata->base +
679                                                priv->set_err_ofst));
680                 ptemp[i] = i;
681         }
682         /* Ensure it has been written out */
683         wmb();
684         local_irq_restore(flags);
685
686         if (result)
687                 edac_printk(KERN_ERR, EDAC_DEVICE, "Mem Not Cleared\n");
688
689         /* Read out written data. ECC error caused here */
690         for (i = 0; i < ALTR_TRIGGER_READ_WRD_CNT; i++)
691                 if (READ_ONCE(ptemp[i]) != i)
692                         edac_printk(KERN_ERR, EDAC_DEVICE,
693                                     "Read doesn't match written data\n");
694
695         if (priv->free_mem)
696                 priv->free_mem(ptemp, priv->trig_alloc_sz, generic_ptr);
697
698         return count;
699 }
700
701 static const struct file_operations altr_edac_device_inject_fops = {
702         .open = simple_open,
703         .write = altr_edac_device_trig,
704         .llseek = generic_file_llseek,
705 };
706
707 static ssize_t altr_edac_a10_device_trig(struct file *file,
708                                          const char __user *user_buf,
709                                          size_t count, loff_t *ppos);
710
711 static const struct file_operations altr_edac_a10_device_inject_fops = {
712         .open = simple_open,
713         .write = altr_edac_a10_device_trig,
714         .llseek = generic_file_llseek,
715 };
716
717 static ssize_t altr_edac_a10_device_trig2(struct file *file,
718                                           const char __user *user_buf,
719                                           size_t count, loff_t *ppos);
720
721 static const struct file_operations altr_edac_a10_device_inject2_fops = {
722         .open = simple_open,
723         .write = altr_edac_a10_device_trig2,
724         .llseek = generic_file_llseek,
725 };
726
727 static void altr_create_edacdev_dbgfs(struct edac_device_ctl_info *edac_dci,
728                                       const struct edac_device_prv_data *priv)
729 {
730         struct altr_edac_device_dev *drvdata = edac_dci->pvt_info;
731
732         if (!IS_ENABLED(CONFIG_EDAC_DEBUG))
733                 return;
734
735         drvdata->debugfs_dir = edac_debugfs_create_dir(drvdata->edac_dev_name);
736         if (!drvdata->debugfs_dir)
737                 return;
738
739         if (!edac_debugfs_create_file("altr_trigger", S_IWUSR,
740                                       drvdata->debugfs_dir, edac_dci,
741                                       priv->inject_fops))
742                 debugfs_remove_recursive(drvdata->debugfs_dir);
743 }
744
745 static const struct of_device_id altr_edac_device_of_match[] = {
746 #ifdef CONFIG_EDAC_ALTERA_L2C
747         { .compatible = "altr,socfpga-l2-ecc", .data = &l2ecc_data },
748 #endif
749 #ifdef CONFIG_EDAC_ALTERA_OCRAM
750         { .compatible = "altr,socfpga-ocram-ecc", .data = &ocramecc_data },
751 #endif
752         {},
753 };
754 MODULE_DEVICE_TABLE(of, altr_edac_device_of_match);
755
756 /*
757  * altr_edac_device_probe()
758  *      This is a generic EDAC device driver that will support
759  *      various Altera memory devices such as the L2 cache ECC and
760  *      OCRAM ECC as well as the memories for other peripherals.
761  *      Module specific initialization is done by passing the
762  *      function index in the device tree.
763  */
764 static int altr_edac_device_probe(struct platform_device *pdev)
765 {
766         struct edac_device_ctl_info *dci;
767         struct altr_edac_device_dev *drvdata;
768         struct resource *r;
769         int res = 0;
770         struct device_node *np = pdev->dev.of_node;
771         char *ecc_name = (char *)np->name;
772         static int dev_instance;
773
774         if (!devres_open_group(&pdev->dev, NULL, GFP_KERNEL)) {
775                 edac_printk(KERN_ERR, EDAC_DEVICE,
776                             "Unable to open devm\n");
777                 return -ENOMEM;
778         }
779
780         r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
781         if (!r) {
782                 edac_printk(KERN_ERR, EDAC_DEVICE,
783                             "Unable to get mem resource\n");
784                 res = -ENODEV;
785                 goto fail;
786         }
787
788         if (!devm_request_mem_region(&pdev->dev, r->start, resource_size(r),
789                                      dev_name(&pdev->dev))) {
790                 edac_printk(KERN_ERR, EDAC_DEVICE,
791                             "%s:Error requesting mem region\n", ecc_name);
792                 res = -EBUSY;
793                 goto fail;
794         }
795
796         dci = edac_device_alloc_ctl_info(sizeof(*drvdata), ecc_name,
797                                          1, ecc_name, 1, 0, NULL, 0,
798                                          dev_instance++);
799
800         if (!dci) {
801                 edac_printk(KERN_ERR, EDAC_DEVICE,
802                             "%s: Unable to allocate EDAC device\n", ecc_name);
803                 res = -ENOMEM;
804                 goto fail;
805         }
806
807         drvdata = dci->pvt_info;
808         dci->dev = &pdev->dev;
809         platform_set_drvdata(pdev, dci);
810         drvdata->edac_dev_name = ecc_name;
811
812         drvdata->base = devm_ioremap(&pdev->dev, r->start, resource_size(r));
813         if (!drvdata->base) {
814                 res = -ENOMEM;
815                 goto fail1;
816         }
817
818         /* Get driver specific data for this EDAC device */
819         drvdata->data = of_match_node(altr_edac_device_of_match, np)->data;
820
821         /* Check specific dependencies for the module */
822         if (drvdata->data->setup) {
823                 res = drvdata->data->setup(drvdata);
824                 if (res)
825                         goto fail1;
826         }
827
828         drvdata->sb_irq = platform_get_irq(pdev, 0);
829         res = devm_request_irq(&pdev->dev, drvdata->sb_irq,
830                                altr_edac_device_handler,
831                                0, dev_name(&pdev->dev), dci);
832         if (res)
833                 goto fail1;
834
835         drvdata->db_irq = platform_get_irq(pdev, 1);
836         res = devm_request_irq(&pdev->dev, drvdata->db_irq,
837                                altr_edac_device_handler,
838                                0, dev_name(&pdev->dev), dci);
839         if (res)
840                 goto fail1;
841
842         dci->mod_name = "Altera ECC Manager";
843         dci->dev_name = drvdata->edac_dev_name;
844
845         res = edac_device_add_device(dci);
846         if (res)
847                 goto fail1;
848
849         altr_create_edacdev_dbgfs(dci, drvdata->data);
850
851         devres_close_group(&pdev->dev, NULL);
852
853         return 0;
854
855 fail1:
856         edac_device_free_ctl_info(dci);
857 fail:
858         devres_release_group(&pdev->dev, NULL);
859         edac_printk(KERN_ERR, EDAC_DEVICE,
860                     "%s:Error setting up EDAC device: %d\n", ecc_name, res);
861
862         return res;
863 }
864
865 static int altr_edac_device_remove(struct platform_device *pdev)
866 {
867         struct edac_device_ctl_info *dci = platform_get_drvdata(pdev);
868         struct altr_edac_device_dev *drvdata = dci->pvt_info;
869
870         debugfs_remove_recursive(drvdata->debugfs_dir);
871         edac_device_del_device(&pdev->dev);
872         edac_device_free_ctl_info(dci);
873
874         return 0;
875 }
876
877 static struct platform_driver altr_edac_device_driver = {
878         .probe =  altr_edac_device_probe,
879         .remove = altr_edac_device_remove,
880         .driver = {
881                 .name = "altr_edac_device",
882                 .of_match_table = altr_edac_device_of_match,
883         },
884 };
885 module_platform_driver(altr_edac_device_driver);
886
887 /******************* Arria10 Device ECC Shared Functions *****************/
888
889 /*
890  *  Test for memory's ECC dependencies upon entry because platform specific
891  *  startup should have initialized the memory and enabled the ECC.
892  *  Can't turn on ECC here because accessing un-initialized memory will
893  *  cause CE/UE errors possibly causing an ABORT.
894  */
895 static int __maybe_unused
896 altr_check_ecc_deps(struct altr_edac_device_dev *device)
897 {
898         void __iomem  *base = device->base;
899         const struct edac_device_prv_data *prv = device->data;
900
901         if (readl(base + prv->ecc_en_ofst) & prv->ecc_enable_mask)
902                 return 0;
903
904         edac_printk(KERN_ERR, EDAC_DEVICE,
905                     "%s: No ECC present or ECC disabled.\n",
906                     device->edac_dev_name);
907         return -ENODEV;
908 }
909
910 static irqreturn_t __maybe_unused altr_edac_a10_ecc_irq(int irq, void *dev_id)
911 {
912         struct altr_edac_device_dev *dci = dev_id;
913         void __iomem  *base = dci->base;
914
915         if (irq == dci->sb_irq) {
916                 writel(ALTR_A10_ECC_SERRPENA,
917                        base + ALTR_A10_ECC_INTSTAT_OFST);
918                 edac_device_handle_ce(dci->edac_dev, 0, 0, dci->edac_dev_name);
919
920                 return IRQ_HANDLED;
921         } else if (irq == dci->db_irq) {
922                 writel(ALTR_A10_ECC_DERRPENA,
923                        base + ALTR_A10_ECC_INTSTAT_OFST);
924                 edac_device_handle_ue(dci->edac_dev, 0, 0, dci->edac_dev_name);
925                 if (dci->data->panic)
926                         panic("\nEDAC:ECC_DEVICE[Uncorrectable errors]\n");
927
928                 return IRQ_HANDLED;
929         }
930
931         WARN_ON(1);
932
933         return IRQ_NONE;
934 }
935
936 /******************* Arria10 Memory Buffer Functions *********************/
937
938 static inline int a10_get_irq_mask(struct device_node *np)
939 {
940         int irq;
941         const u32 *handle = of_get_property(np, "interrupts", NULL);
942
943         if (!handle)
944                 return -ENODEV;
945         irq = be32_to_cpup(handle);
946         return irq;
947 }
948
949 static inline void ecc_set_bits(u32 bit_mask, void __iomem *ioaddr)
950 {
951         u32 value = readl(ioaddr);
952
953         value |= bit_mask;
954         writel(value, ioaddr);
955 }
956
957 static inline void ecc_clear_bits(u32 bit_mask, void __iomem *ioaddr)
958 {
959         u32 value = readl(ioaddr);
960
961         value &= ~bit_mask;
962         writel(value, ioaddr);
963 }
964
965 static inline int ecc_test_bits(u32 bit_mask, void __iomem *ioaddr)
966 {
967         u32 value = readl(ioaddr);
968
969         return (value & bit_mask) ? 1 : 0;
970 }
971
972 /*
973  * This function uses the memory initialization block in the Arria10 ECC
974  * controller to initialize/clear the entire memory data and ECC data.
975  */
976 static int __maybe_unused altr_init_memory_port(void __iomem *ioaddr, int port)
977 {
978         int limit = ALTR_A10_ECC_INIT_WATCHDOG_10US;
979         u32 init_mask, stat_mask, clear_mask;
980         int ret = 0;
981
982         if (port) {
983                 init_mask = ALTR_A10_ECC_INITB;
984                 stat_mask = ALTR_A10_ECC_INITCOMPLETEB;
985                 clear_mask = ALTR_A10_ECC_ERRPENB_MASK;
986         } else {
987                 init_mask = ALTR_A10_ECC_INITA;
988                 stat_mask = ALTR_A10_ECC_INITCOMPLETEA;
989                 clear_mask = ALTR_A10_ECC_ERRPENA_MASK;
990         }
991
992         ecc_set_bits(init_mask, (ioaddr + ALTR_A10_ECC_CTRL_OFST));
993         while (limit--) {
994                 if (ecc_test_bits(stat_mask,
995                                   (ioaddr + ALTR_A10_ECC_INITSTAT_OFST)))
996                         break;
997                 udelay(1);
998         }
999         if (limit < 0)
1000                 ret = -EBUSY;
1001
1002         /* Clear any pending ECC interrupts */
1003         writel(clear_mask, (ioaddr + ALTR_A10_ECC_INTSTAT_OFST));
1004
1005         return ret;
1006 }
1007
1008 static int socfpga_is_a10(void)
1009 {
1010         return of_machine_is_compatible("altr,socfpga-arria10");
1011 }
1012
1013 static int socfpga_is_s10(void)
1014 {
1015         return of_machine_is_compatible("altr,socfpga-stratix10");
1016 }
1017
1018 static __init int __maybe_unused
1019 altr_init_a10_ecc_block(struct device_node *np, u32 irq_mask,
1020                         u32 ecc_ctrl_en_mask, bool dual_port)
1021 {
1022         int ret = 0;
1023         void __iomem *ecc_block_base;
1024         struct regmap *ecc_mgr_map;
1025         char *ecc_name;
1026         struct device_node *np_eccmgr;
1027
1028         ecc_name = (char *)np->name;
1029
1030         /* Get the ECC Manager - parent of the device EDACs */
1031         np_eccmgr = of_get_parent(np);
1032
1033         if (socfpga_is_a10()) {
1034                 ecc_mgr_map = syscon_regmap_lookup_by_phandle(np_eccmgr,
1035                                                               "altr,sysmgr-syscon");
1036         } else {
1037                 struct device_node *sysmgr_np;
1038                 struct resource res;
1039                 uintptr_t base;
1040
1041                 sysmgr_np = of_parse_phandle(np_eccmgr,
1042                                              "altr,sysmgr-syscon", 0);
1043                 if (!sysmgr_np) {
1044                         edac_printk(KERN_ERR, EDAC_DEVICE,
1045                                     "Unable to find altr,sysmgr-syscon\n");
1046                         return -ENODEV;
1047                 }
1048
1049                 if (of_address_to_resource(sysmgr_np, 0, &res))
1050                         return -ENOMEM;
1051
1052                 /* Need physical address for SMCC call */
1053                 base = res.start;
1054
1055                 ecc_mgr_map = regmap_init(NULL, NULL, (void *)base,
1056                                           &s10_sdram_regmap_cfg);
1057         }
1058         of_node_put(np_eccmgr);
1059         if (IS_ERR(ecc_mgr_map)) {
1060                 edac_printk(KERN_ERR, EDAC_DEVICE,
1061                             "Unable to get syscon altr,sysmgr-syscon\n");
1062                 return -ENODEV;
1063         }
1064
1065         /* Map the ECC Block */
1066         ecc_block_base = of_iomap(np, 0);
1067         if (!ecc_block_base) {
1068                 edac_printk(KERN_ERR, EDAC_DEVICE,
1069                             "Unable to map %s ECC block\n", ecc_name);
1070                 return -ENODEV;
1071         }
1072
1073         /* Disable ECC */
1074         regmap_write(ecc_mgr_map, A10_SYSMGR_ECC_INTMASK_SET_OFST, irq_mask);
1075         writel(ALTR_A10_ECC_SERRINTEN,
1076                (ecc_block_base + ALTR_A10_ECC_ERRINTENR_OFST));
1077         ecc_clear_bits(ecc_ctrl_en_mask,
1078                        (ecc_block_base + ALTR_A10_ECC_CTRL_OFST));
1079         /* Ensure all writes complete */
1080         wmb();
1081         /* Use HW initialization block to initialize memory for ECC */
1082         ret = altr_init_memory_port(ecc_block_base, 0);
1083         if (ret) {
1084                 edac_printk(KERN_ERR, EDAC_DEVICE,
1085                             "ECC: cannot init %s PORTA memory\n", ecc_name);
1086                 goto out;
1087         }
1088
1089         if (dual_port) {
1090                 ret = altr_init_memory_port(ecc_block_base, 1);
1091                 if (ret) {
1092                         edac_printk(KERN_ERR, EDAC_DEVICE,
1093                                     "ECC: cannot init %s PORTB memory\n",
1094                                     ecc_name);
1095                         goto out;
1096                 }
1097         }
1098
1099         /* Interrupt mode set to every SBERR */
1100         regmap_write(ecc_mgr_map, ALTR_A10_ECC_INTMODE_OFST,
1101                      ALTR_A10_ECC_INTMODE);
1102         /* Enable ECC */
1103         ecc_set_bits(ecc_ctrl_en_mask, (ecc_block_base +
1104                                         ALTR_A10_ECC_CTRL_OFST));
1105         writel(ALTR_A10_ECC_SERRINTEN,
1106                (ecc_block_base + ALTR_A10_ECC_ERRINTENS_OFST));
1107         regmap_write(ecc_mgr_map, A10_SYSMGR_ECC_INTMASK_CLR_OFST, irq_mask);
1108         /* Ensure all writes complete */
1109         wmb();
1110 out:
1111         iounmap(ecc_block_base);
1112         return ret;
1113 }
1114
1115 static int validate_parent_available(struct device_node *np);
1116 static const struct of_device_id altr_edac_a10_device_of_match[];
1117 static int __init __maybe_unused altr_init_a10_ecc_device_type(char *compat)
1118 {
1119         int irq;
1120         struct device_node *child, *np;
1121
1122         if (!socfpga_is_a10() && !socfpga_is_s10())
1123                 return -ENODEV;
1124
1125         np = of_find_compatible_node(NULL, NULL,
1126                                      "altr,socfpga-a10-ecc-manager");
1127         if (!np) {
1128                 edac_printk(KERN_ERR, EDAC_DEVICE, "ECC Manager not found\n");
1129                 return -ENODEV;
1130         }
1131
1132         for_each_child_of_node(np, child) {
1133                 const struct of_device_id *pdev_id;
1134                 const struct edac_device_prv_data *prv;
1135
1136                 if (!of_device_is_available(child))
1137                         continue;
1138                 if (!of_device_is_compatible(child, compat))
1139                         continue;
1140
1141                 if (validate_parent_available(child))
1142                         continue;
1143
1144                 irq = a10_get_irq_mask(child);
1145                 if (irq < 0)
1146                         continue;
1147
1148                 /* Get matching node and check for valid result */
1149                 pdev_id = of_match_node(altr_edac_a10_device_of_match, child);
1150                 if (IS_ERR_OR_NULL(pdev_id))
1151                         continue;
1152
1153                 /* Validate private data pointer before dereferencing */
1154                 prv = pdev_id->data;
1155                 if (!prv)
1156                         continue;
1157
1158                 altr_init_a10_ecc_block(child, BIT(irq),
1159                                         prv->ecc_enable_mask, 0);
1160         }
1161
1162         of_node_put(np);
1163         return 0;
1164 }
1165
1166 /*********************** OCRAM EDAC Device Functions *********************/
1167
1168 #ifdef CONFIG_EDAC_ALTERA_OCRAM
1169
1170 static void *ocram_alloc_mem(size_t size, void **other)
1171 {
1172         struct device_node *np;
1173         struct gen_pool *gp;
1174         void *sram_addr;
1175
1176         np = of_find_compatible_node(NULL, NULL, "altr,socfpga-ocram-ecc");
1177         if (!np)
1178                 return NULL;
1179
1180         gp = of_gen_pool_get(np, "iram", 0);
1181         of_node_put(np);
1182         if (!gp)
1183                 return NULL;
1184
1185         sram_addr = (void *)gen_pool_alloc(gp, size);
1186         if (!sram_addr)
1187                 return NULL;
1188
1189         memset(sram_addr, 0, size);
1190         /* Ensure data is written out */
1191         wmb();
1192
1193         /* Remember this handle for freeing  later */
1194         *other = gp;
1195
1196         return sram_addr;
1197 }
1198
1199 static void ocram_free_mem(void *p, size_t size, void *other)
1200 {
1201         gen_pool_free((struct gen_pool *)other, (unsigned long)p, size);
1202 }
1203
1204 static const struct edac_device_prv_data ocramecc_data = {
1205         .setup = altr_check_ecc_deps,
1206         .ce_clear_mask = (ALTR_OCR_ECC_EN | ALTR_OCR_ECC_SERR),
1207         .ue_clear_mask = (ALTR_OCR_ECC_EN | ALTR_OCR_ECC_DERR),
1208         .alloc_mem = ocram_alloc_mem,
1209         .free_mem = ocram_free_mem,
1210         .ecc_enable_mask = ALTR_OCR_ECC_EN,
1211         .ecc_en_ofst = ALTR_OCR_ECC_REG_OFFSET,
1212         .ce_set_mask = (ALTR_OCR_ECC_EN | ALTR_OCR_ECC_INJS),
1213         .ue_set_mask = (ALTR_OCR_ECC_EN | ALTR_OCR_ECC_INJD),
1214         .set_err_ofst = ALTR_OCR_ECC_REG_OFFSET,
1215         .trig_alloc_sz = ALTR_TRIG_OCRAM_BYTE_SIZE,
1216         .inject_fops = &altr_edac_device_inject_fops,
1217 };
1218
1219 static const struct edac_device_prv_data a10_ocramecc_data = {
1220         .setup = altr_check_ecc_deps,
1221         .ce_clear_mask = ALTR_A10_ECC_SERRPENA,
1222         .ue_clear_mask = ALTR_A10_ECC_DERRPENA,
1223         .irq_status_mask = A10_SYSMGR_ECC_INTSTAT_OCRAM,
1224         .ecc_enable_mask = ALTR_A10_OCRAM_ECC_EN_CTL,
1225         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1226         .ce_set_mask = ALTR_A10_ECC_TSERRA,
1227         .ue_set_mask = ALTR_A10_ECC_TDERRA,
1228         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1229         .ecc_irq_handler = altr_edac_a10_ecc_irq,
1230         .inject_fops = &altr_edac_a10_device_inject_fops,
1231         /*
1232          * OCRAM panic on uncorrectable error because sleep/resume
1233          * functions and FPGA contents are stored in OCRAM. Prefer
1234          * a kernel panic over executing/loading corrupted data.
1235          */
1236         .panic = true,
1237 };
1238
1239 #endif  /* CONFIG_EDAC_ALTERA_OCRAM */
1240
1241 /********************* L2 Cache EDAC Device Functions ********************/
1242
1243 #ifdef CONFIG_EDAC_ALTERA_L2C
1244
1245 static void *l2_alloc_mem(size_t size, void **other)
1246 {
1247         struct device *dev = *other;
1248         void *ptemp = devm_kzalloc(dev, size, GFP_KERNEL);
1249
1250         if (!ptemp)
1251                 return NULL;
1252
1253         /* Make sure everything is written out */
1254         wmb();
1255
1256         /*
1257          * Clean all cache levels up to LoC (includes L2)
1258          * This ensures the corrupted data is written into
1259          * L2 cache for readback test (which causes ECC error).
1260          */
1261         flush_cache_all();
1262
1263         return ptemp;
1264 }
1265
1266 static void l2_free_mem(void *p, size_t size, void *other)
1267 {
1268         struct device *dev = other;
1269
1270         if (dev && p)
1271                 devm_kfree(dev, p);
1272 }
1273
1274 /*
1275  * altr_l2_check_deps()
1276  *      Test for L2 cache ECC dependencies upon entry because
1277  *      platform specific startup should have initialized the L2
1278  *      memory and enabled the ECC.
1279  *      Bail if ECC is not enabled.
1280  *      Note that L2 Cache Enable is forced at build time.
1281  */
1282 static int altr_l2_check_deps(struct altr_edac_device_dev *device)
1283 {
1284         void __iomem *base = device->base;
1285         const struct edac_device_prv_data *prv = device->data;
1286
1287         if ((readl(base) & prv->ecc_enable_mask) ==
1288              prv->ecc_enable_mask)
1289                 return 0;
1290
1291         edac_printk(KERN_ERR, EDAC_DEVICE,
1292                     "L2: No ECC present, or ECC disabled\n");
1293         return -ENODEV;
1294 }
1295
1296 static irqreturn_t altr_edac_a10_l2_irq(int irq, void *dev_id)
1297 {
1298         struct altr_edac_device_dev *dci = dev_id;
1299
1300         if (irq == dci->sb_irq) {
1301                 regmap_write(dci->edac->ecc_mgr_map,
1302                              A10_SYSGMR_MPU_CLEAR_L2_ECC_OFST,
1303                              A10_SYSGMR_MPU_CLEAR_L2_ECC_SB);
1304                 edac_device_handle_ce(dci->edac_dev, 0, 0, dci->edac_dev_name);
1305
1306                 return IRQ_HANDLED;
1307         } else if (irq == dci->db_irq) {
1308                 regmap_write(dci->edac->ecc_mgr_map,
1309                              A10_SYSGMR_MPU_CLEAR_L2_ECC_OFST,
1310                              A10_SYSGMR_MPU_CLEAR_L2_ECC_MB);
1311                 edac_device_handle_ue(dci->edac_dev, 0, 0, dci->edac_dev_name);
1312                 panic("\nEDAC:ECC_DEVICE[Uncorrectable errors]\n");
1313
1314                 return IRQ_HANDLED;
1315         }
1316
1317         WARN_ON(1);
1318
1319         return IRQ_NONE;
1320 }
1321
1322 static const struct edac_device_prv_data l2ecc_data = {
1323         .setup = altr_l2_check_deps,
1324         .ce_clear_mask = 0,
1325         .ue_clear_mask = 0,
1326         .alloc_mem = l2_alloc_mem,
1327         .free_mem = l2_free_mem,
1328         .ecc_enable_mask = ALTR_L2_ECC_EN,
1329         .ce_set_mask = (ALTR_L2_ECC_EN | ALTR_L2_ECC_INJS),
1330         .ue_set_mask = (ALTR_L2_ECC_EN | ALTR_L2_ECC_INJD),
1331         .set_err_ofst = ALTR_L2_ECC_REG_OFFSET,
1332         .trig_alloc_sz = ALTR_TRIG_L2C_BYTE_SIZE,
1333         .inject_fops = &altr_edac_device_inject_fops,
1334 };
1335
1336 static const struct edac_device_prv_data a10_l2ecc_data = {
1337         .setup = altr_l2_check_deps,
1338         .ce_clear_mask = ALTR_A10_L2_ECC_SERR_CLR,
1339         .ue_clear_mask = ALTR_A10_L2_ECC_MERR_CLR,
1340         .irq_status_mask = A10_SYSMGR_ECC_INTSTAT_L2,
1341         .alloc_mem = l2_alloc_mem,
1342         .free_mem = l2_free_mem,
1343         .ecc_enable_mask = ALTR_A10_L2_ECC_EN_CTL,
1344         .ce_set_mask = ALTR_A10_L2_ECC_CE_INJ_MASK,
1345         .ue_set_mask = ALTR_A10_L2_ECC_UE_INJ_MASK,
1346         .set_err_ofst = ALTR_A10_L2_ECC_INJ_OFST,
1347         .ecc_irq_handler = altr_edac_a10_l2_irq,
1348         .trig_alloc_sz = ALTR_TRIG_L2C_BYTE_SIZE,
1349         .inject_fops = &altr_edac_device_inject_fops,
1350 };
1351
1352 #endif  /* CONFIG_EDAC_ALTERA_L2C */
1353
1354 /********************* Ethernet Device Functions ********************/
1355
1356 #ifdef CONFIG_EDAC_ALTERA_ETHERNET
1357
1358 static const struct edac_device_prv_data a10_enetecc_data = {
1359         .setup = altr_check_ecc_deps,
1360         .ce_clear_mask = ALTR_A10_ECC_SERRPENA,
1361         .ue_clear_mask = ALTR_A10_ECC_DERRPENA,
1362         .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL,
1363         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1364         .ce_set_mask = ALTR_A10_ECC_TSERRA,
1365         .ue_set_mask = ALTR_A10_ECC_TDERRA,
1366         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1367         .ecc_irq_handler = altr_edac_a10_ecc_irq,
1368         .inject_fops = &altr_edac_a10_device_inject2_fops,
1369 };
1370
1371 static int __init socfpga_init_ethernet_ecc(void)
1372 {
1373         return altr_init_a10_ecc_device_type("altr,socfpga-eth-mac-ecc");
1374 }
1375
1376 early_initcall(socfpga_init_ethernet_ecc);
1377
1378 #endif  /* CONFIG_EDAC_ALTERA_ETHERNET */
1379
1380 /********************** NAND Device Functions **********************/
1381
1382 #ifdef CONFIG_EDAC_ALTERA_NAND
1383
1384 static const struct edac_device_prv_data a10_nandecc_data = {
1385         .setup = altr_check_ecc_deps,
1386         .ce_clear_mask = ALTR_A10_ECC_SERRPENA,
1387         .ue_clear_mask = ALTR_A10_ECC_DERRPENA,
1388         .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL,
1389         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1390         .ce_set_mask = ALTR_A10_ECC_TSERRA,
1391         .ue_set_mask = ALTR_A10_ECC_TDERRA,
1392         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1393         .ecc_irq_handler = altr_edac_a10_ecc_irq,
1394         .inject_fops = &altr_edac_a10_device_inject_fops,
1395 };
1396
1397 static int __init socfpga_init_nand_ecc(void)
1398 {
1399         return altr_init_a10_ecc_device_type("altr,socfpga-nand-ecc");
1400 }
1401
1402 early_initcall(socfpga_init_nand_ecc);
1403
1404 #endif  /* CONFIG_EDAC_ALTERA_NAND */
1405
1406 /********************** DMA Device Functions **********************/
1407
1408 #ifdef CONFIG_EDAC_ALTERA_DMA
1409
1410 static const struct edac_device_prv_data a10_dmaecc_data = {
1411         .setup = altr_check_ecc_deps,
1412         .ce_clear_mask = ALTR_A10_ECC_SERRPENA,
1413         .ue_clear_mask = ALTR_A10_ECC_DERRPENA,
1414         .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL,
1415         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1416         .ce_set_mask = ALTR_A10_ECC_TSERRA,
1417         .ue_set_mask = ALTR_A10_ECC_TDERRA,
1418         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1419         .ecc_irq_handler = altr_edac_a10_ecc_irq,
1420         .inject_fops = &altr_edac_a10_device_inject_fops,
1421 };
1422
1423 static int __init socfpga_init_dma_ecc(void)
1424 {
1425         return altr_init_a10_ecc_device_type("altr,socfpga-dma-ecc");
1426 }
1427
1428 early_initcall(socfpga_init_dma_ecc);
1429
1430 #endif  /* CONFIG_EDAC_ALTERA_DMA */
1431
1432 /********************** USB Device Functions **********************/
1433
1434 #ifdef CONFIG_EDAC_ALTERA_USB
1435
1436 static const struct edac_device_prv_data a10_usbecc_data = {
1437         .setup = altr_check_ecc_deps,
1438         .ce_clear_mask = ALTR_A10_ECC_SERRPENA,
1439         .ue_clear_mask = ALTR_A10_ECC_DERRPENA,
1440         .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL,
1441         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1442         .ce_set_mask = ALTR_A10_ECC_TSERRA,
1443         .ue_set_mask = ALTR_A10_ECC_TDERRA,
1444         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1445         .ecc_irq_handler = altr_edac_a10_ecc_irq,
1446         .inject_fops = &altr_edac_a10_device_inject2_fops,
1447 };
1448
1449 static int __init socfpga_init_usb_ecc(void)
1450 {
1451         return altr_init_a10_ecc_device_type("altr,socfpga-usb-ecc");
1452 }
1453
1454 early_initcall(socfpga_init_usb_ecc);
1455
1456 #endif  /* CONFIG_EDAC_ALTERA_USB */
1457
1458 /********************** QSPI Device Functions **********************/
1459
1460 #ifdef CONFIG_EDAC_ALTERA_QSPI
1461
1462 static const struct edac_device_prv_data a10_qspiecc_data = {
1463         .setup = altr_check_ecc_deps,
1464         .ce_clear_mask = ALTR_A10_ECC_SERRPENA,
1465         .ue_clear_mask = ALTR_A10_ECC_DERRPENA,
1466         .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL,
1467         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1468         .ce_set_mask = ALTR_A10_ECC_TSERRA,
1469         .ue_set_mask = ALTR_A10_ECC_TDERRA,
1470         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1471         .ecc_irq_handler = altr_edac_a10_ecc_irq,
1472         .inject_fops = &altr_edac_a10_device_inject_fops,
1473 };
1474
1475 static int __init socfpga_init_qspi_ecc(void)
1476 {
1477         return altr_init_a10_ecc_device_type("altr,socfpga-qspi-ecc");
1478 }
1479
1480 early_initcall(socfpga_init_qspi_ecc);
1481
1482 #endif  /* CONFIG_EDAC_ALTERA_QSPI */
1483
1484 /********************* SDMMC Device Functions **********************/
1485
1486 #ifdef CONFIG_EDAC_ALTERA_SDMMC
1487
1488 static const struct edac_device_prv_data a10_sdmmceccb_data;
1489 static int altr_portb_setup(struct altr_edac_device_dev *device)
1490 {
1491         struct edac_device_ctl_info *dci;
1492         struct altr_edac_device_dev *altdev;
1493         char *ecc_name = "sdmmcb-ecc";
1494         int edac_idx, rc;
1495         struct device_node *np;
1496         const struct edac_device_prv_data *prv = &a10_sdmmceccb_data;
1497
1498         rc = altr_check_ecc_deps(device);
1499         if (rc)
1500                 return rc;
1501
1502         np = of_find_compatible_node(NULL, NULL, "altr,socfpga-sdmmc-ecc");
1503         if (!np) {
1504                 edac_printk(KERN_WARNING, EDAC_DEVICE, "SDMMC node not found\n");
1505                 return -ENODEV;
1506         }
1507
1508         /* Create the PortB EDAC device */
1509         edac_idx = edac_device_alloc_index();
1510         dci = edac_device_alloc_ctl_info(sizeof(*altdev), ecc_name, 1,
1511                                          ecc_name, 1, 0, NULL, 0, edac_idx);
1512         if (!dci) {
1513                 edac_printk(KERN_ERR, EDAC_DEVICE,
1514                             "%s: Unable to allocate PortB EDAC device\n",
1515                             ecc_name);
1516                 return -ENOMEM;
1517         }
1518
1519         /* Initialize the PortB EDAC device structure from PortA structure */
1520         altdev = dci->pvt_info;
1521         *altdev = *device;
1522
1523         if (!devres_open_group(&altdev->ddev, altr_portb_setup, GFP_KERNEL))
1524                 return -ENOMEM;
1525
1526         /* Update PortB specific values */
1527         altdev->edac_dev_name = ecc_name;
1528         altdev->edac_idx = edac_idx;
1529         altdev->edac_dev = dci;
1530         altdev->data = prv;
1531         dci->dev = &altdev->ddev;
1532         dci->ctl_name = "Altera ECC Manager";
1533         dci->mod_name = ecc_name;
1534         dci->dev_name = ecc_name;
1535
1536         /* Update the IRQs for PortB */
1537         altdev->sb_irq = irq_of_parse_and_map(np, 2);
1538         if (!altdev->sb_irq) {
1539                 edac_printk(KERN_ERR, EDAC_DEVICE, "Error PortB SBIRQ alloc\n");
1540                 rc = -ENODEV;
1541                 goto err_release_group_1;
1542         }
1543         rc = devm_request_irq(&altdev->ddev, altdev->sb_irq,
1544                               prv->ecc_irq_handler,
1545                               IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
1546                               ecc_name, altdev);
1547         if (rc) {
1548                 edac_printk(KERN_ERR, EDAC_DEVICE, "PortB SBERR IRQ error\n");
1549                 goto err_release_group_1;
1550         }
1551
1552         altdev->db_irq = irq_of_parse_and_map(np, 3);
1553         if (!altdev->db_irq) {
1554                 edac_printk(KERN_ERR, EDAC_DEVICE, "Error PortB DBIRQ alloc\n");
1555                 rc = -ENODEV;
1556                 goto err_release_group_1;
1557         }
1558         rc = devm_request_irq(&altdev->ddev, altdev->db_irq,
1559                               prv->ecc_irq_handler,
1560                               IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
1561                               ecc_name, altdev);
1562         if (rc) {
1563                 edac_printk(KERN_ERR, EDAC_DEVICE, "PortB DBERR IRQ error\n");
1564                 goto err_release_group_1;
1565         }
1566
1567         rc = edac_device_add_device(dci);
1568         if (rc) {
1569                 edac_printk(KERN_ERR, EDAC_DEVICE,
1570                             "edac_device_add_device portB failed\n");
1571                 rc = -ENOMEM;
1572                 goto err_release_group_1;
1573         }
1574         altr_create_edacdev_dbgfs(dci, prv);
1575
1576         list_add(&altdev->next, &altdev->edac->a10_ecc_devices);
1577
1578         devres_remove_group(&altdev->ddev, altr_portb_setup);
1579
1580         return 0;
1581
1582 err_release_group_1:
1583         edac_device_free_ctl_info(dci);
1584         devres_release_group(&altdev->ddev, altr_portb_setup);
1585         edac_printk(KERN_ERR, EDAC_DEVICE,
1586                     "%s:Error setting up EDAC device: %d\n", ecc_name, rc);
1587         return rc;
1588 }
1589
1590 static irqreturn_t altr_edac_a10_ecc_irq_portb(int irq, void *dev_id)
1591 {
1592         struct altr_edac_device_dev *ad = dev_id;
1593         void __iomem  *base = ad->base;
1594         const struct edac_device_prv_data *priv = ad->data;
1595
1596         if (irq == ad->sb_irq) {
1597                 writel(priv->ce_clear_mask,
1598                        base + ALTR_A10_ECC_INTSTAT_OFST);
1599                 edac_device_handle_ce(ad->edac_dev, 0, 0, ad->edac_dev_name);
1600                 return IRQ_HANDLED;
1601         } else if (irq == ad->db_irq) {
1602                 writel(priv->ue_clear_mask,
1603                        base + ALTR_A10_ECC_INTSTAT_OFST);
1604                 edac_device_handle_ue(ad->edac_dev, 0, 0, ad->edac_dev_name);
1605                 return IRQ_HANDLED;
1606         }
1607
1608         WARN_ONCE(1, "Unhandled IRQ%d on Port B.", irq);
1609
1610         return IRQ_NONE;
1611 }
1612
1613 static const struct edac_device_prv_data a10_sdmmcecca_data = {
1614         .setup = altr_portb_setup,
1615         .ce_clear_mask = ALTR_A10_ECC_SERRPENA,
1616         .ue_clear_mask = ALTR_A10_ECC_DERRPENA,
1617         .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL,
1618         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1619         .ce_set_mask = ALTR_A10_ECC_SERRPENA,
1620         .ue_set_mask = ALTR_A10_ECC_DERRPENA,
1621         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1622         .ecc_irq_handler = altr_edac_a10_ecc_irq,
1623         .inject_fops = &altr_edac_a10_device_inject_fops,
1624 };
1625
1626 static const struct edac_device_prv_data a10_sdmmceccb_data = {
1627         .setup = altr_portb_setup,
1628         .ce_clear_mask = ALTR_A10_ECC_SERRPENB,
1629         .ue_clear_mask = ALTR_A10_ECC_DERRPENB,
1630         .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL,
1631         .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST,
1632         .ce_set_mask = ALTR_A10_ECC_TSERRB,
1633         .ue_set_mask = ALTR_A10_ECC_TDERRB,
1634         .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST,
1635         .ecc_irq_handler = altr_edac_a10_ecc_irq_portb,
1636         .inject_fops = &altr_edac_a10_device_inject_fops,
1637 };
1638
1639 static int __init socfpga_init_sdmmc_ecc(void)
1640 {
1641         int rc = -ENODEV;
1642         struct device_node *child;
1643
1644         if (!socfpga_is_a10() && !socfpga_is_s10())
1645                 return -ENODEV;
1646
1647         child = of_find_compatible_node(NULL, NULL, "altr,socfpga-sdmmc-ecc");
1648         if (!child) {
1649                 edac_printk(KERN_WARNING, EDAC_DEVICE, "SDMMC node not found\n");
1650                 return -ENODEV;
1651         }
1652
1653         if (!of_device_is_available(child))
1654                 goto exit;
1655
1656         if (validate_parent_available(child))
1657                 goto exit;
1658
1659         rc = altr_init_a10_ecc_block(child, ALTR_A10_SDMMC_IRQ_MASK,
1660                                      a10_sdmmcecca_data.ecc_enable_mask, 1);
1661 exit:
1662         of_node_put(child);
1663         return rc;
1664 }
1665
1666 early_initcall(socfpga_init_sdmmc_ecc);
1667
1668 #endif  /* CONFIG_EDAC_ALTERA_SDMMC */
1669
1670 /********************* Arria10 EDAC Device Functions *************************/
1671 static const struct of_device_id altr_edac_a10_device_of_match[] = {
1672 #ifdef CONFIG_EDAC_ALTERA_L2C
1673         { .compatible = "altr,socfpga-a10-l2-ecc", .data = &a10_l2ecc_data },
1674 #endif
1675 #ifdef CONFIG_EDAC_ALTERA_OCRAM
1676         { .compatible = "altr,socfpga-a10-ocram-ecc",
1677           .data = &a10_ocramecc_data },
1678 #endif
1679 #ifdef CONFIG_EDAC_ALTERA_ETHERNET
1680         { .compatible = "altr,socfpga-eth-mac-ecc",
1681           .data = &a10_enetecc_data },
1682 #endif
1683 #ifdef CONFIG_EDAC_ALTERA_NAND
1684         { .compatible = "altr,socfpga-nand-ecc", .data = &a10_nandecc_data },
1685 #endif
1686 #ifdef CONFIG_EDAC_ALTERA_DMA
1687         { .compatible = "altr,socfpga-dma-ecc", .data = &a10_dmaecc_data },
1688 #endif
1689 #ifdef CONFIG_EDAC_ALTERA_USB
1690         { .compatible = "altr,socfpga-usb-ecc", .data = &a10_usbecc_data },
1691 #endif
1692 #ifdef CONFIG_EDAC_ALTERA_QSPI
1693         { .compatible = "altr,socfpga-qspi-ecc", .data = &a10_qspiecc_data },
1694 #endif
1695 #ifdef CONFIG_EDAC_ALTERA_SDMMC
1696         { .compatible = "altr,socfpga-sdmmc-ecc", .data = &a10_sdmmcecca_data },
1697 #endif
1698         {},
1699 };
1700 MODULE_DEVICE_TABLE(of, altr_edac_a10_device_of_match);
1701
1702 /*
1703  * The Arria10 EDAC Device Functions differ from the Cyclone5/Arria5
1704  * because 2 IRQs are shared among the all ECC peripherals. The ECC
1705  * manager manages the IRQs and the children.
1706  * Based on xgene_edac.c peripheral code.
1707  */
1708
1709 static ssize_t altr_edac_a10_device_trig(struct file *file,
1710                                          const char __user *user_buf,
1711                                          size_t count, loff_t *ppos)
1712 {
1713         struct edac_device_ctl_info *edac_dci = file->private_data;
1714         struct altr_edac_device_dev *drvdata = edac_dci->pvt_info;
1715         const struct edac_device_prv_data *priv = drvdata->data;
1716         void __iomem *set_addr = (drvdata->base + priv->set_err_ofst);
1717         unsigned long flags;
1718         u8 trig_type;
1719
1720         if (!user_buf || get_user(trig_type, user_buf))
1721                 return -EFAULT;
1722
1723         local_irq_save(flags);
1724         if (trig_type == ALTR_UE_TRIGGER_CHAR)
1725                 writel(priv->ue_set_mask, set_addr);
1726         else
1727                 writel(priv->ce_set_mask, set_addr);
1728
1729         /* Ensure the interrupt test bits are set */
1730         wmb();
1731         local_irq_restore(flags);
1732
1733         return count;
1734 }
1735
1736 /*
1737  * The Stratix10 EDAC Error Injection Functions differ from Arria10
1738  * slightly. A few Arria10 peripherals can use this injection function.
1739  * Inject the error into the memory and then readback to trigger the IRQ.
1740  */
1741 static ssize_t altr_edac_a10_device_trig2(struct file *file,
1742                                           const char __user *user_buf,
1743                                           size_t count, loff_t *ppos)
1744 {
1745         struct edac_device_ctl_info *edac_dci = file->private_data;
1746         struct altr_edac_device_dev *drvdata = edac_dci->pvt_info;
1747         const struct edac_device_prv_data *priv = drvdata->data;
1748         void __iomem *set_addr = (drvdata->base + priv->set_err_ofst);
1749         unsigned long flags;
1750         u8 trig_type;
1751
1752         if (!user_buf || get_user(trig_type, user_buf))
1753                 return -EFAULT;
1754
1755         local_irq_save(flags);
1756         if (trig_type == ALTR_UE_TRIGGER_CHAR) {
1757                 writel(priv->ue_set_mask, set_addr);
1758         } else {
1759                 /* Setup write of 0 to first 4 bytes */
1760                 writel(0x0, drvdata->base + ECC_BLK_WDATA0_OFST);
1761                 writel(0x0, drvdata->base + ECC_BLK_WDATA1_OFST);
1762                 writel(0x0, drvdata->base + ECC_BLK_WDATA2_OFST);
1763                 writel(0x0, drvdata->base + ECC_BLK_WDATA3_OFST);
1764                 /* Setup write of 4 bytes */
1765                 writel(ECC_WORD_WRITE, drvdata->base + ECC_BLK_DBYTECTRL_OFST);
1766                 /* Setup Address to 0 */
1767                 writel(0x0, drvdata->base + ECC_BLK_ADDRESS_OFST);
1768                 /* Setup accctrl to write & data override */
1769                 writel(ECC_WRITE_DOVR, drvdata->base + ECC_BLK_ACCCTRL_OFST);
1770                 /* Kick it. */
1771                 writel(ECC_XACT_KICK, drvdata->base + ECC_BLK_STARTACC_OFST);
1772                 /* Setup accctrl to read & ecc override */
1773                 writel(ECC_READ_EOVR, drvdata->base + ECC_BLK_ACCCTRL_OFST);
1774                 /* Kick it. */
1775                 writel(ECC_XACT_KICK, drvdata->base + ECC_BLK_STARTACC_OFST);
1776                 /* Setup write for single bit change */
1777                 writel(0x1, drvdata->base + ECC_BLK_WDATA0_OFST);
1778                 writel(0x0, drvdata->base + ECC_BLK_WDATA1_OFST);
1779                 writel(0x0, drvdata->base + ECC_BLK_WDATA2_OFST);
1780                 writel(0x0, drvdata->base + ECC_BLK_WDATA3_OFST);
1781                 /* Copy Read ECC to Write ECC */
1782                 writel(readl(drvdata->base + ECC_BLK_RECC0_OFST),
1783                        drvdata->base + ECC_BLK_WECC0_OFST);
1784                 writel(readl(drvdata->base + ECC_BLK_RECC1_OFST),
1785                        drvdata->base + ECC_BLK_WECC1_OFST);
1786                 /* Setup accctrl to write & ecc override & data override */
1787                 writel(ECC_WRITE_EDOVR, drvdata->base + ECC_BLK_ACCCTRL_OFST);
1788                 /* Kick it. */
1789                 writel(ECC_XACT_KICK, drvdata->base + ECC_BLK_STARTACC_OFST);
1790                 /* Setup accctrl to read & ecc overwrite & data overwrite */
1791                 writel(ECC_READ_EDOVR, drvdata->base + ECC_BLK_ACCCTRL_OFST);
1792                 /* Kick it. */
1793                 writel(ECC_XACT_KICK, drvdata->base + ECC_BLK_STARTACC_OFST);
1794         }
1795
1796         /* Ensure the interrupt test bits are set */
1797         wmb();
1798         local_irq_restore(flags);
1799
1800         return count;
1801 }
1802
1803 static void altr_edac_a10_irq_handler(struct irq_desc *desc)
1804 {
1805         int dberr, bit, sm_offset, irq_status;
1806         struct altr_arria10_edac *edac = irq_desc_get_handler_data(desc);
1807         struct irq_chip *chip = irq_desc_get_chip(desc);
1808         int irq = irq_desc_get_irq(desc);
1809
1810         dberr = (irq == edac->db_irq) ? 1 : 0;
1811         sm_offset = dberr ? A10_SYSMGR_ECC_INTSTAT_DERR_OFST :
1812                             A10_SYSMGR_ECC_INTSTAT_SERR_OFST;
1813
1814         chained_irq_enter(chip, desc);
1815
1816         regmap_read(edac->ecc_mgr_map, sm_offset, &irq_status);
1817
1818         for_each_set_bit(bit, (unsigned long *)&irq_status, 32) {
1819                 irq = irq_linear_revmap(edac->domain, dberr * 32 + bit);
1820                 if (irq)
1821                         generic_handle_irq(irq);
1822         }
1823
1824         chained_irq_exit(chip, desc);
1825 }
1826
1827 static int validate_parent_available(struct device_node *np)
1828 {
1829         struct device_node *parent;
1830         int ret = 0;
1831
1832         /* Ensure parent device is enabled if parent node exists */
1833         parent = of_parse_phandle(np, "altr,ecc-parent", 0);
1834         if (parent && !of_device_is_available(parent))
1835                 ret = -ENODEV;
1836
1837         of_node_put(parent);
1838         return ret;
1839 }
1840
1841 static int altr_edac_a10_device_add(struct altr_arria10_edac *edac,
1842                                     struct device_node *np)
1843 {
1844         struct edac_device_ctl_info *dci;
1845         struct altr_edac_device_dev *altdev;
1846         char *ecc_name = (char *)np->name;
1847         struct resource res;
1848         int edac_idx;
1849         int rc = 0;
1850         const struct edac_device_prv_data *prv;
1851         /* Get matching node and check for valid result */
1852         const struct of_device_id *pdev_id =
1853                 of_match_node(altr_edac_a10_device_of_match, np);
1854         if (IS_ERR_OR_NULL(pdev_id))
1855                 return -ENODEV;
1856
1857         /* Get driver specific data for this EDAC device */
1858         prv = pdev_id->data;
1859         if (IS_ERR_OR_NULL(prv))
1860                 return -ENODEV;
1861
1862         if (validate_parent_available(np))
1863                 return -ENODEV;
1864
1865         if (!devres_open_group(edac->dev, altr_edac_a10_device_add, GFP_KERNEL))
1866                 return -ENOMEM;
1867
1868         rc = of_address_to_resource(np, 0, &res);
1869         if (rc < 0) {
1870                 edac_printk(KERN_ERR, EDAC_DEVICE,
1871                             "%s: no resource address\n", ecc_name);
1872                 goto err_release_group;
1873         }
1874
1875         edac_idx = edac_device_alloc_index();
1876         dci = edac_device_alloc_ctl_info(sizeof(*altdev), ecc_name,
1877                                          1, ecc_name, 1, 0, NULL, 0,
1878                                          edac_idx);
1879
1880         if (!dci) {
1881                 edac_printk(KERN_ERR, EDAC_DEVICE,
1882                             "%s: Unable to allocate EDAC device\n", ecc_name);
1883                 rc = -ENOMEM;
1884                 goto err_release_group;
1885         }
1886
1887         altdev = dci->pvt_info;
1888         dci->dev = edac->dev;
1889         altdev->edac_dev_name = ecc_name;
1890         altdev->edac_idx = edac_idx;
1891         altdev->edac = edac;
1892         altdev->edac_dev = dci;
1893         altdev->data = prv;
1894         altdev->ddev = *edac->dev;
1895         dci->dev = &altdev->ddev;
1896         dci->ctl_name = "Altera ECC Manager";
1897         dci->mod_name = ecc_name;
1898         dci->dev_name = ecc_name;
1899
1900         altdev->base = devm_ioremap_resource(edac->dev, &res);
1901         if (IS_ERR(altdev->base)) {
1902                 rc = PTR_ERR(altdev->base);
1903                 goto err_release_group1;
1904         }
1905
1906         /* Check specific dependencies for the module */
1907         if (altdev->data->setup) {
1908                 rc = altdev->data->setup(altdev);
1909                 if (rc)
1910                         goto err_release_group1;
1911         }
1912
1913         altdev->sb_irq = irq_of_parse_and_map(np, 0);
1914         if (!altdev->sb_irq) {
1915                 edac_printk(KERN_ERR, EDAC_DEVICE, "Error allocating SBIRQ\n");
1916                 rc = -ENODEV;
1917                 goto err_release_group1;
1918         }
1919         rc = devm_request_irq(edac->dev, altdev->sb_irq, prv->ecc_irq_handler,
1920                               IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
1921                               ecc_name, altdev);
1922         if (rc) {
1923                 edac_printk(KERN_ERR, EDAC_DEVICE, "No SBERR IRQ resource\n");
1924                 goto err_release_group1;
1925         }
1926
1927         altdev->db_irq = irq_of_parse_and_map(np, 1);
1928         if (!altdev->db_irq) {
1929                 edac_printk(KERN_ERR, EDAC_DEVICE, "Error allocating DBIRQ\n");
1930                 rc = -ENODEV;
1931                 goto err_release_group1;
1932         }
1933         rc = devm_request_irq(edac->dev, altdev->db_irq, prv->ecc_irq_handler,
1934                               IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
1935                               ecc_name, altdev);
1936         if (rc) {
1937                 edac_printk(KERN_ERR, EDAC_DEVICE, "No DBERR IRQ resource\n");
1938                 goto err_release_group1;
1939         }
1940
1941         rc = edac_device_add_device(dci);
1942         if (rc) {
1943                 dev_err(edac->dev, "edac_device_add_device failed\n");
1944                 rc = -ENOMEM;
1945                 goto err_release_group1;
1946         }
1947
1948         altr_create_edacdev_dbgfs(dci, prv);
1949
1950         list_add(&altdev->next, &edac->a10_ecc_devices);
1951
1952         devres_remove_group(edac->dev, altr_edac_a10_device_add);
1953
1954         return 0;
1955
1956 err_release_group1:
1957         edac_device_free_ctl_info(dci);
1958 err_release_group:
1959         devres_release_group(edac->dev, NULL);
1960         edac_printk(KERN_ERR, EDAC_DEVICE,
1961                     "%s:Error setting up EDAC device: %d\n", ecc_name, rc);
1962
1963         return rc;
1964 }
1965
1966 static void a10_eccmgr_irq_mask(struct irq_data *d)
1967 {
1968         struct altr_arria10_edac *edac = irq_data_get_irq_chip_data(d);
1969
1970         regmap_write(edac->ecc_mgr_map, A10_SYSMGR_ECC_INTMASK_SET_OFST,
1971                      BIT(d->hwirq));
1972 }
1973
1974 static void a10_eccmgr_irq_unmask(struct irq_data *d)
1975 {
1976         struct altr_arria10_edac *edac = irq_data_get_irq_chip_data(d);
1977
1978         regmap_write(edac->ecc_mgr_map, A10_SYSMGR_ECC_INTMASK_CLR_OFST,
1979                      BIT(d->hwirq));
1980 }
1981
1982 static int a10_eccmgr_irqdomain_map(struct irq_domain *d, unsigned int irq,
1983                                     irq_hw_number_t hwirq)
1984 {
1985         struct altr_arria10_edac *edac = d->host_data;
1986
1987         irq_set_chip_and_handler(irq, &edac->irq_chip, handle_simple_irq);
1988         irq_set_chip_data(irq, edac);
1989         irq_set_noprobe(irq);
1990
1991         return 0;
1992 }
1993
1994 static const struct irq_domain_ops a10_eccmgr_ic_ops = {
1995         .map = a10_eccmgr_irqdomain_map,
1996         .xlate = irq_domain_xlate_twocell,
1997 };
1998
1999 /************** Stratix 10 EDAC Double Bit Error Handler ************/
2000 #define to_a10edac(p, m) container_of(p, struct altr_arria10_edac, m)
2001
2002 /*
2003  * The double bit error is handled through SError which is fatal. This is
2004  * called as a panic notifier to printout ECC error info as part of the panic.
2005  */
2006 static int s10_edac_dberr_handler(struct notifier_block *this,
2007                                   unsigned long event, void *ptr)
2008 {
2009         struct altr_arria10_edac *edac = to_a10edac(this, panic_notifier);
2010         int err_addr, dberror;
2011
2012         regmap_read(edac->ecc_mgr_map, S10_SYSMGR_ECC_INTSTAT_DERR_OFST,
2013                     &dberror);
2014         regmap_write(edac->ecc_mgr_map, S10_SYSMGR_UE_VAL_OFST, dberror);
2015         if (dberror & S10_DDR0_IRQ_MASK) {
2016                 regmap_read(edac->ecc_mgr_map, A10_DERRADDR_OFST, &err_addr);
2017                 regmap_write(edac->ecc_mgr_map, S10_SYSMGR_UE_ADDR_OFST,
2018                              err_addr);
2019                 edac_printk(KERN_ERR, EDAC_MC,
2020                             "EDAC: [Uncorrectable errors @ 0x%08X]\n\n",
2021                             err_addr);
2022         }
2023
2024         return NOTIFY_DONE;
2025 }
2026
2027 /****************** Arria 10 EDAC Probe Function *********************/
2028 static int altr_edac_a10_probe(struct platform_device *pdev)
2029 {
2030         struct altr_arria10_edac *edac;
2031         struct device_node *child;
2032
2033         edac = devm_kzalloc(&pdev->dev, sizeof(*edac), GFP_KERNEL);
2034         if (!edac)
2035                 return -ENOMEM;
2036
2037         edac->dev = &pdev->dev;
2038         platform_set_drvdata(pdev, edac);
2039         INIT_LIST_HEAD(&edac->a10_ecc_devices);
2040
2041         if (socfpga_is_a10()) {
2042                 edac->ecc_mgr_map =
2043                         syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
2044                                                         "altr,sysmgr-syscon");
2045         } else {
2046                 struct device_node *sysmgr_np;
2047                 struct resource res;
2048                 uintptr_t base;
2049
2050                 sysmgr_np = of_parse_phandle(pdev->dev.of_node,
2051                                              "altr,sysmgr-syscon", 0);
2052                 if (!sysmgr_np) {
2053                         edac_printk(KERN_ERR, EDAC_DEVICE,
2054                                     "Unable to find altr,sysmgr-syscon\n");
2055                         return -ENODEV;
2056                 }
2057
2058                 if (of_address_to_resource(sysmgr_np, 0, &res))
2059                         return -ENOMEM;
2060
2061                 /* Need physical address for SMCC call */
2062                 base = res.start;
2063
2064                 edac->ecc_mgr_map = devm_regmap_init(&pdev->dev, NULL,
2065                                                      (void *)base,
2066                                                      &s10_sdram_regmap_cfg);
2067         }
2068
2069         if (IS_ERR(edac->ecc_mgr_map)) {
2070                 edac_printk(KERN_ERR, EDAC_DEVICE,
2071                             "Unable to get syscon altr,sysmgr-syscon\n");
2072                 return PTR_ERR(edac->ecc_mgr_map);
2073         }
2074
2075         edac->irq_chip.name = pdev->dev.of_node->name;
2076         edac->irq_chip.irq_mask = a10_eccmgr_irq_mask;
2077         edac->irq_chip.irq_unmask = a10_eccmgr_irq_unmask;
2078         edac->domain = irq_domain_add_linear(pdev->dev.of_node, 64,
2079                                              &a10_eccmgr_ic_ops, edac);
2080         if (!edac->domain) {
2081                 dev_err(&pdev->dev, "Error adding IRQ domain\n");
2082                 return -ENOMEM;
2083         }
2084
2085         edac->sb_irq = platform_get_irq(pdev, 0);
2086         if (edac->sb_irq < 0) {
2087                 dev_err(&pdev->dev, "No SBERR IRQ resource\n");
2088                 return edac->sb_irq;
2089         }
2090
2091         irq_set_chained_handler_and_data(edac->sb_irq,
2092                                          altr_edac_a10_irq_handler,
2093                                          edac);
2094
2095         if (socfpga_is_a10()) {
2096                 edac->db_irq = platform_get_irq(pdev, 1);
2097                 if (edac->db_irq < 0) {
2098                         dev_err(&pdev->dev, "No DBERR IRQ resource\n");
2099                         return edac->db_irq;
2100                 }
2101                 irq_set_chained_handler_and_data(edac->db_irq,
2102                                                  altr_edac_a10_irq_handler,
2103                                                  edac);
2104         } else {
2105                 int dberror, err_addr;
2106
2107                 edac->panic_notifier.notifier_call = s10_edac_dberr_handler;
2108                 atomic_notifier_chain_register(&panic_notifier_list,
2109                                                &edac->panic_notifier);
2110
2111                 /* Printout a message if uncorrectable error previously. */
2112                 regmap_read(edac->ecc_mgr_map, S10_SYSMGR_UE_VAL_OFST,
2113                             &dberror);
2114                 if (dberror) {
2115                         regmap_read(edac->ecc_mgr_map, S10_SYSMGR_UE_ADDR_OFST,
2116                                     &err_addr);
2117                         edac_printk(KERN_ERR, EDAC_DEVICE,
2118                                     "Previous Boot UE detected[0x%X] @ 0x%X\n",
2119                                     dberror, err_addr);
2120                         /* Reset the sticky registers */
2121                         regmap_write(edac->ecc_mgr_map,
2122                                      S10_SYSMGR_UE_VAL_OFST, 0);
2123                         regmap_write(edac->ecc_mgr_map,
2124                                      S10_SYSMGR_UE_ADDR_OFST, 0);
2125                 }
2126         }
2127
2128         for_each_child_of_node(pdev->dev.of_node, child) {
2129                 if (!of_device_is_available(child))
2130                         continue;
2131
2132                 if (of_device_is_compatible(child, "altr,socfpga-a10-l2-ecc") || 
2133                     of_device_is_compatible(child, "altr,socfpga-a10-ocram-ecc") ||
2134                     of_device_is_compatible(child, "altr,socfpga-eth-mac-ecc") ||
2135                     of_device_is_compatible(child, "altr,socfpga-nand-ecc") ||
2136                     of_device_is_compatible(child, "altr,socfpga-dma-ecc") ||
2137                     of_device_is_compatible(child, "altr,socfpga-usb-ecc") ||
2138                     of_device_is_compatible(child, "altr,socfpga-qspi-ecc") ||
2139                     of_device_is_compatible(child, "altr,socfpga-sdmmc-ecc"))
2140
2141                         altr_edac_a10_device_add(edac, child);
2142
2143                 else if ((of_device_is_compatible(child, "altr,sdram-edac-a10")) ||
2144                          (of_device_is_compatible(child, "altr,sdram-edac-s10")))
2145                         of_platform_populate(pdev->dev.of_node,
2146                                              altr_sdram_ctrl_of_match,
2147                                              NULL, &pdev->dev);
2148         }
2149
2150         return 0;
2151 }
2152
2153 static const struct of_device_id altr_edac_a10_of_match[] = {
2154         { .compatible = "altr,socfpga-a10-ecc-manager" },
2155         { .compatible = "altr,socfpga-s10-ecc-manager" },
2156         {},
2157 };
2158 MODULE_DEVICE_TABLE(of, altr_edac_a10_of_match);
2159
2160 static struct platform_driver altr_edac_a10_driver = {
2161         .probe =  altr_edac_a10_probe,
2162         .driver = {
2163                 .name = "socfpga_a10_ecc_manager",
2164                 .of_match_table = altr_edac_a10_of_match,
2165         },
2166 };
2167 module_platform_driver(altr_edac_a10_driver);
2168
2169 MODULE_LICENSE("GPL v2");
2170 MODULE_AUTHOR("Thor Thayer");
2171 MODULE_DESCRIPTION("EDAC Driver for Altera Memories");