Lines Matching full:mci
28 static int read_ecc(struct mem_ctl_info *mci) in read_ecc() argument
30 struct loongson_edac_pvt *pvt = mci->pvt_info; in read_ecc()
44 static void edac_check(struct mem_ctl_info *mci) in edac_check() argument
46 struct loongson_edac_pvt *pvt = mci->pvt_info; in edac_check()
49 new = read_ecc(mci); in edac_check()
55 edac_mc_handle_error(HW_EVENT_ERR_CORRECTED, mci, add, in edac_check()
59 static void dimm_config_init(struct mem_ctl_info *mci) in dimm_config_init() argument
68 dimm = edac_get_dimm(mci, 0, 0, 0); in dimm_config_init()
71 "MC#%uChannel#%u_DIMM#%u", mci->mc_idx, 0, 0); in dimm_config_init()
75 static void pvt_init(struct mem_ctl_info *mci, void __iomem *vbase) in pvt_init() argument
77 struct loongson_edac_pvt *pvt = mci->pvt_info; in pvt_init()
80 pvt->last_ce_count = read_ecc(mci); in pvt_init()
86 struct mem_ctl_info *mci; in edac_probe() local
100 mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, in edac_probe()
102 if (mci == NULL) in edac_probe()
105 mci->mc_idx = edac_device_alloc_index(); in edac_probe()
106 mci->mtype_cap = MEM_FLAG_RDDR4; in edac_probe()
107 mci->edac_ctl_cap = EDAC_FLAG_NONE; in edac_probe()
108 mci->edac_cap = EDAC_FLAG_NONE; in edac_probe()
109 mci->mod_name = "loongson_edac.c"; in edac_probe()
110 mci->ctl_name = "loongson_edac_ctl"; in edac_probe()
111 mci->dev_name = "loongson_edac_dev"; in edac_probe()
112 mci->ctl_page_to_phys = NULL; in edac_probe()
113 mci->pdev = &pdev->dev; in edac_probe()
114 mci->error_desc.grain = 8; in edac_probe()
115 mci->edac_check = edac_check; in edac_probe()
117 pvt_init(mci, vbase); in edac_probe()
118 dimm_config_init(mci); in edac_probe()
120 ret = edac_mc_add_mc(mci); in edac_probe()
123 edac_mc_free(mci); in edac_probe()
133 struct mem_ctl_info *mci = edac_mc_del_mc(&pdev->dev); in edac_remove() local
135 if (mci) in edac_remove()
136 edac_mc_free(mci); in edac_remove()