Subversion Repositories Kolibri OS

Rev

Rev 2004 | Rev 2160 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2004 Rev 2005
Line 317... Line 317...
317
			break;
317
			break;
318
		default:
318
		default:
319
			break;
319
			break;
320
		}
320
		}
321
	}
321
	}
322
//	if (rdev->irq.installed)
322
	if (rdev->irq.installed)
323
//		evergreen_irq_set(rdev);
323
		evergreen_irq_set(rdev);
324
}
324
}
Line 325... Line -...
325
 
-
 
326
#if 0
-
 
327
 
325
 
328
void evergreen_hpd_fini(struct radeon_device *rdev)
326
void evergreen_hpd_fini(struct radeon_device *rdev)
329
{
327
{
330
	struct drm_device *dev = rdev->ddev;
328
	struct drm_device *dev = rdev->ddev;
Line 361... Line 359...
361
			break;
359
			break;
362
		}
360
		}
363
	}
361
	}
364
}
362
}
Line 365... Line -...
365
 
-
 
366
#endif
363
 
Line 367... Line 364...
367
/* watermark setup */
364
/* watermark setup */
368
 
365
 
369
static u32 evergreen_line_buffer_adjust(struct radeon_device *rdev,
366
static u32 evergreen_line_buffer_adjust(struct radeon_device *rdev,
Line 976... Line 973...
976
 
973
 
977
void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save)
974
void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save)
978
{
975
{
979
	save->vga_control[0] = RREG32(D1VGA_CONTROL);
976
	save->vga_control[0] = RREG32(D1VGA_CONTROL);
980
	save->vga_control[1] = RREG32(D2VGA_CONTROL);
-
 
981
	save->vga_control[2] = RREG32(EVERGREEN_D3VGA_CONTROL);
-
 
982
	save->vga_control[3] = RREG32(EVERGREEN_D4VGA_CONTROL);
-
 
983
	save->vga_control[4] = RREG32(EVERGREEN_D5VGA_CONTROL);
-
 
984
	save->vga_control[5] = RREG32(EVERGREEN_D6VGA_CONTROL);
977
	save->vga_control[1] = RREG32(D2VGA_CONTROL);
985
	save->vga_render_control = RREG32(VGA_RENDER_CONTROL);
978
	save->vga_render_control = RREG32(VGA_RENDER_CONTROL);
986
	save->vga_hdp_control = RREG32(VGA_HDP_CONTROL);
979
	save->vga_hdp_control = RREG32(VGA_HDP_CONTROL);
987
	save->crtc_control[0] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET);
980
	save->crtc_control[0] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET);
988
	save->crtc_control[1] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET);
981
	save->crtc_control[1] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET);
-
 
982
	if (rdev->num_crtc >= 4) {
-
 
983
		save->vga_control[2] = RREG32(EVERGREEN_D3VGA_CONTROL);
989
	if (!(rdev->flags & RADEON_IS_IGP)) {
984
		save->vga_control[3] = RREG32(EVERGREEN_D4VGA_CONTROL);
990
	save->crtc_control[2] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET);
985
	save->crtc_control[2] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET);
-
 
986
	save->crtc_control[3] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET);
-
 
987
	}
-
 
988
	if (rdev->num_crtc >= 6) {
-
 
989
		save->vga_control[4] = RREG32(EVERGREEN_D5VGA_CONTROL);
991
	save->crtc_control[3] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET);
990
		save->vga_control[5] = RREG32(EVERGREEN_D6VGA_CONTROL);
992
	save->crtc_control[4] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET);
991
	save->crtc_control[4] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET);
993
	save->crtc_control[5] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET);
992
	save->crtc_control[5] = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET);
Line 994... Line 993...
994
	}
993
	}
995
 
994
 
996
	/* Stop all video */
995
	/* Stop all video */
997
	WREG32(VGA_RENDER_CONTROL, 0);
996
	WREG32(VGA_RENDER_CONTROL, 0);
998
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 1);
997
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 1);
999
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 1);
998
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 1);
1000
	if (!(rdev->flags & RADEON_IS_IGP)) {
999
	if (rdev->num_crtc >= 4) {
-
 
1000
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 1);
-
 
1001
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 1);
1001
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 1);
1002
	}
1002
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 1);
1003
	if (rdev->num_crtc >= 6) {
1003
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 1);
1004
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 1);
1004
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 1);
1005
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 1);
1005
	}
1006
	}
1006
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
1007
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
1007
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
1008
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
1008
	if (!(rdev->flags & RADEON_IS_IGP)) {
1009
	if (rdev->num_crtc >= 4) {
-
 
1010
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
-
 
1011
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
1009
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
1012
	}
1010
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
1013
	if (rdev->num_crtc >= 6) {
1011
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
1014
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
1012
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
1015
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
1013
	}
1016
	}
1014
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
1017
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
1015
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
1018
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
1016
	if (!(rdev->flags & RADEON_IS_IGP)) {
1019
	if (rdev->num_crtc >= 4) {
-
 
1020
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
-
 
1021
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
1017
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
1022
	}
1018
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
1023
	if (rdev->num_crtc >= 6) {
1019
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
1024
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
Line 1020... Line 1025...
1020
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
1025
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
1021
	}
1026
	}
-
 
1027
 
1022
 
1028
	WREG32(D1VGA_CONTROL, 0);
1023
	WREG32(D1VGA_CONTROL, 0);
1029
	WREG32(D2VGA_CONTROL, 0);
-
 
1030
	if (rdev->num_crtc >= 4) {
-
 
1031
	WREG32(EVERGREEN_D3VGA_CONTROL, 0);
1024
	WREG32(D2VGA_CONTROL, 0);
1032
	WREG32(EVERGREEN_D4VGA_CONTROL, 0);
1025
	WREG32(EVERGREEN_D3VGA_CONTROL, 0);
1033
	}
1026
	WREG32(EVERGREEN_D4VGA_CONTROL, 0);
1034
	if (rdev->num_crtc >= 6) {
-
 
1035
	WREG32(EVERGREEN_D5VGA_CONTROL, 0);
Line 1027... Line 1036...
1027
	WREG32(EVERGREEN_D5VGA_CONTROL, 0);
1036
	WREG32(EVERGREEN_D6VGA_CONTROL, 0);
1028
	WREG32(EVERGREEN_D6VGA_CONTROL, 0);
1037
	}
1029
}
1038
}
1030
 
1039
 
Line 1046... Line 1055...
1046
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + EVERGREEN_CRTC1_REGISTER_OFFSET,
1055
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + EVERGREEN_CRTC1_REGISTER_OFFSET,
1047
	       (u32)rdev->mc.vram_start);
1056
	       (u32)rdev->mc.vram_start);
1048
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS + EVERGREEN_CRTC1_REGISTER_OFFSET,
1057
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS + EVERGREEN_CRTC1_REGISTER_OFFSET,
1049
	       (u32)rdev->mc.vram_start);
