diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2011-01-21 10:38:22 -0500 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2011-01-23 20:05:25 -0500 |
commit | 8d96fe9381fa235a81c73c8f940e2fcc84f41caf (patch) | |
tree | eedf45c7dbee1b27694243d4820ff136a7321af6 | |
parent | be23da8ad219650517cbbb7acbeaeb235667113a (diff) |
drm/radeon/kms: match r6xx/r7xx/evergreen asic_reset with previous asics
Don't reset if the engine isn't busy. This matches the behavior of
previous asics. Reseting a non-hung block can lead to a hang.
Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=33272
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@gmail.com>
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 3 |
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index a8973acb3987..677af91b555c 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -2201,6 +2201,9 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev) | |||
2201 | struct evergreen_mc_save save; | 2201 | struct evergreen_mc_save save; |
2202 | u32 grbm_reset = 0; | 2202 | u32 grbm_reset = 0; |
2203 | 2203 | ||
2204 | if (!(RREG32(GRBM_STATUS) & GUI_ACTIVE)) | ||
2205 | return 0; | ||
2206 | |||
2204 | dev_info(rdev->dev, "GPU softreset \n"); | 2207 | dev_info(rdev->dev, "GPU softreset \n"); |
2205 | dev_info(rdev->dev, " GRBM_STATUS=0x%08X\n", | 2208 | dev_info(rdev->dev, " GRBM_STATUS=0x%08X\n", |
2206 | RREG32(GRBM_STATUS)); | 2209 | RREG32(GRBM_STATUS)); |
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index aca2236268fa..1e10e3e2ba2a 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -1287,6 +1287,9 @@ int r600_gpu_soft_reset(struct radeon_device *rdev) | |||
1287 | S_008014_CB2_BUSY(1) | S_008014_CB3_BUSY(1); | 1287 | S_008014_CB2_BUSY(1) | S_008014_CB3_BUSY(1); |
1288 | u32 tmp; | 1288 | u32 tmp; |
1289 | 1289 | ||
1290 | if (!(RREG32(GRBM_STATUS) & GUI_ACTIVE)) | ||
1291 | return 0; | ||
1292 | |||
1290 | dev_info(rdev->dev, "GPU softreset \n"); | 1293 | dev_info(rdev->dev, "GPU softreset \n"); |
1291 | dev_info(rdev->dev, " R_008010_GRBM_STATUS=0x%08X\n", | 1294 | dev_info(rdev->dev, " R_008010_GRBM_STATUS=0x%08X\n", |
1292 | RREG32(R_008010_GRBM_STATUS)); | 1295 | RREG32(R_008010_GRBM_STATUS)); |