diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/rs400.c')
-rw-r--r-- | drivers/gpu/drm/radeon/rs400.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c index 06b90c87f8f..b0ce84a20a6 100644 --- a/drivers/gpu/drm/radeon/rs400.c +++ b/drivers/gpu/drm/radeon/rs400.c | |||
@@ -410,6 +410,12 @@ static int rs400_startup(struct radeon_device *rdev) | |||
410 | if (r) | 410 | if (r) |
411 | return r; | 411 | return r; |
412 | 412 | ||
413 | r = radeon_fence_driver_start_ring(rdev, RADEON_RING_TYPE_GFX_INDEX); | ||
414 | if (r) { | ||
415 | dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r); | ||
416 | return r; | ||
417 | } | ||
418 | |||
413 | /* Enable IRQ */ | 419 | /* Enable IRQ */ |
414 | r100_irq_set(rdev); | 420 | r100_irq_set(rdev); |
415 | rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); | 421 | rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); |
@@ -419,11 +425,18 @@ static int rs400_startup(struct radeon_device *rdev) | |||
419 | dev_err(rdev->dev, "failed initializing CP (%d).\n", r); | 425 | dev_err(rdev->dev, "failed initializing CP (%d).\n", r); |
420 | return r; | 426 | return r; |
421 | } | 427 | } |
422 | r = r100_ib_init(rdev); | 428 | |
429 | r = radeon_ib_pool_start(rdev); | ||
430 | if (r) | ||
431 | return r; | ||
432 | |||
433 | r = r100_ib_test(rdev); | ||
423 | if (r) { | 434 | if (r) { |
424 | dev_err(rdev->dev, "failed initializing IB (%d).\n", r); | 435 | dev_err(rdev->dev, "failed testing IB (%d).\n", r); |
436 | rdev->accel_working = false; | ||
425 | return r; | 437 | return r; |
426 | } | 438 | } |
439 | |||
427 | return 0; | 440 | return 0; |
428 | } | 441 | } |
429 | 442 | ||
@@ -447,11 +460,14 @@ int rs400_resume(struct radeon_device *rdev) | |||
447 | r300_clock_startup(rdev); | 460 | r300_clock_startup(rdev); |
448 | /* Initialize surface registers */ | 461 | /* Initialize surface registers */ |
449 | radeon_surface_init(rdev); | 462 | radeon_surface_init(rdev); |
463 | |||
464 | rdev->accel_working = true; | ||
450 | return rs400_startup(rdev); | 465 | return rs400_startup(rdev); |
451 | } | 466 | } |
452 | 467 | ||
453 | int rs400_suspend(struct radeon_device *rdev) | 468 | int rs400_suspend(struct radeon_device *rdev) |
454 | { | 469 | { |
470 | radeon_ib_pool_suspend(rdev); | ||
455 | r100_cp_disable(rdev); | 471 | r100_cp_disable(rdev); |
456 | radeon_wb_disable(rdev); | 472 | radeon_wb_disable(rdev); |
457 | r100_irq_disable(rdev); | 473 | r100_irq_disable(rdev); |
@@ -530,7 +546,14 @@ int rs400_init(struct radeon_device *rdev) | |||
530 | if (r) | 546 | if (r) |
531 | return r; | 547 | return r; |
532 | r300_set_reg_safe(rdev); | 548 | r300_set_reg_safe(rdev); |
549 | |||
550 | r = radeon_ib_pool_init(rdev); | ||
533 | rdev->accel_working = true; | 551 | rdev->accel_working = true; |
552 | if (r) { | ||
553 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); | ||
554 | rdev->accel_working = false; | ||
555 | } | ||
556 | |||
534 | r = rs400_startup(rdev); | 557 | r = rs400_startup(rdev); |
535 | if (r) { | 558 | if (r) { |
536 | /* Somethings want wront with the accel init stop accel */ | 559 | /* Somethings want wront with the accel init stop accel */ |