Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87364760 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie
Browse files

drm/radeon/kms: fix s/r issues with bios scratch regs

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: default avatarAlex Deucher <alexdeucher@gmail.com>
Cc: stable@kernel.org
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent a70b95c0
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -2609,7 +2609,7 @@ void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev)
	bios_2_scratch &= ~ATOM_S2_VRI_BRIGHT_ENABLE;
	bios_2_scratch &= ~ATOM_S2_VRI_BRIGHT_ENABLE;


	/* tell the bios not to handle mode switching */
	/* 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) {
	if (rdev->family >= CHIP_R600) {
		WREG32(R600_BIOS_2_SCRATCH, bios_2_scratch);
		WREG32(R600_BIOS_2_SCRATCH, bios_2_scratch);
@@ -2660,10 +2660,13 @@ void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock)
	else
	else
		bios_6_scratch = RREG32(RADEON_BIOS_6_SCRATCH);
		bios_6_scratch = RREG32(RADEON_BIOS_6_SCRATCH);


	if (lock)
	if (lock) {
		bios_6_scratch |= ATOM_S6_CRITICAL_STATE;
		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_CRITICAL_STATE;
		bios_6_scratch |= ATOM_S6_ACC_MODE;
	}


	if (rdev->family >= CHIP_R600)
	if (rdev->family >= CHIP_R600)
		WREG32(R600_BIOS_6_SCRATCH, bios_6_scratch);
		WREG32(R600_BIOS_6_SCRATCH, bios_6_scratch);