]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
EDAC/mc_sysfs: Increase legacy channel support to 16
authorAvadhut Naik <avadhut.naik@amd.com>
Tue, 16 Sep 2025 20:30:17 +0000 (20:30 +0000)
committerBorislav Petkov (AMD) <bp@alien8.de>
Wed, 17 Sep 2025 09:59:29 +0000 (11:59 +0200)
Newer AMD systems can support up to 16 channels per EDAC "mc" device.
These are detected by the EDAC module running on the device, and the
current EDAC interface is appropriately enumerated.

The legacy EDAC sysfs interface however, provides device attributes for
channels 0 through 11 only. Consequently, the last four channels, 12
through 15, will not be enumerated and will not be visible through the
legacy sysfs interface.

Add additional device attributes to ensure that all 16 channels, if
present, are enumerated by and visible through the legacy EDAC sysfs
interface.

Signed-off-by: Avadhut Naik <avadhut.naik@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/20250916203242.1281036-1-avadhut.naik@amd.com
drivers/edac/edac_mc_sysfs.c

index 0f338adf7d937637bc5ae0f726043800fd1c9763..8689631f1905361ab39584ef31614adbb4ced2e1 100644 (file)
@@ -305,6 +305,14 @@ DEVICE_CHANNEL(ch10_dimm_label, S_IRUGO | S_IWUSR,
        channel_dimm_label_show, channel_dimm_label_store, 10);
 DEVICE_CHANNEL(ch11_dimm_label, S_IRUGO | S_IWUSR,
        channel_dimm_label_show, channel_dimm_label_store, 11);
+DEVICE_CHANNEL(ch12_dimm_label, S_IRUGO | S_IWUSR,
+       channel_dimm_label_show, channel_dimm_label_store, 12);
+DEVICE_CHANNEL(ch13_dimm_label, S_IRUGO | S_IWUSR,
+       channel_dimm_label_show, channel_dimm_label_store, 13);
+DEVICE_CHANNEL(ch14_dimm_label, S_IRUGO | S_IWUSR,
+       channel_dimm_label_show, channel_dimm_label_store, 14);
+DEVICE_CHANNEL(ch15_dimm_label, S_IRUGO | S_IWUSR,
+       channel_dimm_label_show, channel_dimm_label_store, 15);
 
 /* Total possible dynamic DIMM Label attribute file table */
 static struct attribute *dynamic_csrow_dimm_attr[] = {
@@ -320,6 +328,10 @@ static struct attribute *dynamic_csrow_dimm_attr[] = {
        &dev_attr_legacy_ch9_dimm_label.attr.attr,
        &dev_attr_legacy_ch10_dimm_label.attr.attr,
        &dev_attr_legacy_ch11_dimm_label.attr.attr,
+       &dev_attr_legacy_ch12_dimm_label.attr.attr,
+       &dev_attr_legacy_ch13_dimm_label.attr.attr,
+       &dev_attr_legacy_ch14_dimm_label.attr.attr,
+       &dev_attr_legacy_ch15_dimm_label.attr.attr,
        NULL
 };
 
@@ -348,6 +360,14 @@ DEVICE_CHANNEL(ch10_ce_count, S_IRUGO,
                   channel_ce_count_show, NULL, 10);
 DEVICE_CHANNEL(ch11_ce_count, S_IRUGO,
                   channel_ce_count_show, NULL, 11);
+DEVICE_CHANNEL(ch12_ce_count, S_IRUGO,
+                  channel_ce_count_show, NULL, 12);
+DEVICE_CHANNEL(ch13_ce_count, S_IRUGO,
+                  channel_ce_count_show, NULL, 13);
+DEVICE_CHANNEL(ch14_ce_count, S_IRUGO,
+                  channel_ce_count_show, NULL, 14);
+DEVICE_CHANNEL(ch15_ce_count, S_IRUGO,
+                  channel_ce_count_show, NULL, 15);
 
 /* Total possible dynamic ce_count attribute file table */
 static struct attribute *dynamic_csrow_ce_count_attr[] = {
@@ -363,6 +383,10 @@ static struct attribute *dynamic_csrow_ce_count_attr[] = {
        &dev_attr_legacy_ch9_ce_count.attr.attr,
        &dev_attr_legacy_ch10_ce_count.attr.attr,
        &dev_attr_legacy_ch11_ce_count.attr.attr,
+       &dev_attr_legacy_ch12_ce_count.attr.attr,
+       &dev_attr_legacy_ch13_ce_count.attr.attr,
+       &dev_attr_legacy_ch14_ce_count.attr.attr,
+       &dev_attr_legacy_ch15_ce_count.attr.attr,
        NULL
 };