aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r600.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-12-16 16:02:15 -0500
committerChris Wilson <chris@chris-wilson.co.uk>2010-12-16 16:02:15 -0500
commitd8c58fabd75021cdd99abcd96513cb088d41092b (patch)
treef6554ecfb27c0d50f5ae6acae3a7077282813cab /drivers/gpu/drm/radeon/r600.c
parent9c04f015ebc2cc2cca5a4a576deb82a311578edc (diff)
parentb08ebe7e776e5be0271ed1e1bbb384e1f29dd117 (diff)
Merge remote branch 'airlied/drm-core-next' into drm-intel-next
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r--drivers/gpu/drm/radeon/r600.c135
1 files changed, 79 insertions, 56 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index a322d4f647bd..c6a37e036f11 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -83,6 +83,9 @@ MODULE_FIRMWARE("radeon/JUNIPER_rlc.bin");
83MODULE_FIRMWARE("radeon/CYPRESS_pfp.bin"); 83MODULE_FIRMWARE("radeon/CYPRESS_pfp.bin");
84MODULE_FIRMWARE("radeon/CYPRESS_me.bin"); 84MODULE_FIRMWARE("radeon/CYPRESS_me.bin");
85MODULE_FIRMWARE("radeon/CYPRESS_rlc.bin"); 85MODULE_FIRMWARE("radeon/CYPRESS_rlc.bin");
86MODULE_FIRMWARE("radeon/PALM_pfp.bin");
87MODULE_FIRMWARE("radeon/PALM_me.bin");
88MODULE_FIRMWARE("radeon/SUMO_rlc.bin");
86 89
87int r600_debugfs_mc_info_init(struct radeon_device *rdev); 90int r600_debugfs_mc_info_init(struct radeon_device *rdev);
88 91
@@ -1161,7 +1164,7 @@ static void r600_mc_program(struct radeon_device *rdev)
1161 * Note: GTT start, end, size should be initialized before calling this 1164 * Note: GTT start, end, size should be initialized before calling this
1162 * function on AGP platform. 1165 * function on AGP platform.
1163 */ 1166 */
1164void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) 1167static void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc)
1165{ 1168{
1166 u64 size_bf, size_af; 1169 u64 size_bf, size_af;
1167 1170
@@ -2000,6 +2003,10 @@ int r600_init_microcode(struct radeon_device *rdev)
2000 chip_name = "CYPRESS"; 2003 chip_name = "CYPRESS";
2001 rlc_chip_name = "CYPRESS"; 2004 rlc_chip_name = "CYPRESS";
2002 break; 2005 break;
2006 case CHIP_PALM:
2007 chip_name = "PALM";
2008 rlc_chip_name = "SUMO";
2009 break;
2003 default: BUG(); 2010 default: BUG();
2004 } 2011 }
2005 2012
@@ -2865,6 +2872,8 @@ static void r600_disable_interrupt_state(struct radeon_device *rdev)
2865 WREG32(CP_INT_CNTL, CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE); 2872 WREG32(CP_INT_CNTL, CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
2866 WREG32(GRBM_INT_CNTL, 0); 2873 WREG32(GRBM_INT_CNTL, 0);
2867 WREG32(DxMODE_INT_MASK, 0); 2874 WREG32(DxMODE_INT_MASK, 0);
2875 WREG32(D1GRPH_INTERRUPT_CONTROL, 0);
2876 WREG32(D2GRPH_INTERRUPT_CONTROL, 0);
2868 if (ASIC_IS_DCE3(rdev)) { 2877 if (ASIC_IS_DCE3(rdev)) {
2869 WREG32(DCE3_DACA_AUTODETECT_INT_CONTROL, 0); 2878 WREG32(DCE3_DACA_AUTODETECT_INT_CONTROL, 0);
2870 WREG32(DCE3_DACB_AUTODETECT_INT_CONTROL, 0); 2879 WREG32(DCE3_DACB_AUTODETECT_INT_CONTROL, 0);
@@ -2989,6 +2998,7 @@ int r600_irq_set(struct radeon_device *rdev)
2989 u32 hpd1, hpd2, hpd3, hpd4 = 0, hpd5 = 0, hpd6 = 0; 2998 u32 hpd1, hpd2, hpd3, hpd4 = 0, hpd5 = 0, hpd6 = 0;
2990 u32 grbm_int_cntl = 0; 2999 u32 grbm_int_cntl = 0;
2991 u32 hdmi1, hdmi2; 3000 u32 hdmi1, hdmi2;
3001 u32 d1grph = 0, d2grph = 0;
2992 3002
2993 if (!rdev->irq.installed) { 3003 if (!rdev->irq.installed) {
2994 WARN(1, "Can't enable IRQ/MSI because no handler is installed\n"); 3004 WARN(1, "Can't enable IRQ/MSI because no handler is installed\n");
@@ -3025,11 +3035,13 @@ int r600_irq_set(struct radeon_device *rdev)
3025 cp_int_cntl |= RB_INT_ENABLE; 3035 cp_int_cntl |= RB_INT_ENABLE;
3026 cp_int_cntl |= TIME_STAMP_INT_ENABLE; 3036 cp_int_cntl |= TIME_STAMP_INT_ENABLE;
3027 } 3037 }
3028 if (rdev->irq.crtc_vblank_int[0]) { 3038 if (rdev->irq.crtc_vblank_int[0] ||
3039 rdev->irq.pflip[0]) {
3029 DRM_DEBUG("r600_irq_set: vblank 0\n"); 3040 DRM_DEBUG("r600_irq_set: vblank 0\n");
3030 mode_int |= D1MODE_VBLANK_INT_MASK; 3041 mode_int |= D1MODE_VBLANK_INT_MASK;
3031 } 3042 }
3032 if (rdev->irq.crtc_vblank_int[1]) { 3043 if (rdev->irq.crtc_vblank_int[1] ||
3044 rdev->irq.pflip[1]) {
3033 DRM_DEBUG("r600_irq_set: vblank 1\n"); 3045 DRM_DEBUG("r600_irq_set: vblank 1\n");
3034 mode_int |= D2MODE_VBLANK_INT_MASK; 3046 mode_int |= D2MODE_VBLANK_INT_MASK;
3035 } 3047 }
@@ -3072,6 +3084,8 @@ int r600_irq_set(struct radeon_device *rdev)
3072 3084
3073 WREG32(CP_INT_CNTL, cp_int_cntl); 3085 WREG32(CP_INT_CNTL, cp_int_cntl);
3074 WREG32(DxMODE_INT_MASK, mode_int); 3086 WREG32(DxMODE_INT_MASK, mode_int);
3087 WREG32(D1GRPH_INTERRUPT_CONTROL, d1grph);
3088 WREG32(D2GRPH_INTERRUPT_CONTROL, d2grph);
3075 WREG32(GRBM_INT_CNTL, grbm_int_cntl); 3089 WREG32(GRBM_INT_CNTL, grbm_int_cntl);
3076 WREG32(R600_HDMI_BLOCK1 + R600_HDMI_CNTL, hdmi1); 3090 WREG32(R600_HDMI_BLOCK1 + R600_HDMI_CNTL, hdmi1);
3077 if (ASIC_IS_DCE3(rdev)) { 3091 if (ASIC_IS_DCE3(rdev)) {
@@ -3094,32 +3108,35 @@ int r600_irq_set(struct radeon_device *rdev)
3094 return 0; 3108 return 0;
3095} 3109}
3096 3110
3097static inline void r600_irq_ack(struct radeon_device *rdev, 3111static inline void r600_irq_ack(struct radeon_device *rdev)
3098 u32 *disp_int,
3099 u32 *disp_int_cont,
3100 u32 *disp_int_cont2)
3101{ 3112{
3102 u32 tmp; 3113 u32 tmp;
3103 3114
3104 if (ASIC_IS_DCE3(rdev)) { 3115 if (ASIC_IS_DCE3(rdev)) {
3105 *disp_int = RREG32(DCE3_DISP_INTERRUPT_STATUS); 3116 rdev->irq.stat_regs.r600.disp_int = RREG32(DCE3_DISP_INTERRUPT_STATUS);
3106 *disp_int_cont = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE); 3117 rdev->irq.stat_regs.r600.disp_int_cont = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE);
3107 *disp_int_cont2 = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE2); 3118 rdev->irq.stat_regs.r600.disp_int_cont2 = RREG32(DCE3_DISP_INTERRUPT_STATUS_CONTINUE2);
3108 } else { 3119 } else {
3109 *disp_int = RREG32(DISP_INTERRUPT_STATUS); 3120 rdev->irq.stat_regs.r600.disp_int = RREG32(DISP_INTERRUPT_STATUS);
3110 *disp_int_cont = RREG32(DISP_INTERRUPT_STATUS_CONTINUE); 3121 rdev->irq.stat_regs.r600.disp_int_cont = RREG32(DISP_INTERRUPT_STATUS_CONTINUE);
3111 *disp_int_cont2 = 0; 3122 rdev->irq.stat_regs.r600.disp_int_cont2 = 0;
3112 } 3123 }
3113 3124 rdev->irq.stat_regs.r600.d1grph_int = RREG32(D1GRPH_INTERRUPT_STATUS);
3114 if (*disp_int & LB_D1_VBLANK_INTERRUPT) 3125 rdev->irq.stat_regs.r600.d2grph_int = RREG32(D2GRPH_INTERRUPT_STATUS);
3126
3127 if (rdev->irq.stat_regs.r600.d1grph_int & DxGRPH_PFLIP_INT_OCCURRED)
3128 WREG32(D1GRPH_INTERRUPT_STATUS, DxGRPH_PFLIP_INT_CLEAR);
3129 if (rdev->irq.stat_regs.r600.d2grph_int & DxGRPH_PFLIP_INT_OCCURRED)
3130 WREG32(D2GRPH_INTERRUPT_STATUS, DxGRPH_PFLIP_INT_CLEAR);
3131 if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VBLANK_INTERRUPT)
3115 WREG32(D1MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK); 3132 WREG32(D1MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK);
3116 if (*disp_int & LB_D1_VLINE_INTERRUPT) 3133 if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VLINE_INTERRUPT)
3117 WREG32(D1MODE_VLINE_STATUS, DxMODE_VLINE_ACK); 3134 WREG32(D1MODE_VLINE_STATUS, DxMODE_VLINE_ACK);
3118 if (*disp_int & LB_D2_VBLANK_INTERRUPT) 3135 if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VBLANK_INTERRUPT)
3119 WREG32(D2MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK); 3136 WREG32(D2MODE_VBLANK_STATUS, DxMODE_VBLANK_ACK);
3120 if (*disp_int & LB_D2_VLINE_INTERRUPT) 3137 if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VLINE_INTERRUPT)
3121 WREG32(D2MODE_VLINE_STATUS, DxMODE_VLINE_ACK); 3138 WREG32(D2MODE_VLINE_STATUS, DxMODE_VLINE_ACK);
3122 if (*disp_int & DC_HPD1_INTERRUPT) { 3139 if (rdev->irq.stat_regs.r600.disp_int & DC_HPD1_INTERRUPT) {
3123 if (ASIC_IS_DCE3(rdev)) { 3140 if (ASIC_IS_DCE3(rdev)) {
3124 tmp = RREG32(DC_HPD1_INT_CONTROL); 3141 tmp = RREG32(DC_HPD1_INT_CONTROL);
3125 tmp |= DC_HPDx_INT_ACK; 3142 tmp |= DC_HPDx_INT_ACK;
@@ -3130,7 +3147,7 @@ static inline void r600_irq_ack(struct radeon_device *rdev,
3130 WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); 3147 WREG32(DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp);
3131 } 3148 }
3132 } 3149 }
3133 if (*disp_int & DC_HPD2_INTERRUPT) { 3150 if (rdev->irq.stat_regs.r600.disp_int & DC_HPD2_INTERRUPT) {
3134 if (ASIC_IS_DCE3(rdev)) { 3151 if (ASIC_IS_DCE3(rdev)) {
3135 tmp = RREG32(DC_HPD2_INT_CONTROL); 3152 tmp = RREG32(DC_HPD2_INT_CONTROL);
3136 tmp |= DC_HPDx_INT_ACK; 3153 tmp |= DC_HPDx_INT_ACK;
@@ -3141,7 +3158,7 @@ static inline void r600_irq_ack(struct radeon_device *rdev,
3141 WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); 3158 WREG32(DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp);
3142 } 3159 }
3143 } 3160 }
3144 if (*disp_int_cont & DC_HPD3_INTERRUPT) { 3161 if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD3_INTERRUPT) {
3145 if (ASIC_IS_DCE3(rdev)) { 3162 if (ASIC_IS_DCE3(rdev)) {
3146 tmp = RREG32(DC_HPD3_INT_CONTROL); 3163 tmp = RREG32(DC_HPD3_INT_CONTROL);
3147 tmp |= DC_HPDx_INT_ACK; 3164 tmp |= DC_HPDx_INT_ACK;
@@ -3152,18 +3169,18 @@ static inline void r600_irq_ack(struct radeon_device *rdev,
3152 WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp); 3169 WREG32(DC_HOT_PLUG_DETECT3_INT_CONTROL, tmp);
3153 } 3170 }
3154 } 3171 }
3155 if (*disp_int_cont & DC_HPD4_INTERRUPT) { 3172 if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD4_INTERRUPT) {
3156 tmp = RREG32(DC_HPD4_INT_CONTROL); 3173 tmp = RREG32(DC_HPD4_INT_CONTROL);
3157 tmp |= DC_HPDx_INT_ACK; 3174 tmp |= DC_HPDx_INT_ACK;
3158 WREG32(DC_HPD4_INT_CONTROL, tmp); 3175 WREG32(DC_HPD4_INT_CONTROL, tmp);
3159 } 3176 }
3160 if (ASIC_IS_DCE32(rdev)) { 3177 if (ASIC_IS_DCE32(rdev)) {
3161 if (*disp_int_cont2 & DC_HPD5_INTERRUPT) { 3178 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD5_INTERRUPT) {
3162 tmp = RREG32(DC_HPD5_INT_CONTROL); 3179 tmp = RREG32(DC_HPD5_INT_CONTROL);
3163 tmp |= DC_HPDx_INT_ACK; 3180 tmp |= DC_HPDx_INT_ACK;
3164 WREG32(DC_HPD5_INT_CONTROL, tmp); 3181 WREG32(DC_HPD5_INT_CONTROL, tmp);
3165 } 3182 }
3166 if (*disp_int_cont2 & DC_HPD6_INTERRUPT) { 3183 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT) {
3167 tmp = RREG32(DC_HPD5_INT_CONTROL); 3184 tmp = RREG32(DC_HPD5_INT_CONTROL);
3168 tmp |= DC_HPDx_INT_ACK; 3185 tmp |= DC_HPDx_INT_ACK;
3169 WREG32(DC_HPD6_INT_CONTROL, tmp); 3186 WREG32(DC_HPD6_INT_CONTROL, tmp);
@@ -3185,12 +3202,10 @@ static inline void r600_irq_ack(struct radeon_device *rdev,
3185 3202
3186void r600_irq_disable(struct radeon_device *rdev) 3203void r600_irq_disable(struct radeon_device *rdev)
3187{ 3204{
3188 u32 disp_int, disp_int_cont, disp_int_cont2;
3189
3190 r600_disable_interrupts(rdev); 3205 r600_disable_interrupts(rdev);
3191 /* Wait and acknowledge irq */ 3206 /* Wait and acknowledge irq */
3192 mdelay(1); 3207 mdelay(1);
3193 r600_irq_ack(rdev, &disp_int, &disp_int_cont, &disp_int_cont2); 3208 r600_irq_ack(rdev);
3194 r600_disable_interrupt_state(rdev); 3209 r600_disable_interrupt_state(rdev);
3195} 3210}
3196 3211
@@ -3253,7 +3268,7 @@ int r600_irq_process(struct radeon_device *rdev)
3253 u32 wptr = r600_get_ih_wptr(rdev); 3268 u32 wptr = r600_get_ih_wptr(rdev);
3254 u32 rptr = rdev->ih.rptr; 3269 u32 rptr = rdev->ih.rptr;
3255 u32 src_id, src_data; 3270 u32 src_id, src_data;
3256 u32 ring_index, disp_int, disp_int_cont, disp_int_cont2; 3271 u32 ring_index;
3257 unsigned long flags; 3272 unsigned long flags;
3258 bool queue_hotplug = false; 3273 bool queue_hotplug = false;
3259 3274
@@ -3274,7 +3289,7 @@ int r600_irq_process(struct radeon_device *rdev)
3274 3289
3275restart_ih: 3290restart_ih:
3276 /* display interrupts */ 3291 /* display interrupts */
3277 r600_irq_ack(rdev, &disp_int, &disp_int_cont, &disp_int_cont2); 3292 r600_irq_ack(rdev);
3278 3293
3279 rdev->ih.wptr = wptr; 3294 rdev->ih.wptr = wptr;
3280 while (rptr != wptr) { 3295 while (rptr != wptr) {
@@ -3287,17 +3302,21 @@ restart_ih:
3287 case 1: /* D1 vblank/vline */ 3302 case 1: /* D1 vblank/vline */
3288 switch (src_data) { 3303 switch (src_data) {
3289 case 0: /* D1 vblank */ 3304 case 0: /* D1 vblank */
3290 if (disp_int & LB_D1_VBLANK_INTERRUPT) { 3305 if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VBLANK_INTERRUPT) {
3291 drm_handle_vblank(rdev->ddev, 0); 3306 if (rdev->irq.crtc_vblank_int[0]) {
3292 rdev->pm.vblank_sync = true; 3307 drm_handle_vblank(rdev->ddev, 0);
3293 wake_up(&rdev->irq.vblank_queue); 3308 rdev->pm.vblank_sync = true;
3294 disp_int &= ~LB_D1_VBLANK_INTERRUPT; 3309 wake_up(&rdev->irq.vblank_queue);
3310 }
3311 if (rdev->irq.pflip[0])
3312 radeon_crtc_handle_flip(rdev, 0);
3313 rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
3295 DRM_DEBUG("IH: D1 vblank\n"); 3314 DRM_DEBUG("IH: D1 vblank\n");
3296 } 3315 }
3297 break; 3316 break;
3298 case 1: /* D1 vline */ 3317 case 1: /* D1 vline */
3299 if (disp_int & LB_D1_VLINE_INTERRUPT) { 3318 if (rdev->irq.stat_regs.r600.disp_int & LB_D1_VLINE_INTERRUPT) {
3300 disp_int &= ~LB_D1_VLINE_INTERRUPT; 3319 rdev->irq.stat_regs.r600.disp_int &= ~LB_D1_VLINE_INTERRUPT;
3301 DRM_DEBUG("IH: D1 vline\n"); 3320 DRM_DEBUG("IH: D1 vline\n");
3302 } 3321 }
3303 break; 3322 break;
@@ -3309,17 +3328,21 @@ restart_ih:
3309 case 5: /* D2 vblank/vline */ 3328 case 5: /* D2 vblank/vline */
3310 switch (src_data) { 3329 switch (src_data) {
3311 case 0: /* D2 vblank */ 3330 case 0: /* D2 vblank */
3312 if (disp_int & LB_D2_VBLANK_INTERRUPT) { 3331 if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VBLANK_INTERRUPT) {
3313 drm_handle_vblank(rdev->ddev, 1); 3332 if (rdev->irq.crtc_vblank_int[1]) {
3314 rdev->pm.vblank_sync = true; 3333 drm_handle_vblank(rdev->ddev, 1);
3315 wake_up(&rdev->irq.vblank_queue); 3334 rdev->pm.vblank_sync = true;
3316 disp_int &= ~LB_D2_VBLANK_INTERRUPT; 3335 wake_up(&rdev->irq.vblank_queue);
3336 }
3337 if (rdev->irq.pflip[1])
3338 radeon_crtc_handle_flip(rdev, 1);
3339 rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VBLANK_INTERRUPT;
3317 DRM_DEBUG("IH: D2 vblank\n"); 3340 DRM_DEBUG("IH: D2 vblank\n");
3318 } 3341 }
3319 break; 3342 break;
3320 case 1: /* D1 vline */ 3343 case 1: /* D1 vline */
3321 if (disp_int & LB_D2_VLINE_INTERRUPT) { 3344 if (rdev->irq.stat_regs.r600.disp_int & LB_D2_VLINE_INTERRUPT) {
3322 disp_int &= ~LB_D2_VLINE_INTERRUPT; 3345 rdev->irq.stat_regs.r600.disp_int &= ~LB_D2_VLINE_INTERRUPT;
3323 DRM_DEBUG("IH: D2 vline\n"); 3346 DRM_DEBUG("IH: D2 vline\n");
3324 } 3347 }
3325 break; 3348 break;
@@ -3331,43 +3354,43 @@ restart_ih:
3331 case 19: /* HPD/DAC hotplug */ 3354 case 19: /* HPD/DAC hotplug */
3332 switch (src_data) { 3355 switch (src_data) {
3333 case 0: 3356 case 0:
3334 if (disp_int & DC_HPD1_INTERRUPT) { 3357 if (rdev->irq.stat_regs.r600.disp_int & DC_HPD1_INTERRUPT) {
3335 disp_int &= ~DC_HPD1_INTERRUPT; 3358 rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD1_INTERRUPT;
3336 queue_hotplug = true; 3359 queue_hotplug = true;
3337 DRM_DEBUG("IH: HPD1\n"); 3360 DRM_DEBUG("IH: HPD1\n");
3338 } 3361 }
3339 break; 3362 break;
3340 case 1: 3363 case 1:
3341 if (disp_int & DC_HPD2_INTERRUPT) { 3364 if (rdev->irq.stat_regs.r600.disp_int & DC_HPD2_INTERRUPT) {
3342 disp_int &= ~DC_HPD2_INTERRUPT; 3365 rdev->irq.stat_regs.r600.disp_int &= ~DC_HPD2_INTERRUPT;
3343 queue_hotplug = true; 3366 queue_hotplug = true;
3344 DRM_DEBUG("IH: HPD2\n"); 3367 DRM_DEBUG("IH: HPD2\n");
3345 } 3368 }
3346 break; 3369 break;
3347 case 4: 3370 case 4:
3348 if (disp_int_cont & DC_HPD3_INTERRUPT) { 3371 if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD3_INTERRUPT) {
3349 disp_int_cont &= ~DC_HPD3_INTERRUPT; 3372 rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD3_INTERRUPT;
3350 queue_hotplug = true; 3373 queue_hotplug = true;
3351 DRM_DEBUG("IH: HPD3\n"); 3374 DRM_DEBUG("IH: HPD3\n");
3352 } 3375 }
3353 break; 3376 break;
3354 case 5: 3377 case 5:
3355 if (disp_int_cont & DC_HPD4_INTERRUPT) { 3378 if (rdev->irq.stat_regs.r600.disp_int_cont & DC_HPD4_INTERRUPT) {
3356 disp_int_cont &= ~DC_HPD4_INTERRUPT; 3379 rdev->irq.stat_regs.r600.disp_int_cont &= ~DC_HPD4_INTERRUPT;
3357 queue_hotplug = true; 3380 queue_hotplug = true;
3358 DRM_DEBUG("IH: HPD4\n"); 3381 DRM_DEBUG("IH: HPD4\n");
3359 } 3382 }
3360 break; 3383 break;
3361 case 10: 3384 case 10:
3362 if (disp_int_cont2 & DC_HPD5_INTERRUPT) { 3385 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD5_INTERRUPT) {
3363 disp_int_cont2 &= ~DC_HPD5_INTERRUPT; 3386 rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD5_INTERRUPT;
3364 queue_hotplug = true; 3387 queue_hotplug = true;
3365 DRM_DEBUG("IH: HPD5\n"); 3388 DRM_DEBUG("IH: HPD5\n");
3366 } 3389 }
3367 break; 3390 break;
3368 case 12: 3391 case 12:
3369 if (disp_int_cont2 & DC_HPD6_INTERRUPT) { 3392 if (rdev->irq.stat_regs.r600.disp_int_cont2 & DC_HPD6_INTERRUPT) {
3370 disp_int_cont2 &= ~DC_HPD6_INTERRUPT; 3393 rdev->irq.stat_regs.r600.disp_int_cont2 &= ~DC_HPD6_INTERRUPT;
3371 queue_hotplug = true; 3394 queue_hotplug = true;
3372 DRM_DEBUG("IH: HPD6\n"); 3395 DRM_DEBUG("IH: HPD6\n");
3373 } 3396 }