Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -1158,10 +1158,11 @@ static void kv_restore_regs_for_reset(struct amdgpu_device *adev,
	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 };
	u32 i;
	int r = -EINVAL;

	dev_info(adev->dev, "GPU pci config reset\n");

@@ -1177,14 +1178,18 @@ static void cik_gpu_pci_config_reset(struct amdgpu_device *adev)

	/* wait for asic to come out of reset */
	for (i = 0; i < adev->usec_timeout; i++) {
		if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff)
		if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) {
			r = 0;
			break;
		}
		udelay(1);
	}

	/* does asic init need to be run first??? */
	if (adev->flags & AMD_IS_APU)
		kv_restore_regs_for_reset(adev, &kv_save);

	return r;
}

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
 */
static int cik_asic_reset(struct amdgpu_device *adev)
{
	int r;
	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);

	return 0;
	return r;
}

static int cik_set_uvd_clock(struct amdgpu_device *adev, u32 clock,
+7 −5
Original line number Diff line number Diff line
@@ -597,7 +597,7 @@ static int vi_read_register(struct amdgpu_device *adev, u32 se_num,
	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;

@@ -613,10 +613,10 @@ static void vi_gpu_pci_config_reset(struct amdgpu_device *adev)
	/* wait for asic to come out of reset */
	for (i = 0; i < adev->usec_timeout; i++) {
		if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff)
			break;
			return 0;
		udelay(1);
	}

	return -EINVAL;
}

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
 */
static int vi_asic_reset(struct amdgpu_device *adev)
{
	int r;

	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);

	return 0;
	return r;
}

static int vi_set_uvd_clock(struct amdgpu_device *adev, u32 clock,