|
@@ -766,6 +766,23 @@ static ssize_t mci_size_mb_show(struct device *dev,
|
|
|
return sprintf(data, "%u\n", PAGES_TO_MiB(total_pages));
|
|
|
}
|
|
|
|
|
|
+static ssize_t mci_max_location_show(struct device *dev,
|
|
|
+ struct device_attribute *mattr,
|
|
|
+ char *data)
|
|
|
+{
|
|
|
+ struct mem_ctl_info *mci = to_mci(dev);
|
|
|
+ int i;
|
|
|
+ char *p = data;
|
|
|
+
|
|
|
+ for (i = 0; i < mci->n_layers; i++) {
|
|
|
+ p += sprintf(p, "%s %d ",
|
|
|
+ edac_layer_name[mci->layers[i].type],
|
|
|
+ mci->layers[i].size - 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ return p - data;
|
|
|
+}
|
|
|
+
|
|
|
/* default Control file */
|
|
|
DEVICE_ATTR(reset_counters, S_IWUSR, NULL, mci_reset_counters_store);
|
|
|
|
|
@@ -777,6 +794,7 @@ DEVICE_ATTR(ue_noinfo_count, S_IRUGO, mci_ue_noinfo_show, NULL);
|
|
|
DEVICE_ATTR(ce_noinfo_count, S_IRUGO, mci_ce_noinfo_show, NULL);
|
|
|
DEVICE_ATTR(ue_count, S_IRUGO, mci_ue_count_show, NULL);
|
|
|
DEVICE_ATTR(ce_count, S_IRUGO, mci_ce_count_show, NULL);
|
|
|
+DEVICE_ATTR(max_location, S_IRUGO, mci_max_location_show, NULL);
|
|
|
|
|
|
/* memory scrubber attribute file */
|
|
|
DEVICE_ATTR(sdram_scrub_rate, S_IRUGO | S_IWUSR, mci_sdram_scrub_rate_show,
|
|
@@ -792,6 +810,7 @@ static struct attribute *mci_attrs[] = {
|
|
|
&dev_attr_ue_count.attr,
|
|
|
&dev_attr_ce_count.attr,
|
|
|
&dev_attr_sdram_scrub_rate.attr,
|
|
|
+ &dev_attr_max_location.attr,
|
|
|
NULL
|
|
|
};
|
|
|
|