[PATCH] drm/amdgpu: add new aca smu callback func parse_error_code{}
Zhou1, Tao
Tao.Zhou1 at amd.com
Fri Apr 12 03:40:16 UTC 2024
[AMD Official Use Only - General]
Reviewed-by: Tao Zhou <tao.zhou1 at amd.com>
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Yang
> Wang
> Sent: Friday, April 12, 2024 10:54 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Zhang, Hawking <Hawking.Zhang at amd.com>; Zhou1, Tao
> <Tao.Zhou1 at amd.com>; Wang, Yang(Kevin) <KevinYang.Wang at amd.com>
> 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 at amd.com>
> ---
> 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
More information about the amd-gfx
mailing list