[PATCH] drm/amdgpu: Update PTE flags with TF enabled

Christian König christian.koenig at amd.com
Wed Sep 14 07:37:33 UTC 2022


Am 14.09.22 um 00:16 schrieb Mukul Joshi:
> This patch updates the PTE flags when translate further (TF) is
> enabled:
> - With translate_further enabled, invalid PTEs can be 0. Reading
>    consecutive invalid PTEs as 0 is considered a fault. To prevent
>    this, ensure invalid PTEs have at least 1 bit set.
> - The current invalid PTE flags settings to translate a retry fault
>    into a no-retry fault, doesn't work with TF enabled. As a result,
>    update invalid PTE flags settings which works for both TF enabled
>    and disabled case.
>
> Fixes: 2abf2573b1c69 ("drm/amdgpu: Enable translate_further to extend UTCL2 reach")
> Signed-off-by: Mukul Joshi <mukul.joshi at amd.com>

Reviewed-by: Christian König <christian.koenig at amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 +--
>   drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c  | 7 +++++--
>   2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 59cac347baa3..690fd4f639f1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -2484,8 +2484,7 @@ bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, u32 pasid,
>   		/* Intentionally setting invalid PTE flag
>   		 * combination to force a no-retry-fault
>   		 */
> -		flags = AMDGPU_PTE_EXECUTABLE | AMDGPU_PDE_PTE |
> -			AMDGPU_PTE_TF;
> +		flags = AMDGPU_PTE_SNOOPED | AMDGPU_PTE_PRT;
>   		value = 0;
>   	} else if (amdgpu_vm_fault_stop == AMDGPU_VM_FAULT_STOP_NEVER) {
>   		/* Redirect the access to the dummy page */
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index 4603653916f5..67ca16a8027c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -1103,10 +1103,13 @@ static void gmc_v9_0_get_vm_pde(struct amdgpu_device *adev, int level,
>   			*flags |= AMDGPU_PDE_BFS(0x9);
>   
>   	} else if (level == AMDGPU_VM_PDB0) {
> -		if (*flags & AMDGPU_PDE_PTE)
> +		if (*flags & AMDGPU_PDE_PTE) {
>   			*flags &= ~AMDGPU_PDE_PTE;
> -		else
> +			if (!(*flags & AMDGPU_PTE_VALID))
> +				*addr |= 1 << PAGE_SHIFT;
> +		} else {
>   			*flags |= AMDGPU_PTE_TF;
> +		}
>   	}
>   }
>   



More information about the amd-gfx mailing list