[PATCH 1/2] drm/amdgpu: Allow IP to skip the first ras enablement
Alex Deucher
alexdeucher at gmail.com
Thu Apr 4 15:14:23 UTC 2019
On Wed, Apr 3, 2019 at 2:29 AM Pan, Xinhui <Xinhui.Pan at amd.com> wrote:
>
> If vbios has enabled ras for us, skip it
>
> Signed-off-by: xinhui pan <xinhui.pan at amd.com>
I'm having trouble following the logic in this patch. Can you walk me
through it?
Alex
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 25 +++++++++++++++++++++++--
> 1 file changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> index 2b7a420d5a1f..fc4bf7237d4b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> @@ -118,8 +118,11 @@ const char *ras_block_string[] = {
> #define ras_err_str(i) (ras_error_string[ffs(i)])
> #define ras_block_str(i) (ras_block_string[i])
>
> -#define AMDGPU_RAS_FLAG_INIT_BY_VBIOS 1
> -#define RAS_DEFAULT_FLAGS (AMDGPU_RAS_FLAG_INIT_BY_VBIOS)
> +#define AMDGPU_RAS_FLAG(x) ({BUILD_BUG_ON(BIT(x) & AMDGPU_RAS_BLOCK_MASK);\
> + BIT(x); })
> +#define AMDGPU_RAS_FLAG_INIT_BY_VBIOS AMDGPU_RAS_FLAG(31)
> +#define RAS_DEFAULT_FLAGS (AMDGPU_RAS_FLAG_INIT_BY_VBIOS |\
> + AMDGPU_RAS_BLOCK_MASK)
>
> static int amdgpu_ras_reserve_vram(struct amdgpu_device *adev,
> uint64_t offset, uint64_t size,
> @@ -551,6 +554,20 @@ static int amdgpu_ras_is_feature_enabled(struct amdgpu_device *adev,
> return con->features & BIT(head->block);
> }
>
> +static bool amdgpu_ras_cmpxchg_feature_initialized(struct amdgpu_device *adev,
> + struct ras_common_if *head, bool new)
> +{
> + struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
> + bool old = (con->flags & AMDGPU_RAS_FLAG_INIT_BY_VBIOS) &&
> + (con->flags & BIT(head->block));
> +
> + if (new)
> + con->flags |= BIT(head->block);
> + else
> + con->flags &= ~BIT(head->block);
> +
> + return old;
> +}
> /*
> * if obj is not created, then create one.
> * set feature enable flag.
> @@ -620,6 +637,9 @@ int amdgpu_ras_feature_enable(struct amdgpu_device *adev,
> /* Are we alerady in that state we are going to set? */
> if (!(!!enable ^ !!amdgpu_ras_is_feature_enabled(adev, head)))
> return 0;
> + /* check if vbios has enabled ras for us on the block. */
> + if (enable && amdgpu_ras_cmpxchg_feature_initialized(adev, head, false))
> + goto first_time_bypass_psp;
>
> ret = psp_ras_enable_features(&adev->psp, &info, enable);
> if (ret) {
> @@ -630,6 +650,7 @@ int amdgpu_ras_feature_enable(struct amdgpu_device *adev,
> return -EINVAL;
> }
>
> +first_time_bypass_psp:
> /* setup the obj */
> __amdgpu_ras_feature_enable(adev, head, enable);
>
> --
> 2.17.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list