diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-12-16 16:02:15 -0500 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-12-16 16:02:15 -0500 |
commit | d8c58fabd75021cdd99abcd96513cb088d41092b (patch) | |
tree | f6554ecfb27c0d50f5ae6acae3a7077282813cab /drivers/gpu/drm/radeon/r600.c | |
parent | 9c04f015ebc2cc2cca5a4a576deb82a311578edc (diff) | |
parent | b08ebe7e776e5be0271ed1e1bbb384e1f29dd117 (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.c | 135 |
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"); | |||
83 | MODULE_FIRMWARE("radeon/CYPRESS_pfp.bin"); | 83 | MODULE_FIRMWARE("radeon/CYPRESS_pfp.bin"); |
84 | MODULE_FIRMWARE("radeon/CYPRESS_me.bin"); | 84 | MODULE_FIRMWARE("radeon/CYPRESS_me.bin"); |
85 | MODULE_FIRMWARE("radeon/CYPRESS_rlc.bin"); | 85 | MODULE_FIRMWARE("radeon/CYPRESS_rlc.bin"); |
86 | MODULE_FIRMWARE("radeon/PALM_pfp.bin"); | ||
87 | MODULE_FIRMWARE("radeon/PALM_me.bin"); | ||
88 | MODULE_FIRMWARE("radeon/SUMO_rlc.bin"); | ||
86 | 89 | ||
87 | int r600_debugfs_mc_info_init(struct radeon_device *rdev); | 90 | int 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 | */ |
1164 | void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) | 1167 | static 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 | ||
3097 | static inline void r600_irq_ack(struct radeon_device *rdev, | 3111 | static 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 | ||
3186 | void r600_irq_disable(struct radeon_device *rdev) | 3203 | void 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 | ||
3275 | restart_ih: | 3290 | restart_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 | } |