[PATCH] drm/amdgpu: Fix register access violation

Zhou1, Tao Tao.Zhou1 at amd.com
Fri Jun 21 03:34:46 UTC 2024


[AMD Official Use Only - AMD Internal Distribution Only]

Reviewed-by: Tao Zhou <tao.zhou1 at amd.com>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Hawking
> Zhang
> Sent: Friday, June 21, 2024 11:30 AM
> To: amd-gfx at lists.freedesktop.org; Zhou1, Tao <Tao.Zhou1 at amd.com>
> Cc: Zhang, Hawking <Hawking.Zhang at amd.com>
> Subject: [PATCH] drm/amdgpu: Fix register access violation
>
> fault_status is read only register. fault_cntl is not accessible from guest
> environment.
>
> Signed-off-by: Hawking Zhang <Hawking.Zhang at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c | 8 +++++---
>  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c    | 3 ++-
>  drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c  | 8 +++++---
>  3 files changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
> b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
> index e14acab5cceb..72109abe7c86 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
> @@ -629,9 +629,11 @@ static bool
> gfxhub_v1_2_query_utcl2_poison_status(struct amdgpu_device *adev,
>
>       status = RREG32_SOC15(GC, GET_INST(GC, xcc_id),
> regVM_L2_PROTECTION_FAULT_STATUS);
>       fed = REG_GET_FIELD(status, VM_L2_PROTECTION_FAULT_STATUS,
> FED);
> -     /* reset page fault status */
> -     WREG32_P(SOC15_REG_OFFSET(GC, GET_INST(GC, xcc_id),
> -                     regVM_L2_PROTECTION_FAULT_STATUS), 1, ~1);
> +     if (!amdgpu_sriov_vf(adev)) {
> +             /* clear page fault status and address */
> +             WREG32_P(SOC15_REG_OFFSET(GC, GET_INST(GC, xcc_id),
> +                      regVM_L2_PROTECTION_FAULT_CNTL), 1, ~1);
> +     }
>
>       return fed;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index 88b4644f8e96..b73136d390cc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -672,7 +672,8 @@ static int gmc_v9_0_process_interrupt(struct
> amdgpu_device *adev,
>           (amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(9, 4, 2)))
>               return 0;
>
> -     WREG32_P(hub->vm_l2_pro_fault_cntl, 1, ~1);
> +     if (!amdgpu_sriov_vf(adev))
> +             WREG32_P(hub->vm_l2_pro_fault_cntl, 1, ~1);
>
>       amdgpu_vm_update_fault_cache(adev, entry->pasid, addr, status,
> vmhub);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c
> b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c
> index 7a1ff298417a..8d7267a013d2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c
> @@ -566,9 +566,11 @@ static bool
> mmhub_v1_8_query_utcl2_poison_status(struct amdgpu_device *adev,
>
>       status = RREG32_SOC15(MMHUB, hub_inst,
> regVM_L2_PROTECTION_FAULT_STATUS);
>       fed = REG_GET_FIELD(status, VM_L2_PROTECTION_FAULT_STATUS,
> FED);
> -     /* reset page fault status */
> -     WREG32_P(SOC15_REG_OFFSET(MMHUB, hub_inst,
> -                     regVM_L2_PROTECTION_FAULT_STATUS), 1, ~1);
> +     if (!amdgpu_sriov_vf(adev)) {
> +             /* clear page fault status and address */
> +             WREG32_P(SOC15_REG_OFFSET(MMHUB, hub_inst,
> +                      regVM_L2_PROTECTION_FAULT_STATUS), 1, ~1);
> +     }
>
>       return fed;
>  }
> --
> 2.17.1



More information about the amd-gfx mailing list