Commit 89a31827 authored by Chunming Zhou's avatar Chunming Zhou Committed by Alex Deucher

drm/amdgpu: add return value for pci config reset

So we know whether or not the reset succeeded.
Signed-off-by: default avatarChunming Zhou <David1.Zhou@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 3dab83be
...@@ -1158,10 +1158,11 @@ static void kv_restore_regs_for_reset(struct amdgpu_device *adev, ...@@ -1158,10 +1158,11 @@ static void kv_restore_regs_for_reset(struct amdgpu_device *adev,
WREG32(mmGMCON_RENG_EXECUTE, save->gmcon_reng_execute); WREG32(mmGMCON_RENG_EXECUTE, save->gmcon_reng_execute);
} }
static void cik_gpu_pci_config_reset(struct amdgpu_device *adev) static int cik_gpu_pci_config_reset(struct amdgpu_device *adev)
{ {
struct kv_reset_save_regs kv_save = { 0 }; struct kv_reset_save_regs kv_save = { 0 };
u32 i; u32 i;
int r = -EINVAL;
dev_info(adev->dev, "GPU pci config reset\n"); dev_info(adev->dev, "GPU pci config reset\n");
...@@ -1177,14 +1178,18 @@ static void cik_gpu_pci_config_reset(struct amdgpu_device *adev) ...@@ -1177,14 +1178,18 @@ static void cik_gpu_pci_config_reset(struct amdgpu_device *adev)
/* wait for asic to come out of reset */ /* wait for asic to come out of reset */
for (i = 0; i < adev->usec_timeout; i++) { for (i = 0; i < adev->usec_timeout; i++) {
if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) {
r = 0;
break; break;
}
udelay(1); udelay(1);
} }
/* does asic init need to be run first??? */ /* does asic init need to be run first??? */
if (adev->flags & AMD_IS_APU) if (adev->flags & AMD_IS_APU)
kv_restore_regs_for_reset(adev, &kv_save); kv_restore_regs_for_reset(adev, &kv_save);
return r;
} }
static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung) static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung)
...@@ -1210,13 +1215,14 @@ static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hu ...@@ -1210,13 +1215,14 @@ static void cik_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hu
*/ */
static int cik_asic_reset(struct amdgpu_device *adev) static int cik_asic_reset(struct amdgpu_device *adev)
{ {
int r;
cik_set_bios_scratch_engine_hung(adev, true); cik_set_bios_scratch_engine_hung(adev, true);
cik_gpu_pci_config_reset(adev); r = cik_gpu_pci_config_reset(adev);
cik_set_bios_scratch_engine_hung(adev, false); cik_set_bios_scratch_engine_hung(adev, false);
return 0; return r;
} }
static int cik_set_uvd_clock(struct amdgpu_device *adev, u32 clock, static int cik_set_uvd_clock(struct amdgpu_device *adev, u32 clock,
......
...@@ -597,7 +597,7 @@ static int vi_read_register(struct amdgpu_device *adev, u32 se_num, ...@@ -597,7 +597,7 @@ static int vi_read_register(struct amdgpu_device *adev, u32 se_num,
return -EINVAL; return -EINVAL;
} }
static void vi_gpu_pci_config_reset(struct amdgpu_device *adev) static int vi_gpu_pci_config_reset(struct amdgpu_device *adev)
{ {
u32 i; u32 i;
...@@ -613,10 +613,10 @@ static void vi_gpu_pci_config_reset(struct amdgpu_device *adev) ...@@ -613,10 +613,10 @@ static void vi_gpu_pci_config_reset(struct amdgpu_device *adev)
/* wait for asic to come out of reset */ /* wait for asic to come out of reset */
for (i = 0; i < adev->usec_timeout; i++) { for (i = 0; i < adev->usec_timeout; i++) {
if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff)
break; return 0;
udelay(1); udelay(1);
} }
return -EINVAL;
} }
static void vi_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung) static void vi_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hung)
...@@ -642,13 +642,15 @@ static void vi_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hun ...@@ -642,13 +642,15 @@ static void vi_set_bios_scratch_engine_hung(struct amdgpu_device *adev, bool hun
*/ */
static int vi_asic_reset(struct amdgpu_device *adev) static int vi_asic_reset(struct amdgpu_device *adev)
{ {
int r;
vi_set_bios_scratch_engine_hung(adev, true); vi_set_bios_scratch_engine_hung(adev, true);
vi_gpu_pci_config_reset(adev); r = vi_gpu_pci_config_reset(adev);
vi_set_bios_scratch_engine_hung(adev, false); vi_set_bios_scratch_engine_hung(adev, false);
return 0; return r;
} }
static int vi_set_uvd_clock(struct amdgpu_device *adev, u32 clock, static int vi_set_uvd_clock(struct amdgpu_device *adev, u32 clock,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment