Skip to content

Commit 637f60e

Browse files
muralimk-amdbp3tk0v
authored andcommitted
EDAC/amd64: Split prep_chip_selects() into dct/umc functions
Call them from their respective hw_info_get() function. Avoid the need for family/model-based function pointers. Add the calls before reading hardware registers from the memory controllers, since the number of chip select bases and masks needs to be known first. [ Yazen: rebased/reworked patch and reworded commit message. ] Signed-off-by: Muralidhara M K <muralidhara.mk@amd.com> Co-developed-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com> Signed-off-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com> Co-developed-by: Yazen Ghannam <yazen.ghannam@amd.com> Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20230127170419.1824692-13-yazen.ghannam@amd.com
1 parent 9a97a7f commit 637f60e

1 file changed

Lines changed: 13 additions & 11 deletions

File tree

drivers/edac/amd64_edac.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,28 +1614,30 @@ static void dump_misc_regs(struct amd64_pvt *pvt)
16141614
/*
16151615
* See BKDG, F2x[1,0][5C:40], F2[1,0][6C:60]
16161616
*/
1617-
static void prep_chip_selects(struct amd64_pvt *pvt)
1617+
static void dct_prep_chip_selects(struct amd64_pvt *pvt)
16181618
{
16191619
if (pvt->fam == 0xf && pvt->ext_model < K8_REV_F) {
16201620
pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
16211621
pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 8;
16221622
} else if (pvt->fam == 0x15 && pvt->model == 0x30) {
16231623
pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 4;
16241624
pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 2;
1625-
} else if (pvt->fam >= 0x17) {
1626-
int umc;
1627-
1628-
for_each_umc(umc) {
1629-
pvt->csels[umc].b_cnt = 4;
1630-
pvt->csels[umc].m_cnt = pvt->flags.zn_regs_v2 ? 4 : 2;
1631-
}
1632-
16331625
} else {
16341626
pvt->csels[0].b_cnt = pvt->csels[1].b_cnt = 8;
16351627
pvt->csels[0].m_cnt = pvt->csels[1].m_cnt = 4;
16361628
}
16371629
}
16381630

1631+
static void umc_prep_chip_selects(struct amd64_pvt *pvt)
1632+
{
1633+
int umc;
1634+
1635+
for_each_umc(umc) {
1636+
pvt->csels[umc].b_cnt = 4;
1637+
pvt->csels[umc].m_cnt = pvt->flags.zn_regs_v2 ? 4 : 2;
1638+
}
1639+
}
1640+
16391641
static void read_umc_base_mask(struct amd64_pvt *pvt)
16401642
{
16411643
u32 umc_base_reg, umc_base_reg_sec;
@@ -1694,8 +1696,6 @@ static void read_dct_base_mask(struct amd64_pvt *pvt)
16941696
{
16951697
int cs;
16961698

1697-
prep_chip_selects(pvt);
1698-
16991699
if (pvt->umc)
17001700
return read_umc_base_mask(pvt);
17011701

@@ -3665,6 +3665,7 @@ static int dct_hw_info_get(struct amd64_pvt *pvt)
36653665
if (ret)
36663666
return ret;
36673667

3668+
dct_prep_chip_selects(pvt);
36683669
read_mc_regs(pvt);
36693670

36703671
return 0;
@@ -3676,6 +3677,7 @@ static int umc_hw_info_get(struct amd64_pvt *pvt)
36763677
if (!pvt->umc)
36773678
return -ENOMEM;
36783679

3680+
umc_prep_chip_selects(pvt);
36793681
read_mc_regs(pvt);
36803682

36813683
return 0;

0 commit comments

Comments
 (0)