| From 87364760de5d631390c478fcbac8db1b926e0adf Mon Sep 17 00:00:00 2001 |
| From: Alex Deucher <alexdeucher@gmail.com> |
| Date: Wed, 2 Feb 2011 19:46:06 -0500 |
| Subject: drm/radeon/kms: fix s/r issues with bios scratch regs |
| |
| From: Alex Deucher <alexdeucher@gmail.com> |
| |
| commit 87364760de5d631390c478fcbac8db1b926e0adf upstream. |
| |
| The accelerate mode bit gets checked by certain atom |
| command tables to set up some register state. It needs |
| to be clear when setting modes and set when not. |
| |
| Fixes: |
| https://bugzilla.kernel.org/show_bug.cgi?id=26942 |
| |
| Signed-off-by: Alex Deucher <alexdeucher@gmail.com> |
| Signed-off-by: Dave Airlie <airlied@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/gpu/drm/radeon/radeon_atombios.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/gpu/drm/radeon/radeon_atombios.c |
| +++ b/drivers/gpu/drm/radeon/radeon_atombios.c |
| @@ -1217,7 +1217,7 @@ void radeon_atom_initialize_bios_scratch |
| bios_2_scratch &= ~ATOM_S2_VRI_BRIGHT_ENABLE; |
| |
| /* tell the bios not to handle mode switching */ |
| - bios_6_scratch |= (ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH | ATOM_S6_ACC_MODE); |
| + bios_6_scratch |= ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH; |
| |
| if (rdev->family >= CHIP_R600) { |
| WREG32(R600_BIOS_2_SCRATCH, bios_2_scratch); |
| @@ -1268,10 +1268,13 @@ void radeon_atom_output_lock(struct drm_ |
| else |
| bios_6_scratch = RREG32(RADEON_BIOS_6_SCRATCH); |
| |
| - if (lock) |
| + if (lock) { |
| bios_6_scratch |= ATOM_S6_CRITICAL_STATE; |
| - else |
| + bios_6_scratch &= ~ATOM_S6_ACC_MODE; |
| + } else { |
| bios_6_scratch &= ~ATOM_S6_CRITICAL_STATE; |
| + bios_6_scratch |= ATOM_S6_ACC_MODE; |
| + } |
| |
| if (rdev->family >= CHIP_R600) |
| WREG32(R600_BIOS_6_SCRATCH, bios_6_scratch); |