Subversion Repositories Kolibri OS

Rev

Rev 1990 | Rev 2005 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1990 Rev 2004
1
/*
1
/*
2
 * Copyright 2008 Advanced Micro Devices, Inc.
2
 * Copyright 2008 Advanced Micro Devices, Inc.
3
 * Copyright 2008 Red Hat Inc.
3
 * Copyright 2008 Red Hat Inc.
4
 * Copyright 2009 Jerome Glisse.
4
 * Copyright 2009 Jerome Glisse.
5
 *
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a
6
 * Permission is hereby granted, free of charge, to any person obtaining a
7
 * copy of this software and associated documentation files (the "Software"),
7
 * copy of this software and associated documentation files (the "Software"),
8
 * to deal in the Software without restriction, including without limitation
8
 * to deal in the Software without restriction, including without limitation
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
 * and/or sell copies of the Software, and to permit persons to whom the
10
 * and/or sell copies of the Software, and to permit persons to whom the
11
 * Software is furnished to do so, subject to the following conditions:
11
 * Software is furnished to do so, subject to the following conditions:
12
 *
12
 *
13
 * The above copyright notice and this permission notice shall be included in
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
14
 * all copies or substantial portions of the Software.
15
 *
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
 * OTHER DEALINGS IN THE SOFTWARE.
22
 * OTHER DEALINGS IN THE SOFTWARE.
23
 *
23
 *
24
 * Authors: Dave Airlie
24
 * Authors: Dave Airlie
25
 *          Alex Deucher
25
 *          Alex Deucher
26
 *          Jerome Glisse
26
 *          Jerome Glisse
27
 */
27
 */
28
 
28
 
29
//#include 
29
//#include 
30
#include 
30
#include 
31
#include 
31
#include 
32
#include 
32
#include 
33
//#include 
33
//#include 
34
//#include 
34
//#include 
35
#include "radeon_reg.h"
35
#include "radeon_reg.h"
36
#include "radeon.h"
36
#include "radeon.h"
37
#include "radeon_asic.h"
37
#include "radeon_asic.h"
38
#include "atom.h"
38
#include "atom.h"
39
 
39
 
40
/*
40
/*
41
 * Registers accessors functions.
41
 * Registers accessors functions.
42
 */
42
 */
43
static uint32_t radeon_invalid_rreg(struct radeon_device *rdev, uint32_t reg)
43
static uint32_t radeon_invalid_rreg(struct radeon_device *rdev, uint32_t reg)
44
{
44
{
45
	DRM_ERROR("Invalid callback to read register 0x%04X\n", reg);
45
	DRM_ERROR("Invalid callback to read register 0x%04X\n", reg);
46
	BUG_ON(1);
46
	BUG_ON(1);
47
	return 0;
47
	return 0;
48
}
48
}
49
 
49
 
50
static void radeon_invalid_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
50
static void radeon_invalid_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
51
{
51
{
52
	DRM_ERROR("Invalid callback to write register 0x%04X with 0x%08X\n",
52
	DRM_ERROR("Invalid callback to write register 0x%04X with 0x%08X\n",
53
		  reg, v);
53
		  reg, v);
54
	BUG_ON(1);
54
	BUG_ON(1);
55
}
55
}
56
 
56
 
57
static void radeon_register_accessor_init(struct radeon_device *rdev)
57
static void radeon_register_accessor_init(struct radeon_device *rdev)
58
{
58
{
59
	rdev->mc_rreg = &radeon_invalid_rreg;
59
	rdev->mc_rreg = &radeon_invalid_rreg;
60
	rdev->mc_wreg = &radeon_invalid_wreg;
60
	rdev->mc_wreg = &radeon_invalid_wreg;
61
	rdev->pll_rreg = &radeon_invalid_rreg;
61
	rdev->pll_rreg = &radeon_invalid_rreg;
62
	rdev->pll_wreg = &radeon_invalid_wreg;
62
	rdev->pll_wreg = &radeon_invalid_wreg;
63
	rdev->pciep_rreg = &radeon_invalid_rreg;
63
	rdev->pciep_rreg = &radeon_invalid_rreg;
64
	rdev->pciep_wreg = &radeon_invalid_wreg;
64
	rdev->pciep_wreg = &radeon_invalid_wreg;
65
 
65
 
66
	/* Don't change order as we are overridding accessor. */
66
	/* Don't change order as we are overridding accessor. */
67
	if (rdev->family < CHIP_RV515) {
67
	if (rdev->family < CHIP_RV515) {
68
		rdev->pcie_reg_mask = 0xff;
68
		rdev->pcie_reg_mask = 0xff;
69
	} else {
69
	} else {
70
		rdev->pcie_reg_mask = 0x7ff;
70
		rdev->pcie_reg_mask = 0x7ff;
71
	}
71
	}
72
	/* FIXME: not sure here */
72
	/* FIXME: not sure here */
73
	if (rdev->family <= CHIP_R580) {
73
	if (rdev->family <= CHIP_R580) {
74
		rdev->pll_rreg = &r100_pll_rreg;
74
		rdev->pll_rreg = &r100_pll_rreg;
75
		rdev->pll_wreg = &r100_pll_wreg;
75
		rdev->pll_wreg = &r100_pll_wreg;
76
	}
76
	}
77
	if (rdev->family >= CHIP_R420) {
77
	if (rdev->family >= CHIP_R420) {
78
		rdev->mc_rreg = &r420_mc_rreg;
78
		rdev->mc_rreg = &r420_mc_rreg;
79
		rdev->mc_wreg = &r420_mc_wreg;
79
		rdev->mc_wreg = &r420_mc_wreg;
80
	}
80
	}
81
	if (rdev->family >= CHIP_RV515) {
81
	if (rdev->family >= CHIP_RV515) {
82
		rdev->mc_rreg = &rv515_mc_rreg;
82
		rdev->mc_rreg = &rv515_mc_rreg;
83
		rdev->mc_wreg = &rv515_mc_wreg;
83
		rdev->mc_wreg = &rv515_mc_wreg;
84
	}
84
	}
85
	if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) {
85
	if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) {
86
		rdev->mc_rreg = &rs400_mc_rreg;
86
		rdev->mc_rreg = &rs400_mc_rreg;
87
		rdev->mc_wreg = &rs400_mc_wreg;
87
		rdev->mc_wreg = &rs400_mc_wreg;
88
	}
88
	}
89
	if (rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) {
89
	if (rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) {
90
		rdev->mc_rreg = &rs690_mc_rreg;
90
		rdev->mc_rreg = &rs690_mc_rreg;
91
		rdev->mc_wreg = &rs690_mc_wreg;
91
		rdev->mc_wreg = &rs690_mc_wreg;
92
	}
92
	}
93
	if (rdev->family == CHIP_RS600) {
93
	if (rdev->family == CHIP_RS600) {
94
		rdev->mc_rreg = &rs600_mc_rreg;
94
		rdev->mc_rreg = &rs600_mc_rreg;
95
		rdev->mc_wreg = &rs600_mc_wreg;
95
		rdev->mc_wreg = &rs600_mc_wreg;
96
	}
96
	}
97
	if (rdev->family >= CHIP_R600) {
97
	if (rdev->family >= CHIP_R600) {
98
		rdev->pciep_rreg = &r600_pciep_rreg;
98
		rdev->pciep_rreg = &r600_pciep_rreg;
99
		rdev->pciep_wreg = &r600_pciep_wreg;
99
		rdev->pciep_wreg = &r600_pciep_wreg;
100
	}
100
	}
101
}
101
}
102
 
102
 
103
 
103
 
104
/* helper to disable agp */
104
/* helper to disable agp */
105
void radeon_agp_disable(struct radeon_device *rdev)
105
void radeon_agp_disable(struct radeon_device *rdev)
106
{
106
{
107
	rdev->flags &= ~RADEON_IS_AGP;
107
	rdev->flags &= ~RADEON_IS_AGP;
108
	if (rdev->family >= CHIP_R600) {
108
	if (rdev->family >= CHIP_R600) {
109
		DRM_INFO("Forcing AGP to PCIE mode\n");
109
		DRM_INFO("Forcing AGP to PCIE mode\n");
110
		rdev->flags |= RADEON_IS_PCIE;
110
		rdev->flags |= RADEON_IS_PCIE;
111
	} else if (rdev->family >= CHIP_RV515 ||
111
	} else if (rdev->family >= CHIP_RV515 ||
112
			rdev->family == CHIP_RV380 ||
112
			rdev->family == CHIP_RV380 ||
113
			rdev->family == CHIP_RV410 ||
113
			rdev->family == CHIP_RV410 ||
114
			rdev->family == CHIP_R423) {
114
			rdev->family == CHIP_R423) {
115
		DRM_INFO("Forcing AGP to PCIE mode\n");
115
		DRM_INFO("Forcing AGP to PCIE mode\n");
116
		rdev->flags |= RADEON_IS_PCIE;
116
		rdev->flags |= RADEON_IS_PCIE;
117
		rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
117
		rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
118
		rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
118
		rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
119
	} else {
119
	} else {
120
		DRM_INFO("Forcing AGP to PCI mode\n");
120
		DRM_INFO("Forcing AGP to PCI mode\n");
121
		rdev->flags |= RADEON_IS_PCI;
121
		rdev->flags |= RADEON_IS_PCI;
122
		rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush;
122
		rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush;
123
		rdev->asic->gart_set_page = &r100_pci_gart_set_page;
123
		rdev->asic->gart_set_page = &r100_pci_gart_set_page;
124
	}
124
	}
125
	rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
125
	rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
126
}
126
}
127
 
127
 
128
/*
128
/*
129
 * ASIC
129
 * ASIC
130
 */
130
 */
131
static struct radeon_asic r100_asic = {
131
static struct radeon_asic r100_asic = {
132
	.init = &r100_init,
132
	.init = &r100_init,
133
//	.fini = &r100_fini,
133
//	.fini = &r100_fini,
134
//	.suspend = &r100_suspend,
134
//	.suspend = &r100_suspend,
135
//	.resume = &r100_resume,
135
//	.resume = &r100_resume,
136
//	.vga_set_state = &r100_vga_set_state,
136
//	.vga_set_state = &r100_vga_set_state,
137
	.asic_reset = &r100_asic_reset,
137
	.asic_reset = &r100_asic_reset,
138
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
138
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
139
	.gart_set_page = &r100_pci_gart_set_page,
139
	.gart_set_page = &r100_pci_gart_set_page,
140
	.cp_commit = &r100_cp_commit,
140
	.cp_commit = &r100_cp_commit,
141
	.ring_start = &r100_ring_start,
141
	.ring_start = &r100_ring_start,
142
	.ring_test = &r100_ring_test,
142
	.ring_test = &r100_ring_test,
143
//	.ring_ib_execute = &r100_ring_ib_execute,
143
//	.ring_ib_execute = &r100_ring_ib_execute,
144
//	.irq_set = &r100_irq_set,
144
//	.irq_set = &r100_irq_set,
145
//	.irq_process = &r100_irq_process,
145
//	.irq_process = &r100_irq_process,
146
//	.get_vblank_counter = &r100_get_vblank_counter,
146
//	.get_vblank_counter = &r100_get_vblank_counter,
147
	.fence_ring_emit = &r100_fence_ring_emit,
147
	.fence_ring_emit = &r100_fence_ring_emit,
148
//	.cs_parse = &r100_cs_parse,
148
//	.cs_parse = &r100_cs_parse,
149
//	.copy_blit = &r100_copy_blit,
149
//	.copy_blit = &r100_copy_blit,
150
//	.copy_dma = NULL,
150
//	.copy_dma = NULL,
151
//	.copy = &r100_copy_blit,
151
//	.copy = &r100_copy_blit,
152
	.get_engine_clock = &radeon_legacy_get_engine_clock,
152
	.get_engine_clock = &radeon_legacy_get_engine_clock,
153
	.set_engine_clock = &radeon_legacy_set_engine_clock,
153
	.set_engine_clock = &radeon_legacy_set_engine_clock,
154
	.get_memory_clock = &radeon_legacy_get_memory_clock,
154
	.get_memory_clock = &radeon_legacy_get_memory_clock,
155
	.set_memory_clock = NULL,
155
	.set_memory_clock = NULL,
156
	.get_pcie_lanes = NULL,
156
	.get_pcie_lanes = NULL,
157
	.set_pcie_lanes = NULL,
157
	.set_pcie_lanes = NULL,
158
	.set_clock_gating = &radeon_legacy_set_clock_gating,
158
	.set_clock_gating = &radeon_legacy_set_clock_gating,
159
	.set_surface_reg = r100_set_surface_reg,
159
	.set_surface_reg = r100_set_surface_reg,
160
	.clear_surface_reg = r100_clear_surface_reg,
160
	.clear_surface_reg = r100_clear_surface_reg,
161
	.bandwidth_update = &r100_bandwidth_update,
161
	.bandwidth_update = &r100_bandwidth_update,
162
	.hpd_init = &r100_hpd_init,
162
	.hpd_init = &r100_hpd_init,
163
	.hpd_fini = &r100_hpd_fini,
163
	.hpd_fini = &r100_hpd_fini,
164
	.hpd_sense = &r100_hpd_sense,
164
	.hpd_sense = &r100_hpd_sense,
165
	.hpd_set_polarity = &r100_hpd_set_polarity,
165
	.hpd_set_polarity = &r100_hpd_set_polarity,
166
	.ioctl_wait_idle = NULL,
166
	.ioctl_wait_idle = NULL,
167
};
167
};
168
 
168
 
169
static struct radeon_asic r200_asic = {
169
static struct radeon_asic r200_asic = {
170
	.init = &r100_init,
170
	.init = &r100_init,
171
//	.fini = &r100_fini,
171
//	.fini = &r100_fini,
172
//	.suspend = &r100_suspend,
172
//	.suspend = &r100_suspend,
173
//	.resume = &r100_resume,
173
//	.resume = &r100_resume,
174
//	.vga_set_state = &r100_vga_set_state,
174
//	.vga_set_state = &r100_vga_set_state,
175
	.asic_reset = &r100_asic_reset,
175
	.asic_reset = &r100_asic_reset,
176
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
176
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
177
	.gart_set_page = &r100_pci_gart_set_page,
177
	.gart_set_page = &r100_pci_gart_set_page,
178
	.cp_commit = &r100_cp_commit,
178
	.cp_commit = &r100_cp_commit,
179
	.ring_start = &r100_ring_start,
179
	.ring_start = &r100_ring_start,
180
	.ring_test = &r100_ring_test,
180
	.ring_test = &r100_ring_test,
181
//	.ring_ib_execute = &r100_ring_ib_execute,
181
//	.ring_ib_execute = &r100_ring_ib_execute,
182
//	.irq_set = &r100_irq_set,
182
//	.irq_set = &r100_irq_set,
183
//	.irq_process = &r100_irq_process,
183
//	.irq_process = &r100_irq_process,
184
//	.get_vblank_counter = &r100_get_vblank_counter,
184
//	.get_vblank_counter = &r100_get_vblank_counter,
185
	.fence_ring_emit = &r100_fence_ring_emit,
185
	.fence_ring_emit = &r100_fence_ring_emit,
186
//	.cs_parse = &r100_cs_parse,
186
//	.cs_parse = &r100_cs_parse,
187
//	.copy_blit = &r100_copy_blit,
187
//	.copy_blit = &r100_copy_blit,
188
//	.copy_dma = NULL,
188
//	.copy_dma = NULL,
189
//	.copy = &r100_copy_blit,
189
//	.copy = &r100_copy_blit,
190
	.get_engine_clock = &radeon_legacy_get_engine_clock,
190
	.get_engine_clock = &radeon_legacy_get_engine_clock,
191
	.set_engine_clock = &radeon_legacy_set_engine_clock,
191
	.set_engine_clock = &radeon_legacy_set_engine_clock,
192
	.get_memory_clock = &radeon_legacy_get_memory_clock,
192
	.get_memory_clock = &radeon_legacy_get_memory_clock,
193
	.set_memory_clock = NULL,
193
	.set_memory_clock = NULL,
194
	.set_pcie_lanes = NULL,
194
	.set_pcie_lanes = NULL,
195
	.set_clock_gating = &radeon_legacy_set_clock_gating,
195
	.set_clock_gating = &radeon_legacy_set_clock_gating,
196
	.set_surface_reg = r100_set_surface_reg,
196
	.set_surface_reg = r100_set_surface_reg,
197
	.clear_surface_reg = r100_clear_surface_reg,
197
	.clear_surface_reg = r100_clear_surface_reg,
198
	.bandwidth_update = &r100_bandwidth_update,
198
	.bandwidth_update = &r100_bandwidth_update,
199
	.hpd_init = &r100_hpd_init,
199
	.hpd_init = &r100_hpd_init,
200
	.hpd_fini = &r100_hpd_fini,
200
	.hpd_fini = &r100_hpd_fini,
201
	.hpd_sense = &r100_hpd_sense,
201
	.hpd_sense = &r100_hpd_sense,
202
	.hpd_set_polarity = &r100_hpd_set_polarity,
202
	.hpd_set_polarity = &r100_hpd_set_polarity,
203
	.ioctl_wait_idle = NULL,
203
	.ioctl_wait_idle = NULL,
204
};
204
};
205
 
205
 
206
static struct radeon_asic r300_asic = {
206
static struct radeon_asic r300_asic = {
207
	.init = &r300_init,
207
	.init = &r300_init,
208
//	.fini = &r300_fini,
208
//	.fini = &r300_fini,
209
//	.suspend = &r300_suspend,
209
//	.suspend = &r300_suspend,
210
//	.resume = &r300_resume,
210
//	.resume = &r300_resume,
211
//	.vga_set_state = &r100_vga_set_state,
211
//	.vga_set_state = &r100_vga_set_state,
212
	.asic_reset = &r300_asic_reset,
212
	.asic_reset = &r300_asic_reset,
213
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
213
	.gart_tlb_flush = &r100_pci_gart_tlb_flush,
214
	.gart_set_page = &r100_pci_gart_set_page,
214
	.gart_set_page = &r100_pci_gart_set_page,
215
	.cp_commit = &r100_cp_commit,
215
	.cp_commit = &r100_cp_commit,
216
	.ring_start = &r300_ring_start,
216
	.ring_start = &r300_ring_start,
217
	.ring_test = &r100_ring_test,
217
	.ring_test = &r100_ring_test,
218
//	.ring_ib_execute = &r100_ring_ib_execute,
218
//	.ring_ib_execute = &r100_ring_ib_execute,
219
//	.irq_set = &r100_irq_set,
219
//	.irq_set = &r100_irq_set,
220
//	.irq_process = &r100_irq_process,
220
//	.irq_process = &r100_irq_process,
221
//	.get_vblank_counter = &r100_get_vblank_counter,
221
//	.get_vblank_counter = &r100_get_vblank_counter,
222
	.fence_ring_emit = &r300_fence_ring_emit,
222
	.fence_ring_emit = &r300_fence_ring_emit,
223
//	.cs_parse = &r300_cs_parse,
223
//	.cs_parse = &r300_cs_parse,
224
//	.copy_blit = &r100_copy_blit,
224
//	.copy_blit = &r100_copy_blit,
225
//	.copy_dma = &r300_copy_dma,
225
//	.copy_dma = &r300_copy_dma,
226
//	.copy = &r100_copy_blit,
226
//	.copy = &r100_copy_blit,
227
	.get_engine_clock = &radeon_legacy_get_engine_clock,
227
	.get_engine_clock = &radeon_legacy_get_engine_clock,
228
	.set_engine_clock = &radeon_legacy_set_engine_clock,
228
	.set_engine_clock = &radeon_legacy_set_engine_clock,
229
	.get_memory_clock = &radeon_legacy_get_memory_clock,
229
	.get_memory_clock = &radeon_legacy_get_memory_clock,
230
	.set_memory_clock = NULL,
230
	.set_memory_clock = NULL,
231
	.get_pcie_lanes = &rv370_get_pcie_lanes,
231
	.get_pcie_lanes = &rv370_get_pcie_lanes,
232
	.set_pcie_lanes = &rv370_set_pcie_lanes,
232
	.set_pcie_lanes = &rv370_set_pcie_lanes,
233
	.set_clock_gating = &radeon_legacy_set_clock_gating,
233
	.set_clock_gating = &radeon_legacy_set_clock_gating,
234
	.set_surface_reg = r100_set_surface_reg,
234
	.set_surface_reg = r100_set_surface_reg,
235
	.clear_surface_reg = r100_clear_surface_reg,
235
	.clear_surface_reg = r100_clear_surface_reg,
236
	.bandwidth_update = &r100_bandwidth_update,
236
	.bandwidth_update = &r100_bandwidth_update,
237
	.hpd_init = &r100_hpd_init,
237
	.hpd_init = &r100_hpd_init,
238
	.hpd_fini = &r100_hpd_fini,
238
	.hpd_fini = &r100_hpd_fini,
239
	.hpd_sense = &r100_hpd_sense,
239
	.hpd_sense = &r100_hpd_sense,
240
	.hpd_set_polarity = &r100_hpd_set_polarity,
240
	.hpd_set_polarity = &r100_hpd_set_polarity,
241
	.ioctl_wait_idle = NULL,
241
	.ioctl_wait_idle = NULL,
242
};
242
};
243
 
