[PATCH] drm/amdgpu: consolidate atom scratch reg handling for hangs

Christian König deathsimple at vodafone.de
Sat Oct 22 17:47:16 UTC 2016


Am 21.10.2016 um 21:46 schrieb Alex Deucher:
> Move from asic specific code to common atom code.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

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

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 13 +++++++++++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h |  2 ++
>   drivers/gpu/drm/amd/amdgpu/cik.c             | 17 +++--------------
>   drivers/gpu/drm/amd/amdgpu/vi.c              | 16 ++--------------
>   4 files changed, 20 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> index 8e6bf54..76cbb1d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> @@ -1784,6 +1784,19 @@ void amdgpu_atombios_scratch_regs_restore(struct amdgpu_device *adev)
>   		WREG32(mmBIOS_SCRATCH_0 + i, adev->bios_scratch[i]);
>   }
>   
> +void amdgpu_atombios_scratch_regs_engine_hung(struct amdgpu_device *adev,
> +					      bool hung)
> +{
> +	u32 tmp = RREG32(mmBIOS_SCRATCH_3);
> +
> +	if (hung)
> +		tmp |= ATOM_S3_ASIC_GUI_ENGINE_HUNG;
> +	else
> +		tmp &= ~ATOM_S3_ASIC_GUI_ENGINE_HUNG;
> +
> +	WREG32(mmBIOS_SCRATCH_3, tmp);
> +}
> +
>   /* Atom needs data in little endian format
>    * so swap as appropriate when copying data to
>    * or from atom. Note that atom operates on
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h
> index 1735615..e4afb16 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h
> @@ -206,6 +206,8 @@ void amdgpu_atombios_scratch_regs_lock(struct amdgpu_device *adev, bool lock);
>   void amdgpu_atombios_scratch_regs_init(struct amdgpu_device *adev);
>   void amdgpu_atombios_scratch_regs_save(struct amdgpu_device *adev);
>   void amdgpu_atombios_scratch_regs_restore(struct amdgpu_device *adev);
> +void amdgpu_atombios_scratch_regs_engine_hung(struct amdgpu_device *adev,
> +					      bool hung);
>   
>   void amdgpu_atombios_copy_swap(u8 *dst, u8 *src, u8 num_bytes, bool to_le);
>   int amdgpu_atombios_get_max_vddc(struct amdgpu_device *adev, u8 voltage_type,
> diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c
> index 1b70f8fa..302df85 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cik.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cik.c
> @@ -1189,18 +1189,6 @@ static int cik_gpu_pci_config_reset(struct amdgpu_device *adev)
>   	return r;
>   }
>   
> -static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung)
> -{
> -	u32 tmp = RREG32(mmBIOS_SCRATCH_3);
> -
> -	if (hung)
> -		tmp |= ATOM_S3_ASIC_GUI_ENGINE_HUNG;
> -	else
> -		tmp &= ~ATOM_S3_ASIC_GUI_ENGINE_HUNG;
> -
> -	WREG32(mmBIOS_SCRATCH_3, tmp);
> -}
> -
>   /**
>    * cik_asic_reset - soft reset GPU
>    *
> @@ -1213,11 +1201,12 @@ static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hu
>   static int cik_asic_reset(struct amdgpu_device *adev)
>   {
>   	int r;
> -	cik_set_bios_scratch_engine_hung(adev, true);
> +
> +	amdgpu_atombios_scratch_regs_engine_hung(adev, true);
>   
>   	r = cik_gpu_pci_config_reset(adev);
>   
> -	cik_set_bios_scratch_engine_hung(adev, false);
> +	amdgpu_atombios_scratch_regs_engine_hung(adev, false);
>   
>   	return r;
>   }
> diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
> index b2a1cf4..52d0a83 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vi.c
> @@ -729,18 +729,6 @@ static int vi_gpu_pci_config_reset(struct amdgpu_device *adev)
>   	return -EINVAL;
>   }
>   
> -static void vi_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung)
> -{
> -	u32 tmp = RREG32(mmBIOS_SCRATCH_3);
> -
> -	if (hung)
> -		tmp |= ATOM_S3_ASIC_GUI_ENGINE_HUNG;
> -	else
> -		tmp &= ~ATOM_S3_ASIC_GUI_ENGINE_HUNG;
> -
> -	WREG32(mmBIOS_SCRATCH_3, tmp);
> -}
> -
>   /**
>    * vi_asic_reset - soft reset GPU
>    *
> @@ -754,11 +742,11 @@ static int vi_asic_reset(struct amdgpu_device *adev)
>   {
>   	int r;
>   
> -	vi_set_bios_scratch_engine_hung(adev, true);
> +	amdgpu_atombios_scratch_regs_engine_hung(adev, true);
>   
>   	r = vi_gpu_pci_config_reset(adev);
>   
> -	vi_set_bios_scratch_engine_hung(adev, false);
> +	amdgpu_atombios_scratch_regs_engine_hung(adev, false);
>   
>   	return r;
>   }




More information about the amd-gfx mailing list