|
@@ -569,6 +569,40 @@ static ssize_t dimmdev_edac_mode_show(struct device *dev,
|
|
|
return sprintf(data, "%s\n", edac_caps[dimm->edac_mode]);
|
|
|
}
|
|
|
|
|
|
+static ssize_t dimmdev_ce_count_show(struct device *dev,
|
|
|
+ struct device_attribute *mattr,
|
|
|
+ char *data)
|
|
|
+{
|
|
|
+ struct dimm_info *dimm = to_dimm(dev);
|
|
|
+ u32 count;
|
|
|
+ int off;
|
|
|
+
|
|
|
+ off = EDAC_DIMM_OFF(dimm->mci->layers,
|
|
|
+ dimm->mci->n_layers,
|
|
|
+ dimm->location[0],
|
|
|
+ dimm->location[1],
|
|
|
+ dimm->location[2]);
|
|
|
+ count = dimm->mci->ce_per_layer[dimm->mci->n_layers-1][off];
|
|
|
+ return sprintf(data, "%u\n", count);
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t dimmdev_ue_count_show(struct device *dev,
|
|
|
+ struct device_attribute *mattr,
|
|
|
+ char *data)
|
|
|
+{
|
|
|
+ struct dimm_info *dimm = to_dimm(dev);
|
|
|
+ u32 count;
|
|
|
+ int off;
|
|
|
+
|
|
|
+ off = EDAC_DIMM_OFF(dimm->mci->layers,
|
|
|
+ dimm->mci->n_layers,
|
|
|
+ dimm->location[0],
|
|
|
+ dimm->location[1],
|
|
|
+ dimm->location[2]);
|
|
|
+ count = dimm->mci->ue_per_layer[dimm->mci->n_layers-1][off];
|
|
|
+ return sprintf(data, "%u\n", count);
|
|
|
+}
|
|
|
+
|
|
|
/* dimm/rank attribute files */
|
|
|
static DEVICE_ATTR(dimm_label, S_IRUGO | S_IWUSR,
|
|
|
dimmdev_label_show, dimmdev_label_store);
|
|
@@ -577,6 +611,8 @@ static DEVICE_ATTR(size, S_IRUGO, dimmdev_size_show, NULL);
|
|
|
static DEVICE_ATTR(dimm_mem_type, S_IRUGO, dimmdev_mem_type_show, NULL);
|
|
|
static DEVICE_ATTR(dimm_dev_type, S_IRUGO, dimmdev_dev_type_show, NULL);
|
|
|
static DEVICE_ATTR(dimm_edac_mode, S_IRUGO, dimmdev_edac_mode_show, NULL);
|
|
|
+static DEVICE_ATTR(dimm_ce_count, S_IRUGO, dimmdev_ce_count_show, NULL);
|
|
|
+static DEVICE_ATTR(dimm_ue_count, S_IRUGO, dimmdev_ue_count_show, NULL);
|
|
|
|
|
|
/* attributes of the dimm<id>/rank<id> object */
|
|
|
static struct attribute *dimm_attrs[] = {
|
|
@@ -586,6 +622,8 @@ static struct attribute *dimm_attrs[] = {
|
|
|
&dev_attr_dimm_mem_type.attr,
|
|
|
&dev_attr_dimm_dev_type.attr,
|
|
|
&dev_attr_dimm_edac_mode.attr,
|
|
|
+ &dev_attr_dimm_ce_count.attr,
|
|
|
+ &dev_attr_dimm_ue_count.attr,
|
|
|
NULL,
|
|
|
};
|
|
|
|