243
 
244
static struct radeon_asic r300_asic_pcie = {
244
static struct radeon_asic r300_asic_pcie = {
245
	.init = &r300_init,
245
	.init = &r300_init,
246
//	.fini = &r300_fini,
246
//	.fini = &r300_fini,
247
//	.suspend = &r300_suspend,
247
//	.suspend = &r300_suspend,
248
//	.resume = &r300_resume,
248
//	.resume = &r300_resume,
249
//	.vga_set_state = &r100_vga_set_state,
249
//	.vga_set_state = &r100_vga_set_state,
250
	.asic_reset = &r300_asic_reset,
250
	.asic_reset = &r300_asic_reset,
251
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
251
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
252
	.gart_set_page = &rv370_pcie_gart_set_page,
252
	.gart_set_page = &rv370_pcie_gart_set_page,
253
	.cp_commit = &r100_cp_commit,
253
	.cp_commit = &r100_cp_commit,
254
	.ring_start = &r300_ring_start,
254
	.ring_start = &r300_ring_start,
255
	.ring_test = &r100_ring_test,
255
	.ring_test = &r100_ring_test,
256
//	.ring_ib_execute = &r100_ring_ib_execute,
256
//	.ring_ib_execute = &r100_ring_ib_execute,
257
//	.irq_set = &r100_irq_set,
257
//	.irq_set = &r100_irq_set,
258
//	.irq_process = &r100_irq_process,
258
//	.irq_process = &r100_irq_process,
259
//	.get_vblank_counter = &r100_get_vblank_counter,
259
//	.get_vblank_counter = &r100_get_vblank_counter,
260
	.fence_ring_emit = &r300_fence_ring_emit,
260
	.fence_ring_emit = &r300_fence_ring_emit,
261
//	.cs_parse = &r300_cs_parse,
261
//	.cs_parse = &r300_cs_parse,
262
//	.copy_blit = &r100_copy_blit,
262
//	.copy_blit = &r100_copy_blit,
263
//	.copy_dma = &r300_copy_dma,
263
//	.copy_dma = &r300_copy_dma,
264
//	.copy = &r100_copy_blit,
264
//	.copy = &r100_copy_blit,
265
	.get_engine_clock = &radeon_legacy_get_engine_clock,
265
	.get_engine_clock = &radeon_legacy_get_engine_clock,
266
	.set_engine_clock = &radeon_legacy_set_engine_clock,
266
	.set_engine_clock = &radeon_legacy_set_engine_clock,
267
	.get_memory_clock = &radeon_legacy_get_memory_clock,
267
	.get_memory_clock = &radeon_legacy_get_memory_clock,
268
	.set_memory_clock = NULL,
268
	.set_memory_clock = NULL,
269
	.set_pcie_lanes = &rv370_set_pcie_lanes,
269
	.set_pcie_lanes = &rv370_set_pcie_lanes,
270
	.set_clock_gating = &radeon_legacy_set_clock_gating,
270
	.set_clock_gating = &radeon_legacy_set_clock_gating,
271
	.set_surface_reg = r100_set_surface_reg,
271
	.set_surface_reg = r100_set_surface_reg,
272
	.clear_surface_reg = r100_clear_surface_reg,
272
	.clear_surface_reg = r100_clear_surface_reg,
273
	.bandwidth_update = &r100_bandwidth_update,
273
	.bandwidth_update = &r100_bandwidth_update,
274
	.hpd_init = &r100_hpd_init,
274
	.hpd_init = &r100_hpd_init,
275
	.hpd_fini = &r100_hpd_fini,
275
	.hpd_fini = &r100_hpd_fini,
276
	.hpd_sense = &r100_hpd_sense,
276
	.hpd_sense = &r100_hpd_sense,
277
	.hpd_set_polarity = &r100_hpd_set_polarity,
277
	.hpd_set_polarity = &r100_hpd_set_polarity,
278
	.ioctl_wait_idle = NULL,
278
	.ioctl_wait_idle = NULL,
279
};
279
};
280
 
280
 
281
static struct radeon_asic r420_asic = {
281
static struct radeon_asic r420_asic = {
282
	.init = &r420_init,
282
	.init = &r420_init,
283
//	.fini = &r420_fini,
283
//	.fini = &r420_fini,
284
//	.suspend = &r420_suspend,
284
//	.suspend = &r420_suspend,
285
//	.resume = &r420_resume,
285
//	.resume = &r420_resume,
286
//	.vga_set_state = &r100_vga_set_state,
286
//	.vga_set_state = &r100_vga_set_state,
287
	.asic_reset = &r300_asic_reset,
287
	.asic_reset = &r300_asic_reset,
288
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
288
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
289
	.gart_set_page = &rv370_pcie_gart_set_page,
289
	.gart_set_page = &rv370_pcie_gart_set_page,
290
	.cp_commit = &r100_cp_commit,
290
	.cp_commit = &r100_cp_commit,
291
	.ring_start = &r300_ring_start,
291
	.ring_start = &r300_ring_start,
292
	.ring_test = &r100_ring_test,
292
	.ring_test = &r100_ring_test,
293
//	.ring_ib_execute = &r100_ring_ib_execute,
293
//	.ring_ib_execute = &r100_ring_ib_execute,
294
//	.irq_set = &r100_irq_set,
294
//	.irq_set = &r100_irq_set,
295
//	.irq_process = &r100_irq_process,
295
//	.irq_process = &r100_irq_process,
296
//	.get_vblank_counter = &r100_get_vblank_counter,
296
//	.get_vblank_counter = &r100_get_vblank_counter,
297
	.fence_ring_emit = &r300_fence_ring_emit,
297
	.fence_ring_emit = &r300_fence_ring_emit,
298
//	.cs_parse = &r300_cs_parse,
298
//	.cs_parse = &r300_cs_parse,
299
//	.copy_blit = &r100_copy_blit,
299
//	.copy_blit = &r100_copy_blit,
300
//	.copy_dma = &r300_copy_dma,
300
//	.copy_dma = &r300_copy_dma,
301
//	.copy = &r100_copy_blit,
301
//	.copy = &r100_copy_blit,
302
	.get_engine_clock = &radeon_atom_get_engine_clock,
302
	.get_engine_clock = &radeon_atom_get_engine_clock,
303
	.set_engine_clock = &radeon_atom_set_engine_clock,
303
	.set_engine_clock = &radeon_atom_set_engine_clock,
304
	.get_memory_clock = &radeon_atom_get_memory_clock,
304
	.get_memory_clock = &radeon_atom_get_memory_clock,
305
	.set_memory_clock = &radeon_atom_set_memory_clock,
305
	.set_memory_clock = &radeon_atom_set_memory_clock,
306
	.get_pcie_lanes = &rv370_get_pcie_lanes,
306
	.get_pcie_lanes = &rv370_get_pcie_lanes,
307
	.set_pcie_lanes = &rv370_set_pcie_lanes,
307
	.set_pcie_lanes = &rv370_set_pcie_lanes,
308
	.set_clock_gating = &radeon_atom_set_clock_gating,
308
	.set_clock_gating = &radeon_atom_set_clock_gating,
309
	.set_surface_reg = r100_set_surface_reg,
309
	.set_surface_reg = r100_set_surface_reg,
310
	.clear_surface_reg = r100_clear_surface_reg,
310
	.clear_surface_reg = r100_clear_surface_reg,
311
	.bandwidth_update = &r100_bandwidth_update,
311
	.bandwidth_update = &r100_bandwidth_update,
312
	.hpd_init = &r100_hpd_init,
312
	.hpd_init = &r100_hpd_init,
313
	.hpd_fini = &r100_hpd_fini,
313
	.hpd_fini = &r100_hpd_fini,
314
	.hpd_sense = &r100_hpd_sense,
314
	.hpd_sense = &r100_hpd_sense,
315
	.hpd_set_polarity = &r100_hpd_set_polarity,
315
	.hpd_set_polarity = &r100_hpd_set_polarity,
316
	.ioctl_wait_idle = NULL,
316
	.ioctl_wait_idle = NULL,
317
};
317
};
318
 
318
 
319
static struct radeon_asic rs400_asic = {
319
static struct radeon_asic rs400_asic = {
320
	.init = &rs400_init,
320
	.init = &rs400_init,
321
//	.fini = &rs400_fini,
321
//	.fini = &rs400_fini,
322
//	.suspend = &rs400_suspend,
322
//	.suspend = &rs400_suspend,
323
//	.resume = &rs400_resume,
323
//	.resume = &rs400_resume,
324
//	.vga_set_state = &r100_vga_set_state,
324
//	.vga_set_state = &r100_vga_set_state,
325
	.asic_reset = &r300_asic_reset,
325
	.asic_reset = &r300_asic_reset,
326
	.gart_tlb_flush = &rs400_gart_tlb_flush,
326
	.gart_tlb_flush = &rs400_gart_tlb_flush,
327
	.gart_set_page = &rs400_gart_set_page,
327
	.gart_set_page = &rs400_gart_set_page,
328
	.cp_commit = &r100_cp_commit,
328
	.cp_commit = &r100_cp_commit,
329
	.ring_start = &r300_ring_start,
329
	.ring_start = &r300_ring_start,
330
	.ring_test = &r100_ring_test,
330
	.ring_test = &r100_ring_test,
331
//	.ring_ib_execute = &r100_ring_ib_execute,
331
//	.ring_ib_execute = &r100_ring_ib_execute,
332
//	.irq_set = &r100_irq_set,
332
//	.irq_set = &r100_irq_set,
333
//	.irq_process = &r100_irq_process,
333
//	.irq_process = &r100_irq_process,
334
//	.get_vblank_counter = &r100_get_vblank_counter,
334
//	.get_vblank_counter = &r100_get_vblank_counter,
335
	.fence_ring_emit = &r300_fence_ring_emit,
335
	.fence_ring_emit = &r300_fence_ring_emit,
336
//	.cs_parse = &r300_cs_parse,
336
//	.cs_parse = &r300_cs_parse,
337
//	.copy_blit = &r100_copy_blit,
337
//	.copy_blit = &r100_copy_blit,
338
//	.copy_dma = &r300_copy_dma,
338
//	.copy_dma = &r300_copy_dma,
339
//	.copy = &r100_copy_blit,
339
//	.copy = &r100_copy_blit,
340
	.get_engine_clock = &radeon_legacy_get_engine_clock,
340
	.get_engine_clock = &radeon_legacy_get_engine_clock,
341
	.set_engine_clock = &radeon_legacy_set_engine_clock,
341
	.set_engine_clock = &radeon_legacy_set_engine_clock,
342
	.get_memory_clock = &radeon_legacy_get_memory_clock,
342
	.get_memory_clock = &radeon_legacy_get_memory_clock,
343
	.set_memory_clock = NULL,
343
	.set_memory_clock = NULL,
344
	.get_pcie_lanes = NULL,
344
	.get_pcie_lanes = NULL,
345
	.set_pcie_lanes = NULL,
345
	.set_pcie_lanes = NULL,
346
	.set_clock_gating = &radeon_legacy_set_clock_gating,
346
	.set_clock_gating = &radeon_legacy_set_clock_gating,
347
	.set_surface_reg = r100_set_surface_reg,
347
	.set_surface_reg = r100_set_surface_reg,
348
	.clear_surface_reg = r100_clear_surface_reg,
348
	.clear_surface_reg = r100_clear_surface_reg,
349
	.bandwidth_update = &r100_bandwidth_update,
349
	.bandwidth_update = &r100_bandwidth_update,
350
	.hpd_init = &r100_hpd_init,
350
	.hpd_init = &r100_hpd_init,
351
	.hpd_fini = &r100_hpd_fini,
351
	.hpd_fini = &r100_hpd_fini,
352
	.hpd_sense = &r100_hpd_sense,
352
	.hpd_sense = &r100_hpd_sense,
353
	.hpd_set_polarity = &r100_hpd_set_polarity,
353
	.hpd_set_polarity = &r100_hpd_set_polarity,
354
	.ioctl_wait_idle = NULL,
354
	.ioctl_wait_idle = NULL,
355
};
355
};
356
 
356
 
357
static struct radeon_asic rs600_asic = {
357
static struct radeon_asic rs600_asic = {
358
	.init = &rs600_init,
358
	.init = &rs600_init,
359
//	.fini = &rs600_fini,
359
//	.fini = &rs600_fini,
360
//	.suspend = &rs600_suspend,
360
//	.suspend = &rs600_suspend,
361
//	.resume = &rs600_resume,
361
//	.resume = &rs600_resume,
362
//	.vga_set_state = &r100_vga_set_state,
362
//	.vga_set_state = &r100_vga_set_state,
363
	.asic_reset = &rs600_asic_reset,
363
	.asic_reset = &rs600_asic_reset,
364
	.gart_tlb_flush = &rs600_gart_tlb_flush,
364
	.gart_tlb_flush = &rs600_gart_tlb_flush,
365
	.gart_set_page = &rs600_gart_set_page,
365
	.gart_set_page = &rs600_gart_set_page,
366
	.cp_commit = &r100_cp_commit,
366
	.cp_commit = &r100_cp_commit,
367
	.ring_start = &r300_ring_start,
367
	.ring_start = &r300_ring_start,
368
	.ring_test = &r100_ring_test,
368
	.ring_test = &r100_ring_test,
369
//	.ring_ib_execute = &r100_ring_ib_execute,
369
//	.ring_ib_execute = &r100_ring_ib_execute,
370
//	.irq_set = &rs600_irq_set,
370
//	.irq_set = &rs600_irq_set,
371
//	.irq_process = &rs600_irq_process,
371
//	.irq_process = &rs600_irq_process,
372
//	.get_vblank_counter = &rs600_get_vblank_counter,
372
//	.get_vblank_counter = &rs600_get_vblank_counter,
373
	.fence_ring_emit = &r300_fence_ring_emit,
373
	.fence_ring_emit = &r300_fence_ring_emit,
374
//   .cs_parse = &r300_cs_parse,
374
//   .cs_parse = &r300_cs_parse,
375
//   .copy_blit = &r100_copy_blit,
375
//   .copy_blit = &r100_copy_blit,
376
//   .copy_dma = &r300_copy_dma,
376
//   .copy_dma = &r300_copy_dma,
377
//   .copy = &r100_copy_blit,
377
//   .copy = &r100_copy_blit,
378
	.get_engine_clock = &radeon_atom_get_engine_clock,
378
	.get_engine_clock = &radeon_atom_get_engine_clock,
379
	.set_engine_clock = &radeon_atom_set_engine_clock,
379
	.set_engine_clock = &radeon_atom_set_engine_clock,
380
	.get_memory_clock = &radeon_atom_get_memory_clock,
380
	.get_memory_clock = &radeon_atom_get_memory_clock,
381
	.set_memory_clock = &radeon_atom_set_memory_clock,
381
	.set_memory_clock = &radeon_atom_set_memory_clock,
382
	.get_pcie_lanes = NULL,
382
	.get_pcie_lanes = NULL,
383
	.set_pcie_lanes = NULL,
383
	.set_pcie_lanes = NULL,
384
	.set_clock_gating = &radeon_atom_set_clock_gating,
384
	.set_clock_gating = &radeon_atom_set_clock_gating,
385
	.set_surface_reg = r100_set_surface_reg,
385
	.set_surface_reg = r100_set_surface_reg,
386
	.clear_surface_reg = r100_clear_surface_reg,
386
	.clear_surface_reg = r100_clear_surface_reg,
387
	.bandwidth_update = &rs600_bandwidth_update,
387
	.bandwidth_update = &rs600_bandwidth_update,
388
	.hpd_init = &rs600_hpd_init,
388
	.hpd_init = &rs600_hpd_init,
389
	.hpd_fini = &rs600_hpd_fini,
389
	.hpd_fini = &rs600_hpd_fini,
390
	.hpd_sense = &rs600_hpd_sense,
390
	.hpd_sense = &rs600_hpd_sense,
391
	.hpd_set_polarity = &rs600_hpd_set_polarity,
391
	.hpd_set_polarity = &rs600_hpd_set_polarity,
392
	.ioctl_wait_idle = NULL,
392
	.ioctl_wait_idle = NULL,
393
};
393
};
394
 
394
 
395
static struct radeon_asic rs690_asic = {
395
static struct radeon_asic rs690_asic = {
396
	.init = &rs690_init,
396
	.init = &rs690_init,
397
//	.fini = &rs690_fini,
397
//	.fini = &rs690_fini,
398
//	.suspend = &rs690_suspend,
398
//	.suspend = &rs690_suspend,
399
//	.resume = &rs690_resume,
399
//	.resume = &rs690_resume,
400
//	.vga_set_state = &r100_vga_set_state,
400
//	.vga_set_state = &r100_vga_set_state,
401
	.asic_reset = &rs600_asic_reset,
401
	.asic_reset = &rs600_asic_reset,
402
	.gart_tlb_flush = &rs400_gart_tlb_flush,
402
	.gart_tlb_flush = &rs400_gart_tlb_flush,
403
	.gart_set_page = &rs400_gart_set_page,
403
	.gart_set_page = &rs400_gart_set_page,
404
	.cp_commit = &r100_cp_commit,
404
	.cp_commit = &r100_cp_commit,
405
	.ring_start = &r300_ring_start,
405
	.ring_start = &r300_ring_start,
406
	.ring_test = &r100_ring_test,
406
	.ring_test = &r100_ring_test,
407
//	.ring_ib_execute = &r100_ring_ib_execute,
407
//	.ring_ib_execute = &r100_ring_ib_execute,
408
//	.irq_set = &rs600_irq_set,
408
//	.irq_set = &rs600_irq_set,
409
//	.irq_process = &rs600_irq_process,
409
//	.irq_process = &rs600_irq_process,
410
//	.get_vblank_counter = &rs600_get_vblank_counter,
410
//	.get_vblank_counter = &rs600_get_vblank_counter,
411
	.fence_ring_emit = &r300_fence_ring_emit,
411
	.fence_ring_emit = &r300_fence_ring_emit,
412
//	.cs_parse = &r300_cs_parse,
412
//	.cs_parse = &r300_cs_parse,
413
//	.copy_blit = &r100_copy_blit,
413
//	.copy_blit = &r100_copy_blit,
414
//	.copy_dma = &r300_copy_dma,
414
//	.copy_dma = &r300_copy_dma,
415
//	.copy = &r300_copy_dma,
415
//	.copy = &r300_copy_dma,
416
	.get_engine_clock = &radeon_atom_get_engine_clock,
416
	.get_engine_clock = &radeon_atom_get_engine_clock,
417
	.set_engine_clock = &radeon_atom_set_engine_clock,
417
	.set_engine_clock = &radeon_atom_set_engine_clock,
418
	.get_memory_clock = &radeon_atom_get_memory_clock,
418
	.get_memory_clock = &radeon_atom_get_memory_clock,
419
	.set_memory_clock = &radeon_atom_set_memory_clock,
419
	.set_memory_clock = &radeon_atom_set_memory_clock,
420
	.get_pcie_lanes = NULL,
420
	.get_pcie_lanes = NULL,
421
	.set_pcie_lanes = NULL,
421
	.set_pcie_lanes = NULL,
422
	.set_clock_gating = &radeon_atom_set_clock_gating,
422
	.set_clock_gating = &radeon_atom_set_clock_gating,
423
	.set_surface_reg = r100_set_surface_reg,
423
	.set_surface_reg = r100_set_surface_reg,
424
	.clear_surface_reg = r100_clear_surface_reg,
424
	.clear_surface_reg = r100_clear_surface_reg,
425
	.bandwidth_update = &rs690_bandwidth_update,
425
	.bandwidth_update = &rs690_bandwidth_update,
426
	.hpd_init = &rs600_hpd_init,
426
	.hpd_init = &rs600_hpd_init,
427
	.hpd_fini = &rs600_hpd_fini,
427
	.hpd_fini = &rs600_hpd_fini,
428
	.hpd_sense = &rs600_hpd_sense,
428
	.hpd_sense = &rs600_hpd_sense,
429
	.hpd_set_polarity = &rs600_hpd_set_polarity,
429
	.hpd_set_polarity = &rs600_hpd_set_polarity,
430
	.ioctl_wait_idle = NULL,
430
	.ioctl_wait_idle = NULL,
431
};
431
};
432
 
432
 
