Skip to content

Commit fe62e1a

Browse files
committed
drm/radeon/kms: more fixes to rv770 suspend/resume path.
This resumes my RV730PRO (4650) RV770 (4850) fine. Still researching the RV4550 (RV710), resumes without X fine. Signed-off-by: Dave Airlie <airlied@redhat.com>
1 parent 4153e58 commit fe62e1a

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

drivers/gpu/drm/radeon/radeon.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,5 +1070,6 @@ extern void r600_scratch_init(struct radeon_device *rdev);
10701070
extern int r600_blit_init(struct radeon_device *rdev);
10711071
extern void r600_blit_fini(struct radeon_device *rdev);
10721072
extern int r600_cp_init_microcode(struct radeon_device *rdev);
1073+
extern int r600_gpu_reset(struct radeon_device *rdev);
10731074

10741075
#endif

drivers/gpu/drm/radeon/rv770.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ int rv770_pcie_gart_enable(struct radeon_device *rdev)
5656
r = radeon_gart_table_vram_pin(rdev);
5757
if (r)
5858
return r;
59-
for (i = 0; i < rdev->gart.num_gpu_pages; i++)
60-
r600_gart_clear_page(rdev, i);
6159
/* Setup L2 cache */
6260
WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING |
6361
ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
@@ -681,11 +679,11 @@ static void rv770_gpu_init(struct radeon_device *rdev)
681679
WREG32(SQ_CONFIG, sq_config);
682680

683681
WREG32(SQ_GPR_RESOURCE_MGMT_1, (NUM_PS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
684-
NUM_VS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
685-
NUM_CLAUSE_TEMP_GPRS(((rdev->config.rv770.max_gprs * 24)/64)/2)));
682+
NUM_VS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
683+
NUM_CLAUSE_TEMP_GPRS(((rdev->config.rv770.max_gprs * 24)/64)/2)));
686684

687685
WREG32(SQ_GPR_RESOURCE_MGMT_2, (NUM_GS_GPRS((rdev->config.rv770.max_gprs * 7)/64) |
688-
NUM_ES_GPRS((rdev->config.rv770.max_gprs * 7)/64)));
686+
NUM_ES_GPRS((rdev->config.rv770.max_gprs * 7)/64)));
689687

690688
sq_thread_resource_mgmt = (NUM_PS_THREADS((rdev->config.rv770.max_threads * 4)/8) |
691689
NUM_VS_THREADS((rdev->config.rv770.max_threads * 2)/8) |
@@ -717,14 +715,14 @@ static void rv770_gpu_init(struct radeon_device *rdev)
717715
WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_7, sq_dyn_gpr_size_simd_ab_0);
718716

719717
WREG32(PA_SC_FORCE_EOV_MAX_CNTS, (FORCE_EOV_MAX_CLK_CNT(4095) |
720-
FORCE_EOV_MAX_REZ_CNT(255)));
718+
FORCE_EOV_MAX_REZ_CNT(255)));
721719

722720
if (rdev->family == CHIP_RV710)
723721
WREG32(VGT_CACHE_INVALIDATION, (CACHE_INVALIDATION(TC_ONLY) |
724-
AUTO_INVLD_EN(ES_AND_GS_AUTO)));
722+
AUTO_INVLD_EN(ES_AND_GS_AUTO)));
725723
else
726724
WREG32(VGT_CACHE_INVALIDATION, (CACHE_INVALIDATION(VC_AND_TC) |
727-
AUTO_INVLD_EN(ES_AND_GS_AUTO)));
725+
AUTO_INVLD_EN(ES_AND_GS_AUTO)));
728726

729727
switch (rdev->family) {
730728
case CHIP_RV770:
@@ -848,14 +846,15 @@ int rv770_mc_init(struct radeon_device *rdev)
848846
}
849847
int rv770_gpu_reset(struct radeon_device *rdev)
850848
{
851-
/* FIXME: implement */
852-
return 0;
849+
/* FIXME: implement any rv770 specific bits */
850+
return r600_gpu_reset(rdev);
853851
}
854852

855853
static int rv770_startup(struct radeon_device *rdev)
856854
{
857855
int r;
858856

857+
radeon_gpu_reset(rdev);
859858
rv770_mc_resume(rdev);
860859
r = rv770_pcie_gart_enable(rdev);
861860
if (r)
@@ -1039,6 +1038,8 @@ int rv770_init(struct radeon_device *rdev)
10391038

10401039
void rv770_fini(struct radeon_device *rdev)
10411040
{
1041+
rv770_suspend(rdev);
1042+
10421043
r600_blit_fini(rdev);
10431044
radeon_ring_fini(rdev);
10441045
rv770_pcie_gart_fini(rdev);

0 commit comments

Comments
 (0)