mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 18:13:04 +00:00
drm/radeon/kms/r600/r700: fallback gracefully on ucode failure
Sent the wrong patch earlier. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
7cb7d1d7b6
commit
779720a320
@ -1845,6 +1845,14 @@ int r600_startup(struct radeon_device *rdev)
|
|||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
|
||||||
|
r = r600_init_microcode(rdev);
|
||||||
|
if (r) {
|
||||||
|
DRM_ERROR("Failed to load firmware!\n");
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
r600_mc_program(rdev);
|
r600_mc_program(rdev);
|
||||||
if (rdev->flags & RADEON_IS_AGP) {
|
if (rdev->flags & RADEON_IS_AGP) {
|
||||||
r600_agp_enable(rdev);
|
r600_agp_enable(rdev);
|
||||||
@ -2026,25 +2034,17 @@ int r600_init(struct radeon_device *rdev)
|
|||||||
rdev->ih.ring_obj = NULL;
|
rdev->ih.ring_obj = NULL;
|
||||||
r600_ih_ring_init(rdev, 64 * 1024);
|
r600_ih_ring_init(rdev, 64 * 1024);
|
||||||
|
|
||||||
if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
|
|
||||||
r = r600_init_microcode(rdev);
|
|
||||||
if (r) {
|
|
||||||
DRM_ERROR("Failed to load firmware!\n");
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
r = r600_pcie_gart_init(rdev);
|
r = r600_pcie_gart_init(rdev);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
rdev->accel_working = true;
|
|
||||||
r = r600_blit_init(rdev);
|
r = r600_blit_init(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("radeon: failled blitter (%d).\n", r);
|
DRM_ERROR("radeon: failed blitter (%d).\n", r);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rdev->accel_working = true;
|
||||||
r = r600_startup(rdev);
|
r = r600_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
r600_suspend(rdev);
|
r600_suspend(rdev);
|
||||||
@ -2056,12 +2056,12 @@ int r600_init(struct radeon_device *rdev)
|
|||||||
if (rdev->accel_working) {
|
if (rdev->accel_working) {
|
||||||
r = radeon_ib_pool_init(rdev);
|
r = radeon_ib_pool_init(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r);
|
DRM_ERROR("radeon: failed initializing IB pool (%d).\n", r);
|
||||||
rdev->accel_working = false;
|
rdev->accel_working = false;
|
||||||
}
|
}
|
||||||
r = r600_ib_test(rdev);
|
r = r600_ib_test(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("radeon: failled testing IB (%d).\n", r);
|
DRM_ERROR("radeon: failed testing IB (%d).\n", r);
|
||||||
rdev->accel_working = false;
|
rdev->accel_working = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -874,6 +874,14 @@ static int rv770_startup(struct radeon_device *rdev)
|
|||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
|
||||||
|
r = r600_init_microcode(rdev);
|
||||||
|
if (r) {
|
||||||
|
DRM_ERROR("Failed to load firmware!\n");
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rv770_mc_program(rdev);
|
rv770_mc_program(rdev);
|
||||||
if (rdev->flags & RADEON_IS_AGP) {
|
if (rdev->flags & RADEON_IS_AGP) {
|
||||||
rv770_agp_enable(rdev);
|
rv770_agp_enable(rdev);
|
||||||
@ -1039,25 +1047,17 @@ int rv770_init(struct radeon_device *rdev)
|
|||||||
rdev->ih.ring_obj = NULL;
|
rdev->ih.ring_obj = NULL;
|
||||||
r600_ih_ring_init(rdev, 64 * 1024);
|
r600_ih_ring_init(rdev, 64 * 1024);
|
||||||
|
|
||||||
if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
|
|
||||||
r = r600_init_microcode(rdev);
|
|
||||||
if (r) {
|
|
||||||
DRM_ERROR("Failed to load firmware!\n");
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
r = r600_pcie_gart_init(rdev);
|
r = r600_pcie_gart_init(rdev);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
rdev->accel_working = true;
|
|
||||||
r = r600_blit_init(rdev);
|
r = r600_blit_init(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("radeon: failled blitter (%d).\n", r);
|
DRM_ERROR("radeon: failed blitter (%d).\n", r);
|
||||||
rdev->accel_working = false;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rdev->accel_working = true;
|
||||||
r = rv770_startup(rdev);
|
r = rv770_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
rv770_suspend(rdev);
|
rv770_suspend(rdev);
|
||||||
@ -1069,12 +1069,12 @@ int rv770_init(struct radeon_device *rdev)
|
|||||||
if (rdev->accel_working) {
|
if (rdev->accel_working) {
|
||||||
r = radeon_ib_pool_init(rdev);
|
r = radeon_ib_pool_init(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r);
|
DRM_ERROR("radeon: failed initializing IB pool (%d).\n", r);
|
||||||
rdev->accel_working = false;
|
rdev->accel_working = false;
|
||||||
}
|
}
|
||||||
r = r600_ib_test(rdev);
|
r = r600_ib_test(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
DRM_ERROR("radeon: failled testing IB (%d).\n", r);
|
DRM_ERROR("radeon: failed testing IB (%d).\n", r);
|
||||||
rdev->accel_working = false;
|
rdev->accel_working = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user