1058
	       (u32)rdev->mc.vram_start);
Line 1050... Line 1059...
1050
 
1059
 
1051
	if (!(rdev->flags & RADEON_IS_IGP)) {
1060
	if (rdev->num_crtc >= 4) {
1052
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC2_REGISTER_OFFSET,
1061
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC2_REGISTER_OFFSET,
1053
	       upper_32_bits(rdev->mc.vram_start));
1062
	       upper_32_bits(rdev->mc.vram_start));
1054
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC2_REGISTER_OFFSET,
1063
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC2_REGISTER_OFFSET,
1055
	       upper_32_bits(rdev->mc.vram_start));
1064
	       upper_32_bits(rdev->mc.vram_start));
Line 1064... Line 1073...
1064
	       upper_32_bits(rdev->mc.vram_start));
1073
	       upper_32_bits(rdev->mc.vram_start));
1065
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + EVERGREEN_CRTC3_REGISTER_OFFSET,
1074
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + EVERGREEN_CRTC3_REGISTER_OFFSET,
1066
	       (u32)rdev->mc.vram_start);
1075
	       (u32)rdev->mc.vram_start);
1067
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS + EVERGREEN_CRTC3_REGISTER_OFFSET,
1076
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS + EVERGREEN_CRTC3_REGISTER_OFFSET,
1068
	       (u32)rdev->mc.vram_start);
1077
	       (u32)rdev->mc.vram_start);
1069
 
1078
	}
-
 
1079
	if (rdev->num_crtc >= 6) {
1070
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC4_REGISTER_OFFSET,
1080
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC4_REGISTER_OFFSET,
1071
	       upper_32_bits(rdev->mc.vram_start));
1081
	       upper_32_bits(rdev->mc.vram_start));
1072
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC4_REGISTER_OFFSET,
1082
	WREG32(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH + EVERGREEN_CRTC4_REGISTER_OFFSET,
1073
	       upper_32_bits(rdev->mc.vram_start));
1083
	       upper_32_bits(rdev->mc.vram_start));
1074
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + EVERGREEN_CRTC4_REGISTER_OFFSET,
1084
	WREG32(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + EVERGREEN_CRTC4_REGISTER_OFFSET,
Line 1092... Line 1102...
1092
	WREG32(VGA_HDP_CONTROL, save->vga_hdp_control);
1102
	WREG32(VGA_HDP_CONTROL, save->vga_hdp_control);
1093
	mdelay(1);
1103
	mdelay(1);
1094
	/* Restore video state */
1104
	/* Restore video state */
1095
	WREG32(D1VGA_CONTROL, save->vga_control[0]);
1105
	WREG32(D1VGA_CONTROL, save->vga_control[0]);
1096
	WREG32(D2VGA_CONTROL, save->vga_control[1]);
1106
	WREG32(D2VGA_CONTROL, save->vga_control[1]);
-
 
1107
	if (rdev->num_crtc >= 4) {
1097
	WREG32(EVERGREEN_D3VGA_CONTROL, save->vga_control[2]);
1108
	WREG32(EVERGREEN_D3VGA_CONTROL, save->vga_control[2]);
1098
	WREG32(EVERGREEN_D4VGA_CONTROL, save->vga_control[3]);
1109
	WREG32(EVERGREEN_D4VGA_CONTROL, save->vga_control[3]);
-
 
1110
	}
-
 
1111
	if (rdev->num_crtc >= 6) {
1099
	WREG32(EVERGREEN_D5VGA_CONTROL, save->vga_control[4]);
1112
	WREG32(EVERGREEN_D5VGA_CONTROL, save->vga_control[4]);
1100
	WREG32(EVERGREEN_D6VGA_CONTROL, save->vga_control[5]);
1113
	WREG32(EVERGREEN_D6VGA_CONTROL, save->vga_control[5]);
-
 
1114
	}
1101
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 1);
1115
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 1);
1102
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 1);
1116
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 1);
1103
	if (!(rdev->flags & RADEON_IS_IGP)) {
1117
	if (rdev->num_crtc >= 4) {
1104
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 1);
1118
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 1);
1105
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 1);
1119
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 1);
-
 
1120
	}
-
 
1121
	if (rdev->num_crtc >= 6) {
1106
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 1);
1122
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 1);
1107
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 1);
1123
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 1);
1108
	}
1124
	}
1109
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, save->crtc_control[0]);
1125
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, save->crtc_control[0]);
1110
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, save->crtc_control[1]);
1126
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, save->crtc_control[1]);
1111
	if (!(rdev->flags & RADEON_IS_IGP)) {
1127
	if (rdev->num_crtc >= 4) {
1112
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, save->crtc_control[2]);
1128
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, save->crtc_control[2]);
1113
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, save->crtc_control[3]);
1129
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, save->crtc_control[3]);
-
 
1130
	}
-
 
1131
	if (rdev->num_crtc >= 6) {
1114
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, save->crtc_control[4]);
1132
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, save->crtc_control[4]);
1115
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, save->crtc_control[5]);
1133
	WREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, save->crtc_control[5]);
1116
	}
1134
	}
1117
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
1135
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
1118
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
1136
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
1119
	if (!(rdev->flags & RADEON_IS_IGP)) {
1137
	if (rdev->num_crtc >= 4) {
1120
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
1138
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
1121
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
1139
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
-
 
1140
	}
-
 
1141
	if (rdev->num_crtc >= 6) {
1122
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
1142
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
1123
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
1143
	WREG32(EVERGREEN_CRTC_UPDATE_LOCK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
1124
	}
1144
	}
1125
	WREG32(VGA_RENDER_CONTROL, save->vga_render_control);
1145
	WREG32(VGA_RENDER_CONTROL, save->vga_render_control);
1126
}
1146
}
Line 1968... Line 1988...
1968
		case CHIP_HEMLOCK:
1988
		case CHIP_HEMLOCK:
1969
		case CHIP_BARTS:
1989
		case CHIP_BARTS:
1970
			gb_backend_map = 0x66442200;
1990
			gb_backend_map = 0x66442200;
1971
			break;
1991
			break;
1972
		case CHIP_JUNIPER:
1992
		case CHIP_JUNIPER:
1973
			gb_backend_map = 0x00006420;
1993
			gb_backend_map = 0x00002200;
1974
			break;
1994
			break;
1975
		default:
1995
		default:
1976
			gb_backend_map =
1996
			gb_backend_map =
