RE: [PATCH] drm/amdgpu: add new aca smu callback func parse_error_code{}

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[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





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux