[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