1977
				evergreen_get_tile_pipe_to_backend_map(rdev,
1997
				evergreen_get_tile_pipe_to_backend_map(rdev,
1978
								       rdev->config.evergreen.max_tile_pipes,
1998
								       rdev->config.evergreen.max_tile_pipes,
Line 2408... Line 2428...
2408
 
2428
 
2409
	WREG32(CP_INT_CNTL, CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
2429
	WREG32(CP_INT_CNTL, CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE);
2410
	WREG32(GRBM_INT_CNTL, 0);
2430
	WREG32(GRBM_INT_CNTL, 0);
2411
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
2431
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
2412
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
2432
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
2413
	if (!(rdev->flags & RADEON_IS_IGP)) {
2433
	if (rdev->num_crtc >= 4) {
2414
	WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
2434
	WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
-
 
2435
	WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
-
 
2436
	}
2415
	WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
2437
	if (rdev->num_crtc >= 6) {
2416
	WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
2438
	WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
2417
	WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
2439
	WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
Line 2418... Line 2440...
2418
	}
2440
	}
2419
 
2441
 
2420
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
2442
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, 0);
2421
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
2443
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, 0);
2422
	if (!(rdev->flags & RADEON_IS_IGP)) {
2444
	if (rdev->num_crtc >= 4) {
-
 
2445
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
-
 
2446
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
2423
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, 0);
2447
	}
2424
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, 0);
2448
	if (rdev->num_crtc >= 6) {
2425
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
2449
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, 0);
Line 2426... Line 2450...
2426
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
2450
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, 0);
Line 2441... Line 2465...
2441
	WREG32(DC_HPD5_INT_CONTROL, tmp);
2465
	WREG32(DC_HPD5_INT_CONTROL, tmp);
2442
	tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY;
2466
	tmp = RREG32(DC_HPD6_INT_CONTROL) & DC_HPDx_INT_POLARITY;
2443
	WREG32(DC_HPD6_INT_CONTROL, tmp);
2467
	WREG32(DC_HPD6_INT_CONTROL, tmp);
Line 2444... Line 2468...
2444
 
2468
 
-
 
2469
}
-
 
2470
 
-
 
2471
int evergreen_irq_set(struct radeon_device *rdev)
-
 
2472
{
-
 
2473
	u32 cp_int_cntl = CNTX_BUSY_INT_ENABLE | CNTX_EMPTY_INT_ENABLE;
-
 
2474
	u32 crtc1 = 0, crtc2 = 0, crtc3 = 0, crtc4 = 0, crtc5 = 0, crtc6 = 0;
-
 
2475
	u32 hpd1, hpd2, hpd3, hpd4, hpd5, hpd6;
-
 
2476
	u32 grbm_int_cntl = 0;
-
 
2477
	u32 grph1 = 0, grph2 = 0, grph3 = 0, grph4 = 0, grph5 = 0, grph6 = 0;
-
 
2478
 
-
 
2479
	if (!rdev->irq.installed) {
-
 
2480
		WARN(1, "Can't enable IRQ/MSI because no handler is installed\n");
-
 
2481
		return -EINVAL;
-
 
2482
	}
-
 
2483
	/* don't enable anything if the ih is disabled */
-
 
2484
	if (!rdev->ih.enabled) {
-
 
2485
		r600_disable_interrupts(rdev);
-
 
2486
		/* force the active interrupt state to all disabled */
-
 
2487
		evergreen_disable_interrupt_state(rdev);
-
 
2488
		return 0;
-
 
2489
	}
-
 
2490
 
-
 
2491
	hpd1 = RREG32(DC_HPD1_INT_CONTROL) & ~DC_HPDx_INT_EN;
-
 
2492
	hpd2 = RREG32(DC_HPD2_INT_CONTROL) & ~DC_HPDx_INT_EN;
-
 
2493
	hpd3 = RREG32(DC_HPD3_INT_CONTROL) & ~DC_HPDx_INT_EN;
-
 
2494
	hpd4 = RREG32(DC_HPD4_INT_CONTROL) & ~DC_HPDx_INT_EN;
-
 
2495
	hpd5 = RREG32(DC_HPD5_INT_CONTROL) & ~DC_HPDx_INT_EN;
-
 
2496
	hpd6 = RREG32(DC_HPD6_INT_CONTROL) & ~DC_HPDx_INT_EN;
-
 
2497
 
-
 
2498
	if (rdev->irq.sw_int) {
-
 
2499
		DRM_DEBUG("evergreen_irq_set: sw int\n");
-
 
2500
		cp_int_cntl |= RB_INT_ENABLE;
-
 
2501
		cp_int_cntl |= TIME_STAMP_INT_ENABLE;
-
 
2502
	}
-
 
2503
	if (rdev->irq.crtc_vblank_int[0] ||
-
 
2504
	    rdev->irq.pflip[0]) {
-
 
2505
		DRM_DEBUG("evergreen_irq_set: vblank 0\n");
-
 
2506
		crtc1 |= VBLANK_INT_MASK;
-
 
2507
	}
-
 
2508
	if (rdev->irq.crtc_vblank_int[1] ||
-
 
2509
	    rdev->irq.pflip[1]) {
-
 
2510
		DRM_DEBUG("evergreen_irq_set: vblank 1\n");
-
 
2511
		crtc2 |= VBLANK_INT_MASK;
-
 
2512
	}
-
 
2513
	if (rdev->irq.crtc_vblank_int[2] ||
-
 
2514
	    rdev->irq.pflip[2]) {
-
 
2515
		DRM_DEBUG("evergreen_irq_set: vblank 2\n");
-
 
2516
		crtc3 |= VBLANK_INT_MASK;
-
 
2517
	}
-
 
2518
	if (rdev->irq.crtc_vblank_int[3] ||
-
 
2519
	    rdev->irq.pflip[3]) {
-
 
2520
		DRM_DEBUG("evergreen_irq_set: vblank 3\n");
-
 
2521
		crtc4 |= VBLANK_INT_MASK;
-
 
2522
	}
-
 
2523
	if (rdev->irq.crtc_vblank_int[4] ||
-
 
2524
	    rdev->irq.pflip[4]) {
-
 
2525
		DRM_DEBUG("evergreen_irq_set: vblank 4\n");
-
 
2526
		crtc5 |= VBLANK_INT_MASK;
-
 
2527
	}
-
 
2528
	if (rdev->irq.crtc_vblank_int[5] ||
-
 
2529
	    rdev->irq.pflip[5]) {
-
 
2530
		DRM_DEBUG("evergreen_irq_set: vblank 5\n");
-
 
2531
		crtc6 |= VBLANK_INT_MASK;
-
 
2532
	}
-
 
2533
	if (rdev->irq.hpd[0]) {
-
 
2534
		DRM_DEBUG("evergreen_irq_set: hpd 1\n");
-
 
2535
		hpd1 |= DC_HPDx_INT_EN;
-
 
2536
	}
-
 
2537
	if (rdev->irq.hpd[1]) {
-
 
2538
		DRM_DEBUG("evergreen_irq_set: hpd 2\n");
-
 
2539
		hpd2 |= DC_HPDx_INT_EN;
-
 
2540
	}
-
 
2541
	if (rdev->irq.hpd[2]) {
-
 
2542
		DRM_DEBUG("evergreen_irq_set: hpd 3\n");
-
 
2543
		hpd3 |= DC_HPDx_INT_EN;
-
 
2544
	}
-
 
2545
	if (rdev->irq.hpd[3]) {
-
 
2546
		DRM_DEBUG("evergreen_irq_set: hpd 4\n");
-
 
2547
		hpd4 |= DC_HPDx_INT_EN;
-
 
2548
	}
-
 
2549
	if (rdev->irq.hpd[4]) {
-
 
2550
		DRM_DEBUG("evergreen_irq_set: hpd 5\n");
-
 
2551
		hpd5 |= DC_HPDx_INT_EN;
-
 
2552
	}
-
 
2553
	if (rdev->irq.hpd[5]) {
-
 
2554
		DRM_DEBUG("evergreen_irq_set: hpd 6\n");
-
 
2555
		hpd6 |= DC_HPDx_INT_EN;
-
 
2556
	}
-
 
2557
	if (rdev->irq.gui_idle) {
-
 
2558
		DRM_DEBUG("gui idle\n");
-
 
2559
		grbm_int_cntl |= GUI_IDLE_INT_ENABLE;
-
 
2560
	}
-
 
2561
 
-
 
2562
	WREG32(CP_INT_CNTL, cp_int_cntl);
-
 
2563
	WREG32(GRBM_INT_CNTL, grbm_int_cntl);
-
 
2564
 
-
 
2565
	WREG32(INT_MASK + EVERGREEN_CRTC0_REGISTER_OFFSET, crtc1);
-
 
2566
	WREG32(INT_MASK + EVERGREEN_CRTC1_REGISTER_OFFSET, crtc2);
-
 
2567
	if (rdev->num_crtc >= 4) {
-
 
2568
		WREG32(INT_MASK + EVERGREEN_CRTC2_REGISTER_OFFSET, crtc3);
-
 
2569
		WREG32(INT_MASK + EVERGREEN_CRTC3_REGISTER_OFFSET, crtc4);
-
 
2570
	}
-
 
2571
	if (rdev->num_crtc >= 6) {
-
 
2572
		WREG32(INT_MASK + EVERGREEN_CRTC4_REGISTER_OFFSET, crtc5);
-
 
2573
		WREG32(INT_MASK + EVERGREEN_CRTC5_REGISTER_OFFSET, crtc6);
-
 
2574
	}
-
 
2575
 
-
 
2576
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET, grph1);
-
 
