diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/cik.c')
-rw-r--r-- | drivers/gpu/drm/radeon/cik.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 2e48f902e3b5..e8544758b569 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -72,6 +72,8 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev); | |||
72 | static void cik_program_aspm(struct radeon_device *rdev); | 72 | static void cik_program_aspm(struct radeon_device *rdev); |
73 | static void cik_init_pg(struct radeon_device *rdev); | 73 | static void cik_init_pg(struct radeon_device *rdev); |
74 | static void cik_init_cg(struct radeon_device *rdev); | 74 | static void cik_init_cg(struct radeon_device *rdev); |
75 | static void cik_fini_pg(struct radeon_device *rdev); | ||
76 | static void cik_fini_cg(struct radeon_device *rdev); | ||
75 | static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev, | 77 | static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev, |
76 | bool enable); | 78 | bool enable); |
77 | 79 | ||
@@ -1687,6 +1689,7 @@ static int cik_init_microcode(struct radeon_device *rdev) | |||
1687 | fw_name); | 1689 | fw_name); |
1688 | release_firmware(rdev->smc_fw); | 1690 | release_firmware(rdev->smc_fw); |
1689 | rdev->smc_fw = NULL; | 1691 | rdev->smc_fw = NULL; |
1692 | err = 0; | ||
1690 | } else if (rdev->smc_fw->size != smc_req_size) { | 1693 | } else if (rdev->smc_fw->size != smc_req_size) { |
1691 | printk(KERN_ERR | 1694 | printk(KERN_ERR |
1692 | "cik_smc: Bogus length %zu in firmware \"%s\"\n", | 1695 | "cik_smc: Bogus length %zu in firmware \"%s\"\n", |
@@ -3254,6 +3257,7 @@ int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) | |||
3254 | r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256); | 3257 | r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256); |
3255 | if (r) { | 3258 | if (r) { |
3256 | DRM_ERROR("radeon: failed to get ib (%d).\n", r); | 3259 | DRM_ERROR("radeon: failed to get ib (%d).\n", r); |
3260 | radeon_scratch_free(rdev, scratch); | ||
3257 | return r; | 3261 | return r; |
3258 | } | 3262 | } |
3259 | ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1); | 3263 | ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1); |
@@ -3270,6 +3274,8 @@ int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) | |||
3270 | r = radeon_fence_wait(ib.fence, false); | 3274 | r = radeon_fence_wait(ib.fence, false); |
3271 | if (r) { | 3275 | if (r) { |
3272 | DRM_ERROR("radeon: fence wait failed (%d).\n", r); | 3276 | DRM_ERROR("radeon: fence wait failed (%d).\n", r); |
3277 | radeon_scratch_free(rdev, scratch); | ||
3278 | radeon_ib_free(rdev, &ib); | ||
3273 | return r; | 3279 | return r; |
3274 | } | 3280 | } |
3275 | for (i = 0; i < rdev->usec_timeout; i++) { | 3281 | for (i = 0; i < rdev->usec_timeout; i++) { |
@@ -4259,6 +4265,10 @@ static void cik_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask) | |||
4259 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", | 4265 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", |
4260 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS)); | 4266 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS)); |
4261 | 4267 | ||
4268 | /* disable CG/PG */ | ||
4269 | cik_fini_pg(rdev); | ||
4270 | cik_fini_cg(rdev); | ||
4271 | |||
4262 | /* stop the rlc */ | 4272 | /* stop the rlc */ |
4263 | cik_rlc_stop(rdev); | 4273 | cik_rlc_stop(rdev); |
4264 | 4274 | ||