aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rs690.c
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-08-27 18:25:25 -0400
committerDave Airlie <airlied@redhat.com>2010-10-05 21:38:08 -0400
commit724c80e1d630296d1324859e964d80d35007d83c (patch)
tree954e86447e1c259160d09c732ac0eb0289b2ec8b /drivers/gpu/drm/radeon/rs690.c
parentb70d6bb3f67b2e2964abafb0117f1733f062cba5 (diff)
drm/radeon/kms: enable writeback (v2)
When writeback is enabled, the GPU shadows writes to certain registers into a buffer in memory. The driver can then read the values from the shadow rather than reading back from the register across the bus. Writeback can be disabled by setting the no_wb module param to 1. On r6xx/r7xx/evergreen, the following registers are shadowed: - CP scratch registers - CP read pointer - IH write pointer On r1xx-rr5xx, the following registers are shadowed: - CP scratch registers - CP read pointer v2: - Combine wb patches for r6xx-evergreen and r1xx-r5xx - Writeback is disabled on AGP boards since it tends to be unreliable on AGP using the gart. - Check radeon_wb_init return values properly. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/rs690.c')
-rw-r--r--drivers/gpu/drm/radeon/rs690.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
index 3e3f75718be3..70ed66ef1ca8 100644
--- a/drivers/gpu/drm/radeon/rs690.c
+++ b/drivers/gpu/drm/radeon/rs690.c
@@ -615,6 +615,12 @@ static int rs690_startup(struct radeon_device *rdev)
615 r = rs400_gart_enable(rdev); 615 r = rs400_gart_enable(rdev);
616 if (r) 616 if (r)
617 return r; 617 return r;
618
619 /* allocate wb buffer */
620 r = radeon_wb_init(rdev);
621 if (r)
622 return r;
623
618 /* Enable IRQ */ 624 /* Enable IRQ */
619 rs600_irq_set(rdev); 625 rs600_irq_set(rdev);
620 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); 626 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
@@ -624,9 +630,6 @@ static int rs690_startup(struct radeon_device *rdev)
624 dev_err(rdev->dev, "failled initializing CP (%d).\n", r); 630 dev_err(rdev->dev, "failled initializing CP (%d).\n", r);
625 return r; 631 return r;
626 } 632 }
627 r = r100_wb_init(rdev);
628 if (r)
629 dev_err(rdev->dev, "failled initializing WB (%d).\n", r);
630 r = r100_ib_init(rdev); 633 r = r100_ib_init(rdev);
631 if (r) { 634 if (r) {
632 dev_err(rdev->dev, "failled initializing IB (%d).\n", r); 635 dev_err(rdev->dev, "failled initializing IB (%d).\n", r);
@@ -667,7 +670,7 @@ int rs690_suspend(struct radeon_device *rdev)
667{ 670{
668 r600_audio_fini(rdev); 671 r600_audio_fini(rdev);
669 r100_cp_disable(rdev); 672 r100_cp_disable(rdev);
670 r100_wb_disable(rdev); 673 radeon_wb_disable(rdev);
671 rs600_irq_disable(rdev); 674 rs600_irq_disable(rdev);
672 rs400_gart_disable(rdev); 675 rs400_gart_disable(rdev);
673 return 0; 676 return 0;
@@ -677,7 +680,7 @@ void rs690_fini(struct radeon_device *rdev)
677{ 680{
678 r600_audio_fini(rdev); 681 r600_audio_fini(rdev);
679 r100_cp_fini(rdev); 682 r100_cp_fini(rdev);
680 r100_wb_fini(rdev); 683 radeon_wb_fini(rdev);
681 r100_ib_fini(rdev); 684 r100_ib_fini(rdev);
682 radeon_gem_fini(rdev); 685 radeon_gem_fini(rdev);
683 rs400_gart_fini(rdev); 686 rs400_gart_fini(rdev);
@@ -752,7 +755,7 @@ int rs690_init(struct radeon_device *rdev)
752 /* Somethings want wront with the accel init stop accel */ 755 /* Somethings want wront with the accel init stop accel */
753 dev_err(rdev->dev, "Disabling GPU acceleration\n"); 756 dev_err(rdev->dev, "Disabling GPU acceleration\n");
754 r100_cp_fini(rdev); 757 r100_cp_fini(rdev);
755 r100_wb_fini(rdev); 758 radeon_wb_fini(rdev);
756 r100_ib_fini(rdev); 759 r100_ib_fini(rdev);
757 rs400_gart_fini(rdev); 760 rs400_gart_fini(rdev);
758 radeon_irq_kms_fini(rdev); 761 radeon_irq_kms_fini(rdev);