2577
	WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET, grph2);
-
 
2578
	if (rdev->num_crtc >= 4) {
-
 
2579
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET, grph3);
-
 
2580
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET, grph4);
-
 
2581
	}
-
 
2582
	if (rdev->num_crtc >= 6) {
-
 
2583
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET, grph5);
-
 
2584
		WREG32(GRPH_INT_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET, grph6);
-
 
2585
	}
-
 
2586
 
-
 
2587
	WREG32(DC_HPD1_INT_CONTROL, hpd1);
-
 
2588
	WREG32(DC_HPD2_INT_CONTROL, hpd2);
-
 
2589
	WREG32(DC_HPD3_INT_CONTROL, hpd3);
-
 
2590
	WREG32(DC_HPD4_INT_CONTROL, hpd4);
-
 
2591
	WREG32(DC_HPD5_INT_CONTROL, hpd5);
-
 
2592
	WREG32(DC_HPD6_INT_CONTROL, hpd6);
-
 
2593
 
-
 
2594
	return 0;
-
 
2595
}
-
 
2596
 
-
 
2597
static inline void evergreen_irq_ack(struct radeon_device *rdev)
-
 
2598
{
-
 
2599
	u32 tmp;
-
 
2600
 
-
 
2601
	rdev->irq.stat_regs.evergreen.disp_int = RREG32(DISP_INTERRUPT_STATUS);
-
 
2602
	rdev->irq.stat_regs.evergreen.disp_int_cont = RREG32(DISP_INTERRUPT_STATUS_CONTINUE);
-
 
2603
	rdev->irq.stat_regs.evergreen.disp_int_cont2 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE2);
-
 
2604
	rdev->irq.stat_regs.evergreen.disp_int_cont3 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE3);
-
 
2605
	rdev->irq.stat_regs.evergreen.disp_int_cont4 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE4);
-
 
2606
	rdev->irq.stat_regs.evergreen.disp_int_cont5 = RREG32(DISP_INTERRUPT_STATUS_CONTINUE5);
-
 
2607
	rdev->irq.stat_regs.evergreen.d1grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET);
-
 
2608
	rdev->irq.stat_regs.evergreen.d2grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET);
-
 
2609
	if (rdev->num_crtc >= 4) {
-
 
2610
		rdev->irq.stat_regs.evergreen.d3grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC2_REGISTER_OFFSET);
-
 
2611
		rdev->irq.stat_regs.evergreen.d4grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC3_REGISTER_OFFSET);
-
 
2612
	}
-
 
2613
	if (rdev->num_crtc >= 6) {
-
 
2614
		rdev->irq.stat_regs.evergreen.d5grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC4_REGISTER_OFFSET);
-
 
2615
		rdev->irq.stat_regs.evergreen.d6grph_int = RREG32(GRPH_INT_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET);
-
 
2616
	}
-
 
2617
 
-
 
2618
	if (rdev->irq.stat_regs.evergreen.d1grph_int & GRPH_PFLIP_INT_OCCURRED)
-
 
2619
		WREG32(GRPH_INT_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET, GRPH_PFLIP_INT_CLEAR);
-
 
2620
	if (rdev->irq.stat_regs.evergreen.d2grph_int & GRPH_PFLIP_INT_OCCURRED)
-
 
2621
		WREG32(GRPH_INT_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET, GRPH_PFLIP_INT_CLEAR);
-
 
2622
	if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VBLANK_INTERRUPT)
-
 
2623
		WREG32(VBLANK_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET, VBLANK_ACK);
-
 
2624
	if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VLINE_INTERRUPT)
-
 
2625
		WREG32(VLINE_STATUS + EVERGREEN_CRTC0_REGISTER_OFFSET, VLINE_ACK);
-
 
2626
	if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VBLANK_INTERRUPT)
-
 
2627
		WREG32(VBLANK_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET, VBLANK_ACK);
-
 
2628
	if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VLINE_INTERRUPT)
-
 
2629
		WREG32(VLINE_STATUS + EVERGREEN_CRTC1_REGISTER_OFFSET, VLINE_ACK);
-
 
2630
 
-
 
2631
	if (rdev->num_crtc >= 4) {
-
 
2632
		if (rdev->irq.stat_regs.evergreen.d3grph_int & GRPH_PFLIP_INT_OCCURRED)
-
 
2633
			WREG32(GRPH_INT_STATUS + EVERGREEN_CRTC2_REGISTER_OFFSET, GRPH_PFLIP_INT_CLEAR);
-
 
2634
		if (rdev->irq.stat_regs.evergreen.d4grph_int & GRPH_PFLIP_INT_OCCURRED)
-
 
2635
			WREG32(GRPH_INT_STATUS + EVERGREEN_CRTC3_REGISTER_OFFSET, GRPH_PFLIP_INT_CLEAR);
-
 
2636
		if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT)
-
 
2637
			WREG32(VBLANK_STATUS + EVERGREEN_CRTC2_REGISTER_OFFSET, VBLANK_ACK);
-
 
2638
		if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VLINE_INTERRUPT)
-
 
2639
			WREG32(VLINE_STATUS + EVERGREEN_CRTC2_REGISTER_OFFSET, VLINE_ACK);
-
 
2640
		if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT)
-
 
2641
			WREG32(VBLANK_STATUS + EVERGREEN_CRTC3_REGISTER_OFFSET, VBLANK_ACK);
-
 
2642
		if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VLINE_INTERRUPT)
-
 
2643
			WREG32(VLINE_STATUS + EVERGREEN_CRTC3_REGISTER_OFFSET, VLINE_ACK);
-
 
2644
	}
-
 
2645
 
-
 
2646
	if (rdev->num_crtc >= 6) {
-
 
2647
		if (rdev->irq.stat_regs.evergreen.d5grph_int & GRPH_PFLIP_INT_OCCURRED)
-
 
2648
			WREG32(GRPH_INT_STATUS + EVERGREEN_CRTC4_REGISTER_OFFSET, GRPH_PFLIP_INT_CLEAR);
-
 
2649
		if (rdev->irq.stat_regs.evergreen.d6grph_int & GRPH_PFLIP_INT_OCCURRED)
-
 
2650
			WREG32(GRPH_INT_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET, GRPH_PFLIP_INT_CLEAR);
-
 
2651
		if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT)
-
 
2652
			WREG32(VBLANK_STATUS + EVERGREEN_CRTC4_REGISTER_OFFSET, VBLANK_ACK);
-
 
2653
		if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VLINE_INTERRUPT)
-
 
2654
			WREG32(VLINE_STATUS + EVERGREEN_CRTC4_REGISTER_OFFSET, VLINE_ACK);
-
 
2655
		if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT)
-
 
2656
			WREG32(VBLANK_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET, VBLANK_ACK);
-
 
2657
		if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VLINE_INTERRUPT)
-
 
2658
			WREG32(VLINE_STATUS + EVERGREEN_CRTC5_REGISTER_OFFSET, VLINE_ACK);
-
 
2659
	}
-
 
2660
 
-
 
2661
	if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT) {
-
 
2662
		tmp = RREG32(DC_HPD1_INT_CONTROL);
-
 
2663
		tmp |= DC_HPDx_INT_ACK;
-
 
2664
		WREG32(DC_HPD1_INT_CONTROL, tmp);
-
 
2665
	}
-
 
2666
	if (rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_INTERRUPT) {
-
 
2667
		tmp = RREG32(DC_HPD2_INT_CONTROL);
-
 
2668
		tmp |= DC_HPDx_INT_ACK;
-
 
2669
		WREG32(DC_HPD2_INT_CONTROL, tmp);
-
 
2670
	}
-
 
2671
	if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_INTERRUPT) {
-
 
2672
		tmp = RREG32(DC_HPD3_INT_CONTROL);
-
 
2673
		tmp |= DC_HPDx_INT_ACK;
-
 
2674
		WREG32(DC_HPD3_INT_CONTROL, tmp);
-
 
2675
	}
-
 
2676
	if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_INTERRUPT) {
-
 
2677
		tmp = RREG32(DC_HPD4_INT_CONTROL);
-
 
2678
		tmp |= DC_HPDx_INT_ACK;
-
 
2679
		WREG32(DC_HPD4_INT_CONTROL, tmp);
-
 
2680
	}
-
 
2681
	if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_INTERRUPT) {
-
 
2682
		tmp = RREG32(DC_HPD5_INT_CONTROL);
-
 
2683
		tmp |= DC_HPDx_INT_ACK;
-
 
2684
		WREG32(DC_HPD5_INT_CONTROL, tmp);
-
 
2685
	}
-
 
2686
	if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) {
-
 
2687
		tmp = RREG32(DC_HPD5_INT_CONTROL);
-
 
2688
		tmp |= DC_HPDx_INT_ACK;
-
 
2689
		WREG32(DC_HPD6_INT_CONTROL, tmp);
-
 
2690
	}
-
 
2691
}
-
 
2692
static inline u32 evergreen_get_ih_wptr(struct radeon_device *rdev)
-
 
2693
{
-
 
2694
	u32 wptr, tmp;
-
 
2695
 
-
 
2696
	if (rdev->wb.enabled)
-
 
2697
		wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]);
-
 
2698
	else
-
 
2699
		wptr = RREG32(IH_RB_WPTR);
-
 
2700
 
-
 
2701
	if (wptr & RB_OVERFLOW) {
-
 
2702
		/* When a ring buffer overflow happen start parsing interrupt
-
 
2703
		 * from the last not overwritten vector (wptr + 16). Hopefully
-
 
2704
		 * this should allow us to catchup.
-
 
2705
		 */
-
 
2706
		dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, %d, %d)\n",
-
 
2707
			wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask);
-
 
2708
		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
-
 
2709
		tmp = RREG32(IH_RB_CNTL);
-
 
2710
		tmp |= IH_WPTR_OVERFLOW_CLEAR;
-
 
2711
		WREG32(IH_RB_CNTL, tmp);
-
 
2712
	}
-
 
2713
	return (wptr & rdev->ih.ptr_mask);
-
 
2714
}
-
 
2715
 
-
 
2716
int evergreen_irq_process(struct radeon_device *rdev)
-
 
2717
{
-
 
2718
	u32 wptr;
-
 
2719
	u32 rptr;
-
 
2720
	u32 src_id, src_data;
-
 
2721
	u32 ring_index;
-
 
2722
	unsigned long flags;
-
 
2723
	bool queue_hotplug = false;
-
 
2724
 
-
 
2725
	if (!rdev->ih.enabled || rdev->shutdown)
-
 
2726
		return IRQ_NONE;
-
 
2727
 
-
 
2728
	wptr = evergreen_get_ih_wptr(rdev);
-
 
2729
	rptr = rdev->ih.rptr;
-
 
2730
	DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);
-
 
2731
 
-
 
2732
	spin_lock_irqsave(&rdev->ih.lock, flags);
-
 
2733
	if (rptr == wptr) {
-
 
2734
		spin_unlock_irqrestore(&rdev->ih.lock, flags);
-
 
2735
		return IRQ_NONE;
-
 
2736
	}
-
 
2737
restart_ih:
-
 
2738
	/* display interrupts */
-
 
2739
	evergreen_irq_ack(rdev);
