Re: [PATCH 09/10] drm/amdgpu: Add interface for TOS reload cases

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

 



On Mon, Sep 2, 2024 at 3:34 AM Lijo Lazar <lijo.lazar@xxxxxxx> wrote:
>
> Add interface to check if a different TOS needs to be loaded than the
> one which is which is already active on the SOC. Presently the interface
> is restricted to specific variants of PSPv13.0.
>
> Signed-off-by: Lijo Lazar <lijo.lazar@xxxxxxx>

Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 13 +++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h |  3 +++
>  drivers/gpu/drm/amd/amdgpu/psp_v13_0.c  | 25 +++++++++++++++++++++++++
>  3 files changed, 41 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> index 189574d53ebd..3623bea2b1e8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> @@ -2264,6 +2264,19 @@ bool amdgpu_psp_get_ras_capability(struct psp_context *psp)
>         }
>  }
>
> +bool amdgpu_psp_tos_reload_needed(struct amdgpu_device *adev)
> +{
> +       struct psp_context *psp = &adev->psp;
> +
> +       if (amdgpu_sriov_vf(adev))
> +               return false;
> +
> +       if (psp->funcs && psp->funcs->is_reload_needed)
> +               return psp->funcs->is_reload_needed(psp);
> +
> +       return false;
> +}
> +
>  static int psp_hw_start(struct psp_context *psp)
>  {
>         struct amdgpu_device *adev = psp->adev;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
> index 74a96516c913..23581c44e625 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
> @@ -138,6 +138,7 @@ struct psp_funcs {
>         int (*vbflash_stat)(struct psp_context *psp);
>         int (*fatal_error_recovery_quirk)(struct psp_context *psp);
>         bool (*get_ras_capability)(struct psp_context *psp);
> +       bool (*is_reload_needed)(struct psp_context *psp);
>  };
>
>  struct ta_funcs {
> @@ -553,4 +554,6 @@ int is_psp_fw_valid(struct psp_bin_desc bin);
>
>  int amdgpu_psp_wait_for_bootloader(struct amdgpu_device *adev);
>  bool amdgpu_psp_get_ras_capability(struct psp_context *psp);
> +bool amdgpu_psp_tos_reload_needed(struct amdgpu_device *adev);
> +
>  #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
> index 1251ee38a676..035e0ceda4c2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c
> @@ -807,6 +807,30 @@ static bool psp_v13_0_get_ras_capability(struct psp_context *psp)
>         }
>  }
>
> +static bool psp_v13_0_is_reload_needed(struct psp_context *psp)
> +{
> +       uint32_t ucode_ver;
> +
> +       if (!psp_v13_0_is_sos_alive(psp))
> +               return false;
> +
> +       /* Restrict reload support only to specific IP versions */
> +       switch (amdgpu_ip_version(psp->adev, MP0_HWIP, 0)) {
> +       case IP_VERSION(13, 0, 2):
> +       case IP_VERSION(13, 0, 6):
> +       case IP_VERSION(13, 0, 14):
> +               /* TOS version read from microcode header */
> +               ucode_ver = psp->sos.fw_version;
> +               /* Read TOS version from hardware */
> +               psp_v13_0_init_sos_version(psp);
> +               return (ucode_ver != psp->sos.fw_version);
> +       default:
> +               return false;
> +       }
> +
> +       return false;
> +}
> +
>  static const struct psp_funcs psp_v13_0_funcs = {
>         .init_microcode = psp_v13_0_init_microcode,
>         .wait_for_bootloader = psp_v13_0_wait_for_bootloader_steady_state,
> @@ -830,6 +854,7 @@ static const struct psp_funcs psp_v13_0_funcs = {
>         .vbflash_stat = psp_v13_0_vbflash_status,
>         .fatal_error_recovery_quirk = psp_v13_0_fatal_error_recovery_quirk,
>         .get_ras_capability = psp_v13_0_get_ras_capability,
> +       .is_reload_needed = psp_v13_0_is_reload_needed,
>  };
>
>  void psp_v13_0_set_psp_funcs(struct psp_context *psp)
> --
> 2.25.1
>




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

  Powered by Linux