drm/radeon: fix dual-head on rv250
Subsystems (2)
Dave Airlie
maintainerPATCH 1/1 drm/radeon: fix dual-head on rv250
From: Dave Airlie <[email protected]>
Plugged in FireMV with the rv250 on it, and the second crtc/dac didn't work, we were reading/writing different registers than we were modifying in the code.
--- drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 22 +++++++++------------- 1 files changed, 9 insertions(+), 13 deletions(-)
drivers/gpu/drm/radeon/radeon_legacy_encoders.c +9 -13
@@ -931,16 +931,14 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder,if (ASIC_IS_R300 (rdev)) { gpiopad_a =RREG32 (RADEON_GPIOPAD_A ) |1 ; disp_output_cntl =RREG32 (RADEON_DISP_OUTPUT_CNTL ); - } - -if (rdev->family ==CHIP_R200 ||ASIC_IS_R300 (rdev)) - disp_tv_out_cntl =RREG32 (RADEON_DISP_TV_OUT_CNTL ); -else + }else if (rdev->family !=CHIP_R200 ) disp_hw_debug =RREG32 (RADEON_DISP_HW_DEBUG ); - -if (rdev->family ==CHIP_R200 ) +else if (rdev->family ==CHIP_R200 ) fp2_gen_cntl =RREG32 (RADEON_FP2_GEN_CNTL ); +if (rdev->family >=CHIP_R200 ) + disp_tv_out_cntl =RREG32 (RADEON_DISP_TV_OUT_CNTL ); +if (is_tv) {uint32_t dac_cntl;
@@ -1005,15 +1003,13 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder,if (ASIC_IS_R300 (rdev)) {WREG32_P (RADEON_GPIOPAD_A , gpiopad_a, ~1 );WREG32 (RADEON_DISP_OUTPUT_CNTL , disp_output_cntl); - } + }else if (rdev->family !=CHIP_R200 ) +WREG32 (RADEON_DISP_HW_DEBUG , disp_hw_debug); +else if (rdev->family ==CHIP_R200 ) +WREG32 (RADEON_FP2_GEN_CNTL , fp2_gen_cntl);if (rdev->family >=CHIP_R200 )WREG32 (RADEON_DISP_TV_OUT_CNTL , disp_tv_out_cntl); -else -WREG32 (RADEON_DISP_HW_DEBUG , disp_hw_debug); - -if (rdev->family ==CHIP_R200 ) -WREG32 (RADEON_FP2_GEN_CNTL , fp2_gen_cntl);if (is_tv)radeon_legacy_tv_mode_set (encoder, mode, adjusted_mode);
Signature · 9 lines
1.6.5.2 ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo --
Quoted 6 lines · Dave Airlie
From: Dave Airlie <[email protected]>
Plugged in FireMV with the rv250 on it, and the second crtc/dac didn't work, we were reading/writing different registers than we were modifying in the code.
Signed-off-by Dave Airlie <[email protected]>
Quoted 54 lines
---
drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 22 +++++++++-------------1 files changed, 9 insertions(+), 13 deletions(-)drivers/gpu/drm/radeon/radeon_legacy_encoders.c +9
-14@@ -931,16 +931,14 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder, if (ASIC_IS_R300(rdev)) { gpiopad_a = RREG32(RADEON_GPIOPAD_A) | 1; disp_output_cntl = RREG32(RADEON_DISP_OUTPUT_CNTL); - } - - if (rdev->family == CHIP_R200 || ASIC_IS_R300(rdev)) - disp_tv_out_cntl = RREG32(RADEON_DISP_TV_OUT_CNTL); - else + } else if (rdev->family != CHIP_R200) disp_hw_debug = RREG32(RADEON_DISP_HW_DEBUG); - - if (rdev->family == CHIP_R200) + else if (rdev->family == CHIP_R200) fp2_gen_cntl = RREG32(RADEON_FP2_GEN_CNTL); + if (rdev->family >= CHIP_R200) + disp_tv_out_cntl = RREG32(RADEON_DISP_TV_OUT_CNTL); + if (is_tv) { uint32_t dac_cntl;@@ -1005,15 +1003,13 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder, if (ASIC_IS_R300(rdev)) { WREG32_P(RADEON_GPIOPAD_A, gpiopad_a, ~1); WREG32(RADEON_DISP_OUTPUT_CNTL, disp_output_cntl); - } + } else if (rdev->family != CHIP_R200) + WREG32(RADEON_DISP_HW_DEBUG, disp_hw_debug); + else if (rdev->family == CHIP_R200) + WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl); if (rdev->family >= CHIP_R200) WREG32(RADEON_DISP_TV_OUT_CNTL, disp_tv_out_cntl); - else - WREG32(RADEON_DISP_HW_DEBUG, disp_hw_debug); - - if (rdev->family == CHIP_R200) - WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl); if (is_tv) radeon_legacy_tv_mode_set(encoder, mode, adjusted_mode); --1.6.5.2
Quoted 11 lines
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win:
http://p.sf.net/sfu/thinkgeek-promo
--
_______________________________________________
Dri-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win:
http://p.sf.net/sfu/thinkgeek-promo
--