-
 
2740
 
-
 
2741
	rdev->ih.wptr = wptr;
-
 
2742
	while (rptr != wptr) {
-
 
2743
		/* wptr/rptr are in bytes! */
-
 
2744
		ring_index = rptr / 4;
-
 
2745
		src_id =  le32_to_cpu(rdev->ih.ring[ring_index]) & 0xff;
-
 
2746
		src_data = le32_to_cpu(rdev->ih.ring[ring_index + 1]) & 0xfffffff;
-
 
2747
 
-
 
2748
		switch (src_id) {
-
 
2749
		case 1: /* D1 vblank/vline */
-
 
2750
			switch (src_data) {
-
 
2751
			case 0: /* D1 vblank */
-
 
2752
				if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VBLANK_INTERRUPT) {
-
 
2753
					if (rdev->irq.crtc_vblank_int[0]) {
-
 
2754
				//		drm_handle_vblank(rdev->ddev, 0);
-
 
2755
						rdev->pm.vblank_sync = true;
-
 
2756
				//		wake_up(&rdev->irq.vblank_queue);
-
 
2757
					}
-
 
2758
				//	if (rdev->irq.pflip[0])
-
 
2759
				//		radeon_crtc_handle_flip(rdev, 0);
-
 
2760
					rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VBLANK_INTERRUPT;
-
 
2761
					DRM_DEBUG("IH: D1 vblank\n");
-
 
2762
				}
-
 
2763
				break;
-
 
2764
			case 1: /* D1 vline */
-
 
2765
				if (rdev->irq.stat_regs.evergreen.disp_int & LB_D1_VLINE_INTERRUPT) {
-
 
2766
					rdev->irq.stat_regs.evergreen.disp_int &= ~LB_D1_VLINE_INTERRUPT;
-
 
2767
					DRM_DEBUG("IH: D1 vline\n");
-
 
2768
				}
-
 
2769
				break;
-
 
2770
			default:
-
 
2771
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2772
				break;
-
 
2773
			}
-
 
2774
			break;
-
 
2775
		case 2: /* D2 vblank/vline */
-
 
2776
			switch (src_data) {
-
 
2777
			case 0: /* D2 vblank */
-
 
2778
				if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VBLANK_INTERRUPT) {
-
 
2779
					if (rdev->irq.crtc_vblank_int[1]) {
-
 
2780
				//		drm_handle_vblank(rdev->ddev, 1);
-
 
2781
						rdev->pm.vblank_sync = true;
-
 
2782
				//		wake_up(&rdev->irq.vblank_queue);
-
 
2783
					}
-
 
2784
			//		if (rdev->irq.pflip[1])
-
 
2785
			//			radeon_crtc_handle_flip(rdev, 1);
-
 
2786
					rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VBLANK_INTERRUPT;
-
 
2787
					DRM_DEBUG("IH: D2 vblank\n");
-
 
2788
				}
-
 
2789
				break;
-
 
2790
			case 1: /* D2 vline */
-
 
2791
				if (rdev->irq.stat_regs.evergreen.disp_int_cont & LB_D2_VLINE_INTERRUPT) {
-
 
2792
					rdev->irq.stat_regs.evergreen.disp_int_cont &= ~LB_D2_VLINE_INTERRUPT;
-
 
2793
					DRM_DEBUG("IH: D2 vline\n");
-
 
2794
				}
-
 
2795
				break;
-
 
2796
			default:
-
 
2797
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2798
				break;
-
 
2799
			}
-
 
2800
			break;
-
 
2801
		case 3: /* D3 vblank/vline */
-
 
2802
			switch (src_data) {
-
 
2803
			case 0: /* D3 vblank */
-
 
2804
				if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VBLANK_INTERRUPT) {
-
 
2805
					if (rdev->irq.crtc_vblank_int[2]) {
-
 
2806
				//		drm_handle_vblank(rdev->ddev, 2);
-
 
2807
						rdev->pm.vblank_sync = true;
-
 
2808
				//		wake_up(&rdev->irq.vblank_queue);
-
 
2809
					}
-
 
2810
				//	if (rdev->irq.pflip[2])
-
 
2811
				//		radeon_crtc_handle_flip(rdev, 2);
-
 
2812
					rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VBLANK_INTERRUPT;
-
 
2813
					DRM_DEBUG("IH: D3 vblank\n");
-
 
2814
				}
-
 
2815
				break;
-
 
2816
			case 1: /* D3 vline */
-
 
2817
				if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & LB_D3_VLINE_INTERRUPT) {
-
 
2818
					rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~LB_D3_VLINE_INTERRUPT;
-
 
2819
					DRM_DEBUG("IH: D3 vline\n");
-
 
2820
				}
-
 
2821
				break;
-
 
2822
			default:
-
 
2823
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2824
				break;
-
 
2825
			}
-
 
2826
			break;
-
 
2827
		case 4: /* D4 vblank/vline */
-
 
2828
			switch (src_data) {
-
 
2829
			case 0: /* D4 vblank */
-
 
2830
				if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VBLANK_INTERRUPT) {
-
 
2831
					if (rdev->irq.crtc_vblank_int[3]) {
-
 
2832
					//	drm_handle_vblank(rdev->ddev, 3);
-
 
2833
						rdev->pm.vblank_sync = true;
-
 
2834
					//	wake_up(&rdev->irq.vblank_queue);
-
 
2835
					}
-
 
2836
		//			if (rdev->irq.pflip[3])
-
 
2837
		//				radeon_crtc_handle_flip(rdev, 3);
-
 
2838
					rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VBLANK_INTERRUPT;
-
 
2839
					DRM_DEBUG("IH: D4 vblank\n");
-
 
2840
				}
-
 
2841
				break;
-
 
2842
			case 1: /* D4 vline */
-
 
2843
				if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & LB_D4_VLINE_INTERRUPT) {
-
 
2844
					rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~LB_D4_VLINE_INTERRUPT;
-
 
2845
					DRM_DEBUG("IH: D4 vline\n");
-
 
2846
				}
-
 
2847
				break;
-
 
2848
			default:
-
 
2849
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2850
				break;
-
 
2851
			}
-
 
2852
			break;
-
 
2853
		case 5: /* D5 vblank/vline */
-
 
2854
			switch (src_data) {
-
 
2855
			case 0: /* D5 vblank */
-
 
2856
				if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VBLANK_INTERRUPT) {
-
 
2857
					if (rdev->irq.crtc_vblank_int[4]) {
-
 
2858
//						drm_handle_vblank(rdev->ddev, 4);
-
 
2859
						rdev->pm.vblank_sync = true;
-
 
2860
//						wake_up(&rdev->irq.vblank_queue);
-
 
2861
					}
-
 
2862
//					if (rdev->irq.pflip[4])
-
 
2863
//						radeon_crtc_handle_flip(rdev, 4);
-
 
2864
					rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VBLANK_INTERRUPT;
-
 
2865
					DRM_DEBUG("IH: D5 vblank\n");
-
 
2866
				}