433
static struct radeon_asic rv515_asic = {
433
static struct radeon_asic rv515_asic = {
434
	.init = &rv515_init,
434
	.init = &rv515_init,
435
//	.fini = &rv515_fini,
435
//	.fini = &rv515_fini,
436
//	.suspend = &rv515_suspend,
436
//	.suspend = &rv515_suspend,
437
//	.resume = &rv515_resume,
437
//	.resume = &rv515_resume,
438
//	.vga_set_state = &r100_vga_set_state,
438
//	.vga_set_state = &r100_vga_set_state,
439
	.asic_reset = &rs600_asic_reset,
439
	.asic_reset = &rs600_asic_reset,
440
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
440
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
441
	.gart_set_page = &rv370_pcie_gart_set_page,
441
	.gart_set_page = &rv370_pcie_gart_set_page,
442
	.cp_commit = &r100_cp_commit,
442
	.cp_commit = &r100_cp_commit,
443
	.ring_start = &rv515_ring_start,
443
	.ring_start = &rv515_ring_start,
444
	.ring_test = &r100_ring_test,
444
	.ring_test = &r100_ring_test,
445
//	.ring_ib_execute = &r100_ring_ib_execute,
445
//	.ring_ib_execute = &r100_ring_ib_execute,
446
//	.irq_set = &rs600_irq_set,
446
//	.irq_set = &rs600_irq_set,
447
//	.irq_process = &rs600_irq_process,
447
//	.irq_process = &rs600_irq_process,
448
//	.get_vblank_counter = &rs600_get_vblank_counter,
448
//	.get_vblank_counter = &rs600_get_vblank_counter,
449
	.fence_ring_emit = &r300_fence_ring_emit,
449
	.fence_ring_emit = &r300_fence_ring_emit,
450
//	.cs_parse = &r300_cs_parse,
450
//	.cs_parse = &r300_cs_parse,
451
//	.copy_blit = &r100_copy_blit,
451
//	.copy_blit = &r100_copy_blit,
452
//	.copy_dma = &r300_copy_dma,
452
//	.copy_dma = &r300_copy_dma,
453
//	.copy = &r100_copy_blit,
453
//	.copy = &r100_copy_blit,
454
	.get_engine_clock = &radeon_atom_get_engine_clock,
454
	.get_engine_clock = &radeon_atom_get_engine_clock,
455
	.set_engine_clock = &radeon_atom_set_engine_clock,
455
	.set_engine_clock = &radeon_atom_set_engine_clock,
456
	.get_memory_clock = &radeon_atom_get_memory_clock,
456
	.get_memory_clock = &radeon_atom_get_memory_clock,
457
	.set_memory_clock = &radeon_atom_set_memory_clock,
457
	.set_memory_clock = &radeon_atom_set_memory_clock,
458
	.get_pcie_lanes = &rv370_get_pcie_lanes,
458
	.get_pcie_lanes = &rv370_get_pcie_lanes,
459
	.set_pcie_lanes = &rv370_set_pcie_lanes,
459
	.set_pcie_lanes = &rv370_set_pcie_lanes,
460
	.set_clock_gating = &radeon_atom_set_clock_gating,
460
	.set_clock_gating = &radeon_atom_set_clock_gating,
461
	.set_surface_reg = r100_set_surface_reg,
461
	.set_surface_reg = r100_set_surface_reg,
462
	.clear_surface_reg = r100_clear_surface_reg,
462
	.clear_surface_reg = r100_clear_surface_reg,
463
	.bandwidth_update = &rv515_bandwidth_update,
463
	.bandwidth_update = &rv515_bandwidth_update,
464
	.hpd_init = &rs600_hpd_init,
464
	.hpd_init = &rs600_hpd_init,
465
	.hpd_fini = &rs600_hpd_fini,
465
	.hpd_fini = &rs600_hpd_fini,
466
	.hpd_sense = &rs600_hpd_sense,
466
	.hpd_sense = &rs600_hpd_sense,
467
	.hpd_set_polarity = &rs600_hpd_set_polarity,
467
	.hpd_set_polarity = &rs600_hpd_set_polarity,
468
	.ioctl_wait_idle = NULL,
468
	.ioctl_wait_idle = NULL,
469
};
469
};
470
 
470
 
471
static struct radeon_asic r520_asic = {
471
static struct radeon_asic r520_asic = {
472
	.init = &r520_init,
472
	.init = &r520_init,
473
//	.fini = &rv515_fini,
473
//	.fini = &rv515_fini,
474
//	.suspend = &rv515_suspend,
474
//	.suspend = &rv515_suspend,
475
//	.resume = &r520_resume,
475
//	.resume = &r520_resume,
476
//	.vga_set_state = &r100_vga_set_state,
476
//	.vga_set_state = &r100_vga_set_state,
477
	.asic_reset = &rs600_asic_reset,
477
	.asic_reset = &rs600_asic_reset,
478
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
478
	.gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
479
	.gart_set_page = &rv370_pcie_gart_set_page,
479
	.gart_set_page = &rv370_pcie_gart_set_page,
480
	.cp_commit = &r100_cp_commit,
480
	.cp_commit = &r100_cp_commit,
481
	.ring_start = &rv515_ring_start,
481
	.ring_start = &rv515_ring_start,
482
	.ring_test = &r100_ring_test,
482
	.ring_test = &r100_ring_test,
483
//	.ring_ib_execute = &r100_ring_ib_execute,
483
//	.ring_ib_execute = &r100_ring_ib_execute,
484
//	.irq_set = &rs600_irq_set,
484
//	.irq_set = &rs600_irq_set,
485
//	.irq_process = &rs600_irq_process,
485
//	.irq_process = &rs600_irq_process,
486
//	.get_vblank_counter = &rs600_get_vblank_counter,
486
//	.get_vblank_counter = &rs600_get_vblank_counter,
487
	.fence_ring_emit = &r300_fence_ring_emit,
487
	.fence_ring_emit = &r300_fence_ring_emit,
488
//	.cs_parse = &r300_cs_parse,
488
//	.cs_parse = &r300_cs_parse,
489
//	.copy_blit = &r100_copy_blit,
489
//	.copy_blit = &r100_copy_blit,
490
//	.copy_dma = &r300_copy_dma,
490
//	.copy_dma = &r300_copy_dma,
491
//	.copy = &r100_copy_blit,
491
//	.copy = &r100_copy_blit,
492
	.get_engine_clock = &radeon_atom_get_engine_clock,
492
	.get_engine_clock = &radeon_atom_get_engine_clock,
493
	.set_engine_clock = &radeon_atom_set_engine_clock,
493
	.set_engine_clock = &radeon_atom_set_engine_clock,
494
	.get_memory_clock = &radeon_atom_get_memory_clock,
494
	.get_memory_clock = &radeon_atom_get_memory_clock,
495
	.set_memory_clock = &radeon_atom_set_memory_clock,
495
	.set_memory_clock = &radeon_atom_set_memory_clock,
496
	.get_pcie_lanes = &rv370_get_pcie_lanes,
496
	.get_pcie_lanes = &rv370_get_pcie_lanes,
497
	.set_pcie_lanes = &rv370_set_pcie_lanes,
497
	.set_pcie_lanes = &rv370_set_pcie_lanes,
498
	.set_clock_gating = &radeon_atom_set_clock_gating,
498
	.set_clock_gating = &radeon_atom_set_clock_gating,
499
	.set_surface_reg = r100_set_surface_reg,
499
	.set_surface_reg = r100_set_surface_reg,
500
	.clear_surface_reg = r100_clear_surface_reg,
500
	.clear_surface_reg = r100_clear_surface_reg,
501
	.bandwidth_update = &rv515_bandwidth_update,
501
	.bandwidth_update = &rv515_bandwidth_update,
502
	.hpd_init = &rs600_hpd_init,
502
	.hpd_init = &rs600_hpd_init,
503
	.hpd_fini = &rs600_hpd_fini,
503
	.hpd_fini = &rs600_hpd_fini,
504
	.hpd_sense = &rs600_hpd_sense,
504
	.hpd_sense = &rs600_hpd_sense,
505
	.hpd_set_polarity = &rs600_hpd_set_polarity,
505
	.hpd_set_polarity = &rs600_hpd_set_polarity,
506
	.ioctl_wait_idle = NULL,
506
	.ioctl_wait_idle = NULL,
507
};
507
};
508
 
508
 
509
static struct radeon_asic r600_asic = {
509
static struct radeon_asic r600_asic = {
510
	.init = &r600_init,
510
	.init = &r600_init,
511
//	.fini = &r600_fini,
511
//	.fini = &r600_fini,
512
//	.suspend = &r600_suspend,
512
//	.suspend = &r600_suspend,
513
//	.resume = &r600_resume,
513
//	.resume = &r600_resume,
514
	.cp_commit = &r600_cp_commit,
514
	.cp_commit = &r600_cp_commit,
515
	.vga_set_state = &r600_vga_set_state,
515
	.vga_set_state = &r600_vga_set_state,
516
	.asic_reset = &r600_asic_reset,
516
	.asic_reset = &r600_asic_reset,
517
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
517
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
518
	.gart_set_page = &rs600_gart_set_page,
518
	.gart_set_page = &rs600_gart_set_page,
519
	.ring_test = &r600_ring_test,
519
	.ring_test = &r600_ring_test,
520
//	.ring_ib_execute = &r600_ring_ib_execute,
520
//	.ring_ib_execute = &r600_ring_ib_execute,
521
//	.irq_set = &r600_irq_set,
521
	.irq_set = &r600_irq_set,
522
//	.irq_process = &r600_irq_process,
522
	.irq_process = &r600_irq_process,
523
	.fence_ring_emit = &r600_fence_ring_emit,
523
	.fence_ring_emit = &r600_fence_ring_emit,
524
//	.cs_parse = &r600_cs_parse,
524
//	.cs_parse = &r600_cs_parse,
525
//	.copy_blit = &r600_copy_blit,
525
//	.copy_blit = &r600_copy_blit,
526
//	.copy_dma = &r600_copy_blit,
526
//	.copy_dma = &r600_copy_blit,
527
//	.copy = &r600_copy_blit,
527
//	.copy = &r600_copy_blit,
528
	.get_engine_clock = &radeon_atom_get_engine_clock,
528
	.get_engine_clock = &radeon_atom_get_engine_clock,
529
	.set_engine_clock = &radeon_atom_set_engine_clock,
529
	.set_engine_clock = &radeon_atom_set_engine_clock,
530
	.get_memory_clock = &radeon_atom_get_memory_clock,
530
	.get_memory_clock = &radeon_atom_get_memory_clock,
531
	.set_memory_clock = &radeon_atom_set_memory_clock,
531
	.set_memory_clock = &radeon_atom_set_memory_clock,
532
	.get_pcie_lanes = &rv370_get_pcie_lanes,
532
	.get_pcie_lanes = &rv370_get_pcie_lanes,
533
	.set_pcie_lanes = NULL,
533
	.set_pcie_lanes = NULL,
534
	.set_clock_gating = NULL,
534
	.set_clock_gating = NULL,
535
	.set_surface_reg = r600_set_surface_reg,
535
	.set_surface_reg = r600_set_surface_reg,
536
	.clear_surface_reg = r600_clear_surface_reg,
536
	.clear_surface_reg = r600_clear_surface_reg,
537
	.bandwidth_update = &rv515_bandwidth_update,
537
	.bandwidth_update = &rv515_bandwidth_update,
538
	.hpd_init = &r600_hpd_init,
538
	.hpd_init = &r600_hpd_init,
539
	.hpd_fini = &r600_hpd_fini,
539
	.hpd_fini = &r600_hpd_fini,
540
	.hpd_sense = &r600_hpd_sense,
540
	.hpd_sense = &r600_hpd_sense,
541
	.hpd_set_polarity = &r600_hpd_set_polarity,
541
	.hpd_set_polarity = &r600_hpd_set_polarity,
542
//	.ioctl_wait_idle = r600_ioctl_wait_idle,
542
//	.ioctl_wait_idle = r600_ioctl_wait_idle,
543
};
543
};
544
 
