[AMD Official Use Only - General] Reviewed-by: Tao Zhou <tao.zhou1@xxxxxxx> > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Yang > Wang > Sent: Friday, April 12, 2024 10:54 AM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Zhang, Hawking <Hawking.Zhang@xxxxxxx>; Zhou1, Tao > <Tao.Zhou1@xxxxxxx>; Wang, Yang(Kevin) <KevinYang.Wang@xxxxxxx> > Subject: [PATCH] drm/amdgpu: add new aca smu callback func > parse_error_code{} > > add new aca smu callback parse_error_code{} to avoid specific asic check in > amdgpu_aca.c file > > Signed-off-by: Yang Wang <kevinyang.wang@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c | 23 +++++++------------ > drivers/gpu/drm/amd/amdgpu/amdgpu_aca.h | 1 + > .../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 13 +++++++++++ > 3 files changed, 22 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c > index cb6a40a042e1..d1059e4d54d0 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c > @@ -753,23 +753,13 @@ int aca_bank_info_decode(struct aca_bank *bank, > struct aca_bank_info *info) > > static int aca_bank_get_error_code(struct amdgpu_device *adev, struct > aca_bank *bank) { > - int error_code; > - > - switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { > - case IP_VERSION(13, 0, 6): > - if (!(adev->flags & AMD_IS_APU) && adev->pm.fw_version >= > 0x00555600) { > - error_code = > ACA_REG__SYND__ERRORINFORMATION(bank->regs[ACA_REG_IDX_SYND]); > - return error_code & 0xff; > - } > - break; > - default: > - break; > - } > + struct amdgpu_aca *aca = &adev->aca; > + const struct aca_smu_funcs *smu_funcs = aca->smu_funcs; > > - /* NOTE: the true error code is encoded in status.errorcode[0:7] */ > - error_code = ACA_REG__STATUS__ERRORCODE(bank- > >regs[ACA_REG_IDX_STATUS]); > + if (!smu_funcs || !smu_funcs->parse_error_code) > + return -EOPNOTSUPP; > > - return error_code & 0xff; > + return smu_funcs->parse_error_code(adev, bank); > } > > int aca_bank_check_error_codes(struct amdgpu_device *adev, struct aca_bank > *bank, int *err_codes, int size) @@ -780,6 +770,9 @@ int > aca_bank_check_error_codes(struct amdgpu_device *adev, struct aca_bank > *bank > return -EINVAL; > > error_code = aca_bank_get_error_code(adev, bank); > + if (error_code < 0) > + return error_code; > + > for (i = 0; i < size; i++) { > if (err_codes[i] == error_code) > return 0; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.h > index 3765843ea648..5ef6b745f222 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.h > @@ -173,6 +173,7 @@ struct aca_smu_funcs { > int (*set_debug_mode)(struct amdgpu_device *adev, bool enable); > int (*get_valid_aca_count)(struct amdgpu_device *adev, enum > aca_smu_type type, u32 *count); > int (*get_valid_aca_bank)(struct amdgpu_device *adev, enum > aca_smu_type type, int idx, struct aca_bank *bank); > + int (*parse_error_code)(struct amdgpu_device *adev, struct aca_bank > +*bank); > }; > > struct amdgpu_aca { > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c > index d6d5be26e222..59e5c6256ea2 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c > @@ -3119,12 +3119,25 @@ static int aca_smu_get_valid_aca_bank(struct > amdgpu_device *adev, > return 0; > } > > +static int aca_smu_parse_error_code(struct amdgpu_device *adev, struct > +aca_bank *bank) { > + int error_code; > + > + if (!(adev->flags & AMD_IS_APU) && adev->pm.fw_version >= > 0x00555600) > + error_code = ACA_REG__SYND__ERRORINFORMATION(bank- > >regs[ACA_REG_IDX_SYND]); > + else > + error_code = > +ACA_REG__STATUS__ERRORCODE(bank->regs[ACA_REG_IDX_STATUS]); > + > + return error_code & 0xff; > +} > + > static const struct aca_smu_funcs smu_v13_0_6_aca_smu_funcs = { > .max_ue_bank_count = 12, > .max_ce_bank_count = 12, > .set_debug_mode = aca_smu_set_debug_mode, > .get_valid_aca_count = aca_smu_get_valid_aca_count, > .get_valid_aca_bank = aca_smu_get_valid_aca_bank, > + .parse_error_code = aca_smu_parse_error_code, > }; > > static int smu_v13_0_6_select_xgmi_plpd_policy(struct smu_context *smu, > -- > 2.34.1