Lines Matching full:mci

165  * error_lock is to protect concurrent writes to the mci->error_desc through
365 static void dmc520_handle_dram_ecc_errors(struct mem_ctl_info *mci, in dmc520_handle_dram_ecc_errors() argument
368 struct dmc520_edac *pvt = mci->pvt_info; in dmc520_handle_dram_ecc_errors()
387 mci, cnt, 0, 0, 0, info.rank, -1, -1, in dmc520_handle_dram_ecc_errors()
392 static irqreturn_t dmc520_edac_dram_ecc_isr(int irq, struct mem_ctl_info *mci, in dmc520_edac_dram_ecc_isr() argument
395 struct dmc520_edac *pvt = mci->pvt_info; in dmc520_edac_dram_ecc_isr()
400 dmc520_handle_dram_ecc_errors(mci, is_ce); in dmc520_edac_dram_ecc_isr()
407 static irqreturn_t dmc520_edac_dram_all_isr(int irq, struct mem_ctl_info *mci, in dmc520_edac_dram_all_isr() argument
410 struct dmc520_edac *pvt = mci->pvt_info; in dmc520_edac_dram_all_isr()
418 irq_ret = dmc520_edac_dram_ecc_isr(irq, mci, true); in dmc520_edac_dram_all_isr()
422 irq_ret = dmc520_edac_dram_ecc_isr(irq, mci, false); in dmc520_edac_dram_all_isr()
429 struct mem_ctl_info *mci = data; in dmc520_isr() local
430 struct dmc520_edac *pvt = mci->pvt_info; in dmc520_isr()
440 return dmc520_edac_dram_all_isr(irq, mci, mask); in dmc520_isr()
443 static void dmc520_init_csrow(struct mem_ctl_info *mci) in dmc520_init_csrow() argument
445 struct dmc520_edac *pvt = mci->pvt_info; in dmc520_init_csrow()
459 for (row = 0; row < mci->nr_csrows; row++) { in dmc520_init_csrow()
460 csi = mci->csrows[row]; in dmc520_init_csrow()
480 struct mem_ctl_info *mci; in dmc520_edac_probe() local
518 mci = edac_mc_alloc(dmc520_mc_idx++, ARRAY_SIZE(layers), layers, sizeof(*pvt)); in dmc520_edac_probe()
519 if (!mci) { in dmc520_edac_probe()
526 pvt = mci->pvt_info; in dmc520_edac_probe()
533 platform_set_drvdata(pdev, mci); in dmc520_edac_probe()
535 mci->pdev = dev; in dmc520_edac_probe()
536 mci->mtype_cap = MEM_FLAG_DDR3 | MEM_FLAG_DDR4; in dmc520_edac_probe()
537 mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED; in dmc520_edac_probe()
538 mci->edac_cap = EDAC_FLAG_SECDED; in dmc520_edac_probe()
539 mci->scrub_cap = SCRUB_FLAG_HW_SRC; in dmc520_edac_probe()
540 mci->scrub_mode = dmc520_get_scrub_type(pvt); in dmc520_edac_probe()
541 mci->ctl_name = EDAC_CTL_NAME; in dmc520_edac_probe()
542 mci->dev_name = dev_name(mci->pdev); in dmc520_edac_probe()
543 mci->mod_name = EDAC_MOD_NAME; in dmc520_edac_probe()
549 dmc520_init_csrow(mci); in dmc520_edac_probe()
562 dev_name(&pdev->dev), mci); in dmc520_edac_probe()
579 ret = edac_mc_add_mc(mci); in dmc520_edac_probe()
595 devm_free_irq(&pdev->dev, pvt->irqs[idx], mci); in dmc520_edac_probe()
597 if (mci) in dmc520_edac_probe()
598 edac_mc_free(mci); in dmc520_edac_probe()
606 struct mem_ctl_info *mci; in dmc520_edac_remove() local
609 mci = platform_get_drvdata(pdev); in dmc520_edac_remove()
610 pvt = mci->pvt_info; in dmc520_edac_remove()
621 devm_free_irq(&pdev->dev, pvt->irqs[idx], mci); in dmc520_edac_remove()
626 edac_mc_free(mci); in dmc520_edac_remove()