544
 
545
static struct radeon_asic rs780_asic = {
545
static struct radeon_asic rs780_asic = {
546
	.init = &r600_init,
546
	.init = &r600_init,
547
//	.fini = &r600_fini,
547
//	.fini = &r600_fini,
548
//	.suspend = &r600_suspend,
548
//	.suspend = &r600_suspend,
549
//	.resume = &r600_resume,
549
//	.resume = &r600_resume,
550
	.cp_commit = &r600_cp_commit,
550
	.cp_commit = &r600_cp_commit,
551
	.gpu_is_lockup = &r600_gpu_is_lockup,
551
	.gpu_is_lockup = &r600_gpu_is_lockup,
552
	.vga_set_state = &r600_vga_set_state,
552
	.vga_set_state = &r600_vga_set_state,
553
	.asic_reset = &r600_asic_reset,
553
	.asic_reset = &r600_asic_reset,
554
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
554
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
555
	.gart_set_page = &rs600_gart_set_page,
555
	.gart_set_page = &rs600_gart_set_page,
556
	.ring_test = &r600_ring_test,
556
	.ring_test = &r600_ring_test,
557
//	.ring_ib_execute = &r600_ring_ib_execute,
557
//	.ring_ib_execute = &r600_ring_ib_execute,
558
//	.irq_set = &r600_irq_set,
558
	.irq_set = &r600_irq_set,
559
//	.irq_process = &r600_irq_process,
559
	.irq_process = &r600_irq_process,
560
	.fence_ring_emit = &r600_fence_ring_emit,
560
	.fence_ring_emit = &r600_fence_ring_emit,
561
//	.cs_parse = &r600_cs_parse,
561
//	.cs_parse = &r600_cs_parse,
562
//	.copy_blit = &r600_copy_blit,
562
//	.copy_blit = &r600_copy_blit,
563
//	.copy_dma = &r600_copy_blit,
563
//	.copy_dma = &r600_copy_blit,
564
//	.copy = &r600_copy_blit,
564
//	.copy = &r600_copy_blit,
565
	.get_engine_clock = &radeon_atom_get_engine_clock,
565
	.get_engine_clock = &radeon_atom_get_engine_clock,
566
	.set_engine_clock = &radeon_atom_set_engine_clock,
566
	.set_engine_clock = &radeon_atom_set_engine_clock,
567
	.get_memory_clock = NULL,
567
	.get_memory_clock = NULL,
568
	.set_memory_clock = NULL,
568
	.set_memory_clock = NULL,
569
	.get_pcie_lanes = NULL,
569
	.get_pcie_lanes = NULL,
570
	.set_pcie_lanes = NULL,
570
	.set_pcie_lanes = NULL,
571
	.set_clock_gating = NULL,
571
	.set_clock_gating = NULL,
572
	.set_surface_reg = r600_set_surface_reg,
572
	.set_surface_reg = r600_set_surface_reg,
573
	.clear_surface_reg = r600_clear_surface_reg,
573
	.clear_surface_reg = r600_clear_surface_reg,
574
	.bandwidth_update = &rs690_bandwidth_update,
574
	.bandwidth_update = &rs690_bandwidth_update,
575
	.hpd_init = &r600_hpd_init,
575
	.hpd_init = &r600_hpd_init,
576
	.hpd_fini = &r600_hpd_fini,
576
	.hpd_fini = &r600_hpd_fini,
577
	.hpd_sense = &r600_hpd_sense,
577
	.hpd_sense = &r600_hpd_sense,
578
	.hpd_set_polarity = &r600_hpd_set_polarity,
578
	.hpd_set_polarity = &r600_hpd_set_polarity,
579
};
579
};
580
 
580
 
581
static struct radeon_asic rv770_asic = {
581
static struct radeon_asic rv770_asic = {
582
	.init = &rv770_init,
582
	.init = &rv770_init,
583
//	.fini = &rv770_fini,
583
//	.fini = &rv770_fini,
584
//	.suspend = &rv770_suspend,
584
//	.suspend = &rv770_suspend,
585
//	.resume = &rv770_resume,
585
//	.resume = &rv770_resume,
586
	.cp_commit = &r600_cp_commit,
586
	.cp_commit = &r600_cp_commit,
587
	.asic_reset = &r600_asic_reset,
587
	.asic_reset = &r600_asic_reset,
588
	.vga_set_state = &r600_vga_set_state,
588
	.vga_set_state = &r600_vga_set_state,
589
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
589
	.gart_tlb_flush = &r600_pcie_gart_tlb_flush,
590
	.gart_set_page = &rs600_gart_set_page,
590
	.gart_set_page = &rs600_gart_set_page,
591
	.ring_test = &r600_ring_test,
591
	.ring_test = &r600_ring_test,
592
//	.ring_ib_execute = &r600_ring_ib_execute,
592
	.ring_ib_execute = &r600_ring_ib_execute,
593
//	.irq_set = &r600_irq_set,
593
	.irq_set = &r600_irq_set,
594
//	.irq_process = &r600_irq_process,
594
	.irq_process = &r600_irq_process,
595
	.fence_ring_emit = &r600_fence_ring_emit,
595
	.fence_ring_emit = &r600_fence_ring_emit,
596
//	.cs_parse = &r600_cs_parse,
596
//	.cs_parse = &r600_cs_parse,
597
//	.copy_blit = &r600_copy_blit,
597
//	.copy_blit = &r600_copy_blit,
598
//	.copy_dma = &r600_copy_blit,
598
//	.copy_dma = &r600_copy_blit,
599
//	.copy = &r600_copy_blit,
599
//	.copy = &r600_copy_blit,
600
	.get_engine_clock = &radeon_atom_get_engine_clock,
600
	.get_engine_clock = &radeon_atom_get_engine_clock,
601
	.set_engine_clock = &radeon_atom_set_engine_clock,
601
	.set_engine_clock = &radeon_atom_set_engine_clock,
602
	.get_memory_clock = &radeon_atom_get_memory_clock,
602
	.get_memory_clock = &radeon_atom_get_memory_clock,
603
	.set_memory_clock = &radeon_atom_set_memory_clock,
603
	.set_memory_clock = &radeon_atom_set_memory_clock,
604
	.get_pcie_lanes = &rv370_get_pcie_lanes,
604
	.get_pcie_lanes = &rv370_get_pcie_lanes,
605
	.set_pcie_lanes = NULL,
605
	.set_pcie_lanes = NULL,
606
	.set_clock_gating = &radeon_atom_set_clock_gating,
606
	.set_clock_gating = &radeon_atom_set_clock_gating,
607
	.set_surface_reg = r600_set_surface_reg,
607
	.set_surface_reg = r600_set_surface_reg,
608
	.clear_surface_reg = r600_clear_surface_reg,
608
	.clear_surface_reg = r600_clear_surface_reg,
609
	.bandwidth_update = &rv515_bandwidth_update,
609
	.bandwidth_update = &rv515_bandwidth_update,
610
	.hpd_init = &r600_hpd_init,
610
	.hpd_init = &r600_hpd_init,
611
	.hpd_fini = &r600_hpd_fini,
611
	.hpd_fini = &r600_hpd_fini,
612
	.hpd_sense = &r600_hpd_sense,
612
	.hpd_sense = &r600_hpd_sense,
613
	.hpd_set_polarity = &r600_hpd_set_polarity,
613
	.hpd_set_polarity = &r600_hpd_set_polarity,
614
};
614
};
615
 
615
 
616
static struct radeon_asic evergreen_asic = {
616
static struct radeon_asic evergreen_asic = {
617
	.init = &evergreen_init,
617
	.init = &evergreen_init,
618
//	.fini = &evergreen_fini,
618
//	.fini = &evergreen_fini,
619
//	.suspend = &evergreen_suspend,
619
//	.suspend = &evergreen_suspend,
620
//	.resume = &evergreen_resume,
620
//	.resume = &evergreen_resume,
621
	.cp_commit = &r600_cp_commit,
621
	.cp_commit = &r600_cp_commit,
622
	.asic_reset = &evergreen_asic_reset,
622
	.asic_reset = &evergreen_asic_reset,
623
	.vga_set_state = &r600_vga_set_state,
623
	.vga_set_state = &r600_vga_set_state,
624
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
624
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
625
	.gart_set_page = &rs600_gart_set_page,
625
	.gart_set_page = &rs600_gart_set_page,
626
	.ring_test = &r600_ring_test,
626
	.ring_test = &r600_ring_test,
627
//	.ring_ib_execute = &r600_ring_ib_execute,
627
//	.ring_ib_execute = &r600_ring_ib_execute,
628
//	.irq_set = &r600_irq_set,
628
//	.irq_set = &r600_irq_set,
629
//	.irq_process = &r600_irq_process,
629
//	.irq_process = &r600_irq_process,
630
	.fence_ring_emit = &r600_fence_ring_emit,
630
	.fence_ring_emit = &r600_fence_ring_emit,
631
//	.cs_parse = &r600_cs_parse,
631
//	.cs_parse = &r600_cs_parse,
632
//	.copy_blit = &r600_copy_blit,
632
//	.copy_blit = &r600_copy_blit,
633
//	.copy_dma = &r600_copy_blit,
633
//	.copy_dma = &r600_copy_blit,
634
//	.copy = &r600_copy_blit,
634
//	.copy = &r600_copy_blit,
635
	.get_engine_clock = &radeon_atom_get_engine_clock,
635
	.get_engine_clock = &radeon_atom_get_engine_clock,
636
	.set_engine_clock = &radeon_atom_set_engine_clock,
636
	.set_engine_clock = &radeon_atom_set_engine_clock,
637
	.get_memory_clock = &radeon_atom_get_memory_clock,
637
	.get_memory_clock = &radeon_atom_get_memory_clock,
638
	.set_memory_clock = &radeon_atom_set_memory_clock,
638
	.set_memory_clock = &radeon_atom_set_memory_clock,
639
	.get_pcie_lanes = &r600_get_pcie_lanes,
639
	.get_pcie_lanes = &r600_get_pcie_lanes,
640
	.set_pcie_lanes = &r600_set_pcie_lanes,
640
	.set_pcie_lanes = &r600_set_pcie_lanes,
641
	.set_clock_gating = NULL,
641
	.set_clock_gating = NULL,
642
	.set_surface_reg = r600_set_surface_reg,
642
	.set_surface_reg = r600_set_surface_reg,
643
	.clear_surface_reg = r600_clear_surface_reg,
643
	.clear_surface_reg = r600_clear_surface_reg,
644
	.bandwidth_update = &evergreen_bandwidth_update,
644
	.bandwidth_update = &evergreen_bandwidth_update,
645
 
645
 
646
};
646
};
647
 
