Lines Matching refs:mci

403 static int edac_create_csrow_object(struct mem_ctl_info *mci,  in edac_create_csrow_object()  argument
410 csrow->dev.bus = mci->bus; in edac_create_csrow_object()
413 csrow->dev.parent = &mci->dev; in edac_create_csrow_object()
414 csrow->mci = mci; in edac_create_csrow_object()
425 static int edac_create_csrow_objects(struct mem_ctl_info *mci) in edac_create_csrow_objects() argument
430 for (i = 0; i < mci->nr_csrows; i++) { in edac_create_csrow_objects()
431 csrow = mci->csrows[i]; in edac_create_csrow_objects()
434 err = edac_create_csrow_object(mci, mci->csrows[i], i); in edac_create_csrow_objects()
446 csrow = mci->csrows[i]; in edac_create_csrow_objects()
449 put_device(&mci->csrows[i]->dev); in edac_create_csrow_objects()
455 static void edac_delete_csrow_objects(struct mem_ctl_info *mci) in edac_delete_csrow_objects() argument
460 for (i = mci->nr_csrows - 1; i >= 0; i--) { in edac_delete_csrow_objects()
461 csrow = mci->csrows[i]; in edac_delete_csrow_objects()
464 device_unregister(&mci->csrows[i]->dev); in edac_delete_csrow_objects()
588 static int edac_create_dimm_object(struct mem_ctl_info *mci, in edac_create_dimm_object() argument
593 dimm->mci = mci; in edac_create_dimm_object()
596 dimm->dev.bus = mci->bus; in edac_create_dimm_object()
599 dimm->dev.parent = &mci->dev; in edac_create_dimm_object()
600 if (mci->csbased) in edac_create_dimm_object()
605 pm_runtime_forbid(&mci->dev); in edac_create_dimm_object()
624 struct mem_ctl_info *mci = to_mci(dev); in mci_reset_counters_store() local
626 mci->ue_mc = 0; in mci_reset_counters_store()
627 mci->ce_mc = 0; in mci_reset_counters_store()
628 mci->ue_noinfo_count = 0; in mci_reset_counters_store()
629 mci->ce_noinfo_count = 0; in mci_reset_counters_store()
631 for (row = 0; row < mci->nr_csrows; row++) { in mci_reset_counters_store()
632 struct csrow_info *ri = mci->csrows[row]; in mci_reset_counters_store()
642 for (i = 0; i < mci->n_layers; i++) { in mci_reset_counters_store()
643 cnt *= mci->layers[i].size; in mci_reset_counters_store()
644 memset(mci->ce_per_layer[i], 0, cnt * sizeof(u32)); in mci_reset_counters_store()
645 memset(mci->ue_per_layer[i], 0, cnt * sizeof(u32)); in mci_reset_counters_store()
648 mci->start_time = jiffies; in mci_reset_counters_store()
665 struct mem_ctl_info *mci = to_mci(dev); in mci_sdram_scrub_rate_store() local
672 new_bw = mci->set_sdram_scrub_rate(mci, bandwidth); in mci_sdram_scrub_rate_store()
689 struct mem_ctl_info *mci = to_mci(dev); in mci_sdram_scrub_rate_show() local
692 bandwidth = mci->get_sdram_scrub_rate(mci); in mci_sdram_scrub_rate_show()
706 struct mem_ctl_info *mci = to_mci(dev); in mci_ue_count_show() local
708 return sprintf(data, "%d\n", mci->ue_mc); in mci_ue_count_show()
715 struct mem_ctl_info *mci = to_mci(dev); in mci_ce_count_show() local
717 return sprintf(data, "%d\n", mci->ce_mc); in mci_ce_count_show()
724 struct mem_ctl_info *mci = to_mci(dev); in mci_ce_noinfo_show() local
726 return sprintf(data, "%d\n", mci->ce_noinfo_count); in mci_ce_noinfo_show()
733 struct mem_ctl_info *mci = to_mci(dev); in mci_ue_noinfo_show() local
735 return sprintf(data, "%d\n", mci->ue_noinfo_count); in mci_ue_noinfo_show()
742 struct mem_ctl_info *mci = to_mci(dev); in mci_seconds_show() local
744 return sprintf(data, "%ld\n", (jiffies - mci->start_time) / HZ); in mci_seconds_show()
751 struct mem_ctl_info *mci = to_mci(dev); in mci_ctl_name_show() local
753 return sprintf(data, "%s\n", mci->ctl_name); in mci_ctl_name_show()
760 struct mem_ctl_info *mci = to_mci(dev); in mci_size_mb_show() local
763 for (csrow_idx = 0; csrow_idx < mci->nr_csrows; csrow_idx++) { in mci_size_mb_show()
764 struct csrow_info *csrow = mci->csrows[csrow_idx]; in mci_size_mb_show()
780 struct mem_ctl_info *mci = to_mci(dev); in mci_max_location_show() local
784 for (i = 0; i < mci->n_layers; i++) { in mci_max_location_show()
786 edac_layer_name[mci->layers[i].type], in mci_max_location_show()
787 mci->layers[i].size - 1); in mci_max_location_show()
799 struct mem_ctl_info *mci = to_mci(dev); in edac_fake_inject_write() local
801 u16 errcount = mci->fake_inject_count; in edac_fake_inject_write()
806 type = mci->fake_inject_ue ? HW_EVENT_ERR_UNCORRECTED in edac_fake_inject_write()
814 mci->fake_inject_layer[0], in edac_fake_inject_write()
815 mci->fake_inject_layer[1], in edac_fake_inject_write()
816 mci->fake_inject_layer[2] in edac_fake_inject_write()
818 edac_mc_handle_error(type, mci, errcount, 0, 0, 0, in edac_fake_inject_write()
819 mci->fake_inject_layer[0], in edac_fake_inject_write()
820 mci->fake_inject_layer[1], in edac_fake_inject_write()
821 mci->fake_inject_layer[2], in edac_fake_inject_write()
869 struct mem_ctl_info *mci = to_mci(dev); in mci_attr_is_visible() local
874 if (mci->get_sdram_scrub_rate) in mci_attr_is_visible()
876 if (mci->set_sdram_scrub_rate) in mci_attr_is_visible()
893 struct mem_ctl_info *mci = container_of(dev, struct mem_ctl_info, dev); in mci_attr_release() local
896 kfree(mci); in mci_attr_release()
922 static int edac_create_debug_nodes(struct mem_ctl_info *mci) in edac_create_debug_nodes() argument
931 d = debugfs_create_dir(mci->dev.kobj.name, edac_debugfs); in edac_create_debug_nodes()
936 for (i = 0; i < mci->n_layers; i++) { in edac_create_debug_nodes()
938 edac_layer_name[mci->layers[i].type]); in edac_create_debug_nodes()
940 &mci->fake_inject_layer[i]); in edac_create_debug_nodes()
946 &mci->fake_inject_ue); in edac_create_debug_nodes()
951 &mci->fake_inject_count); in edac_create_debug_nodes()
956 &mci->dev, in edac_create_debug_nodes()
961 mci->debugfs = parent; in edac_create_debug_nodes()
964 debugfs_remove(mci->debugfs); in edac_create_debug_nodes()
977 int edac_create_sysfs_mci_device(struct mem_ctl_info *mci, in edac_create_sysfs_mci_device() argument
987 name = kasprintf(GFP_KERNEL, "mc%d", mci->mc_idx); in edac_create_sysfs_mci_device()
991 mci->bus->name = name; in edac_create_sysfs_mci_device()
993 edac_dbg(0, "creating bus %s\n", mci->bus->name); in edac_create_sysfs_mci_device()
995 err = bus_register(mci->bus); in edac_create_sysfs_mci_device()
1002 mci->dev.type = &mci_attr_type; in edac_create_sysfs_mci_device()
1003 device_initialize(&mci->dev); in edac_create_sysfs_mci_device()
1005 mci->dev.parent = mci_pdev; in edac_create_sysfs_mci_device()
1006 mci->dev.bus = mci->bus; in edac_create_sysfs_mci_device()
1007 mci->dev.groups = groups; in edac_create_sysfs_mci_device()
1008 dev_set_name(&mci->dev, "mc%d", mci->mc_idx); in edac_create_sysfs_mci_device()
1009 dev_set_drvdata(&mci->dev, mci); in edac_create_sysfs_mci_device()
1010 pm_runtime_forbid(&mci->dev); in edac_create_sysfs_mci_device()
1012 edac_dbg(0, "creating device %s\n", dev_name(&mci->dev)); in edac_create_sysfs_mci_device()
1013 err = device_add(&mci->dev); in edac_create_sysfs_mci_device()
1015 edac_dbg(1, "failure: create device %s\n", dev_name(&mci->dev)); in edac_create_sysfs_mci_device()
1022 for (i = 0; i < mci->tot_dimms; i++) { in edac_create_sysfs_mci_device()
1023 struct dimm_info *dimm = mci->dimms[i]; in edac_create_sysfs_mci_device()
1032 for (lay = 0; lay < mci->n_layers; lay++) in edac_create_sysfs_mci_device()
1034 edac_layer_name[mci->layers[lay].type], in edac_create_sysfs_mci_device()
1039 err = edac_create_dimm_object(mci, dimm, i); in edac_create_sysfs_mci_device()
1047 err = edac_create_csrow_objects(mci); in edac_create_sysfs_mci_device()
1053 edac_create_debug_nodes(mci); in edac_create_sysfs_mci_device()
1059 struct dimm_info *dimm = mci->dimms[i]; in edac_create_sysfs_mci_device()
1065 device_unregister(&mci->dev); in edac_create_sysfs_mci_device()
1067 bus_unregister(mci->bus); in edac_create_sysfs_mci_device()
1076 void edac_remove_sysfs_mci_device(struct mem_ctl_info *mci) in edac_remove_sysfs_mci_device() argument
1083 debugfs_remove(mci->debugfs); in edac_remove_sysfs_mci_device()
1086 edac_delete_csrow_objects(mci); in edac_remove_sysfs_mci_device()
1089 for (i = 0; i < mci->tot_dimms; i++) { in edac_remove_sysfs_mci_device()
1090 struct dimm_info *dimm = mci->dimms[i]; in edac_remove_sysfs_mci_device()
1098 void edac_unregister_sysfs(struct mem_ctl_info *mci) in edac_unregister_sysfs() argument
1100 const char *name = mci->bus->name; in edac_unregister_sysfs()
1102 edac_dbg(1, "Unregistering device %s\n", dev_name(&mci->dev)); in edac_unregister_sysfs()
1103 device_unregister(&mci->dev); in edac_unregister_sysfs()
1104 bus_unregister(mci->bus); in edac_unregister_sysfs()