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 d02fd1c045d5..9cd2bc989ac7 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -77,6 +77,8 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev); | |||
77 | static void cik_program_aspm(struct radeon_device *rdev); | 77 | static void cik_program_aspm(struct radeon_device *rdev); |
78 | static void cik_init_pg(struct radeon_device *rdev); | 78 | static void cik_init_pg(struct radeon_device *rdev); |
79 | static void cik_init_cg(struct radeon_device *rdev); | 79 | static void cik_init_cg(struct radeon_device *rdev); |
80 | static void cik_fini_pg(struct radeon_device *rdev); | ||
81 | static void cik_fini_cg(struct radeon_device *rdev); | ||
80 | static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev, | 82 | static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev, |
81 | bool enable); | 83 | bool enable); |
82 | 84 | ||
@@ -1692,6 +1694,7 @@ static int cik_init_microcode(struct radeon_device *rdev) | |||
1692 | fw_name); | 1694 | fw_name); |
1693 | release_firmware(rdev->smc_fw); | 1695 | release_firmware(rdev->smc_fw); |
1694 | rdev->smc_fw = NULL; | 1696 | rdev->smc_fw = NULL; |
1697 | err = 0; | ||
1695 | } else if (rdev->smc_fw->size != smc_req_size) { | 1698 | } else if (rdev->smc_fw->size != smc_req_size) { |
1696 | printk(KERN_ERR | 1699 | printk(KERN_ERR |
1697 | "cik_smc: Bogus length %zu in firmware \"%s\"\n", | 1700 | "cik_smc: Bogus length %zu in firmware \"%s\"\n", |
@@ -3180,6 +3183,7 @@ int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) | |||
3180 | r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256); | 3183 | r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256); |
3181 | if (r) { | 3184 | if (r) { |
3182 | DRM_ERROR("radeon: failed to get ib (%d).\n", r); | 3185 | DRM_ERROR("radeon: failed to get ib (%d).\n", r); |
3186 | radeon_scratch_free(rdev, scratch); | ||
3183 | return r; | 3187 | return r; |
3184 | } | 3188 | } |
3185 | ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1); | 3189 | ib.ptr[0] = PACKET3(PACKET3_SET_UCONFIG_REG, 1); |
@@ -3196,6 +3200,8 @@ int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) | |||
3196 | r = radeon_fence_wait(ib.fence, false); | 3200 | r = radeon_fence_wait(ib.fence, false); |
3197 | if (r) { | 3201 | if (r) { |
3198 | DRM_ERROR("radeon: fence wait failed (%d).\n", r); | 3202 | DRM_ERROR("radeon: fence wait failed (%d).\n", r); |
3203 | radeon_scratch_free(rdev, scratch); | ||
3204 | radeon_ib_free(rdev, &ib); | ||
3199 | return r; | 3205 | return r; |
3200 | } | 3206 | } |
3201 | for (i = 0; i < rdev->usec_timeout; i++) { | 3207 | for (i = 0; i < rdev->usec_timeout; i++) { |
@@ -4185,6 +4191,10 @@ static void cik_gpu_soft_reset(struct radeon_device *rdev, u32 reset_mask) | |||
4185 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", | 4191 | dev_info(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", |
4186 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS)); | 4192 | RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS)); |
4187 | 4193 | ||
4194 | /* disable CG/PG */ | ||
4195 | cik_fini_pg(rdev); | ||
4196 | cik_fini_cg(rdev); | ||
4197 | |||
4188 | /* stop the rlc */ | 4198 | /* stop the rlc */ |
4189 | cik_rlc_stop(rdev); | 4199 | cik_rlc_stop(rdev); |
4190 | 4200 | ||