647
 
648
static struct radeon_asic sumo_asic = {
648
static struct radeon_asic sumo_asic = {
649
	.init = &evergreen_init,
649
	.init = &evergreen_init,
650
//	.fini = &evergreen_fini,
650
//	.fini = &evergreen_fini,
651
//	.suspend = &evergreen_suspend,
651
//	.suspend = &evergreen_suspend,
652
//	.resume = &evergreen_resume,
652
//	.resume = &evergreen_resume,
653
	.cp_commit = &r600_cp_commit,
653
	.cp_commit = &r600_cp_commit,
654
	.asic_reset = &evergreen_asic_reset,
654
	.asic_reset = &evergreen_asic_reset,
655
	.vga_set_state = &r600_vga_set_state,
655
	.vga_set_state = &r600_vga_set_state,
656
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
656
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
657
	.gart_set_page = &rs600_gart_set_page,
657
	.gart_set_page = &rs600_gart_set_page,
658
	.ring_test = &r600_ring_test,
658
	.ring_test = &r600_ring_test,
659
//	.ring_ib_execute = &r600_ring_ib_execute,
659
//	.ring_ib_execute = &r600_ring_ib_execute,
660
//	.irq_set = &r600_irq_set,
660
//	.irq_set = &r600_irq_set,
661
//	.irq_process = &r600_irq_process,
661
//	.irq_process = &r600_irq_process,
662
	.fence_ring_emit = &r600_fence_ring_emit,
662
	.fence_ring_emit = &r600_fence_ring_emit,
663
//	.cs_parse = &r600_cs_parse,
663
//	.cs_parse = &r600_cs_parse,
664
//	.copy_blit = &r600_copy_blit,
664
//	.copy_blit = &r600_copy_blit,
665
//	.copy_dma = &r600_copy_blit,
665
//	.copy_dma = &r600_copy_blit,
666
//	.copy = &r600_copy_blit,
666
//	.copy = &r600_copy_blit,
667
	.get_engine_clock = &radeon_atom_get_engine_clock,
667
	.get_engine_clock = &radeon_atom_get_engine_clock,
668
	.set_engine_clock = &radeon_atom_set_engine_clock,
668
	.set_engine_clock = &radeon_atom_set_engine_clock,
669
	.get_memory_clock = NULL,
669
	.get_memory_clock = NULL,
670
	.set_memory_clock = NULL,
670
	.set_memory_clock = NULL,
671
	.get_pcie_lanes = NULL,
671
	.get_pcie_lanes = NULL,
672
	.set_pcie_lanes = NULL,
672
	.set_pcie_lanes = NULL,
673
	.set_clock_gating = NULL,
673
	.set_clock_gating = NULL,
674
	.set_surface_reg = r600_set_surface_reg,
674
	.set_surface_reg = r600_set_surface_reg,
675
	.clear_surface_reg = r600_clear_surface_reg,
675
	.clear_surface_reg = r600_clear_surface_reg,
676
	.bandwidth_update = &evergreen_bandwidth_update,
676
	.bandwidth_update = &evergreen_bandwidth_update,
677
};
677
};
678
 
678
 
679
 
679
 
680
static struct radeon_asic btc_asic = {
680
static struct radeon_asic btc_asic = {
681
	.init = &evergreen_init,
681
	.init = &evergreen_init,
682
//	.fini = &evergreen_fini,
682
//	.fini = &evergreen_fini,
683
//	.suspend = &evergreen_suspend,
683
//	.suspend = &evergreen_suspend,
684
//	.resume = &evergreen_resume,
684
//	.resume = &evergreen_resume,
685
	.cp_commit = &r600_cp_commit,
685
	.cp_commit = &r600_cp_commit,
686
	.asic_reset = &evergreen_asic_reset,
686
	.asic_reset = &evergreen_asic_reset,
687
	.vga_set_state = &r600_vga_set_state,
687
	.vga_set_state = &r600_vga_set_state,
688
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
688
	.gart_tlb_flush = &evergreen_pcie_gart_tlb_flush,
689
	.gart_set_page = &rs600_gart_set_page,
689
	.gart_set_page = &rs600_gart_set_page,
690
	.ring_test = &r600_ring_test,
690
	.ring_test = &r600_ring_test,
691
//	.ring_ib_execute = &r600_ring_ib_execute,
691
//	.ring_ib_execute = &r600_ring_ib_execute,
692
//	.irq_set = &r600_irq_set,
692
//	.irq_set = &r600_irq_set,
693
//	.irq_process = &r600_irq_process,
693
//	.irq_process = &r600_irq_process,
694
	.fence_ring_emit = &r600_fence_ring_emit,
694
	.fence_ring_emit = &r600_fence_ring_emit,
695
//	.cs_parse = &r600_cs_parse,
695
//	.cs_parse = &r600_cs_parse,
696
//	.copy_blit = &r600_copy_blit,
696
//	.copy_blit = &r600_copy_blit,
697
//	.copy_dma = &r600_copy_blit,
697
//	.copy_dma = &r600_copy_blit,
698
//	.copy = &r600_copy_blit,
698
//	.copy = &r600_copy_blit,
699
	.get_engine_clock = &radeon_atom_get_engine_clock,
699
	.get_engine_clock = &radeon_atom_get_engine_clock,
700
	.set_engine_clock = &radeon_atom_set_engine_clock,
700
	.set_engine_clock = &radeon_atom_set_engine_clock,
701
	.get_memory_clock = &radeon_atom_get_memory_clock,
701
	.get_memory_clock = &radeon_atom_get_memory_clock,
702
	.set_memory_clock = &radeon_atom_set_memory_clock,
702
	.set_memory_clock = &radeon_atom_set_memory_clock,
703
	.get_pcie_lanes = NULL,
703
	.get_pcie_lanes = NULL,
704
	.set_pcie_lanes = NULL,
704
	.set_pcie_lanes = NULL,
705
	.set_clock_gating = NULL,
705
	.set_clock_gating = NULL,
706
	.set_surface_reg = r600_set_surface_reg,
706
	.set_surface_reg = r600_set_surface_reg,
707
	.clear_surface_reg = r600_clear_surface_reg,
707
	.clear_surface_reg = r600_clear_surface_reg,
708
	.bandwidth_update = &evergreen_bandwidth_update,
708
	.bandwidth_update = &evergreen_bandwidth_update,
-
 
709
	.hpd_init = &evergreen_hpd_init,
-
 
710
	.hpd_sense = &evergreen_hpd_sense,
709
};
711
};
710
 
-
 
711
 
-
 
712
#if 0
712
 
713
static struct radeon_asic cayman_asic = {
713
static struct radeon_asic cayman_asic = {
714
	.init = &cayman_init,
714
	.init = &cayman_init,
715
	.fini = &cayman_fini,
715
//	.fini = &evergreen_fini,
716
	.suspend = &cayman_suspend,
716
//	.suspend = &evergreen_suspend,
717
	.resume = &cayman_resume,
717
//	.resume = &evergreen_resume,
718
	.cp_commit = &r600_cp_commit,
-
 
719
	.gpu_is_lockup = &cayman_gpu_is_lockup,
718
	.cp_commit = &r600_cp_commit,
720
	.asic_reset = &cayman_asic_reset,
719
	.asic_reset = &cayman_asic_reset,
721
	.vga_set_state = &r600_vga_set_state,
720
	.vga_set_state = &r600_vga_set_state,
722
	.gart_tlb_flush = &cayman_pcie_gart_tlb_flush,
721
	.gart_tlb_flush = &cayman_pcie_gart_tlb_flush,
723
	.gart_set_page = &rs600_gart_set_page,
722
	.gart_set_page = &rs600_gart_set_page,
724
	.ring_test = &r600_ring_test,
723
	.ring_test = &r600_ring_test,
725
	.ring_ib_execute = &evergreen_ring_ib_execute,
724
//	.ring_ib_execute = &r600_ring_ib_execute,
726
	.irq_set = &evergreen_irq_set,
725
//	.irq_set = &r600_irq_set,
727
	.irq_process = &evergreen_irq_process,
726
//	.irq_process = &r600_irq_process,
728
	.get_vblank_counter = &evergreen_get_vblank_counter,
-
 
729
	.fence_ring_emit = &r600_fence_ring_emit,
727
	.fence_ring_emit = &r600_fence_ring_emit,
730
//	.cs_parse = &r600_cs_parse,
728
//	.cs_parse = &r600_cs_parse,
731
//	.copy_blit = &r600_copy_blit,
729
//	.copy_blit = &r600_copy_blit,
732
//	.copy_dma = &r600_copy_blit,
730
//	.copy_dma = &r600_copy_blit,
733
//	.copy = &r600_copy_blit,
731
//	.copy = &r600_copy_blit,
734
	.get_engine_clock = &radeon_atom_get_engine_clock,
732
	.get_engine_clock = &radeon_atom_get_engine_clock,
735
	.set_engine_clock = &radeon_atom_set_engine_clock,
733
	.set_engine_clock = &radeon_atom_set_engine_clock,
736
	.get_memory_clock = &radeon_atom_get_memory_clock,
734
	.get_memory_clock = &radeon_atom_get_memory_clock,
737
	.set_memory_clock = &radeon_atom_set_memory_clock,
735
	.set_memory_clock = &radeon_atom_set_memory_clock,
-
 
736
	.get_pcie_lanes = NULL,
738
	.set_pcie_lanes = NULL,
737
	.set_pcie_lanes = NULL,
739
	.set_clock_gating = NULL,
738
	.set_clock_gating = NULL,
740
	.set_surface_reg = r600_set_surface_reg,
739
	.set_surface_reg = r600_set_surface_reg,
741
	.clear_surface_reg = r600_clear_surface_reg,
740
	.clear_surface_reg = r600_clear_surface_reg,
742
	.bandwidth_update = &evergreen_bandwidth_update,
741
	.bandwidth_update = &evergreen_bandwidth_update,
743
	.gui_idle = &r600_gui_idle,
-
 
744
	.pm_misc = &evergreen_pm_misc,
-
 
745
	.pm_prepare = &evergreen_pm_prepare,
-
 
746
	.pm_finish = &evergreen_pm_finish,
-
 
747
	.pm_init_profile = &r600_pm_init_profile,
-
 
748
	.pm_get_dynpm_state = &r600_pm_get_dynpm_state,
-
 
749
	.pre_page_flip = &evergreen_pre_page_flip,
-
 
750
	.page_flip = &evergreen_page_flip,
-
 
751
	.post_page_flip = &evergreen_post_page_flip,
-
 
752
};
742
};
753
#endif
-
 
