diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2010-12-20 12:35:03 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-12-20 21:52:54 -0500 |
commit | 9f0c4f9c2f835eee1bbb93f96bf9483d56f1892b (patch) | |
tree | 25676eaf238f2ae045b15029f77a010bfc280f9a /drivers/gpu | |
parent | 92971021c632876108ea2e06290a56a9157578f5 (diff) |
drm/radeon/kms: fix evergreen asic reset
Only reset the grbm blocks, srbm tends to lock the GPU
if not done properly and in most cases is not necessary.
Also, no need to call asic init after reset the grbm blocks.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 15 |
1 files changed, 0 insertions, 15 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 39fa75bf7c4f..6ced1ba2bee8 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -1924,7 +1924,6 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev) | |||
1924 | static int evergreen_gpu_soft_reset(struct radeon_device *rdev) | 1924 | static int evergreen_gpu_soft_reset(struct radeon_device *rdev) |
1925 | { | 1925 | { |
1926 | struct evergreen_mc_save save; | 1926 | struct evergreen_mc_save save; |
1927 | u32 srbm_reset = 0; | ||
1928 | u32 grbm_reset = 0; | 1927 | u32 grbm_reset = 0; |
1929 | 1928 | ||
1930 | dev_info(rdev->dev, "GPU softreset \n"); | 1929 | dev_info(rdev->dev, "GPU softreset \n"); |
@@ -1963,16 +1962,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev) | |||
1963 | udelay(50); | 1962 | udelay(50); |
1964 | WREG32(GRBM_SOFT_RESET, 0); | 1963 | WREG32(GRBM_SOFT_RESET, 0); |
1965 | (void)RREG32(GRBM_SOFT_RESET); | 1964 | (void)RREG32(GRBM_SOFT_RESET); |
1966 | |||
1967 | /* reset all the system blocks */ | ||
1968 | srbm_reset = SRBM_SOFT_RESET_ALL_MASK; | ||
1969 | |||
1970 | dev_info(rdev->dev, " SRBM_SOFT_RESET=0x%08X\n", srbm_reset); | ||
1971 | WREG32(SRBM_SOFT_RESET, srbm_reset); | ||
1972 | (void)RREG32(SRBM_SOFT_RESET); | ||
1973 | udelay(50); | ||
1974 | WREG32(SRBM_SOFT_RESET, 0); | ||
1975 | (void)RREG32(SRBM_SOFT_RESET); | ||
1976 | /* Wait a little for things to settle down */ | 1965 | /* Wait a little for things to settle down */ |
1977 | udelay(50); | 1966 | udelay(50); |
1978 | dev_info(rdev->dev, " GRBM_STATUS=0x%08X\n", | 1967 | dev_info(rdev->dev, " GRBM_STATUS=0x%08X\n", |
@@ -1983,10 +1972,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev) | |||
1983 | RREG32(GRBM_STATUS_SE1)); | 1972 | RREG32(GRBM_STATUS_SE1)); |
1984 | dev_info(rdev->dev, " SRBM_STATUS=0x%08X\n", | 1973 | dev_info(rdev->dev, " SRBM_STATUS=0x%08X\n", |
1985 | RREG32(SRBM_STATUS)); | 1974 | RREG32(SRBM_STATUS)); |
1986 | /* After reset we need to reinit the asic as GPU often endup in an | ||
1987 | * incoherent state. | ||
1988 | */ | ||
1989 | atom_asic_init(rdev->mode_info.atom_context); | ||
1990 | evergreen_mc_resume(rdev, &save); | 1975 | evergreen_mc_resume(rdev, &save); |
1991 | return 0; | 1976 | return 0; |
1992 | } | 1977 | } |