Skip to content

Commit e9abd99

Browse files
Avadhut Naikbp3tk0v
authored andcommitted
EDAC/amd64: Generate ctl_name string at runtime
Currently, the ctl_name string is statically assigned based on the family and model of the SOC when the amd64_edac module is loaded. The same, however, is not exactly needed as the string can be generated and assigned at runtime through scnprintf(). Remove all static assignments and generate the string at runtime. Also, cleanup the switch cases which became defunct and consolidate identical cases. Signed-off-by: Avadhut Naik <avadhut.naik@amd.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/20251106015727.1987246-1-avadhut.naik@amd.com
1 parent 3a86608 commit e9abd99

2 files changed

Lines changed: 13 additions & 47 deletions

File tree

drivers/edac/amd64_edac.c

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3766,6 +3766,7 @@ static int per_family_init(struct amd64_pvt *pvt)
37663766
pvt->stepping = boot_cpu_data.x86_stepping;
37673767
pvt->model = boot_cpu_data.x86_model;
37683768
pvt->fam = boot_cpu_data.x86;
3769+
char *tmp_name = NULL;
37693770
pvt->max_mcs = 2;
37703771

37713772
/*
@@ -3779,7 +3780,7 @@ static int per_family_init(struct amd64_pvt *pvt)
37793780

37803781
switch (pvt->fam) {
37813782
case 0xf:
3782-
pvt->ctl_name = (pvt->ext_model >= K8_REV_F) ?
3783+
tmp_name = (pvt->ext_model >= K8_REV_F) ?
37833784
"K8 revF or later" : "K8 revE or earlier";
37843785
pvt->f1_id = PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP;
37853786
pvt->f2_id = PCI_DEVICE_ID_AMD_K8_NB_MEMCTL;
@@ -3788,7 +3789,6 @@ static int per_family_init(struct amd64_pvt *pvt)
37883789
break;
37893790

37903791
case 0x10:
3791-
pvt->ctl_name = "F10h";
37923792
pvt->f1_id = PCI_DEVICE_ID_AMD_10H_NB_MAP;
37933793
pvt->f2_id = PCI_DEVICE_ID_AMD_10H_NB_DRAM;
37943794
pvt->ops->dbam_to_cs = f10_dbam_to_chip_select;
@@ -3797,12 +3797,10 @@ static int per_family_init(struct amd64_pvt *pvt)
37973797
case 0x15:
37983798
switch (pvt->model) {
37993799
case 0x30:
3800-
pvt->ctl_name = "F15h_M30h";
38013800
pvt->f1_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F1;
38023801
pvt->f2_id = PCI_DEVICE_ID_AMD_15H_M30H_NB_F2;
38033802
break;
38043803
case 0x60:
3805-
pvt->ctl_name = "F15h_M60h";
38063804
pvt->f1_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F1;
38073805
pvt->f2_id = PCI_DEVICE_ID_AMD_15H_M60H_NB_F2;
38083806
pvt->ops->dbam_to_cs = f15_m60h_dbam_to_chip_select;
@@ -3811,7 +3809,6 @@ static int per_family_init(struct amd64_pvt *pvt)
38113809
/* Richland is only client */
38123810
return -ENODEV;
38133811
default:
3814-
pvt->ctl_name = "F15h";
38153812
pvt->f1_id = PCI_DEVICE_ID_AMD_15H_NB_F1;
38163813
pvt->f2_id = PCI_DEVICE_ID_AMD_15H_NB_F2;
38173814
pvt->ops->dbam_to_cs = f15_dbam_to_chip_select;
@@ -3822,12 +3819,10 @@ static int per_family_init(struct amd64_pvt *pvt)
38223819
case 0x16:
38233820
switch (pvt->model) {
38243821
case 0x30:
3825-
pvt->ctl_name = "F16h_M30h";
38263822
pvt->f1_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F1;
38273823
pvt->f2_id = PCI_DEVICE_ID_AMD_16H_M30H_NB_F2;
38283824
break;
38293825
default:
3830-
pvt->ctl_name = "F16h";
38313826
pvt->f1_id = PCI_DEVICE_ID_AMD_16H_NB_F1;
38323827
pvt->f2_id = PCI_DEVICE_ID_AMD_16H_NB_F2;
38333828
break;
@@ -3836,76 +3831,51 @@ static int per_family_init(struct amd64_pvt *pvt)
38363831

38373832
case 0x17:
38383833
switch (pvt->model) {
3839-
case 0x10 ... 0x2f:
3840-
pvt->ctl_name = "F17h_M10h";
3841-
break;
38423834
case 0x30 ... 0x3f:
3843-
pvt->ctl_name = "F17h_M30h";
38443835
pvt->max_mcs = 8;
38453836
break;
3846-
case 0x60 ... 0x6f:
3847-
pvt->ctl_name = "F17h_M60h";
3848-
break;
3849-
case 0x70 ... 0x7f:
3850-
pvt->ctl_name = "F17h_M70h";
3851-
break;
38523837
default:
3853-
pvt->ctl_name = "F17h";
38543838
break;
38553839
}
38563840
break;
38573841

38583842
case 0x18:
3859-
pvt->ctl_name = "F18h";
38603843
break;
38613844

38623845
case 0x19:
38633846
switch (pvt->model) {
38643847
case 0x00 ... 0x0f:
3865-
pvt->ctl_name = "F19h";
38663848
pvt->max_mcs = 8;
38673849
break;
38683850
case 0x10 ... 0x1f:
3869-
pvt->ctl_name = "F19h_M10h";
38703851
pvt->max_mcs = 12;
38713852
pvt->flags.zn_regs_v2 = 1;
38723853
break;
3873-
case 0x20 ... 0x2f:
3874-
pvt->ctl_name = "F19h_M20h";
3875-
break;
38763854
case 0x30 ... 0x3f:
38773855
if (pvt->F3->device == PCI_DEVICE_ID_AMD_MI200_DF_F3) {
3878-
pvt->ctl_name = "MI200";
3856+
tmp_name = "MI200";
38793857
pvt->max_mcs = 4;
38803858
pvt->dram_type = MEM_HBM2;
38813859
pvt->gpu_umc_base = 0x50000;
38823860
pvt->ops = &gpu_ops;
38833861
} else {
3884-
pvt->ctl_name = "F19h_M30h";
38853862
pvt->max_mcs = 8;
38863863
}
38873864
break;
3888-
case 0x50 ... 0x5f:
3889-
pvt->ctl_name = "F19h_M50h";
3890-
break;
38913865
case 0x60 ... 0x6f:
3892-
pvt->ctl_name = "F19h_M60h";
38933866
pvt->flags.zn_regs_v2 = 1;
38943867
break;
38953868
case 0x70 ... 0x7f:
3896-
pvt->ctl_name = "F19h_M70h";
38973869
pvt->max_mcs = 4;
38983870
pvt->flags.zn_regs_v2 = 1;
38993871
break;
39003872
case 0x90 ... 0x9f:
3901-
pvt->ctl_name = "F19h_M90h";
39023873
pvt->max_mcs = 4;
39033874
pvt->dram_type = MEM_HBM3;
39043875
pvt->gpu_umc_base = 0x90000;
39053876
pvt->ops = &gpu_ops;
39063877
break;
39073878
case 0xa0 ... 0xaf:
3908-
pvt->ctl_name = "F19h_MA0h";
39093879
pvt->max_mcs = 12;
39103880
pvt->flags.zn_regs_v2 = 1;
39113881
break;
@@ -3915,34 +3885,22 @@ static int per_family_init(struct amd64_pvt *pvt)
39153885
case 0x1A:
39163886
switch (pvt->model) {
39173887
case 0x00 ... 0x1f:
3918-
pvt->ctl_name = "F1Ah";
39193888
pvt->max_mcs = 12;
39203889
pvt->flags.zn_regs_v2 = 1;
39213890
break;
39223891
case 0x40 ... 0x4f:
3923-
pvt->ctl_name = "F1Ah_M40h";
39243892
pvt->flags.zn_regs_v2 = 1;
39253893
break;
39263894
case 0x50 ... 0x57:
3927-
pvt->ctl_name = "F1Ah_M50h";
3895+
case 0xc0 ... 0xc7:
39283896
pvt->max_mcs = 16;
39293897
pvt->flags.zn_regs_v2 = 1;
39303898
break;
39313899
case 0x90 ... 0x9f:
3932-
pvt->ctl_name = "F1Ah_M90h";
3933-
pvt->max_mcs = 8;
3934-
pvt->flags.zn_regs_v2 = 1;
3935-
break;
39363900
case 0xa0 ... 0xaf:
3937-
pvt->ctl_name = "F1Ah_MA0h";
39383901
pvt->max_mcs = 8;
39393902
pvt->flags.zn_regs_v2 = 1;
39403903
break;
3941-
case 0xc0 ... 0xc7:
3942-
pvt->ctl_name = "F1Ah_MC0h";
3943-
pvt->max_mcs = 16;
3944-
pvt->flags.zn_regs_v2 = 1;
3945-
break;
39463904
}
39473905
break;
39483906

@@ -3951,6 +3909,12 @@ static int per_family_init(struct amd64_pvt *pvt)
39513909
return -ENODEV;
39523910
}
39533911

3912+
if (tmp_name)
3913+
scnprintf(pvt->ctl_name, sizeof(pvt->ctl_name), tmp_name);
3914+
else
3915+
scnprintf(pvt->ctl_name, sizeof(pvt->ctl_name), "F%02Xh_M%02Xh",
3916+
pvt->fam, pvt->model);
3917+
39543918
return 0;
39553919
}
39563920

drivers/edac/amd64_edac.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@
101101
#define ON true
102102
#define OFF false
103103

104+
#define MAX_CTL_NAMELEN 19
105+
104106
/*
105107
* PCI-defined configuration space registers
106108
*/
@@ -362,7 +364,7 @@ struct amd64_pvt {
362364
/* x4, x8, or x16 syndromes in use */
363365
u8 ecc_sym_sz;
364366

365-
const char *ctl_name;
367+
char ctl_name[MAX_CTL_NAMELEN];
366368
u16 f1_id, f2_id;
367369
/* Maximum number of memory controllers per die/node. */
368370
u8 max_mcs;

0 commit comments

Comments
 (0)