754
 
743
 
755
int radeon_asic_init(struct radeon_device *rdev)
744
int radeon_asic_init(struct radeon_device *rdev)
756
{
745
{
757
	radeon_register_accessor_init(rdev);
746
	radeon_register_accessor_init(rdev);
758
 
747
 
759
	/* set the number of crtcs */
748
	/* set the number of crtcs */
760
	if (rdev->flags & RADEON_SINGLE_CRTC)
749
	if (rdev->flags & RADEON_SINGLE_CRTC)
761
		rdev->num_crtc = 1;
750
		rdev->num_crtc = 1;
762
	else
751
	else
763
		rdev->num_crtc = 2;
752
		rdev->num_crtc = 2;
764
 
753
 
765
	switch (rdev->family) {
754
	switch (rdev->family) {
766
	case CHIP_R100:
755
	case CHIP_R100:
767
	case CHIP_RV100:
756
	case CHIP_RV100:
768
	case CHIP_RS100:
757
	case CHIP_RS100:
769
	case CHIP_RV200:
758
	case CHIP_RV200:
770
	case CHIP_RS200:
759
	case CHIP_RS200:
771
		rdev->asic = &r100_asic;
760
		rdev->asic = &r100_asic;
772
		break;
761
		break;
773
	case CHIP_R200:
762
	case CHIP_R200:
774
	case CHIP_RV250:
763
	case CHIP_RV250:
775
	case CHIP_RS300:
764
	case CHIP_RS300:
776
	case CHIP_RV280:
765
	case CHIP_RV280:
777
		rdev->asic = &r200_asic;
766
		rdev->asic = &r200_asic;
778
		break;
767
		break;
779
	case CHIP_R300:
768
	case CHIP_R300:
780
	case CHIP_R350:
769
	case CHIP_R350:
781
	case CHIP_RV350:
770
	case CHIP_RV350:
782
	case CHIP_RV380:
771
	case CHIP_RV380:
783
		if (rdev->flags & RADEON_IS_PCIE)
772
		if (rdev->flags & RADEON_IS_PCIE)
784
			rdev->asic = &r300_asic_pcie;
773
			rdev->asic = &r300_asic_pcie;
785
		else
774
		else
786
			rdev->asic = &r300_asic;
775
			rdev->asic = &r300_asic;
787
		break;
776
		break;
788
	case CHIP_R420:
777
	case CHIP_R420:
789
	case CHIP_R423:
778
	case CHIP_R423:
790
	case CHIP_RV410:
779
	case CHIP_RV410:
791
		rdev->asic = &r420_asic;
780
		rdev->asic = &r420_asic;
792
		/* handle macs */
781
		/* handle macs */
793
		if (rdev->bios == NULL) {
782
		if (rdev->bios == NULL) {
794
			rdev->asic->get_engine_clock = &radeon_legacy_get_engine_clock;
783
			rdev->asic->get_engine_clock = &radeon_legacy_get_engine_clock;
795
			rdev->asic->set_engine_clock = &radeon_legacy_set_engine_clock;
784
			rdev->asic->set_engine_clock = &radeon_legacy_set_engine_clock;
796
			rdev->asic->get_memory_clock = &radeon_legacy_get_memory_clock;
785
			rdev->asic->get_memory_clock = &radeon_legacy_get_memory_clock;
797
			rdev->asic->set_memory_clock = NULL;
786
			rdev->asic->set_memory_clock = NULL;
798
		}
787
		}
799
		break;
788
		break;
800
	case CHIP_RS400:
789
	case CHIP_RS400:
801
	case CHIP_RS480:
790
	case CHIP_RS480:
802
		rdev->asic = &rs400_asic;
791
		rdev->asic = &rs400_asic;
803
		break;
792
		break;
804
	case CHIP_RS600:
793
	case CHIP_RS600:
805
		rdev->asic = &rs600_asic;
794
		rdev->asic = &rs600_asic;
806
		break;
795
		break;
807
	case CHIP_RS690:
796
	case CHIP_RS690:
808
	case CHIP_RS740:
797
	case CHIP_RS740:
809
		rdev->asic = &rs690_asic;
798
		rdev->asic = &rs690_asic;
810
		break;
799
		break;
811
	case CHIP_RV515:
800
	case CHIP_RV515:
812
		rdev->asic = &rv515_asic;
801
		rdev->asic = &rv515_asic;
813
		break;
802
		break;
814
	case CHIP_R520:
803
	case CHIP_R520:
815
	case CHIP_RV530:
804
	case CHIP_RV530:
816
	case CHIP_RV560:
805
	case CHIP_RV560:
817
	case CHIP_RV570:
806
	case CHIP_RV570:
818
	case CHIP_R580:
807
	case CHIP_R580:
819
		rdev->asic = &r520_asic;
808
		rdev->asic = &r520_asic;
820
		break;
809
		break;
821
	case CHIP_R600:
810
	case CHIP_R600:
822
	case CHIP_RV610:
811
	case CHIP_RV610:
823
	case CHIP_RV630:
812
	case CHIP_RV630:
824
	case CHIP_RV620:
813
	case CHIP_RV620:
825
	case CHIP_RV635:
814
	case CHIP_RV635:
826
	case CHIP_RV670:
815
	case CHIP_RV670:
827
		rdev->asic = &r600_asic;
816
		rdev->asic = &r600_asic;
828
		break;
817
		break;
829
	case CHIP_RS780:
818
	case CHIP_RS780:
830
	case CHIP_RS880:
819
	case CHIP_RS880:
831
		rdev->asic = &rs780_asic;
820
		rdev->asic = &rs780_asic;
832
		break;
821
		break;
833
	case CHIP_RV770:
822
	case CHIP_RV770:
834
	case CHIP_RV730:
823
	case CHIP_RV730:
835
	case CHIP_RV710:
824
	case CHIP_RV710:
836
	case CHIP_RV740:
825
	case CHIP_RV740:
837
		rdev->asic = &rv770_asic;
826
		rdev->asic = &rv770_asic;
838
		break;
827
		break;
839
	case CHIP_CEDAR:
828
	case CHIP_CEDAR:
840
	case CHIP_REDWOOD:
829
	case CHIP_REDWOOD:
841
	case CHIP_JUNIPER:
830
	case CHIP_JUNIPER:
842
	case CHIP_CYPRESS:
831
	case CHIP_CYPRESS:
843
	case CHIP_HEMLOCK:
832
	case CHIP_HEMLOCK:
844
		/* set num crtcs */
833
		/* set num crtcs */
845
		if (rdev->family == CHIP_CEDAR)
834
		if (rdev->family == CHIP_CEDAR)
846
			rdev->num_crtc = 4;
835
			rdev->num_crtc = 4;
847
		else
836
		else
848
			rdev->num_crtc = 6;
837
			rdev->num_crtc = 6;
849
		rdev->asic = &evergreen_asic;
838
		rdev->asic = &evergreen_asic;
850
		break;
839
		break;
851
	case CHIP_PALM:
840
	case CHIP_PALM:
852
	case CHIP_SUMO:
841
	case CHIP_SUMO:
853
	case CHIP_SUMO2:
842
	case CHIP_SUMO2:
854
		rdev->asic = &sumo_asic;
843
		rdev->asic = &sumo_asic;
855
		break;
844
		break;
856
	case CHIP_BARTS:
845
	case CHIP_BARTS:
857
	case CHIP_TURKS:
846
	case CHIP_TURKS:
858
	case CHIP_CAICOS:
847
	case CHIP_CAICOS:
859
		/* set num crtcs */
848
		/* set num crtcs */
860
		if (rdev->family == CHIP_CAICOS)
849
		if (rdev->family == CHIP_CAICOS)
861
			rdev->num_crtc = 4;
850
			rdev->num_crtc = 4;
862
		else
851
		else
863
			rdev->num_crtc = 6;
852
			rdev->num_crtc = 6;
864
		rdev->asic = &btc_asic;
853
		rdev->asic = &btc_asic;
865
		break;
854
		break;
-
 
855
	case CHIP_CAYMAN:
-
 
856
		rdev->asic = &cayman_asic;
-
 
857
		/* set num crtcs */
-
 
858
		rdev->num_crtc = 6;
866
 
859
		break;
867
	default:
860
	default:
868
		/* FIXME: not supported yet */
861
		/* FIXME: not supported yet */
869
		return -EINVAL;
862
		return -EINVAL;
870
	}
863
	}
871
 
864
 
872
	if (rdev->flags & RADEON_IS_IGP) {
865
	if (rdev->flags & RADEON_IS_IGP) {
873
		rdev->asic->get_memory_clock = NULL;
866
		rdev->asic->get_memory_clock = NULL;
874
		rdev->asic->set_memory_clock = NULL;
867
		rdev->asic->set_memory_clock = NULL;
875
	}
868
	}
876
 
869
 
877
	return 0;
870
	return 0;
878
}
871
}