-
 
2867
				break;
-
 
2868
			case 1: /* D5 vline */
-
 
2869
				if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & LB_D5_VLINE_INTERRUPT) {
-
 
2870
					rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~LB_D5_VLINE_INTERRUPT;
-
 
2871
					DRM_DEBUG("IH: D5 vline\n");
-
 
2872
				}
-
 
2873
				break;
-
 
2874
			default:
-
 
2875
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2876
				break;
-
 
2877
			}
-
 
2878
			break;
-
 
2879
		case 6: /* D6 vblank/vline */
-
 
2880
			switch (src_data) {
-
 
2881
			case 0: /* D6 vblank */
-
 
2882
				if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VBLANK_INTERRUPT) {
-
 
2883
					if (rdev->irq.crtc_vblank_int[5]) {
-
 
2884
				//		drm_handle_vblank(rdev->ddev, 5);
-
 
2885
						rdev->pm.vblank_sync = true;
-
 
2886
				//		wake_up(&rdev->irq.vblank_queue);
-
 
2887
					}
-
 
2888
			//		if (rdev->irq.pflip[5])
-
 
2889
			//			radeon_crtc_handle_flip(rdev, 5);
-
 
2890
					rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VBLANK_INTERRUPT;
-
 
2891
					DRM_DEBUG("IH: D6 vblank\n");
-
 
2892
				}
-
 
2893
				break;
-
 
2894
			case 1: /* D6 vline */
-
 
2895
				if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & LB_D6_VLINE_INTERRUPT) {
-
 
2896
					rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~LB_D6_VLINE_INTERRUPT;
-
 
2897
					DRM_DEBUG("IH: D6 vline\n");
-
 
2898
				}
-
 
2899
				break;
-
 
2900
			default:
-
 
2901
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2902
				break;
-
 
2903
			}
-
 
2904
			break;
-
 
2905
		case 42: /* HPD hotplug */
-
 
2906
			switch (src_data) {
-
 
2907
			case 0:
-
 
2908
				if (rdev->irq.stat_regs.evergreen.disp_int & DC_HPD1_INTERRUPT) {
-
 
2909
					rdev->irq.stat_regs.evergreen.disp_int &= ~DC_HPD1_INTERRUPT;
-
 
2910
					queue_hotplug = true;
-
 
2911
					DRM_DEBUG("IH: HPD1\n");
-
 
2912
				}
-
 
2913
				break;
-
 
2914
			case 1:
-
 
2915
				if (rdev->irq.stat_regs.evergreen.disp_int_cont & DC_HPD2_INTERRUPT) {
-
 
2916
					rdev->irq.stat_regs.evergreen.disp_int_cont &= ~DC_HPD2_INTERRUPT;
-
 
2917
					queue_hotplug = true;
-
 
2918
					DRM_DEBUG("IH: HPD2\n");
-
 
2919
				}
-
 
2920
				break;
-
 
2921
			case 2:
-
 
2922
				if (rdev->irq.stat_regs.evergreen.disp_int_cont2 & DC_HPD3_INTERRUPT) {
-
 
2923
					rdev->irq.stat_regs.evergreen.disp_int_cont2 &= ~DC_HPD3_INTERRUPT;
-
 
2924
					queue_hotplug = true;
-
 
2925
					DRM_DEBUG("IH: HPD3\n");
-
 
2926
				}
-
 
2927
				break;
-
 
2928
			case 3:
-
 
2929
				if (rdev->irq.stat_regs.evergreen.disp_int_cont3 & DC_HPD4_INTERRUPT) {
-
 
2930
					rdev->irq.stat_regs.evergreen.disp_int_cont3 &= ~DC_HPD4_INTERRUPT;
-
 
2931
					queue_hotplug = true;
-
 
2932
					DRM_DEBUG("IH: HPD4\n");
-
 
2933
				}
-
 
2934
				break;
-
 
2935
			case 4:
-
 
2936
				if (rdev->irq.stat_regs.evergreen.disp_int_cont4 & DC_HPD5_INTERRUPT) {
-
 
2937
					rdev->irq.stat_regs.evergreen.disp_int_cont4 &= ~DC_HPD5_INTERRUPT;
-
 
2938
					queue_hotplug = true;
-
 
2939
					DRM_DEBUG("IH: HPD5\n");
-
 
2940
				}
-
 
2941
				break;
-
 
2942
			case 5:
-
 
2943
				if (rdev->irq.stat_regs.evergreen.disp_int_cont5 & DC_HPD6_INTERRUPT) {
-
 
2944
					rdev->irq.stat_regs.evergreen.disp_int_cont5 &= ~DC_HPD6_INTERRUPT;
-
 
2945
					queue_hotplug = true;
-
 
2946
					DRM_DEBUG("IH: HPD6\n");
-
 
2947
				}
-
 
2948
				break;
-
 
2949
			default:
-
 
2950
				DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2951
				break;
-
 
2952
			}
-
 
2953
			break;
-
 
2954
		case 176: /* CP_INT in ring buffer */
-
 
2955
		case 177: /* CP_INT in IB1 */
-
 
2956
		case 178: /* CP_INT in IB2 */
-
 
2957
			DRM_DEBUG("IH: CP int: 0x%08x\n", src_data);
-
 
2958
			radeon_fence_process(rdev);
-
 
2959
			break;
-
 
2960
		case 181: /* CP EOP event */
-
 
2961
			DRM_DEBUG("IH: CP EOP\n");
-
 
2962
			radeon_fence_process(rdev);
-
 
2963
			break;
-
 
2964
		case 233: /* GUI IDLE */
-
 
2965
			DRM_DEBUG("IH: GUI idle\n");
-
 
2966
			rdev->pm.gui_idle = true;
-
 
2967
//			wake_up(&rdev->irq.idle_queue);
-
 
2968
			break;
-
 
2969
		default:
-
 
2970
			DRM_DEBUG("Unhandled interrupt: %d %d\n", src_id, src_data);
-
 
2971
			break;
-
 
2972
		}
-
 
2973
 
-
 
2974
		/* wptr/rptr are in bytes! */
-
 
2975
		rptr += 16;
-
 
2976
		rptr &= rdev->ih.ptr_mask;
-
 
2977
	}
-
 
2978
	/* make sure wptr hasn't changed while processing */
-
 
2979
	wptr = evergreen_get_ih_wptr(rdev);
-
 
2980
	if (wptr != rdev->ih.wptr)
-
 
2981
		goto restart_ih;
-
 
2982
//	if (queue_hotplug)
-
 
2983
//		schedule_work(&rdev->hotplug_work);
-
 
2984
	rdev->ih.rptr = rptr;
-
 
2985
	WREG32(IH_RB_RPTR, rdev->ih.rptr);
-
 
