diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/si.c')
-rw-r--r-- | drivers/gpu/drm/radeon/si.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index 6ca904673a4f..daa8d2df8ec5 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c | |||
@@ -1663,9 +1663,13 @@ static int si_init_microcode(struct radeon_device *rdev) | |||
1663 | 1663 | ||
1664 | snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); | 1664 | snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); |
1665 | err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev); | 1665 | err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev); |
1666 | if (err) | 1666 | if (err) { |
1667 | goto out; | 1667 | printk(KERN_ERR |
1668 | if (rdev->smc_fw->size != smc_req_size) { | 1668 | "smc: error loading firmware \"%s\"\n", |
1669 | fw_name); | ||
1670 | release_firmware(rdev->smc_fw); | ||
1671 | rdev->smc_fw = NULL; | ||
1672 | } else if (rdev->smc_fw->size != smc_req_size) { | ||
1669 | printk(KERN_ERR | 1673 | printk(KERN_ERR |
1670 | "si_smc: Bogus length %zu in firmware \"%s\"\n", | 1674 | "si_smc: Bogus length %zu in firmware \"%s\"\n", |
1671 | rdev->smc_fw->size, fw_name); | 1675 | rdev->smc_fw->size, fw_name); |
@@ -6418,6 +6422,8 @@ static int si_startup(struct radeon_device *rdev) | |||
6418 | /* enable aspm */ | 6422 | /* enable aspm */ |
6419 | si_program_aspm(rdev); | 6423 | si_program_aspm(rdev); |
6420 | 6424 | ||
6425 | si_mc_program(rdev); | ||
6426 | |||
6421 | if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || | 6427 | if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || |
6422 | !rdev->rlc_fw || !rdev->mc_fw) { | 6428 | !rdev->rlc_fw || !rdev->mc_fw) { |
6423 | r = si_init_microcode(rdev); | 6429 | r = si_init_microcode(rdev); |
@@ -6437,7 +6443,6 @@ static int si_startup(struct radeon_device *rdev) | |||
6437 | if (r) | 6443 | if (r) |
6438 | return r; | 6444 | return r; |
6439 | 6445 | ||
6440 | si_mc_program(rdev); | ||
6441 | r = si_pcie_gart_enable(rdev); | 6446 | r = si_pcie_gart_enable(rdev); |
6442 | if (r) | 6447 | if (r) |
6443 | return r; | 6448 | return r; |
@@ -6621,7 +6626,7 @@ int si_suspend(struct radeon_device *rdev) | |||
6621 | si_cp_enable(rdev, false); | 6626 | si_cp_enable(rdev, false); |
6622 | cayman_dma_stop(rdev); | 6627 | cayman_dma_stop(rdev); |
6623 | if (rdev->has_uvd) { | 6628 | if (rdev->has_uvd) { |
6624 | r600_uvd_rbc_stop(rdev); | 6629 | r600_uvd_stop(rdev); |
6625 | radeon_uvd_suspend(rdev); | 6630 | radeon_uvd_suspend(rdev); |
6626 | } | 6631 | } |
6627 | si_irq_suspend(rdev); | 6632 | si_irq_suspend(rdev); |
@@ -6763,8 +6768,10 @@ void si_fini(struct radeon_device *rdev) | |||
6763 | radeon_vm_manager_fini(rdev); | 6768 | radeon_vm_manager_fini(rdev); |
6764 | radeon_ib_pool_fini(rdev); | 6769 | radeon_ib_pool_fini(rdev); |
6765 | radeon_irq_kms_fini(rdev); | 6770 | radeon_irq_kms_fini(rdev); |
6766 | if (rdev->has_uvd) | 6771 | if (rdev->has_uvd) { |
6772 | r600_uvd_stop(rdev); | ||
6767 | radeon_uvd_fini(rdev); | 6773 | radeon_uvd_fini(rdev); |
6774 | } | ||
6768 | si_pcie_gart_fini(rdev); | 6775 | si_pcie_gart_fini(rdev); |
6769 | r600_vram_scratch_fini(rdev); | 6776 | r600_vram_scratch_fini(rdev); |
6770 | radeon_gem_fini(rdev); | 6777 | radeon_gem_fini(rdev); |