2986
	spin_unlock_irqrestore(&rdev->ih.lock, flags);
-
 
2987
	return IRQ_HANDLED;
-
 
2988
}
2445
}
2989
 
2446
static int evergreen_startup(struct radeon_device *rdev)
2990
static int evergreen_startup(struct radeon_device *rdev)
2447
{
2991
{
Line 2448... Line 2992...
2448
	int r;
2992
	int r;
Line 2481... Line 3025...
2481
		r = evergreen_pcie_gart_enable(rdev);
3025
		r = evergreen_pcie_gart_enable(rdev);
2482
		if (r)
3026
		if (r)
2483
			return r;
3027
			return r;
2484
	}
3028
	}
2485
	evergreen_gpu_init(rdev);
3029
	evergreen_gpu_init(rdev);
2486
#if 0
3030
 
2487
	r = evergreen_blit_init(rdev);
3031
	r = evergreen_blit_init(rdev);
2488
	if (r) {
3032
	if (r) {
2489
		evergreen_blit_fini(rdev);
3033
		evergreen_blit_fini(rdev);
2490
		rdev->asic->copy = NULL;
3034
		rdev->asic->copy = NULL;
2491
		dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
3035
		dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r);
Line 2493... Line 3037...
2493
 
3037
 
2494
	/* allocate wb buffer */
3038
	/* allocate wb buffer */
2495
	r = radeon_wb_init(rdev);
3039
	r = radeon_wb_init(rdev);
2496
	if (r)
3040
	if (r)
2497
		return r;
-
 
Line 2498... Line 3041...
2498
#endif
3041
		return r;
-
 
3042
 
-
 
3043
	/* Enable IRQ */
-
 
3044
	r = r600_irq_init(rdev);
-
 
3045
	if (r) {
-
 
3046
		DRM_ERROR("radeon: IH init failed (%d).\n", r);
-
 
3047
//		radeon_irq_kms_fini(rdev);
-
 
3048
		return r;
Line 2499... Line 3049...
2499
 
3049
	}
2500
	/* Enable IRQ */
3050
	evergreen_irq_set(rdev);
2501
 
3051
 
2502
    r = radeon_ring_init(rdev, rdev->cp.ring_size);
3052
    r = radeon_ring_init(rdev, rdev->cp.ring_size);
Line -... Line 3064...
-
 
3064
 
-
 
3065
 
-
 
3066
 
-
 
3067
 
-
 
3068
 
Line -... Line 3069...
-
 
3069
int evergreen_copy_blit(struct radeon_device *rdev,
-
 
3070
			uint64_t src_offset, uint64_t dst_offset,
-
 
3071
			unsigned num_pages, struct radeon_fence *fence)
-
 
3072
{
-
 
3073
	int r;
-
 
3074
 
-
 
3075
	mutex_lock(&rdev->r600_blit.mutex);
-
 
3076
	rdev->r600_blit.vb_ib = NULL;
-
 
3077
	r = evergreen_blit_prepare_copy(rdev, num_pages * RADEON_GPU_PAGE_SIZE);
-
 
3078
	if (r) {
-
 
3079
		if (rdev->r600_blit.vb_ib)
-
 
3080
			radeon_ib_free(rdev, &rdev->r600_blit.vb_ib);
-
 
3081
		mutex_unlock(&rdev->r600_blit.mutex);
-
 
3082
		return r;
Line 2514... Line 3083...
2514
 
3083
	}
2515
 
3084
	evergreen_kms_blit_copy(rdev, src_offset, dst_offset, num_pages * RADEON_GPU_PAGE_SIZE);
2516
 
3085
	evergreen_blit_done_copy(rdev, fence);
2517
 
3086
	mutex_unlock(&rdev->r600_blit.mutex);
Line 2564... Line 3133...
2564
	/* Initialize surface registers */
3133
	/* Initialize surface registers */
2565
	radeon_surface_init(rdev);
3134
	radeon_surface_init(rdev);
2566
	/* Initialize clocks */
3135
	/* Initialize clocks */
2567
	radeon_get_clock_info(rdev->ddev);
3136
	radeon_get_clock_info(rdev->ddev);
2568
	/* Fence driver */
3137
	/* Fence driver */
-
 
3138
	r = radeon_fence_driver_init(rdev);
-
 
3139
	if (r)
-
 
3140
		return r;
2569
    /* initialize AGP */
3141
    /* initialize AGP */
2570
	if (rdev->flags & RADEON_IS_AGP) {
3142
	if (rdev->flags & RADEON_IS_AGP) {
2571
		r = radeon_agp_init(rdev);
3143
		r = radeon_agp_init(rdev);
2572
		if (r)
3144
		if (r)
2573
			radeon_agp_disable(rdev);
3145
			radeon_agp_disable(rdev);
Line 2579... Line 3151...
2579
	/* Memory manager */
3151
	/* Memory manager */
2580
	r = radeon_bo_init(rdev);
3152
	r = radeon_bo_init(rdev);
2581
	if (r)
3153
	if (r)
2582
		return r;
3154
		return r;
Line -... Line 3155...
-
 
3155
 
-
 
3156
	r = radeon_irq_kms_init(rdev);
-
 
3157
	if (r)
Line 2583... Line 3158...
2583
 
3158
		return r;
2584
 
3159
 
Line 2585... Line 3160...
2585
	rdev->cp.ring_obj = NULL;
3160
	rdev->cp.ring_obj = NULL;
2586
	r600_ring_init(rdev, 1024 * 1024);
3161
	r600_ring_init(rdev, 1024 * 1024);
Line 2587... Line 3162...
2587
 
3162
 
2588
//   rdev->ih.ring_obj = NULL;
3163
	rdev->ih.ring_obj = NULL;
2589
//   r600_ih_ring_init(rdev, 64 * 1024);
3164
	r600_ih_ring_init(rdev, 64 * 1024);
Line 2597... Line 3172...
2597
	if (r) {
3172
	if (r) {
2598
		dev_err(rdev->dev, "disabling GPU acceleration\n");
3173
		dev_err(rdev->dev, "disabling GPU acceleration\n");
2599
		rdev->accel_working = false;
3174
		rdev->accel_working = false;
2600
	}
3175
	}
2601
	if (rdev->accel_working) {
3176
	if (rdev->accel_working) {
-
 
3177
		r = radeon_ib_pool_init(rdev);
-
 
3178
		if (r) {
-
 
3179
			DRM_ERROR("radeon: failed initializing IB pool (%d).\n", r);
-
 
3180
			rdev->accel_working = false;
-
 
3181
		}
-
 
3182
		r = r600_ib_test(rdev);
-
 
3183
		if (r) {
-
 
3184
			DRM_ERROR("radeon: failed testing IB (%d).\n", r);
-
 
3185
			rdev->accel_working = false;
-
 
3186
		}
2602
	}
3187
	}
2603
	return 0;
3188
	return 0;
2604
}
3189
}